summaryrefslogtreecommitdiffstats
path: root/Tests/SimpleInstallS2
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/SimpleInstallS2')
-rw-r--r--Tests/SimpleInstallS2/CMakeLists.txt396
-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.cxx9
-rw-r--r--Tests/SimpleInstallS2/foo.c6
-rw-r--r--Tests/SimpleInstallS2/foo.h10
-rw-r--r--Tests/SimpleInstallS2/inst.cxx34
-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.cxx6
-rw-r--r--Tests/SimpleInstallS2/lib4.h11
-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, 605 insertions, 0 deletions
diff --git a/Tests/SimpleInstallS2/CMakeLists.txt b/Tests/SimpleInstallS2/CMakeLists.txt
new file mode 100644
index 0000000..4cf7355
--- /dev/null
+++ b/Tests/SimpleInstallS2/CMakeLists.txt
@@ -0,0 +1,396 @@
+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()
+ message(SEND_ERROR "Stage 1 did not run install script 2.")
+ endif()
+
+ if(CYGWIN OR MINGW)
+ set(LIBPATHS ${LIBPATHS} "${CMAKE_INSTALL_PREFIX}/MyTest/bin")
+ endif()
+ 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()
+ message(SEND_ERROR "test1 not found in lib/static!")
+ endif()
+
+ # 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()
+ if(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/include/Debug/lib1release.h")
+ message(FATAL_ERROR "Release-configuration file installed for Debug!")
+ endif()
+
+ # 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()
+ if(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/TestSubDir/CVS")
+ message(FATAL_ERROR "Directory installation installed CVS directory.")
+ endif()
+ if(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/CVS")
+ message(FATAL_ERROR "Directory installation installed CVS directory.")
+ endif()
+ if(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/CMakeLists.txt")
+ message(FATAL_ERROR "Directory installation installed CMakeLists.txt.")
+ endif()
+ if(NOT EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/alt/TestSubDir/TSD.h")
+ message(FATAL_ERROR "Directory installation did not install alternate TSD.h")
+ endif()
+ if(EXISTS "${CMAKE_INSTALL_PREFIX}/MyTest/share/alt/TestSubDir/TSD.cxx")
+ message(FATAL_ERROR "Directory installation installed alternate TSD.cxx")
+ endif()
+
+ # Check that scripts properly installed.
+ if(WIN32 AND NOT CYGWIN)
+ set(BAT .bat)
+ else()
+ set(BAT)
+ endif()
+ 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}" STREQUAL "0")
+ message(FATAL_ERROR
+ "Sample script [${CUR_SCRIPT}] failed: [${SAMPLE_SCRIPT_RESULT}]")
+ endif()
+ if(NOT "${SAMPLE_SCRIPT_OUTPUT}" MATCHES "Sample Script Output")
+ message(FATAL_ERROR
+ "Bad sample script [${CUR_SCRIPT}] output: [${SAMPLE_SCRIPT_OUTPUT}]")
+ endif()
+ endforeach()
+
+ # 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()
+ file(GLOB EMPTY_FILES "${CMAKE_INSTALL_PREFIX}/MyTest/share/empty/*")
+ if(EMPTY_FILES)
+ message(FATAL_ERROR "Empty directory installed [${EMPTY_FILES}].")
+ endif()
+
+ # 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()
+
+else()
+ # 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()
+
+ # 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()
+
+ 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/$<1:foo>$<0:/wrong>)
+ install(FILES lib2.h
+ DESTINATION $<1:MyTest/include/foo>$<0:/wrong>
+ 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 $<1:scripts/>$<0:/wrong> DESTINATION $<1:MyTest/share>$<0:/wrong>
+ 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 $<1:scripts/>$<0:/wrong> DESTINATION $<1:MyTest/share/alt>$<0:/wrong>
+ COMPONENT Development
+ USE_SOURCE_PERMISSIONS
+ PATTERN "CVS" EXCLUDE
+ REGEX "\\.txt$" EXCLUDE
+ )
+ install(
+ DIRECTORY TestSubDir DESTINATION $<1:MyTest/share/alt>$<0:/wrong>
+ 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()
+
+if(CMAKE_CONFIGURATION_TYPES)
+ set(SI_CONFIG --config $<CONFIGURATION>)
+else()
+ set(SI_CONFIG)
+endif()
+
+# 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()
+endif()
+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()
+ # execute_process(COMMAND ${file_command} ${found_compress}
+ # OUTPUT_VARIABLE output)
+ # set(SKIP_TZ FALSE)
+ # if("${output}" MATCHES "script")
+ # set(SKIP_TZ TRUE)
+ # endif()
+ # if("${output}" MATCHES "dummy.sh")
+ # set(SKIP_TZ TRUE)
+ # endif()
+ # if(NOT SKIP_TZ)
+ # message("compress found and it was not a script")
+ # message("output from file command: [${output}]")
+ # list(APPEND CPACK_GENERATOR "TZ")
+ # else()
+ # message("compress found, but it was a script so dont use it")
+ # message("output from file command: [${output}]")
+ # endif()
+ # endif()
+ find_program(found_bz2
+ NAMES bzip2)
+ if(found_bz2)
+ list(APPEND CPACK_GENERATOR "TBZ2")
+ endif()
+endif()
+
+set(CPACK_PACKAGE_EXECUTABLES "SimpleInstall" "Simple Install")
+set(CMAKE_INSTALL_MFC_LIBRARIES 1)
+set(CMAKE_INSTALL_DEBUG_LIBRARIES 1)
+set(CMAKE_INSTALL_UCRT_LIBRARIES 1)
+include(InstallRequiredSystemLibraries)
+
+if(CTEST_TEST_CPACK)
+ set(package_command COMMAND
+ ${CMAKE_COMMAND} --build . --target package ${SI_CONFIG}
+ )
+
+ # 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()
+ set(package_command)
+endif()
+
+include(CPack)
+
+set(install_command COMMAND
+ ${CMAKE_COMMAND} --build . --target install ${SI_CONFIG}
+ )
+
+add_custom_command(
+ TARGET ${install_target}
+ POST_BUILD
+ ${install_command}
+ ${package_command}
+ COMMENT "Install Project"
+ )
diff --git a/Tests/SimpleInstallS2/InstallScript1.cmake b/Tests/SimpleInstallS2/InstallScript1.cmake
new file mode 100644
index 0000000..ef9da57
--- /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()
diff --git a/Tests/SimpleInstallS2/InstallScript2.cmake b/Tests/SimpleInstallS2/InstallScript2.cmake
new file mode 100644
index 0000000..c1d20a3
--- /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()
+ message(FATAL_ERROR "Install script 1 did not run before install script 2.")
+endif()
+if(INSTALL_CODE_DID_RUN)
+ message("Install code ordering works.")
+else()
+ message(FATAL_ERROR "Install script 2 did not run after install code.")
+endif()
+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 0000000..6485156
--- /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()
+
+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()
+endif()
diff --git a/Tests/SimpleInstallS2/InstallScript4.cmake b/Tests/SimpleInstallS2/InstallScript4.cmake
new file mode 100644
index 0000000..34d0a73
--- /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()
+ message(FATAL_ERROR "Install script 3 did not run before install script 4.")
+endif()
+if(INSTALL_CODE_WITH_COMPONENT_DID_RUN)
+ message("Install code ordering works.")
+else()
+ message(FATAL_ERROR "Install script 4 did not run after install with component code.")
+endif()
+
+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()
+endif()
+
+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 0000000..53b7909
--- /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()
+
diff --git a/Tests/SimpleInstallS2/PostInstall.cmake b/Tests/SimpleInstallS2/PostInstall.cmake
new file mode 100644
index 0000000..d616221
--- /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()
+ message(FATAL_ERROR "Pre install did not run before post install")
+endif()
diff --git a/Tests/SimpleInstallS2/PreInstall.cmake b/Tests/SimpleInstallS2/PreInstall.cmake
new file mode 100644
index 0000000..7a9851e
--- /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 0000000..860e104
--- /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 0000000..8fc3878
--- /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 0000000..6a3c1af
--- /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 0000000..0f32894
--- /dev/null
+++ b/Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx
@@ -0,0 +1,9 @@
+#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 0000000..45d5b2b
--- /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 0000000..216cdf6
--- /dev/null
+++ b/Tests/SimpleInstallS2/foo.h
@@ -0,0 +1,10 @@
+#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 0000000..ecf061c
--- /dev/null
+++ b/Tests/SimpleInstallS2/inst.cxx
@@ -0,0 +1,34 @@
+#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 0000000..c70b93a
--- /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 0000000..7aa9052
--- /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 0000000..0d64e76
--- /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 0000000..dccc48b
--- /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 0000000..a3ed758
--- /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 0000000..da8dbf9
--- /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 0000000..df11327
--- /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 0000000..fbede5c
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib4.cxx
@@ -0,0 +1,6 @@
+#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 0000000..71425a5
--- /dev/null
+++ b/Tests/SimpleInstallS2/lib4.h
@@ -0,0 +1,11 @@
+#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 0000000..5e3db2f
--- /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 0000000..ec34e8c
--- /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 0000000..81f9f53
--- /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 0000000..64a77b5
--- /dev/null
+++ b/Tests/SimpleInstallS2/scripts/sample_script.bat
@@ -0,0 +1 @@
+@echo Sample Script Output