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

Reply via email to