From b68e8085b6a36868a040121ff0339006dfb26ac6 Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Fri, 29 Mar 2019 09:31:03 -0600 Subject: [PATCH 1/3] Add real git clone tests to local checkin-test.py invocation Make the checkin-test.py tests as strong as the Travis CI tests. --- dev_testing/crf450/checkin-test-crf450-cmake-3.11.1.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev_testing/crf450/checkin-test-crf450-cmake-3.11.1.sh b/dev_testing/crf450/checkin-test-crf450-cmake-3.11.1.sh index 3032fd351..f8d49ac5c 100755 --- a/dev_testing/crf450/checkin-test-crf450-cmake-3.11.1.sh +++ b/dev_testing/crf450/checkin-test-crf450-cmake-3.11.1.sh @@ -27,6 +27,7 @@ echo " -DTriBITS_ENABLE_Fortran:BOOL=ON -DTriBITS_CTEST_DRIVER_COVERAGE_TESTS=TRUE -DTriBITS_CTEST_DRIVER_MEMORY_TESTS=TRUE +-DTriBITS_ENABLE_REAL_GIT_CLONE_TESTS=ON \ " > MPI_DEBUG.config echo " @@ -38,6 +39,7 @@ echo " -DCMAKE_Fortran_COMPILER=gfortran -DTriBITS_CTEST_DRIVER_COVERAGE_TESTS=TRUE -DTriBITS_CTEST_DRIVER_MEMORY_TESTS=TRUE +-DTriBITS_ENABLE_REAL_GIT_CLONE_TESTS=ON \ " > SERIAL_RELEASE.config # Run checkin-test.py From 634059948b21226ba2ffbd3ccd136a47b55353a2 Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Fri, 29 Mar 2019 08:35:57 -0600 Subject: [PATCH 2/3] Add failing test showing duplication in Config.cmake libs and TPL incl dirs (#282) This test exposes the bug where the libraries and TPL include dirs are duplciated in the code that is run inside of the installed Config.cmake file. The next commit will fix this. --- test/core/ExamplesUnitTests/CMakeLists.txt | 94 ++++++++++++++++++---- 1 file changed, 80 insertions(+), 14 deletions(-) diff --git a/test/core/ExamplesUnitTests/CMakeLists.txt b/test/core/ExamplesUnitTests/CMakeLists.txt index d3cf93cd0..41c18d25c 100644 --- a/test/core/ExamplesUnitTests/CMakeLists.txt +++ b/test/core/ExamplesUnitTests/CMakeLists.txt @@ -605,8 +605,9 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran OVERALL_NUM_MPI_PROCS 1 XHOSTTYPE Darwin - TEST_0 CMND ${CMAKE_COMMAND} + TEST_0 MESSAGE "Do the initial configure (and test a lot of things at once)" + CMND ${CMAKE_COMMAND} ARGS ${TribitsExampleProject_COMMON_CONFIG_ARGS} -DTribitsExProj_TRIBITS_DIR=${${PROJECT_NAME}_TRIBITS_DIR} @@ -706,8 +707,9 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran CMND ${LabelsForSubprojects_CMND_AND_ARGS} PASS_REGULAR_EXPRESSION "${LabelsForSubprojects_REGEX}" - TEST_2 CMND make ARGS ${CTEST_BUILD_FLAGS} + TEST_2 MESSAGE "Build the default 'all' target using raw 'make'" + CMND make ARGS ${CTEST_BUILD_FLAGS} PASS_REGULAR_EXPRESSION_ALL "Built target simplecxx" "${DEPRECATED_WARNING_1_STR}" @@ -717,8 +719,9 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran "Built target pws_c" ALWAYS_FAIL_ON_NONZERO_RETURN - TEST_3 CMND ${CMAKE_CTEST_COMMAND} ARGS -VV + TEST_3 MESSAGE "Run all the tests with raw 'ctest'" + CMND ${CMAKE_CTEST_COMMAND} ARGS -VV PASS_REGULAR_EXPRESSION_ALL "SimpleCxx_HelloWorldTests${TEST_MPI_1_SUFFIX} .* Passed" "WithSubpackagesA_test_of_a .* Passed" @@ -729,8 +732,8 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran ALWAYS_FAIL_ON_NONZERO_RETURN TEST_4 - MESSAGE "Create and configure a dummy project that includes WithSubpackagesConfig.cmake" - " from the build tree" + MESSAGE "Create and configure a dummy project that includes" + " WithSubpackagesConfig.cmake from the build tree" CMND ${CMAKE_COMMAND} ARGS -DDUMMY_PROJECT_NAME=DummyProject @@ -767,8 +770,9 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran "-- Generating done" ALWAYS_FAIL_ON_NONZERO_RETURN - TEST_5 CMND make ARGS install ${CTEST_BUILD_FLAGS} + TEST_5 MESSAGE "Build 'install' target using raw 'make'" + CMND make ARGS install ${CTEST_BUILD_FLAGS} PASS_REGULAR_EXPRESSION_ALL "Installing: .+/install/include/TribitsExProj_version.h" "Installing: .+/install/lib/cmake/TribitsExProj/TribitsExProjConfig.cmake" @@ -803,7 +807,10 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran "Installing: .+/install/include/Makefile.export.WithSubpackagesC" ALWAYS_FAIL_ON_NONZERO_RETURN - TEST_6 CMND ${CMAKE_COMMAND} + TEST_6 + MESSAGE "Create and configure a dummy project that includes" + " WithSubpackagesConfig.cmake from the install tree" + CMND ${CMAKE_COMMAND} ARGS -DDUMMY_PROJECT_NAME=DummyProject -DDUMMY_PROJECT_DIR=dummy_client_of_WithSubpackages @@ -811,7 +818,6 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran -DEXPORT_CONFIG_FILE=../install/lib/cmake/WithSubpackages/WithSubpackagesConfig.cmake -DCMAKE_COMMAND=${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/RunDummyPackageClientBulid.cmake - MESSAGE "Create and configure a dummy project that includes WithSubpackagesConfig.cmake" PASS_REGULAR_EXPRESSION_ALL "WithSubpackages_CMAKE_BUILD_TYPE = 'RELEASE'" "WithSubpackages_CXX_FLAGS = '.*'" @@ -838,8 +844,65 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran "WithSubpackages_TPL_LIST = 'HeaderOnlyTpl'" ALWAYS_FAIL_ON_NONZERO_RETURN - TEST_7 CMND make ARGS package_source + TEST_7 + MESSAGE "Create and configure a dummy project that includes" + " TribitsExProjConfig.cmake from the install tree" + CMND ${CMAKE_COMMAND} + ARGS + -DDUMMY_PROJECT_NAME=DummyProject + -DDUMMY_PROJECT_DIR=dummy_client_of_TribitsExProj + -DEXPORT_VAR_PREFIX=TribitsExProj + -DEXPORT_CONFIG_FILE=../install/lib/cmake/TribitsExProj/TribitsExProjConfig.cmake + -DCMAKE_COMMAND=${CMAKE_COMMAND} + -P ${CMAKE_CURRENT_SOURCE_DIR}/RunDummyPackageClientBulid.cmake + PASS_REGULAR_EXPRESSION_ALL + "DUMMY_PROJECT_NAME = 'DummyProject'" + "DUMMY_PROJECT_DIR = 'dummy_client_of_TribitsExProj'" + "EXPORT_CONFIG_FILE = '../install/lib/cmake/TribitsExProj/TribitsExProjConfig.cmake'" + "EXPORT_VAR_PREFIX = 'TribitsExProj'" + "CMAKE_COMMAND = '.*/cmake'" + "Create the dummy client directory ..." + "Create dummy dummy_client_of_TribitsExProj/CMakeLists.txt file ..." + "Configure the dummy project to print the variables in .*/TriBITS_TribitsExampleProject_ALL_ST_NoFortran/dummy_client_of_TribitsExProj ..." + "DUMMY_PROJECT_NAME = 'DummyProject'" + "EXPORT_CONFIG_FILE = '../install/lib/cmake/TribitsExProj/TribitsExProjConfig.cmake'" + "EXPORT_VAR_PREFIX = 'TribitsExProj'" + "Including file '.*/TriBITS_TribitsExampleProject_ALL_ST_NoFortran/dummy_client_of_TribitsExProj/../install/lib/cmake/TribitsExProj/TribitsExProjConfig.cmake'" + "TribitsExProj_CMAKE_BUILD_TYPE = 'RELEASE'" + "TribitsExProj_CXX_FLAGS = ''" + "TribitsExProj_C_FLAGS = ''" + "TribitsExProj_FORTRAN_FLAGS = ''" + "TribitsExProj_EXTRA_LD_FLAGS = ''" + "TribitsExProj_SHARED_LIB_RPATH_COMMAND = ''" + "TribitsExProj_BUILD_SHARED_LIBS = 'FALSE'" + "TribitsExProj_LINKER = '.*'" + "TribitsExProj_AR = '.*'" + "TribitsExProj_INCLUDE_DIRS = '.*/TriBITS_TribitsExampleProject_ALL_ST_NoFortran/install/include'" + "TribitsExProj_LIBRARY_DIRS = '.*/TriBITS_TribitsExampleProject_ALL_ST_NoFortran/install/lib'" + "TribitsExProj_LIBRARIES = 'pws_c[;]pws_b[;]pws_a[;]simplecxx'" + "TribitsExProj_TPL_INCLUDE_DIRS = '.*/examples/tpls/HeaderOnlyTpl" + "TribitsExProj_TPL_LIBRARY_DIRS = ''" + "TribitsExProj_TPL_LIBRARIES = ''" + "TribitsExProj_MPI_LIBRARIES = ''" + "TribitsExProj_MPI_LIBRARY_DIRS = ''" + "TribitsExProj_MPI_INCLUDE_DIRS = ''" + "TribitsExProj_MPI_EXEC = '.*'" + "TribitsExProj_MPI_EXEC_MAX_NUMPROCS = '[1-9]*'" # Is null for an MPI build + "TribitsExProj_MPI_EXEC_NUMPROCS_FLAG = '.*'" + "TribitsExProj_PACKAGE_LIST = 'WithSubpackages[;]WithSubpackagesC[;]WithSubpackagesB[;]WithSubpackagesA[;]SimpleCxx'" + "TribitsExProj_TPL_LIST = 'HeaderOnlyTpl" # Must work for no MPI too + "-- Configuring done" + "-- Generating done" + ALWAYS_FAIL_ON_NONZERO_RETURN + + # ToDo: Add test for the components parts of Config.cmake ... + + # ToDo: Add test that actually builds a C++ project and links to these libs + # to make sure this works! + + TEST_8 MESSAGE "Create the tarball" + CMND make ARGS package_source PASS_REGULAR_EXPRESSION_ALL "Run CPack packaging tool for source..." "CPack: Create package using TGZ" @@ -854,15 +917,17 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran "CPack: - package: .*/ExamplesUnitTests/TriBITS_TribitsExampleProject_ALL_ST_NoFortran/tribitsexproj-1.1-Source.tar.bz2 generated." ALWAYS_FAIL_ON_NONZERO_RETURN - TEST_8 CMND tar ARGS -xzf tribitsexproj-1.1-Source.tar.gz + TEST_9 MESSAGE "Untar the tarball" + CMND tar ARGS -xzf tribitsexproj-1.1-Source.tar.gz ALWAYS_FAIL_ON_NONZERO_RETURN - TEST_9 CMND diff - ARGS -qr - ${${PROJECT_NAME}_TRIBITS_DIR}/examples/TribitsExampleProject - tribitsexproj-1.1-Source + TEST_10 MESSAGE "Make sure right directoires are excluced" + CMND diff + ARGS -qr + ${${PROJECT_NAME}_TRIBITS_DIR}/examples/TribitsExampleProject + tribitsexproj-1.1-Source PASS_REGULAR_EXPRESSION_ALL "Only in .*/TribitsExampleProject/cmake: ctest" ${REGEX_FOR_GITIGNORE} @@ -873,6 +938,7 @@ TRIBITS_ADD_ADVANCED_TEST( TribitsExampleProject_ALL_ST_NoFortran ) +# Find ninja so we can test TriBITS using ninja as well FIND_PROGRAM(NINJA_EXE ninja) From 9f49538e82750eb633ed0e66c66e62ec1acb4f62 Mon Sep 17 00:00:00 2001 From: "Roscoe A. Bartlett" Date: Fri, 29 Mar 2019 08:58:49 -0600 Subject: [PATCH 3/3] Remove duplicates in project library list and TPL include list (#282) There is now a strong test that asserts that duplicates are getting removed. --- .../TribitsProjectConfigTemplate.cmake.in | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/tribits/core/installation/TribitsProjectConfigTemplate.cmake.in b/tribits/core/installation/TribitsProjectConfigTemplate.cmake.in index 389a766b7..e689c26d0 100644 --- a/tribits/core/installation/TribitsProjectConfigTemplate.cmake.in +++ b/tribits/core/installation/TribitsProjectConfigTemplate.cmake.in @@ -92,24 +92,6 @@ SET(${PROJECT_NAME}_AR ${CMAKE_AR}) ## The project version number SET(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION}") -## The project include file directories. -#SET(${PROJECT_NAME}_INCLUDE_DIRS "${${PROJECT_NAME}_CONFIG_INCLUDE_DIRS}") - -## The project library directories. -#SET(${PROJECT_NAME}_LIBRARY_DIRS "${${PROJECT_NAME}_CONFIG_LIBRARY_DIRS}") - -## The project libraries. -#SET(${PROJECT_NAME}_LIBRARIES "${${PROJECT_NAME}_CONFIG_LIBRARIES}") - -## The project tpl include paths -#SET(${PROJECT_NAME}_TPL_INCLUDE_DIRS "${${PROJECT_NAME}_CONFIG_TPL_INCLUDE_DIRS}") - -## The project tpl library paths -#SET(${PROJECT_NAME}_TPL_LIBRARY_DIRS "${${PROJECT_NAME}_CONFIG_TPL_LIBRARY_DIRS}") - -## The project tpl libraries -#SET(${PROJECT_NAME}_TPL_LIBRARIES "${${PROJECT_NAME}_CONFIG_TPL_LIBRARIES}") - # For best practices in handling of components, see # . # @@ -172,6 +154,18 @@ ENDFOREACH() LIST(REMOVE_DUPLICATES short_dirs) SET(${PROJECT_NAME}_LIBRARY_DIRS ${PDOLLAR}{short_dirs}) +# Remove duplicates in ${PROJECT_NAME}_LIBRARIES +LIST(REVERSE ${PROJECT_NAME}_LIBRARIES) +LIST(REMOVE_DUPLICATES ${PROJECT_NAME}_LIBRARIES) +LIST(REVERSE ${PROJECT_NAME}_LIBRARIES) + +# Remove duplicates in ${PROJECT_NAME}_TPL_INCLUDE_DIRS +LIST(REMOVE_DUPLICATES ${PROJECT_NAME}_TPL_INCLUDE_DIRS) + +# NOTE: It is *NOT* safe to try to remove duplicate in +# ${PROJECT_NAME}_TPL_LIBRARIES because these can be specified as -L, -l, etc. +# Actaully, we should think about that. + ## --------------------------------------------------------------------------- ## MPI specific variables ## These variables are provided to make it easier to get the mpi libraries