* Added project template for interface librariesmaster
| @@ -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 ) | |||
| @@ -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 ) | |||
| @@ -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} ) | |||
| @@ -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} | |||
| @@ -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 ) | |||
| @@ -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 ) | |||
| @@ -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} ) | |||
| @@ -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} ) | |||
| @@ -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 | |||
| Verbose=0 | |||
| Update=0 | |||
| CMakeModules="" | |||
| CMakeModulesForced="" | |||
| Operations=() | |||
| @@ -41,6 +42,9 @@ Parameters: | |||
| -g|--group <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> | |||
| 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" | |||
| ;; | |||
| *) | |||