summaryrefslogtreecommitdiff
path: root/Tests/SimpleInstallS2
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/SimpleInstallS2')
-rw-r--r--Tests/SimpleInstallS2/CMakeLists.txt398
-rw-r--r--Tests/SimpleInstallS2/InstallScript1.cmake5
-rw-r--r--Tests/SimpleInstallS2/InstallScript2.cmake14
-rw-r--r--Tests/SimpleInstallS2/InstallScript3.cmake12
-rw-r--r--Tests/SimpleInstallS2/InstallScript4.cmake22
-rw-r--r--Tests/SimpleInstallS2/PackageScript.cmake10
-rw-r--r--Tests/SimpleInstallS2/PostInstall.cmake6
-rw-r--r--Tests/SimpleInstallS2/PreInstall.cmake2
-rw-r--r--Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt3
-rw-r--r--Tests/SimpleInstallS2/TestSubDir/TSD.cxx10
-rw-r--r--Tests/SimpleInstallS2/TestSubDir/TSD.h1
-rw-r--r--Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx10
-rw-r--r--Tests/SimpleInstallS2/foo.c6
-rw-r--r--Tests/SimpleInstallS2/foo.h11
-rw-r--r--Tests/SimpleInstallS2/inst.cxx37
-rw-r--r--Tests/SimpleInstallS2/inst2.cxx2
-rw-r--r--Tests/SimpleInstallS2/lib1.cxx6
-rw-r--r--Tests/SimpleInstallS2/lib1.h1
-rw-r--r--Tests/SimpleInstallS2/lib2.cxx6
-rw-r--r--Tests/SimpleInstallS2/lib2.h11
-rw-r--r--Tests/SimpleInstallS2/lib3.cxx6
-rw-r--r--Tests/SimpleInstallS2/lib3.h11
-rw-r--r--Tests/SimpleInstallS2/lib4.cxx7
-rw-r--r--Tests/SimpleInstallS2/lib4.h12
-rw-r--r--Tests/SimpleInstallS2/scripts/.gitattributes1
-rw-r--r--Tests/SimpleInstallS2/scripts/CMakeLists.txt1
-rwxr-xr-xTests/SimpleInstallS2/scripts/sample_script2
-rwxr-xr-xTests/SimpleInstallS2/scripts/sample_script.bat1
28 files changed, 614 insertions, 0 deletions
diff --git a/Tests/SimpleInstallS2/CMakeLists.txt b/Tests/SimpleInstallS2/CMakeLists.txt
new file mode 100644
index 000000000..378b5292b
--- /dev/null
+++ b/Tests/SimpleInstallS2/CMakeLists.txt
@@ -0,0 +1,398 @@
+cmake_minimum_required (VERSION 2.6)
+PROJECT (TestSimpleInstall)
+SET(CMAKE_VERBOSE_MAKEFILE 1)
+SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY
+ "${TestSimpleInstall_BINARY_DIR}/bin")
+SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+ "${TestSimpleInstall_BINARY_DIR}/lib/static")
+SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY
+ "${TestSimpleInstall_BINARY_DIR}/lib")
+
+# Skip generating the rpath pointing at the build tree to make sure
+# the executable is installed with the proper rpath in the install
+# tree.
+SET(CMAKE_SKIP_BUILD_RPATH 1)
+
+# Make sure the executable can run from the install tree.
+SET(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/MyTest/lib)
+
+# Skip the dependency that causes a build when installing. This
+# avoids infinite loops when the post-build rule below installs.
+SET(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY 1)
+SET(CMAKE_SKIP_PACKAGE_ALL_DEPENDENCY 1)
+
+SET(CMAKE_DEBUG_POSTFIX "_test_debug_postfix")
+
+SET(EXTRA_INSTALL_FLAGS)
+MESSAGE("Extra install: ${EXTRA_INSTALL_FLAGS}")
+
+IF(STAGE2)
+ SET(LIBPATHS
+ ${CMAKE_INSTALL_PREFIX}/MyTest/lib/static
+ ${CMAKE_INSTALL_PREFIX}/MyTest/lib
+ )
+ SET(t1NAMES test1 test1${CMAKE_DEBUG_POSTFIX} test1rel)
+ SET(t2NAMES test2 test2${CMAKE_DEBUG_POSTFIX})
+ SET(t4NAMES test4out test4out${CMAKE_DEBUG_POSTFIX})
+
+ # Make sure the install script ran.
+ SET(CMAKE_INSTALL_SCRIPT_DID_RUN 0)
+ INCLUDE(${CMAKE_INSTALL_PREFIX}/MyTest/InstallScriptOut.cmake OPTIONAL)
+ IF(CMAKE_INSTALL_SCRIPT_DID_RUN)
+ MESSAGE(STATUS "Stage 1 did run install script 2.")
+ ELSE(CMAKE_INSTALL_SCRIPT_DID_RUN)
+ MESSAGE(SEND_ERROR "Stage 1 did not run install script 2.")
+ ENDIF(CMAKE_INSTALL_SCRIPT_DID_RUN)
+
+ IF(CYGWIN OR MINGW)
+ SET(LIBPATHS ${LIBPATHS} "${CMAKE_INSTALL_PREFIX}/MyTest/bin")
+ ENDIF(CYGWIN OR MINGW)
+ MESSAGE("Search for library in: ${LIBPATHS}")
+
+ SET(TEST1_LIBRARY "TEST1_LIBRARY-NOTFOUND" CACHE FILEPATH "Force find." FORCE)
+ SET(TEST2_LIBRARY "TEST2_LIBRARY-NOTFOUND" CACHE FILEPATH "Force find." FORCE)
+ SET(TEST4_LIBRARY "TEST4_LIBRARY-NOTFOUND" CACHE FILEPATH "Force find." FORCE)
+
+ FIND_LIBRARY(TEST1_LIBRARY
+ NAMES ${t1NAMES}
+ PATHS ${LIBPATHS}
+ DOC "First library")
+ FIND_LIBRARY(TEST2_LIBRARY
+ NAMES ${t2NAMES}
+ PATHS ${LIBPATHS}
+ DOC "Second library")
+ FIND_LIBRARY(TEST4_LIBRARY
+ NAMES ${t4NAMES}
+ PATHS ${LIBPATHS}
+ DOC "Fourth library")
+
+ # Test importing a library found on disk.
+ ADD_LIBRARY(lib_test4 UNKNOWN IMPORTED)
+ SET_PROPERTY(TARGET lib_test4 PROPERTY IMPORTED_LOCATION ${TEST4_LIBRARY})
+
+ INCLUDE_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/MyTest/include)
+ ADD_EXECUTABLE (SimpleInstExeS2 inst2.cxx foo.c foo.h)
+ TARGET_LINK_LIBRARIES(SimpleInstExeS2 ${TEST1_LIBRARY} ${TEST2_LIBRARY} lib_test4)
+ SET(install_target SimpleInstExeS2)
+
+ IF("${TEST1_LIBRARY}" MATCHES "static")
+ MESSAGE(STATUS "test1 correctly found in lib/static")
+ ELSE("${TEST1_LIBRARY}" MATCHES "static")
+ MESSAGE(SEND_ERROR "test1 not found in lib/static!")
+ ENDIF("${TEST1_LIBRARY}" MATCHES "static")
+
+ # Check for failure of configuration-specific installation.
+ IF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/include/Release/lib1debug.h")
+ MESSAGE(FATAL_ERROR "Debug-configuration file installed for Release!")
+ ENDIF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/include/Release/lib1debug.h")
+ IF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/include/Debug/lib1release.h")
+ MESSAGE(FATAL_ERROR "Release-configuration file installed for Debug!")
+ ENDIF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/include/Debug/lib1release.h")
+
+ # Check for failure of directory installation.
+ IF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/TSD.h")
+ MESSAGE(FATAL_ERROR "Directory installation did not install TSD.h")
+ ENDIF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/TSD.h")
+ IF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/CVS")
+ MESSAGE(FATAL_ERROR "Directory installation installed CVS directory.")
+ ENDIF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/CVS")
+ IF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/CVS")
+ MESSAGE(FATAL_ERROR "Directory installation installed CVS directory.")
+ ENDIF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/CVS")
+ IF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/CMakeLists.txt")
+ MESSAGE(FATAL_ERROR "Directory installation installed CMakeLists.txt.")
+ ENDIF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/CMakeLists.txt")
+ IF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/alt/TestSubDir/TSD.h")
+ MESSAGE(FATAL_ERROR "Directory installation did not install alternate TSD.h")
+ ENDIF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/alt/TestSubDir/TSD.h")
+ IF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/alt/TestSubDir/TSD.cxx")
+ MESSAGE(FATAL_ERROR "Directory installation installed alternate TSD.cxx")
+ ENDIF(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/alt/TestSubDir/TSD.cxx")
+
+ # Check that scripts properly installed.
+ IF(WIN32 AND NOT CYGWIN)
+ SET(BAT .bat)
+ ELSE(WIN32 AND NOT CYGWIN)
+ SET(BAT)
+ ENDIF(WIN32 AND NOT CYGWIN)
+ FOREACH(loc share share/old1 share/old2 share/old3 share/alt)
+ SET(CUR_SCRIPT "${CMAKE_INSTALL_PREFIX}/MyTest/${loc}/sample_script${BAT}")
+ EXECUTE_PROCESS(
+ COMMAND ${CUR_SCRIPT}
+ RESULT_VARIABLE SAMPLE_SCRIPT_RESULT
+ OUTPUT_VARIABLE SAMPLE_SCRIPT_OUTPUT
+ )
+ IF(NOT "${SAMPLE_SCRIPT_RESULT}" MATCHES "^0$")
+ MESSAGE(FATAL_ERROR
+ "Sample script [${CUR_SCRIPT}] failed: [${SAMPLE_SCRIPT_RESULT}]")
+ ENDIF(NOT "${SAMPLE_SCRIPT_RESULT}" MATCHES "^0$")
+ IF(NOT "${SAMPLE_SCRIPT_OUTPUT}" MATCHES "Sample Script Output")
+ MESSAGE(FATAL_ERROR
+ "Bad sample script [${CUR_SCRIPT}] output: [${SAMPLE_SCRIPT_OUTPUT}]")
+ ENDIF(NOT "${SAMPLE_SCRIPT_OUTPUT}" MATCHES "Sample Script Output")
+ ENDFOREACH(loc)
+
+ # Check for failure of empty directory installation.
+ IF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty")
+ MESSAGE(FATAL_ERROR "Empty directory installation did not install.")
+ ENDIF(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty")
+ FILE(GLOB EMPTY_FILES "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty/*")
+ IF(EMPTY_FILES)
+ MESSAGE(FATAL_ERROR "Empty directory installed [${EMPTY_FILES}].")
+ ENDIF(EMPTY_FILES)
+
+ # Make sure the test executable can run from the install tree.
+ SET_TARGET_PROPERTIES(SimpleInstExeS2 PROPERTIES
+ INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/MyTest/lib)
+
+ INSTALL_TARGETS(/MyTest/bin SimpleInstExeS2)
+
+# try to import the exported targets again
+ SET(SimpleInstallS1_DIR ${CMAKE_INSTALL_PREFIX}/MyTest/lib)
+ FIND_PACKAGE(SimpleInstallS1 REQUIRED)
+ GET_TARGET_PROPERTY(simpleInstallImported S1_SimpleInstall IMPORTED)
+ IF(NOT simpleInstallImported)
+ MESSAGE(FATAL_ERROR "Target S1_SimpleInstall could not be imported")
+ ENDIF(NOT simpleInstallImported)
+
+ELSE(STAGE2)
+ # Wipe out the install directory to do a fresh test.
+ FILE(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/MyTest)
+
+ # this is stage 1, so create libraries and modules and install everything
+ ADD_LIBRARY(test1 STATIC lib1.cxx)
+ ADD_LIBRARY(test2 SHARED lib2.cxx)
+ ADD_LIBRARY(test3 MODULE lib3.cxx)
+ ADD_LIBRARY(test4 SHARED lib4.cxx)
+
+ # Test <ARCHIVE|LIBRARY|RUNTIME>_OUTPUT_NAME properties.
+ SET_PROPERTY(TARGET test4 PROPERTY ARCHIVE_OUTPUT_NAME test4out)
+ SET_PROPERTY(TARGET test4 PROPERTY LIBRARY_OUTPUT_NAME test4out)
+
+ ADD_EXECUTABLE (SimpleInstall inst.cxx foo.c foo.h)
+ TARGET_LINK_LIBRARIES(SimpleInstall test1 test2 test4)
+ SET(install_target SimpleInstall)
+
+ SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES OUTPUT_NAME SimpleInstExe)
+ # Disable VERSION test until it is implemented in the Xcode generator.
+ IF(NOT XCODE)
+ SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES VERSION 1.2)
+ ENDIF(NOT XCODE)
+
+ # Make sure the test executable can run from the install tree.
+ SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES
+ INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/MyTest/lib)
+
+ # Test per-configuration output name.
+ SET_TARGET_PROPERTIES(test1 PROPERTIES RELEASE_OUTPUT_NAME test1rel)
+ SET_TARGET_PROPERTIES(test2 PROPERTIES PUBLIC_HEADER foo.h)
+
+ IF(CMAKE_GENERATOR MATCHES "Makefiles")
+ ADD_SUBDIRECTORY(TestSubDir)
+ ADD_DEPENDENCIES(SimpleInstall TSD)
+ ENDIF(CMAKE_GENERATOR MATCHES "Makefiles")
+
+ ADD_DEPENDENCIES(SimpleInstall test3)
+ ADD_DEPENDENCIES(test2 test3)
+ ADD_DEPENDENCIES(test4 test2)
+
+ INSTALL(TARGETS SimpleInstall test1 test2 test3 EXPORT SimpleInstallS1
+ RUNTIME DESTINATION MyTest/bin COMPONENT Runtime # .exe, .dll
+ LIBRARY DESTINATION MyTest/lib COMPONENT Runtime # .so, mod.dll
+ ARCHIVE DESTINATION MyTest/lib/static COMPONENT Development # .a, .lib
+ PUBLIC_HEADER DESTINATION MyTest/include COMPONENT Development
+ )
+
+ INSTALL(TARGETS test4 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ RUNTIME DESTINATION MyTest/bin
+ LIBRARY DESTINATION MyTest/lib
+ ARCHIVE DESTINATION MyTest/lib/static
+ OPTIONAL # for coverage...target should always exist
+ )
+ INSTALL(FILES lib1.h DESTINATION MyTest/include/foo)
+ INSTALL(FILES lib2.h
+ DESTINATION MyTest/include/foo
+ COMPONENT Development
+ PERMISSIONS OWNER_READ OWNER_WRITE
+ RENAME lib2renamed.h
+ )
+
+ # Test old-style install commands.
+ INSTALL_FILES(/MyTest/include FILES lib3.h)
+ INSTALL_FILES(/MyTest/include/old .h lib3)
+ INSTALL_FILES(/MyTest/include/old "^lib2.h$")
+ INSTALL_PROGRAMS(/MyTest/share/old1 FILES
+ scripts/sample_script scripts/sample_script.bat)
+ INSTALL_PROGRAMS(/MyTest/share/old2
+ scripts/sample_script scripts/sample_script.bat)
+
+# "export" the targets collected in "SimpleInstallS1"
+ INSTALL(EXPORT SimpleInstallS1 FILE SimpleInstallS1Config.cmake
+ DESTINATION MyTest/lib
+ NAMESPACE S1_ )
+
+ EXPORT(TARGETS SimpleInstall test1 test2 test3
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/SimpleInstallS1Config.cmake"
+ NAMESPACE S2_ )
+
+ ADD_SUBDIRECTORY(scripts)
+
+ # Test optional installation.
+ INSTALL(FILES does_not_exist.h DESTINATION MyTest/include/foo OPTIONAL)
+
+ # Test configuration-specific installation.
+ INSTALL(FILES lib1.h RENAME lib1release.h CONFIGURATIONS Release
+ DESTINATION MyTest/include/Release
+ )
+ INSTALL(FILES lib1.h RENAME lib1debug.h CONFIGURATIONS Debug
+ DESTINATION MyTest/include/Debug
+ )
+
+ # Test directory installation.
+ FILE(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/MyTest/share/CVS")
+ FILE(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/CVS")
+ INSTALL(
+ DIRECTORY TestSubDir scripts/ DESTINATION MyTest/share
+ FILE_PERMISSIONS OWNER_READ OWNER_WRITE
+ DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE
+ PATTERN "CVS" EXCLUDE
+ REGEX "\\.txt$" EXCLUDE
+ PATTERN "scripts/*" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
+ )
+
+ # Alternate directory installation for coverage.
+ INSTALL(
+ DIRECTORY scripts/ DESTINATION MyTest/share/alt
+ COMPONENT Development
+ USE_SOURCE_PERMISSIONS
+ PATTERN "CVS" EXCLUDE
+ REGEX "\\.txt$" EXCLUDE
+ )
+ INSTALL(
+ DIRECTORY TestSubDir DESTINATION MyTest/share/alt
+ FILE_PERMISSIONS OWNER_READ OWNER_WRITE
+ DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE
+ FILES_MATCHING PATTERN "*.h"
+ )
+
+ # Test empty directory installation.
+ INSTALL(DIRECTORY DESTINATION MyTest/share/empty)
+
+ # Test optional directory installation.
+ INSTALL(DIRECTORY does-not-exist DESTINATION MyTest/share OPTIONAL)
+
+ # Test user-specified install scripts, with and without COMPONENT.
+ INSTALL(
+ SCRIPT InstallScript1.cmake
+ CODE "SET(INSTALL_CODE_DID_RUN 1)"
+ SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/InstallScript2.cmake
+ )
+ INSTALL(
+ SCRIPT InstallScript3.cmake
+ CODE "SET(INSTALL_CODE_WITH_COMPONENT_DID_RUN 1)"
+ SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/InstallScript4.cmake
+ COMPONENT Development
+ )
+ SET_DIRECTORY_PROPERTIES(PROPERTIES
+ ADDITIONAL_MAKE_CLEAN_FILES
+ "${CMAKE_INSTALL_PREFIX}/InstallScriptOut.cmake;${CMAKE_INSTALL_PREFIX}/InstallScript4Out.cmake")
+
+ SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES PRE_INSTALL_SCRIPT
+ ${CMAKE_CURRENT_SOURCE_DIR}/PreInstall.cmake)
+ SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES POST_INSTALL_SCRIPT
+ ${CMAKE_CURRENT_SOURCE_DIR}/PostInstall.cmake)
+ SET_TARGET_PROPERTIES(test4 PROPERTIES VERSION 1.2 SOVERSION 3
+ INSTALL_NAME_DIR @executable_path/../lib)
+ENDIF(STAGE2)
+
+IF(CMAKE_CONFIGURATION_TYPES)
+ SET(SI_CONFIG -C ${CMAKE_CFG_INTDIR})
+ELSE(CMAKE_CONFIGURATION_TYPES)
+ SET(SI_CONFIG)
+ENDIF(CMAKE_CONFIGURATION_TYPES)
+
+# Dummy test of CPack
+SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Test of packaging with cpack")
+SET(CPACK_PACKAGE_VENDOR "Kitware")
+SET(CPACK_INSTALL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/PackageScript.cmake")
+
+IF(WIN32 AND NOT UNIX)
+ FIND_PROGRAM(NSIS_MAKENSIS NAMES makensis
+ PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS]
+ DOC "Where is makensis.exe located"
+ )
+ IF(NOT NSIS_MAKENSIS)
+ SET(CPACK_GENERATOR TGZ)
+ ENDIF(NOT NSIS_MAKENSIS)
+ENDIF(WIN32 AND NOT UNIX)
+IF(UNIX AND NOT APPLE)
+ SET(CPACK_GENERATOR "TGZ;STGZ;TZ")
+ # FIND_PROGRAM(found_compress
+ # NAMES compress)
+ # IF(found_compress)
+ # FIND_PROGRAM(file_command NAMES file)
+ # IF(NOT file_command)
+ # set(file_command file)
+ # ENDIF(NOT file_command)
+ # EXECUTE_PROCESS(COMMAND ${file_command} ${found_compress}
+ # OUTPUT_VARIABLE output)
+ # set(SKIP_TZ FALSE)
+ # if("${output}" MATCHES "script")
+ # set(SKIP_TZ TRUE)
+ # endif("${output}" MATCHES "script")
+ # if("${output}" MATCHES "dummy.sh")
+ # set(SKIP_TZ TRUE)
+ # endif("${output}" MATCHES "dummy.sh")
+ # if(NOT SKIP_TZ)
+ # message("compress found and it was not a script")
+ # message("output from file command: [${output}]")
+ # SET(CPACK_GENERATOR "${CPACK_GENERATOR};TZ")
+ # else(NOT SKIP_TZ)
+ # message("compress found, but it was a script so dont use it")
+ # message("output from file command: [${output}]")
+ # endif(NOT SKIP_TZ)
+ # ENDIF(found_compress)
+ FIND_PROGRAM(found_bz2
+ NAMES bzip2)
+ IF(found_bz2)
+ SET(CPACK_GENERATOR "${CPACK_GENERATOR};TBZ2")
+ ENDIF(found_bz2)
+ENDIF(UNIX AND NOT APPLE)
+
+SET(CPACK_PACKAGE_EXECUTABLES "SimpleInstall" "Simple Install")
+SET(CMAKE_INSTALL_MFC_LIBRARIES 1)
+SET(CMAKE_INSTALL_DEBUG_LIBRARIES 1)
+INCLUDE(InstallRequiredSystemLibraries)
+
+IF(CTEST_TEST_CPACK)
+ SET(PACKAGE_TARGET --build-target package)
+
+ # Avoid settings that require the .zip file command line tools...
+ # (just build an NSIS installer without component support)
+ #
+ SET(CPACK_BINARY_ZIP OFF)
+ SET(CPACK_MONOLITHIC_INSTALL ON)
+ELSE(CTEST_TEST_CPACK)
+ SET(PACKAGE_TARGET)
+ENDIF(CTEST_TEST_CPACK)
+
+INCLUDE(CPack)
+
+ADD_CUSTOM_COMMAND(
+ TARGET ${install_target}
+ POST_BUILD
+ COMMAND ${CMAKE_CTEST_COMMAND}
+ ARGS ${SI_CONFIG}
+ --build-and-test
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_BINARY_DIR}
+ --build-generator ${CMAKE_GENERATOR}
+ --build-project ${PROJECT_NAME}
+ --build-makeprogram ${CMAKE_MAKE_PROGRAM}
+ --build-noclean
+ --build-target install
+ ${PACKAGE_TARGET}
+ COMMENT "Install Project"
+ )
diff --git a/Tests/SimpleInstallS2/InstallScript1.cmake b/Tests/SimpleInstallS2/InstallScript1.cmake
new file mode 100644
index 000000000..27b7725f8
--- /dev/null
+++ b/Tests/SimpleInstallS2/InstallScript1.cmake
@@ -0,0 +1,5 @@
+MESSAGE("This is install script 1.")
+SET(INSTALL_SCRIPT_1_DID_RUN 1)
+IF(INSTALL_CODE_DID_RUN)
+ MESSAGE(FATAL_ERROR "Install script 1 did not run before install code.")
+ENDIF(INSTALL_CODE_DID_RUN)
diff --git a/Tests/SimpleInstallS2/InstallScript2.cmake b/Tests/SimpleInstallS2/InstallScript2.cmake
new file mode 100644
index 000000000..927cae8b6
--- /dev/null
+++ b/Tests/SimpleInstallS2/InstallScript2.cmake
@@ -0,0 +1,14 @@
+MESSAGE("This is install script 2.")
+IF(INSTALL_SCRIPT_1_DID_RUN)
+ MESSAGE("Install script ordering works.")
+ELSE(INSTALL_SCRIPT_1_DID_RUN)
+ MESSAGE(FATAL_ERROR "Install script 1 did not run before install script 2.")
+ENDIF(INSTALL_SCRIPT_1_DID_RUN)
+IF(INSTALL_CODE_DID_RUN)
+ MESSAGE("Install code ordering works.")
+ELSE(INSTALL_CODE_DID_RUN)
+ MESSAGE(FATAL_ERROR "Install script 2 did not run after install code.")
+ENDIF(INSTALL_CODE_DID_RUN)
+FILE(WRITE "${CMAKE_INSTALL_PREFIX}/MyTest/InstallScriptOut.cmake"
+ "SET(CMAKE_INSTALL_SCRIPT_DID_RUN 1)\n"
+ )
diff --git a/Tests/SimpleInstallS2/InstallScript3.cmake b/Tests/SimpleInstallS2/InstallScript3.cmake
new file mode 100644
index 000000000..b1aecd4c2
--- /dev/null
+++ b/Tests/SimpleInstallS2/InstallScript3.cmake
@@ -0,0 +1,12 @@
+MESSAGE("This is install script 3.")
+SET(INSTALL_SCRIPT_3_DID_RUN 1)
+IF(INSTALL_CODE_WITH_COMPONENT_DID_RUN)
+ MESSAGE(FATAL_ERROR "Install script 3 did not run before install code with component.")
+ENDIF(INSTALL_CODE_WITH_COMPONENT_DID_RUN)
+
+IF(CMAKE_INSTALL_COMPONENT)
+IF(NOT "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Development")
+ MESSAGE("CMAKE_INSTALL_COMPONENT=\"${CMAKE_INSTALL_COMPONENT}\"")
+ MESSAGE(FATAL_ERROR "Install script 3 should only run for \"Development\" INSTALL COMPONENT.")
+ENDIF(NOT "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Development")
+ENDIF(CMAKE_INSTALL_COMPONENT)
diff --git a/Tests/SimpleInstallS2/InstallScript4.cmake b/Tests/SimpleInstallS2/InstallScript4.cmake
new file mode 100644
index 000000000..0ffea4bc8
--- /dev/null
+++ b/Tests/SimpleInstallS2/InstallScript4.cmake
@@ -0,0 +1,22 @@
+MESSAGE("This is install script 4.")
+IF(INSTALL_SCRIPT_3_DID_RUN)
+ MESSAGE("Install script ordering works.")
+ELSE(INSTALL_SCRIPT_3_DID_RUN)
+ MESSAGE(FATAL_ERROR "Install script 3 did not run before install script 4.")
+ENDIF(INSTALL_SCRIPT_3_DID_RUN)
+IF(INSTALL_CODE_WITH_COMPONENT_DID_RUN)
+ MESSAGE("Install code ordering works.")
+ELSE(INSTALL_CODE_WITH_COMPONENT_DID_RUN)
+ MESSAGE(FATAL_ERROR "Install script 4 did not run after install with component code.")
+ENDIF(INSTALL_CODE_WITH_COMPONENT_DID_RUN)
+
+IF(CMAKE_INSTALL_COMPONENT)
+IF(NOT "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Development")
+ MESSAGE("CMAKE_INSTALL_COMPONENT=\"${CMAKE_INSTALL_COMPONENT}\"")
+ MESSAGE(FATAL_ERROR "Install script 4 should only run for \"Development\" INSTALL COMPONENT.")
+ENDIF(NOT "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Development")
+ENDIF(CMAKE_INSTALL_COMPONENT)
+
+FILE(WRITE "${CMAKE_INSTALL_PREFIX}/MyTest/InstallScript4Out.cmake"
+ "SET(CMAKE_INSTALL_SCRIPT_4_DID_RUN 1)\n"
+ )
diff --git a/Tests/SimpleInstallS2/PackageScript.cmake b/Tests/SimpleInstallS2/PackageScript.cmake
new file mode 100644
index 000000000..3567a2f43
--- /dev/null
+++ b/Tests/SimpleInstallS2/PackageScript.cmake
@@ -0,0 +1,10 @@
+MESSAGE("This is packaging script")
+MESSAGE("It writes a file with all variables available in ${CMAKE_INSTALL_PREFIX}/AllVariables.txt")
+
+FILE(WRITE ${CMAKE_INSTALL_PREFIX}/AllVariables.txt "")
+GET_CMAKE_PROPERTY(res VARIABLES)
+FOREACH(var ${res})
+ FILE(APPEND ${CMAKE_INSTALL_PREFIX}/AllVariables.txt
+ "${var} \"${${var}}\"\n")
+ENDFOREACH(var ${res})
+
diff --git a/Tests/SimpleInstallS2/PostInstall.cmake b/Tests/SimpleInstallS2/PostInstall.cmake
new file mode 100644
index 000000000..52ea140a5
--- /dev/null
+++ b/Tests/SimpleInstallS2/PostInstall.cmake
@@ -0,0 +1,6 @@
+MESSAGE("In post install")
+IF(PRE_INSTALL_DID_RUN)
+ MESSAGE("Pre and post install work fine")
+ELSE(PRE_INSTALL_DID_RUN)
+ MESSAGE(FATAL_ERROR "Pre install did not run before post install")
+ENDIF(PRE_INSTALL_DID_RUN)
diff --git a/Tests/SimpleInstallS2/PreInstall.cmake b/Tests/SimpleInstallS2/PreInstall.cmake
new file mode 100644
index 000000000..2ea2f7716
--- /dev/null
+++ b/Tests/SimpleInstallS2/PreInstall.cmake
@@ -0,0 +1,2 @@
+MESSAGE("This is in pre install")
+SET(PRE_INSTALL_DID_RUN 1)
diff --git a/Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt b/Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt
new file mode 100644
index 000000000..4f6295300
--- /dev/null
+++ b/Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt
@@ -0,0 +1,3 @@
+ADD_EXECUTABLE(TSD TSD.cxx TSD_utils.cxx)
+INSTALL_FILES(/MyTest/include FILES TSD.h)
+INSTALL_TARGETS(/MyTest/bin TSD)
diff --git a/Tests/SimpleInstallS2/TestSubDir/TSD.cxx b/Tests/SimpleInstallS2/TestSubDir/TSD.cxx
new file mode 100644
index 000000000..8fc38787a
--- /dev/null
+++ b/Tests/SimpleInstallS2/TestSubDir/TSD.cxx
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+#include "TSD.h"
+
+int main()
+{
+ int res = TSD("TEST");
+ printf("Hello from TSD\n");
+ return res;
+}
diff --git a/Tests/SimpleInstallS2/TestSubDir/TSD.h b/Tests/SimpleInstallS2/TestSubDir/TSD.h
new file mode 100644
index 000000000..6a3c1affa
--- /dev/null
+++ b/Tests/SimpleInstallS2/TestSubDir/TSD.h
@@ -0,0 +1 @@
+int TSD(const char*);
diff --git a/Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx b/Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx
new file mode 100644
index 000000000..0277f05ae
--- /dev/null
+++ b/Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx
@@ -0,0 +1,10 @@
+#include <string.h>
+
+int TSD(const char* foo)
+{
+ if ( strcmp(foo, "TEST") == 0 )
+ {
+ return 0;
+ }
+ return 1;
+}
diff --git a/Tests/SimpleInstallS2/foo.c b/Tests/SimpleInstallS2/foo.c
new file mode 100644
index 000000000..45d5b2bf2
--- /dev/null
+++ b/Tests/SimpleInstallS2/foo.c
@@ -0,0 +1,6 @@
+char* foo = "Foo";
+
+int SomeFunctionInFoo()
+{
+ return 5;
+}
diff --git a/Tests/SimpleInstallS2/foo.h b/Tests/SimpleInstallS2/foo.h
new file mode 100644
index 000000000..2708baffe
--- /dev/null
+++ b/Tests/SimpleInstallS2/foo.h
@@ -0,0 +1,11 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern char* foo;
+extern int SomeFunctionInFoo();
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Tests/SimpleInstallS2/inst.cxx b/Tests/SimpleInstallS2/inst.cxx
new file mode 100644
index 000000000..7f2962d00
--- /dev/null
+++ b/Tests/SimpleInstallS2/inst.cxx
@@ -0,0 +1,37 @@
+#include "foo.h"
+
+#ifdef STAGE_2
+# include <foo/lib1.h>
+# include <foo/lib2renamed.h>
+# include <lib3.h>
+# include <old/lib2.h>
+# include <old/lib3.h>
+#else
+# include "lib1.h"
+# include "lib2.h"
+#endif
+
+#include "lib4.h"
+
+#include <stdio.h>
+
+int main ()
+{
+ if ( Lib1Func() != 2.0 )
+ {
+ printf("Problem with lib1\n");
+ return 1;
+ }
+ if ( Lib2Func() != 1.0 )
+ {
+ printf("Problem with lib2\n");
+ return 1;
+ }
+ if ( Lib4Func() != 4.0 )
+ {
+ printf("Problem with lib4\n");
+ return 1;
+ }
+ printf("The value of Foo: %s\n", foo);
+ return SomeFunctionInFoo()-5;
+}
diff --git a/Tests/SimpleInstallS2/inst2.cxx b/Tests/SimpleInstallS2/inst2.cxx
new file mode 100644
index 000000000..c70b93af1
--- /dev/null
+++ b/Tests/SimpleInstallS2/inst2.cxx
@@ -0,0 +1,2 @@
+#define STAGE_2
+#include "inst.cxx"
diff --git a/Tests/SimpleInstallS2/lib1.cxx b/Tests/SimpleInstallS2/lib1.cxx
new file mode 100644
index 000000000..7aa905205
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib1.cxx
@@ -0,0 +1,6 @@
+#include "lib1.h"
+
+float Lib1Func()
+{
+ return 2.0;
+}
diff --git a/Tests/SimpleInstallS2/lib1.h b/Tests/SimpleInstallS2/lib1.h
new file mode 100644
index 000000000..0d64e76bc
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib1.h
@@ -0,0 +1 @@
+extern float Lib1Func();
diff --git a/Tests/SimpleInstallS2/lib2.cxx b/Tests/SimpleInstallS2/lib2.cxx
new file mode 100644
index 000000000..dccc48b78
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib2.cxx
@@ -0,0 +1,6 @@
+#include "lib2.h"
+
+float Lib2Func()
+{
+ return 1.0;
+}
diff --git a/Tests/SimpleInstallS2/lib2.h b/Tests/SimpleInstallS2/lib2.h
new file mode 100644
index 000000000..ea5a6f7ea
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib2.h
@@ -0,0 +1,11 @@
+#ifdef _WIN32
+# ifdef test2_EXPORTS
+# define CM_TEST_LIB_EXPORT __declspec( dllexport )
+# else
+# define CM_TEST_LIB_EXPORT __declspec( dllimport )
+# endif
+#else
+# define CM_TEST_LIB_EXPORT
+#endif
+
+CM_TEST_LIB_EXPORT float Lib2Func();
diff --git a/Tests/SimpleInstallS2/lib3.cxx b/Tests/SimpleInstallS2/lib3.cxx
new file mode 100644
index 000000000..da8dbf942
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib3.cxx
@@ -0,0 +1,6 @@
+#include "lib3.h"
+
+float Lib3Func()
+{
+ return 2.0;
+}
diff --git a/Tests/SimpleInstallS2/lib3.h b/Tests/SimpleInstallS2/lib3.h
new file mode 100644
index 000000000..c250ed769
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib3.h
@@ -0,0 +1,11 @@
+#ifdef _WIN32
+# ifdef test3_EXPORTS
+# define CM_TEST_LIB_EXPORT __declspec( dllexport )
+# else
+# define CM_TEST_LIB_EXPORT __declspec( dllimport )
+# endif
+#else
+# define CM_TEST_LIB_EXPORT
+#endif
+
+CM_TEST_LIB_EXPORT float Lib3Func();
diff --git a/Tests/SimpleInstallS2/lib4.cxx b/Tests/SimpleInstallS2/lib4.cxx
new file mode 100644
index 000000000..fbfa23aa4
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib4.cxx
@@ -0,0 +1,7 @@
+#include "lib4.h"
+
+float Lib4Func()
+{
+ return 4.0;
+}
+
diff --git a/Tests/SimpleInstallS2/lib4.h b/Tests/SimpleInstallS2/lib4.h
new file mode 100644
index 000000000..4b94ea207
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib4.h
@@ -0,0 +1,12 @@
+#ifdef _WIN32
+# ifdef test4_EXPORTS
+# define CM_TEST_LIB_EXPORT __declspec( dllexport )
+# else
+# define CM_TEST_LIB_EXPORT __declspec( dllimport )
+# endif
+#else
+# define CM_TEST_LIB_EXPORT
+#endif
+
+CM_TEST_LIB_EXPORT float Lib4Func();
+
diff --git a/Tests/SimpleInstallS2/scripts/.gitattributes b/Tests/SimpleInstallS2/scripts/.gitattributes
new file mode 100644
index 000000000..5e3db2fb3
--- /dev/null
+++ b/Tests/SimpleInstallS2/scripts/.gitattributes
@@ -0,0 +1 @@
+sample_script crlf=input
diff --git a/Tests/SimpleInstallS2/scripts/CMakeLists.txt b/Tests/SimpleInstallS2/scripts/CMakeLists.txt
new file mode 100644
index 000000000..d46c1652e
--- /dev/null
+++ b/Tests/SimpleInstallS2/scripts/CMakeLists.txt
@@ -0,0 +1 @@
+INSTALL_PROGRAMS(/MyTest/share/old3 "^sample_script(\\.bat)?$")
diff --git a/Tests/SimpleInstallS2/scripts/sample_script b/Tests/SimpleInstallS2/scripts/sample_script
new file mode 100755
index 000000000..81f9f5315
--- /dev/null
+++ b/Tests/SimpleInstallS2/scripts/sample_script
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Sample Script Output"
diff --git a/Tests/SimpleInstallS2/scripts/sample_script.bat b/Tests/SimpleInstallS2/scripts/sample_script.bat
new file mode 100755
index 000000000..64a77b5b0
--- /dev/null
+++ b/Tests/SimpleInstallS2/scripts/sample_script.bat
@@ -0,0 +1 @@
+@echo Sample Script Output