I'm taking over maintainership of the Fedora GCL package, effective
today.  I've grabbed the current Debian patch.  Even with that patch,
I'm getting a build failure, due to h/unrandomize.h.  Essentially, it
is not possible to #include <unistd.h> inside a function when
compiling with both optimization and -D_FORTIFY_SOURCE.  When I
complained about this to the glibc maintainers, they replied:

  Then GCL is buggy.  Standard headers are never meant to be included
  inside of a function.  E.g. ISO C99 says in 7.1.2/4:
  ... "If used, a header shall be included outside of any external
declaration or
  definition, and it shall first be included before the first
reference to any of
  the functions or objects it declares, or to any of the types or macros it
  defines."...

So here is a patch to move the #include statements out of functions.
After applying this patch, configure will need to be regenerated.

diff -dur gcl-2.6.7.ORIG/configure.in gcl-2.6.7/configure.in
--- gcl-2.6.7.ORIG/configure.in 2008-11-03 16:58:14.000000000 -0700
+++ gcl-2.6.7/configure.in      2008-11-04 08:58:03.000000000 -0700
@@ -1032,7 +1032,11 @@
        fi

        AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
-       AC_TRY_RUN([void gprof_cleanup() {};
+       AC_TRY_RUN([#include <sys/personality.h>
+                   #include <syscall.h>
+                   #include <unistd.h>
+                   #include <alloca.h>
+                   void gprof_cleanup() {};
                    int main(int argc,char *argv[],char *envp[]) {
                    #include "h/unrandomize.h"
                    return 
0;}],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
diff -dur gcl-2.6.7.ORIG/h/unrandomize.h gcl-2.6.7/h/unrandomize.h
--- gcl-2.6.7.ORIG/h/unrandomize.h      2008-11-03 16:58:16.000000000 -0700
+++ gcl-2.6.7/h/unrandomize.h   2008-11-04 08:58:24.000000000 -0700
@@ -1,8 +1,3 @@
-#include <sys/personality.h>
-#include <syscall.h>
-#include <unistd.h>
-#include <alloca.h>
-
 {

   long pers = personality(0xffffffffUL);
diff -dur gcl-2.6.7.ORIG/o/main.c gcl-2.6.7/o/main.c
--- gcl-2.6.7.ORIG/o/main.c     2008-11-03 16:58:56.000000000 -0700
+++ gcl-2.6.7/o/main.c  2008-11-04 09:00:38.000000000 -0700
@@ -27,6 +27,11 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#ifdef CAN_UNRANDOMIZE_SBRK
+#include <sys/personality.h>
+#include <syscall.h>
+#include <alloca.h>
+#endif

 static void
 init_main(void);

Regards,
-- 
Jerry James
http://loganjerry.googlepages.com/


_______________________________________________
Gcl-devel mailing list
Gcl-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/gcl-devel

Reply via email to