mirror of https://gitee.com/bigwinds/arangodb
775 lines
25 KiB
CMake
Executable File
775 lines
25 KiB
CMake
Executable File
# General -----------------------------------------------------------------------
|
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
project(ArangoDB)
|
|
set (ArangoDB_VERSION_MAJOR 3)
|
|
set (ArangoDB_VERSION_MINOR 0)
|
|
|
|
if(POLICY CMP0037)
|
|
cmake_policy(SET CMP0037 NEW)
|
|
endif()
|
|
|
|
set(ARANGODB_DISPLAY_NAME "ArangoDB")
|
|
set(ARANGODB_URL_INFO_ABOUT "http://www.arangodb.org")
|
|
set(ARANGODB_CONTACT "hackers@arangodb.org")
|
|
set(ARANGODB_VERSION "3.0" CACHE path "ArangoDB version")
|
|
|
|
set(ARANGODB_FRIENDLY_STRING "ArangoDB - the multi-model database")
|
|
set(ARANGOB_FRIENDLY_STRING "ArangoBench - stresstester")
|
|
set(ARANGO_DUMP_FRIENDLY_STRING
|
|
"arangodump - export whole databases from ArangoDB to JSON")
|
|
set(ARANGO_IMP_FRIENDLY_STRING "arangoimp - import CSV files into ArangoDB")
|
|
set(ARANGO_RESTORE_HELP_LINK
|
|
"arangrestore - import dumpfiles created with arangodump into ArangoDB")
|
|
set(ARANGOSH_HELP_LINK "arangosh - commandline client of ArangoDB")
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE string
|
|
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
|
FORCE)
|
|
endif ()
|
|
|
|
# Where 2 find CMAKE modules
|
|
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
|
|
|
# ArangoDB needs c++11
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
include (CheckCXX11Features)
|
|
|
|
# Need threads
|
|
find_package(Threads REQUIRED)
|
|
|
|
option(AR_USE_SYSTEM_LIBS "use libraries provided by the system" OFF)
|
|
|
|
# Object archives
|
|
set(LIB_ARANGO arango)
|
|
set(LIB_ARANGO_CLIENT arango_client)
|
|
set(LIB_ARANGO_V8 arango_v8)
|
|
|
|
# Binaries
|
|
set(BIN_ARANGOB arangob)
|
|
set(BIN_ARANGOD arangod)
|
|
set(BIN_ARANGODUMP arangodump)
|
|
set(BIN_ARANGOIMP arangoimp)
|
|
set(BIN_ARANGORESTORE arangorestore)
|
|
set(BIN_ARANGOSH arangosh)
|
|
|
|
# Google V8 engine including ICU
|
|
set(V8_VERSION 4.3.61)
|
|
|
|
configure_file (
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/lib/Basics/local-configuration.h.in"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/lib/Basics/local-configuration.h")
|
|
|
|
# OS type (Convenience) --------------------------------------------------------
|
|
if(WIN32)
|
|
if(NOT WINDOWS)
|
|
set(WINDOWS TRUE)
|
|
endif()
|
|
elseif(UNIX AND NOT APPLE)
|
|
if(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
|
|
set(LINUX TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*")
|
|
set(FREEBSD TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
|
|
set(NETBSD TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
|
|
set(OPENBSD TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*")
|
|
set(GNU TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
|
|
set(BSDI TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD")
|
|
set(FREEBSD TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*")
|
|
set(SYSV5 TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*")
|
|
set(SOLARIS TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*")
|
|
set(HPUX TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*")
|
|
set(AIX TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*")
|
|
set(MINIX TRUE)
|
|
endif()
|
|
elseif(APPLE)
|
|
if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*")
|
|
set(DARWIN TRUE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
|
|
set(MACOSX TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
# TODO: Exclude non-supported?
|
|
|
|
## Compiler flags --------------------------------------------------------------
|
|
|
|
# Build types
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TL)
|
|
message (${CMAKE_BUILD_TYPE_TL})
|
|
if(CMAKE_BUILD_TYPE_TL MATCHES debug)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g")
|
|
elseif(CMAKE_BUILD_TYPE_TL MATCHES relwithdebinfo)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -g")
|
|
elseif(CMAKE_BUILD_TYPE_TL MATCHES release)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
|
endif()
|
|
|
|
# GCC
|
|
if (CMAKE_COMPILER_IS_GNUCC)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu89")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
|
|
endif ()
|
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
endif ()
|
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
set (CMAKE_COMPILER_IS_CLANG 1)
|
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
|
set (CMAKE_COMPILER_IS_INTEL 1)
|
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
set (CMAKE_COMPILER_IS_INTEL 1)
|
|
endif()
|
|
|
|
# OSX
|
|
if (APPLE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
if (CMAKE_COMPILER_IS_CLANG)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
|
add_definitions("-Wno-deprecated-declarations")
|
|
endif()
|
|
endif ()
|
|
|
|
# Visual Studio
|
|
if (MSVC)
|
|
add_definitions("-D_CRT_SECURE_NO_WARNINGS=1")
|
|
add_definitions("-DFD_SETSIZE=2048")
|
|
add_definitions("-DUSE_REGEX_STATIC=1")
|
|
add_definitions("-DU_STATIC_IMPLEMENTATION=1")
|
|
|
|
foreach (flag_var
|
|
CMAKE_C_FLAGS
|
|
CMAKE_C_FLAGS_DEBUG
|
|
CMAKE_C_FLAGS_RELEASE
|
|
CMAKE_C_FLAGS_MINSIZEREL
|
|
CMAKE_C_FLAGS_RELWITHDEBINFO
|
|
CMAKE_CXX_FLAGS
|
|
CMAKE_CXX_FLAGS_DEBUG
|
|
CMAKE_CXX_FLAGS_RELEASE
|
|
CMAKE_CXX_FLAGS_MINSIZEREL
|
|
CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
if (${flag_var} MATCHES "/MD")
|
|
string(REGEX REPLACE "/MDd?" "" ${flag_var} "${${flag_var}}")
|
|
endif()
|
|
|
|
if (flag_var MATCHES "DEBUG")
|
|
set(${flag_var} "${${flag_var}} /MTd")
|
|
else ()
|
|
set(${flag_var} "${${flag_var}} /MT")
|
|
endif ()
|
|
endforeach()
|
|
|
|
set(MSVC_LIBS crypt32.lib;WINMM.LIB;Ws2_32.lib;getopt;regex)
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE /LTCG /SAFESEH:NO /ignore:4099")
|
|
endif ()
|
|
|
|
# Architecture
|
|
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
|
add_definitions("-DTRI_BITS=${BITS}")
|
|
include (VcMacros)
|
|
include (OptimizeForArchitecture)
|
|
OptimizeForArchitecture()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_ARCHITECTURE_FLAGS}")
|
|
|
|
# Enable Backtrace -------------------------------------------------------------
|
|
option(USE_BACKTRACE "whether we should try to generate c-level stacktraces"
|
|
OFF)
|
|
if (USE_BACKTRACE)
|
|
if (MSVC)
|
|
set(BT_LIBS "Dbghelp" CACHE path "Debug Helper libraries")
|
|
else ()
|
|
set(BT_LIBS "" CACHE path "Debug Helper libraries")
|
|
endif()
|
|
add_definitions("-DHAVE_BACKTRACE=1")
|
|
else()
|
|
set(BT_LIBS "" CACHE path "Debug Helper libraries")
|
|
endif()
|
|
|
|
# Maintainer mode (Assertions) -------------------------------------------------
|
|
option(USE_MAINTAINER_MODE
|
|
"whether we want to have assertions and other development features" OFF)
|
|
if (USE_MAINTAINER_MODE)
|
|
add_definitions("-DTRI_ENABLE_MAINTAINER_MODE=1")
|
|
endif()
|
|
|
|
# Enable relative paths to binaries --------------------------------------------
|
|
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)
|
|
# arango directories -----------------
|
|
# 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")
|
|
# bin dir ----------------------------
|
|
set(TRI_BINDIR_INSTALL "bin")
|
|
set(TRI_BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
|
# MS stuff ---------------------------
|
|
if (MSVC)
|
|
set(TRI_SBINDIR_INSTALL "bin")
|
|
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
|
else ()
|
|
set(TRI_SBINDIR_INSTALL "sbin")
|
|
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/sbin")
|
|
endif ()
|
|
add_definitions("-D_SYSCONFDIR_=\"${ETCDIR_ESCAPED}\"")
|
|
else(USE_RELATIVE)
|
|
# 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}\"")
|
|
# arango directories -----------------
|
|
# /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")
|
|
# binaries
|
|
if (MSVC)
|
|
set(TRI_BINDIR_INSTALL "bin")
|
|
set(TRI_BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
|
else ()
|
|
set(TRI_BINDIR_INSTALL "bin")
|
|
set(TRI_BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
|
endif ()
|
|
# sbinaries
|
|
if (MSVC)
|
|
set(TRI_SBINDIR_INSTALL "bin")
|
|
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
|
else ()
|
|
set(TRI_SBINDIR_INSTALL "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 ()
|
|
|
|
# etcd -------------------------------------------------------------------------
|
|
if (DARWIN)
|
|
install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/etcd-arango DESTINATION
|
|
${TRI_BINDIR_INSTALL})
|
|
endif ()
|
|
|
|
# Global include directories ---------------------------------------------------
|
|
include_directories(${PROJECT_SOURCE_DIR})
|
|
include_directories(${PROJECT_BINARY_DIR}/lib)
|
|
if (CUSTOM_INCLUDES)
|
|
include_directories(${CUSTOM_INCLUDES})
|
|
endif()
|
|
|
|
# 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}")
|
|
if ((${name} STREQUAL "arangod") AND RASPBIAN)
|
|
STRING(REGEX REPLACE "[\r\n]threads =[^\r\n]*" "\nthreads = 1"
|
|
FileContent "${FileContent}")
|
|
STRING(REGEX REPLACE "[\r\n]v8-contexts =[^\r\n]*" "\n8-contexts = 1"
|
|
FileContent "${FileContent}")
|
|
endif ()
|
|
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 ()
|
|
|
|
# Threads libraries -------------------------------------------------------------
|
|
find_package(Threads)
|
|
|
|
# Windows libraries -------------------------------------------------------------
|
|
if (MSVC)
|
|
set(MSVC_INCLUDE
|
|
${PROJECT_SOURCE_DIR}/WindowsLibraries/${BITS}/include
|
|
CACHE path "MSVC 3rd party include path")
|
|
set(MSVC_LIB_PATH ${PROJECT_SOURCE_DIR}/WindowsLibraries/${BITS}/lib
|
|
CACHE path "MSVC 3rd party library path")
|
|
endif ()
|
|
if (MSVC_INCLUDE)
|
|
include_directories(${MSVC_INCLUDE})
|
|
endif ()
|
|
if (MSVC_LIB_PATH)
|
|
link_directories(${MSVC_LIB_PATH})
|
|
endif ()
|
|
|
|
# Raspberry Pi ------------------------------------------------------------------
|
|
if (RASPBIAN)
|
|
set(ARM_INCLUDE ${PROJECT_SOURCE_DIR}/ArmLibraries/include
|
|
CACHE path "ARM 3rd party include path")
|
|
set(ARM_LIB_PATH ${PROJECT_SOURCE_DIR}/ArmLibraries/lib
|
|
CACHE path "ARM 3rd party library path")
|
|
endif ()
|
|
if (ARM_INCLUDE)
|
|
include_directories(${ARM_INCLUDE})
|
|
endif ()
|
|
if (ARM_LIB_PATH)
|
|
link_directories(${ARM_LIB_PATH})
|
|
endif ()
|
|
|
|
# ICU ---------------------------------------------------------------------------
|
|
if (MSVC)
|
|
set(ICU_LIBS "icui18n;icuuc" CACHE path "ICU libraries")
|
|
|
|
add_definitions("-DU_STATIC_IMPLEMENTATION=1")
|
|
elseif (RASPBIAN)
|
|
set(ICU_LIBS icui18n;icuuc;icudata;pthread;dl;m CACHE path "ICU libraries")
|
|
else ()
|
|
set(ICU_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/3rdParty/V8-${V8_VERSION}/third_party/icu/source/common;${PROJECT_SOURCE_DIR}/3rdParty/V8-${V8_VERSION}/third_party/icu/source/i18n;${PROJECT_SOURCE_DIR}/3rdParty/V8-${V8_VERSION}/third_party/icu/source/io CACHE path "ICU include path")
|
|
set(ICU_LIB_PATH ${PROJECT_SOURCE_DIR}/3rdParty/V8-${V8_VERSION}/out/native CACHE path "ICU library path")
|
|
if (LINUX)
|
|
set(ICU_LIB_PATH "${ICU_LIB_PATH}/obj.target/third_party/icu")
|
|
endif()
|
|
set(ICU_LIBS icui18n;icuuc;icudata;pthread;dl;m CACHE path "ICU libraries")
|
|
endif ()
|
|
|
|
if (ICU_INCLUDE_DIR)
|
|
include_directories(${ICU_INCLUDE_DIR})
|
|
endif ()
|
|
|
|
if (ICU_LIB_PATH)
|
|
link_directories(${ICU_LIB_PATH})
|
|
endif ()
|
|
|
|
# V8 ----------------------------------------------------------------------------
|
|
|
|
if (MSVC OR RASPBIAN)
|
|
set(V8_LIBS v8_base;v8_libbase;v8_libplatform;v8_nosnapshot CACHE string "V8 libraries")
|
|
else ()
|
|
set(V8_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/3rdParty/V8-${V8_VERSION}/include CACHE path "V8 include path")
|
|
set(V8_LIB_PATH ${PROJECT_SOURCE_DIR}/3rdParty/V8-${V8_VERSION}/out/native CACHE path "V8 library path")
|
|
if (LINUX)
|
|
set(V8_LIB_PATH "${V8_LIB_PATH}/obj.target/tools/gyp")
|
|
endif()
|
|
set(V8_LIBS v8_base;v8_libbase;v8_libplatform;v8_nosnapshot CACHE string "V8 libraries")
|
|
endif ()
|
|
|
|
if (V8_INCLUDE_DIR)
|
|
include_directories(${V8_INCLUDE_DIR})
|
|
endif ()
|
|
|
|
if (V8_LIB_PATH)
|
|
link_directories(${V8_LIB_PATH})
|
|
endif ()
|
|
|
|
add_definitions("-DTRI_V8_VERSION=\"${V8_VERSION}\"")
|
|
|
|
|
|
add_definitions("-DTRI_V8_VERSION=\"${V8_VERSION}\"")
|
|
|
|
# LibEV ------------------------------------------------------------------------
|
|
set(LIBEV_VERSION "unknown" CACHE string "LIBEV version")
|
|
|
|
if (MSVC OR RASPBIAN)
|
|
set(LIBEV_LIBS ev CACHE string "LIBEV libraries")
|
|
else ()
|
|
set(LIBEV_INCLUDE ${PROJECT_SOURCE_DIR}/3rdParty/libev CACHE path "LIBEV include path")
|
|
set(LIBEV_LIB_PATH ${PROJECT_SOURCE_DIR}/3rdParty/libev/.libs CACHE path "LIBEV library path")
|
|
set(LIBEV_LIBS ev CACHE string "LIBEV libraries")
|
|
endif ()
|
|
|
|
if (LIBEV_INCLUDE)
|
|
include_directories(${LIBEV_INCLUDE})
|
|
endif ()
|
|
|
|
if (LIBEV_LIB_PATH)
|
|
link_directories(${LIBEV_LIB_PATH})
|
|
endif ()
|
|
|
|
add_definitions("-DTRI_LIBEV_VERSION=\"${LIBEV_VERSION}\"")
|
|
|
|
|
|
# Boost ------------------------------------------------------------------------
|
|
find_package(Boost 1.48 COMPONENTS unit_test_framework)
|
|
if (${Boost_FOUND})
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
add_definitions(-DBoost_MAJOR_VERSION=${Boost_MAJOR_VERSION})
|
|
add_definitions(-DBoost_MINOR_VERSION=${Boost_MINOR_VERSION})
|
|
link_directories (${BOOST_LIBRARYDIR})
|
|
else()
|
|
message ("Boost unit test framework not found. Unit tests are disabled.")
|
|
endif()
|
|
|
|
# OpenSSL ----------------------------------------------------------------------
|
|
#set (OPENSSL_USE_STATIC_LIBS "TRUE")
|
|
find_package(OpenSSL REQUIRED)
|
|
include_directories(${OPENSSL_INCLUDE_DIR})
|
|
if (OPENSSL_VERSION)
|
|
string(REPLACE "." ";" OPENSSL_VERSION_LIST ${OPENSSL_VERSION})
|
|
list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
|
|
list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
|
|
if (${OPENSSL_VERSION_MAJOR} GREATER 0 AND ${OPENSSL_VERSION_MINOR} GREATER 0)
|
|
add_definitions(-DOPENSSL_NO_SSL2)
|
|
endif()
|
|
endif()
|
|
|
|
# BISON&FLEX -------------------------------------------------------------------
|
|
find_package (BISON)
|
|
|
|
# FLEX -------------------------------------------------------------------------
|
|
find_package (FLEX)
|
|
|
|
# GO ---------------------------------------------------------------------------
|
|
find_package(Go 1.2)
|
|
|
|
# Python
|
|
find_package(PythonInterp 2)
|
|
set(ENV{PYTHON_EXECUTABLE} ${PYTHON_EXECUTABLE})
|
|
|
|
# zlib -------------------------------------------------------------------------
|
|
set(ZLIB_VERSION "unknown" CACHE string "ZLIB version")
|
|
|
|
if (MSVC OR RASPBIAN)
|
|
set(ZLIB_LIBS z CACHE string "ZLIB libraries")
|
|
else ()
|
|
set(ZLIB_INCLUDE ${PROJECT_SOURCE_DIR}/3rdParty/zlib-1.2.7
|
|
CACHE path "ZLIB include path")
|
|
set(ZLIB_LIB_PATH ${PROJECT_SOURCE_DIR}/3rdParty/zlib-1.2.7
|
|
CACHE path "ZLIB library path")
|
|
set(ZLIB_LIBS z CACHE string "ZLIB libraries")
|
|
endif ()
|
|
|
|
if (ZLIB_INCLUDE)
|
|
include_directories(${ZLIB_INCLUDE})
|
|
endif ()
|
|
|
|
if (ZLIB_LIB_PATH)
|
|
link_directories(${ZLIB_LIB_PATH})
|
|
endif ()
|
|
|
|
add_definitions("-DTRI_ZLIB_VERSION=\"${ZLIB_VERSION}\"")
|
|
|
|
# 3rd party libraries
|
|
add_subdirectory(3rdParty)
|
|
|
|
# sub directories --------------------------------------------------------------
|
|
add_subdirectory(lib)
|
|
add_subdirectory(arangosh)
|
|
add_subdirectory(arangod)
|
|
add_subdirectory(js)
|
|
|
|
# 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 ()
|
|
|
|
# Tests -----------------------------------------------------------------------
|
|
set(TEST_BASICS_SUITE basics_suite)
|
|
set(TEST_GEO_SUITE geo_suite)
|
|
enable_testing()
|
|
add_subdirectory(UnitTests)
|
|
|
|
# Build package ----------------------------------------------------------------
|
|
# Posible options are:
|
|
# - dmg-cli: Mac OS X shell client application
|
|
# - debian: debian package
|
|
# - raspbian: raspberry debian package
|
|
set(BUILD_PACKAGE "unknown" CACHE path "Package type to build")
|
|
|
|
# Raspberry Pi
|
|
if (BUILD_PACKAGE STREQUAL "raspbian")
|
|
add_definitions("-DTRI_FORCE_ARMV6")
|
|
option(RASPBIAN "Building for Raspberry PI" ON)
|
|
else ()
|
|
option(RASPBIAN "Building for Raspberry PI" OFF)
|
|
endif ()
|
|
|
|
# OSX
|
|
if (BUILD_PACKAGE STREQUAL "dmg-cli")
|
|
option(DARWIN "Building for MacOS" ON)
|
|
else ()
|
|
option(DARWIN "Building for MacOS" OFF)
|
|
endif ()
|
|
|
|
# Windows
|
|
if (MSVC)
|
|
else ()
|
|
set(CPACK_SET_DESTDIR ON)
|
|
endif ()
|
|
|
|
# General
|
|
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")
|
|
|
|
if (DARWIN)
|
|
set(CPACK_PACKAGE_NAME "ArangoDB-CLI")
|
|
elseif (RASPBIAN)
|
|
set(CPACK_PACKAGE_NAME "arangodb")
|
|
elseif (BUILD_PACKAGE STREQUAL "debian")
|
|
set(CPACK_PACKAGE_NAME "arangodb")
|
|
elseif (MSVC)
|
|
set(CPACK_PACKAGE_NAME "ArangoDB")
|
|
endif ()
|
|
|
|
# debian
|
|
if ((BUILD_PACKAGE STREQUAL "debian") OR RASPBIAN)
|
|
if (RASPBIAN)
|
|
set(CPACK_SYSTEM_NAME "raspbian")
|
|
endif ()
|
|
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "database")
|
|
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
|
"${PROJECT_SOURCE_DIR}/Installation/ARM/postinst;${PROJECT_SOURCE_DIR}/Installation/ARM/preinst;${PROJECT_SOURCE_DIR}/Installation/ARM/postrm;${PROJECT_SOURCE_DIR}/Installation/ARM/prerm;")
|
|
|
|
install(
|
|
FILES ${PROJECT_SOURCE_DIR}/Installation/ARM/rc.arangodb
|
|
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
|
DESTINATION /etc/init.d
|
|
RENAME arangodb)
|
|
|
|
install(
|
|
CODE
|
|
"EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory \$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/share/arangodb/js/apps)")
|
|
|
|
install(
|
|
CODE
|
|
"EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink /var/lib/arangodb-apps \$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}/share/arangodb/js/apps/databases)")
|
|
endif ()
|
|
|
|
# OSX bundle
|
|
if (DARWIN)
|
|
set(CPACK_BUNDLE_NAME "${CPACK_PACKAGE_NAME}")
|
|
set(CPACK_BUNDLE_PLIST "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/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")
|
|
endif ()
|
|
|
|
# MS installer
|
|
if (MSVC)
|
|
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})
|
|
|
|
# etcd
|
|
if(CMAKE_CL_64)
|
|
install(PROGRAMS WindowsLibraries/64/bin/etcd-arango.exe
|
|
DESTINATION ${TRI_SBINDIR_INSTALL})
|
|
|
|
install(FILES WindowsLibraries/64/icudtl.dat
|
|
DESTINATION share/arangodb
|
|
RENAME icudt54l.dat)
|
|
else()
|
|
install(PROGRAMS WindowsLibraries/32/bin/etcd-arango.exe
|
|
DESTINATION ${TRI_SBINDIR_INSTALL})
|
|
|
|
install(FILES WindowsLibraries/32/icudtl.dat
|
|
DESTINATION share/arangodb
|
|
RENAME icudt54l.dat)
|
|
endif()
|
|
|
|
endif ()
|
|
|
|
# Finally: user cpack
|
|
include(CPack)
|
|
|