9db3116226
Ancient versions of CMake required else(), endif(), and similar block termination commands to have arguments matching the command starting the block. This is no longer the preferred style. Run the following shell code: for c in else endif endforeach endfunction endmacro endwhile; do echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/' done >convert.sed && git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' | egrep -z -v '^(Utilities/cm|Source/kwsys/)' | egrep -z -v 'Tests/CMakeTests/While-Endwhile-' | xargs -0 sed -i -f convert.sed && rm convert.sed
171 lines
5.6 KiB
CMake
171 lines
5.6 KiB
CMake
cmake_minimum_required(VERSION 1.3)
|
|
#
|
|
# Create exe.
|
|
#
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
|
|
|
|
# Create an imported target for if(TARGET) test below.
|
|
add_library(ExeImportedTarget UNKNOWN IMPORTED)
|
|
|
|
# Test if(TARGET) command.
|
|
if(NOT TARGET CMakeTestLibrary)
|
|
message(FATAL_ERROR "if(NOT TARGET CMakeTestLibrary) returned true!")
|
|
endif()
|
|
if(NOT TARGET ExeImportedTarget)
|
|
message(FATAL_ERROR "if(NOT TARGET ExeImportedTarget) returned true!")
|
|
endif()
|
|
if(TARGET LibImportedTarget)
|
|
message(FATAL_ERROR "if(TARGET LibImportedTarget) returned true!")
|
|
endif()
|
|
if(TARGET NotATarget)
|
|
message(FATAL_ERROR "if(TARGET NotATarget) returned true!")
|
|
endif()
|
|
|
|
# Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to
|
|
set(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
|
|
link_libraries(${COMPLEX_LIBS})
|
|
|
|
# Test forcing a .cxx file to not build.
|
|
set_source_files_properties(complex_nobuild.cxx PROPERTIES
|
|
HEADER_FILE_ONLY 1)
|
|
|
|
# Test forcing a .c file to not build.
|
|
# This makes sure a mixed language library is created
|
|
# with header file only sources
|
|
set_source_files_properties(complex_nobuild.c PROPERTIES
|
|
HEADER_FILE_ONLY 1)
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
add_executable(A A.cxx A.hh A.h A.txt)
|
|
add_custom_command(OUTPUT Aout.h COMMAND A > Aout.h VERBATIM)
|
|
add_executable(complex complex testcflags.c Aout.h)
|
|
# Sub1/NameConflictTest.c Sub2/NameConflictTest.c)
|
|
add_executable(complex.file complex.file.cxx complex_nobuild.cxx
|
|
complex_nobuild.c)
|
|
|
|
if (UNIX)
|
|
target_link_libraries(complex ${CMAKE_DL_LIBS})
|
|
else()
|
|
if (NOT BORLAND)
|
|
if(NOT MINGW)
|
|
target_link_libraries(complex rpcrt4.lib)
|
|
endif()
|
|
endif()
|
|
endif ()
|
|
|
|
# Test linking to static lib when a shared lib has the same name.
|
|
if(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
|
|
add_definitions(-DCOMPLEX_TEST_LINK_STATIC)
|
|
target_link_libraries(complex CMakeTestLinkStatic)
|
|
endif()
|
|
|
|
# can we get the path to a source file
|
|
get_source_file_property(A_LOCATION A.cxx LOCATION)
|
|
if ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")
|
|
add_definitions(-DCMAKE_FOUND_ACXX)
|
|
endif ()
|
|
|
|
# get the directory parent
|
|
get_directory_property(P_VALUE PARENT_DIRECTORY)
|
|
if ("${P_VALUE}" STREQUAL "${CMAKE_SOURCE_DIR}")
|
|
add_definitions(-DCMAKE_FOUND_PARENT)
|
|
endif ()
|
|
|
|
# get the stack of listfiles
|
|
include(Included.cmake)
|
|
if ("${LF_VALUE}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt;${CMAKE_CURRENT_SOURCE_DIR}/Included.cmake")
|
|
add_definitions(-DCMAKE_FOUND_LISTFILE_STACK)
|
|
endif ()
|
|
|
|
# Test add/remove definitions.
|
|
add_definitions(
|
|
-DCOMPLEX_DEFINED_PRE
|
|
-DCOMPLEX_DEFINED
|
|
-DCOMPLEX_DEFINED_POST
|
|
-DCOMPLEX_DEFINED
|
|
)
|
|
remove_definitions(-DCOMPLEX_DEFINED)
|
|
|
|
# Test pre-build/pre-link/post-build rules for an executable.
|
|
add_custom_command(TARGET complex PRE_BUILD
|
|
COMMAND ${CREATE_FILE_EXE}
|
|
ARGS "${Complex_BINARY_DIR}/Executable/prebuild.txt")
|
|
add_custom_command(TARGET complex PRE_BUILD
|
|
COMMAND ${CREATE_FILE_EXE}
|
|
ARGS "${Complex_BINARY_DIR}/Executable/prelink.txt")
|
|
add_custom_command(TARGET complex POST_BUILD
|
|
COMMAND ${CREATE_FILE_EXE}
|
|
ARGS "${Complex_BINARY_DIR}/Executable/postbuild.txt")
|
|
add_custom_command(TARGET complex POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -E copy
|
|
"${Complex_BINARY_DIR}/Executable/postbuild.txt"
|
|
"${Complex_BINARY_DIR}/Executable/postbuild2.txt")
|
|
|
|
set_source_files_properties(complex
|
|
COMPILE_FLAGS
|
|
"-DFILE_HAS_EXTRA_COMPILE_FLAGS"
|
|
#" -DFILE_DEFINE_STRING=\\\"hello\\\""
|
|
OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
|
|
)
|
|
set_target_properties(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")
|
|
add_custom_command(
|
|
TARGET complex
|
|
SOURCE ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -E copy ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
|
|
${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
|
|
OUTPUTS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
|
|
DEPENDS ${CMAKE_COMMAND}
|
|
)
|
|
|
|
# Test creating an executable that is not built by default.
|
|
add_executable(notInAllExe EXCLUDE_FROM_ALL notInAllExe.cxx)
|
|
target_link_libraries(notInAllExe notInAllLib)
|
|
|
|
# Test user-value flag mapping for the VS IDE.
|
|
if(MSVC)
|
|
set_target_properties(notInAllExe PROPERTIES
|
|
LINK_FLAGS "/NODEFAULTLIB:LIBC;LIBCMT;MSVCRT")
|
|
endif()
|
|
|
|
# Test creating a custom target that builds not-in-all targets.
|
|
add_custom_target(notInAllCustom)
|
|
add_dependencies(notInAllCustom notInAllExe)
|
|
|
|
#
|
|
# Output the files required by 'complex' to a file.
|
|
#
|
|
# This test has been moved to the 'required' subdir so that it
|
|
# has no side-effects on the current Makefile (duplicated source file
|
|
# due to source list expansion done twice).
|
|
#
|
|
add_subdirectory(Temp)
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
|
|
add_executable(testSystemDir testSystemDir.cxx)
|
|
set_target_properties(testSystemDir PROPERTIES COMPILE_FLAGS "-Werror")
|
|
endif()
|
|
|
|
#
|
|
# Extra coverage.Not used.
|
|
#
|
|
install_targets(/tmp complex)
|
|
install_programs(/tmp complex)
|
|
|
|
configure_file(
|
|
${Complex_SOURCE_DIR}/Executable/cmVersion.h.in
|
|
${Complex_BINARY_DIR}/cmVersion.h)
|
|
|
|
source_group(A_GROUP ".cxx")
|
|
source_group(B_GROUP REGULAR_EXPRESSION "cxx")
|
|
source_group(C_GROUP FILES complex.cxx)
|
|
|
|
file(WRITE ${Complex_BINARY_DIR}/A/libA.a "test")
|
|
file(WRITE ${Complex_BINARY_DIR}/A/libC.a "test")
|
|
file(WRITE ${Complex_BINARY_DIR}/B/libB.a "test")
|
|
file(WRITE ${Complex_BINARY_DIR}/B/libA.a "test")
|
|
file(WRITE ${Complex_BINARY_DIR}/C/libC.a "test")
|
|
file(WRITE ${Complex_BINARY_DIR}/C/libB.a "test")
|