Subject: an emulation environment dilema...
To: NetBSD-current Discussion List <current-users@netbsd.org>
From: Greg A. Woods <woods@most.weird.com>
List: current-users
Date: 10/22/1998 20:37:52
Today I was trying to fix a makefile that's supposed to be highly
portable, and so I thought I'd get a copy of the SunOS-4 sun4 make
binary and using emulation mode see if the makefile was at least still
understood properly by SunOS-4 make.
Unfortunately SunOS-4 make execs /bin/arch (among other things), using
that explicit path.
20:35 [277] $ /emul/sunos/bin/make -n
/bin/arch: not found
make: Fatal error: Execute of /bin/arch failed
20:35 [278] $ ls -l /emul/sunos/bin
lrwxr-xr-x 1 root wheel 7 Oct 22 13:40 /emul/sunos/bin -> usr/bin
20:36 [279] $ ls -l /emul/sunos/usr/bin
total 770
-rwxr-xr-x 1 woods wheel 1010 Oct 22 13:40 arch
-rwxr-xr-x 1 woods wheel 90112 Oct 22 19:27 awk
-rwxr-xr-x 1 woods wheel 115472 Oct 22 13:40 make
-rwxr-xr-x 1 woods wheel 163840 Oct 22 19:27 nawk
20:36 [280] $ /emul/sunos/bin/arch
unknown
Now since there's no /bin/arch in NetBSD I could put a fake /bin/arch on
my system, or I could get the real SunOS-4 /bin/arch and put a symlink
from /bin/arch to /emul/sunos/bin.
However this raises the question of what to do when you have an emulated
binary that execs a conflicting program *and* depends on the behaviour
of the emulated OS' version of the program.
Is this beyond even the theoretical limits of the /emul system, or might
it be possible to make the exec() wrapper slightly smarter so that it
first tries prefixing the path with "/emul/$os/" first?
--
Greg A. Woods
+1 416 218-0098 VE3TCP <gwoods@acm.org> <robohack!woods>
Planix, Inc. <woods@planix.com>; Secrets of the Weird <woods@weird.com>