From 8b2398a50a6d851b0189559218ce1beac31b6e67 Mon Sep 17 00:00:00 2001 From: Bas Vodde Date: Fri, 24 Apr 2020 18:20:29 +0800 Subject: [PATCH 1/5] Compare the CMake install and autotools install to ensure they are mostly the same --- .travis.yml | 2 ++ scripts/travis_ci_build.sh | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ec842d760..1b99b63e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -63,6 +63,8 @@ jobs: env: BUILD=cmake CPP_STD=14 - compiler: gcc env: BUILD=cmake CPP_STD=17 + - compiler: gcc + env: BUILD=autotools_cmake_install_test - compiler: gcc env: BUILD=autotools addons: diff --git a/scripts/travis_ci_build.sh b/scripts/travis_ci_build.sh index 03d5e8c73..c9203aadc 100755 --- a/scripts/travis_ci_build.sh +++ b/scripts/travis_ci_build.sh @@ -116,7 +116,6 @@ if [ "x$BUILD" = "xautotools_cmake_install_test" ]; then for cmakefile in CppUTestConfig.cmake /CppUTestConfigVersion.cmake; do diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 done - diff install_autotools/usr/local/lib/CppUTest/cmake//CppUTestConfigVersion.cmake install_cmale/usr/local/lib/CppUTest/cmake//CppUTestConfigVersion.cmake fi if [ "x$BUILD" = "xdocker_ubuntu_autotools" ]; then From bf15b0c2b80663ae7ef1f5e1c17b405a4a03597b Mon Sep 17 00:00:00 2001 From: Bas Vodde Date: Fri, 24 Apr 2020 19:45:13 +0800 Subject: [PATCH 2/5] Cached CMake files for autotools CMake package deployment --- .../cmake_package_files/CppUTestConfig.cmake | 32 ++++++ .../CppUTestConfigVersion.cmake | 51 +++++++++ .../CppUTestTargets-relwithdebinfo.cmake | 29 +++++ .../cmake_package_files/CppUTestTargets.cmake | 101 ++++++++++++++++++ scripts/travis_ci_build.sh | 2 +- 5 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 build/cmake_package_files/CppUTestConfig.cmake create mode 100644 build/cmake_package_files/CppUTestConfigVersion.cmake create mode 100644 build/cmake_package_files/CppUTestTargets-relwithdebinfo.cmake create mode 100644 build/cmake_package_files/CppUTestTargets.cmake diff --git a/build/cmake_package_files/CppUTestConfig.cmake b/build/cmake_package_files/CppUTestConfig.cmake new file mode 100644 index 000000000..cce1985ae --- /dev/null +++ b/build/cmake_package_files/CppUTestConfig.cmake @@ -0,0 +1,32 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was CppUTestConfig.cmake.install.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +set_and_check(CppUTest_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/include") +include("${CMAKE_CURRENT_LIST_DIR}/CppUTestTargets.cmake") +set(CppUTest_LIBRARIES CppUTest CppUTestExt) +include("${CMAKE_CURRENT_LIST_DIR}/Modules/CppUTestBuildTimeDiscoverTests.cmake") + +check_required_components(CppUTest) diff --git a/build/cmake_package_files/CppUTestConfigVersion.cmake b/build/cmake_package_files/CppUTestConfigVersion.cmake new file mode 100644 index 000000000..c9ecfd431 --- /dev/null +++ b/build/cmake_package_files/CppUTestConfigVersion.cmake @@ -0,0 +1,51 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "3.8") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("3.8" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + else() + set(CVF_VERSION_MAJOR "3.8") + endif() + + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + + +# if the installed project requested no architecture check, don't perform the check +if("FALSE") + return() +endif() + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/build/cmake_package_files/CppUTestTargets-relwithdebinfo.cmake b/build/cmake_package_files/CppUTestTargets-relwithdebinfo.cmake new file mode 100644 index 000000000..31ffbf4ba --- /dev/null +++ b/build/cmake_package_files/CppUTestTargets-relwithdebinfo.cmake @@ -0,0 +1,29 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "RelWithDebInfo". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CppUTest" for configuration "RelWithDebInfo" +set_property(TARGET CppUTest APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO) +set_target_properties(CppUTest PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELWITHDEBINFO "CXX" + IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/lib/libCppUTest.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS CppUTest ) +list(APPEND _IMPORT_CHECK_FILES_FOR_CppUTest "${_IMPORT_PREFIX}/lib/libCppUTest.a" ) + +# Import target "CppUTestExt" for configuration "RelWithDebInfo" +set_property(TARGET CppUTestExt APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO) +set_target_properties(CppUTestExt PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELWITHDEBINFO "CXX" + IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/lib/libCppUTestExt.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS CppUTestExt ) +list(APPEND _IMPORT_CHECK_FILES_FOR_CppUTestExt "${_IMPORT_PREFIX}/lib/libCppUTestExt.a" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/build/cmake_package_files/CppUTestTargets.cmake b/build/cmake_package_files/CppUTestTargets.cmake new file mode 100644 index 000000000..e1d587696 --- /dev/null +++ b/build/cmake_package_files/CppUTestTargets.cmake @@ -0,0 +1,101 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget CppUTest CppUTestExt) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CppUTest +add_library(CppUTest STATIC IMPORTED) + +set_target_properties(CppUTest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include/CppUTest" +) + +# Create imported target CppUTestExt +add_library(CppUTestExt STATIC IMPORTED) + +set_target_properties(CppUTestExt PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include/CppUTestExt" +) + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/CppUTestTargets-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/scripts/travis_ci_build.sh b/scripts/travis_ci_build.sh index c9203aadc..e0173f12a 100755 --- a/scripts/travis_ci_build.sh +++ b/scripts/travis_ci_build.sh @@ -113,7 +113,7 @@ if [ "x$BUILD" = "xautotools_cmake_install_test" ]; then fi # Hack: autotools cannot make CMake package. We cached and copied them. Here we check they are still the same - for cmakefile in CppUTestConfig.cmake /CppUTestConfigVersion.cmake; do + for cmakefile in CppUTestConfig.cmake CppUTestConfigVersion.cmake CppUTestTargets-relwithdebinfo.cmake CppUTestTargets.cmake; do diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 done fi From 7ec4c7662d711a737ca2e78d442049490a2d72b6 Mon Sep 17 00:00:00 2001 From: Bas Vodde Date: Fri, 24 Apr 2020 20:05:27 +0800 Subject: [PATCH 3/5] Checking the difference --- scripts/travis_ci_build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/travis_ci_build.sh b/scripts/travis_ci_build.sh index e0173f12a..0f2fadfbc 100755 --- a/scripts/travis_ci_build.sh +++ b/scripts/travis_ci_build.sh @@ -115,6 +115,8 @@ if [ "x$BUILD" = "xautotools_cmake_install_test" ]; then # Hack: autotools cannot make CMake package. We cached and copied them. Here we check they are still the same for cmakefile in CppUTestConfig.cmake CppUTestConfigVersion.cmake CppUTestTargets-relwithdebinfo.cmake CppUTestTargets.cmake; do diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 + cat install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile + cat install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile done fi From b1fb9afa26755e0a2f0830b3620e1eb456bceb5e Mon Sep 17 00:00:00 2001 From: Bas Vodde Date: Sat, 25 Apr 2020 07:00:38 +0800 Subject: [PATCH 4/5] Cat before diff, of course --- scripts/travis_ci_build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/travis_ci_build.sh b/scripts/travis_ci_build.sh index 0f2fadfbc..583ddef26 100755 --- a/scripts/travis_ci_build.sh +++ b/scripts/travis_ci_build.sh @@ -114,9 +114,9 @@ if [ "x$BUILD" = "xautotools_cmake_install_test" ]; then # Hack: autotools cannot make CMake package. We cached and copied them. Here we check they are still the same for cmakefile in CppUTestConfig.cmake CppUTestConfigVersion.cmake CppUTestTargets-relwithdebinfo.cmake CppUTestTargets.cmake; do - diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 cat install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile cat install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile + diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 done fi From 8b1d38632a3f6184f5165990fa7347c061c1e7a4 Mon Sep 17 00:00:00 2001 From: Bas Vodde Date: Sat, 25 Apr 2020 07:30:09 +0800 Subject: [PATCH 5/5] Moved the specific CMake package checks earlier --- scripts/travis_ci_build.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/travis_ci_build.sh b/scripts/travis_ci_build.sh index 583ddef26..680a5548b 100755 --- a/scripts/travis_ci_build.sh +++ b/scripts/travis_ci_build.sh @@ -102,7 +102,14 @@ if [ "x$BUILD" = "xautotools_cmake_install_test" ]; then mkdir -p install_cmake make DESTDIR=install_cmake install - export INSTALL_DIFF=`diff -rq install_autotools install_cmake | grep -v CppUTestGeneratedConfig.h | grep -v libCppUTest.a | grep -v libCppUTestExt.a` + # Hack: autotools cannot make CMake package. We cached and copied them. Here we check they are still the same + for cmakefile in CppUTestConfig.cmake CppUTestConfigVersion.cmake CppUTestTargets-relwithdebinfo.cmake CppUTestTargets.cmake; do + cat install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile + cat install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile + diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 + done + + export INSTALL_DIFF=`diff -rq install_autotools install_cmake -X CppUTestGeneratedConfig.h -X libCppUTest.a -X libCppUTestExt.a` if [ "x$INSTALL_DIFF" != "x" ]; then echo "FAILED: CMake install and Autotools install is not the same!\n" echo "Difference\n" @@ -111,13 +118,6 @@ if [ "x$BUILD" = "xautotools_cmake_install_test" ]; then echo "-------------------------------\n" exit 1; fi - - # Hack: autotools cannot make CMake package. We cached and copied them. Here we check they are still the same - for cmakefile in CppUTestConfig.cmake CppUTestConfigVersion.cmake CppUTestTargets-relwithdebinfo.cmake CppUTestTargets.cmake; do - cat install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile - cat install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile - diff install_autotools/usr/local/lib/CppUTest/cmake/$cmakefile install_cmake/usr/local/lib/CppUTest/cmake/$cmakefile || exit 1 - done fi if [ "x$BUILD" = "xdocker_ubuntu_autotools" ]; then