diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f92cf8ae2..21d0a44deb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,9 +29,9 @@ endif () set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "deployment target for MacOSX") if (WIN32) - project(ArangoDB CXX C) + project(arangodb3 CXX C) else () - project(ArangoDB CXX C ASM) + project(arangodb3 CXX C ASM) endif () # where to find CMAKE modules @@ -713,10 +713,6 @@ if (USE_OPENSSL_NO_SSL2) add_definitions(-DOPENSSL_NO_SSL2) endif () -if(WIN32) - option(BUNDLE_OPENSSL "Bundle OpenSSL library" ON) -endif() - ################################################################################ ## V8 ################################################################################ diff --git a/Installation/Jenkins/build.sh b/Installation/Jenkins/build.sh index de5bbf0cc5..b3c94b05ee 100755 --- a/Installation/Jenkins/build.sh +++ b/Installation/Jenkins/build.sh @@ -11,24 +11,24 @@ fi # remove local from LD_LIBRARY_PATH if [ "$LD_LIBRARY_PATH" != "" ]; then - LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed -e 's/:$//'`; + LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed -e 's/:$//'`; fi # find out if we are running on 32 or 64 bit BITS=32 case `uname -m` in - x86_64) - BITS=64 - ;; + x86_64) + BITS=64 + ;; - armv7l) - BITS=32 - ;; + armv7l) + BITS=32 + ;; - armv6) - BITS=32 - ;; + armv6) + BITS=32 + ;; esac # check if there are any relevant changes to the source code @@ -36,19 +36,19 @@ esac LASTREV="" if test -f last_compiled_version.sha; then - LASTREV=`cat last_compiled_version.sha` + LASTREV=`cat last_compiled_version.sha` fi COMPILE_MATTERS="3rdParty" CLEAN_IT=1 if test -n "$LASTREV"; then - lines=`git diff ${LASTREV}: ${COMPILE_MATTERS} | wc -l` + lines=`git diff ${LASTREV}: ${COMPILE_MATTERS} | wc -l` - if test $lines -eq 0; then - echo "no relevant changes, no need for full recompile" - CLEAN_IT=0 - fi + if test $lines -eq 0; then + echo "no relevant changes, no need for full recompile" + CLEAN_IT=0 + fi fi # setup make options @@ -61,8 +61,13 @@ MAKE=make CFLAGS="-g" CXXFLAGS="-g" LDFLAGS="-g" +V8_CFLAGS="" +V8_CXXFLAGS="" +V8_LDFLAGS="" LIBS="" +BUILD_DIR="build" + MAKE_PARAMS="" MAKE_CMD_PREFIX="" @@ -81,154 +86,183 @@ SANITIZE=0 VERBOSE=0 while [ $# -gt 0 ]; do - case "$1" in - --clang) - CLANG=1 - shift - ;; + case "$1" in + --clang) + CLANG=1 + shift + ;; - --clang36) - CLANG36=1 - shift - ;; + --clang36) + CLANG36=1 + shift + ;; - --gcc5) - GCC5=1 - shift - ;; + --gcc5) + GCC5=1 + shift + ;; - --sanitize) - SANITIZE=1 - shift - ;; + --sanitize) + SANITIZE=1 + shift + ;; - --coverage) - COVERAGE=1 - shift - ;; + --coverage) + COVERAGE=1 + shift + ;; - --gold) - GOLD=1 - shift - ;; + --gold) + GOLD=1 + shift + ;; - --failure-tests) - FAILURE_TESTS=1 - shift - ;; + --failure-tests) + FAILURE_TESTS=1 + shift + ;; - --verbose) - VERBOSE=1 - shift - ;; - - --cpack) - CPACK=1 - shift - ;; + --verbose) + VERBOSE=1 + shift + ;; + + --builddir) + shift + BUILD_DIR=$1 + shift + ;; - --cswgcc) - export CC="/opt/csw/bin/gcc" - export CXX="/opt/csw/bin/g++" - MAKE=/opt/csw/bin/gmake - PATH=/opt/csw/bin/:${PATH} - shift - ;; - --targetDir) - shift - TARGET_DIR=$1 - shift - ;; - *) - break - ;; - esac + --cswgcc) + export CC="/opt/csw/bin/gcc" + export CXX="/opt/csw/bin/g++" + MAKE=/opt/csw/bin/gmake + PATH=/opt/csw/bin/:${PATH} + shift + ;; + + --package) + shift + CPACK="$1" + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DPACKAGING=$1" + shift + ;; + + --jemalloc) + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DUSE_JEMALLOC=On" + shift + ;; + + --rpath) + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_SKIP_RPATH=On" + shift + ;; + + --staticlibc) + CFLAGS="${CFLAGS} -static-libgcc" + CXXFLAGS="${CXXFLAGS} -static-libgcc -static-libstdc++" + V8_CFLAGS="${V8_CFLAGS} -static-libgcc" + V8_CXXFLAGS="${V8_CXXFLAGS} -static-libgcc -static-libstdc++" + V8_LDFLAGS="${V8_LDFLAGS} -static-libgcc -static-libstdc++" + shift + ;; + + --targetDir) + shift + TARGET_DIR=$1 + shift + ;; + + *) + break + ;; + esac done if [ "$GCC5" == 1 ]; then - CC=/usr/bin/gcc-5 - CXX=/usr/bin/g++-5 + CC=/usr/bin/gcc-5 + CXX=/usr/bin/g++-5 elif [ "$CLANG" == 1 ]; then - CC=/usr/bin/clang - CXX=/usr/bin/clang++ - CXXFLAGS="${CXXFLAGS} -std=c++11" + CC=/usr/bin/clang + CXX=/usr/bin/clang++ + CXXFLAGS="${CXXFLAGS} -std=c++11" elif [ "$CLANG36" == 1 ]; then - CC=/usr/bin/clang-3.6 - CXX=/usr/bin/clang++-3.6 - CXXFLAGS="${CXXFLAGS} -std=c++11" + CC=/usr/bin/clang-3.6 + CXX=/usr/bin/clang++-3.6 + CXXFLAGS="${CXXFLAGS} -std=c++11" fi case "$1" in - standard) - CFLAGS="${CFLAGS} -O3" - CXXFLAGS="${CXXFLAGS} -O3" + standard) + CFLAGS="${CFLAGS} -O3" + CXXFLAGS="${CXXFLAGS} -O3" + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_BUILD_TYPE=RelWithDebInfo" + echo "using standard compile configuration" + ;; - echo "using standard compile configuration" - ;; + debug) + CFLAGS="${CFLAGS} -O0" + CXXFLAGS="${CXXFLAGS} -O0" + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --enable-v8-debug" - debug) - CFLAGS="${CFLAGS} -O0" - CXXFLAGS="${CXXFLAGS} -O0" - CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --enable-v8-debug" + echo "using debug compile configuration" + ;; - echo "using debug compile configuration" - ;; + maintainer) + CFLAGS="${CFLAGS} -O3" + CXXFLAGS="${CXXFLAGS} -O3" + MAINTAINER_MODE="-DUSE_MAINTAINER_MODE=on" - maintainer) - CFLAGS="${CFLAGS} -O3" - CXXFLAGS="${CXXFLAGS} -O3" - MAINTAINER_MODE="-DUSE_MAINTAINER_MODE=on" + echo "using maintainer mode" + ;; + + scan-build) + MAKE_CMD_PREFIX="scan-build" + MAKE_PARAMS="-f Makefile" - echo "using maintainer mode" - ;; - - scan-build) - MAKE_CMD_PREFIX="scan-build" - MAKE_PARAMS="-f Makefile" + echo "using scan-build compile configuration" - echo "using scan-build compile configuration" + ;; - ;; - - *) - echo "using unknown compile configuration" - ;; + *) + echo "using unknown compile configuration" + ;; esac if [ "$SANITIZE" == 1 ]; then - if [ "$GCC5" == 1 ]; then - CFLAGS="${CFLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -fno-sanitize=vptr -fno-omit-frame-pointer" - CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -fno-sanitize=vptr -fno-omit-frame-pointer" - LDFLAGS="${LDFLAGS} -pthread" - LIBS="ubsan;asan" - else - CFLAGS="${CFLAGS} -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" - CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" - LDFLAGS="-pthread" - fi + if [ "$GCC5" == 1 ]; then + CFLAGS="${CFLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -fno-sanitize=vptr -fno-omit-frame-pointer" + CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -fno-sanitize=vptr -fno-omit-frame-pointer" + LDFLAGS="${LDFLAGS} -pthread" + LIBS="ubsan;asan" + else + CFLAGS="${CFLAGS} -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" + CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" + LDFLAGS="-pthread" + fi fi if [ "$COVERAGE" == 1 ]; then - CFLAGS="${CFLAGS} -O0 -fprofile-arcs -ftest-coverage -DCOVERAGE" - CXXFLAGS="${CXXFLAGS} -O0 -fprofile-arcs -ftest-coverage -DCOVERAGE" - LDFLAGS="${LDFLAGS} -pthread" - LIBS="gcov" + CFLAGS="${CFLAGS} -O0 -fprofile-arcs -ftest-coverage -DCOVERAGE" + CXXFLAGS="${CXXFLAGS} -O0 -fprofile-arcs -ftest-coverage -DCOVERAGE" + LDFLAGS="${LDFLAGS} -pthread" + LIBS="gcov" fi if [ "$GOLD" == 1 ]; then - CXXFLAG="${CXXFLAGS} -B/usr/bin/gold" + CXXFLAG="${CXXFLAGS} -B/usr/bin/gold" fi if [ "$FAILURE_TESTS" == 1 ]; then - CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DUSE_FAILURE_TESTS=on"; + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DUSE_FAILURE_TESTS=on"; fi if [ -n "$CC" ]; then - CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_C_COMPILER=${CC}" + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_C_COMPILER=${CC}" fi if [ -n "$CXX" ]; then - CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_CXX_COMPILER=${CXX}" + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_CXX_COMPILER=${CXX}" fi CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DUSE_OPTIMIZE_FOR_ARCHITECTURE=Off" @@ -247,29 +281,34 @@ echo " CONFIGURE_OPTIONS: ${CONFIGURE_OPTIONS} ${MAINTAINER_MODE}" # compile everything if test ${CLEAN_IT} -eq 1; then - echo "found fundamental changes, rebuilding from scratch!" - git clean -f -d -x + echo "found fundamental changes, rebuilding from scratch!" + git clean -f -d -x fi set -test -d build || mkdir build -cd build +test -d ${BUILD_DIR} || mkdir ${BUILD_DIR} +cd ${BUILD_DIR} VERBOSE_MAKE="" if [ "${VERBOSE}" == 1 ]; then - CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DVERBOSE=ON" - VERBOSE_MAKE="V=1 Verbose=1 VERBOSE=1" + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DVERBOSE=ON" + VERBOSE_MAKE="V=1 Verbose=1 VERBOSE=1" fi if [ ! -f Makefile ]; then - CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" \ - cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DETCDIR=/etc -DVARDIR=/var ${CONFIGURE_OPTIONS} ${MAINTAINER_MODE} + CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" \ + cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DVARDIR=/var ${CONFIGURE_OPTIONS} ${MAINTAINER_MODE} fi ${MAKE_CMD_PREFIX} ${MAKE} ${VERBOSE_MAKE} -j "${PARALLEL_BUILDS}" ${MAKE_PARAMS} -if [ "$CPACK" == "1" -a -n "${TARGET_DIR}" ]; then - cpack -G DEB - cp *.deb ${TARGET_DIR} +if [ -n "$CPACK" -a -n "${TARGET_DIR}" ]; then + if [ "$CPACK" == "DEB" ]; then + make prepare_debian + fi + + cpack -G "$CPACK" + EXT=`echo $CPACK|tr '[:upper:]' '[:lower:]'` + cp *.${EXT} ${TARGET_DIR} fi git rev-parse HEAD > ../last_compiled_version.sha @@ -277,53 +316,53 @@ git rev-parse HEAD > ../last_compiled_version.sha # and install if test -n "${TARGET_DIR}"; then - echo "building distribution tarball" - mkdir -p "${TARGET_DIR}" - dir="${TARGET_DIR}" - TARFILE=arangodb.tar.gz - TARFILE_TMP=`pwd`/arangodb.tar.$$ + echo "building distribution tarball" + mkdir -p "${TARGET_DIR}" + dir="${TARGET_DIR}" + TARFILE=arangodb.tar.gz + TARFILE_TMP=`pwd`/arangodb.tar.$$ - mkdir -p ${dir} - trap "rm -rf ${TARFILE_TMP}" EXIT - - (cd .. - - touch 3rdParty/.keepme - touch arangod/.keepme - touch arangosh/.keepme - - tar -c -f ${TARFILE_TMP} \ - VERSION utils scripts etc/relative UnitTests Documentation js \ - lib/Basics/errors.dat \ - 3rdParty/.keepme \ - arangod/.keepme \ - arangosh/.keepme - ) - - tar -u -f ${TARFILE_TMP} \ - bin etc tests - - find . -name *.gcno > files.$$ - - if [ -s files.$$ ]; then - tar -u -f ${TARFILE_TMP} \ - --files-from files.$$ + mkdir -p ${dir} + trap "rm -rf ${TARFILE_TMP}" EXIT (cd .. - find . \ - \( -name *.cpp -o -name *.h -o -name *.c -o -name *.hpp -o -name *.ll -o -name *.y \) > files.$$ + touch 3rdParty/.keepme + touch arangod/.keepme + touch arangosh/.keepme - tar -u -f ${TARFILE_TMP} \ - --files-from files.$$ - - rm files.$$ + tar -c -f ${TARFILE_TMP} \ + VERSION utils scripts etc/relative UnitTests Documentation js \ + lib/Basics/errors.dat \ + 3rdParty/.keepme \ + arangod/.keepme \ + arangosh/.keepme ) + + tar -u -f ${TARFILE_TMP} \ + bin etc tests - rm files.$$ + find . -name *.gcno > files.$$ - gzip < ${TARFILE_TMP} > ${dir}/${TARFILE} - md5sum < ${dir}/${TARFILE} > ${dir}/${TARFILE}.md5 - rm ${TARFILE_TMP} - fi + if [ -s files.$$ ]; then + tar -u -f ${TARFILE_TMP} \ + --files-from files.$$ + + (cd .. + + find . \ + \( -name *.cpp -o -name *.h -o -name *.c -o -name *.hpp -o -name *.ll -o -name *.y \) > files.$$ + + tar -u -f ${TARFILE_TMP} \ + --files-from files.$$ + + rm files.$$ + ) + + rm files.$$ + + gzip < ${TARFILE_TMP} > ${dir}/${TARFILE} + md5sum < ${dir}/${TARFILE} > ${dir}/${TARFILE}.md5 + rm ${TARFILE_TMP} + fi fi diff --git a/Installation/debian/packagedesc.txt b/Installation/debian/packagedesc.txt new file mode 100644 index 0000000000..8e2a603a19 --- /dev/null +++ b/Installation/debian/packagedesc.txt @@ -0,0 +1,9 @@ +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: 2014-2016 by ArangoDB GmbH + Copyright: 2012-2013 by triAGENS GmbH + ArangoDB Software + www.arangodb.com diff --git a/Installation/rpm/arangodb.spec.in b/Installation/rpm/arangodb.spec.in new file mode 100644 index 0000000000..b53e02b8e6 --- /dev/null +++ b/Installation/rpm/arangodb.spec.in @@ -0,0 +1,495 @@ +# +# spec file for package arangodb +# +# +# Copyright (c) 2014 info@arangodb.org +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +## ----------------------------------------------------------------------------- +## --SECTION-- global variables +## ----------------------------------------------------------------------------- + +%define _cfgdir %{_sysconfdir}/arangodb3 +%define _databasedir %{_localstatedir}/lib/arangodb3 +%define _appdir %{_localstatedir}/lib/arangodb3-apps +%define _logdir %{_localstatedir}/log/arangodb3 + +%if 0%{?suse_version} >= 1230 +%define _piddir /run/arangodb +%else +%define _piddir %{_localstatedir}/run/arangodb +%endif + +%define _skipFdupes 0 + +## ----------------------------------------------------------------------------- +## --SECTION-- package data +## ----------------------------------------------------------------------------- + +Name: @CPACK_PACKAGE_NAME@ +Version: @CPACK_PACKAGE_VERSION@ +Release: 1.1 +Summary: The open-source, multi-model NoSQL database +License: Apache-2.0 +Group: Productivity/Databases/Servers +Conflicts: arangodb3-client +Url: http://www.arangodb.com +Source: arangodb-%{version}.tar.bz2 +Source1: init-files.tar.bz2 +Vendor: @CPACK_PACKAGE_VENDOR@ +Prefix: @CPACK_PACKAGING_INSTALL_PREFIX@ +BuildRoot: @CMAKE_CURRENT_BINARY_DIR@/_CPack_Packages/Linux/RPM/@CPACK_PACKAGE_FILE_NAME@ + +BuildRequires: cmake make, python +%{?systemd_requires} + +%define debug_package %{nil} + +## ----------------------------------------------------------------------------- +## --SECTION-- build dependencies +## ----------------------------------------------------------------------------- + +################################################################################ +### @brief SUSE +################################################################################ + +%if 0%{?suse_version} + +%if 0%{?sles_version} == 11 +BuildRequires: python-argparse +%endif + +BuildRequires: cmake +BuildRequires: libopenssl-devel +BuildRequires: pwdutils +BuildRequires: fdupes +BuildRequires: libicu-devel + +%if 0%{?suse_version} == 1310 || 0%{?suse_version} == 1320 +BuildRequires: libstdc++6 +%endif + +%if 0%{?suse_version} >= 1210 +BuildRequires: systemd +%endif + +%if 0%{?suse_version} == 1315 || 0%{?suse_version} == 1330 +BuildRequires: gcc5-c++ + +%define C_COMPILER gcc-5 +%define CXX_COMPILER g++-5 +%else +BuildRequires: arangodb-gcc54 + +%define C_COMPILER /opt/arangodb/bin/gcc +%define CXX_COMPILER /opt/arangodb/bin/g++ +%endif + +%if 0%{?sles_version} == 11 +BuildRequires: libicu-devel +%define JEMALLOC_OPT %{nil} +%else +%if 0%{?suse_version} == 1315 +BuildRequires: arangodb-jemalloc-devel-static +%else +BuildRequires: jemalloc-devel-static +%endif +%define JEMALLOC_OPT -DFORCE_JEMALLOC_LIB=:libjemalloc.a +%endif + +%endif + +################################################################################ +### @brief red-hat or centos +################################################################################ + +%if 0%{?centos_version} || 0%{?rhel_version} + +%if 0%{?centos_version} == 600 +BuildRequires: python-argparse +%endif + +%if 0%{?rhel_version} == 600 +BuildRequires: cmake = 3.5.2 +BuildRequires: python-argparse +%else +BuildRequires: cmake +%endif + +%define _skipFdupes 1 + +BuildRequires: glibc-devel +BuildRequires: arangodb-gcc54 +BuildRequires: arangodb-jemalloc-devel-static +BuildRequires: openssl-devel +BuildRequires: redhat-rpm-config + +%define JEMALLOC_OPT -DFORCE_JEMALLOC_LIB=:libjemalloc.a +%define C_COMPILER /opt/arangodb/bin/gcc +%define CXX_COMPILER /opt/arangodb/bin/g++ + +%ifarch i686 i586 i486 i386 +%define optflags -O2 -g -march=i586 +%endif + +%endif + +################################################################################ +### @brief fedora +################################################################################ + +%if 0%{?fedora_version} + +%define _skipFdupes 1 + +BuildRequires: cmake +BuildRequires: glibc-devel +BuildRequires: openssl-devel +BuildRequires: libicu-devel + +%if 0%{fedora_version} == 22 || 0%{fedora_version} == 23 +BuildRequires: libstdc++-static +BuildRequires: gcc-c++ +BuildRequires: jemalloc-devel + +%define JEMALLOC_OPT %{nil} +%define C_COMPILER gcc +%define CXX_COMPILER g++ + +%else +BuildRequires: arangodb-gcc54 +BuildRequires: arangodb-jemalloc-devel-static + +%define JEMALLOC_OPT -DFORCE_JEMALLOC_LIB=:libjemalloc.a +%define C_COMPILER /opt/arangodb/bin/gcc +%define CXX_COMPILER /opt/arangodb/bin/g++ +%endif + +%endif + +################################################################################ +### @brief mdk +################################################################################ + +%if 0%{?mdkversion} +BuildRequires: openssl-devel +BuildRequires: libicu-devel + +%define _skipFdupes 1 +%endif + +## ----------------------------------------------------------------------------- +## --SECTION-- client only package +## ----------------------------------------------------------------------------- + +%package client +Summary: ArangoDB shell as stand-alone package +Group: Productivity/Databases/Servers +Conflicts: arangodb3 + +## ----------------------------------------------------------------------------- +## --SECTION-- description +## ----------------------------------------------------------------------------- + +%description +ArangoDB is a durable, reliable, transactional multi-model database. Its key-features are: joins, transaction, and flexible data modelling. + +The ArangoDB consists of a server, a separate shell, which allows you to administrate the server, and a set of client APIs for various languages. + +It is written in C/C++. + + +%description client +The ArangoDB shell as stand-alone program. It also contains the utility programs: arangobench (benchmark), arangorestore & arangodump (backup), arangoimp (import). + +## ----------------------------------------------------------------------------- +## --SECTION-- build +## ----------------------------------------------------------------------------- + +%prep +%setup -q -n arangodb-%{version} +%setup -q -n arangodb-%{version} -T -D -a 1 + +%build +export CC="%{C_COMPILER}" +export CXX="%{CXX_COMPILER}" +export CFLAGS="-g -static-libgcc -O3 -fno-omit-frame-pointer" +export CXXFLAGS="-g -static-libgcc -static-libstdc++ -O3 -fno-omit-frame-pointer" +export V8_CFLAGS="-static-libgcc" +export V8_CXXFLAGS="-static-libgcc -static-libstdc++" +export V8_LDFLAGS="-static-libgcc -static-libstdc++" +export PATH="/opt/arangodb/bin:$PATH" + +mkdir build +cd build + +cmake \ + -DVERBOSE=On \ + -DUSE_OPTIMIZE_FOR_ARCHITECTURE=Off \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_C_FLAGS="${CFLAGS}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ + -DCMAKE_C_COMPILER="%{C_COMPILER}" \ + -DCMAKE_CXX_COMPILER="%{CXX_COMPILER}" \ + %{JEMALLOC_OPT} \ + -DETCDIR=/etc \ + -DVARDIR=/var \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DCMAKE_INSTALL_DATADIR:PATH=/usr/share \ + -DCMAKE_SKIP_RPATH:BOOL=ON \ + -DCMAKE_USER_MAKE_RULES_OVERRIDE= \ + .. + +make %{?_smp_mflags} VERBOSE=1 V=1 Verbose=1 all + +## ----------------------------------------------------------------------------- +## --SECTION-- install +## ----------------------------------------------------------------------------- + +%install +export CC="%{C_COMPILER}" +export CXX="%{CXX_COMPILER}" +export CFLAGS="-g -static-libgcc -O3 -fno-omit-frame-pointer" +export CXXFLAGS="-g -static-libgcc -static-libstdc++ -O3 -fno-omit-frame-pointer" +export V8_CFLAGS="-static-libgcc" +export V8_CXXFLAGS="-static-libgcc -static-libstdc++" +export V8_LDFLAGS="-static-libgcc -static-libstdc++" +export PATH="/opt/arangodb/bin:$PATH" + +find js -xtype l -exec rm "{}" ";" + +cd build +make DESTDIR=%{buildroot} install + +mkdir -p %{buildroot}%{_databasedir} +mkdir -p %{buildroot}%{_appdir} +mkdir -p %{buildroot}%{_logdir} +mkdir -p %{buildroot}%{_piddir} + +# use %doc to install readme +rm -f %{buildroot}/usr/share/doc/packages/arangodb3/* +rm -f %{buildroot}/usr/share/doc/arangodb3/* + +%if 0%{?suse_version} + +%if 0%{?suse_version} >= 1230 +%{__install} -D -m 0755 ../rc.arangod.OpenSuSE_13 %{buildroot}%{_sysconfdir}/init.d/arangodb3 +%else +%{__install} -D -m 0755 ../rc.arangod.OpenSuSE %{buildroot}%{_sysconfdir}/init.d/arangodb3 +%endif + +ln -s %{_sysconfdir}/init.d/arangodb3 %{buildroot}%{_sbindir}/rcarangodb + +%if 0%{?suse_version} >= 1210 +%{__install} -D -m 0644 ../arangodb.service %{buildroot}%{_unitdir}/arangodb3.service +%endif + +%else +%{__install} -D -m 0755 ../rc.arangod.Centos %{buildroot}%{_sysconfdir}/init.d/arangodb3 +%endif + +%if %{_skipFdupes} == 0 +%fdupes %{buildroot}%{_datadir}/arangodb3 +%endif + +## ----------------------------------------------------------------------------- +## --SECTION-- check +## ----------------------------------------------------------------------------- + +%check + +## ----------------------------------------------------------------------------- +## --SECTION-- files +## ----------------------------------------------------------------------------- + +%files +%defattr(-,root,root,0755) +%doc README +%doc README.md +%doc LICENSE +%doc LICENSES-OTHER-COMPONENTS.md +%attr(0755,arangodb,arangodb) %{_databasedir} +%attr(0755,arangodb,arangodb) %{_appdir} +%attr(0755,arangodb,arangodb) %{_logdir} + +%ghost %attr(0755,arangodb,arangodb) %{_piddir} + +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir} +%{_bindir}/* +%{_sbindir}/* +%{_mandir}/*/* +%{_datadir}/arangodb3 +%{_sysconfdir}/init.d/arangodb3 + +%if 0%{?suse_version} >= 1210 +%{_unitdir}/arangodb3.service +%endif + + +%files client +%defattr(-,root,root,0755) +%doc README +%doc README.md +%doc LICENSE +%doc LICENSES-OTHER-COMPONENTS.md + +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir}/arangosh.conf +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir}/arangoimp.conf +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir}/arangodump.conf +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir}/arangorestore.conf +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir}/arangobench.conf +%config(noreplace) %attr(-,arangodb,arangodb) %{_cfgdir}/foxx-manager.conf +%{_bindir}/arangosh +%{_bindir}/arangoimp +%{_bindir}/arangodump +%{_bindir}/arangorestore +%{_bindir}/arangobench +%{_bindir}/foxx-manager +%{_mandir}/*/arangosh* +%{_mandir}/*/arangorestore* +%{_mandir}/*/arangobench* +%{_mandir}/*/arangodump* +%{_mandir}/*/arangoimp* +%{_datadir}/arangodb3/js/common +%{_datadir}/arangodb3/js/client +%{_datadir}/arangodb3/js/node + + +## ----------------------------------------------------------------------------- +## --SECTION-- post +## ----------------------------------------------------------------------------- + +%post +%if 0%{?suse_version} + +%{fillup_and_insserv -f -y arangodb3} +%restart_on_update arangodb3 + +%if 0%{?suse_version} >= 1210 +%service_add_post arangodb3.service +%endif + +%else +chkconfig --level 2345 arangodb3 on +%endif + +echo " +ArangoDB 3 (https://www.arangodb.com) + The multi-model NoSQL database: 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. + +First Steps with ArangoDB: + https://www.arangodb.com/quickstart + +Upgrading ArangoDB: + https://docs.arangodb.com/Installing/Upgrading.html + +Upgrading ArangoDB database files: + > /etc/init.d/arangodb3 upgrade + +Configuration file: + /etc/arangodb3/arangod.conf + +Start ArangoDB shell client: + > %{_bindir}/arangosh +" + +%if 0%{?suse_version} >= 1210 +echo "Start ArangoDB service: + > systemctl start arangodb3.service + +Enable ArangoDB service: + > systemctl enable arangodb3.service +" +%else +echo "Start ArangoDB service: + > /etc/init.d/arangodb3 start +" +%endif + +export ARANGODB_DEFAULT_ROOT_PASSWORD=`(uname -a ; cat /etc/hostname) | md5sum | awk '{print $1}'` + +echo "SECURITY HINT:" +echo "run 'arango-secure-installation' to set a root password" +echo "the current password is $ARANGODB_DEFAULT_ROOT_PASSWORD" +echo "(in case this a FRESH install, for UPGRADE the password" +echo "will not be changed)" + +/usr/sbin/arango-init-database --uid arangodb --gid arangodb || true + +exit 0 + +## ----------------------------------------------------------------------------- +## --SECTION-- postun +## ----------------------------------------------------------------------------- + +%postun +%if 0%{?suse_version} + +%restart_on_update arangodb3 +%insserv_cleanup + +%if 0%{?suse_version} >= 1210 +%service_del_postun arangodb3.service +%endif + +%else +exit 0 +%endif + +## ----------------------------------------------------------------------------- +## --SECTION-- pre +## ----------------------------------------------------------------------------- + +%pre +# create arangodb group only if it doesn't already exist +if ! getent group arangodb >/dev/null 2>&1; then + /usr/sbin/groupadd -r arangodb +fi + +# create arangodb user only if it doesn't already exist +if ! getent passwd arangodb >/dev/null 2>&1; then + /usr/sbin/useradd -r -g arangodb --home %{_localstatedir}/arangodb arangodb + /usr/sbin/usermod -c "Arango Server" arangodb +fi + +%if 0%{?suse_version} >= 1210 +%service_add_pre arangodb3.service +%endif + +## ----------------------------------------------------------------------------- +## --SECTION-- preun +## ----------------------------------------------------------------------------- + +%preun +%if 0%{?suse_version} +%stop_on_removal arangodb3 + +%if 0%{?suse_version} >= 1210 +%service_del_preun arangodb3.service +%endif + +%else +%{_sysconfdir}/init.d/arangodb stop > /dev/null 2>&1 || true +chkconfig --del arangodb3 +exit 0 +%endif + +## ----------------------------------------------------------------------------- +## --SECTION-- changelog +## ----------------------------------------------------------------------------- + +%changelog diff --git a/arangod/CMakeLists.txt b/arangod/CMakeLists.txt index da1c8bc248..6157c3d3b4 100644 --- a/arangod/CMakeLists.txt +++ b/arangod/CMakeLists.txt @@ -346,7 +346,7 @@ target_link_libraries(${BIN_ARANGOD} install( TARGETS ${BIN_ARANGOD} - RUNTIME DESTINATION ${ARANGODB_INSTALL_SBIN}) + RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_SBINDIR}) install_config(arangod) @@ -361,7 +361,7 @@ endif () ################################################################################ install_command_alias(${BIN_ARANGOD} - ${ARANGODB_INSTALL_SBIN} + ${CMAKE_INSTALL_FULL_SBINDIR} arango-dfdb) install_config(arango-dfdb) @@ -371,7 +371,7 @@ install_config(arango-dfdb) ################################################################################ install_command_alias(${BIN_ARANGOD} - ${ARANGODB_INSTALL_SBIN} + ${CMAKE_INSTALL_FULL_SBINDIR} arango-secure-installation) install_config(arango-secure-installation) @@ -381,7 +381,7 @@ install_config(arango-secure-installation) ################################################################################ install_command_alias(${BIN_ARANGOD} - ${ARANGODB_INSTALL_SBIN} + ${CMAKE_INSTALL_FULL_SBINDIR} arango-init-database) install_config(arango-init-database) diff --git a/cmake/ArangoDBMacros.cmake b/cmake/ArangoDBMacros.cmake index cca6effa24..7296a0cec8 100644 --- a/cmake/ArangoDBMacros.cmake +++ b/cmake/ArangoDBMacros.cmake @@ -1,20 +1,10 @@ -if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR) - set(CMAKE_INSTALL_SYSCONFDIR "etc/arangodb3" CACHE PATH "read-only single-machine data (etc)") -endif() - +#if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR) +# set(CMAKE_INSTALL_SYSCONFDIR "etc/arangodb3" CACHE PATH "read-only single-machine data (etc)") +#endif() include(GNUInstallDirs) -# install the visual studio runtime: -if (MSVC) - set(CMAKE_INSTALL_UCRT_LIBRARIES 1) - include(InstallRequiredSystemLibraries) - INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT Libraries) - INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT} DESTINATION bin COMPONENT Libraries) -endif() - file(TO_NATIVE_PATH "${CMAKE_INSTALL_FULL_SYSCONFDIR}" ETCDIR_NATIVE) STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_NATIVE}") - add_definitions("-D_SYSCONFDIR_=\"${ETCDIR_ESCAPED}\"") # database directory @@ -26,204 +16,59 @@ FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb3-apps") # logs FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/log/arangodb3") -# package -set(TRI_PKGDATADIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/arangodb3") - -# 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 () - -# 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/arangodb3/${name}.conf.in FileContent) - STRING(REPLACE "@PKGDATADIR@" "@ROOTDIR@/share/arangodb3" - FileContent "${FileContent}") - STRING(REPLACE "@LOCALSTATEDIR@" "@ROOTDIR@/var" - FileContent "${FileContent}") - STRING(REPLACE "@SBINDIR@" "@ROOTDIR@/bin" - FileContent "${FileContent}") - STRING(REPLACE "@LIBEXECDIR@/arangodb3" "@ROOTDIR@/bin" - FileContent "${FileContent}") - STRING(REPLACE "@SYSCONFDIR@" "@ROOTDIR@/etc/arangodb3" - 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/arangodb3/${name}.conf "${FileContent}") -endmacro () - -# generates config file using the configured paths ---------------------------- -macro (generate_path_config name) - FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb3/${name}.conf.in FileContent) - STRING(REPLACE "@PKGDATADIR@" "${TRI_PKGDATADIR}" - FileContent "${FileContent}") - STRING(REPLACE "@LOCALSTATEDIR@" "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}" - FileContent "${FileContent}") - FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf "${FileContent}") -endmacro () - -# installs a config file ------------------------------------------------------- -macro (install_config name) - if (MSVC OR (DARWIN AND NOT HOMEBREW)) - generate_root_config(${name}) - else () - generate_path_config(${name}) - endif () - install( - FILES ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf - DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}) -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 $ - ${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 () -#-------------------------------------------------------------------------------- +include(ArangoDBinstallCfg) # 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 () +install_readme(README README.txt) +install_readme(README.md README.md) +install_readme(LICENSE LICENSE.txt) +install_readme(LICENSES-OTHER-COMPONENTS.md LICENSES-OTHER-COMPONENTS.md) -if (MSVC) - install_readme(LICENSE . LICENSE.txt) - install_readme(LICENSES-OTHER-COMPONENTS.md . LICENSES-OTHER-COMPONENTS.md) -else () - install_readme(README share/doc/arangodb3 README) - install_readme(README.md share/doc/arangodb3 README.md) - install_readme(LICENSE share/doc/arangodb3 LICENSE) - install_readme(LICENSES-OTHER-COMPONENTS.md share/doc/arangodb3 LICENSES-OTHER-COMPONENTS.md) -endif () # Build package ---------------------------------------------------------------- + if (NOT(MSVC)) set(CPACK_SET_DESTDIR ON) endif() -find_program(DH_INSTALLINIT dh_installinit) -find_program(FAKEROOT fakeroot) +set(CPACK_PACKAGE_VENDOR "ArangoDB GmbH") +set(CPACK_PACKAGE_CONTACT "info@arangodb.com") +set(CPACK_PACKAGE_VERSION "${ARANGODB_VERSION}") -if (DH_INSTALLINIT AND FAKEROOT) +set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") + +set(CPACK_STRIP_FILES "ON") + +set(CPACK_PACKAGE_NAME "arangodb3") + +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}") + + +if ("${PACKAGING}" STREQUAL "DEB")################################################## + find_program(DH_INSTALLINIT dh_installinit) + + if (NOT DH_INSTALLINIT) + message(ERROR "Failed to find debhelper. please install in order to build debian packages.") + endif() + find_program(FAKEROOT fakeroot) + if (NOT FAKEROOT) + message(ERROR "Failed to find fakeroot. please install in order to build debian packages.") + endif() add_custom_target(prepare_debian) SET(DEBIAN_CONTROL_EXTRA_BASENAMES postinst preinst postrm prerm - ) + ) SET(DEBIAN_WORK_DIR "${PROJECT_BINARY_DIR}/debian-work") add_custom_command(TARGET prepare_debian POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_WORK_DIR}" - ) + ) foreach (_DEBIAN_CONTROL_EXTRA_BASENAME ${DEBIAN_CONTROL_EXTRA_BASENAMES}) SET(RELATIVE_NAME "debian/${_DEBIAN_CONTROL_EXTRA_BASENAME}") SET(SRCFILE "${PROJECT_SOURCE_DIR}/Installation/${RELATIVE_NAME}") @@ -233,113 +78,26 @@ if (DH_INSTALLINIT AND FAKEROOT) list(APPEND DEBIAN_CONTROL_EXTRA_DEST "${DESTFILE}") add_custom_command(TARGET prepare_debian POST_BUILD - COMMAND ${CMAKE_COMMAND} -E - copy ${SRCFILE} ${DESTFILE}) + COMMAND ${CMAKE_COMMAND} -E + copy ${SRCFILE} ${DESTFILE}) endforeach() add_custom_command(TARGET prepare_debian POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/Installation/debian/control" "${DEBIAN_WORK_DIR}/debian/control" - ) + ) add_custom_command(TARGET prepare_debian POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR}/Installation/debian/compat" "${DEBIAN_WORK_DIR}/debian/compat" - ) + ) add_custom_command(TARGET prepare_debian POST_BUILD COMMAND fakeroot "${DH_INSTALLINIT}" -o 2>/dev/null WORKING_DIRECTORY ${DEBIAN_WORK_DIR} - ) + ) add_custom_command(TARGET prepare_debian POST_BUILD COMMAND fakeroot dh_installdeb WORKING_DIRECTORY ${DEBIAN_WORK_DIR} - ) -endif() - -# General -if (DARWIN) - set(CPACK_PACKAGE_NAME "ArangoDB-CLI") -else () - set(CPACK_PACKAGE_NAME "arangodb3") -endif () - -set(CPACK_PACKAGE_VENDOR "ArangoDB GmbH") -set(CPACK_PACKAGE_CONTACT "info@arangodb.com") -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: 2014-2016 by ArangoDB GmbH - Copyright: 2012-2013 by triAGENS GmbH - ArangoDB Software - www.arangodb.com -") -SET(CPACK_DEBIAN_PACKAGE_CONFLICTS "arangodb") -set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) -set(CPACK_DEBIAN_COMPRESSION_TYPE "xz") -set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.arangodb.com/") -set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/preinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postrm;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/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") - -# MS installer -if (MSVC) - set(CPACK_PACKAGE_NAME "ArangoDB") - set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Templates") - set(CPACK_PLUGIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Plugins") - 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_ARANGODB_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}/Installation/cmake/CMakeCPackOptions.cmake.in" - "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY) -set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake") - -if (NOT(MSVC OR DARWIN)) + ) # components install( FILES ${PROJECT_SOURCE_DIR}/Installation/debian/arangodb.init @@ -347,17 +105,117 @@ if (NOT(MSVC OR DARWIN)) DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/init.d RENAME arangodb3 COMPONENT debian-extras - ) -endif() + ) + + if(CMAKE_TARGET_ARCHITECTURES MATCHES ".*x86_64.*") + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") + else()#TODO - arm? + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386") + endif() + set(CPACK_DEBIAN_PACKAGE_SECTION "database") + FILE(READ "${PROJECT_SOURCE_DIR}/Installation/debian/packagedesc.txt" CPACK_DEBIAN_PACKAGE_DESCRIPTION) + SET(CPACK_DEBIAN_PACKAGE_CONFLICTS "arangodb") + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + set(CPACK_DEBIAN_COMPRESSION_TYPE "xz") + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${ARANGODB_URL_INFO_ABOUT}) + set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/preinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postrm;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/prerm;") + +elseif ("${PACKAGING}" STREQUAL "RPM")############################################## + set(CPACK_GENERATOR "RPM") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Installation/rpm/arangodb.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/arangodb.spec" @ONLY IMMEDIATE) + set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_BINARY_DIR}/my_project.spec") + +elseif ("${PACKAGING}" STREQUAL "DARWIN")############################################ + set(CPACK_PACKAGE_NAME "ArangoDB-CLI") + 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") + +elseif (MSVC)################################################################# + # so we don't need to ship dll's twice, make it one directory: + set(CMAKE_INSTALL_FULL_SBINDIR "${CMAKE_INSTALL_FULL_BINDIR}") + set(W_INSTALL_FILES "${PROJECT_SOURCE_DIR}/Installation/Windows/") + set(CPACK_PACKAGE_NAME "ArangoDB") + 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}) + set(CPACK_NSIS_MODIFY_PATH ON) + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL 1) + set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Templates") + set(CPACK_PLUGIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Plugins") + 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 () + + install_readme(README.windows README.windows.txt) + + # install the visual studio runtime: + set(CMAKE_INSTALL_UCRT_LIBRARIES 1) + include(InstallRequiredSystemLibraries) + INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT Libraries) + INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT} DESTINATION bin COMPONENT Libraries) + + # install openssl + if (NOT LIB_EAY_RELEASE_DLL OR NOT SSL_EAY_RELEASE_DLL) + message(FATAL_ERROR, "BUNDLE_OPENSSL set but couldn't locate SSL DLLs. Please set LIB_EAY_RELEASE_DLL and SSL_EAY_RELEASE_DLL") + endif() + + install (FILES "${LIB_EAY_RELEASE_DLL}" DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}/" COMPONENT Libraries) + install (FILES "${SSL_EAY_RELEASE_DLL}" DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}/" COMPONENT Libraries) + + # icon paths + set (ICON_PATH "${W_INSTALL_FILES}/Icons/") + install(DIRECTORY "${ICON_PATH}" DESTINATION "resources") + + file(TO_NATIVE_PATH "resources/Icons/arangodb.ico" RELATIVE_ARANGO_ICON) + file(TO_NATIVE_PATH "${ICON_PATH}arangodb.bmp" ARANGO_IMG) + file(TO_NATIVE_PATH "${ICON_PATH}/arangodb.ico" ARANGO_ICON) + + STRING(REGEX REPLACE "\\\\" "\\\\\\\\" RELATIVE_ARANGO_ICON "${RELATIVE_ARANGO_ICON}") + STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_IMG "${ARANGO_IMG}") + STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_ICON "${ARANGO_ICON}") + + set(CPACK_PACKAGE_ICON ${ARANGO_ICON}) + set(CPACK_NSIS_MUI_ICON ${ARANGO_ICON}) + set(CPACK_NSIS_MUI_UNIICON ${ARANGO_ICON}) + set(CPACK_NSIS_INSTALLED_ICON_NAME ${RELATIVE_ARANGO_ICON}) + + message(STATUS "RELATIVE_ARANGO_ICON: ${RELATIVE_ARANGO_ICON}") + message(STATUS "ARANGO_IMG: ${ARANGO_IMG}") + message(STATUS "ARANGO_ICON: ${ARANGO_ICON}") + + # versioning + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${W_INSTALL_FILES}/version") + + include("${W_INSTALL_FILES}/version/generate_product_version.cmake") + + set(CPACK_ARANGODB_NSIS_DEFINES " + !define BITS ${BITS} + !define TRI_FRIENDLY_SVC_NAME '${ARANGODB_FRIENDLY_STRING}' + !define TRI_AARDVARK_URL 'http://127.0.0.1:8529' + ") +endif () + +configure_file( + "${CMAKE_SOURCE_DIR}/Installation/cmake/CMakeCPackOptions.cmake.in" + "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY) +set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake") + # Custom targets ---------------------------------------------------------------- - # love add_custom_target (love COMMENT "ArangoDB loves you." COMMAND "" ) - # Finally: user cpack include(CPack) @@ -409,14 +267,32 @@ install( DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb3-apps DESTINATION ${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib) -if (BUNDLE_OPENSSL) - if (NOT LIB_EAY_RELEASE_DLL OR NOT SSL_EAY_RELEASE_DLL) - message(FATAL_ERROR, "BUNDLE_OPENSSL set but couldn't locate SSL DLLs. Please set LIB_EAY_RELEASE_DLL and SSL_EAY_RELEASE_DLL") - endif() - install (FILES "${LIB_EAY_RELEASE_DLL}" - DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" - COMPONENT Libraries) - install (FILES "${SSL_EAY_RELEASE_DLL}" - DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" - COMPONENT Libraries) -endif() + + + +# 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 () +#-------------------------------------------------------------------------------- diff --git a/cmake/ArangoDBinstallCfg.cmake b/cmake/ArangoDBinstallCfg.cmake new file mode 100644 index 0000000000..1fec9b112c --- /dev/null +++ b/cmake/ArangoDBinstallCfg.cmake @@ -0,0 +1,98 @@ +################################################################################ +## INSTALL +################################################################################ +include(GNUInstallDirs) + +set(CMAKE_INSTALL_SYSCONFDIR_ARANGO "${CMAKE_INSTALL_SYSCONFDIR}/arangodb3" CACHE PATH "read-only single-machine data (etc)") +set(CMAKE_INSTALL_FULL_SYSCONFDIR_ARANGO "${CMAKE_INSTALL_FULL_SYSCONFDIR}/arangodb3" CACHE PATH "read-only single-machine data (etc)") + +# Global macros ---------------------------------------------------------------- +macro (generate_root_config name) + FILE(READ ${PROJECT_SOURCE_DIR}/${CMAKE_INSTALL_SYSCONFDIR_ARANGODB}/${name}.conf.in FileContent) + STRING(REPLACE "@PKGDATADIR@" "@ROOTDIR@/share/arangodb3" + FileContent "${FileContent}") + STRING(REPLACE "@LOCALSTATEDIR@" "@ROOTDIR@/var" + FileContent "${FileContent}") + STRING(REPLACE "@SBINDIR@" "@ROOTDIR@/bin" + FileContent "${FileContent}") + STRING(REPLACE "@LIBEXECDIR@/arangodb3" "@ROOTDIR@/bin" + FileContent "${FileContent}") + STRING(REPLACE "@SYSCONFDIR@" "@ROOTDIR@/${CMAKE_INSTALL_SYSCONFDIR_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}/${CMAKE_INSTALL_SYSCONFDIR_ARANGODB}/${name}.conf "${FileContent}") +endmacro () + +# generates config file using the configured paths ---------------------------- +macro (generate_path_config name) + FILE(READ "${PROJECT_SOURCE_DIR}/etc/arangodb3/${name}.conf.in" FileContent) + STRING(REPLACE "@PKGDATADIR@" "${CMAKE_INSTALL_FULL_DATAROOTDIR}/" + FileContent "${FileContent}") + STRING(REPLACE "@LOCALSTATEDIR@" "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}" + FileContent "${FileContent}") + FILE(WRITE ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_SYSCONFDIR_ARANGODB}/${name}.conf "${FileContent}") +endmacro () + +# installs a config file ------------------------------------------------------- +macro (install_config name) + if (MSVC OR (DARWIN AND NOT HOMEBREW)) + generate_root_config(${name}) + else () + generate_path_config(${name}) + endif () + install( + FILES ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_SYSCONFDIR_ARANGO}/${name}.conf + DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR_ARANGO}) +endmacro () + +# installs a readme file converting EOL ---------------------------------------- +macro (install_readme input output) + set(where "${CMAKE_INSTALL_FULL_DOCDIR}") + if (MSVC) + # the windows installer contains the readme in the top level directory: + set(where ".") + endif () + + set(PKG_VERSION "") + if (${USE_VERSION_IN_LICENSEDIR}) + set(PKG_VERSION "-${ARANGODB_VERSION}") + endif () + + 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}${PKG_VERSION}) +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 $ + ${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 () diff --git a/etc/arangodb3/arangod.conf.in b/etc/arangodb3/arangod.conf.in index 80f89aa649..5c8d391d30 100644 --- a/etc/arangodb3/arangod.conf.in +++ b/etc/arangodb3/arangod.conf.in @@ -6,7 +6,6 @@ [database] directory = @LOCALSTATEDIR@/lib/arangodb3 -# directory = @HOMEDRIVE@/@HOMEPATH@/arangodb3/databases # maximal-journal-size = 33554432 @@ -69,9 +68,4 @@ app-path = @LOCALSTATEDIR@/lib/arangodb3-apps level = info file = @LOCALSTATEDIR@/log/arangodb3/arangod.log -[cluster] -data-path = @LOCALSTATEDIR@/lib/arangodb3/cluster -log-path = @LOCALSTATEDIR@/log/arangodb3/cluster -arangod-path = @SBINDIR@/arangod@PROGRAM_SUFFIX@ -dbserver-config = @SYSCONFDIR@/arangod.conf -coordinator-config = @SYSCONFDIR@/arangod.conf +[cluster] \ No newline at end of file diff --git a/scripts/build-deb.sh b/scripts/build-deb.sh index c3ac4d5eca..cc357f7657 100755 --- a/scripts/build-deb.sh +++ b/scripts/build-deb.sh @@ -2,10 +2,14 @@ set -e -mkdir -p build-debian -cd build-debian -CFLAGS="-g -static-libgcc -O3 -fomit-frame-pointer" CXXFLAGS="-g -static-libgcc -static-libstdc++ -O3 -fomit-frame-pointer" V8_CFLAGS="-static-libgcc" V8_CXXFLAGS="-static-libgcc -static-libstdc++" V8_LDFLAGS="-static-libgcc -static-libstdc++" cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_SKIP_RPATH=On -DUSE_OPTIMIZE_FOR_ARCHITECTURE=Off -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_INSTALL_SYSCONFDIR=/etc/arangodb3 -DUSE_JEMALLOC=On .. -make -j12 -make prepare_debian -cpack -G DEB --verbose -cd .. +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +cd ${DIR}/.. + +./Installation/Jenkins/build.sh \ + standard \ + --rpath \ + --package DEB \ + --jemalloc \ + +cd ${DIR}/.. diff --git a/scripts/build-rpm.sh b/scripts/build-rpm.sh new file mode 100644 index 0000000000..ad6b56e8fc --- /dev/null +++ b/scripts/build-rpm.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +cd ${DIR}/.. + +./Installation/Jenkins/build.sh \ + standard \ + --rpath \ + --package RPM \ + --jemalloc \ + +cd ${DIR}/..