123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- ###############################################################################
- # HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ################################################################################
- #
- #########################################################
- # Description:
- # ------------
- # This file is the top level handling for
- # cmake based compilation and build process.
- #
- # To build for Linux:
- # 1. Check out sources (for example, to directory ~/hpcc)
- # 2. Create a build directory - either as a child of hpcc or elsewhere
- # 3. cd to the build directory
- # 4a.To create makefiles to build native release version for local machine, run
- # cmake ~/hpcc
- # 4b.To create makefiles to build native debug version, run
- # cmake -DCMAKE_BUILD_TYPE=Debug ~/hpcc
- # 4c.To create makefiles to build 32-bit version from 64-bit host, run
- # cmake -DCMAKE_C_FLAGS:STRING="-m32 -march=i386" -DCMAKE_CXX_FLAGS:STRING="-m32 -march=i386" ~/hpcc
- # 5. To build the makefiles just created above, run
- # make
- # 6. Executables will be created in ./<releasemode>/bin and ./<releasemode>/libs
- #
- # To build for Windows:
- # 1. Check out sources (for example, to directory c:\hpcc)
- # 2. Create a build directory - either as a child of hpcc or elsewhere
- # 3. cd to the build directory
- # 4. To create a Visual Studio project, run
- # cmake c:\hpcc -G "Visual Studio 9 2008"
- # The sln file hpccsystems-platform.sln will be created in the current directory, and will support debug and release targets
- # 5. To build the project, load the solution into the visual studio IDE and build in the usual way.
- # 6. Executables will be created in .\hpcc\bin\<release_mode>
- #
- #########################################################
- project (hpccsystems-platform)
- cmake_minimum_required (VERSION 2.8.3)
- include(CTest)
- ENABLE_TESTING()
- set (HPCC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
- set(CMAKE_MODULE_PATH "${HPCC_SOURCE_DIR}/cmake_modules/")
- include(${HPCC_SOURCE_DIR}/version.cmake)
- ###
- ## Build Level
- ###
- if( NOT BUILD_LEVEL )
- set ( BUILD_LEVEL "COMMUNITY" )
- endif()
- ###
- ###
- ## Config Block
- ###
- option(PREFIX "Set the install prefix")
- option(EXEC_PREFIX "Set the execution prefix")
- option(CONFIG_PREFIX "Set the configuration prefix")
- option(DIR_NAME "Set the install directory name")
- option(LIB_DIR "Set the library install dir")
- option(EXEC_DIR "Set the executable install dir")
- option(COMPONENTFILES_DIR "Set the componentfiles dir")
- option(ADMIN_DIR "Set the admin dir")
- option(PLUGINS_DIR "Set the plugins dir")
- option(CONFIG_SOURCE_DIR "Set the configuration source dir")
- option(RUNTIME_DIR "Set the runtime dir")
- option(HOME_DIR "Set the home dir")
- option(LOCK_DIR "Set the lock dir")
- option(PID_DIR "Set the pid dir")
- option(LOG_DIR "Set the log dir")
- option(RUNTIME_USER "Set the runtime username")
- option(RUNTIME_GROUP "Set the runtime group")
- option(ENV_XML_FILE "Set the environment xml file name.")
- option(ENV_CONF_FILE "Set the environment conf file name.")
- option(LICENSE_FILE "Set the license file to use.")
- if( NOT LICENSE_FILE )
- set(LICENSE_FILE "LICENSE.txt")
- endif()
- include(${HPCC_SOURCE_DIR}/cmake_modules/optionDefaults.cmake)
- ###
- include(${HPCC_SOURCE_DIR}/cmake_modules/commonSetup.cmake)
- if ( NOT MAKE_DOCS_ONLY )
- HPCC_ADD_SUBDIRECTORY (initfiles)
- HPCC_ADD_SUBDIRECTORY (tools)
- HPCC_ADD_SUBDIRECTORY (common)
- HPCC_ADD_SUBDIRECTORY (dali)
- HPCC_ADD_SUBDIRECTORY (deploy)
- HPCC_ADD_SUBDIRECTORY (deployment)
- HPCC_ADD_SUBDIRECTORY (ecl)
- HPCC_ADD_SUBDIRECTORY (ecllibrary)
- HPCC_ADD_SUBDIRECTORY (esp)
- HPCC_ADD_SUBDIRECTORY (plugins)
- HPCC_ADD_SUBDIRECTORY (roxie)
- HPCC_ADD_SUBDIRECTORY (rtl)
- HPCC_ADD_SUBDIRECTORY (services "PLATFORM")
- HPCC_ADD_SUBDIRECTORY (system)
- HPCC_ADD_SUBDIRECTORY (thorlcr "PLATFORM")
- HPCC_ADD_SUBDIRECTORY (testing)
- if ( NOT WIN32 )
- HPCC_ADD_SUBDIRECTORY (clienttools "CLIENTTOOLS_ONLY")
- endif()
- endif()
- HPCC_ADD_SUBDIRECTORY (docs "PLATFORM")
- if (APPLE OR WIN32)
- HPCC_ADD_SUBDIRECTORY (lib2)
- endif (APPLE OR WIN32)
- ###
- ## CPack install and packaging setup.
- ###
- INCLUDE(InstallRequiredSystemLibraries)
- if ( PLATFORM )
- set(CPACK_PACKAGE_NAME "hpccsystems-platform")
- set(PACKAGE_FILE_NAME_PREFIX "hpccsystems-platform")
- else()
- set(CPACK_PACKAGE_NAME "hpccsystems-clienttools-${majorver}.${minorver}")
- set(PACKAGE_FILE_NAME_PREFIX "hpccsystems-clienttools")
- endif()
- SET(CPACK_PACKAGE_VERSION_MAJOR ${majorver})
- SET(CPACK_PACKAGE_VERSION_MINOR ${minorver})
- SET(CPACK_PACKAGE_VERSION_PATCH ${point}${stagever})
- set ( CPACK_PACKAGE_CONTACT "HPCCSystems <ossdevelopment@lexisnexis.com>" )
- set( CPACK_SOURCE_GENERATOR TGZ )
- set ( CPACK_RPM_PACKAGE_VERSION "${projname}")
- SET(CPACK_RPM_PACKAGE_RELEASE "${version}${stagever}")
- if ( ${ARCH64BIT} EQUAL 1 )
- set ( CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
- else( ${ARCH64BIT} EQUAL 1 )
- set ( CPACK_RPM_PACKAGE_ARCHITECTURE "i386")
- endif ( ${ARCH64BIT} EQUAL 1 )
- set(CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}-${CPACK_RPM_PACKAGE_ARCHITECTURE}")
- if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
- set(CPACK_STRIP_FILES TRUE)
- endif()
- if ( APPLE )
- elseif ( UNIX )
- EXECUTE_PROCESS (
- COMMAND ${HPCC_SOURCE_DIR}/cmake_modules/distrocheck.sh
- OUTPUT_VARIABLE packageManagement
- ERROR_VARIABLE packageManagement
- )
- EXECUTE_PROCESS (
- COMMAND ${HPCC_SOURCE_DIR}/cmake_modules/getpackagerevisionarch.sh
- OUTPUT_VARIABLE packageRevisionArch
- ERROR_VARIABLE packageRevisionArch
- )
- EXECUTE_PROCESS (
- COMMAND ${HPCC_SOURCE_DIR}/cmake_modules/getpackagerevisionarch.sh --noarch
- OUTPUT_VARIABLE packageRevision
- ERROR_VARIABLE packageRevision
- )
- message ( "-- Auto Detecting Packaging type")
- message ( "-- distro uses ${packageManagement}, revision is ${packageRevisionArch}" )
- if ( "${packageManagement}" STREQUAL "RPM" AND WITH_PLUGINS )
- set ( CPACK_RPM_PACKAGE_VERSION "${projname}-with-plugins")
- endif()
- if ( "${packageManagement}" STREQUAL "DEB" )
- set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}-${stagever}${packageRevisionArch}")
- elseif ( "${packageManagement}" STREQUAL "RPM" )
- set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}-${stagever}.${packageRevisionArch}")
- else()
- set(CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}_${version}-${stagever}${CPACK_SYSTEM_NAME}")
- endif ()
- endif ()
- MESSAGE ("-- Current release version is ${CPACK_PACKAGE_FILE_NAME}")
- set ( CPACK_SOURCE_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}" )
- set( CPACK_SOURCE_GENERATOR TGZ )
- set(CPACK_SOURCE_IGNORE_FILES
- "~$"
- "\\\\.cvsignore$"
- "^${PROJECT_SOURCE_DIR}.*/CVS/"
- "^${PROJECT_SOURCE_DIR}.*/.svn/"
- "^${PROJECT_SOURCE_DIR}.*/.git/"
- "^${PROJECT_SOURCE_DIR}/ln/"
- "^${PROJECT_SOURCE_DIR}/externals/"
- "^${PROJECT_SOURCE_DIR}.*/*.mk$"
- "^${PROJECT_SOURCE_DIR}/makefile$"
- "^${PROJECT_SOURCE_DIR}/make.common$"
- "^${PROJECT_SOURCE_DIR}/make.post$"
- "^${PROJECT_SOURCE_DIR}/build$"
- "^${PROJECT_SOURCE_DIR}/buildall$"
- "^${PROJECT_SOURCE_DIR}/lastbuilds$"
- "^${PROJECT_SOURCE_DIR}/imerge$"
- "^${PROJECT_SOURCE_DIR}/tmerge$"
- "^${PROJECT_SOURCE_DIR}/tmerge.bat$"
- "^${PROJECT_SOURCE_DIR}/tag$"
- "^${PROJECT_SOURCE_DIR}/tag_build$"
- "^${PROJECT_SOURCE_DIR}/old_tag$"
- "^${PROJECT_SOURCE_DIR}/ecl/regress/"
- "^${PROJECT_SOURCE_DIR}/testing/"
- )
- ###
- ## Run file configuration to set build tag along with install lines for generated
- ## config files.
- ###
- set( BUILD_TAG "${projname}_${version}-${stagever}")
- if (USE_GIT_DESCRIBE OR CHECK_GIT_TAG)
- FETCH_GIT_TAG (${CMAKE_SOURCE_DIR} ${projname}_${version} GIT_BUILD_TAG)
- message ("-- Git tag is '${GIT_BUILD_TAG}'")
- if (NOT "${GIT_BUILD_TAG}" STREQUAL "${BUILD_TAG}")
- if (CHECK_GIT_TAG)
- message(FATAL_ERROR "Git tag '${GIT_BUILD_TAG}' does not match source version '${BUILD_TAG}'" )
- else()
- if(NOT "${GIT_BUILD_TAG}" STREQUAL "") # probably means being built from a tarball...
- set( BUILD_TAG "${BUILD_TAG}[${GIT_BUILD_TAG}]")
- endif()
- endif()
- endif()
- endif()
- message ("-- Build tag is '${BUILD_TAG}'")
- if (NOT "${BASE_BUILD_TAG}" STREQUAL "")
- set(BASE_BUILD_TAG "${BUILD_TAG}")
- endif()
- message ("-- Base build tag is '${BASE_BUILD_TAG}'")
- configure_file(${HPCC_SOURCE_DIR}/build-config.h.cmake "build-config.h" )
- #set( CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON )
- #set( CPACK_DEB_PACKAGE_COMPONENT ON )
- if ( UNIX )
- if ( "${packageManagement}" STREQUAL "DEB" )
- set ( CPACK_GENERATOR "${packageManagement}" )
- message("-- Will build DEB package")
- ###
- ## CPack instruction required for Debian
- ###
- message ("-- Packing BASH installation files")
- if ( CLIENTTOOLS_ONLY )
- set ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
- "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postinst;${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/prerm; ${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postrm")
- else ( CLIENTTOOLS_ONLY )
- 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" )
- endif ( CLIENTTOOLS_ONLY )
-
- elseif ( "${packageManagement}" STREQUAL "RPM" )
- set ( CPACK_GENERATOR "${packageManagement}" )
- ###
- ## CPack instruction required for RPM
- ###
- message("-- Will build RPM package")
- message ("-- Packing BASH installation files")
- if ( CLIENTTOOLS_ONLY )
- set ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postinst" )
- set ( CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/prerm" )
- set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/clienttools/install/postrm" )
- else ( CLIENTTOOLS_ONLY )
- set ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/initfiles/bash/sbin/deb/postinst" )
- set ( CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/initfiles/sbin/prerm" )
- set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/initfiles/bash/sbin/deb/postrm" )
- endif ( CLIENTTOOLS_ONLY )
- else()
- message("WARNING: Unsupported package ${packageManagement}.")
- endif ()
- endif ( UNIX )
- if ( EXISTS ${HPCC_SOURCE_DIR}/cmake_modules/dependencies/${packageRevision}.cmake )
- include( ${HPCC_SOURCE_DIR}/cmake_modules/dependencies/${packageRevision}.cmake )
- else()
- message("-- WARNING: DEPENDENCY FILE FOR ${packageRevision} NOT FOUND, Using deps template.")
- include( ${HPCC_SOURCE_DIR}/cmake_modules/dependencies/template.cmake )
- endif()
- if ( UNIX )
- set ( CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" )
- endif ( UNIX )
- if ( PLATFORM )
- else ( PLATFORM )
- if ( APPLE OR WIN32 )
- set ( CPACK_PACKAGE_FILE_NAME "${PACKAGE_FILE_NAME_PREFIX}_${CPACK_RPM_PACKAGE_VERSION}-${version}-${stagever}${CPACK_SYSTEM_NAME}" )
- endif()
- set ( CPACK_MONOLITHIC_INSTALL TRUE )
- set ( CPACK_PACKAGE_VENDOR "HPCC Systems" )
- file(WRITE "${PROJECT_BINARY_DIR}/welcome.txt"
- "HPCC Systems - Client Tools\r"
- "===========================\r\r"
- "This installer will install the HPCC Systems Client Tools.")
- set ( CPACK_RESOURCE_FILE_README "${PROJECT_BINARY_DIR}/welcome.txt" )
- set ( CPACK_RESOURCE_FILE_LICENSE "${HPCC_SOURCE_DIR}/${LICENSE_FILE}" )
- set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "HPCC Systems Client Tools." )
- if (WIN32)
- if ( "${SIGN_DIRECTORY}" STREQUAL "" )
- set ( SIGN_DIRECTORY "${HPCC_SOURCE_DIR}/../sign" )
- endif ()
- set ( CPACK_NSIS_DISPLAY_NAME "Client Tools" )
- set ( CPACK_PACKAGE_INSTALL_DIRECTORY "${DIR_NAME}\\\\${version}\\\\clienttools")
- set ( CPACK_PACKAGE_INSTALL_REGISTRY_KEY "clienttools_${version}")
- set ( CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON" )
- set ( CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\hpccsystems.com" )
- set ( CPACK_NSIS_CONTACT ${CPACK_PACKAGE_CONTACT} )
- set ( CPACK_NSIS_DEFINES "
- !define MUI_STARTMENUPAGE_DEFAULTFOLDER \\\"${CPACK_PACKAGE_VENDOR}\\\\${version}\\\\${CPACK_NSIS_DISPLAY_NAME}\\\"
- !define MUI_FINISHPAGE_NOAUTOCLOSE
- ")
- file(STRINGS "${SIGN_DIRECTORY}/passphrase.txt" PFX_PASSWORD LIMIT_COUNT 1)
- add_custom_target(SIGN
- COMMAND signtool sign /f "${SIGN_DIRECTORY}/hpcc_code_signing.pfx"
- /p "${PFX_PASSWORD}" /t "http://timestamp.verisign.com/scripts/timstamp.dll"
- "${CMAKE_BINARY_DIR}/${PACKAGE_FILE_NAME_PREFIX}*.exe"
- COMMENT "Digital Signature"
- )
- add_dependencies(SIGN PACKAGE)
- set_property(TARGET SIGN PROPERTY FOLDER "CMakePredefinedTargets")
- endif()
- endif( PLATFORM )
- ###
- ## Below are the non-compile based install scripts required for
- ## the hpcc platform.
- ###
- Install ( FILES ${HPCC_SOURCE_DIR}/${LICENSE_FILE} DESTINATION "." COMPONENT Runtime )
- include (CPack)
|