Hi Simon,
it's simple, every lib is rpath-ed except the libffi. See:
End of readFile001 compilation with -v looks:
*** Linker:
/usr/sfw/bin/gcc -DTABLES_NEXT_TO_CODE -o readFile001 readFile001.o
-L/export/home/karel/vcs/ghc-src/ghc-head/libraries/base/dist-install/build
-Wl,-rpath
-Wl,/export/home/karel/vcs/ghc-src/ghc-head/libraries/base/dist-install/build
-L/export/home/karel/vcs/ghc-src/ghc-head/libraries/integer-gmp/dist-install/build
-Wl,-rpath
-Wl,/export/home/karel/vcs/ghc-src/ghc-head/libraries/integer-gmp/dist-install/build
-L/export/home/karel/vcs/ghc-src/ghc-head/libraries/ghc-prim/dist-install/build
-Wl,-rpath
-Wl,/export/home/karel/vcs/ghc-src/ghc-head/libraries/ghc-prim/dist-install/build
-L/export/home/karel/vcs/ghc-src/ghc-head/rts/dist/build -Wl,-rpath
-Wl,/export/home/karel/vcs/ghc-src/ghc-head/rts/dist/build
/tmp/ghc28147_0/ghc28147_0.o -lHSbase-4.7.0.0-ghc7.7.20130125
-lHSinteger-gmp-0.5.1.0-ghc7.7.20130125 -lgmp
-lHSghc-prim-0.3.1.0-ghc7.7.20130125 -lHSrts-ghc7.7.20130125 -lm -lrt
-ldl -u ghczmprim_GHCziTypes_Izh_static_info -u
ghczmprim_GHCziTypes_Czh_static_info -u
ghczmprim_GHCziTypes_Fzh_static_info -u
ghczmprim_GHCziTypes_Dzh_static_info -u base_GHCziPtr_Ptr_static_info -u
ghczmprim_GHCziTypes_Wzh_static_info -u base_GHCziInt_I8zh_static_info
-u base_GHCziInt_I16zh_static_info -u base_GHCziInt_I32zh_static_info -u
base_GHCziInt_I64zh_static_info -u base_GHCziWord_W8zh_static_info -u
base_GHCziWord_W16zh_static_info -u base_GHCziWord_W32zh_static_info -u
base_GHCziWord_W64zh_static_info -u
base_GHCziStable_StablePtr_static_info -u
ghczmprim_GHCziTypes_Izh_con_info -u ghczmprim_GHCziTypes_Czh_con_info
-u ghczmprim_GHCziTypes_Fzh_con_info -u
ghczmprim_GHCziTypes_Dzh_con_info -u base_GHCziPtr_Ptr_con_info -u
base_GHCziPtr_FunPtr_con_info -u base_GHCziStable_StablePtr_con_info -u
ghczmprim_GHCziTypes_False_closure -u ghczmprim_GHCziTypes_True_closure
-u base_GHCziPack_unpackCString_closure -u
base_GHCziIOziException_stackOverflow_closure -u
base_GHCziIOziException_heapOverflow_closure -u
base_ControlziExceptionziBase_nonTermination_closure -u
base_GHCziIOziException_blockedIndefinitelyOnMVar_closure -u
base_GHCziIOziException_blockedIndefinitelyOnSTM_closure -u
base_ControlziExceptionziBase_nestedAtomically_closure -u
base_GHCziWeak_runFinalizzerBatch_closure -u
base_GHCziTopHandler_flushStdHandles_closure -u
base_GHCziTopHandler_runIO_closure -u
base_GHCziTopHandler_runNonIO_closure -u
base_GHCziConcziIO_ensureIOManagerIsRunning_closure -u
base_GHCziConcziSync_runSparks_closure -u
base_GHCziConcziSignal_runHandlers_closure
link: done
*** Deleting temp files:
Deleting: /tmp/ghc28147_0/ghc28147_0.o /tmp/ghc28147_0/ghc28147_0.c
*** Deleting temp dirs:
Deleting: /tmp/ghc28147_0
there is no libffi linked there as it's linked in RTS lib already. it's
probably not rpath-ed there (for obvious reason) so ldd's output on the
test looks:
$ ldd readFile001
libHSbase-4.7.0.0-ghc7.7.20130125.so =>
/export/home/karel/vcs/ghc-src/ghc-head/libraries/base/dist-install/build/libHSbase-4.7.0.0-ghc7.7.20130125.so
libHSinteger-gmp-0.5.1.0-ghc7.7.20130125.so =>
/export/home/karel/vcs/ghc-src/ghc-head/libraries/integer-gmp/dist-install/build/libHSinteger-gmp-0.5.1.0-ghc7.7.20130125.so
libgmp.so.3 => /usr/lib/libgmp.so.3
libHSghc-prim-0.3.1.0-ghc7.7.20130125.so =>
/export/home/karel/vcs/ghc-src/ghc-head/libraries/ghc-prim/dist-install/build/libHSghc-prim-0.3.1.0-ghc7.7.20130125.so
libHSrts-ghc7.7.20130125.so =>
/export/home/karel/vcs/ghc-src/ghc-head/rts/dist/build/libHSrts-ghc7.7.20130125.so
libm.so.2 => /lib/libm.so.2
librt.so.1 => /lib/librt.so.1
libdl.so.1 => /lib/libdl.so.1
libc.so.1 => /lib/libc.so.1
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1
libffi.so.6 => (file not found)
And of course for the purpose of the test I've unset LD_LIBRARY_PATH
completely:
karel@silence:~/vcs/ghc-src/ghc-head/libraries/base/tests/IO$ echo
$LD_LIBRARY_PATH
karel@silence:~/vcs/ghc-src/ghc-head/libraries/base/tests/IO$
So that's why I've thought my solution of setting LD_LIBRARY_PATH in
runtests is the most easiest one but if you prefer something different
just let me know.
Thanks!
Karel
On 01/25/13 09:02 AM, Simon Marlow wrote:
Hold on a minute. Why do you need to set LD_LIBRARY_PATH? It should be
unnecessary because the binaries are linked with -rpath options so they
can find their libraries.
Cheers,
Simon
On 25/01/13 01:33, David Terei wrote:
Committed. Thanks!
On 24 January 2013 13:28, Karel Gardas <karel.gar...@centrum.cz> wrote:
This patch follows Windows and Darwin way of setting environment
variable
to set the file-system paths to GHC's shared libraries. It does the same
thing for any other OS, which should be Unix-like OS presumably. This
patch fixes a lot of `dyn' tests failures on Solaris which fail with
following
error message:
Failed to open shared library: ld.so.1: T3807-load: fatal:
libffi.so.6: open failed: No such file or directory
---
driver/runtests.py | 48 ++++++++++++++++++++++++++----------------------
1 files changed, 26 insertions(+), 22 deletions(-)
diff --git a/driver/runtests.py b/driver/runtests.py
index 66e3bf4..16deda6 100644
--- a/driver/runtests.py
+++ b/driver/runtests.py
@@ -181,28 +181,32 @@ from testlib import *
# On Windows we need to set $PATH to include the paths to all the DLLs
# in order for the dynamic library tests to work.
-if windows or darwin:
- pkginfo = getStdout([config.ghc_pkg, 'dump'])
- topdir = config.libdir
- for line in pkginfo.split('\n'):
- if line.startswith('library-dirs:'):
- path = line.rstrip()
- path = re.sub('^library-dirs: ', '', path)
- path = re.sub('\\$topdir', topdir, path)
- if path.startswith('"'):
- path = re.sub('^"(.*)"$', '\\1', path)
- path = re.sub('\\\\(.)', '\\1', path)
- if windows:
- if config.cygwin:
- # On cygwin we can't put "c:\foo" in $PATH, as : is a
- # field separator. So convert to /cygdrive/c/foo instead.
- # Other pythons use ; as the separator, so no problem.
- path = re.sub('([a-zA-Z]):', '/cygdrive/\\1', path)
- path = re.sub('\\\\', '/', path)
- os.environ['PATH'] = os.pathsep.join([path, os.environ.get("PATH",
"")])
- else:
- # darwin
- os.environ['DYLD_LIBRARY_PATH'] = os.pathsep.join([path,
os.environ.get("DYLD_LIBRARY_PATH", "")])
+# if windows or darwin:
+pkginfo = getStdout([config.ghc_pkg, 'dump'])
+topdir = config.libdir
+for line in pkginfo.split('\n'):
+ if line.startswith('library-dirs:'):
+ path = line.rstrip()
+ path = re.sub('^library-dirs: ', '', path)
+ path = re.sub('\\$topdir', topdir, path)
+ if path.startswith('"'):
+ path = re.sub('^"(.*)"$', '\\1', path)
+ path = re.sub('\\\\(.)', '\\1', path)
+ if windows:
+ if config.cygwin:
+ # On cygwin we can't put "c:\foo" in $PATH, as : is a
+ # field separator. So convert to /cygdrive/c/foo instead.
+ # Other pythons use ; as the separator, so no problem.
+ path = re.sub('([a-zA-Z]):', '/cygdrive/\\1', path)
+ path = re.sub('\\\\', '/', path)
+ os.environ['PATH'] = os.pathsep.join([path, os.environ.get("PATH",
"")])
+ elif darwin:
+ # darwin
+ os.environ['DYLD_LIBRARY_PATH'] = os.pathsep.join([path,
os.environ.get("DYLD_LIBRARY_PATH", "")])
+ else:
+ # unix
+ os.environ['LD_LIBRARY_PATH'] = os.pathsep.join([path,
os.environ.get("LD_LIBRARY_PATH", "")])
+
global testopts_local
testopts_local.x = TestOptions()
--
1.7.3.2
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs