On Fri, May 02, 2003 at 03:46:32PM -0400, Isaac Jones wrote:
The Debian autobuilders were unable to build hugs on a few platforms, and I tried building Hugs from the distribution tarball and got similar results on ia64 (on both Debian and Redhat). Here's what information I have. Please let me know if I can get more information for you.
[...]
This is what looks like the relevant configure output on ia64: checking if '/LD' builds loadable libraries... checking if '/LD /ML /nologo' builds loadable libraries... checking if '-shared' builds loadable libraries... checking if '-bundle' builds loadable libraries... checking if '-bundle -lc' builds loadable libraries... checking if '-r' builds loadable libraries...
And the same configure output on i386: checking if '/LD' builds loadable libraries... checking if '/LD /ML /nologo' builds loadable libraries... checking if '-shared' builds loadable libraries... -shared checking if '-bundle' builds loadable libraries... (cached) -shared checking if '-bundle -lc' builds loadable libraries... (cached) -shared checking if '-r' builds loadable libraries... (cached) -shared
Yes, the test HUGS_TRY_DYNLINK("-shared") is failing. Please try running the attached script, which is the test this is using.
However, when I alter config.h by hand to include the -shared flag, and rerun make;make install (without rerunning configure) I get this output:
[...] ERROR "/house/ijones/tmp//lib/hugs/libraries/Foreign/C/TypesISO.hs":41 - Implementation of .&. requires extra context *** Expected type : Bits CPtrdiff => CPtrdiff -> CPtrdiff -> CPtrdiff *** Missing context : Bits Int64
You can work around this one by adding an empty Bits instance instance Bits Int64 to libraries/Hugs/Int.hs -- it shouldn't be needed, but a future release will have a real instance. While you're at it, might as well add instance Bits Word64 to libraries/Hugs/Word.hs just in case. ------------------------ test script ------------------------------ cat >conftest_dl.c <<EOF int x = 0; /* global */ int y; /* common */ static int z; /* static */ static int test2() { return (test() + x + y + z); } int test() { return test2(); } EOF cat >conftest.c <<EOF #define SYMBOL1 "test" #define SYMBOL2 "_test" #define CANTRUN 1 #define CANTOPEN 2 #define SYM1_OK 3 #define SYM2_OK 4 #define CANTFIND 5 #include <stdio.h> #include <dlfcn.h> main() { void *instance; void *sym; instance = dlopen("./conftest_dl.so",1); if (instance==0) exit(CANTOPEN); sym = dlsym(instance,SYMBOL1); if (sym != 0) exit(SYM1_OK); sym = dlsym(instance,SYMBOL2); if (sym != 0) exit(SYM2_OK); exit(CANTFIND); } EOF gcc -shared conftest_dl.c -o conftest_dl.so gcc conftest.c -ldl ./a.out echo $?