From 96189f79d582f90758ba1b4f691031b1d7fa02f3 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Thu, 5 Dec 2002 13:44:11 -0500 Subject: [PATCH] ENH: unify EnableLanguage across all generators --- Modules/CMakeBackwardCompatibilityC.cmake | 64 ++++--- Modules/CMakeBackwardCompatibilityCXX.cmake | 65 +++---- Modules/CMakeSystemSpecificInformation.cmake | 112 ++++++------ Modules/CMakeVS6BackwardCompatibility.cmake | 10 ++ Modules/CMakeVS6FindMake.cmake | 9 + Modules/CMakeVS7BackwardCompatibility.cmake | 10 ++ Modules/CMakeVS7FindMake.cmake | 9 + Modules/Dart.cmake | 4 +- Modules/Platform/Windows-cl.cmake | 21 ++- Source/cmGlobalBorlandMakefileGenerator.cxx | 11 +- Source/cmGlobalBorlandMakefileGenerator.h | 1 + Source/cmGlobalGenerator.cxx | 177 +++++++++++++++++-- Source/cmGlobalGenerator.h | 3 +- Source/cmGlobalNMakeMakefileGenerator.cxx | 15 +- Source/cmGlobalNMakeMakefileGenerator.h | 1 + Source/cmGlobalUnixMakefileGenerator.cxx | 148 +--------------- Source/cmGlobalUnixMakefileGenerator.h | 6 +- Source/cmGlobalVisualStudio6Generator.cxx | 25 +-- Source/cmGlobalVisualStudio6Generator.h | 2 + Source/cmGlobalVisualStudio7Generator.cxx | 29 ++- Source/cmGlobalVisualStudio7Generator.h | 1 + Source/cmLocalVisualStudio6Generator.cxx | 12 +- 22 files changed, 406 insertions(+), 329 deletions(-) create mode 100644 Modules/CMakeVS6BackwardCompatibility.cmake create mode 100644 Modules/CMakeVS6FindMake.cmake create mode 100644 Modules/CMakeVS7BackwardCompatibility.cmake create mode 100644 Modules/CMakeVS7FindMake.cmake diff --git a/Modules/CMakeBackwardCompatibilityC.cmake b/Modules/CMakeBackwardCompatibilityC.cmake index eccad863f..04cab0b24 100644 --- a/Modules/CMakeBackwardCompatibilityC.cmake +++ b/Modules/CMakeBackwardCompatibilityC.cmake @@ -1,46 +1,56 @@ # Nothing here yet +IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + INCLUDE(${CMAKE_ROOT}/Modules/CMakeVS7BackwardCompatibility.cmake) + SET(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7") +IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + INCLUDE(${CMAKE_ROOT}/Modules/CMakeVS6BackwardCompatibility.cmake) + SET(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") -INCLUDE (${CMAKE_ROOT}/Modules/CheckSizeOf.cmake) -CHECK_TYPE_SIZE(int CMAKE_SIZEOF_INT) -CHECK_TYPE_SIZE(long CMAKE_SIZEOF_LONG) -CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P) -CHECK_TYPE_SIZE(char CMAKE_SIZEOF_CHAR) -CHECK_TYPE_SIZE(short CMAKE_SIZEOF_SHORT) -CHECK_TYPE_SIZE(float CMAKE_SIZEOF_FLOAT) -CHECK_TYPE_SIZE(double CMAKE_SIZEOF_DOUBLE) +IF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) + INCLUDE (${CMAKE_ROOT}/Modules/CheckSizeOf.cmake) + CHECK_TYPE_SIZE(int CMAKE_SIZEOF_INT) + CHECK_TYPE_SIZE(long CMAKE_SIZEOF_LONG) + CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P) + CHECK_TYPE_SIZE(char CMAKE_SIZEOF_CHAR) + CHECK_TYPE_SIZE(short CMAKE_SIZEOF_SHORT) + CHECK_TYPE_SIZE(float CMAKE_SIZEOF_FLOAT) + CHECK_TYPE_SIZE(double CMAKE_SIZEOF_DOUBLE) -INCLUDE (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake) -CHECK_FUNCTION_EXISTS(connect CMAKE_HAVE_CONNECT) -CHECK_FUNCTION_EXISTS(remove CMAKE_HAVE_REMOVE) + INCLUDE (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake) + CHECK_FUNCTION_EXISTS(connect CMAKE_HAVE_CONNECT) + CHECK_FUNCTION_EXISTS(remove CMAKE_HAVE_REMOVE) -INCLUDE (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake) -CHECK_LIBRARY_EXISTS("ipc" "shmat" "" CMAKE_HAVE_GETHOSTBYNAME) + INCLUDE (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake) + CHECK_LIBRARY_EXISTS("ipc" "shmat" "" CMAKE_HAVE_GETHOSTBYNAME) -INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) -CHECK_INCLUDE_FILE("limits.h" CMAKE_HAVE_LIMITS_H) -CHECK_INCLUDE_FILE("unistd.h" CMAKE_HAVE_UNISTD_H) -CHECK_INCLUDE_FILE("sys/prctl.h" CMAKE_HAVE_SYS_PRCTL_H) -CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) + INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) + CHECK_INCLUDE_FILE("limits.h" CMAKE_HAVE_LIMITS_H) + CHECK_INCLUDE_FILE("unistd.h" CMAKE_HAVE_UNISTD_H) + CHECK_INCLUDE_FILE("sys/prctl.h" CMAKE_HAVE_SYS_PRCTL_H) + CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) -INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) -TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN) -INCLUDE (${CMAKE_ROOT}/Modules/FindX11.cmake) -INCLUDE (${CMAKE_ROOT}/Modules/FindThreads.cmake) + INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) + TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN) + INCLUDE (${CMAKE_ROOT}/Modules/FindX11.cmake) + INCLUDE (${CMAKE_ROOT}/Modules/FindThreads.cmake) -SET (CMAKE_THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}" CACHE STRING + SET (CMAKE_THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}" CACHE STRING "Thread library used.") -SET (CMAKE_USE_PTHREADS "${CMAKE_USE_PTHREADS_INIT}" CACHE BOOL + SET (CMAKE_USE_PTHREADS "${CMAKE_USE_PTHREADS_INIT}" CACHE BOOL "Use the pthreads library.") -SET (CMAKE_USE_WIN32_THREADS "${CMAKE_USE_WIN32_THREADS_INIT}" CACHE BOOL + SET (CMAKE_USE_WIN32_THREADS "${CMAKE_USE_WIN32_THREADS_INIT}" CACHE BOOL "Use the win32 thread library.") -SET (CMAKE_HP_PTHREADS ${CMAKE_HP_PTHREADS_INIT} CACHE BOOL + SET (CMAKE_HP_PTHREADS ${CMAKE_HP_PTHREADS_INIT} CACHE BOOL "Use HP pthreads.") -SET (CMAKE_USE_SPROC ${CMAKE_USE_SPROC_INIT} CACHE BOOL + SET (CMAKE_USE_SPROC ${CMAKE_USE_SPROC_INIT} CACHE BOOL "Use sproc libs.") +ENDIF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) MARK_AS_ADVANCED( CMAKE_THREAD_LIBS diff --git a/Modules/CMakeBackwardCompatibilityCXX.cmake b/Modules/CMakeBackwardCompatibilityCXX.cmake index fb41caac6..c11d56d71 100644 --- a/Modules/CMakeBackwardCompatibilityCXX.cmake +++ b/Modules/CMakeBackwardCompatibilityCXX.cmake @@ -1,34 +1,35 @@ # +IF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) + # check for some ANSI flags in the CXX compiler if it is not gnu + IF(NOT CMAKE_COMPILER_IS_GNUCXX) + INCLUDE(${CMAKE_ROOT}/Modules/TestCXXAcceptsFlag.cmake) + SET(CMAKE_TRY_ANSI_CXX_FLAGS "") + IF(CMAKE_SYSTEM MATCHES "IRIX.*") + SET(CMAKE_TRY_ANSI_CXX_FLAGS "-LANG:std") + ENDIF(CMAKE_SYSTEM MATCHES "IRIX.*") + IF(CMAKE_SYSTEM MATCHES "OSF.*") + SET(CMAKE_TRY_ANSI_CXX_FLAGS "-std strict_ansi -nopure_cname") + ENDIF(CMAKE_SYSTEM MATCHES "OSF.*") + # if CMAKE_TRY_ANSI_CXX_FLAGS has something in it, see + # if the compiler accepts it + IF( CMAKE_TRY_ANSI_CXX_FLAGS MATCHES ".+") + CHECK_CXX_ACCEPTS_FLAG(${CMAKE_TRY_ANSI_CXX_FLAGS} CMAKE_CXX_ACCEPTS_FLAGS) + # if the compiler liked the flag then set CMAKE_ANSI_CXXFLAGS + # to the flag + IF(CMAKE_CXX_ACCEPTS_FLAGS) + SET(CMAKE_ANSI_CXXFLAGS ${CMAKE_TRY_ANSI_CXX_FLAGS} CACHE INTERNAL + "What flags are required by the c++ compiler to make it ansi." ) + ENDIF(CMAKE_CXX_ACCEPTS_FLAGS) + ENDIF( CMAKE_TRY_ANSI_CXX_FLAGS MATCHES ".+") + ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) -# check for some ANSI flags in the CXX compiler if it is not gnu -IF(NOT CMAKE_COMPILER_IS_GNUCXX) - INCLUDE(${CMAKE_ROOT}/Modules/TestCXXAcceptsFlag.cmake) - SET(CMAKE_TRY_ANSI_CXX_FLAGS "") - IF(CMAKE_SYSTEM MATCHES "IRIX.*") - SET(CMAKE_TRY_ANSI_CXX_FLAGS "-LANG:std") - ENDIF(CMAKE_SYSTEM MATCHES "IRIX.*") - IF(CMAKE_SYSTEM MATCHES "OSF.*") - SET(CMAKE_TRY_ANSI_CXX_FLAGS "-std strict_ansi -nopure_cname") - ENDIF(CMAKE_SYSTEM MATCHES "OSF.*") - # if CMAKE_TRY_ANSI_CXX_FLAGS has something in it, see - # if the compiler accepts it - IF( CMAKE_TRY_ANSI_CXX_FLAGS MATCHES ".+") - CHECK_CXX_ACCEPTS_FLAG(${CMAKE_TRY_ANSI_CXX_FLAGS} CMAKE_CXX_ACCEPTS_FLAGS) - # if the compiler liked the flag then set CMAKE_ANSI_CXXFLAGS - # to the flag - IF(CMAKE_CXX_ACCEPTS_FLAGS) - SET(CMAKE_ANSI_CXXFLAGS ${CMAKE_TRY_ANSI_CXX_FLAGS} CACHE INTERNAL - "What flags are required by the c++ compiler to make it ansi." ) - ENDIF(CMAKE_CXX_ACCEPTS_FLAGS) - ENDIF( CMAKE_TRY_ANSI_CXX_FLAGS MATCHES ".+") -ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) - -INCLUDE(${CMAKE_ROOT}/Modules/TestForANSIStreamHeaders.cmake) -INCLUDE(${CMAKE_ROOT}/Modules/CheckIncludeFileCXX.cmake) -INCLUDE(${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake) -INCLUDE(${CMAKE_ROOT}/Modules/TestForANSIForScope.cmake) -CHECK_INCLUDE_FILE_CXX("sstream" CMAKE_HAS_ANSI_STRING_STREAM) -IF(NOT CMAKE_HAS_ANSI_STRING_STREAM) - SET( CMAKE_NO_ANSI_STRING_STREAM 1 CACHE INTERNAL - "Does the compiler support sstream or stringstream.") -ENDIF(NOT CMAKE_HAS_ANSI_STRING_STREAM) + INCLUDE(${CMAKE_ROOT}/Modules/TestForANSIStreamHeaders.cmake) + INCLUDE(${CMAKE_ROOT}/Modules/CheckIncludeFileCXX.cmake) + INCLUDE(${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake) + INCLUDE(${CMAKE_ROOT}/Modules/TestForANSIForScope.cmake) + CHECK_INCLUDE_FILE_CXX("sstream" CMAKE_HAS_ANSI_STRING_STREAM) + IF(NOT CMAKE_HAS_ANSI_STRING_STREAM) + SET( CMAKE_NO_ANSI_STRING_STREAM 1 CACHE INTERNAL + "Does the compiler support sstream or stringstream.") + ENDIF(NOT CMAKE_HAS_ANSI_STRING_STREAM) +ENDIF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) diff --git a/Modules/CMakeSystemSpecificInformation.cmake b/Modules/CMakeSystemSpecificInformation.cmake index a73dd8767..04aaa1783 100644 --- a/Modules/CMakeSystemSpecificInformation.cmake +++ b/Modules/CMakeSystemSpecificInformation.cmake @@ -144,10 +144,6 @@ IF(CMAKE_USER_MAKE_RULES_OVERRIDE) ENDIF(CMAKE_USER_MAKE_RULES_OVERRIDE) SET(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only.") -# default build type is none -SET (CMAKE_BUILD_TYPE "" CACHE STRING - "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") - SET (CMAKE_INSTALL_PREFIX /usr/local CACHE PATH "Install path prefix, prepended onto install directories.") @@ -158,77 +154,89 @@ SET (CMAKE_INSTALL_PREFIX /usr/local CACHE PATH # and you can set these flags in the cmake cache SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_ENV_INIT} $ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS_INIT}" CACHE STRING "Flags used by the compiler during all build types.") -SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG_INIT}" CACHE STRING - "Flags used by the compiler during debug builds.") -SET (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT}" CACHE STRING - "Flags used by the compiler during release minsize builds.") -SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE_INIT}" CACHE STRING - "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") -SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING - "Flags used by the compiler during Release with Debug Info builds.") + SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_ENV_INIT} $ENV{CFLAGS} ${CMAKE_C_FLAGS_INIT}" CACHE STRING "Flags for C compiler.") -SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG_INIT}" CACHE STRING - "Flags used by the compiler during debug builds.") -SET (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL_INIT}" CACHE STRING - "Flags used by the compiler during release minsize builds.") -SET (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE_INIT}" CACHE STRING - "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") -SET (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING - "Flags used by the compiler during Release with Debug Info builds.") SET (CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS_INIT} CACHE STRING "Flags used by the linker.") -SET (CMAKE_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT} CACHE STRING +IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) +# default build type is none + IF(NOT CMAKE_NO_BUILD_TYPE) + SET (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING + "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") + ENDIF(NOT CMAKE_NO_BUILD_TYPE) + + SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the compiler during debug builds.") + SET (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the compiler during release minsize builds.") + SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the compiler during Release with Debug Info builds.") + SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the compiler during debug builds.") + SET (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the compiler during release minsize builds.") + SET (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the compiler during Release with Debug Info builds.") + + SET (CMAKE_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT} CACHE STRING "Flags used by the linker during debug builds.") -SET (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL ${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL_INIT} CACHE STRING + SET (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL ${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL_INIT} CACHE STRING "Flags used by the linker during release minsize builds.") -SET (CMAKE_EXE_LINKER_FLAGS_RELEASE ${CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT} "" CACHE STRING + SET (CMAKE_EXE_LINKER_FLAGS_RELEASE ${CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT} "" CACHE STRING "Flags used by the linker during release builds.") -SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO + SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING "Flags used by the linker during Release with Debug Info builds.") + SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT} CACHE STRING + "Flags used by the linker during debug builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL ${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL_INIT} + CACHE STRING + "Flags used by the linker during release minsize builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT} "" CACHE STRING + "Flags used by the linker during release builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO + ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING + "Flags used by the linker during Release with Debug Info builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG ${CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT} CACHE STRING + "Flags used by the linker during debug builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL ${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL_INIT} + CACHE STRING + "Flags used by the linker during release minsize builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_RELEASE ${CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT} "" CACHE STRING + "Flags used by the linker during release builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO + ${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING + "Flags used by the linker during Release with Debug Info builds.") +ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + + + # shared linker flags SET (CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS_INIT} CACHE STRING "Flags used by the linker.") -SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT} CACHE STRING - "Flags used by the linker during debug builds.") - -SET (CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL ${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL_INIT} - CACHE STRING - "Flags used by the linker during release minsize builds.") - -SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT} "" CACHE STRING - "Flags used by the linker during release builds.") - -SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO - ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING - "Flags used by the linker during Release with Debug Info builds.") - # module linker flags SET (CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS_INIT} CACHE STRING "Flags used by the linker.") -SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG ${CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT} CACHE STRING - "Flags used by the linker during debug builds.") - -SET (CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL ${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL_INIT} - CACHE STRING - "Flags used by the linker during release minsize builds.") - -SET (CMAKE_MODULE_LINKER_FLAGS_RELEASE ${CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT} "" CACHE STRING - "Flags used by the linker during release builds.") - -SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO - ${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING - "Flags used by the linker during Release with Debug Info builds.") - SET(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM} CACHE INTERNAL "What is the target build tool cmake is generating for.") diff --git a/Modules/CMakeVS6BackwardCompatibility.cmake b/Modules/CMakeVS6BackwardCompatibility.cmake new file mode 100644 index 000000000..14900c50e --- /dev/null +++ b/Modules/CMakeVS6BackwardCompatibility.cmake @@ -0,0 +1,10 @@ +# hard code these for fast backwards compatibility tests +SET (CMAKE_SIZEOF_INT 4 CACHE INTERNAL "Size of int data type") +SET (CMAKE_SIZEOF_LONG 4 CACHE INTERNAL "Size of long data type") +SET (CMAKE_SIZEOF_VOID_P 4 CACHE INTERNAL "Size of void* data type") +SET (CMAKE_SIZEOF_CHAR 1 CACHE INTERNAL "Size of char data type") +SET (CMAKE_SIZEOF_SHORT 2 CACHE INTERNAL "Size of short data type") +SET (CMAKE_SIZEOF_FLOAT 4 CACHE INTERNAL "Size of float data type") +SET (CMAKE_SIZEOF_DOUBLE 8 CACHE INTERNAL "Size of double data type") +SET (CMAKE_NO_ANSI_FOR_SCOPE 1 CACHE INTERNAL + "Does the compiler support ansi for scope.") diff --git a/Modules/CMakeVS6FindMake.cmake b/Modules/CMakeVS6FindMake.cmake new file mode 100644 index 000000000..3e2081aee --- /dev/null +++ b/Modules/CMakeVS6FindMake.cmake @@ -0,0 +1,9 @@ +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES msdev + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup;VsCommonDir]/MSDev98/Bin/msdev + "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" + "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" + "/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" +) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeVS7BackwardCompatibility.cmake b/Modules/CMakeVS7BackwardCompatibility.cmake new file mode 100644 index 000000000..e05e87fcf --- /dev/null +++ b/Modules/CMakeVS7BackwardCompatibility.cmake @@ -0,0 +1,10 @@ +# hard code these for fast backwards compatibility tests +SET (CMAKE_SIZEOF_INT 4 CACHE INTERNAL "Size of int data type") +SET (CMAKE_SIZEOF_LONG 4 CACHE INTERNAL "Size of long data type") +SET (CMAKE_SIZEOF_VOID_P 4 CACHE INTERNAL "Size of void* data type") +SET (CMAKE_SIZEOF_CHAR 1 CACHE INTERNAL "Size of char data type") +SET (CMAKE_SIZEOF_SHORT 2 CACHE INTERNAL "Size of short data type") +SET (CMAKE_SIZEOF_FLOAT 4 CACHE INTERNAL "Size of float data type") +SET (CMAKE_SIZEOF_DOUBLE 8 CACHE INTERNAL "Size of double data type") +SET (CMAKE_NO_ANSI_FOR_SCOPE 0 CACHE INTERNAL + "Does the compiler support ansi for scope.") diff --git a/Modules/CMakeVS7FindMake.cmake b/Modules/CMakeVS7FindMake.cmake new file mode 100644 index 000000000..7d009f6c6 --- /dev/null +++ b/Modules/CMakeVS7FindMake.cmake @@ -0,0 +1,9 @@ +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES devenv + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VS;EnvironmentDirectory] + "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE" + "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE" + "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/" +) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/Dart.cmake b/Modules/Dart.cmake index e168ecad8..64af2f840 100644 --- a/Modules/Dart.cmake +++ b/Modules/Dart.cmake @@ -107,7 +107,7 @@ IF(BUILD_TESTING) # for non IDE based builds nmake and make # add all these extra targets - IF(${CMAKE_BUILD_TOOL} MATCHES make) + IF(${CMAKE_MAKE_PROGRAM} MATCHES make) # Make targets for Experimental builds ADD_CUSTOM_TARGET(ExperimentalStart ${TCL_TCLSH} ${DART_ROOT}/Source/Client/DashboardManager.tcl ${PROJECT_BINARY_DIR}/DartConfiguration.tcl Experimental Start) @@ -161,7 +161,7 @@ IF(BUILD_TESTING) ${TCL_TCLSH} ${DART_ROOT}/Source/Client/DashboardManager.tcl ${PROJECT_BINARY_DIR}/DartConfiguration.tcl Nightly DashboardStart) ADD_CUSTOM_TARGET(NightlyDashboardEnd ${TCL_TCLSH} ${DART_ROOT}/Source/Client/DashboardManager.tcl ${PROJECT_BINARY_DIR}/DartConfiguration.tcl Nightly DashboardEnd) - ENDIF (${CMAKE_BUILD_TOOL} MATCHES make) + ENDIF (${CMAKE_MAKE_PROGRAM} MATCHES make) ELSE(TCL_TCLSH) MESSAGE("Could not find TCL_TCLSH, disabling testing." "Error") diff --git a/Modules/Platform/Windows-cl.cmake b/Modules/Platform/Windows-cl.cmake index 3b4d6217e..e09b60171 100644 --- a/Modules/Platform/Windows-cl.cmake +++ b/Modules/Platform/Windows-cl.cmake @@ -44,11 +44,9 @@ SET(CMAKE_COMPILE_RESOURCE "rc /fo ") SET(CMAKE_CXX_LINK_EXECUTABLE " /nologo ${CMAKE_START_TEMP_FILE} /Fe -link ${CMAKE_END_TEMP_FILE}") -SET (CMAKE_BUILD_TYPE Debug CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel.") - SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows) - +# default to Debug builds +SET(CMAKE_BUILD_TYPE_INIT Debug) SET (CMAKE_CXX_FLAGS_INIT "/W3 /Zm1000 /GX /GR") SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/MDd /Zi /Od /GZ") SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MD /O1") @@ -65,6 +63,21 @@ SET (CMAKE_STANDARD_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib co "Libraries linked by defalut with all applications.") MARK_AS_ADVANCED(CMAKE_STANDARD_LIBRARIES) +IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + SET (CMAKE_NO_BUILD_TYPE 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") +IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + SET (CMAKE_CONFIGURATION_TYPES "Debug Release MinSizeRel RelWithDebInfo" CACHE STRING + "Space separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.") + SET (CMAKE_CXX_WARNING_LEVEL "3" CACHE STRING + "Size of stack for programs.") + SET (CMAKE_CXX_STACK_SIZE "10000000" CACHE STRING + "Size of stack for programs.") + MARK_AS_ADVANCED(CMAKE_CONFIGURATION_TYPES CMAKE_CXX_STACK_SIZE CMAKE_CXX_WARNING_LEVEL) + SET (CMAKE_NOT_USING_CONFIG_FLAGS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + + # executable linker flags SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:") SET (CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /machine:I386 /INCREMENTAL:YES") diff --git a/Source/cmGlobalBorlandMakefileGenerator.cxx b/Source/cmGlobalBorlandMakefileGenerator.cxx index 7e85f3a53..baf8807a2 100644 --- a/Source/cmGlobalBorlandMakefileGenerator.cxx +++ b/Source/cmGlobalBorlandMakefileGenerator.cxx @@ -18,6 +18,10 @@ #include "cmLocalUnixMakefileGenerator.h" #include "cmMakefile.h" #include "cmake.h" +cmGlobalBorlandMakefileGenerator::cmGlobalBorlandMakefileGenerator() +{ + m_FindMakeProgramFile = "CMakeBorlandFindMake.cmake"; +} void cmGlobalBorlandMakefileGenerator::EnableLanguage(const char* l, cmMakefile *mf) @@ -40,13 +44,6 @@ void cmGlobalBorlandMakefileGenerator::EnableLanguage(const char* l, mf->AddDefinition("BORLAND", "1"); mf->AddDefinition("CMAKE_GENERATOR_CC", "bcc32"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "bcc32"); - if(!mf->GetDefinition("CMAKE_MAKE_PROGRAM") - || cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM"))) - { - std::string setMakeProgram = mf->GetDefinition("CMAKE_ROOT"); - setMakeProgram += "/Modules/CMakeBorlandFindMake.cmake"; - mf->ReadListFile(0, setMakeProgram.c_str()); - } this->cmGlobalUnixMakefileGenerator::EnableLanguage(l, mf); } diff --git a/Source/cmGlobalBorlandMakefileGenerator.h b/Source/cmGlobalBorlandMakefileGenerator.h index ef560a7c3..7f66932c5 100644 --- a/Source/cmGlobalBorlandMakefileGenerator.h +++ b/Source/cmGlobalBorlandMakefileGenerator.h @@ -27,6 +27,7 @@ class cmGlobalBorlandMakefileGenerator : public cmGlobalNMakeMakefileGenerator { public: + cmGlobalBorlandMakefileGenerator(); ///! Get the name for the generator. virtual const char* GetName() { return cmGlobalBorlandMakefileGenerator::GetActualName();} diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index bdb0d147b..b3f4b0a6e 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -34,6 +34,155 @@ cmGlobalGenerator::~cmGlobalGenerator() m_LocalGenerators.clear(); } + +void cmGlobalGenerator::EnableLanguage(const char* lang, + cmMakefile *mf) +{ + if(m_FindMakeProgramFile.size() == 0) + { + cmSystemTools::Error( + "Generator implementation error, " + "all generators must specify m_FindMakeProgramFile"); + } + std::string root = mf->GetDefinition("CMAKE_ROOT"); + if(!mf->GetDefinition("CMAKE_MAKE_PROGRAM") + || cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM"))) + { + std::string setMakeProgram = root; + setMakeProgram += "/Modules/"; + setMakeProgram += m_FindMakeProgramFile; + mf->ReadListFile(0, setMakeProgram.c_str()); + } + if(!mf->GetDefinition("CMAKE_MAKE_PROGRAM") + || cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM"))) + { + cmSystemTools::Error("EnableLanguage was unable to find a CMAKE_MAKE_PROGRAM"); + return; + } + std::string makeProgram = mf->GetDefinition("CMAKE_MAKE_PROGRAM"); + if(makeProgram.find(' ') != makeProgram.npos) + { + cmSystemTools::GetShortPath(makeProgram.c_str(), makeProgram); + this->GetCMakeInstance()->AddCacheEntry("CMAKE_MAKE_PROGRAM", makeProgram.c_str(), + "make program", + cmCacheManager::FILEPATH); + } + + bool isLocal = m_CMakeInstance->GetLocal(); + // if no lang specified use CXX + if(!lang ) + { + lang = "CXX"; + } + std::string rootBin = mf->GetHomeOutputDirectory(); + if(m_ConfiguredFilesPath.size()) + { + rootBin = m_ConfiguredFilesPath; + } + bool needCBackwards = false; + bool needCXXBackwards = false; + + // check for a C compiler and configure it + if(!isLocal && + !this->GetLanguageEnabled("C") && + lang[0] == 'C') + { + if (m_CMakeInstance->GetIsInTryCompile()) + { + cmSystemTools::Error("This should not have happen. " + "If you see this message, you are probably using a " + "broken CMakeLists.txt file or a problematic release of " + "CMake"); + } + needCBackwards = true; + // Read the DetermineSystem file + std::string systemFile = root; + systemFile += "/Modules/CMakeDetermineSystem.cmake"; + mf->ReadListFile(0, systemFile.c_str()); + // read determine C compiler + std::string determineCFile = root; + determineCFile += "/Modules/CMakeDetermineCCompiler.cmake"; + mf->ReadListFile(0,determineCFile.c_str()); + this->SetLanguageEnabled("C"); + } + + // check for a CXX compiler and configure it + if(!isLocal && + !this->GetLanguageEnabled("CXX") && + strcmp(lang, "CXX") == 0) + { + needCXXBackwards = true; + std::string determineCFile = root; + determineCFile += "/Modules/CMakeDetermineCXXCompiler.cmake"; + mf->ReadListFile(0,determineCFile.c_str()); + this->SetLanguageEnabled("CXX"); + } + + + std::string fpath = rootBin; + if(!mf->GetDefinition("CMAKE_SYSTEM_LOADED")) + { + fpath += "/CMakeSystem.cmake"; + mf->ReadListFile(0,fpath.c_str()); + } + // if C, then enable C + if(lang[0] == 'C' && !mf->GetDefinition("CMAKE_C_COMPILER_LOADED")) + { + fpath = rootBin; + fpath += "/CMakeCCompiler.cmake"; + mf->ReadListFile(0,fpath.c_str()); + } + if(strcmp(lang, "CXX") == 0 && !mf->GetDefinition("CMAKE_CXX_COMPILER_LOADED")) + { + fpath = rootBin; + fpath += "/CMakeCXXCompiler.cmake"; + mf->ReadListFile(0,fpath.c_str()); + } + if(!mf->GetDefinition("CMAKE_SYSTEM_SPECIFIC_INFORMATION_LOADED")) + { + fpath = root; + fpath += "/Modules/CMakeSystemSpecificInformation.cmake"; + mf->ReadListFile(0,fpath.c_str()); + } + + if(!isLocal) + { + // At this point we should have enough info for a try compile + // which is used in the backward stuff + if(needCBackwards) + { + if (!m_CMakeInstance->GetIsInTryCompile()) + { + // for old versions of CMake ListFiles + const char* versionValue + = mf->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"); + if (!versionValue || atof(versionValue) <= 1.4) + { + std::string ifpath = root + "/Modules/CMakeBackwardCompatibilityC.cmake"; + mf->ReadListFile(0,ifpath.c_str()); + } + } + } + if(needCXXBackwards) + { + if (!m_CMakeInstance->GetIsInTryCompile()) + { + // for old versions of CMake ListFiles + const char* versionValue + = mf->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"); + if (!versionValue || atof(versionValue) <= 1.4) + { + std::string fpath = root + "/Modules/CMakeBackwardCompatibilityCXX.cmake"; + mf->ReadListFile(0,fpath.c_str()); + } + } + } + // if we are from the top, always define this + mf->AddDefinition("RUN_CONFIGURE", true); + } +} + + void cmGlobalGenerator::SetLanguageEnabled(const char* l) { m_LanguageEnabled[l] = true; @@ -215,19 +364,23 @@ cmLocalGenerator *cmGlobalGenerator::CreateLocalGenerator() void cmGlobalGenerator::EnableLanguagesFromGenerator(cmGlobalGenerator *gen ) { - // create a temp generator - cmLocalGenerator *lg = this->CreateLocalGenerator(); - lg->GetMakefile()->SetStartDirectory(m_CMakeInstance->GetStartDirectory()); - lg->GetMakefile()->SetStartOutputDirectory(m_CMakeInstance->GetStartOutputDirectory()); - lg->GetMakefile()->MakeStartDirectoriesCurrent(); - - // for each existing language call enable Language - std::map::const_iterator i = - gen->m_LanguageEnabled.begin(); - for (;i != gen->m_LanguageEnabled.end(); ++i) + this->SetConfiguredFilesPath( + gen->GetCMakeInstance()->GetHomeOutputDirectory()); + const char* make = + gen->GetCMakeInstance()->GetCacheDefinition("CMAKE_MAKE_PROGRAM"); + this->GetCMakeInstance()->AddCacheEntry("CMAKE_MAKE_PROGRAM", make, + "make program", + cmCacheManager::FILEPATH); + // if C, then enable C + if(gen->GetLanguageEnabled("C")) { - this->EnableLanguage(i->first.c_str(),lg->GetMakefile()); + this->SetLanguageEnabled("C"); + } + + // if CXX + if(gen->GetLanguageEnabled("CXX")) + { + this->SetLanguageEnabled("CXX"); } - delete lg; } diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 11f37046c..ee2a1cb74 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -74,7 +74,7 @@ public: * Try to determine system infomation such as shared library * extension, pthreads, byte order etc. */ - virtual void EnableLanguage(const char*, cmMakefile *) {}; + virtual void EnableLanguage(const char*, cmMakefile *); /** * Try to determine system infomation, get it from another generator @@ -99,6 +99,7 @@ public: void SetConfiguredFilesPath(const char* s){m_ConfiguredFilesPath = s;} protected: + cmStdString m_FindMakeProgramFile; cmStdString m_ConfiguredFilesPath; cmake *m_CMakeInstance; std::vector m_LocalGenerators; diff --git a/Source/cmGlobalNMakeMakefileGenerator.cxx b/Source/cmGlobalNMakeMakefileGenerator.cxx index 318b42885..abf34262c 100644 --- a/Source/cmGlobalNMakeMakefileGenerator.cxx +++ b/Source/cmGlobalNMakeMakefileGenerator.cxx @@ -18,21 +18,18 @@ #include "cmLocalUnixMakefileGenerator.h" #include "cmMakefile.h" + +cmGlobalNMakeMakefileGenerator::cmGlobalNMakeMakefileGenerator() +{ + m_FindMakeProgramFile = "CMakeNMakeFindMake.cmake"; +} + void cmGlobalNMakeMakefileGenerator::EnableLanguage(const char* l, cmMakefile *mf) { // pick a default mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); - if(!mf->GetDefinition("CMAKE_MAKE_PROGRAM") - || cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM"))) - { - std::string setMakeProgram = mf->GetDefinition("CMAKE_ROOT"); - setMakeProgram += "/Modules/CMakeNMakeFindMake.cmake"; - mf->ReadListFile(0, setMakeProgram.c_str()); - } - - this->cmGlobalUnixMakefileGenerator::EnableLanguage(l, mf); } diff --git a/Source/cmGlobalNMakeMakefileGenerator.h b/Source/cmGlobalNMakeMakefileGenerator.h index c125cba57..1c233c6c3 100644 --- a/Source/cmGlobalNMakeMakefileGenerator.h +++ b/Source/cmGlobalNMakeMakefileGenerator.h @@ -27,6 +27,7 @@ class cmGlobalNMakeMakefileGenerator : public cmGlobalUnixMakefileGenerator { public: + cmGlobalNMakeMakefileGenerator(); ///! Get the name for the generator. virtual const char* GetName() { return cmGlobalNMakeMakefileGenerator::GetActualName();} diff --git a/Source/cmGlobalUnixMakefileGenerator.cxx b/Source/cmGlobalUnixMakefileGenerator.cxx index 5132f2516..7f68d2163 100644 --- a/Source/cmGlobalUnixMakefileGenerator.cxx +++ b/Source/cmGlobalUnixMakefileGenerator.cxx @@ -20,130 +20,15 @@ #include "cmMakefile.h" #include "cmake.h" +cmGlobalUnixMakefileGenerator::cmGlobalUnixMakefileGenerator() +{ + m_FindMakeProgramFile = "CMakeUnixFindMake.cmake"; +} + void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang, cmMakefile *mf) { - if(!mf->GetDefinition("CMAKE_MAKE_PROGRAM") - || cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM"))) - { - std::string setMakeProgram = mf->GetDefinition("CMAKE_ROOT"); - setMakeProgram += "/Modules/CMakeUnixFindMake.cmake"; - mf->ReadListFile(0, setMakeProgram.c_str()); - } - - bool isLocal = m_CMakeInstance->GetLocal(); - // if no lang specified use CXX - if(!lang ) - { - lang = "CXX"; - } - std::string root = mf->GetDefinition("CMAKE_ROOT"); - std::string rootBin = mf->GetHomeOutputDirectory(); - if(m_ConfiguredFilesPath.size()) - { - rootBin = m_ConfiguredFilesPath; - } - bool needCBackwards = false; - bool needCXXBackwards = false; - - // check for a C compiler and configure it - if(!isLocal && - !this->GetLanguageEnabled("C") && - lang[0] == 'C') - { - if (m_CMakeInstance->GetIsInTryCompile()) - { - cmSystemTools::Error("This should not have happen. " - "If you see this message, you are probably using a " - "broken CMakeLists.txt file or a problematic release of " - "CMake"); - } - needCBackwards = true; - // Read the DetermineSystem file - std::string systemFile = root; - systemFile += "/Modules/CMakeDetermineSystem.cmake"; - mf->ReadListFile(0, systemFile.c_str()); - // read determine C compiler - std::string determineCFile = root; - determineCFile += "/Modules/CMakeDetermineCCompiler.cmake"; - mf->ReadListFile(0,determineCFile.c_str()); - this->SetLanguageEnabled("C"); - } - - // check for a CXX compiler and configure it - if(!isLocal && - !this->GetLanguageEnabled("CXX") && - strcmp(lang, "CXX") == 0) - { - needCXXBackwards = true; - std::string determineCFile = root; - determineCFile += "/Modules/CMakeDetermineCXXCompiler.cmake"; - mf->ReadListFile(0,determineCFile.c_str()); - this->SetLanguageEnabled("CXX"); - } - - - std::string fpath = rootBin; - if(!mf->GetDefinition("CMAKE_SYSTEM_LOADED")) - { - fpath += "/CMakeSystem.cmake"; - mf->ReadListFile(0,fpath.c_str()); - } - // if C, then enable C - if(lang[0] == 'C' && !mf->GetDefinition("CMAKE_C_COMPILER_LOADED")) - { - fpath = rootBin; - fpath += "/CMakeCCompiler.cmake"; - mf->ReadListFile(0,fpath.c_str()); - } - if(strcmp(lang, "CXX") == 0 && !mf->GetDefinition("CMAKE_CXX_COMPILER_LOADED")) - { - fpath = rootBin; - fpath += "/CMakeCXXCompiler.cmake"; - mf->ReadListFile(0,fpath.c_str()); - } - if(!mf->GetDefinition("CMAKE_SYSTEM_SPECIFIC_INFORMATION_LOADED")) - { - fpath = root; - fpath += "/Modules/CMakeSystemSpecificInformation.cmake"; - mf->ReadListFile(0,fpath.c_str()); - } - - if(!isLocal) - { - // At this point we should have enough info for a try compile - // which is used in the backward stuff - if(needCBackwards) - { - if (!m_CMakeInstance->GetIsInTryCompile()) - { - // for old versions of CMake ListFiles - const char* versionValue - = mf->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"); - if (!versionValue || atof(versionValue) <= 1.4) - { - std::string ifpath = root + "/Modules/CMakeBackwardCompatibilityC.cmake"; - mf->ReadListFile(0,ifpath.c_str()); - } - } - } - if(needCXXBackwards) - { - if (!m_CMakeInstance->GetIsInTryCompile()) - { - // for old versions of CMake ListFiles - const char* versionValue - = mf->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"); - if (!versionValue || atof(versionValue) <= 1.4) - { - std::string fpath = root + "/Modules/CMakeBackwardCompatibilityCXX.cmake"; - mf->ReadListFile(0,fpath.c_str()); - } - } - } - // if we are from the top, always define this - mf->AddDefinition("RUN_CONFIGURE", true); - } + this->cmGlobalGenerator::EnableLanguage(lang, mf); } ///! Create a local generator appropriate to this Global Generator @@ -154,24 +39,3 @@ cmLocalGenerator *cmGlobalUnixMakefileGenerator::CreateLocalGenerator() return lg; } -void cmGlobalUnixMakefileGenerator::EnableLanguagesFromGenerator(cmGlobalGenerator *gen) -{ - this->SetConfiguredFilesPath( - gen->GetCMakeInstance()->GetHomeOutputDirectory()); - const char* make = - gen->GetCMakeInstance()->GetCacheDefinition("CMAKE_MAKE_PROGRAM"); - this->GetCMakeInstance()->AddCacheEntry("CMAKE_MAKE_PROGRAM", make, - "make program", - cmCacheManager::FILEPATH); - // if C, then enable C - if(gen->GetLanguageEnabled("C")) - { - this->SetLanguageEnabled("C"); - } - - // if CXX - if(gen->GetLanguageEnabled("CXX")) - { - this->SetLanguageEnabled("CXX"); - } -} diff --git a/Source/cmGlobalUnixMakefileGenerator.h b/Source/cmGlobalUnixMakefileGenerator.h index 895b6a1d5..43abe5716 100644 --- a/Source/cmGlobalUnixMakefileGenerator.h +++ b/Source/cmGlobalUnixMakefileGenerator.h @@ -27,6 +27,7 @@ class cmGlobalUnixMakefileGenerator : public cmGlobalGenerator { public: + cmGlobalUnixMakefileGenerator(); ///! Get the name for the generator. virtual const char* GetName() { return cmGlobalUnixMakefileGenerator::GetActualName();} @@ -41,11 +42,6 @@ public: */ virtual void EnableLanguage(const char*, cmMakefile *mf); - /** - * Try to determine system infomation, get it from another generator - */ - virtual void EnableLanguagesFromGenerator(cmGlobalGenerator *); - }; #endif diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index ac5bd77a3..a3d5f846d 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -19,24 +19,15 @@ #include "cmMakefile.h" #include "cmake.h" -void cmGlobalVisualStudio6Generator::EnableLanguage(const char*, +cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator() +{ + m_FindMakeProgramFile = "CMakeVS6FindMake.cmake"; +} + +void cmGlobalVisualStudio6Generator::EnableLanguage(const char* lang, cmMakefile *mf) { - // now load the settings - if(!mf->GetDefinition("CMAKE_ROOT")) - { - cmSystemTools::Error( - "CMAKE_ROOT has not been defined, bad GUI or driver program"); - return; - } - if(!this->GetLanguageEnabled("CXX")) - { - std::string fpath = - mf->GetDefinition("CMAKE_ROOT"); - fpath += "/Templates/CMakeWindowsSystemConfig.cmake"; - mf->ReadListFile(NULL,fpath.c_str()); - this->SetLanguageEnabled("CXX"); - } + this->cmGlobalGenerator::EnableLanguage(lang, mf); } int cmGlobalVisualStudio6Generator::TryCompile(const char *, @@ -63,7 +54,6 @@ int cmGlobalVisualStudio6Generator::TryCompile(const char *, */ std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); cmSystemTools::ChangeDirectory(bindir); - // if there are spaces in the makeCommand, assume a full path // and convert it to a path with no spaces in it as the // RunCommand does not like spaces @@ -85,7 +75,6 @@ int cmGlobalVisualStudio6Generator::TryCompile(const char *, makeCommand += "ALL_BUILD"; } makeCommand += " - Debug\""; - int retVal; if (!cmSystemTools::RunCommand(makeCommand.c_str(), *output, retVal, 0, false)) { diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index b0cbbe510..9e72b85ae 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -29,6 +29,8 @@ class cmTarget; class cmGlobalVisualStudio6Generator : public cmGlobalGenerator { public: + cmGlobalVisualStudio6Generator(); + ///! Get the name for the generator. virtual const char* GetName() { return cmGlobalVisualStudio6Generator::GetActualName();} diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index a005e2d7c..8b61c0855 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -20,26 +20,23 @@ #include "cmake.h" #include "windows.h" -void cmGlobalVisualStudio7Generator::EnableLanguage(const char*, + +cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator() +{ + m_FindMakeProgramFile = "CMakeVS7FindMake.cmake"; +} + + +void cmGlobalVisualStudio7Generator::EnableLanguage(const char* lang, cmMakefile *mf) { - // now load the settings - if(!mf->GetDefinition("CMAKE_ROOT")) - { - cmSystemTools::Error( - "CMAKE_ROOT has not been defined, bad GUI or driver program"); - return; - } - if(!this->GetLanguageEnabled("CXX")) - { - std::string fpath = - mf->GetDefinition("CMAKE_ROOT"); - fpath += "/Templates/CMakeDotNetSystemConfig.cmake"; - mf->ReadListFile(NULL,fpath.c_str()); - this->SetLanguageEnabled("CXX"); - } + mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); + mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); + this->cmGlobalGenerator::EnableLanguage(lang, mf); } + + int cmGlobalVisualStudio7Generator::TryCompile(const char *, const char *bindir, const char *projectName, diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index f71670934..ce87c6b23 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -29,6 +29,7 @@ class cmTarget; class cmGlobalVisualStudio7Generator : public cmGlobalGenerator { public: + cmGlobalVisualStudio7Generator(); ///! Get the name for the generator. virtual const char* GetName() { return cmGlobalVisualStudio7Generator::GetActualName();} diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 3c4a64079..9ec0ece2a 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -737,8 +737,16 @@ void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const cha } } } - std::string extraLinkOptions = - m_Makefile->GetDefinition("CMAKE_EXTRA_LINK_FLAGS"); + std::string extraLinkOptions; + if(target.GetType() == cmTarget::EXECUTABLE) + { + extraLinkOptions = m_Makefile->GetDefinition("CMAKE_EXE_LINKER_FLAGS"); + } + if(target.GetType() == cmTarget::SHARED_LIBRARY) + { + extraLinkOptions = m_Makefile->GetDefinition("CMAKE_SHARED_LINKER_FLAGS"); + } + if(extraLinkOptions.size()) { libOptions += " ";