diff options
Diffstat (limited to 'Tests')
46 files changed, 427 insertions, 8 deletions
diff --git a/Tests/Framework/CMakeLists.txt b/Tests/Framework/CMakeLists.txt index a313c2c..f741ec2 100644 --- a/Tests/Framework/CMakeLists.txt +++ b/Tests/Framework/CMakeLists.txt @@ -84,3 +84,19 @@ if(NOT XCODE OR NOT XCODE_VERSION VERSION_LESS 5) endif() include(CPack) + +if(APPLE) + set(ExternalFramework_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/External") + file(REMOVE_RECURSE "${ExternalFramework_INSTALL_DIR}") + + include(ExternalProject) + ExternalProject_Add(ExternalFramework + SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/External" + INSTALL_DIR "${ExternalFramework_INSTALL_DIR}" + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> + ) + + add_executable(useExternal useExternal.c) + target_link_libraries(useExternal PRIVATE "${ExternalFramework_INSTALL_DIR}/lib/External.framework") + add_dependencies(useExternal ExternalFramework) +endif() diff --git a/Tests/Framework/External/CMakeLists.txt b/Tests/Framework/External/CMakeLists.txt new file mode 100644 index 0000000..b9128fd --- /dev/null +++ b/Tests/Framework/External/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.19) +project(ExternalFramework C) +add_library(External SHARED external.c) +set_property(TARGET External PROPERTY FRAMEWORK 1) +install(TARGETS External DESTINATION lib) diff --git a/Tests/Framework/External/external.c b/Tests/Framework/External/external.c new file mode 100644 index 0000000..8441e71 --- /dev/null +++ b/Tests/Framework/External/external.c @@ -0,0 +1,4 @@ +int external(void) +{ + return 0; +} diff --git a/Tests/Framework/useExternal.c b/Tests/Framework/useExternal.c new file mode 100644 index 0000000..8494b15 --- /dev/null +++ b/Tests/Framework/useExternal.c @@ -0,0 +1,6 @@ +extern int external(void); + +int main(void) +{ + return external(); +} diff --git a/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt b/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt index d9fc2b0..17855ff 100644 --- a/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt +++ b/Tests/QtAutogen/AutogenOriginDependsOff/CMakeLists.txt @@ -2,6 +2,15 @@ cmake_minimum_required(VERSION 3.11) project(AutogenOriginDependsOff) include("../AutogenCoreTest.cmake") +get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +# XXX(xcode-per-cfg-src): Enable multi-config code path for Xcode +# when the Xcode generator supports per-config sources. +if(_isMultiConfig AND NOT CMAKE_GENERATOR STREQUAL "Xcode") + set(mocs_compilation_cpp "mocs_compilation_$<CONFIG>.cpp") +else() + set(mocs_compilation_cpp "mocs_compilation.cpp") +endif() + set(CSD ${CMAKE_CURRENT_SOURCE_DIR}) set(CBD ${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CSD}) @@ -19,7 +28,7 @@ add_custom_command ( add_custom_target ( a_mc COMMAND ${CMAKE_COMMAND} -E sleep 2 COMMAND ${CMAKE_COMMAND} - "-DMCF=${CBD}/a_qt_autogen/mocs_compilation.cpp" + "-DMCF=${CBD}/a_qt_autogen/${mocs_compilation_cpp}" "-DCF_IN=${CSD}/a_mc.hpp.in" "-DCF_OUT=${CBD}/a_mc.hpp" -P ${CSD}/configure_content.cmake @@ -51,7 +60,7 @@ add_custom_command ( DEPENDS b_qt_autogen COMMAND ${CMAKE_COMMAND} -E sleep 2 COMMAND ${CMAKE_COMMAND} - "-DMCF=${CBD}/b_qt_autogen/mocs_compilation.cpp" + "-DMCF=${CBD}/b_qt_autogen/${mocs_compilation_cpp}" "-DCF_IN=${CSD}/b_mc.cpp.in" "-DCF_OUT=${CBD}/b_mc.cpp" -P ${CSD}/configure_content.cmake diff --git a/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt b/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt index 81fd8db..e95c626 100644 --- a/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt +++ b/Tests/QtAutogen/GlobalAutogenTarget/CMakeLists.txt @@ -13,10 +13,10 @@ include("../AutogenCoreTest.cmake") set(GAT_SDIR "${CMAKE_CURRENT_SOURCE_DIR}/GAT") set(GAT_BDIR "${CMAKE_CURRENT_BINARY_DIR}/GAT") # Files -set(MCA "sda/sda_autogen/mocs_compilation.cpp") -set(MCB "sdb/sdb_autogen/mocs_compilation.cpp") -set(MCC "sdc/sdc_autogen/mocs_compilation.cpp") -set(MCG "gat_autogen/mocs_compilation.cpp") +set(MCA "sda/sda_autogen/mocs_compilation*.cpp") +set(MCB "sdb/sdb_autogen/mocs_compilation*.cpp") +set(MCC "sdc/sdc_autogen/mocs_compilation*.cpp") +set(MCG "gat_autogen/mocs_compilation*.cpp") set(DRA "sda/sda_autogen/*qrc_data.cpp") set(DRB "sdb/sdb_autogen/*qrc_data.cpp") diff --git a/Tests/QtAutogen/MocOnly/CMakeLists.txt b/Tests/QtAutogen/MocOnly/CMakeLists.txt index e109154..f4fde58 100644 --- a/Tests/QtAutogen/MocOnly/CMakeLists.txt +++ b/Tests/QtAutogen/MocOnly/CMakeLists.txt @@ -11,6 +11,18 @@ add_executable(mocOnly IncA.cpp IncB.cpp ) +# XXX(xcode-per-cfg-src): Drop the NO_PER_CONFIG_SOURCES exclusion +# when the Xcode generator supports per-config sources. +if(NOT NO_PER_CONFIG_SOURCES) + target_sources(mocOnly PRIVATE + "$<$<CONFIG:Debug>:${CMAKE_CURRENT_SOURCE_DIR}/CfgDebug.cpp>" + "$<$<NOT:$<CONFIG:Debug>>:${CMAKE_CURRENT_SOURCE_DIR}/CfgOther.cpp>" + ) + target_compile_definitions(mocOnly PRIVATE + "$<$<CONFIG:Debug>:HAVE_CFG_DEBUG>" + "$<$<NOT:$<CONFIG:Debug>>:HAVE_CFG_OTHER>" + ) +endif() set_property(TARGET mocOnly PROPERTY AUTOMOC ON) target_link_libraries(mocOnly ${QT_LIBRARIES}) # Add compile definitions with unusual characters diff --git a/Tests/QtAutogen/MocOnly/CfgDebug.cpp b/Tests/QtAutogen/MocOnly/CfgDebug.cpp new file mode 100644 index 0000000..07ca3fb --- /dev/null +++ b/Tests/QtAutogen/MocOnly/CfgDebug.cpp @@ -0,0 +1,5 @@ +#include "CfgDebug.hpp" + +CfgDebug::CfgDebug() +{ +} diff --git a/Tests/QtAutogen/MocOnly/CfgDebug.hpp b/Tests/QtAutogen/MocOnly/CfgDebug.hpp new file mode 100644 index 0000000..3cd90a4 --- /dev/null +++ b/Tests/QtAutogen/MocOnly/CfgDebug.hpp @@ -0,0 +1,15 @@ +#ifndef CFGDEBUG_HPP +#define CFGDEBUG_HPP + +#include <QObject> + +/* clang-format off */ +class CfgDebug : public QObject +{ + Q_OBJECT +public: + CfgDebug(); +}; +/* clang-format on */ + +#endif diff --git a/Tests/QtAutogen/MocOnly/CfgOther.cpp b/Tests/QtAutogen/MocOnly/CfgOther.cpp new file mode 100644 index 0000000..0ccd433 --- /dev/null +++ b/Tests/QtAutogen/MocOnly/CfgOther.cpp @@ -0,0 +1,5 @@ +#include "CfgOther.hpp" + +CfgOther::CfgOther() +{ +} diff --git a/Tests/QtAutogen/MocOnly/CfgOther.hpp b/Tests/QtAutogen/MocOnly/CfgOther.hpp new file mode 100644 index 0000000..7cacd52 --- /dev/null +++ b/Tests/QtAutogen/MocOnly/CfgOther.hpp @@ -0,0 +1,15 @@ +#ifndef CFGOTHER_HPP +#define CFGOTHER_HPP + +#include <QObject> + +/* clang-format off */ +class CfgOther : public QObject +{ + Q_OBJECT +public: + CfgOther(); +}; +/* clang-format on */ + +#endif diff --git a/Tests/QtAutogen/MocOnly/main.cpp b/Tests/QtAutogen/MocOnly/main.cpp index ec8da21..6c0f6f2 100644 --- a/Tests/QtAutogen/MocOnly/main.cpp +++ b/Tests/QtAutogen/MocOnly/main.cpp @@ -5,6 +5,14 @@ #include "StyleA.hpp" #include "StyleB.hpp" +#ifdef HAVE_CFG_DEBUG +# include "CfgDebug.hpp" +#endif + +#ifdef HAVE_CFG_OTHER +# include "CfgOther.hpp" +#endif + int main(int argv, char** args) { StyleA styleA; diff --git a/Tests/QtAutogen/TestMacros.cmake b/Tests/QtAutogen/TestMacros.cmake index 0e27188..1024996 100644 --- a/Tests/QtAutogen/TestMacros.cmake +++ b/Tests/QtAutogen/TestMacros.cmake @@ -1,12 +1,19 @@ # Autogen build options set(Autogen_BUILD_OPTIONS "-DQT_TEST_VERSION=${QT_TEST_VERSION}") -if(NOT _isMultiConfig) # Set in Tests/CMakeLists.txt +if(_isMultiConfig) # Set in Tests/CMakeLists.txt + list(APPEND Autogen_CTEST_OPTIONS --build-config $<CONFIGURATION>) +else() list(APPEND Autogen_BUILD_OPTIONS "-DCMAKE_BUILD_TYPE=$<CONFIGURATION>") endif() list(APPEND Autogen_BUILD_OPTIONS "-DCMAKE_AUTOGEN_VERBOSE=1" "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}" ) +# XXX(xcode-per-cfg-src): Drop the NO_PER_CONFIG_SOURCES exclusion +# when the Xcode generator supports per-config sources. +if(CMAKE_GENERATOR STREQUAL "Xcode") + list(APPEND Autogen_BUILD_OPTIONS -DNO_PER_CONFIG_SOURCES=1) +endif() # A macro to add a QtAutogen test macro(ADD_AUTOGEN_TEST NAME) @@ -30,6 +37,7 @@ macro(ADD_AUTOGEN_TEST NAME) "${_BuildDir}" ${build_generator_args} --build-project ${NAME} + ${Autogen_CTEST_OPTIONS} --build-exe-dir "${_BuildDir}" --force-new-ctest-process --build-options ${build_options} ${Autogen_BUILD_OPTIONS} diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake index e05ad79..6cf1476 100644 --- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake @@ -380,3 +380,20 @@ run_MemCheckSan(Leak "simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode run_MemCheckSan(Memory "simulate_sanitizer=1:report_bugs=1:history_size=5:exitcode=55") run_MemCheckSan(Thread "report_bugs=1:history_size=5:exitcode=55") run_MemCheckSan(UndefinedBehavior "simulate_sanitizer=1") + +run_cmake_command(test-dir-invalid-arg ${CMAKE_CTEST_COMMAND} --test-dir) +run_cmake_command(test-dir-non-existing-dir ${CMAKE_CTEST_COMMAND} --test-dir non-existing-dir) + +function(run_testDir) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/testDir) + set(RunCMake_TEST_NO_CLEAN 1) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/sub") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/sub/CTestTestfile.cmake" " + add_test(Test1 \"${CMAKE_COMMAND}\" -E true) + add_test(Test2 \"${CMAKE_COMMAND}\" -E true) + ") + run_cmake_command(testDir ${CMAKE_CTEST_COMMAND} --test-dir "${RunCMake_TEST_BINARY_DIR}/sub") +endfunction() +run_testDir() diff --git a/Tests/RunCMake/CTestCommandLine/test-dir-invalid-arg-result.txt b/Tests/RunCMake/CTestCommandLine/test-dir-invalid-arg-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/test-dir-invalid-arg-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CTestCommandLine/test-dir-invalid-arg-stderr.txt b/Tests/RunCMake/CTestCommandLine/test-dir-invalid-arg-stderr.txt new file mode 100644 index 0000000..15908a7 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/test-dir-invalid-arg-stderr.txt @@ -0,0 +1 @@ +CMake Error: '--test-dir' requires an argument diff --git a/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-result.txt b/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-stderr.txt b/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-stderr.txt new file mode 100644 index 0000000..017ccb0 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-stderr.txt @@ -0,0 +1 @@ +Failed to change working directory to ".*/non-existing-dir" : No such file or directory diff --git a/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-stdout.txt b/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-stdout.txt new file mode 100644 index 0000000..ddcd238 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/test-dir-non-existing-dir-stdout.txt @@ -0,0 +1 @@ +Internal ctest changing into directory: .*/non-existing-dir diff --git a/Tests/RunCMake/File_Generate/CustomFilePermissions.cmake b/Tests/RunCMake/File_Generate/CustomFilePermissions.cmake new file mode 100644 index 0000000..0000ef9 --- /dev/null +++ b/Tests/RunCMake/File_Generate/CustomFilePermissions.cmake @@ -0,0 +1,15 @@ +file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/customfilepermissions.txt") + +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$<LOWER_CASE:$<CONFIG>>/customfilepermissions.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + FILE_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_EXECUTE + WORLD_EXECUTE + ) + +add_custom_target(checkCustomFilePermissions ALL + COMMAND ${CMAKE_COMMAND} + -DgeneratedFile=${CMAKE_CURRENT_BINARY_DIR}/$<LOWER_CASE:$<CONFIG>>/customfilepermissions.txt + -P "${CMAKE_CURRENT_SOURCE_DIR}/CustomFilePermissionsVerify.cmake" + ) diff --git a/Tests/RunCMake/File_Generate/CustomFilePermissionsVerify.cmake b/Tests/RunCMake/File_Generate/CustomFilePermissionsVerify.cmake new file mode 100644 index 0000000..a87e916 --- /dev/null +++ b/Tests/RunCMake/File_Generate/CustomFilePermissionsVerify.cmake @@ -0,0 +1,36 @@ +if(NOT EXISTS "${generatedFile}") + message(SEND_ERROR "Missing file:\n ${generatedFile}") +endif() + +if (UNIX) + find_program(STAT_EXECUTABLE NAMES stat) + if(NOT STAT_EXECUTABLE) + return() + endif() + + if (CMAKE_HOST_SYSTEM_NAME MATCHES "FreeBSD") + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${generatedFile}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + elseif (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %A "${generatedFile}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + else() + execute_process(COMMAND "${STAT_EXECUTABLE}" -c %a "${generatedFile}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + endif() + + if (NOT output EQUAL "711") + message(SEND_ERROR "file generate has different permissions source " + "permissions: \"${output}\" desired permissions: \"711\"") + endif() + +endif() diff --git a/Tests/RunCMake/File_Generate/NoSourcePermissions.cmake b/Tests/RunCMake/File_Generate/NoSourcePermissions.cmake new file mode 100644 index 0000000..868a045 --- /dev/null +++ b/Tests/RunCMake/File_Generate/NoSourcePermissions.cmake @@ -0,0 +1,10 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$<LOWER_CASE:$<CONFIG>>/nosourcepermissions.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + NO_SOURCE_PERMISSIONS + ) + +add_custom_target(checkNoSourcePermission ALL + COMMAND ${CMAKE_COMMAND} + -DgeneratedFile=${CMAKE_CURRENT_BINARY_DIR}/$<LOWER_CASE:$<CONFIG>>/nosourcepermissions.txt + -P "${CMAKE_CURRENT_SOURCE_DIR}/NoSourcePermissionsVerify.cmake" + ) diff --git a/Tests/RunCMake/File_Generate/NoSourcePermissionsVerify.cmake b/Tests/RunCMake/File_Generate/NoSourcePermissionsVerify.cmake new file mode 100644 index 0000000..7981ccc --- /dev/null +++ b/Tests/RunCMake/File_Generate/NoSourcePermissionsVerify.cmake @@ -0,0 +1,36 @@ +if(NOT EXISTS "${generatedFile}") + message(SEND_ERROR "Missing generated file:\n ${generatedFile}") +endif() + +if (UNIX) + find_program(STAT_EXECUTABLE NAMES stat) + if(NOT STAT_EXECUTABLE) + return() + endif() + + if (CMAKE_HOST_SYSTEM_NAME MATCHES "FreeBSD") + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${generatedFile}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %A "${generatedFile}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + else() + execute_process(COMMAND "${STAT_EXECUTABLE}" -c %a "${generatedFile}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + endif() + + if (NOT output EQUAL "644") + message(SEND_ERROR "generated file has different permissions than " + "desired, generated permissions: \"${output}\"") + endif() + +endif() diff --git a/Tests/RunCMake/File_Generate/RunCMakeTest.cmake b/Tests/RunCMake/File_Generate/RunCMakeTest.cmake index 48fb71c..51491af 100644 --- a/Tests/RunCMake/File_Generate/RunCMakeTest.cmake +++ b/Tests/RunCMake/File_Generate/RunCMakeTest.cmake @@ -123,3 +123,24 @@ set(RunCMake_TEST_NO_CLEAN 1) run_cmake_command(AdjacentInOut-nowork ${CMAKE_COMMAND} --build .) unset(RunCMake_TEST_BINARY_DIR) unset(RunCMake_TEST_NO_CLEAN) + +run_cmake(SourcePermissions1) +run_cmake(SourcePermissions2) +run_cmake(SourcePermissions3) +run_cmake(SourcePermissions4) +run_cmake(SourcePermissions5) + +function(run_cmake_and_verify_after_build case) + set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${case}-build") + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake(${case}) + run_cmake_command("${case}-build" ${CMAKE_COMMAND} --build .) + unset(RunCMake_TEST_NO_CLEAN) + unset(RunCMake_TEST_BINARY_DIR) +endfunction() + +run_cmake_and_verify_after_build(NoSourcePermissions) +run_cmake_and_verify_after_build(UseSourcePermissions) +run_cmake_and_verify_after_build(CustomFilePermissions) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions1-result.txt b/Tests/RunCMake/File_Generate/SourcePermissions1-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions1-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/File_Generate/SourcePermissions1-stderr.txt b/Tests/RunCMake/File_Generate/SourcePermissions1-stderr.txt new file mode 100644 index 0000000..730800d --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions1-stderr.txt @@ -0,0 +1,5 @@ +CMake Error at SourcePermissions1.cmake:[0-9]+ \(file\): + file given both NO_SOURCE_PERMISSIONS and USE_SOURCE_PERMISSIONS. Only one + option allowed. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions1.cmake b/Tests/RunCMake/File_Generate/SourcePermissions1.cmake new file mode 100644 index 0000000..d25e66a --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions1.cmake @@ -0,0 +1,5 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output-sourcepermission1.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + NO_SOURCE_PERMISSIONS + USE_SOURCE_PERMISSIONS + ) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions2-result.txt b/Tests/RunCMake/File_Generate/SourcePermissions2-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions2-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/File_Generate/SourcePermissions2-stderr.txt b/Tests/RunCMake/File_Generate/SourcePermissions2-stderr.txt new file mode 100644 index 0000000..e8184cc --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions2-stderr.txt @@ -0,0 +1,5 @@ +CMake Error at SourcePermissions2.cmake:[0-9]+ \(file\): + file given both NO_SOURCE_PERMISSIONS and FILE_PERMISSIONS. Only one + option allowed. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions2.cmake b/Tests/RunCMake/File_Generate/SourcePermissions2.cmake new file mode 100644 index 0000000..2a1e3ea --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions2.cmake @@ -0,0 +1,5 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output-sourcepermission2.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + NO_SOURCE_PERMISSIONS + FILE_PERMISSIONS OWNER_READ + ) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions3-result.txt b/Tests/RunCMake/File_Generate/SourcePermissions3-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions3-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/File_Generate/SourcePermissions3-stderr.txt b/Tests/RunCMake/File_Generate/SourcePermissions3-stderr.txt new file mode 100644 index 0000000..1143c78 --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions3-stderr.txt @@ -0,0 +1,5 @@ +CMake Error at SourcePermissions3.cmake:[0-9]+ \(file\): + file given both USE_SOURCE_PERMISSIONS and FILE_PERMISSIONS. Only one + option allowed. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions3.cmake b/Tests/RunCMake/File_Generate/SourcePermissions3.cmake new file mode 100644 index 0000000..97e0deb --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions3.cmake @@ -0,0 +1,5 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output-sourcepermission3.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + USE_SOURCE_PERMISSIONS + FILE_PERMISSIONS OWNER_READ + ) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions4-result.txt b/Tests/RunCMake/File_Generate/SourcePermissions4-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions4-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/File_Generate/SourcePermissions4-stderr.txt b/Tests/RunCMake/File_Generate/SourcePermissions4-stderr.txt new file mode 100644 index 0000000..84368cd --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions4-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at SourcePermissions4.cmake:[0-9]+ \(file\): + file given USE_SOURCE_PERMISSIONS without a file INPUT. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions4.cmake b/Tests/RunCMake/File_Generate/SourcePermissions4.cmake new file mode 100644 index 0000000..f4127a6 --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions4.cmake @@ -0,0 +1,4 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output-sourcepermission4.txt" + CONTENT "Input is content" + USE_SOURCE_PERMISSIONS + ) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions5-result.txt b/Tests/RunCMake/File_Generate/SourcePermissions5-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions5-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/File_Generate/SourcePermissions5-stderr.txt b/Tests/RunCMake/File_Generate/SourcePermissions5-stderr.txt new file mode 100644 index 0000000..d66d488 --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions5-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at SourcePermissions5.cmake:[0-9]+ \(file\): + file given invalid permission "GROUP_RWX","USER_ALL". +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/File_Generate/SourcePermissions5.cmake b/Tests/RunCMake/File_Generate/SourcePermissions5.cmake new file mode 100644 index 0000000..4eb4c36 --- /dev/null +++ b/Tests/RunCMake/File_Generate/SourcePermissions5.cmake @@ -0,0 +1,4 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output-sourcepermission5.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + FILE_PERMISSIONS OWNER_READ GROUP_RWX USER_ALL + ) diff --git a/Tests/RunCMake/File_Generate/UseSourcePermissions.cmake b/Tests/RunCMake/File_Generate/UseSourcePermissions.cmake new file mode 100644 index 0000000..7cca9bf --- /dev/null +++ b/Tests/RunCMake/File_Generate/UseSourcePermissions.cmake @@ -0,0 +1,11 @@ +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$<LOWER_CASE:$<CONFIG>>/usesourcepermissions.txt" + INPUT "${CMAKE_CURRENT_SOURCE_DIR}/input.txt" + USE_SOURCE_PERMISSIONS + ) + +add_custom_target(checkUseSourcePermissions ALL + COMMAND ${CMAKE_COMMAND} + -DsourceFile=${CMAKE_CURRENT_SOURCE_DIR}/input.txt + -DgeneratedFile=${CMAKE_CURRENT_BINARY_DIR}/$<LOWER_CASE:$<CONFIG>>/usesourcepermissions.txt + -P "${CMAKE_CURRENT_SOURCE_DIR}/UseSourcePermissionsVerify.cmake" + ) diff --git a/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake b/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake new file mode 100644 index 0000000..8b30f96 --- /dev/null +++ b/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake @@ -0,0 +1,51 @@ +if(NOT EXISTS "${generatedFile}") + message(SEND_ERROR "Missing generated file:\n ${generatedFile}") +endif() + +if (UNIX) + find_program(STAT_EXECUTABLE NAMES stat) + if(NOT STAT_EXECUTABLE) + return() + endif() + + if (CMAKE_HOST_SYSTEM_NAME MATCHES "FreeBSD") + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${sourceFile}" + OUTPUT_VARIABLE output1 + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${generatedFile}" + OUTPUT_VARIABLE output2 + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + elseif (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %A "${sourceFile}" + OUTPUT_VARIABLE output1 + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process(COMMAND "${STAT_EXECUTABLE}" -f %A "${generatedFile}" + OUTPUT_VARIABLE output2 + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + else() + execute_process(COMMAND "${STAT_EXECUTABLE}" -c %a "${sourceFile}" + OUTPUT_VARIABLE output1 + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process(COMMAND "${STAT_EXECUTABLE}" -c %a "${generatedFile}" + OUTPUT_VARIABLE output2 + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY + ) + endif() + + if (NOT output1 EQUAL output2) + message(SEND_ERROR "generated file has a different permissions source " + "permissions: \"${output1}\" generated permissions: \"${output2}\"") + endif() + +endif() diff --git a/Tests/RunCMake/NinjaMultiConfig/Qt5.cmake b/Tests/RunCMake/NinjaMultiConfig/Qt5.cmake index 3a1c7f5..578256a 100644 --- a/Tests/RunCMake/NinjaMultiConfig/Qt5.cmake +++ b/Tests/RunCMake/NinjaMultiConfig/Qt5.cmake @@ -16,12 +16,13 @@ if(Qt5Core_VERSION VERSION_GREATER_EQUAL "5.15.0") set(moc_writes_depfiles 1) endif() -set(autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/mocs_compilation.cpp") +set(autogen_files) if(moc_writes_depfiles) list(APPEND autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/deps") list(APPEND autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/timestamp") endif() foreach(c IN LISTS CMAKE_CONFIGURATION_TYPES) + list(APPEND autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/mocs_compilation_${c}.cpp") list(APPEND autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/include_${c}/moc_qt5.cpp") if(moc_writes_depfiles) list(APPEND autogen_files "${CMAKE_BINARY_DIR}/exe_autogen/include_${c}/moc_qt5.cpp.d") diff --git a/Tests/RunCMake/target_include_directories/RunCMakeTest.cmake b/Tests/RunCMake/target_include_directories/RunCMakeTest.cmake index b67c598..48a750d 100644 --- a/Tests/RunCMake/target_include_directories/RunCMakeTest.cmake +++ b/Tests/RunCMake/target_include_directories/RunCMakeTest.cmake @@ -1,3 +1,6 @@ include(RunCMake) run_cmake(empty_keyword_args) +run_cmake(include_before) +run_cmake(include_after) +run_cmake(include_default) diff --git a/Tests/RunCMake/target_include_directories/include_after.cmake b/Tests/RunCMake/target_include_directories/include_after.cmake new file mode 100644 index 0000000..68a08a7 --- /dev/null +++ b/Tests/RunCMake/target_include_directories/include_after.cmake @@ -0,0 +1,18 @@ +enable_language(C) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.c" "int main() { return 0;}") + +set(include_dir "${CMAKE_CURRENT_BINARY_DIR}/dir") +set(after_include_dir "${CMAKE_CURRENT_BINARY_DIR}/dirAfter") +file(MAKE_DIRECTORY "${include_dir}") +file(MAKE_DIRECTORY "${after_include_dir}") + +add_executable(main "${CMAKE_CURRENT_BINARY_DIR}/main.c") +include_directories("${include_dir}") +target_include_directories(main AFTER PRIVATE "${after_include_dir}") + +get_target_property(actual_include_dirs main INCLUDE_DIRECTORIES) +set(desired_include_dirs "${include_dir}" "${after_include_dir}") + +if (NOT "${actual_include_dirs}" MATCHES "${desired_include_dirs}") + message(SEND_ERROR "include after does not work") +endif() diff --git a/Tests/RunCMake/target_include_directories/include_before.cmake b/Tests/RunCMake/target_include_directories/include_before.cmake new file mode 100644 index 0000000..9bebecd --- /dev/null +++ b/Tests/RunCMake/target_include_directories/include_before.cmake @@ -0,0 +1,18 @@ +enable_language(C) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.c" "int main() { return 0;}") + +set(include_dir "${CMAKE_CURRENT_BINARY_DIR}/dir") +set(before_include_dir "${CMAKE_CURRENT_BINARY_DIR}/dirBefore") +file(MAKE_DIRECTORY "${include_dir}") +file(MAKE_DIRECTORY "${before_include_dir}") + +add_executable(main "${CMAKE_CURRENT_BINARY_DIR}/main.c") +include_directories("${include_dir}") +target_include_directories(main BEFORE PRIVATE "${before_include_dir}") + +get_target_property(actual_include_dirs main INCLUDE_DIRECTORIES) +set(desired_include_dirs "${before_include_dir}" "${include_dir}") + +if (NOT "${actual_include_dirs}" MATCHES "${desired_include_dirs}") + message(SEND_ERROR "include before does not work") +endif() diff --git a/Tests/RunCMake/target_include_directories/include_default.cmake b/Tests/RunCMake/target_include_directories/include_default.cmake new file mode 100644 index 0000000..88b2502 --- /dev/null +++ b/Tests/RunCMake/target_include_directories/include_default.cmake @@ -0,0 +1,18 @@ +enable_language(C) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.c" "int main() { return 0;}") + +set(include_dir "${CMAKE_CURRENT_BINARY_DIR}/dir") +set(default_include_dir "${CMAKE_CURRENT_BINARY_DIR}/dirDefault") +file(MAKE_DIRECTORY "${include_dir}") +file(MAKE_DIRECTORY "${default_include_dir}") + +add_executable(main "${CMAKE_CURRENT_BINARY_DIR}/main.c") +include_directories("${include_dir}") +target_include_directories(main AFTER PRIVATE "${default_include_dir}") + +get_target_property(actual_include_dirs main INCLUDE_DIRECTORIES) +set(desired_include_dirs "${include_dir}" "${default_include_dir}") + +if (NOT "${actual_include_dirs}" MATCHES "${desired_include_dirs}") + message(SEND_ERROR "include default does not work") +endif() |