summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heim <phreak@gentoo.org>2007-04-22 13:55:57 +0000
committerChristian Heim <phreak@gentoo.org>2007-04-22 13:55:57 +0000
commit07df0cfabaa8b1efa2bd4c114c3d87516a3d8fcd (patch)
tree226dd9660f65438dd265c2ac479a7f023ba54aa0 /dev-lang
parentppc stable, bug #173864 (diff)
downloadgentoo-2-07df0cfabaa8b1efa2bd4c114c3d87516a3d8fcd.tar.gz
gentoo-2-07df0cfabaa8b1efa2bd4c114c3d87516a3d8fcd.tar.bz2
gentoo-2-07df0cfabaa8b1efa2bd4c114c3d87516a3d8fcd.zip
Revision bump, fixing #153382 (ocaml produces binaries contain executable stacks), #134403 (dev-lang/ocaml-3.08.4 emerge failed on hardened amd64) and #110541 (ERROR: dev-lang/ocaml-3.08.3 failed.) - this makes dev-lang/ocaml "useable" on hardened boxes.
(Portage version: 2.1.2.4)
Diffstat (limited to 'dev-lang')
-rw-r--r--dev-lang/ocaml/ChangeLog13
-rw-r--r--dev-lang/ocaml/files/digest-ocaml-3.09.3-r13
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch40
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-configure.patch120
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch281
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch13
-rw-r--r--dev-lang/ocaml/ocaml-3.09.3-r1.ebuild122
7 files changed, 591 insertions, 1 deletions
diff --git a/dev-lang/ocaml/ChangeLog b/dev-lang/ocaml/ChangeLog
index 56f252bbdbd5..8d1266cd9ede 100644
--- a/dev-lang/ocaml/ChangeLog
+++ b/dev-lang/ocaml/ChangeLog
@@ -1,6 +1,17 @@
# ChangeLog for dev-lang/ocaml
# Copyright 2002-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-lang/ocaml/ChangeLog,v 1.97 2007/04/15 20:17:05 corsair Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-lang/ocaml/ChangeLog,v 1.98 2007/04/22 13:55:57 phreak Exp $
+
+*ocaml-3.09.3-r1 (22 Apr 2007)
+
+ 22 Apr 2007; Christian Heim <phreak@gentoo.org>
+ +files/ocaml-3.09.3-Makefile.patch, +files/ocaml-3.09.3-configure.patch,
+ +files/ocaml-3.09.3-exec-stack-fixes.patch,
+ +files/ocaml-3.09.3-execheap.patch, +ocaml-3.09.3-r1.ebuild:
+ Revision bump, fixing #153382 (ocaml produces binaries contain executable
+ stacks), #134403 (dev-lang/ocaml-3.08.4 emerge failed on hardened amd64) and
+ #110541 (ERROR: dev-lang/ocaml-3.08.3 failed.) - this makes dev-lang/ocaml
+ "useable" on hardened boxes.
15 Apr 2007; Markus Rothe <corsair@gentoo.org> ocaml-3.09.3.ebuild:
Stable on ppc64
diff --git a/dev-lang/ocaml/files/digest-ocaml-3.09.3-r1 b/dev-lang/ocaml/files/digest-ocaml-3.09.3-r1
new file mode 100644
index 000000000000..231a74a7d1d6
--- /dev/null
+++ b/dev-lang/ocaml/files/digest-ocaml-3.09.3-r1
@@ -0,0 +1,3 @@
+MD5 8b3744efd0d51b82d55b61d0e2bf0e2b ocaml-3.09.3.tar.bz2 2038617
+RMD160 fdc124218c556c62c897ee6720970279e2d5426b ocaml-3.09.3.tar.bz2 2038617
+SHA256 607842b4f4917a759f19541a421370a834f5b948855ca54cef40d22b19a0934f ocaml-3.09.3.tar.bz2 2038617
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch b/dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch
new file mode 100644
index 000000000000..c2ea2d443328
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch
@@ -0,0 +1,40 @@
+Index: ocaml-3.09.3/Makefile
+===================================================================
+--- ocaml-3.09.3.orig/Makefile
++++ ocaml-3.09.3/Makefile
+@@ -282,7 +282,7 @@ clean:: partialclean
+
+ ocamlc: $(COMPOBJS)
+ $(CAMLC) $(LINKFLAGS) -o ocamlc $(COMPOBJS)
+- @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlc|' \
++ @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlc|g' \
+ driver/ocamlcomp.sh.in > ocamlcomp.sh
+ @chmod +x ocamlcomp.sh
+
+@@ -293,7 +293,7 @@ partialclean::
+
+ ocamlopt: $(OPTOBJS)
+ $(CAMLC) $(LINKFLAGS) -o ocamlopt $(OPTOBJS)
+- @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlopt|' \
++ @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlopt|g' \
+ driver/ocamlcomp.sh.in > ocamlcompopt.sh
+ @chmod +x ocamlcompopt.sh
+
+@@ -383,7 +383,7 @@ ocamlc.opt: $(COMPOBJS:.cmo=.cmx)
+ $(CAMLOPT) $(LINKFLAGS) -ccopt "$(BYTECCLINKOPTS)" -o ocamlc.opt \
+ $(COMPOBJS:.cmo=.cmx) \
+ asmrun/meta.o asmrun/dynlink.o -cclib "$(BYTECCLIBS)"
+- @sed -e 's|@compiler@|$$topdir/ocamlc.opt|' \
++ @sed -e 's|@compiler@|$$topdir/ocamlc.opt|g' \
+ driver/ocamlcomp.sh.in > ocamlcomp.sh
+ @chmod +x ocamlcomp.sh
+
+@@ -394,7 +394,7 @@ partialclean::
+
+ ocamlopt.opt: $(OPTOBJS:.cmo=.cmx)
+ $(CAMLOPT) $(LINKFLAGS) -o ocamlopt.opt $(OPTOBJS:.cmo=.cmx)
+- @sed -e 's|@compiler@|$$topdir/ocamlopt.opt|' \
++ @sed -e 's|@compiler@|$$topdir/ocamlopt.opt|g' \
+ driver/ocamlcomp.sh.in > ocamlcompopt.sh
+ @chmod +x ocamlcompopt.sh
+
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-configure.patch b/dev-lang/ocaml/files/ocaml-3.09.3-configure.patch
new file mode 100644
index 000000000000..c458f6987dbc
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-configure.patch
@@ -0,0 +1,120 @@
+Index: ocaml-3.09.3/configure
+===================================================================
+--- ocaml-3.09.3.orig/configure
++++ ocaml-3.09.3/configure
+@@ -240,65 +240,65 @@ exe=""
+ case "$bytecc,$host" in
+ cc,*-*-nextstep*)
+ # GNU C extensions disabled, but __GNUC__ still defined!
+- bytecccompopts="-fno-defer-pop $gcc_warnings -U__GNUC__ -posix"
+- bytecclinkopts="-posix";;
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -U__GNUC__ -posix"
++ bytecclinkopts="$bytecclinkopts -posix";;
+ *,*-*-rhapsody*)
+ # Almost the same as NeXTStep
+- bytecccompopts="-fno-defer-pop $gcc_warnings -DSHRINKED_GNUC"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -DSHRINKED_GNUC"
+ mathlib="";;
+ *,*-*-darwin*)
+ # Almost the same as rhapsody
+- bytecccompopts="-fno-defer-pop -no-cpp-precomp $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop -no-cpp-precomp $gcc_warnings"
+ mathlib="";;
+ *,*-*-beos*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings"
+ # No -lm library
+ mathlib="";;
+ gcc,alpha*-*-osf*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings"
+ if cc="$bytecc" sh ./hasgot -mieee; then
+ bytecccompopts="-mieee $bytecccompopts";
+ fi
+ # Put code and static data in lower 4GB
+- bytecclinkopts="-Wl,-T,12000000 -Wl,-D,14000000"
++ bytecclinkopts="$bytecclinkopts -Wl,-T,12000000 -Wl,-D,14000000"
+ # Tell gcc that we can use 32-bit code addresses for threaded code
+ echo "#define ARCH_CODE32" >> m.h;;
+ cc,alpha*-*-osf*)
+- bytecccompopts="-std1 -ieee";;
++ bytecccompopts="$bytecccompopts -std1 -ieee";;
+ gcc,alpha*-*-linux*)
+ if cc="$bytecc" sh ./hasgot -mieee; then
+ bytecccompopts="-mieee $bytecccompopts";
+ fi;;
+ cc,mips-*-irix6*)
+ # Add -n32 flag to ensure compatibility with native-code compiler
+- bytecccompopts="-n32"
++ bytecccompopts="$bytecccompopts -n32"
+ # Turn off warning "unused library"
+- bytecclinkopts="-n32 -Wl,-woff,84";;
++ bytecclinkopts="$bytecclinkopts -n32 -Wl,-woff,84";;
+ cc*,mips-*-irix6*)
+ # (For those who want to force "cc -64")
+ # Turn off warning "unused library"
+- bytecclinkopts="-Wl,-woff,84";;
++ bytecclinkopts="$bytecclinkopts -Wl,-woff,84";;
+ *,alpha*-*-unicos*)
+ # For the Cray T3E
+- bytecccompopts="-DUMK";;
++ bytecccompopts="$bytecccompopts -DUMK";;
+ gcc*,powerpc-*-aix*)
+ # Avoid name-space pollution by requiring Unix98-conformant includes
+- bytecccompopts="-fno-defer-pop $gcc_warnings -D_XOPEN_SOURCE=500";;
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -D_XOPEN_SOURCE=500";;
+ *,powerpc-*-aix*)
+- bytecccompopts="-D_XOPEN_SOURCE=500";;
++ bytecccompopts="$bytecccompopts -D_XOPEN_SOURCE=500";;
+ gcc*,*-*-cygwin*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings -U_WIN32"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -U_WIN32"
+ exe=".exe"
+ ostype="Cygwin";;
+ gcc*,x86_64-*-linux*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings"
+ # Tell gcc that we can use 32-bit code addresses for threaded code
+ # unless we are compiled for a shared library (-fPIC option)
+ echo "#ifndef __PIC__" >> m.h
+ echo "# define ARCH_CODE32" >> m.h
+ echo "#endif" >> m.h;;
+ gcc*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings";;
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings";;
+ esac
+
+ # Configure compiler to use in further tests
+@@ -609,22 +609,22 @@ else
+ nativecc="$ccoption"
+ fi
+
+-nativecccompopts=''
+-nativecclinkopts=''
++nativecccompopts=""
++nativecclinkopts=""
+ nativeccrpath="$byteccrpath"
+
+ case "$arch,$nativecc,$system,$host_type" in
+- alpha,cc*,digital,*) nativecccompopts=-std1;;
+- mips,cc*,irix,*) nativecccompopts=-n32
+- nativecclinkopts="-n32 -Wl,-woff,84";;
+- *,*,nextstep,*) nativecccompopts="$gcc_warnings -U__GNUC__ -posix"
+- nativecclinkopts="-posix";;
++ alpha,cc*,digital,*) nativecccompopts="$nativecccompopts -std1";;
++ mips,cc*,irix,*) nativecccompopts="$nativecccompopts -n32"
++ nativecclinkopts="$nativecclinkopts -n32 -Wl,-woff,84";;
++ *,*,nextstep,*) nativecccompopts="$nativecccompopts $gcc_warnings -U__GNUC__ -posix"
++ nativecclinkopts="$nativecclinkopts -posix";;
+ *,*,rhapsody,*darwin[1-5].*)
+- nativecccompopts="$gcc_warnings -DSHRINKED_GNUC";;
++ nativecccompopts="$nativecccompopts $gcc_warnings -DSHRINKED_GNUC";;
+ *,*,rhapsody,*)
+- nativecccompopts="$gcc_warnings -DDARWIN_VERSION_6 $dl_defs";;
++ nativecccompopts="$nativecccompopts $gcc_warnings -DDARWIN_VERSION_6 $dl_defs";;
+ *,gcc*,cygwin,*) nativecccompopts="$gcc_warnings -U_WIN32";;
+- *,gcc*,*,*) nativecccompopts="$gcc_warnings";;
++ *,gcc*,*,*) nativecccompopts="$nativecccompopts $gcc_warnings";;
+ esac
+
+ asflags=''
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch b/dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch
new file mode 100644
index 000000000000..3d46d4aede38
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch
@@ -0,0 +1,281 @@
+--- ocaml-3.09.3/asmrun/alpha.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/alpha.S 2006-11-02 18:53:12.000000000 +0100
+@@ -438,3 +438,7 @@
+ .word -1 /* negative frame size => use callback link */
+ .word 0 /* no roots here */
+ .align 3
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/amd64.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/amd64.S 2006-11-02 18:53:12.000000000 +0100
+@@ -334,3 +334,7 @@
+ .align 16
+ caml_absf_mask:
+ .quad 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/arm.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/arm.S 2006-11-02 18:53:12.000000000 +0100
+@@ -337,3 +337,7 @@
+ .short -1 /* negative frame size => use callback link */
+ .short 0 /* no roots */
+ .align 2
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/hppa.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/hppa.S 2006-11-02 18:53:12.000000000 +0100
+@@ -532,3 +532,7 @@
+ .long L104 + 3 /* return address into callback */
+ .short -1 /* negative frame size => use callback link */
+ .short 0 /* no roots */
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/i386.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/i386.S 2006-11-02 18:53:12.000000000 +0100
+@@ -371,3 +371,7 @@
+ #ifdef __ELF__
+ .section .note.GNU-stack,"",%progbits
+ #endif
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/ia64.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/ia64.S 2006-11-02 18:53:12.000000000 +0100
+@@ -528,3 +528,7 @@
+
+ .common caml_saved_bsp#, 8, 8
+ .common caml_saved_rnat#, 8, 8
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/m68k.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/m68k.S 2006-11-02 18:53:12.000000000 +0100
+@@ -242,3 +242,7 @@
+ .long L107 | return address into callback
+ .word -1 | negative frame size => use callback link
+ .word 0 | no roots here
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/power-elf.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/power-elf.S 2006-11-02 18:53:12.000000000 +0100
+@@ -419,3 +419,7 @@
+ .short -1 /* negative size count => use callback link */
+ .short 0 /* no roots here */
+
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/sparc.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/sparc.S 2006-11-02 18:53:12.000000000 +0100
+@@ -405,3 +405,7 @@
+ .type Caml_raise_exception, #function
+ .type Caml_system__frametable, #object
+ #endif
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+diff -ru ../ref/ocaml-3.09.3/asmcomp/alpha/emit.mlp ocaml-3.09.3/asmcomp/alpha/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/alpha/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/alpha/emit.mlp 2006-11-03 10:35:40.000000000 +0100
+@@ -811,6 +811,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -843,6 +849,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly () =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .globl {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/amd64/emit.mlp ocaml-3.09.3/asmcomp/amd64/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/amd64/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/amd64/emit.mlp 2006-11-03 10:35:48.000000000 +0100
+@@ -658,6 +658,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -671,6 +677,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .globl {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/arm/emit.mlp ocaml-3.09.3/asmcomp/arm/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/arm/emit.mlp 2004-05-03 14:46:50.000000000 +0200
++++ ocaml-3.09.3/asmcomp/arm/emit.mlp 2006-11-03 10:35:55.000000000 +0100
+@@ -642,6 +642,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -661,6 +667,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly () =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .global {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/hppa/emit.mlp ocaml-3.09.3/asmcomp/hppa/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/hppa/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/hppa/emit.mlp 2006-11-03 10:36:03.000000000 +0100
+@@ -994,6 +994,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -1022,6 +1028,7 @@
+
+
+ let end_assembly() =
++ nx_stack();
+ ` .code\n`;
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ declare_global lbl_end;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/i386/emit.mlp ocaml-3.09.3/asmcomp/i386/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/i386/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/i386/emit.mlp 2006-11-03 10:21:41.000000000 +0100
+@@ -914,6 +914,11 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux_elf" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -927,6 +932,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .globl {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/ia64/emit.mlp ocaml-3.09.3/asmcomp/ia64/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/ia64/emit.mlp 2004-07-13 14:18:53.000000000 +0200
++++ ocaml-3.09.3/asmcomp/ia64/emit.mlp 2006-11-03 10:36:13.000000000 +0100
+@@ -1306,6 +1306,12 @@
+ ` .align 8\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -1315,6 +1321,7 @@
+ emit_define_symbol (Compilenv.make_symbol (Some "code_begin"))
+
+ let end_assembly () =
++ nx_stack();
+ ` .data\n`;
+ emit_define_symbol (Compilenv.make_symbol (Some "data_end"));
+ ` .text\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/power/emit.mlp ocaml-3.09.3/asmcomp/power/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/power/emit.mlp 2004-06-19 19:39:34.000000000 +0200
++++ ocaml-3.09.3/asmcomp/power/emit.mlp 2006-11-03 10:36:29.000000000 +0100
+@@ -879,6 +879,12 @@
+ emit_string data_space;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "elf" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -898,6 +904,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ (* Emit the jump table *)
+ if !num_jumptbl_entries > 0 then begin
+ emit_string code_space;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/sparc/emit.mlp ocaml-3.09.3/asmcomp/sparc/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/sparc/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/sparc/emit.mlp 2006-11-03 10:36:36.000000000 +0100
+@@ -741,6 +741,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -754,6 +760,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ ` .text\n`;
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .global {emit_symbol lbl_end}\n`;
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch b/dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch
new file mode 100644
index 000000000000..a990d41b1186
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch
@@ -0,0 +1,13 @@
+--- ocaml-3.09.3.orig/driver/ocamlcomp.sh.in 2002-06-08 03:27:50.000000000 +0000
++++ ocaml-3.09.2/driver/ocamlcomp.sh.in 2007-04-21 17:27:24.000000000 +0000
+@@ -2,4 +2,10 @@
+
+ topdir=`dirname $0`
+
++# evil hack for evil build system.
++if [ -x /usr/bin/scanelf ]; then
++ [ "$(scanelf @compiler@ -BF%x#f)" != "--mxe-" ] && scanelf -qXx -z mxe @compiler@ > /dev/null
++fi
++
++
+ exec @compiler@ -nostdlib -I $topdir/stdlib "$@"
diff --git a/dev-lang/ocaml/ocaml-3.09.3-r1.ebuild b/dev-lang/ocaml/ocaml-3.09.3-r1.ebuild
new file mode 100644
index 000000000000..79afa3249427
--- /dev/null
+++ b/dev-lang/ocaml/ocaml-3.09.3-r1.ebuild
@@ -0,0 +1,122 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-lang/ocaml/ocaml-3.09.3-r1.ebuild,v 1.1 2007/04/22 13:55:57 phreak Exp $
+
+inherit flag-o-matic eutils multilib pax-utils versionator
+
+DESCRIPTION="fast modern type-inferring functional programming language descended from the ML (Meta Language) family"
+HOMEPAGE="http://www.ocaml.org/"
+SRC_URI="http://caml.inria.fr/distrib/ocaml-$( get_version_component_range 1-2 )/${P}.tar.bz2"
+
+LICENSE="QPL-1.0 LGPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+IUSE="tk latex"
+
+DEPEND="virtual/libc
+ tk? ( >=dev-lang/tk-3.3.3 )"
+
+QA_EXECSTACK="/usr/lib/ocaml/compiler-*"
+
+# This is a crappy way to deal with the textrels, but it keeps stuff simple
+QA_TEXTRELS="usr/bin/ocaml*.opt usr/bin/camlp4*.opt"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ # Fix the EXEC_STACK in ocaml compiled binaries (#153382)
+ epatch "${FILESDIR}"/${P}-exec-stack-fixes.patch
+
+ # Quick and somewhat dirty fix for bug #110541
+ epatch "${FILESDIR}"/${P}-execheap.patch
+
+ # The configure script doesn't inherit previous defined variables,
+ # overwriting previous declarations of bytecccompopts, bytecclinkopts,
+ # nativecccompopts and nativecclinkopts. Reported upstream as issue 0004267.
+ epatch "${FILESDIR}"/${P}-configure.patch
+
+ # The sed in the Makefile doesn't replace all occurences of @compiler@
+ # in driver/ocamlcomp.sh.in. Reported upstream as issue 0004268.
+ epatch "${FILESDIR}"/${P}-Makefile.patch
+
+ # Change the configure script to add the CFLAGS to bytecccompopts, LDFLAGS
+ # to bytecclinkopts.
+ sed -i -e "s,bytecccompopts=\"\",bytecccompopts=\"\${CFLAGS}\"," \
+ -e "s,bytecclinkopts=\"\",bytecclinkopts=\"\${LDFLAGS}\"," \
+ "${S}"/configure
+}
+
+src_compile() {
+ local myconf="--host ${CHOST}"
+
+ # dev-lang/ocaml tends to break/give unexpected results with "unsafe" CFLAGS.
+ strip-flags
+ replace-flags "-O?" -O2
+
+ use tk || myconf="-no-tk"
+
+ # ocaml uses a home-brewn configure script, preventing it to use econf.
+ ./configure -prefix /usr \
+ --bindir /usr/bin \
+ --libdir /usr/$(get_libdir)/ocaml \
+ --mandir /usr/share/man \
+ --with-pthread ${myconf} || die "configure failed!"
+
+ make world || die "make world failed!"
+
+ # Native code generation is unsupported on some archs
+ if ! use ppc64 ; then
+ make opt || die "make opt failed!"
+ make opt.opt || die "make opt.opt failed!"
+ fi
+}
+
+src_test() {
+ make bootstrap
+}
+
+src_install() {
+ make BINDIR="${D}"/usr/bin \
+ LIBDIR="${D}"/usr/$(get_libdir)/ocaml \
+ MANDIR="${D}"/usr/share/man \
+ install || die "make install failed!"
+
+ # Install the compiler libs
+ dodir /usr/$(get_libdir)/ocaml/compiler-libs
+ insinto /usr/$(get_libdir)/ocaml/compiler-libs
+ doins {utils,typing,parsing}/*.{mli,cmi,cmo,cmx,o}
+
+ # Symlink the headers to the right place
+ dodir /usr/include
+ dosym /usr/$(get_libdir)/ocaml/caml /usr/include/
+
+ # Remove ${D} from ld.conf, as the buildsystem isn't $(DESTDIR) aware
+ dosed "s:${D}::g" /usr/$(get_libdir)/ocaml/ld.conf
+
+ dodoc Changes INSTALL LICENSE README Upgrading
+
+ # Turn MPROTECT off for some of the ocaml binaries, since they are trying to
+ # rewrite the segment (which will obviously fail on systems having
+ # PAX_MPROTECT enabled).
+ pax-mark -m "${D}"//usr/bin/ocamldoc.opt "${D}"/usr/bin/ocamldep.opt \
+ "${D}"/usr/bin/ocamllex.opt "${D}"/usr/bin/camlp4r.opt \
+ "${D}"/usr/bin/camlp4o.opt
+
+ # Create and envd entry for latex input files (this definitely belongs into
+ # CONTENT and not in pkg_postinst.
+ if use latex ; then
+ echo "TEXINPUTS=/usr/$(get_libdir)/ocaml/ocamldoc:" > "${T}"/99ocamldoc
+ doenvd "${T}"/99ocamldoc
+ fi
+}
+
+pkg_postinst() {
+ echo
+ elog "OCaml is not binary compatible from version to version, so you (may)"
+ elog "need to rebuild all packages depending on it, that are actually"
+ elog "installed on your system. To do so, you can run:"
+ elog "sh ${FILESDIR}/ocaml-rebuild.sh [-h | emerge options]"
+ elog "Which will call emerge on all old packages with the given options"
+ echo
+}