From e53aa148205775974b83e77d5ec6266045edcffa Mon Sep 17 00:00:00 2001 From: bergmann Date: Sat, 10 Aug 2019 12:15:14 +0200 Subject: [PATCH] * Improved project structure * Added project template for interface libraries --- projects/helloworld/CMakeLists.txt | 4 +- .../helloworld/cmake/helloworld-const.cmake | 2 +- projects/helloworld/test/CMakeLists.txt | 5 - projects/libhelloworld/CMakeLists.txt | 9 +- .../cmake/libhelloworld-const.cmake | 6 +- .../cmake/libhelloworld-options.cmake | 3 + projects/libhelloworld/src/CMakeLists.txt | 4 + projects/libhelloworld/test/CMakeLists.txt | 5 - projects/libinterface/CMakeLists.txt | 63 +++++++++++++ .../cmake/libinterface-config.cmake | 9 ++ .../cmake/libinterface-const.cmake | 28 ++++++ .../cmake/libinterface-options.cmake | 11 +++ .../libinterface/cmake/libinterface-var.cmake | 26 +++++ projects/libinterface/include/libinterface.h | 4 + .../libinterface/include/libinterface/dummy.h | 15 +++ .../include/libinterface/dummy.inl | 11 +++ projects/libinterface/src/CMakeLists.txt | 30 ++++++ projects/libinterface/test/CMakeLists.txt | 52 ++++++++++ .../test/libinterface/libinterface_tests.cpp | 10 ++ tool | 94 +++++++++---------- 20 files changed, 326 insertions(+), 65 deletions(-) create mode 100644 projects/libinterface/CMakeLists.txt create mode 100644 projects/libinterface/cmake/libinterface-config.cmake create mode 100644 projects/libinterface/cmake/libinterface-const.cmake create mode 100644 projects/libinterface/cmake/libinterface-options.cmake create mode 100644 projects/libinterface/cmake/libinterface-var.cmake create mode 100644 projects/libinterface/include/libinterface.h create mode 100644 projects/libinterface/include/libinterface/dummy.h create mode 100644 projects/libinterface/include/libinterface/dummy.inl create mode 100644 projects/libinterface/src/CMakeLists.txt create mode 100644 projects/libinterface/test/CMakeLists.txt create mode 100644 projects/libinterface/test/libinterface/libinterface_tests.cpp diff --git a/projects/helloworld/CMakeLists.txt b/projects/helloworld/CMakeLists.txt index f5e8481..12e3fb7 100644 --- a/projects/helloworld/CMakeLists.txt +++ b/projects/helloworld/CMakeLists.txt @@ -20,14 +20,14 @@ EndIf ( ) # Project ######################################################################################### +Include ( CTest ) +Include ( GNUInstallDirs ) Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-options.cmake ) Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-const.cmake ) Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-var.cmake ) Project ( ${HELLOWORLD_PROJECT_NAME} DESCRIPTION "${HELLOWORLD_PROJECT_DESCRIPTION}" VERSION "${HELLOWORLD_VERSION}" ) -Include ( CTest ) -Include ( GNUInstallDirs ) # Subdirectories Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) diff --git a/projects/helloworld/cmake/helloworld-const.cmake b/projects/helloworld/cmake/helloworld-const.cmake index 463659e..319caed 100644 --- a/projects/helloworld/cmake/helloworld-const.cmake +++ b/projects/helloworld/cmake/helloworld-const.cmake @@ -17,7 +17,7 @@ Set ( HELLOWORLD_PROJECT_DESCRIPTION "A simple he Include ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake ) # Install directories -Set ( HELLOWORLD_INSTALL_DIR_BIN "bin" ) +Set ( HELLOWORLD_INSTALL_DIR_BIN "${CMAKE_INSTALL_BINDIR}" ) # C Standard Set ( CMAKE_C_STANDARD 11 ) diff --git a/projects/helloworld/test/CMakeLists.txt b/projects/helloworld/test/CMakeLists.txt index 871f01d..a3778d4 100644 --- a/projects/helloworld/test/CMakeLists.txt +++ b/projects/helloworld/test/CMakeLists.txt @@ -43,11 +43,6 @@ ForEach ( FILE IN LISTS HELLOWORLD_TEST_SOURCE_FILES ) Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) EndIf ( ) - # optimization - If ( HAS_COTIRE ) - Cotire ( ${TEST_NAME} ) - EndIf ( ) - # test If ( HAS_CMAKE_TESTS ) Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) diff --git a/projects/libhelloworld/CMakeLists.txt b/projects/libhelloworld/CMakeLists.txt index 0f10e67..39c48fd 100644 --- a/projects/libhelloworld/CMakeLists.txt +++ b/projects/libhelloworld/CMakeLists.txt @@ -20,20 +20,25 @@ EndIf ( ) # Project ######################################################################################### +Include ( CTest ) +Include ( GNUInstallDirs ) Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-options.cmake ) Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-const.cmake ) Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-var.cmake ) Project ( ${LIBHELLOWORLD_PROJECT_NAME} DESCRIPTION "${LIBHELLOWORLD_PROJECT_DESCRIPTION}" VERSION "${LIBHELLOWORLD_VERSION}" ) -Include ( CTest ) -Include ( GNUInstallDirs ) # Subdirectories Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) # Install +If ( NOT LIBHELLOWORLD_HAS_EXPORT + OR NOT LIBHELLOWORLD_INSTALL_PACKAGE ) + Return ( ) +EndIf ( ) + Include ( CMakePackageConfigHelpers ) Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" VERSION ${LIBHELLOWORLD_VERSION} diff --git a/projects/libhelloworld/cmake/libhelloworld-const.cmake b/projects/libhelloworld/cmake/libhelloworld-const.cmake index 16000d5..6f2038a 100644 --- a/projects/libhelloworld/cmake/libhelloworld-const.cmake +++ b/projects/libhelloworld/cmake/libhelloworld-const.cmake @@ -17,9 +17,9 @@ Set ( LIBHELLOWORLD_PROJECT_DESCRIPTION "A simpl Include ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake ) # Install directories -Set ( LIBHELLOWORLD_INSTALL_DIR_INCLUDE "include/${LIBHELLOWORLD_NAME}" ) -Set ( LIBHELLOWORLD_INSTALL_DIR_LIB "lib" ) -Set ( LIBHELLOWORLD_INSTALL_DIR_SHARE "share/${LIBHELLOWORLD_NAME}" ) +Set ( LIBHELLOWORLD_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBHELLOWORLD_NAME}" ) +Set ( LIBHELLOWORLD_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) +Set ( LIBHELLOWORLD_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBHELLOWORLD_NAME}" ) # C Standard Set ( CMAKE_C_STANDARD 11 ) diff --git a/projects/libhelloworld/cmake/libhelloworld-options.cmake b/projects/libhelloworld/cmake/libhelloworld-options.cmake index 2448669..1b2ec63 100644 --- a/projects/libhelloworld/cmake/libhelloworld-options.cmake +++ b/projects/libhelloworld/cmake/libhelloworld-options.cmake @@ -12,6 +12,9 @@ Option ( LIBHELLOWORLD_INSTALL_SHARED Option ( LIBHELLOWORLD_INSTALL_DEBUG "Install the stripped debug informations of libhelloworld." OFF ) +Option ( LIBHELLOWORLD_INSTALL_PACKAGE + "Install the cmake package of libhelloworld." + ON ) Option ( LIBHELLOWORLD_NO_STRIP "Do not strip debug symbols from binary." OFF ) diff --git a/projects/libhelloworld/src/CMakeLists.txt b/projects/libhelloworld/src/CMakeLists.txt index f668abe..dc29c1d 100644 --- a/projects/libhelloworld/src/CMakeLists.txt +++ b/projects/libhelloworld/src/CMakeLists.txt @@ -64,6 +64,8 @@ EndIf ( ) # Install ######################################################################################### +Set ( LIBHELLOWORLD_HAS_EXPORT False PARENT_SCOPE ) + # Header If ( LIBHELLOWORLD_INSTALL_HEADER ) Install ( FILES ${LIBHELLOWORLD_INCLUDE_DIR}/libhelloworld.h @@ -74,6 +76,7 @@ EndIf ( ) # Static If ( LIBHELLOWORLD_INSTALL_STATIC ) + Set ( LIBHELLOWORLD_HAS_EXPORT True PARENT_SCOPE ) Install ( TARGETS libhelloworld-static EXPORT libhelloworld DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) @@ -81,6 +84,7 @@ EndIf ( ) # Shared If ( LIBHELLOWORLD_INSTALL_SHARED ) + Set ( LIBHELLOWORLD_HAS_EXPORT True PARENT_SCOPE ) Install ( TARGETS libhelloworld-shared EXPORT libhelloworld DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) diff --git a/projects/libhelloworld/test/CMakeLists.txt b/projects/libhelloworld/test/CMakeLists.txt index 93c4b39..0a6fcc4 100644 --- a/projects/libhelloworld/test/CMakeLists.txt +++ b/projects/libhelloworld/test/CMakeLists.txt @@ -43,11 +43,6 @@ ForEach ( FILE IN LISTS LIBHELLOWORLD_TEST_SOURCE_FILES ) Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) EndIf ( ) - # optimization - If ( HAS_COTIRE ) - Cotire ( ${TEST_NAME} ) - EndIf ( ) - # test If ( HAS_CMAKE_TESTS ) Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) diff --git a/projects/libinterface/CMakeLists.txt b/projects/libinterface/CMakeLists.txt new file mode 100644 index 0000000..2625510 --- /dev/null +++ b/projects/libinterface/CMakeLists.txt @@ -0,0 +1,63 @@ +# Initialize CMake ################################################################################ + +CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) + +# Set CMAKE_BUILD_TYPE +If ( NOT CMAKE_BUILD_TYPE ) + Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) +EndIf ( NOT CMAKE_BUILD_TYPE ) +Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) + +# Set CMAKE_MODULE_PATH +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) +EndIf ( ) +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ) +EndIf ( ) + +# Project ######################################################################################### + +Include ( CTest ) +Include ( GNUInstallDirs ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-options.cmake ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-const.cmake ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-var.cmake ) +Project ( ${LIBINTERFACE_PROJECT_NAME} + DESCRIPTION "${LIBINTERFACE_PROJECT_DESCRIPTION}" + VERSION "${LIBINTERFACE_VERSION}" ) + +# Subdirectories +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) + +# Install +If ( NOT LIBINTERFACE_HAS_EXPORT + OR NOT LIBINTERFACE_INSTALL_PACKAGE ) + Return ( ) +EndIf ( ) + +Include ( CMakePackageConfigHelpers ) +Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake" + VERSION ${LIBINTERFACE_VERSION} + COMPATIBILITY AnyNewerVersion ) +Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libinterface-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config.cmake" + @ONLY ) + +Set ( ConfigPackageLocation "${LIBINTERFACE_INSTALL_DIR_SHARE}/cmake" ) +Install ( EXPORT + libinterface + NAMESPACE + libinterface:: + DESTINATION + ${ConfigPackageLocation} ) +Install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/libinterface-config-version.cmake" + DESTINATION + ${ConfigPackageLocation} + COMPONENT + Devel ) diff --git a/projects/libinterface/cmake/libinterface-config.cmake b/projects/libinterface/cmake/libinterface-config.cmake new file mode 100644 index 0000000..ccab10b --- /dev/null +++ b/projects/libinterface/cmake/libinterface-config.cmake @@ -0,0 +1,9 @@ +# libinterface-config.cmake - package configuration file + +# Include ( CMakeFindDependencyMacro ) +# Find_Dependency ( ) + +Include ( FindPackageHandleStandardArgs ) +Set ( ${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE} ) +Find_Package_Handle_Standard_Args ( libinterface CONFIG_MODE ) +Include ( "${CMAKE_CURRENT_LIST_DIR}/libinterface.cmake") diff --git a/projects/libinterface/cmake/libinterface-const.cmake b/projects/libinterface/cmake/libinterface-const.cmake new file mode 100644 index 0000000..93d94f5 --- /dev/null +++ b/projects/libinterface/cmake/libinterface-const.cmake @@ -0,0 +1,28 @@ +# This file contains constant variables that are fixed to this project + +# Version +Set ( LIBINTERFACE_VERSION_MAJOR 1 ) +Set ( LIBINTERFACE_VERSION_MINOR 0 ) +Set ( LIBINTERFACE_VERSION_PATCH 0 ) +Set ( LIBINTERFACE_VERSION_BUILD 0 ) +Set ( LIBINTERFACE_VERSION_HASH "" ) +Set ( LIBINTERFACE_VERSION_BEHIND 0 ) +Set ( LIBINTERFACE_VERSION_DIRTY 0 ) + +# Names +Set ( LIBINTERFACE_PROJECT_NAME "libinterface" ) +Set ( LIBINTERFACE_PROJECT_DESCRIPTION "A simple interface library" ) + +# Include generated variables for further usage +Include ( ${CMAKE_CURRENT_LIST_DIR}/libinterface-var.cmake ) + +# Install directories +Set ( LIBINTERFACE_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${LIBINTERFACE_NAME}" ) +Set ( LIBINTERFACE_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) +Set ( LIBINTERFACE_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${LIBINTERFACE_NAME}" ) + +# C Standard +Set ( CMAKE_C_STANDARD 11 ) +Set ( CMAKE_CXX_STANDARD 17 ) +Set ( CMAKE_C_STANDARD_REQUIRED ON ) +Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) diff --git a/projects/libinterface/cmake/libinterface-options.cmake b/projects/libinterface/cmake/libinterface-options.cmake new file mode 100644 index 0000000..3262936 --- /dev/null +++ b/projects/libinterface/cmake/libinterface-options.cmake @@ -0,0 +1,11 @@ +# This file contains options that can be passed to the cmake command + +Option ( LIBINTERFACE_INSTALL_HEADER + "Install headers of libinterface." + ON ) +Option ( LIBINTERFACE_INSTALL_PACKAGE + "Install the cmake package of libinterface." + ON ) +Option ( LIBINTERFACE_USE_GIT_VERSION + "Read the git tags to get the version of libinterface" + ON ) diff --git a/projects/libinterface/cmake/libinterface-var.cmake b/projects/libinterface/cmake/libinterface-var.cmake new file mode 100644 index 0000000..4519be6 --- /dev/null +++ b/projects/libinterface/cmake/libinterface-var.cmake @@ -0,0 +1,26 @@ +# This file contains generated variables that are needed for the project + +# Git Version +If ( LIBINTERFACE_USE_GIT_VERSION ) + Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) + If ( HAS_GIT_HELPER ) + GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. + LIBINTERFACE_VERSION_MAJOR + LIBINTERFACE_VERSION_MINOR + LIBINTERFACE_VERSION_PATCH + LIBINTERFACE_VERSION_BUILD + LIBINTERFACE_VERSION_HASH + LIBINTERFACE_VERSION_BEHIND + LIBINTERFACE_VERSION_DIRTY ) + EndIf ( ) +EndIf ( ) + +# Strings +Set ( LIBINTERFACE_VERSION_SHORT "${LIBINTERFACE_VERSION_MAJOR}.${LIBINTERFACE_VERSION_MINOR}" ) +Set ( LIBINTERFACE_VERSION "${LIBINTERFACE_VERSION_SHORT}.${LIBINTERFACE_VERSION_PATCH}.${LIBINTERFACE_VERSION_BUILD}" ) +Set ( LIBINTERFACE_VERSION_COMPLETE "${LIBINTERFACE_VERSION}" ) +Set ( LIBINTERFACE_NAME "${LIBINTERFACE_PROJECT_NAME}-${LIBINTERFACE_VERSION_SHORT}" ) +Set ( LIBINTERFACE_OUTPUTNAME "${LIBINTERFACE_PROJECT_NAME}" ) +If ( LIBINTERFACE_VERSION_BEHIND ) + Set ( LIBINTERFACE_VERSION_COMPLETE "${LIBINTERFACE_VERSION_COMPLETE}+${LIBINTERFACE_VERSION_BEHIND}" ) +EndIf ( ) diff --git a/projects/libinterface/include/libinterface.h b/projects/libinterface/include/libinterface.h new file mode 100644 index 0000000..f0d1f21 --- /dev/null +++ b/projects/libinterface/include/libinterface.h @@ -0,0 +1,4 @@ +#pragma once + +#include +#include diff --git a/projects/libinterface/include/libinterface/dummy.h b/projects/libinterface/include/libinterface/dummy.h new file mode 100644 index 0000000..39104f9 --- /dev/null +++ b/projects/libinterface/include/libinterface/dummy.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace libinterface +{ + + struct Dummy + { + static inline std::string getHelloWorld(); + }; + +} + +#include "dummy.inl" diff --git a/projects/libinterface/include/libinterface/dummy.inl b/projects/libinterface/include/libinterface/dummy.inl new file mode 100644 index 0000000..964969b --- /dev/null +++ b/projects/libinterface/include/libinterface/dummy.inl @@ -0,0 +1,11 @@ +#pragma once + +#include "dummy.h" + +namespace libinterface +{ + + std::string Dummy::getHelloWorld() + { return "HelloWorld"; } + +} diff --git a/projects/libinterface/src/CMakeLists.txt b/projects/libinterface/src/CMakeLists.txt new file mode 100644 index 0000000..da56281 --- /dev/null +++ b/projects/libinterface/src/CMakeLists.txt @@ -0,0 +1,30 @@ +# Initialize ###################################################################################### + +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) + +# Interface Library ############################################################################### + +Set ( LIBINTERFACE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) +Add_Library ( libinterface INTERFACE ) +Target_Include_Directories ( libinterface + INTERFACE + $ + $ ) + +# Install ######################################################################################### + +Set ( LIBINTERFACE_HAS_EXPORT False PARENT_SCOPE ) + +# Header +If ( LIBINTERFACE_INSTALL_HEADER ) + Set ( LIBINTERFACE_HAS_EXPORT True PARENT_SCOPE ) + Install ( FILES ${LIBINTERFACE_INCLUDE_DIR}/libinterface.h + DESTINATION ${LIBINTERFACE_INSTALL_DIR_INCLUDE} ) + Install ( DIRECTORY ${LIBINTERFACE_INCLUDE_DIR}/libinterface + DESTINATION ${LIBINTERFACE_INSTALL_DIR_INCLUDE} ) + Install ( TARGETS libinterface + EXPORT libinterface + DESTINATION ${LIBINTERFACE_INSTALL_DIR_INCLUDE} ) +EndIf ( ) diff --git a/projects/libinterface/test/CMakeLists.txt b/projects/libinterface/test/CMakeLists.txt new file mode 100644 index 0000000..207dbbe --- /dev/null +++ b/projects/libinterface/test/CMakeLists.txt @@ -0,0 +1,52 @@ +# Initialize ###################################################################################### + +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) + +# Test ############################################################################################ + +Find_Package ( GTest ) +If ( NOT "${GTest_FOUND}" ) + Return ( ) +EndIf ( ) + +File ( GLOB_RECURSE LIBINTERFACE_TEST_HEADER_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) +File ( GLOB_RECURSE LIBINTERFACE_TEST_INLINE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) +File ( GLOB_RECURSE LIBINTERFACE_TEST_SOURCE_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) + +ForEach ( FILE IN LISTS LIBINTERFACE_TEST_SOURCE_FILES ) + # add test + Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) + Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) + Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) + String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) + Set ( TEST_NAME "test-${TEST_NAME}" ) + Add_Executable ( ${TEST_NAME} + EXCLUDE_FROM_ALL + ${LIBINTERFACE_TEST_HEADER_FILES} + ${LIBINTERFACE_TEST_INLINE_FILES} + ${FILE} ) + Target_Link_Libraries ( ${TEST_NAME} + PUBLIC + libinterface + GTest::Main ) + + # pedantic + If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) + EndIf ( ) + + # test + If ( HAS_CMAKE_TESTS ) + Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) + Else ( ) + Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) + EndIf ( ) +EndForEach ( ) diff --git a/projects/libinterface/test/libinterface/libinterface_tests.cpp b/projects/libinterface/test/libinterface/libinterface_tests.cpp new file mode 100644 index 0000000..6da310f --- /dev/null +++ b/projects/libinterface/test/libinterface/libinterface_tests.cpp @@ -0,0 +1,10 @@ +#include + +#include + +using namespace ::testing; +using namespace ::libinterface; + +TEST(libinterface_tests, dummy) +{ +} diff --git a/tool b/tool index 5d36a32..5b4b880 100755 --- a/tool +++ b/tool @@ -5,6 +5,7 @@ ScriptDir=$(dirname "${ScriptFile}") UseGit=1 Verbose=0 +Update=0 CMakeModules="" CMakeModulesForced="" Operations=() @@ -41,6 +42,9 @@ Parameters: -g|--group Create a new project group at the given directory. + -i|--interface + Create a new interface library project with the given name at the given directory. + -l|--library Create a new library project with the given name at the given directory. @@ -54,6 +58,9 @@ Parameters: -n|--nogit Does not initialize a new git repository when creating a new project group. + -u|--update + Update an exsisting project. + -v|--verbose Print extra debug output. @@ -142,11 +149,12 @@ function CreateGroup() done } -function CreateLibrary() +function CreateProject() { name="$1" dir="$2" - Log "\nCreate Library: $1 $2" + src="$3" + Log "\nCreate Project $1 in director $2" # Create directory Log " Create directory: $dir" @@ -169,65 +177,37 @@ function CreateLibrary() # Copy files Log " Copy files" - srcDir="$ScriptDir/projects/libhelloworld" + srcDir="$ScriptDir/projects/$src" for file in $(find $srcDir -type f); do + + targetFile="${file/$srcDir/}" + targetFile="${dir}${targetFile}" + targetFile="${targetFile//$src/$name}" + + # exclude build directory and cmake modules if [[ $file == $srcDir/build/* ]] \ || [[ $file == $srcDir/cmake/modules/* ]] then relFile=.${file/$srcDir/} Verbose " Ignore $relFile" + + # ignore git files elif [[ $UseGit -eq 0 ]] \ && [[ $file == $srcDir/.git* ]] then relFile=.${file/$srcDir/} Verbose " Ignore $relFile" - else - Copy "$srcDir" "$dir" "${file/$srcDir/}" "libhelloworld" "$name" - fi - done -} -function CreateExecutable() -{ - name="$1" - dir="$2" - Log "\nCreate Executable: $1 $2" - - # Create directory - Log " Create directory: $dir" - mkdir -p "$dir" \ - || Panic "Unable to create directory: $dir!" - - # Create git repository - Log " Create git repository" - if [[ $UseGit -eq 1 ]]; then - git -C $dir init \ - || Panic "Git init failed!" - - # Add cmake modules - Log " Add git submodule for CMake modules" - if [[ -n "$CMakeModules" ]]; then - git -C $dir submodule add $CMakeModulesForced "$CMakeModules" "cmake/modules" \ - || Panic "Git submodule add failed!" - fi - fi - - # Copy files - Log " Copy files" - srcDir="$ScriptDir/projects/helloworld" - for file in $(find $srcDir -type f); do - if [[ $file == $srcDir/build/* ]] \ - || [[ $file == $srcDir/cmake/modules/* ]] - then - relFile=.${file/$srcDir/} - Verbose " Ignore $relFile" - elif [[ $UseGit -eq 0 ]] \ - && [[ $file == $srcDir/.git* ]] + # update + elif [[ $Update -eq 1 ]] \ + && [[ ! -f ${targetFile} ]] then relFile=.${file/$srcDir/} Verbose " Ignore $relFile" + + # copy else - Copy "$srcDir" "$dir" "${file/$srcDir/}" "helloworld" "$name" + Copy "$srcDir" "$dir" "${file/$srcDir/}" "$src" "$name" fi done } @@ -244,6 +224,16 @@ while [ $# -gt 0 ]; do shift ;; + "-i" | "--interface" ) + if [ $# -lt 3 ]; then + Panic "Parameter $1 expects exactly two parameter!" + fi + tmp=$(readlink -m "$3") + Operations+=("intf:$2:$tmp") + shift + shift + ;; + "-l" | "--library" ) if [ $# -lt 3 ]; then Panic "Parameter $1 expects exactly two parameter!" @@ -281,6 +271,10 @@ while [ $# -gt 0 ]; do shift ;; + "-u" | "--update") + Update=1 + ;; + "-n" | "--nogit" ) UseGit=0 ;; @@ -310,16 +304,22 @@ for data in "${Operations[@]}"; do CreateGroup "$dir" ;; + intf) + name=$(echo $data | awk -F: '{ print $2 }') + dir=$(echo $data | awk -F: '{ print $3 }') + CreateProject "$name" "$dir" "libinterface" + ;; + lib) name=$(echo $data | awk -F: '{ print $2 }') dir=$(echo $data | awk -F: '{ print $3 }') - CreateLibrary "$name" "$dir" + CreateProject "$name" "$dir" "libhelloworld" ;; exe) name=$(echo $data | awk -F: '{ print $2 }') dir=$(echo $data | awk -F: '{ print $3 }') - CreateExecutable "$name" "$dir" + CreateProject "$name" "$dir" "helloworld" ;; *)