1
0
Fork 0
arangodb/cmake/ArangoDBMacros.cmake

458 lines
15 KiB
CMake

include(GNUInstallDirs)
option(USE_RELATIVE
"Do you want to have all path are relative to the binary"
OFF
)
if (USE_RELATIVE)
# /etc -------------------------------
set(ETCDIR_NATIVE "./etc/relative")
set(ETCDIR_INSTALL "etc/relative")
# etcd -------------------------------
file(TO_NATIVE_PATH "${ETCDIR_NATIVE}" ETCDIR_NATIVE)
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_NATIVE}")
# /var -------------------------------
set(VARDIR ""
CACHE path
"System configuration directory (defaults to prefix/var/arangodb)"
)
if (VARDIR STREQUAL "")
set(VARDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/var")
set(VARDIR_INSTALL "var")
else ()
set(VARDIR_NATIVE "${VARDIR}")
set(VARDIR_INSTALL "${VARDIR}")
endif ()
file(TO_NATIVE_PATH "${VARDIR_NATIVE}" VARDIR_NATIVE)
# database
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb")
# apps
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb-apps")
# logs
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/log/arangodb")
# tri_package
set(TRI_PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/arangodb")
# resources
set(TRI_RESOURCEDIR "resources")
# MS stuff ---------------------------
if (MSVC)
set(ARANGODB_INSTALL_SBIN "bin")
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/bin")
else ()
set(ARANGODB_INSTALL_SBIN "sbin")
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/sbin")
endif ()
add_definitions("-D_SYSCONFDIR_=\"${ETCDIR_ESCAPED}\"")
else ()
# etcd -------------------------------
set(ETCDIR "" CACHE path "System configuration directory (defaults to prefix/etc)")
# /etc -------------------------------
if (ETCDIR STREQUAL "")
set(ETCDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/etc/arangodb")
set(ETCDIR_INSTALL "etc/arangodb")
else ()
set(ETCDIR_NATIVE "${ETCDIR}/arangodb")
set(ETCDIR_INSTALL "${ETCDIR}/arangodb")
endif ()
# MS stuff ---------------------------
if (MSVC)
file(TO_NATIVE_PATH "${ETCDIR_INSTALL}" ETCDIR_INSTALL)
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_INSTALL}")
else ()
file(TO_NATIVE_PATH "${ETCDIR_NATIVE}" ETCDIR_NATIVE)
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_NATIVE}")
endif ()
add_definitions("-D_SYSCONFDIR_=\"${ETCDIR_ESCAPED}\"")
# /var
set(VARDIR ""
CACHE path
"System configuration directory (defaults to prefix/var/arangodb)"
)
if (VARDIR STREQUAL "")
set(VARDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/var")
set(VARDIR_INSTALL "var")
else ()
set(VARDIR_NATIVE "${VARDIR}")
set(VARDIR_INSTALL "${VARDIR}")
endif ()
file(TO_NATIVE_PATH "${VARDIR_NATIVE}" VARDIR_NATIVE)
# database directory
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb")
# apps
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb-apps")
# logs
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/log/arangodb")
# package
set(TRI_PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/arangodb")
# resources
set(TRI_RESOURCEDIR "resources")
# sbinaries
if (MSVC)
set(ARANGODB_INSTALL_SBIN "bin")
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/bin")
else ()
set(ARANGODB_INSTALL_SBIN "sbin")
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/sbin")
endif ()
endif (USE_RELATIVE)
# MS Windows -------------------------------------------------------------------
if (MSVC)
# icon paths
file(TO_NATIVE_PATH
"${TRI_RESOURCEDIR}/Icons/arangodb.ico"
RELATIVE_ARANGO_ICON
)
file(TO_NATIVE_PATH
"${PROJECT_SOURCE_DIR}/Installation/Windows/Icons/arangodb.bmp"
ARANGO_IMG
)
file(TO_NATIVE_PATH
"${PROJECT_SOURCE_DIR}/Installation/Windows/Icons/arangodb.ico"
ARANGO_ICON
)
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_IMG "${ARANGO_IMG}")
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_ICON "${ARANGO_ICON}")
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" RELATIVE_ARANGO_ICON "${RELATIVE_ARANGO_ICON}")
# versioning
set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
${PROJECT_SOURCE_DIR}/Installation/Windows/version
)
include("${PROJECT_SOURCE_DIR}/Installation/Windows/version/generate_product_version.cmake")
endif ()
################################################################################
## INSTALL
################################################################################
# Global macros ----------------------------------------------------------------
macro (generate_root_config name)
FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb/${name}.conf.in FileContent)
STRING(REPLACE "@PKGDATADIR@" "@ROOTDIR@/share/arangodb"
FileContent "${FileContent}")
STRING(REPLACE "@LOCALSTATEDIR@" "@ROOTDIR@/var"
FileContent "${FileContent}")
STRING(REPLACE "@SBINDIR@" "@ROOTDIR@/bin"
FileContent "${FileContent}")
STRING(REPLACE "@LIBEXECDIR@/arangodb" "@ROOTDIR@/bin"
FileContent "${FileContent}")
STRING(REPLACE "@SYSCONFDIR@" "@ROOTDIR@/etc/arangodb"
FileContent "${FileContent}")
if (MSVC)
STRING(REPLACE "@PROGRAM_SUFFIX@" ".exe"
FileContent "${FileContent}")
STRING(REGEX REPLACE "[\r\n]file =" "\n# file ="
FileContent "${FileContent}")
endif ()
FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb/${name}.conf "${FileContent}")
endmacro ()
# generates config file using the configured paths ----------------------------
macro (generate_path_config name)
FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb/${name}.conf.in FileContent)
STRING(REPLACE "@PKGDATADIR@" "${TRI_PKGDATADIR}"
FileContent "${FileContent}")
STRING(REPLACE "@LOCALSTATEDIR@" "${VARDIR_NATIVE}"
FileContent "${FileContent}")
FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb/${name}.conf "${FileContent}")
endmacro ()
# installs a config file -------------------------------------------------------
macro (install_config name)
if (MSVC OR DARWIN)
generate_root_config(${name})
else ()
generate_path_config(${name})
endif ()
install(
FILES ${PROJECT_BINARY_DIR}/etc/arangodb/${name}.conf
DESTINATION ${ETCDIR_INSTALL})
endmacro ()
# installs a readme file converting EOL ----------------------------------------
macro (install_readme input where output)
FILE(READ ${PROJECT_SOURCE_DIR}/${input} FileContent)
STRING(REPLACE "\r" "" FileContent "${FileContent}")
if (MSVC)
STRING(REPLACE "\n" "\r\n" FileContent "${FileContent}")
endif ()
FILE(WRITE ${PROJECT_BINARY_DIR}/${output} "${FileContent}")
install(
FILES ${PROJECT_BINARY_DIR}/${output}
DESTINATION ${where})
endmacro ()
# installs a link to an executable ---------------------------------------------
macro (install_command_alias name where alias)
if (MSVC)
add_custom_command(
TARGET ${name}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${name}>
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias}.exe)
install(
PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias}.exe
DESTINATION ${where})
else ()
add_custom_command(
TARGET ${name}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink ${name}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias})
install(
PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias}
DESTINATION ${where})
endif ()
endmacro ()
# sub directories --------------------------------------------------------------
#if(BUILD_STATIC_EXECUTABLES)
# set(CMAKE_EXE_LINKER_FLAGS -static)
# set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
# set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) # remove -Wl,-Bdynamic
# set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
# set(CMAKE_SHARED_LIBRARY_C_FLAGS) # remove -fPIC
# set(CMAKE_SHARED_LIBRARY_CXX_FLAGS)
# set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) # remove -rdynamic
# set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
# # Maybe this works as well, haven't tried yet.
# # set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
#else(BUILD_STATIC_EXECUTABLES)
# # Set RPATH to use for installed targets; append linker search path
# set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LOFAR_LIBDIR}")
# set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
#endif(BUILD_STATIC_EXECUTABLES)
#--------------------------------------------------------------------------------
#get_cmake_property(_variableNames VARIABLES)
#foreach (_variableName ${_variableNames})
# message(STATUS "${_variableName}=${${_variableName}}")
#endforeach ()
#--------------------------------------------------------------------------------
# install ----------------------------------------------------------------------
install(DIRECTORY ${PROJECT_SOURCE_DIR}/Documentation/man/
DESTINATION share/man)
if (MSVC)
install_readme(README . README.txt)
install_readme(README.md . README.md)
install_readme(README.windows . README.windows.txt)
endif ()
if (MSVC)
install_readme(LICENSE . LICENSE.txt)
install_readme(LICENSES-OTHER-COMPONENTS.md . LICENSES-OTHER-COMPONENTS.md)
else ()
install_readme(README share/doc/arangodb README)
install_readme(README.md share/doc/arangodb README.md)
install_readme(LICENSE share/doc/arangodb LICENSE)
install_readme(LICENSES-OTHER-COMPONENTS.md share/doc/arangodb LICENSES-OTHER-COMPONENTS.md)
endif ()
# Build package ----------------------------------------------------------------
if (NOT(MSVC))
set(CPACK_SET_DESTDIR ON)
endif()
# General
set(CPACK_PACKAGE_NAME "arangodb")
set(CPACK_PACKAGE_VENDOR "ArangoDB GmbH")
set(CPACK_PACKAGE_CONTACT "info@arangodb.org")
set(CPACK_PACKAGE_VERSION "${ARANGODB_VERSION}")
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set(CPACK_STRIP_FILES "ON")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
set(CPACK_DEBIAN_PACKAGE_SECTION "database")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "a multi-purpose NoSQL database
A distributed free and open-source database with a flexible data model for documents,
graphs, and key-values. Build high performance applications using a convenient
SQL-like query language or JavaScript extensions.
.
Copyright: 2012-2013 by triAGENS GmbH
Copyright: 2014-2015 by ArangoDB GmbH
ArangoDB Software
www.arangodb.com
")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.arangodb.com/")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/Installation/debian/postinst;${CMAKE_CURRENT_SOURCE_DIR}/Installation/debian/preinst;${CMAKE_CURRENT_SOURCE_DIR}/Installation/debian/postrm;${CMAKE_CURRENT_SOURCE_DIR}/Installation/debian/prerm;")
set(CPACK_BUNDLE_NAME "${CPACK_PACKAGE_NAME}")
configure_file("${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
set(CPACK_BUNDLE_ICON "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/icon.icns")
set(CPACK_BUNDLE_STARTUP_COMMAND "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/arangodb-cli.sh")
# OSX bundle
if (CPACK_GENERATOR STREQUAL "Bundle")
set(CPACK_PACKAGE_NAME "ArangoDB-CLI")
endif ()
# MS installer
if (MSVC)
set(CPACK_PACKAGE_NAME "ArangoDB")
set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Templates")
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL 1)
set(BITS 64)
if (CMAKE_CL_64)
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
SET(BITS 64)
else ()
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
SET(BITS 32)
endif ()
message(STATUS "ARANGO_IMG: ${ARANGO_IMG}")
message(STATUS "ARANGO_ICON: ${ARANGO_ICON}")
message(STATUS "RELATIVE_ARANGO_ICON: ${RELATIVE_ARANGO_ICON}")
install(
DIRECTORY "${PROJECT_SOURCE_DIR}/Installation/Windows/Icons"
DESTINATION ${TRI_RESOURCEDIR})
set(CPACK_NSIS_DEFINES "
!define BITS ${BITS}
!define TRI_FRIENDLY_SVC_NAME '${ARANGODB_FRIENDLY_STRING}'
!define TRI_AARDVARK_URL 'http://127.0.0.1:8529'
")
set(CPACK_PACKAGE_ICON ${ARANGO_ICON})
set(CPACK_NSIS_MODIFY_PATH ON)
set(CPACK_NSIS_MUI_ICON ${ARANGO_ICON})
set(CPACK_NSIS_MUI_UNIICON ${ARANGO_ICON})
set(CPACK_NSIS_INSTALLED_ICON_NAME ${RELATIVE_ARANGO_ICON})
set(CPACK_NSIS_DISPLAY_NAME, ${ARANGODB_DISPLAY_NAME})
set(CPACK_NSIS_HELP_LINK ${ARANGODB_HELP_LINK})
set(CPACK_NSIS_URL_INFO_ABOUT ${ARANGODB_URL_INFO_ABOUT})
set(CPACK_NSIS_CONTACT ${ARANGODB_CONTACT})
endif ()
configure_file("${CMAKE_SOURCE_DIR}/CMakeCPackOptions.cmake.in"
"${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY)
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake")
if (NOT(MSVC))
# components
install(
FILES ${PROJECT_SOURCE_DIR}/Installation/debian/arangodb.init
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
DESTINATION etc/init.d
RENAME arangodb
COMPONENT debian-extras
)
endif()
# Custom targets ----------------------------------------------------------------
# love
add_custom_target (love
COMMENT "ArangoDB loves you."
COMMAND ""
)
# Finally: user cpack
include(CPack)
################################################################################
### @brief install client-side JavaScript files
################################################################################
install(
DIRECTORY ${PROJECT_SOURCE_DIR}/js/common ${PROJECT_SOURCE_DIR}/js/client
DESTINATION share/arangodb/js
FILES_MATCHING PATTERN "*.js"
REGEX "^.*/common/test-data$" EXCLUDE
REGEX "^.*/common/tests$" EXCLUDE
REGEX "^.*/client/tests$" EXCLUDE)
## -----------------------------------------------------------------------------
## --SECTION-- END-OF-FILE
## -----------------------------------------------------------------------------
## Local Variables:
## mode: outline-minor
## outline-regexp: "^\\(### @brief\\|## --SECTION--\\|# -\\*- \\)"
## End:
################################################################################
### @brief install server-side JavaScript files
################################################################################
install(
DIRECTORY ${PROJECT_SOURCE_DIR}/js
DESTINATION share/arangodb)
################################################################################
### @brief install log directory
################################################################################
install(
DIRECTORY ${PROJECT_BINARY_DIR}/var/log/arangodb
DESTINATION ${VARDIR_INSTALL}/log)
################################################################################
### @brief install database directory
################################################################################
install(
DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb
DESTINATION ${VARDIR_INSTALL}/lib)
################################################################################
### @brief install apps directory
################################################################################
install(
DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb-apps
DESTINATION ${VARDIR_INSTALL}/lib)
## -----------------------------------------------------------------------------
## --SECTION-- END-OF-FILE
## -----------------------------------------------------------------------------
## Local Variables:
## mode: outline-minor
## outline-regexp: "### @brief\\|## --SECTION--\\|# -\\*- "
## End: