diff --git a/CMakeLists.txt b/CMakeLists.txt index 01337a835..27f3f5a89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,14 +27,21 @@ project(villas-node LANGUAGES C CXX ) +# Some more project settings +set(PROJECT_AUTHOR "Steffen Vogel") +set(PROJECT_COPYRIGHT "2018, Institute for Automation of Complex Power Systems, RWTH Aachen University") +set(PROJECT_HOMEPAGE_URL "https://www.fein-aachen.org/projects/villas-node/") + # Several CMake settings/defaults set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 11) set(CMAKE_THREAD_PREFER_PTHREAD ON) -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake;${PROJECT_SOURCE_DIR}/common/cmake") if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) set(TOPLEVEL_PROJECT ON) +else() + set(TOPLEVEL_PROJECT OFF) endif() if(APPLE) @@ -45,6 +52,7 @@ include(FindPkgConfig) include(CheckIncludeFile) include(FeatureSummary) include(GNUInstallDirs) +include(GetVersion) # Compiler flags if(BUILD32) @@ -119,72 +127,14 @@ option(WITH_PLUGINS "Build plugins" ${TOPLEVEL_PROJECT}) option(WITH_CLIENTS "Build client applications" ${TOPLEVEL_PROJECT}) option(WITH_DOC "Build documentation" ${TOPLEVEL_PROJECT}) -set(V 2) -set(PREFIX ${CMAKE_INSTALL_PREFIX}) - -if(CMAKE_BUILD_TYPE) - string(TOLOWER "${CMAKE_BUILD_TYPE}" VARIANT) -else() - set(VARIANT "release") -endif() - # Add more build configurations include(cmake/config/Debug.cmake) include(cmake/config/Release.cmake) include(cmake/config/Coverage.cmake) include(cmake/config/Profiling.cmake) -# Add git revision and build variant defines -set(PROJECT_AUTHOR "Steffen Vogel") -set(PROJECT_COPYRIGHT "2018, Institute for Automation of Complex Power Systems, RWTH Aachen University") - -set(PROJECT_SOVERSION 1) - -execute_process( - COMMAND git describe --tags --abbrev=0 --match "v*" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE PROJECT_VERSION_STR - OUTPUT_STRIP_TRAILING_WHITESPACE -) - -string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+)$" "\\1" PROJECT_VERSION ${PROJECT_VERSION_STR}) -string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" PROJECT_MAJOR_VERSION ${PROJECT_VERSION_STR}) -string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" PROJECT_MINOR_VERSION ${PROJECT_VERSION_STR}) -string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" PROJECT_PATCH_VERSION ${PROJECT_VERSION_STR}) - -string(TIMESTAMP BUILD_DATE "%Y%m%d") - -if(DEFINED ENV{CI}) - string(APPEND VARIANT "-ci") - string(SUBSTRING $ENV{CI_COMMIT_SHA} 0 7 GIT_REV) - set(GIT_BRANCH $ENV{CI_COMMIT_REF_NAME}) -else() - execute_process( - COMMAND git rev-parse --short=7 HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_REV - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - execute_process( - COMMAND git rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) -endif() - -set(PROJECT_RELEASE_NUM 3) -if(DEFINED ENV{CI_COMMIT_TAG}) - set(PROJECT_RELEASE "${PROJECT_RELEASE_NUM}") -else() - string(REPLACE "-" "_" GIT_BRANCH_NORM ${GIT_BRANCH}) - string(REPLACE "-" "_" VARIANT_NORM ${VARIANT}) - - set(PROJECT_RELEASE "${PROJECT_RELEASE_NUM}.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}") -endif() - -set(BUILDID "v${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}-${GIT_REV}-${VARIANT}") +# Get version info and buildid from Git +GetVersion(${PROJECT_SOURCE_DIR} "CMAKE_PROJECT") add_subdirectory(common) add_subdirectory(etc) @@ -233,10 +183,17 @@ add_feature_info(PLUGINS WITH_PLUGINS "Build plugins") add_feature_info(CLIENTS WITH_CLIENTS "Build client applications") add_feature_info(DOC WITH_DOC "Build documentation") -if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME}) +if(TOPLEVEL_PROJECT) feature_summary(WHAT ALL VAR FEATURES) message(STATUS "${FEATURES}") - message(STATUS "Building VILLASnode: ${BUILDID}") + message(STATUS "Building ${CMAKE_PROJECT_DESCRIPTION}:") + message(STATUS " VERSION: ${CMAKE_PROJECT_VERSION}") + message(STATUS " RELEASE: ${CMAKE_PROJECT_RELEASE}") + message(STATUS " GIT_REV: ${CMAKE_PROJECT_GIT_REV}") + message(STATUS " GIT_BRANCH: ${CMAKE_PROJECT_GIT_BRANCH}") + message(STATUS " VARIANT: ${CMAKE_PROJECT_VARIANT}") + message(STATUS " BUILD_ID: ${CMAKE_PROJECT_BUILD_ID}") + message(STATUS " BUILD_DATE: ${CMAKE_PROJECT_BUILD_DATE}") endif() include(VILLASnodePackaging) diff --git a/cmake/VILLASnodePackaging.cmake b/cmake/VILLASnodePackaging.cmake index b95f7a48c..87b7ef6a7 100644 --- a/cmake/VILLASnodePackaging.cmake +++ b/cmake/VILLASnodePackaging.cmake @@ -68,7 +68,7 @@ set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) set(CPACK_RPM_PACKAGE_RELEASE ${PROJECT_RELEASE}) set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64") set(CPACK_RPM_PACKAGE_LICENSE "GPLv3") -set(CPACK_RPM_PACKAGE_URL "http://www.fein-aachen.org/projects/villas-node/") +set(CPACK_RPM_PACKAGE_URL ${PROJECT_HOMEPAGE_URL}) set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries") set(CPACK_RESOURCE_FILE_LICENSE "${VILLASnode_SOURCE_DIR}/COPYING.md") diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 24a7085ac..78bbe8033 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -136,8 +136,8 @@ endif() set_target_properties(villas PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_SOVERSION} + VERSION ${CMAKE_PROJECT_VERSION} + SOVERSION 1 ) install( diff --git a/lib/nodes/opal.c b/lib/nodes/opal.c index 9fcf7df5c..e4b49d1b7 100644 --- a/lib/nodes/opal.c +++ b/lib/nodes/opal.c @@ -92,7 +92,7 @@ int opal_type_start() /// @todo: Port to C++ info("Started as OPAL Asynchronous process"); info("This is VILLASnode %s (built on %s, %s)", - BUILDID, __DATE__, __TIME__); + PROJECT_BUILD_ID, __DATE__, __TIME__); opal_print_global(); diff --git a/python/villas/client/CMakeLists.txt b/python/villas/client/CMakeLists.txt index 6c1ae56bb..d2ec909f2 100644 --- a/python/villas/client/CMakeLists.txt +++ b/python/villas/client/CMakeLists.txt @@ -27,8 +27,8 @@ if(DEFINED PROTOBUF_COMPILER AND PROTOBUF_FOUND) COMMAND ${PROTOBUF_COMPILER} --python_out=${CMAKE_CURRENT_BINARY_DIR} villas.proto - MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/lib/formats/villas.proto - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib/formats + MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/lib/formats/villas.proto + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/lib/formats ) add_custom_target(python ALL diff --git a/src/villas-node.cpp b/src/villas-node.cpp index 838719a2b..5439f9597 100644 --- a/src/villas-node.cpp +++ b/src/villas-node.cpp @@ -129,7 +129,7 @@ int main(int argc, char *argv[]) char *uri = argc == optind + 1 ? argv[optind] : NULL; #endif /* ENABLE_OPAL_ASYNC */ - info("This is VILLASnode %s (built on %s, %s)", CLR_BLD(CLR_YEL(BUILDID)), + info("This is VILLASnode %s (built on %s, %s)", CLR_BLD(CLR_YEL(PROJECT_BUILD_ID)), CLR_BLD(CLR_MAG(__DATE__)), CLR_BLD(CLR_MAG(__TIME__))); #ifdef __linux__ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b0dea03f8..baf8b9e93 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -23,14 +23,16 @@ add_custom_target(tests) add_custom_target(run-tests) -add_subdirectory(unit) add_subdirectory(integration) +if(CRITERION_FOUND) + add_subdirectory(unit) +endif() set(VALGRIND "valgrind --leak-check=full --show-leak-kinds=all --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/valgrind.supp") add_custom_target(run-valgrind COMMAND ${VALGRIND} $ & sleep 2; kill %1 - COMMAND ${VALGRIND} $ -t 2 ${CMAKE_SOURCE_DIR}/etc/websocket-loopback.conf ws1 + COMMAND ${VALGRIND} $ -t 2 ${PROJECT_SOURCE_DIR}/etc/websocket-loopback.conf ws1 COMMAND ${VALGRIND} $ mixed -v 4 -l 10 COMMAND ${VALGRIND} $ stats < <($ mixed -l 5) ) diff --git a/tests/integration/CMakeLists.txt b/tests/integration/CMakeLists.txt index 9b90fd751..f3d7e812e 100644 --- a/tests/integration/CMakeLists.txt +++ b/tests/integration/CMakeLists.txt @@ -22,9 +22,9 @@ add_custom_target(run-integration-tests COMMAND - SRCDIR=${CMAKE_SOURCE_DIR} - BUILDDIR=${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/tools/integration-tests.sh + SRCDIR=${PROJECT_SOURCE_DIR} + BUILDDIR=${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/tools/integration-tests.sh DEPENDS villas-node villas-pipe diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index 4dd3ed66a..ab4d4b5bf 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -20,34 +20,31 @@ # along with this program. If not, see . ################################################################################### -if(CRITERION_FOUND) +set(TEST_SRC + config_json.cpp + io.cpp + json.cpp + main.cpp + mapping.cpp + memory.cpp + pool.cpp + queue.cpp + queue_signalled.cpp +) - set(TEST_SRC - config_json.cpp - io.cpp - json.cpp - main.cpp - mapping.cpp - memory.cpp - pool.cpp - queue.cpp - queue_signalled.cpp - ) +add_executable(unit-tests ${TEST_SRC}) +target_link_libraries(unit-tests PUBLIC + PkgConfig::CRITERION + villas + Threads::Threads +) - add_executable(unit-tests ${TEST_SRC}) - target_link_libraries(unit-tests PUBLIC - PkgConfig::CRITERION - villas - Threads::Threads - ) +add_custom_target(run-unit-tests + COMMAND $ ${CRITERION_OPTS} + USES_TERMINAL +) - add_custom_target(run-unit-tests - COMMAND $ ${CRITERION_OPTS} - USES_TERMINAL - ) +add_dependencies(tests unit-tests) +add_dependencies(run-tests run-unit-tests) - add_dependencies(tests unit-tests) - add_dependencies(run-tests run-unit-tests) - - add_dependencies(run-unit-tests unit-tests) -endif() +add_dependencies(run-unit-tests unit-tests)