summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Ballier <aballier@gentoo.org>2017-06-30 13:42:02 +0200
committerAlexis Ballier <aballier@gentoo.org>2017-06-30 14:47:13 +0200
commitd7d57903f6e0094b295fc3bcf9bb1f83443b9c5c (patch)
treedb150c76ee04d469c0309c0c714e63b520b842ce /dev-ml/ocamlnet/files
parentgnome-base/orbit: keyword ~arm64 (diff)
downloadgentoo-d7d57903f6e0094b295fc3bcf9bb1f83443b9c5c.tar.gz
gentoo-d7d57903f6e0094b295fc3bcf9bb1f83443b9c5c.tar.bz2
gentoo-d7d57903f6e0094b295fc3bcf9bb1f83443b9c5c.zip
dev-ml/ocamlnet: backport upstream fix to build with ocaml 4.05
Package-Manager: Portage-2.3.6, Repoman-2.3.2
Diffstat (limited to 'dev-ml/ocamlnet/files')
-rw-r--r--dev-ml/ocamlnet/files/ocaml405.patch145
1 files changed, 145 insertions, 0 deletions
diff --git a/dev-ml/ocamlnet/files/ocaml405.patch b/dev-ml/ocamlnet/files/ocaml405.patch
new file mode 100644
index 000000000000..a112d1fb4473
--- /dev/null
+++ b/dev-ml/ocamlnet/files/ocaml405.patch
@@ -0,0 +1,145 @@
+commit f3d451b81c4caa8cce7f55af6463ec685e79e227
+Author: Gerd Stolpmann <gerd@gerd-stolpmann.de>
+Date: Sun Feb 26 21:04:49 2017 +0100
+
+ ocaml-4.05: support for O_KEEPEXEC
+
+diff --git a/code/src/netsys/Makefile b/code/src/netsys/Makefile
+index cbc1ce2..cb70a09 100644
+--- a/code/src/netsys/Makefile
++++ b/code/src/netsys/Makefile
+@@ -56,7 +56,7 @@ OCAMLC_OPTIONS_FOR_netsys_c_xdr.c = -ccopt -O
+ OCAMLC_OPTIONS += $(STRING_OPTS)
+ OCAMLOPT_OPTIONS += $(STRING_OPTS)
+
+-PP_OPTIONS = -pp "$(CPPO) $(DEF_O_SHARE_DELETE) $(DEF_O_CLOEXEC) $(PP_BYTES) $(PP_DEPRECATED)"
++PP_OPTIONS = -pp "$(CPPO) $(DEF_O_SHARE_DELETE) $(DEF_O_CLOEXEC) $(DEF_O_KEEPEXEC) $(PP_BYTES) $(PP_DEPRECATED)"
+
+ INSTALL_EXTRA += netsys_c_event.h $(OOH_OBJECT)
+
+diff --git a/code/src/netsys/configure b/code/src/netsys/configure
+index 1325843..f4dbc09 100755
+--- a/code/src/netsys/configure
++++ b/code/src/netsys/configure
+@@ -437,6 +437,21 @@ else
+ echo "no"
+ fi
+
++######################################################################
++
++printf "Checking for O_KEEPEXEC... "
++mkdir -p tmp
++cat <<_EOF_ >tmp/t.ml
++let x = Unix.O_KEEPEXEC;;
++_EOF_
++
++def_o_keepexec="-D NO_O_KEEPEXEC"
++if ocaml unix.cma tmp/t.ml >/dev/null 2>/dev/null; then
++ echo "yes"
++ def_o_keepexec="-D HAVE_O_KEEPEXEC"
++else
++ echo "no"
++fi
+
+ ######################################################################
+
+@@ -445,6 +460,7 @@ cat <<EOF >Makefile.conf
+ NETSYS_LINK_OPTIONS = $netsys_link_options
+ DEF_O_SHARE_DELETE = $def_o_share_delete
+ DEF_O_CLOEXEC = $def_o_cloexec
++DEF_O_KEEPEXEC = $def_o_keepexec
+ OOH_OBJECT = $def_ooh_object
+ EOF
+
+diff --git a/code/src/netsys/netsys_c.c b/code/src/netsys/netsys_c.c
+index a8b16be..4c30873 100644
+--- a/code/src/netsys/netsys_c.c
++++ b/code/src/netsys/netsys_c.c
+@@ -448,32 +448,43 @@ static int at_flags_table[] = {
+ #ifndef O_RSYNC
+ #define O_RSYNC 0
+ #endif
+-#ifndef O_CLOEXEC
+-#define NEED_CLOEXEC_EMULATION
+-#define O_CLOEXEC 0
+-#endif
+
+ static int open_flag_table[] = {
+ O_RDONLY, O_WRONLY, O_RDWR, O_NONBLOCK, O_APPEND, O_CREAT, O_TRUNC, O_EXCL,
+- O_NOCTTY, O_DSYNC, O_SYNC, O_RSYNC, 0 /* O_SHARE_DELETE */, O_CLOEXEC
++ O_NOCTTY, O_DSYNC, O_SYNC, O_RSYNC,
++ 0 /* O_SHARE_DELETE */, 0 /* O_CLOEXEC */, 0 /* O_KEEPEXEC */
+ };
+
+-#ifdef NEED_CLOEXEC_EMULATION
++enum { CLOEXEC = 1, KEEPEXEC = 2 };
++
+ static int open_cloexec_table[] = {
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CLOEXEC, KEEPEXEC
+ };
++#ifndef HAVE_O_KEEPEXEC
++#define unix_cloexec_default 0
+ #endif
++
+ #endif
+
+ CAMLprim value netsys_openat(value dirfd, value path, value flags, value perm)
+ {
+ #ifdef HAVE_AT
+ CAMLparam4(dirfd, path, flags, perm);
+- int ret, cv_flags;
++ int ret, cv_flags, clo_flags, cloexec;
+ char * p;
+
+ /* shamelessly copied from ocaml distro */
+ cv_flags = convert_flag_list(flags, open_flag_table);
++ clo_flags = convert_flag_list(flags, open_cloexec_table);
++ if (clo_flags & CLOEXEC)
++ cloexec = 1;
++ else if (clo_flags & KEEPEXEC)
++ cloexec = 0;
++ else
++ cloexec = unix_cloexec_default;
++#if defined(O_CLOEXEC)
++ if (cloexec) cv_flags |= O_CLOEXEC;
++#endif
+ p = stat_alloc(string_length(path) + 1);
+ strcpy(p, String_val(path));
+ enter_blocking_section();
+@@ -481,8 +492,8 @@ CAMLprim value netsys_openat(value dirfd, value path, value flags, value perm)
+ leave_blocking_section();
+ stat_free(p);
+ if (ret == -1) uerror("openat", path);
+-#if defined(NEED_CLOEXEC_EMULATION) && defined(FD_CLOEXEC)
+- if (convert_flag_list(flags, open_cloexec_table) != 0) {
++#if !defined(O_CLOEXEC)
++ {
+ int flags = fcntl(Int_val(dirfd), F_GETFD, 0);
+ if (flags == -1 || fcntl(Int_val(dirfd), F_SETFD, flags | FD_CLOEXEC) == -1)
+ uerror("openat", path);
+diff --git a/code/src/netsys/netsys_posix.ml b/code/src/netsys/netsys_posix.ml
+index 602ceae..3bf3e7c 100644
+--- a/code/src/netsys/netsys_posix.ml
++++ b/code/src/netsys/netsys_posix.ml
+@@ -715,6 +715,12 @@ type at_flag = AT_EACCESS | AT_SYMLINK_NOFOLLOW | AT_SYMLINK_FOLLOW |
+ AT_REMOVEDIR
+
+ (* The stubs assume these type definitions: *)
++#ifdef HAVE_O_KEEPEXEC
++type open_flag1 = Unix.open_flag =
++ O_RDONLY | O_WRONLY | O_RDWR | O_NONBLOCK | O_APPEND | O_CREAT | O_TRUNC
++ | O_EXCL | O_NOCTTY | O_DSYNC | O_SYNC | O_RSYNC | O_SHARE_DELETE
++ | O_CLOEXEC | O_KEEPEXEC
++#else
+ #ifdef HAVE_O_CLOEXEC
+ type open_flag1 = Unix.open_flag =
+ O_RDONLY | O_WRONLY | O_RDWR | O_NONBLOCK | O_APPEND | O_CREAT | O_TRUNC
+@@ -731,6 +737,7 @@ type open_flag1 = Unix.open_flag =
+ | O_EXCL | O_NOCTTY | O_DSYNC | O_SYNC | O_RSYNC
+ #endif
+ #endif
++#endif
+
+ type access_permission1 = Unix.access_permission =
+ R_OK | W_OK | X_OK | F_OK