~ chicken-core (chicken-5) 26b5e92be64a2d022f355499815ffe9b8b670287
commit 26b5e92be64a2d022f355499815ffe9b8b670287
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Sat Feb 1 20:05:06 2014 +0100
Commit: Christian Kellermann <ckeen@pestilenz.org>
CommitDate: Mon Feb 3 16:56:11 2014 +0100
Enable -deploy ($ORIGIN) support for NetBSD
It works, but with a small caveat: it's been added since 5.0 and
the program must be invoked through an absolute path when running
it. This works implicitly when running the program without a
path (ie through $PATH), as well.
Signed-off-by: Christian Kellermann <ckeen@pestilenz.org>
diff --git a/NEWS b/NEWS
index 65897290..13b34879 100644
--- a/NEWS
+++ b/NEWS
@@ -2,7 +2,7 @@
- Tools
- csc "-deploy" works now on FreeBSD (thanks to Jules Altfas and
- Vitaly Magerya) and OpenBSD.
+ Vitaly Magerya), OpenBSD and NetBSD (see README for NetBSD).
4.8.3
diff --git a/README b/README
index ff4c29f3..7b36ab08 100644
--- a/README
+++ b/README
@@ -393,6 +393,15 @@
% unlimit datasize
+ - When using -deploy on NetBSD, currently the kernel only
+ supports running the program through its absolute path,
+ otherwise you will get an error message stating:
+
+ execname not specified in AUX vector: No such file or directory
+
+ Deployed binaries can also be run without an explicit path,
+ through $PATH; only relative pathnames do not work.
+
- Using external libraries on NetBSD may also be easier, if
you add the following definitions to `Makefile.bsd':
diff --git a/csc.scm b/csc.scm
index dddbbb98..5b3c8dfc 100644
--- a/csc.scm
+++ b/csc.scm
@@ -69,7 +69,6 @@
(define mingw (eq? (build-platform) 'mingw32))
(define osx (eq? (software-version) 'macosx))
(define win mingw)
-(define netbsd (eq? (software-version) 'netbsd))
(define cygwin (eq? (build-platform) 'cygwin))
(define aix (eq? (build-platform) 'aix))
@@ -266,7 +265,7 @@
(list
(conc "-L\"" library-dir "\"")
(conc " -Wl,-R\""
- (if (and deployed (not netbsd))
+ (if deployed
"\\$ORIGIN"
(prefix "" "lib"
(if host-mode
@@ -277,8 +276,7 @@
(list (conc "-Wl,-R\"" library-dir "\"")))
(else
(list (conc "-L\"" library-dir "\""))))
- (if (and deployed (or (eq? (software-version) 'freebsd)
- (eq? (software-version) 'openbsd)))
+ (if (and deployed (memq (software-version) '(freebsd openbsd netbsd)))
(list "-Wl,-z,origin")
'())
(cond ((get-environment-variable "CHICKEN_C_LIBRARY_PATH") =>
diff --git a/manual/Deployment b/manual/Deployment
index 70d7223d..fd3c88c2 100644
--- a/manual/Deployment
+++ b/manual/Deployment
@@ -164,9 +164,12 @@ will list dynamic libraries that your application needs.
===== Other UNIX flavors
Setting up the application executable to load runtime libraries from
-the same directory is supported on FreeBSD, OpenBSD and Solaris.
-NetBSD supports this from version 5.0 onwards - this is currently
-disabled in {{csc}} for this particular platform.
+the same directory is supported on FreeBSD, NetBSD, OpenBSD and Solaris.
+
+Under NetBSD, you must invoke the binary using its full absolute path
+(or via {{$PATH}}), otherwise it will give you an error message:
+
+ execname not specified in AUX vector: No such file or directory
On AIX, deployment is currently not fully supported as the runtime
linker will only load libraries from paths hardcoded at link time.
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 9388a32f..4302a9e2 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -425,9 +425,10 @@ if test $OS_NAME != AIX; then
CHICKEN_REPOSITORY=$CHICKEN_REPOSITORY $compile2 -deploy rev-app.scm
CHICKEN_REPOSITORY=$CHICKEN_REPOSITORY $CHICKEN_INSTALL -deploy -prefix rev-app -t local -l $TEST_DIR reverser
unset LD_LIBRARY_PATH DYLD_LIBRARY_PATH CHICKEN_REPOSITORY
- rev-app/rev-app 1.1
+ # An absolute path is required on NetBSD with $ORIGIN, hence `pwd`
+ `pwd`/rev-app/rev-app 1.1
mv rev-app rev-app-2
- rev-app-2/rev-app 1.1
+ `pwd`/rev-app-2/rev-app 1.1
else
echo "Disabling deployment tests, as deployment is currently unsupported on AIX."
fi
Trap