| @@ -20,14 +20,14 @@ EndIf ( ) | |||||
| # Project ######################################################################################### | # Project ######################################################################################### | ||||
| Include ( CTest ) | |||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-options.cmake ) | 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-const.cmake ) | ||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-var.cmake ) | Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/helloworld-var.cmake ) | ||||
| Project ( ${HELLOWORLD_PROJECT_NAME} | Project ( ${HELLOWORLD_PROJECT_NAME} | ||||
| DESCRIPTION "${HELLOWORLD_PROJECT_DESCRIPTION}" | DESCRIPTION "${HELLOWORLD_PROJECT_DESCRIPTION}" | ||||
| VERSION "${HELLOWORLD_VERSION}" ) | VERSION "${HELLOWORLD_VERSION}" ) | ||||
| Include ( CTest ) | |||||
| Include ( GNUInstallDirs ) | |||||
| # Subdirectories | # Subdirectories | ||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | ||||
| @@ -17,7 +17,7 @@ Set ( HELLOWORLD_PROJECT_DESCRIPTION "A simple he | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake ) | Include ( ${CMAKE_CURRENT_LIST_DIR}/helloworld-var.cmake ) | ||||
| # Install directories | # Install directories | ||||
| Set ( HELLOWORLD_INSTALL_DIR_BIN "bin" ) | |||||
| Set ( HELLOWORLD_INSTALL_DIR_BIN "${CMAKE_INSTALL_BINDIR}" ) | |||||
| # C Standard | # C Standard | ||||
| Set ( CMAKE_C_STANDARD 11 ) | Set ( CMAKE_C_STANDARD 11 ) | ||||
| @@ -43,11 +43,6 @@ ForEach ( FILE IN LISTS HELLOWORLD_TEST_SOURCE_FILES ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | ||||
| EndIf ( ) | EndIf ( ) | ||||
| # optimization | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # test | # test | ||||
| If ( HAS_CMAKE_TESTS ) | If ( HAS_CMAKE_TESTS ) | ||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) | Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) | ||||
| @@ -20,20 +20,25 @@ EndIf ( ) | |||||
| # Project ######################################################################################### | # Project ######################################################################################### | ||||
| Include ( CTest ) | |||||
| Include ( GNUInstallDirs ) | |||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-options.cmake ) | 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-const.cmake ) | ||||
| Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-var.cmake ) | Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhelloworld-var.cmake ) | ||||
| Project ( ${LIBHELLOWORLD_PROJECT_NAME} | Project ( ${LIBHELLOWORLD_PROJECT_NAME} | ||||
| DESCRIPTION "${LIBHELLOWORLD_PROJECT_DESCRIPTION}" | DESCRIPTION "${LIBHELLOWORLD_PROJECT_DESCRIPTION}" | ||||
| VERSION "${LIBHELLOWORLD_VERSION}" ) | VERSION "${LIBHELLOWORLD_VERSION}" ) | ||||
| Include ( CTest ) | |||||
| Include ( GNUInstallDirs ) | |||||
| # Subdirectories | # Subdirectories | ||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) | ||||
| Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) | Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) | ||||
| # Install | # Install | ||||
| If ( NOT LIBHELLOWORLD_HAS_EXPORT | |||||
| OR NOT LIBHELLOWORLD_INSTALL_PACKAGE ) | |||||
| Return ( ) | |||||
| EndIf ( ) | |||||
| Include ( CMakePackageConfigHelpers ) | Include ( CMakePackageConfigHelpers ) | ||||
| Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" | Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/libhelloworld-config-version.cmake" | ||||
| VERSION ${LIBHELLOWORLD_VERSION} | VERSION ${LIBHELLOWORLD_VERSION} | ||||
| @@ -17,9 +17,9 @@ Set ( LIBHELLOWORLD_PROJECT_DESCRIPTION "A simpl | |||||
| Include ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake ) | Include ( ${CMAKE_CURRENT_LIST_DIR}/libhelloworld-var.cmake ) | ||||
| # Install directories | # 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 | # C Standard | ||||
| Set ( CMAKE_C_STANDARD 11 ) | Set ( CMAKE_C_STANDARD 11 ) | ||||
| @@ -12,6 +12,9 @@ Option ( LIBHELLOWORLD_INSTALL_SHARED | |||||
| Option ( LIBHELLOWORLD_INSTALL_DEBUG | Option ( LIBHELLOWORLD_INSTALL_DEBUG | ||||
| "Install the stripped debug informations of libhelloworld." | "Install the stripped debug informations of libhelloworld." | ||||
| OFF ) | OFF ) | ||||
| Option ( LIBHELLOWORLD_INSTALL_PACKAGE | |||||
| "Install the cmake package of libhelloworld." | |||||
| ON ) | |||||
| Option ( LIBHELLOWORLD_NO_STRIP | Option ( LIBHELLOWORLD_NO_STRIP | ||||
| "Do not strip debug symbols from binary." | "Do not strip debug symbols from binary." | ||||
| OFF ) | OFF ) | ||||
| @@ -64,6 +64,8 @@ EndIf ( ) | |||||
| # Install ######################################################################################### | # Install ######################################################################################### | ||||
| Set ( LIBHELLOWORLD_HAS_EXPORT False PARENT_SCOPE ) | |||||
| # Header | # Header | ||||
| If ( LIBHELLOWORLD_INSTALL_HEADER ) | If ( LIBHELLOWORLD_INSTALL_HEADER ) | ||||
| Install ( FILES ${LIBHELLOWORLD_INCLUDE_DIR}/libhelloworld.h | Install ( FILES ${LIBHELLOWORLD_INCLUDE_DIR}/libhelloworld.h | ||||
| @@ -74,6 +76,7 @@ EndIf ( ) | |||||
| # Static | # Static | ||||
| If ( LIBHELLOWORLD_INSTALL_STATIC ) | If ( LIBHELLOWORLD_INSTALL_STATIC ) | ||||
| Set ( LIBHELLOWORLD_HAS_EXPORT True PARENT_SCOPE ) | |||||
| Install ( TARGETS libhelloworld-static | Install ( TARGETS libhelloworld-static | ||||
| EXPORT libhelloworld | EXPORT libhelloworld | ||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | ||||
| @@ -81,6 +84,7 @@ EndIf ( ) | |||||
| # Shared | # Shared | ||||
| If ( LIBHELLOWORLD_INSTALL_SHARED ) | If ( LIBHELLOWORLD_INSTALL_SHARED ) | ||||
| Set ( LIBHELLOWORLD_HAS_EXPORT True PARENT_SCOPE ) | |||||
| Install ( TARGETS libhelloworld-shared | Install ( TARGETS libhelloworld-shared | ||||
| EXPORT libhelloworld | EXPORT libhelloworld | ||||
| DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | DESTINATION ${LIBHELLOWORLD_INSTALL_DIR_LIB} ) | ||||
| @@ -43,11 +43,6 @@ ForEach ( FILE IN LISTS LIBHELLOWORLD_TEST_SOURCE_FILES ) | |||||
| Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) | ||||
| EndIf ( ) | EndIf ( ) | ||||
| # optimization | |||||
| If ( HAS_COTIRE ) | |||||
| Cotire ( ${TEST_NAME} ) | |||||
| EndIf ( ) | |||||
| # test | # test | ||||
| If ( HAS_CMAKE_TESTS ) | If ( HAS_CMAKE_TESTS ) | ||||
| Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) | Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) | ||||
| @@ -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 ) | |||||
| @@ -0,0 +1,9 @@ | |||||
| # libinterface-config.cmake - package configuration file | |||||
| # Include ( CMakeFindDependencyMacro ) | |||||
| # Find_Dependency ( <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") | |||||
| @@ -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 ) | |||||
| @@ -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 ) | |||||
| @@ -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 ( ) | |||||
| @@ -0,0 +1,4 @@ | |||||
| #pragma once | |||||
| #include <libinterface/dummy.h> | |||||
| #include <libinterface/dummy.inl> | |||||
| @@ -0,0 +1,15 @@ | |||||
| #pragma once | |||||
| #include <string> | |||||
| namespace libinterface | |||||
| { | |||||
| struct Dummy | |||||
| { | |||||
| static inline std::string getHelloWorld(); | |||||
| }; | |||||
| } | |||||
| #include "dummy.inl" | |||||
| @@ -0,0 +1,11 @@ | |||||
| #pragma once | |||||
| #include "dummy.h" | |||||
| namespace libinterface | |||||
| { | |||||
| std::string Dummy::getHelloWorld() | |||||
| { return "HelloWorld"; } | |||||
| } | |||||
| @@ -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 | |||||
| $<BUILD_INTERFACE:${LIBINTERFACE_INCLUDE_DIR}> | |||||
| $<INSTALL_INTERFACE:${LIBINTERFACE_INSTALL_DIR_INCLUDE}> ) | |||||
| # 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 ( ) | |||||
| @@ -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 ( ) | |||||
| @@ -0,0 +1,10 @@ | |||||
| #include <gtest/gtest.h> | |||||
| #include <libinterface.h> | |||||
| using namespace ::testing; | |||||
| using namespace ::libinterface; | |||||
| TEST(libinterface_tests, dummy) | |||||
| { | |||||
| } | |||||
| @@ -5,6 +5,7 @@ ScriptDir=$(dirname "${ScriptFile}") | |||||
| UseGit=1 | UseGit=1 | ||||
| Verbose=0 | Verbose=0 | ||||
| Update=0 | |||||
| CMakeModules="" | CMakeModules="" | ||||
| CMakeModulesForced="" | CMakeModulesForced="" | ||||
| Operations=() | Operations=() | ||||
| @@ -41,6 +42,9 @@ Parameters: | |||||
| -g|--group <directory> | -g|--group <directory> | ||||
| Create a new project group at the given directory. | Create a new project group at the given directory. | ||||
| -i|--interface <name> <directory> | |||||
| Create a new interface library project with the given name at the given directory. | |||||
| -l|--library <name> <directory> | -l|--library <name> <directory> | ||||
| Create a new library project with the given name at the given directory. | Create a new library project with the given name at the given directory. | ||||
| @@ -54,6 +58,9 @@ Parameters: | |||||
| -n|--nogit | -n|--nogit | ||||
| Does not initialize a new git repository when creating a new project group. | Does not initialize a new git repository when creating a new project group. | ||||
| -u|--update | |||||
| Update an exsisting project. | |||||
| -v|--verbose | -v|--verbose | ||||
| Print extra debug output. | Print extra debug output. | ||||
| @@ -142,11 +149,12 @@ function CreateGroup() | |||||
| done | done | ||||
| } | } | ||||
| function CreateLibrary() | |||||
| function CreateProject() | |||||
| { | { | ||||
| name="$1" | name="$1" | ||||
| dir="$2" | dir="$2" | ||||
| Log "\nCreate Library: $1 $2" | |||||
| src="$3" | |||||
| Log "\nCreate Project $1 in director $2" | |||||
| # Create directory | # Create directory | ||||
| Log " Create directory: $dir" | Log " Create directory: $dir" | ||||
| @@ -169,65 +177,37 @@ function CreateLibrary() | |||||
| # Copy files | # Copy files | ||||
| Log " Copy files" | Log " Copy files" | ||||
| srcDir="$ScriptDir/projects/libhelloworld" | |||||
| srcDir="$ScriptDir/projects/$src" | |||||
| for file in $(find $srcDir -type f); do | 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/* ]] \ | if [[ $file == $srcDir/build/* ]] \ | ||||
| || [[ $file == $srcDir/cmake/modules/* ]] | || [[ $file == $srcDir/cmake/modules/* ]] | ||||
| then | then | ||||
| relFile=.${file/$srcDir/} | relFile=.${file/$srcDir/} | ||||
| Verbose " Ignore $relFile" | Verbose " Ignore $relFile" | ||||
| # ignore git files | |||||
| elif [[ $UseGit -eq 0 ]] \ | elif [[ $UseGit -eq 0 ]] \ | ||||
| && [[ $file == $srcDir/.git* ]] | && [[ $file == $srcDir/.git* ]] | ||||
| then | then | ||||
| relFile=.${file/$srcDir/} | relFile=.${file/$srcDir/} | ||||
| Verbose " Ignore $relFile" | 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 | then | ||||
| relFile=.${file/$srcDir/} | relFile=.${file/$srcDir/} | ||||
| Verbose " Ignore $relFile" | Verbose " Ignore $relFile" | ||||
| # copy | |||||
| else | else | ||||
| Copy "$srcDir" "$dir" "${file/$srcDir/}" "helloworld" "$name" | |||||
| Copy "$srcDir" "$dir" "${file/$srcDir/}" "$src" "$name" | |||||
| fi | fi | ||||
| done | done | ||||
| } | } | ||||
| @@ -244,6 +224,16 @@ while [ $# -gt 0 ]; do | |||||
| shift | 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" ) | "-l" | "--library" ) | ||||
| if [ $# -lt 3 ]; then | if [ $# -lt 3 ]; then | ||||
| Panic "Parameter $1 expects exactly two parameter!" | Panic "Parameter $1 expects exactly two parameter!" | ||||
| @@ -281,6 +271,10 @@ while [ $# -gt 0 ]; do | |||||
| shift | shift | ||||
| ;; | ;; | ||||
| "-u" | "--update") | |||||
| Update=1 | |||||
| ;; | |||||
| "-n" | "--nogit" ) | "-n" | "--nogit" ) | ||||
| UseGit=0 | UseGit=0 | ||||
| ;; | ;; | ||||
| @@ -310,16 +304,22 @@ for data in "${Operations[@]}"; do | |||||
| CreateGroup "$dir" | CreateGroup "$dir" | ||||
| ;; | ;; | ||||
| intf) | |||||
| name=$(echo $data | awk -F: '{ print $2 }') | |||||
| dir=$(echo $data | awk -F: '{ print $3 }') | |||||
| CreateProject "$name" "$dir" "libinterface" | |||||
| ;; | |||||
| lib) | lib) | ||||
| name=$(echo $data | awk -F: '{ print $2 }') | name=$(echo $data | awk -F: '{ print $2 }') | ||||
| dir=$(echo $data | awk -F: '{ print $3 }') | dir=$(echo $data | awk -F: '{ print $3 }') | ||||
| CreateLibrary "$name" "$dir" | |||||
| CreateProject "$name" "$dir" "libhelloworld" | |||||
| ;; | ;; | ||||
| exe) | exe) | ||||
| name=$(echo $data | awk -F: '{ print $2 }') | name=$(echo $data | awk -F: '{ print $2 }') | ||||
| dir=$(echo $data | awk -F: '{ print $3 }') | dir=$(echo $data | awk -F: '{ print $3 }') | ||||
| CreateExecutable "$name" "$dir" | |||||
| CreateProject "$name" "$dir" "helloworld" | |||||
| ;; | ;; | ||||
| *) | *) | ||||