diff --git a/CMakeLists_test_template.txt b/CMakeLists_test_template.txt new file mode 100755 index 0000000000000000000000000000000000000000..8470b4a461e235fa56715d60687a5c9a01eee631 --- /dev/null +++ b/CMakeLists_test_template.txt @@ -0,0 +1,78 @@ +# Pre-requisites about cmake itself +CMAKE_MINIMUM_REQUIRED(VERSION 2.4) + +if(COMMAND cmake_policy) + cmake_policy(SET CMP0005 NEW) + cmake_policy(SET CMP0003 NEW) + +endif(COMMAND cmake_policy) + +# The project name and the type of project +PROJECT(project_name) + +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) +SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib) +SET(CMAKE_INSTALL_PREFIX /usr/local) + +IF (NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE "DEBUG") +ENDIF (NOT CMAKE_BUILD_TYPE) + +SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -D_REENTRANT") +SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -D_REENTRANT -O0 --coverage -fprofile-arcs") +SET(CMAKE_LINK_FLAGS_DEBUG "--coverage -fprofile-arcs") + +# +# Add ctest +# +INCLUDE(CTest) + +ADD_SUBDIRECTORY(src) + +ADD_SUBDIRECTORY(test/gtest) + +ADD_SUBDIRECTORY(test) + +FIND_PACKAGE(Doxygen) + +FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/) +IF (IRI_DOC_DIR) + ADD_CUSTOM_TARGET (doc ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/doc/iri_doc/doxygen.conf) +ELSE (IRI_DOC_DIR) + ADD_CUSTOM_TARGET (doc ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/doc/doxygen.conf) +ENDIF (IRI_DOC_DIR) + +ADD_CUSTOM_TARGET (distclean @echo cleaning cmake files) + +IF (UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "distribution clean" + COMMAND make ARGS clean + COMMAND rm ARGS -rf ${CMAKE_SOURCE_DIR}/build/* + + TARGET distclean + ) +ELSE(UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "distclean only implemented in unix" + TARGET distclean + ) +ENDIF(UNIX) + +ADD_CUSTOM_TARGET (uninstall @echo uninstall package) + +IF (UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "uninstall package" + COMMAND xargs ARGS rm < install_manifest.txt + + TARGET uninstall + ) +ELSE(UNIX) + ADD_CUSTOM_COMMAND( + COMMENT "uninstall only implemented in unix" + TARGET uninstall + ) +ENDIF(UNIX) + + diff --git a/new_project.sh b/new_project.sh index c190604bda99331610e77d62a86344fcb70594a0..bc883f486fd78d294ab5efeb8d163e87b2f3d895 100755 --- a/new_project.sh +++ b/new_project.sh @@ -4,8 +4,9 @@ DEP= TYPE= PROJECT_NAME= NAME= +TEST=0 -while getopts “t:p:n:d†OPTION +while getopts “t:p:n:dg†OPTION do case $OPTION in t) @@ -20,6 +21,9 @@ do d) DEP=$OPTARG ;; + g) + TEST=1 + ;; ?) echo invalid argument $OPTION exit @@ -155,7 +159,13 @@ rm ReadMe_template.md #Set the project name on the CMakeLists.txt script file NEW_NAME=$(echo $NAME | sed 's/_/-/g') -sed 's/project_name/'$NEW_NAME'/g' <CMakeLists_template.txt >./CMakeLists.txt +if [ $TEST = 1 ] +then + sed 's/project_name/'$NEW_NAME'/g' <CMakeLists_test_template.txt >./CMakeLists.txt +else + sed 's/project_name/'$NEW_NAME'/g' <CMakeLists_template.txt >./CMakeLists.txt +fi +rm CMakeLists_test_template.txt rm CMakeLists_template.txt #Set the project name on the doxygen_project_name.dox sript file @@ -251,6 +261,20 @@ else sed 's/library_name/'$NAME'/g' <driver_example_src_template.cpp >./src/examples/${NAME}_test.cpp rm application_src_template.cpp fi + +if [ $TEST = 1 ] +then + Library_name=$(echo $NAME | sed 's/\([a-zA-Z]\)\([a-zA-Z0-9]*\)/\u\1\2/g') + sed 's/library_name/'$NEW_NAME'/g' <./test/CMakeLists_template.txt >./test/tmp.txt + sed 's/Library_name/'$Library_name'/g' <./test/tmp.txt >./test/CMakeLists.txt + rm ./test/CMakeLists_template.txt + rm ./test/tmp.txt + sed 's/library_name/'$NAME'/g' <./test/test_template.cpp >./test/${NAME}_test.cpp + rm ./test/test_template.cpp +else + rm -rf test +fi + rm driver_src_template.cpp rm driver_header_template.h rm driver_example_src_template.cpp diff --git a/test/CMakeLists_template.txt b/test/CMakeLists_template.txt new file mode 100644 index 0000000000000000000000000000000000000000..873a4e031d2ad3c6a26f68e9c4e0936fa2eda553 --- /dev/null +++ b/test/CMakeLists_template.txt @@ -0,0 +1,15 @@ +include_directories(${GTEST_INCLUDE_DIRS}) +include_directories(${GMOCK_INCLUDE_DIRS}) + +include_directories(${PROJECT_SOURCE_DIR}/include) + +set(CTEST_CUSTOM_COVERAGE_EXCLUDE *) + +add_executable(library_name_tests library_name_test.cpp) +add_dependencies(library_name_tests googletest) + +target_link_libraries(library_name_tests ${GTEST_LIBS_DIR}/libgtest.a ${GTEST_LIBS_DIR}/libgtest_main.a) +target_link_libraries(library_name_tests ${GMOCK_LIBS_DIR}/libgmock.a ${GMOCK_LIBS_DIR}/libgmock_main.a) +target_link_libraries(library_name_tests pthread) + +add_test(NAME Library_name_Test COMMAND library_name_tests) diff --git a/test/gtest/CMakeLists.txt b/test/gtest/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b7d7826b235fd3c362e72a871d6fd45a77d22c6 --- /dev/null +++ b/test/gtest/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 2.8.8) +project(gtest_builder C CXX) +include(ExternalProject) + +ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs + -DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS} + -Dgtest_force_shared_crt=ON + -DBUILD_GTEST=ON + PREFIX "${CMAKE_CURRENT_BINARY_DIR}" +# Disable install step + INSTALL_COMMAND "" +) + +# Specify include dir +ExternalProject_Get_Property(googletest source_dir) +set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE) +set(GMOCK_INCLUDE_DIRS ${source_dir}/googlemock/include PARENT_SCOPE) + +# Specify MainTest's link libraries +ExternalProject_Get_Property(googletest binary_dir) +set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE) +set(GMOCK_LIBS_DIR ${binary_dir}/googlemock PARENT_SCOPE) + + + diff --git a/test/test_template.cpp b/test/test_template.cpp new file mode 100644 index 0000000000000000000000000000000000000000..763f10b9a66b758d8a14e9a4ab37a3a346749b34 --- /dev/null +++ b/test/test_template.cpp @@ -0,0 +1,11 @@ +// tests.cpp +#include <library_name.h> +#include <gtest/gtest.h> + +TEST(library_nameTest, test1) { +} + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}