Kill Id_type_arguments
[hiphop-php.git] / patches / ocaml-never-use-system-ocaml.patch
blobd48142948a64f4496120a3eaf1c1beb62ff32204
1 diff --git a/third-party/ocaml/CMakeLists.txt b/third-party/ocaml/CMakeLists.txt
2 index 2ddde1c..4e7923d 100644
3 --- a/third-party/ocaml/CMakeLists.txt
4 +++ b/third-party/ocaml/CMakeLists.txt
5 @@ -1,81 +1,56 @@
6 -# Phase 1 - see if they have a built-in version of ocamlc which is 'good enough'
7 -find_program(OCAML NAMES ocaml ocaml)
8 -find_program(OCAMLC NAMES ocamlc.opt ocamlc)
9 -find_program(OCAMLOPT NAMES ocamlopt.opt ocamlopt)
10 -find_program(OCAMLBUILD NAMES ocamlbuild.native ocamlbuild)
11 +# Either we couldn't find a reasonable version of ocamlc or it was too old.
12 +message(STATUS "Building ocaml from third-party")
14 -set(OCAMLC_FOUND FALSE)
15 +set(OCAML_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/build")
16 +set(OCAML "${OCAML_PREFIX}/bin/ocaml")
17 +set(OCAMLC "${OCAML_PREFIX}/bin/ocamlc.opt")
18 +set(OCAMLOPT "${OCAML_PREFIX}/bin/ocamlopt.opt")
19 +set(OCAMLBUILD "${OCAML_PREFIX}/bin/ocamlbuild.native")
20 +set(OPAM "${OCAML_PREFIX}/bin/opam")
22 -if (OCAMLC)
23 - # We found a local version of ocamlc - check the version.
24 - message(STATUS "Found ocamlc: ${OCAMLC}")
25 - execute_process(COMMAND "${OCAMLC}" -version
26 - OUTPUT_VARIABLE OCAMLC_VERSION
27 - OUTPUT_STRIP_TRAILING_WHITESPACE)
28 +# TODO: what about dependencies so we rebuild ocaml when it changes?
29 +# NOTE: The weirdness building world.opt twice is because (at least on arm64)
30 +# ocaml (4.03) seems to have parallel build dependency problems.
31 +add_custom_command(
32 + OUTPUT ${OCAML} ${OCAMLC} ${OCAMLOPT}
33 + COMMAND ./configure -prefix "${OCAML_PREFIX}" -no-graph
34 + COMMAND \$\(MAKE\) -k world.opt || true
35 + COMMAND \$\(MAKE\) -j1 world.opt
36 + COMMAND \$\(MAKE\) install
37 + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src"
38 + COMMENT "Compiling ocaml")
40 - message(STATUS "Got ocaml version ${OCAMLC_VERSION}")
41 - if ("${OCAMLC_VERSION}" VERSION_LESS "4.03")
42 - message(STATUS "System version of ocaml is too old")
43 - else()
44 - set(OCAMLC_FOUND TRUE)
45 - endif()
46 -endif()
47 +add_custom_command(
48 + OUTPUT ${OCAMLBUILD}
49 + # Hack up the path before building ocamlbuild.
50 + # (OCamlBuild doesn't understand how to override its build tools properly -
51 + # they call "ocamlc -where" directly from configure.make)
52 + # This would be better as 'cmake -E env' but that's only available in cmake 3.1+
53 + COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\) -f configure.make
54 + OCAML_NATIVE=true
55 + OCAMLBUILD_BINDIR=${OCAML_PREFIX}/bin
56 + OCAMLBUILD_LIBDIR=${OCAML_PREFIX}/lib'
57 + COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\)'
58 + COMMAND \$\(MAKE\) install CHECK_IF_PREINSTALLED=false
59 + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ocamlbuild"
60 + DEPENDS ${OCAMLC}
61 + COMMENT "Compiling ocamlbuild")
63 -if (NOT OCAMLC_FOUND)
64 - # Either we couldn't find a reasonable version of ocamlc or it was too old.
65 - message(STATUS "Building ocaml from third-party")
66 +add_custom_command(
67 + OUTPUT ${OPAM}
68 + COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" ./configure --prefix="${OCAML_PREFIX}"'
69 + # prep source tree to skip the %.download and %.stamp Makefile rules of lib-ext
70 + COMMAND /bin/bash -c '${CMAKE_CURRENT_SOURCE_DIR}/opam_deps/prep_deps.sh ${OCAML_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}/opam_deps ./src_ext'
71 + COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\) -j1 lib-ext'
72 + COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\) -j1'
73 + COMMAND \$\(MAKE\) install
74 + # ensure clean git status
75 + COMMAND /bin/bash -c '${CMAKE_CURRENT_SOURCE_DIR}/opam_deps/cleanup_src_ext.sh ./src_ext'
76 + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/opam"
77 + DEPENDS ${OCAMLBUILD}
78 + COMMENT "Compiling opam")
80 - set(OCAML_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/build")
81 - set(OCAML "${OCAML_PREFIX}/bin/ocaml")
82 - set(OCAMLC "${OCAML_PREFIX}/bin/ocamlc.opt")
83 - set(OCAMLOPT "${OCAML_PREFIX}/bin/ocamlopt.opt")
84 - set(OCAMLBUILD "${OCAML_PREFIX}/bin/ocamlbuild.native")
85 - set(OPAM "${OCAML_PREFIX}/bin/opam")
87 - # TODO: what about dependencies so we rebuild ocaml when it changes?
88 - # NOTE: The weirdness building world.opt twice is because (at least on arm64)
89 - # ocaml (4.03) seems to have parallel build dependency problems.
90 - add_custom_command(
91 - OUTPUT ${OCAML} ${OCAMLC} ${OCAMLOPT}
92 - COMMAND ./configure -prefix "${OCAML_PREFIX}" -no-graph
93 - COMMAND \$\(MAKE\) -k world.opt || true
94 - COMMAND \$\(MAKE\) -j1 world.opt
95 - COMMAND \$\(MAKE\) install
96 - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src"
97 - COMMENT "Compiling ocaml")
99 - add_custom_command(
100 - OUTPUT ${OCAMLBUILD}
101 - # Hack up the path before building ocamlbuild.
102 - # (OCamlBuild doesn't understand how to override its build tools properly -
103 - # they call "ocamlc -where" directly from configure.make)
104 - # This would be better as 'cmake -E env' but that's only available in cmake 3.1+
105 - COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\) -f configure.make
106 - OCAML_NATIVE=true
107 - OCAMLBUILD_BINDIR=${OCAML_PREFIX}/bin
108 - OCAMLBUILD_LIBDIR=${OCAML_PREFIX}/lib'
109 - COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\)'
110 - COMMAND \$\(MAKE\) install CHECK_IF_PREINSTALLED=false
111 - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ocamlbuild"
112 - DEPENDS ${OCAMLC}
113 - COMMENT "Compiling ocamlbuild")
115 - add_custom_command(
116 - OUTPUT ${OPAM}
117 - COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" ./configure --prefix="${OCAML_PREFIX}"'
118 - # prep source tree to skip the %.download and %.stamp Makefile rules of lib-ext
119 - COMMAND /bin/bash -c '${CMAKE_CURRENT_SOURCE_DIR}/opam_deps/prep_deps.sh ${OCAML_PREFIX} ${CMAKE_CURRENT_SOURCE_DIR}/opam_deps ./src_ext'
120 - COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\) -j1 lib-ext'
121 - COMMAND /bin/bash -c 'PATH="${OCAML_PREFIX}/bin:$ENV{PATH}" \$\(MAKE\) -j1'
122 - COMMAND \$\(MAKE\) install
123 - # ensure clean git status
124 - COMMAND /bin/bash -c '${CMAKE_CURRENT_SOURCE_DIR}/opam_deps/cleanup_src_ext.sh ./src_ext'
125 - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/opam"
126 - DEPENDS ${OCAMLBUILD}
127 - COMMENT "Compiling opam")
129 - set(OCAMLC_FOUND TRUE)
130 -endif()
131 +set(OCAMLC_FOUND TRUE)
133 add_custom_target(ocaml
134 DEPENDS ${OCAMLC} ${OCAMLOPT} ${OCAMLBUILD} ${OPAM})