1 include(GNUInstallDirs)
   2 
   3 
   4 # FIXME(arunprasadr): Why do we need this?
   5 set(WK_PLATFORM_JAVA 1)
   6 set(WebCore_OUTPUT_NAME "jfxwebkit")
   7 # set(PROJECT_VERSION_MAJOR 2) #//XXX: change VERSION?
   8 # set(PROJECT_VERSION_MINOR 9)
   9 # set(PROJECT_VERSION_MICRO 4)
  10 # set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_MICRO})
  11 set(WEBKITJAVA_API_VERSION 4.0)
  12 
  13 set(ICU_UNICODE TRUE)
  14 SET_AND_EXPOSE_TO_BUILD(USE_IMAGEIO TRUE)
  15 SET_AND_EXPOSE_TO_BUILD(USE_TEXTURE_MAPPER TRUE)
  16 if (ICU_UNICODE)
  17     SET_AND_EXPOSE_TO_BUILD(USE_ICU_UNICODE TRUE)
  18 else ()
  19     SET_AND_EXPOSE_TO_BUILD(USE_JAVA_UNICODE TRUE)
  20 endif ()
  21 
  22 # These are shared variables, but we special case their definition so that we can use the
  23 # CMAKE_INSTALL_* variables that are populated by the GNUInstallDirs macro.
  24 set(LIB_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}" CACHE PATH "Absolute path to library installation directory")
  25 set(EXEC_INSTALL_DIR "${CMAKE_INSTALL_FULL_BINDIR}" CACHE PATH "Absolute path to executable installation directory")
  26 
  27 file(TO_CMAKE_PATH $ENV{WEBKIT_OUTPUTDIR}/import/include IMPORT_INCLUDE_DIR)
  28 file(TO_CMAKE_PATH $ENV{WEBKIT_OUTPUTDIR}/import/lib IMPORT_LIBRARIES_DIR)
  29 if (WIN32)
  30     #### ICU ####
  31     set(ICU_FOUND TRUE)
  32     set(ICU_I18N_FOUND TRUE)
  33     set(ICU_INCLUDE_DIRS ${IMPORT_INCLUDE_DIR}/icu)
  34     if (CMAKE_BUILD_TYPE STREQUAL "Release")
  35         set(ICU_LIBRARIES ${IMPORT_LIBRARIES_DIR}/sicuuc.lib ${IMPORT_LIBRARIES_DIR}/icudt.lib)
  36         set(ICU_I18N_LIBRARIES ${IMPORT_LIBRARIES_DIR}/sicuin.lib)
  37     else ()
  38         set(ICU_LIBRARIES ${IMPORT_LIBRARIES_DIR}/sicuucd.lib ${IMPORT_LIBRARIES_DIR}/icudt.lib)
  39         set(ICU_I18N_LIBRARIES ${IMPORT_LIBRARIES_DIR}/sicuind.lib)
  40     endif ()
  41     #### ICU-END ####
  42 
  43     set(LIBXML2_INCLUDE_DIR ${IMPORT_INCLUDE_DIR})
  44     set(LIBXML2_LIBRARIES ${IMPORT_LIBRARIES_DIR}/libxml2_a.lib)
  45 
  46     #### Sqlite3 ####
  47     set(SQLITE_FOUND TRUE)
  48     set(SQLITE_INCLUDE_DIR ${IMPORT_INCLUDE_DIR})
  49     set(SQLITE_LIBRARIES ${IMPORT_LIBRARIES_DIR}/sqlite3.lib)
  50     #### Sqlite3-END ####
  51 
  52     set(LIBXSLT_INCLUDE_DIR ${IMPORT_INCLUDE_DIR})
  53     set(LIBXSLT_LIBRARIES ${IMPORT_LIBRARIES_DIR}/libxslt_a.lib)
  54 elseif (APPLE)
  55     # set(USE_CF 1)
  56     add_definitions(-DUSE_CF=1)
  57     add_definitions(-DJSC_OBJC_API_ENABLED=0)
  58     
  59     #### Sqlite3 ####
  60     set(SQLITE_FOUND TRUE)
  61     set(SQLITE_INCLUDE_DIR ${IMPORT_INCLUDE_DIR})
  62     set(SQLITE_LIBRARIES ${IMPORT_LIBRARIES_DIR}/libsqlite3.a)
  63     #### Sqlite3-END ####
  64     find_package(LibXml2 2.8.0 REQUIRED)
  65     find_package(LibXslt 1.1.7 REQUIRED)
  66     set(CMAKE_SKIP_RPATH TRUE)
  67 elseif (UNIX)
  68     #### ICU ####
  69     set(ICU_FOUND TRUE)
  70     set(ICU_I18N_FOUND TRUE)
  71     set(ICU_INCLUDE_DIRS ${IMPORT_INCLUDE_DIR})
  72     set(ICU_LIBRARIES ${IMPORT_LIBRARIES_DIR}/libicuuc.a ${IMPORT_LIBRARIES_DIR}/libicudata.a)
  73     set(ICU_I18N_LIBRARIES ${IMPORT_LIBRARIES_DIR}/libicui18n.a)
  74     #### ICU-END ####
  75 
  76     #### Sqlite3 ####
  77     set(SQLITE_FOUND TRUE)
  78     set(SQLITE_INCLUDE_DIR ${IMPORT_INCLUDE_DIR})
  79     set(SQLITE_LIBRARIES ${IMPORT_LIBRARIES_DIR}/libsqlite3.a)
  80     #### Sqlite3-END ####
  81 
  82     find_package(LibXml2 2.7.0 REQUIRED)
  83     find_package(LibXslt 1.1.7 REQUIRED)
  84     set(CMAKE_SKIP_RPATH TRUE)
  85 else ()
  86     message(FATAL_ERROR "Set thirdparty lib, inc paths")
  87 endif ()
  88 
  89 find_package(JNI REQUIRED)
  90 find_package(Threads REQUIRED)
  91 
  92 if (WIN32)
  93     # Set output dir to lib directory
  94     set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  95     # Workaround for MSBuild. It always creates Release|Debug folder
  96     # according to the build type on each target.
  97     install(PROGRAMS ${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}/${WebCore_OUTPUT_NAME}.dll DESTINATION ${CMAKE_BINARY_DIR}/lib OPTIONAL)
  98     # Copied from OptionsWindows.cmake
  99     add_definitions(-D_HAS_EXCEPTIONS=0 -DNOMINMAX -DUNICODE -DU_STATIC_IMPLEMENTATION)
 100     add_definitions(
 101         /wd4018 /wd4068 /wd4099 /wd4100 /wd4127 /wd4138 /wd4146 /wd4180 /wd4189 /wd4201 /wd4244 /wd4251 /wd4267 /wd4275 /wd4288
 102         /wd4291 /wd4305 /wd4309 /wd4344 /wd4355 /wd4389 /wd4396 /wd4481 /wd4503 /wd4505 /wd4510 /wd4512 /wd4530 /wd4610 /wd4702
 103         /wd4706 /wd4800 /wd4819 /wd4951 /wd4952 /wd4996 /wd6011 /wd6031 /wd6211 /wd6246 /wd6255 /wd6387
 104     )
 105     # https://lists.webkit.org/pipermail/webkit-dev/2016-April/028135.html
 106     add_definitions(/vmg)
 107     if (NOT ${CMAKE_GENERATOR} MATCHES "Ninja")
 108         add_definitions(/MP)
 109     endif ()
 110     if (NOT ${CMAKE_CXX_FLAGS} STREQUAL "")
 111         string(REGEX REPLACE "/EH[a-z]+" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable C++ exceptions
 112         string(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable RTTI
 113     endif ()
 114 elseif(APPLE)
 115 else()
 116     set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-dynamic -static-libstdc++")
 117 endif()
 118 
 119 WEBKIT_OPTION_BEGIN()
 120 
 121 # Set the default value for ENABLE_GLES2 automatically.
 122 # We are not enabling or disabling automatically a feature here, because
 123 # the feature is by default always on (ENABLE_OPENGL=ON).
 124 # What we select here automatically is if we use OPENGL (ENABLE_GLES2=OFF)
 125 # or OPENGLES2 (ENABLE_GLES2=ON) for building the feature.
 126 # set(ENABLE_GLES2_DEFAULT OFF)
 127 
 128 # WEBKIT_OPTION_DEPEND(ENABLE_3D_TRANSFORMS ENABLE_OPENGL)
 129 # WEBKIT_OPTION_DEPEND(ENABLE_ACCELERATED_2D_CANVAS ENABLE_OPENGL)
 130 # WEBKIT_OPTION_DEPEND(ENABLE_GLES2 ENABLE_OPENGL)
 131 # WEBKIT_OPTION_DEPEND(ENABLE_NETSCAPE_PLUGIN_API ENABLE_X11_TARGET)
 132 # WEBKIT_OPTION_DEPEND(ENABLE_PLUGIN_PROCESS_GTK2 ENABLE_X11_TARGET)
 133 # WEBKIT_OPTION_DEPEND(ENABLE_THREADED_COMPOSITOR ENABLE_OPENGL)
 134 # WEBKIT_OPTION_DEPEND(ENABLE_WEBGL ENABLE_OPENGL)
 135 # WEBKIT_OPTION_DEPEND(USE_REDIRECTED_XCOMPOSITE_WINDOW ENABLE_OPENGL)
 136 # WEBKIT_OPTION_DEPEND(USE_REDIRECTED_XCOMPOSITE_WINDOW ENABLE_X11_TARGET)
 137 # WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_OPENGL)
 138 # WEBKIT_OPTION_DEPEND(USE_GSTREAMER_GL ENABLE_VIDEO)
 139 # WEBKIT_OPTION_DEPEND(USE_GSTREAMER_MPEGTS ENABLE_VIDEO)
 140 
 141 # SET_AND_EXPOSE_TO_BUILD(ENABLE_DEVELOPER_MODE ${DEVELOPER_MODE})
 142 # if (DEVELOPER_MODE)
 143 #     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC ON)
 144 #     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PRIVATE ON)
 145 # else ()
 146 #     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC OFF)
 147 #     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_API_TESTS PRIVATE OFF)
 148 #     set(WebKit2_VERSION_SCRIPT "-Wl,--version-script,${CMAKE_MODULE_PATH}/gtksymbols.filter")
 149 # endif ()
 150 
 151 # if (CMAKE_SYSTEM_NAME MATCHES "Linux")
 152 #     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEMORY_SAMPLER PUBLIC ON)
 153 # else ()
 154 #     WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEMORY_SAMPLER PUBLIC OFF)
 155 # endif ()
 156 
 157 # # Normally we do not set the value of options automatically. However, CairoGL is special. Currently
 158 # # most major distros compile Cario with --enable-gl, but Debian and derivitives are a major
 159 # # exception. You very probably want accelerated 2D canvas if Cario has been compiled with CarioGL,
 160 # # and very probably do not want to recompile Cario otherwise. So we expect some major distros will
 161 # # enable this feature, and others will not, and that is just fine for the time being. Once Debian
 162 # # enables CairoGL, then it will be time to force this ON by default. Note that if GLX is installed,
 163 # # EGL is not, and ENABLE_X11_TARGET is OFF, this guess is wrong and the user must override it. We
 164 # # can't check ENABLE_X11_TARGET at this point because we don't know whether it's enabled until
 165 # # WEBKIT_OPTION_END has been called, and at that point it's too late to change default values.
 166 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCELERATED_2D_CANVAS PUBLIC ${CAIROGL_FOUND})
 167 
 168 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CREDENTIAL_STORAGE PUBLIC ON)
 169 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(WEBKIT_OPTION_DEFAULT_PORT_VALUE OFF)
 170 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_COMPOSITING PRIVATE ON)
 171 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
 172 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC ON)
 173 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ICONDATABASE PUBLIC OFF)
 174 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PRIVATE OFF)
 175 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DFG_JIT PRIVATE OFF)
 176 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPELLCHECK PUBLIC ON)
 177 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS PUBLIC OFF)
 178 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO PUBLIC ON)
 179 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_AUDIO PUBLIC ON)
 180 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_SYSTEM_MALLOC PUBLIC OFF)
 181 
 182 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_3D_TRANSFORMS PRIVATE ON)
 183 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY PRIVATE ON)
 184 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY PRIVATE OFF) #//XXX: ON
 185 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ATTACHMENT_ELEMENT PRIVATE OFF)
 186 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_BATTERY_STATUS PRIVATE OFF)
 187 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CANVAS_PATH PRIVATE ON)
 188 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS3_TEXT PRIVATE OFF)
 189 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_DEVICE_ADAPTATION PRIVATE OFF)
 190 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_GRID_LAYOUT PRIVATE OFF) #recheck actual value
 191 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_IMAGE_SET PRIVATE ON)
 192 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_REGIONS PRIVATE ON)
 193 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_SELECTORS_LEVEL4 PRIVATE ON)
 194 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CUSTOM_SCHEME_HANDLER PRIVATE OFF)
 195 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATABASE_PROCESS PRIVATE ON)
 196 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATALIST_ELEMENT PRIVATE ON)
 197 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DOWNLOAD_ATTRIBUTE PRIVATE OFF)
 198 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA PRIVATE OFF)
 199 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA_V2 PRIVATE OFF)
 200 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FILTERS_LEVEL_2 PRIVATE OFF) #//XXX: ON?
 201 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTPDIR PRIVATE ON)
 202 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PRIVATE ON)
 203 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD PRIVATE OFF)
 204 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD_DEPRECATED PRIVATE OFF)
 205 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INDEXED_DATABASE PRIVATE OFF)
 206 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INDEXED_DATABASE_IN_WORKERS PRIVATE OFF)
 207 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_COLOR PRIVATE ON)
 208 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_WEB_AUDIO PRIVATE ON)
 209 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LINK_PREFETCH PRIVATE ON)
 210 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_CAPTURE PRIVATE OFF)
 211 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_CONTROLS_SCRIPT PRIVATE ON)
 212 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MHTML PRIVATE ON)
 213 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NAVIGATOR_CONTENT_UTILS PRIVATE OFF)
 214 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NAVIGATOR_HWCONCURRENCY PRIVATE ON)
 215 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NETSCAPE_PLUGIN_API PRIVATE ON)
 216 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NOTIFICATIONS PRIVATE ON)
 217 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PICTURE_SIZES PRIVATE ON)
 218 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PUBLIC_SUFFIX_LIST PRIVATE ON)
 219 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_QUOTA PRIVATE OFF)
 220 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOLUTION_MEDIA_QUERY PRIVATE ON)
 221 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_REQUEST_ANIMATION_FRAME PRIVATE ON)
 222 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SECCOMP_FILTERS PRIVATE OFF)
 223 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SMOOTH_SCROLLING PRIVATE ON)
 224 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SUBTLE_CRYPTO PRIVATE OFF)
 225 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TEMPLATE_ELEMENT PRIVATE OFF)
 226 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USERSELECT_ALL PRIVATE ON)
 227 # WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_MESSAGE_HANDLERS PRIVATE ON)
 228 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIBRATION PRIVATE OFF)
 229 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO PRIVATE ON)
 230 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_TRACK PRIVATE ON)
 231 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIEW_MODE_CSS_MEDIA PRIVATE ON)
 232 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_TIMING PRIVATE ON)
 233 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGL PRIVATE OFF)
 234 
 235 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATE PRIVATE ON)
 236 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATETIMELOCAL PRIVATE ON)
 237 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE PRIVATE ON)
 238 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_MONTH PRIVATE ON)
 239 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_TIME PRIVATE ON)
 240 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_WEEK PRIVATE ON)
 241 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_NOTIFICATIONS PRIVATE ON)
 242 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SVG_OTF_CONVERTER PRIVATE OFF)
 243 
 244 
 245 
 246 # Finalize the value for all options. Do not attempt to use an option before
 247 # this point, and do not attempt to change any option after this point.
 248 WEBKIT_OPTION_END()
 249 
 250 
 251 set(ENABLE_WEBKIT OFF)
 252 set(ENABLE_WEBKIT2 OFF)
 253 add_definitions(-DBUILDING_JAVA__=1)
 254 add_definitions(-DDATA_DIR="${CMAKE_INSTALL_DATADIR}")
 255 # add_definitions(-DUSE_CROSS_PLATFORM_CONTEXT_MENUS=1)
 256 
 257 set(FORWARDING_HEADERS_DIR ${DERIVED_SOURCES_DIR}/ForwardingHeaders)
 258 
 259 
 260 set(WTF_LIBRARY_TYPE STATIC)
 261 # set(JavaScriptCore_LIBRARY_TYPE OBJECT)
 262 # set(WebCore_LIBRARY_TYPE OBJECT)
 263 # set(WTF_LIBRARY_TYPE STATIC)
 264 
 265 
 266 if (CMAKE_MAJOR_VERSION LESS 3)
 267     # Before CMake 3 it was necessary to use a build script instead of using cmake --build directly
 268     # to preserve colors and pretty-printing.
 269 
 270     build_command(COMMAND_LINE_TO_BUILD)
 271     # build_command unconditionally adds -i (ignore errors) for make, and there's
 272     # no reasonable way to turn that off, so we just replace it with -k, which has
 273     # the same effect, except that the return code will indicate that an error occurred.
 274     # See: http://www.cmake.org/cmake/help/v3.0/command/build_command.html
 275     string(REPLACE " -i" " -k" COMMAND_LINE_TO_BUILD ${COMMAND_LINE_TO_BUILD})
 276     file(WRITE
 277         ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/build.sh
 278         "#!/bin/sh\n"
 279         "${COMMAND_LINE_TO_BUILD} $@"
 280     )
 281     file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/build.sh
 282         DESTINATION ${CMAKE_BINARY_DIR}
 283         FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
 284     )
 285 endif ()