wingo pushed a commit to branch lightning
in repository guile.
commit 4d0e4b32a11fc621671b4d622043b380d42e8ae7
Author: Paulo Andrade <[email protected]>
Date: Wed Sep 24 14:32:49 2014 -0300
x86: Build and pass all tests on 32 bit cygwin
* check/lightning.c: Add workaround to conflicting global
optind variable in cygwin binutils that have an internal
getopt* implementation.
* lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building
for 32 bit and there is no ffsl function.
---
ChangeLog | 9 +++++++++
check/lightning.c | 10 ++++++++++
lib/jit_x86-cpu.c | 6 +++++-
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 3e6e0db..059f0ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2014-09-24 Paulo Andrade <[email protected]>
+ * check/lightning.c: Add workaround to conflicting global
+ optind variable in cygwin binutils that have an internal
+ getopt* implementation.
+
+ * lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building
+ for 32 bit and there is no ffsl function.
+
+2014-09-24 Paulo Andrade <[email protected]>
+
* check/lightning.c: Add a hopefully temporary kludge to not use
sprintf and sscanf returned by dlsym. This is required to pass
the varargs test.
diff --git a/check/lightning.c b/check/lightning.c
index 47e39a3..83b6ab7 100644
--- a/check/lightning.c
+++ b/check/lightning.c
@@ -3952,6 +3952,16 @@ main(int argc, char *argv[])
int opt_short;
char cmdline[8192];
+#if __WORDSIZE == 32 && defined(__CYGWIN__)
+ /* Cause a compile warning about redefinition without dllimport
+ * attribute, *but* cause correct linkage if liblightning.a is
+ * linked to binutils (that happens to have an internal
+ * getopt* implementation and an apparently conflicting
+ * optind global variable) */
+ extern int optind;
+ optind = 1;
+#endif
+
progname = argv[0];
init_jit(progname);
diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c
index c24ad16..8a0ce11 100644
--- a/lib/jit_x86-cpu.c
+++ b/lib/jit_x86-cpu.c
@@ -639,8 +639,12 @@ static void _prolog(jit_state_t*, jit_node_t*);
static void _epilog(jit_state_t*, jit_node_t*);
# define patch_at(node, instr, label) _patch_at(_jit, node, instr, label)
static void _patch_at(jit_state_t*, jit_node_t*, jit_word_t, jit_word_t);
-# if __WORDSIZE == 64 && !defined(HAVE_FFSL)
+# if !defined(HAVE_FFSL)
+# if __WORDSIZE == 32
+# define ffsl(i) ffs(i)
+# else
static int ffsl(long);
+# endif
# endif
#endif