CMakeLists.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. ###############################################################################
  2. # HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. ################################################################################
  16. #
  17. #########################################################
  18. # Description:
  19. # ------------
  20. # This file is the top level handling for
  21. # cmake based compilation and build process.
  22. #
  23. # To build for Linux:
  24. # 1. Check out sources (for example, to directory ~/hpcc)
  25. # 2. Create a build directory - either as a child of hpcc or elsewhere
  26. # 3. cd to the build directory
  27. # 4a.To create makefiles to build native release version for local machine, run
  28. # cmake ~/hpcc
  29. # 4b.To create makefiles to build native debug version, run
  30. # cmake -DCMAKE_BUILD_TYPE=Debug ~/hpcc
  31. # 4c.To create makefiles to build 32-bit version from 64-bit host, run
  32. # cmake -DCMAKE_C_FLAGS:STRING="-m32 -march=i386" -DCMAKE_CXX_FLAGS:STRING="-m32 -march=i386" ~/hpcc
  33. # 5. To build the makefiles just created above, run
  34. # make
  35. # 6. Executables will be created in ./<releasemode>/bin and ./<releasemode>/libs
  36. #
  37. # To build for Windows:
  38. # 1. Check out sources (for example, to directory c:\hpcc)
  39. # 2. Create a build directory - either as a child of hpcc or elsewhere
  40. # 3. cd to the build directory
  41. # 4. To create a Visual Studio project, run
  42. # cmake c:\hpcc -G "Visual Studio 9 2008"
  43. # The sln file hpccsystems-platform.sln will be created in the current directory, and will support debug and release targets
  44. # 5. To build the project, load the solution into the visual studio IDE and build in the usual way.
  45. # 6. Executables will be created in .\hpcc\bin\<release_mode>
  46. #
  47. #########################################################
  48. project (hpccsystems-platform)
  49. cmake_minimum_required (VERSION 2.8.3)
  50. include(CTest)
  51. ENABLE_TESTING()
  52. set (HPCC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  53. set(CMAKE_MODULE_PATH "${HPCC_SOURCE_DIR}/cmake_modules/")
  54. include(${HPCC_SOURCE_DIR}/version.cmake)
  55. ###
  56. ## Build Level
  57. ###
  58. if( NOT BUILD_LEVEL )
  59. set ( BUILD_LEVEL "COMMUNITY" )
  60. endif()
  61. ###
  62. ###
  63. ## Config Block
  64. ###
  65. option(PREFIX "Set the install prefix")
  66. option(EXEC_PREFIX "Set the execution prefix")
  67. option(CONFIG_PREFIX "Set the configuration prefix")
  68. option(DIR_NAME "Set the install directory name")
  69. option(LIB_DIR "Set the library install dir")
  70. option(EXEC_DIR "Set the executable install dir")
  71. option(COMPONENTFILES_DIR "Set the componentfiles dir")
  72. option(ADMIN_DIR "Set the admin dir")
  73. option(PLUGINS_DIR "Set the plugins dir")
  74. option(CONFIG_SOURCE_DIR "Set the configuration source dir")
  75. option(RUNTIME_DIR "Set the runtime dir")
  76. option(HOME_DIR "Set the home dir")
  77. option(LOCK_DIR "Set the lock dir")
  78. option(PID_DIR "Set the pid dir")
  79. option(LOG_DIR "Set the log dir")
  80. option(RUNTIME_USER "Set the runtime username")
  81. option(RUNTIME_GROUP "Set the runtime group")
  82. option(ENV_XML_FILE "Set the environment xml file name.")
  83. option(ENV_CONF_FILE "Set the environment conf file name.")
  84. option(LICENSE_FILE "Set the license file to use.")
  85. if( NOT LICENSE_FILE )
  86. set(LICENSE_FILE "LICENSE.txt")
  87. endif()
  88. include(${HPCC_SOURCE_DIR}/cmake_modules/optionDefaults.cmake)
  89. ###
  90. include(${HPCC_SOURCE_DIR}/cmake_modules/commonSetup.cmake)
  91. if ( NOT MAKE_DOCS_ONLY )
  92. HPCC_ADD_SUBDIRECTORY (initfiles)
  93. HPCC_ADD_SUBDIRECTORY (tools)
  94. HPCC_ADD_SUBDIRECTORY (common)
  95. HPCC_ADD_SUBDIRECTORY (dali)
  96. HPCC_ADD_SUBDIRECTORY (deploy)
  97. HPCC_ADD_SUBDIRECTORY (deployment)
  98. HPCC_ADD_SUBDIRECTORY (ecl)
  99. HPCC_ADD_SUBDIRECTORY (ecllibrary)
  100. HPCC_ADD_SUBDIRECTORY (esp)
  101. HPCC_ADD_SUBDIRECTORY (plugins)
  102. HPCC_ADD_SUBDIRECTORY (roxie)
  103. HPCC_ADD_SUBDIRECTORY (rtl)
  104. HPCC_ADD_SUBDIRECTORY (services "PLATFORM")
  105. HPCC_ADD_SUBDIRECTORY (system)
  106. HPCC_ADD_SUBDIRECTORY (thorlcr "PLATFORM")
  107. HPCC_ADD_SUBDIRECTORY (testing)
  108. if ( NOT WIN32 )
  109. HPCC_ADD_SUBDIRECTORY (clienttools "CLIENTTOOLS_ONLY")
  110. endif()
  111. endif()
  112. HPCC_ADD_SUBDIRECTORY (docs "PLATFORM")
  113. if (APPLE OR WIN32)
  114. HPCC_ADD_SUBDIRECTORY (lib2)
  115. endif (APPLE OR WIN32)
  116. ###
  117. ## CPack install and packaging setup.
  118. ###
  119. INCLUDE(InstallRequiredSystemLibraries)
  120. if ( PLATFORM )
  121. set(CPACK_PACKAGE_NAME "hpccsystems-platform")
  122. set(PACKAGE_FILE_NAME_PREFIX "hpccsystems-platform")
  123. else()
  124. set(CPACK_PACKAGE_NAME "hpccsystems-clienttools-${majorver}.${minorver}")
  125. set(PACKAGE_FILE_NAME_PREFIX "hpccsystems-clienttools")
  126. endif()
  127. SET(CPACK_PACKAGE_VERSION_MAJOR ${majorver})
  128. SET(CPACK_PACKAGE_VERSION_MINOR ${minorver})
  129. SET(CPACK_PACKAGE_VERSION_PATCH ${point}${stagever})
  130. set ( CPACK_PACKAGE_CONTACT "HPCCSystems <ossdevelopment@lexisnexis.com>" )
  131. set( CPACK_SOURCE_GENERATOR TGZ )
  132. set ( CPACK_RPM_PACKAGE_VERSION "${projname}")
  133. SET(CPACK_RPM_PACKAGE_RELEASE "${version}${stagever}")
  134. if ( ${ARCH64BIT} EQUAL 1 )
  135. set ( CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
  136. else( ${ARCH64BIT} EQUAL 1 )
  137. set ( CPACK_RPM_PACKAGE_ARCHITECTURE "i386")
  138. endif ( ${ARCH64BIT} EQUAL 1 )
  139. set(CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}-${CPACK_RPM_PACKAGE_ARCHITECTURE}")
  140. if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  141. set(CPACK_STRIP_FILES TRUE)
  142. endif()
  143. if ( APPLE )
  144. elseif ( UNIX )
  145. EXECUTE_PROCESS (
  146. COMMAND ${HPCC_SOURCE_DIR}/cmake_modules/distrocheck.sh
  147. OUTPUT_VARIABLE packageManagement
  148. ERROR_VARIABLE packageManagement
  149. )
  150. EXECUTE_PROCESS (
  151. COMMAND ${HPCC_SOURCE_DIR}/cmake_modules/getpackagerevisionarch.sh
  152. OUTPUT_VARIABLE packageRevisionArch
  153. ERROR_VARIABLE packageRevisionArch
  154. )
  155. EXECUTE_PROCESS (
  156. COMMAND ${HPCC_SOURCE_DIR}/cmake_modules/getpackagerevisionarch.sh --noarch
  157. OUTPUT_VARIABLE packageRevision
  158. ERROR_VARIABLE packageRevision
  159. )
  160. message ( "-- Auto Detecting Packaging type")
  161. message ( "-- distro uses ${packageManagement}, revision is ${packageRevisionArch}" )
  162. if ( "${packageManagement}" STREQUAL "RPM" AND WITH_PLUGINS )
  163. set ( CPACK_RPM_PACKAGE_VERSION "${projname}-with-plugins")
  164. endif()
  165. if ( "${packageManagement}" STREQUAL "DEB" )
  166. set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}-${stagever}${packageRevisionArch}")
  167. elseif ( "${packageManagement}" STREQUAL "RPM" )
  168. set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}-${stagever}.${packageRevisionArch}")
  169. else()
  170. set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}_${version}-${stagever}${CPACK_SYSTEM_NAME}")
  171. endif ()
  172. endif ()
  173. MESSAGE ("-- Current release version is ${CPACK_PACKAGE_FILE_NAME}")
  174. set ( CPACK_SOURCE_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}" )
  175. set( CPACK_SOURCE_GENERATOR TGZ )
  176. set(CPACK_SOURCE_IGNORE_FILES
  177. "~$"
  178. "\\\\.cvsignore$"
  179. "^${PROJECT_SOURCE_DIR}.*/CVS/"
  180. "^${PROJECT_SOURCE_DIR}.*/.svn/"
  181. "^${PROJECT_SOURCE_DIR}.*/.git/"
  182. "^${PROJECT_SOURCE_DIR}/ln/"
  183. "^${PROJECT_SOURCE_DIR}/externals/"
  184. "^${PROJECT_SOURCE_DIR}.*/*.mk$"
  185. "^${PROJECT_SOURCE_DIR}/makefile$"
  186. "^${PROJECT_SOURCE_DIR}/make.common$"
  187. "^${PROJECT_SOURCE_DIR}/make.post$"
  188. "^${PROJECT_SOURCE_DIR}/build$"
  189. "^${PROJECT_SOURCE_DIR}/buildall$"
  190. "^${PROJECT_SOURCE_DIR}/lastbuilds$"
  191. "^${PROJECT_SOURCE_DIR}/imerge$"
  192. "^${PROJECT_SOURCE_DIR}/tmerge$"
  193. "^${PROJECT_SOURCE_DIR}/tmerge.bat$"
  194. "^${PROJECT_SOURCE_DIR}/tag$"
  195. "^${PROJECT_SOURCE_DIR}/tag_build$"
  196. "^${PROJECT_SOURCE_DIR}/old_tag$"
  197. "^${PROJECT_SOURCE_DIR}/ecl/regress/"
  198. "^${PROJECT_SOURCE_DIR}/testing/"
  199. )
  200. ###
  201. ## Run file configuration to set build tag along with install lines for generated
  202. ## config files.
  203. ###
  204. set( BUILD_TAG "${projname}_${version}-${stagever}")
  205. if (USE_GIT_DESCRIBE OR CHECK_GIT_TAG)
  206. FETCH_GIT_TAG (${CMAKE_SOURCE_DIR} ${projname}_${version} GIT_BUILD_TAG)
  207. message ("-- Git tag is '${GIT_BUILD_TAG}'")
  208. if (NOT "${GIT_BUILD_TAG}" STREQUAL "${BUILD_TAG}")
  209. if (CHECK_GIT_TAG)
  210. message(FATAL_ERROR "Git tag '${GIT_BUILD_TAG}' does not match source version '${BUILD_TAG}'" )
  211. else()
  212. if(NOT "${GIT_BUILD_TAG}" STREQUAL "") # probably means being built from a tarball...
  213. set( BUILD_TAG "${BUILD_TAG}[${GIT_BUILD_TAG}]")
  214. endif()
  215. endif()
  216. endif()
  217. endif()
  218. message ("-- Build tag is '${BUILD_TAG}'")
  219. if (NOT "${BASE_BUILD_TAG}" STREQUAL "")
  220. set(BASE_BUILD_TAG "${BUILD_TAG}")
  221. endif()
  222. message ("-- Base build tag is '${BASE_BUILD_TAG}'")
  223. configure_file(${HPCC_SOURCE_DIR}/build-config.h.cmake "build-config.h" )
  224. #set( CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON )
  225. #set( CPACK_DEB_PACKAGE_COMPONENT ON )
  226. if ( UNIX )
  227. if ( "${packageManagement}" STREQUAL "DEB" )
  228. set ( CPACK_GENERATOR "${packageManagement}" )
  229. message("-- Will build DEB package")
  230. ###
  231. ## CPack instruction required for Debian
  232. ###
  233. message ("-- Packing BASH installation files")
  234. if ( CLIENTTOOLS_ONLY )
  235. set ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
  236. "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postinst;${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/prerm; ${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postrm")
  237. else ( CLIENTTOOLS_ONLY )
  238. set ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/initfiles/bash/sbin/deb/postinst;${CMAKE_CURRENT_BINARY_DIR}/initfiles/sbin/prerm;${CMAKE_CURRENT_BINARY_DIR}/initfiles/bash/sbin/deb/postrm" )
  239. endif ( CLIENTTOOLS_ONLY )
  240. elseif ( "${packageManagement}" STREQUAL "RPM" )
  241. set ( CPACK_GENERATOR "${packageManagement}" )
  242. ###
  243. ## CPack instruction required for RPM
  244. ###
  245. message("-- Will build RPM package")
  246. message ("-- Packing BASH installation files")
  247. if ( CLIENTTOOLS_ONLY )
  248. set ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postinst" )
  249. set ( CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/prerm" )
  250. set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postrm" )
  251. else ( CLIENTTOOLS_ONLY )
  252. set ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/initfiles/bash/sbin/deb/postinst" )
  253. set ( CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/initfiles/sbin/prerm" )
  254. set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/initfiles/bash/sbin/deb/postrm" )
  255. endif ( CLIENTTOOLS_ONLY )
  256. else()
  257. message("WARNING: Unsupported package ${packageManagement}.")
  258. endif ()
  259. endif ( UNIX )
  260. if ( EXISTS ${HPCC_SOURCE_DIR}/cmake_modules/dependencies/${packageRevision}.cmake )
  261. include( ${HPCC_SOURCE_DIR}/cmake_modules/dependencies/${packageRevision}.cmake )
  262. else()
  263. message("-- WARNING: DEPENDENCY FILE FOR ${packageRevision} NOT FOUND, Using deps template.")
  264. include( ${HPCC_SOURCE_DIR}/cmake_modules/dependencies/template.cmake )
  265. endif()
  266. if ( UNIX )
  267. set ( CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" )
  268. endif ( UNIX )
  269. if ( PLATFORM )
  270. else ( PLATFORM )
  271. if ( APPLE OR WIN32 )
  272. set ( CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}-${stagever}${CPACK_SYSTEM_NAME}" )
  273. endif()
  274. set ( CPACK_MONOLITHIC_INSTALL TRUE )
  275. set ( CPACK_PACKAGE_VENDOR "HPCC Systems" )
  276. file(WRITE "${PROJECT_BINARY_DIR}/welcome.txt"
  277. "HPCC Systems - Client Tools\r"
  278. "===========================\r\r"
  279. "This installer will install the HPCC Systems Client Tools.")
  280. set ( CPACK_RESOURCE_FILE_README "${PROJECT_BINARY_DIR}/welcome.txt" )
  281. set ( CPACK_RESOURCE_FILE_LICENSE "${HPCC_SOURCE_DIR}/${LICENSE_FILE}" )
  282. set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "HPCC Systems Client Tools." )
  283. if (WIN32)
  284. if ( "${SIGN_DIRECTORY}" STREQUAL "" )
  285. set ( SIGN_DIRECTORY "${HPCC_SOURCE_DIR}/../sign" )
  286. endif ()
  287. set ( CPACK_NSIS_DISPLAY_NAME "Client Tools" )
  288. set ( CPACK_PACKAGE_INSTALL_DIRECTORY "${DIR_NAME}\\\\${version}\\\\clienttools")
  289. set ( CPACK_PACKAGE_INSTALL_REGISTRY_KEY "clienttools_${version}")
  290. set ( CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON" )
  291. set ( CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\hpccsystems.com" )
  292. set ( CPACK_NSIS_CONTACT ${CPACK_PACKAGE_CONTACT} )
  293. set ( CPACK_NSIS_DEFINES "
  294. !define MUI_STARTMENUPAGE_DEFAULTFOLDER \\\"${CPACK_PACKAGE_VENDOR}\\\\${version}\\\\${CPACK_NSIS_DISPLAY_NAME}\\\"
  295. !define MUI_FINISHPAGE_NOAUTOCLOSE
  296. ")
  297. file(STRINGS "${SIGN_DIRECTORY}/passphrase.txt" PFX_PASSWORD LIMIT_COUNT 1)
  298. add_custom_target(SIGN
  299. COMMAND signtool sign /f "${SIGN_DIRECTORY}/hpcc_code_signing.pfx"
  300. /p "${PFX_PASSWORD}" /t "http://timestamp.verisign.com/scripts/timstamp.dll"
  301. "${CMAKE_BINARY_DIR}/${PACKAGE_FILE_NAME_PREFIX}*.exe"
  302. COMMENT "Digital Signature"
  303. )
  304. add_dependencies(SIGN PACKAGE)
  305. set_property(TARGET SIGN PROPERTY FOLDER "CMakePredefinedTargets")
  306. endif()
  307. endif( PLATFORM )
  308. ###
  309. ## Below are the non-compile based install scripts required for
  310. ## the hpcc platform.
  311. ###
  312. Install ( FILES ${HPCC_SOURCE_DIR}/${LICENSE_FILE} DESTINATION "." COMPONENT Runtime )
  313. include (CPack)