On Sat, Feb 01, 2014 at 07:35:15PM +0100, Peter Bex wrote: > Thanks, pushed. Because I tagged 4.8.3 (after Evan's patch introducing > a change to our types.db type hierarchy that seemed a good idea) I > had to move the NEWS entry to be below a 4.8.4 heading.
I read up on ORIGIN support in NetBSD, and as noted in our manual, NetBSD supports origin from 5.0 onwards. Since older versions of NetBSD are no longer supported (4.0 got EOL'ed November 2012, see http://blog.netbsd.org/tnf/entry/end_of_life_for_4) I think it's safe to enable it on NetBSD as well. As explained in the problem report here http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=42420 this only works when invoking the binary through its absolute path (which includes running it implicitly, via $PATH), so I've updated our tests to prefix the deploy test program with `pwd`, and now it works on NetBSD as well. Please see the attached patch. Cheers, Peter -- http://www.more-magic.net
>From 44059bd01539e6509e89f2a418388b8c87501fa0 Mon Sep 17 00:00:00 2001 From: Peter Bex <[email protected]> Date: Sat, 1 Feb 2014 20:05:06 +0100 Subject: [PATCH] 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. --- NEWS | 2 +- README | 9 +++++++++ csc.scm | 6 +++--- manual/Deployment | 9 ++++++--- tests/runtests.sh | 5 +++-- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index 6589729..13b3487 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 a063af3..5be3e3c 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 6d1ce58..4063247 100644 --- a/csc.scm +++ b/csc.scm @@ -68,7 +68,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)) @@ -265,7 +264,7 @@ (list (conc "-L\"" library-dir "\"") (conc " -Wl,-R\"" - (if (and deployed (not netbsd)) + (if deployed "\\$ORIGIN" (prefix "" "lib" (if host-mode @@ -277,7 +276,8 @@ (else (list (conc "-L\"" library-dir "\"")))) (if (and deployed (or (eq? (software-version) 'freebsd) - (eq? (software-version) 'openbsd))) + (eq? (software-version) 'openbsd) + (eq? (software-version) 'netbsd))) (list "-Wl,-z,origin") '()) (cond ((get-environment-variable "CHICKEN_C_LIBRARY_PATH") => diff --git a/manual/Deployment b/manual/Deployment index 70d7223..fd3c88c 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 9388a32..4302a9e 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 -- 1.7.10.4
_______________________________________________ Chicken-hackers mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/chicken-hackers
