setup travis for builds, testing and release on osx and linux

This commit is contained in:
Eberhard Graether
2018-12-14 13:34:30 +01:00
parent 566091a63f
commit 3b0008585e
12 changed files with 147 additions and 71 deletions
+2
View File
@@ -1 +1,3 @@
/build/
.DS_Store
+33
View File
@@ -0,0 +1,33 @@
language: cpp
compiler: clang
matrix:
include:
- os: linux
dist: trusty
env: PYTHON_BINDING=0
- os: linux
dist: trusty
env: PYTHON_BINDING=1
- os: osx
env: PYTHON_BINDING=0
- os: osx
env: PYTHON_BINDING=1
install: travis/install.sh
script: travis/script.sh
before_deploy: travis/bundle.sh
deploy:
provider: releases
api_key:
secure: UwuiE6SrjorpBr1CzTRadX1zq83hwbnur+MvzBueqEHM7Yyu5Y0xMkwchRlX41HzMuSkC0azM0S8GfqJT1E7pIrqgJGvFbXR3t9ZG8HtvrcM4PvTS8b0G0d8aWHfTP2Zv+PAK3MMnYtxmOFPs4IaqO1m+imjQWtpvCRG5tvc4DNIPAMh0S8LCjxUdz35BYAM4pwM7WB9Qt+YhbyP1h3oSQ7qtr1fZYCC0H4G1cjVBLeP9g66/tfg0MIQVf1wxU8KF3H6esilPhFDCnsBYcnYrKyJN9OkMXZvLoxsjqQvTlsSNO2wIQ32dW8fk+1VFebWjN3RnNUV2Zb3wdz2y6e6A08J8T/+QrJ003eUJAGassQEgsuQ85ldcbylbKCVdi+iA+W6pKSJoHIlyr2KQG77OZ+q3obvY09IMNX2qVnUJKG8g9vZHKk8TlvUtIDODUxqJ/XUVwG5aKiUPuE5UMeLnZlO7cWpABb28BjXGehLCDtqg2eu39n+N9hyEjmsJLcOuS03+C55YrjJHW09qZomorMyIa//4jxSAOU9Iah7cRzPGUl/eSwQ2kf0OGWfySd2PreOThWepH0ymvG9htlTUSMM4wRuKnNAmG7NY6TykttJY2KsTLpki+P4MFBlSvL0VvoHQintK69udSVeUrJaGx508w8V59AdZwJjMxhjOXw=
file_glob: true
file: $TRAVIS_BUILD_DIR/*.zip
overwrite: true
skip_cleanup: true
on:
tags: true
repo: CoatiSoftware/SourcetrailDB
+41 -2
View File
@@ -6,9 +6,48 @@ set(PROJECT_NAME "SourcetrailDB")
project(${PROJECT_NAME})
# configure default flags
# --- Default Flags ---
set(CMAKE_BUILD_TYPE_INIT "Release")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
if(UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -fPIC")
endif()
# --- Version ---
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
find_package(Git)
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --long
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION_NUMBER
OUTPUT_STRIP_TRAILING_WHITESPACE
)
else()
set(GIT_VERSION_NUMBER "v0_db0_p0-0-a")
endif()
string(REGEX REPLACE "v([0-9]+)_.*" "\\1" INTERFACE_VERSION "${GIT_VERSION_NUMBER}")
string(REGEX REPLACE "v[0-9]+_db([0-9]+)_.*" "\\1" DATABASE_VERSION "${GIT_VERSION_NUMBER}")
string(REGEX REPLACE "v[0-9]+_db[0-9]+_p([0-9])-.*" "\\1" PATCH_VERSION "${GIT_VERSION_NUMBER}")
set(VERSION_STRING "v${INTERFACE_VERSION}_db${DATABASE_VERSION}_p${PATCH_VERSION}")
message(STATUS ${INTERFACE_VERSION})
message(STATUS ${DATABASE_VERSION})
message(STATUS ${PATCH_VERSION})
message(STATUS ${VERSION_STRING})
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.txt.in
"${CMAKE_CURRENT_BINARY_DIR}/version.txt"
)
set(LIB_CORE "lib_core")
set(CORE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/core") # can be accessed in subdirectory CMake files
+2 -2
View File
@@ -31,7 +31,7 @@ install:
before_build:
- mkdir build
- cd build
- cmake -G "%CMAKE_GENERATOR%" ../ -DBUILD_BINDINGS_PYTHON=ON -DPYTHON_INCLUDE_DIRS="%PYTHON_PATH%/include" -DPYTHON_INCLUDE_DIRS="%PYTHON_PATH%/include" -DPYTHON_LIBRARIES="%PYTHON_PATH%/libs/python37.lib"
- cmake -G "%CMAKE_GENERATOR%" ../ -DBUILD_BINDINGS_PYTHON=ON -DPYTHON_LIBRARY="%PYTHON_PATH%/libs/python37.lib"
- cd ../
@@ -62,7 +62,7 @@ after_build:
- cd ..
- ps: |
copy build/bindings_python/release/_sourcetraildb.pyd artifacts_bindings_python/
copy build/bindings_python/release/sourcetraildb.py artifacts_bindings_python/
copy build/bindings_python/sourcetraildb.py artifacts_bindings_python/
copy LICENSE.txt artifacts_bindings_python/license/license_sourcetraildb.txt
copy external/catch/license_catch.txt artifacts_bindings_python/license/
copy external/cpp_sqlite/license_cpp_sqlite.txt artifacts_bindings_python/license/
+20 -57
View File
@@ -1,80 +1,43 @@
cmake_minimum_required (VERSION 2.6)
set(LIB_BINDINGS_PYTHON "lib_bindings_python")
set(PACKAGE_NAME "sourcetraildb")
# --- Find Python ---
if (NOT EXISTS "${PYTHON_INCLUDE_DIRS}")
message(STATUS "Python include dir \"${PYTHON_INCLUDE_DIRS}\" does not exist, trying to find Python automatically.")
find_package(PythonLibs REQUIRED)
else ()
if (NOT EXISTS "${PYTHON_LIBRARIES}")
message(STATUS "Python library \"${PYTHON_LIBRARIES}\" does not exist, trying to find Python automatically.")
find_package(PythonLibs REQUIRED)
endif ()
endif ()
message(STATUS "Found Python include dirs: ${PYTHON_INCLUDE_DIRS}")
message(STATUS "Found Python libraries: ${PYTHON_LIBRARIES}")
# --- Setup Paths ---
set(RESOURCES_SWIG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources_swig")
set(GENERATED_SRC_DIR "${CMAKE_CURRENT_BINARY_DIR}/src")
set(SWIG_INTERFACE_FILE "${RESOURCES_SWIG_DIR}/interface/${PACKAGE_NAME}.i")
set(GENERATED_WRAPPER_FILE "${GENERATED_SRC_DIR}/${PACKAGE_NAME}_wrap.cxx")
file(WRITE ${GENERATED_WRAPPER_FILE} "")
set(SRC_FILES
"${RESOURCES_SWIG_DIR}/src/${PACKAGE_NAME}.cpp"
${GENERATED_WRAPPER_FILE}
)
# --- Find Python ---
set(HDR_FILES
"${RESOURCES_SWIG_DIR}/include/${PACKAGE_NAME}.h"
)
find_package(PythonLibs)
# --- Find Swig ---
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
# --- Configure Target ---
add_library(${LIB_BINDINGS_PYTHON} SHARED ${SRC_FILES} ${HDR_FILES} ${SWIG_INTERFACE_FILE})
set_source_files_properties(${SWIG_INTERFACE_FILE} PROPERTIES CPLUSPLUS ON)
set_target_properties(${LIB_BINDINGS_PYTHON} PROPERTIES OUTPUT_NAME "_${PACKAGE_NAME}")
if (WIN32)
set_target_properties(${LIB_BINDINGS_PYTHON} PROPERTIES SUFFIX ".pyd")
else()
# Remove 'lib' prefix
set_target_properties(${LIB_BINDINGS_PYTHON} PROPERTIES PREFIX "")
set_target_properties(${LIB_BINDINGS_PYTHON} PROPERTIES SUFFIX ".so")
endif()
if (WIN32)
add_custom_command(
TARGET ${LIB_BINDINGS_PYTHON}
PRE_BUILD
COMMAND if not exist \"${GENERATED_SRC_DIR}\" mkdir \"${GENERATED_SRC_DIR}\" \n swig -c++ -python -I${RESOURCES_SWIG_DIR}/include -o ${GENERATED_WRAPPER_FILE} -outdir ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION) ${SWIG_INTERFACE_FILE}
COMMENT "Generating wrapper code file."
)
else()
add_custom_command(
TARGET ${LIB_BINDINGS_PYTHON}
PRE_BUILD
COMMAND swig -c++ -python -I${RESOURCES_SWIG_DIR}/include -o ${GENERATED_WRAPPER_FILE} -outdir ${CMAKE_CURRENT_BINARY_DIR} ${SWIG_INTERFACE_FILE}
COMMENT "Generating wrapper code file."
)
endif()
target_include_directories(${LIB_BINDINGS_PYTHON} PUBLIC
include_directories(
"${RESOURCES_SWIG_DIR}/include"
"${CORE_SOURCE_DIR}/include"
${PYTHON_INCLUDE_DIRS}
)
target_link_libraries(${LIB_BINDINGS_PYTHON} ${PYTHON_LIBRARIES} ${LIB_CORE})
swig_add_library(
${PACKAGE_NAME}
TYPE SHARED
LANGUAGE python
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
OUTFILE_DIR ${GENERATED_SRC_DIR}
SOURCES ${SWIG_INTERFACE_FILE} ${RESOURCES_SWIG_DIR}/src/${PACKAGE_NAME}.cpp
)
swig_link_libraries(${PACKAGE_NAME} ${PYTHON_LIBRARIES} ${LIB_CORE})
+4 -9
View File
@@ -2,11 +2,6 @@ cmake_minimum_required (VERSION 2.6)
set(TEST_CORE "test_core")
set(INTERFACE_VERSION 0)
set(DATABASE_VERSION 23)
set(COMMIT_VERSION 1)
set(VERSION_STRING "v${INTERFACE_VERSION}_db${DATABASE_VERSION}_c${COMMIT_VERSION}")
set(GENERATED_INCLUDE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include")
set(GENERATED_VERSION_FILE "${GENERATED_INCLUDE_DIRECTORY}/version.h")
@@ -15,7 +10,7 @@ configure_file(
${GENERATED_VERSION_FILE}
)
set(LIB_SRC_FILES
set(LIB_SRC_FILES
"${CMAKE_SOURCE_DIR}/external/cpp_sqlite/src/CppSQLite3.cpp"
"${CMAKE_SOURCE_DIR}/external/cpp_sqlite/src/sqlite3.c"
src/DatabaseStorage.cpp
@@ -30,7 +25,7 @@ set(LIB_SRC_FILES
src/utility.cpp
)
set(LIB_HDR_FILES
set(LIB_HDR_FILES
"${CMAKE_SOURCE_DIR}/external/json/include/json.hpp"
"${CMAKE_SOURCE_DIR}/external/cpp_sqlite/include/CppSQLite3.h"
"${CMAKE_SOURCE_DIR}/external/cpp_sqlite/include/sqlite3.h"
@@ -71,7 +66,7 @@ target_include_directories(${LIB_CORE} PUBLIC
)
set(TEST_SRC_FILES
set(TEST_SRC_FILES
test/test.cpp
)
@@ -85,4 +80,4 @@ target_include_directories(${TEST_CORE} PUBLIC
"${GENERATED_INCLUDE_DIRECTORY}"
)
target_link_libraries(${TEST_CORE} ${LIB_CORE})
target_link_libraries(${TEST_CORE} ${LIB_CORE} "-ldl")
+1
View File
@@ -16,6 +16,7 @@
#include "utility.h"
#include <algorithm>
#include <ctime>
#include <fstream>
+1 -1
View File
@@ -5,7 +5,7 @@
#define INTERFACE_VERSION @INTERFACE_VERSION@
#define DATABASE_VERSION @DATABASE_VERSION@
#define COMMIT_VERSION @COMMIT_VERSION@
#define PATCH_VERSION @PATCH_VERSION@
#define VERSION_STRING "@VERSION_STRING@"
+25
View File
@@ -0,0 +1,25 @@
#!/bin/bash
cd $TRAVIS_BUILD_DIR
VERSION=$(head -1 build/version.txt)
if [[ "$PYTHON_BINDING" == "1" ]]; then
PYTHON_VERSION=$(python3 -c "import sys; sys.stdout.write(str(sys.version_info.major)); sys.stdout.write(str(sys.version_info.minor));")
BUNDLE_NAME=sourcetraildb_python${PYTHON_VERSION}_${VERSION}_${TRAVIS_OS_NAME}_64bit
mkdir -p $BUNDLE_NAME
cp build/bindings_python/sourcetraildb.py $BUNDLE_NAME
cp build/bindings_python/_sourcetraildb* $BUNDLE_NAME/_sourcetraildb.so
zip -r $BUNDLE_NAME $BUNDLE_NAME
else
BUNDLE_NAME=sourcetraildb_core_${VERSION}_${TRAVIS_OS_NAME}_64bit
mkdir -p $BUNDLE_NAME/include
cp build/core/*.a $BUNDLE_NAME
cp core/include/* $BUNDLE_NAME/include
cp build/core/include/* $BUNDLE_NAME/include
zip -r $BUNDLE_NAME $BUNDLE_NAME
fi
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew install swig
brew link --force swig
elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
sudo apt-get update
sudo apt-get install -qq python-dev swig
sudo apt-get update -qq
fi
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
mkdir build
cd build
cmake -DBUILD_BINDINGS_PYTHON=$PYTHON_BINDING ..
make
./core/test_core
+1
View File
@@ -0,0 +1 @@
@VERSION_STRING@