diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2007-12-11 22:28:45 -0500 |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2007-12-11 22:28:45 -0500 |
commit | a002ea788dcb9b9f3cfc71212866d549f34a7004 (patch) | |
tree | bfc0fe2636e340148378c49570eb6b6e0ae1ae73 | |
parent | 78a2c407ed5e215db2f3b17227b42de42555cdea (diff) | |
download | cmake-a002ea788dcb9b9f3cfc71212866d549f34a7004.tar.gz |
ENH: changes for RC5
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | ChangeLog.manual | 8 | ||||
-rw-r--r-- | Modules/FindJNI.cmake | 24 | ||||
-rw-r--r-- | Modules/FindPerlLibs.cmake | 5 | ||||
-rw-r--r-- | Modules/InstallRequiredSystemLibraries.cmake | 62 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio6Generator.cxx | 8 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.cxx | 91 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.h | 6 | ||||
-rw-r--r-- | Source/cmTryCompileCommand.cxx | 3 |
9 files changed, 158 insertions, 51 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 993facbc5c..ec53bfdbec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ SET(CMake_VERSION_MAJOR 2) SET(CMake_VERSION_MINOR 4) SET(CMake_VERSION_PATCH 8) # for an actual release this should not be defined -SET(CMake_VERSION_RC 4) +SET(CMake_VERSION_RC 5) SET(CMake_VERSION "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") SET(CMake_VERSION_FULL "${CMake_VERSION}.${CMake_VERSION_PATCH}") diff --git a/ChangeLog.manual b/ChangeLog.manual index e2a5d0af4d..7adfd12da4 100644 --- a/ChangeLog.manual +++ b/ChangeLog.manual @@ -1,3 +1,11 @@ +Changes in CMake 2.4.8 RC 5 +* Fix bug 6106 FindPerlLibs.cmake missing escaped $ +* Allow NODEFAULTLIBS to have more than one value +* Suppress regeneration of makefiles during try compile avoid infinite + loop in trycompile with some vs 2005 builds. +* Rest of Fix for fix 5363, removes warning on vs 6 +* Allow for debug libraries in InstallRequiredSystemLibraries.cmake for vs8 +* Fix for bug 4605 JavaEmbedding.framework should not be used. Changes in CMake 2.4.8 RC 4 * fix for cpack and messing up PATH with NSIS Changes in CMake 2.4.8 RC 3 diff --git a/Modules/FindJNI.cmake b/Modules/FindJNI.cmake index 45e6c2037b..80bf327148 100644 --- a/Modules/FindJNI.cmake +++ b/Modules/FindJNI.cmake @@ -6,7 +6,7 @@ # JAVA_AWT_LIB_PATH = the path to the jawt library # JAVA_JVM_LIB_PATH = the path to the jvm library # JAVA_INCLUDE_PATH = the include path to jni.h -# JAVA_INCLUDE_PATH2 = the include path to jni.h +# JAVA_INCLUDE_PATH2 = the include path to jni_md.h # JAVA_AWT_INCLUDE_PATH = the include path to jawt.h # @@ -79,17 +79,33 @@ IF(APPLE) IF(EXISTS /Library/Frameworks/JavaVM.framework) SET(JAVA_HAVE_FRAMEWORK 1) ENDIF(EXISTS /Library/Frameworks/JavaVM.framework) + IF(EXISTS /System/Library/Frameworks/JavaVM.framework) + SET(JAVA_HAVE_FRAMEWORK 1) + ENDIF(EXISTS /System/Library/Frameworks/JavaVM.framework) + IF(JAVA_HAVE_FRAMEWORK) IF(NOT JAVA_AWT_LIBRARY) SET (JAVA_AWT_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE) ENDIF(NOT JAVA_AWT_LIBRARY) + IF(NOT JAVA_JVM_LIBRARY) SET (JAVA_JVM_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE) ENDIF(NOT JAVA_JVM_LIBRARY) - SET(JAVA_AWT_INCLUDE_DIRECTORIES ${JAVA_AWT_INCLUDE_DIRECTORIES} + + IF(NOT JAVA_AWT_INCLUDE_PATH) + IF(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h) + SET (JAVA_AWT_INCLUDE_PATH "/System/Library/Frameworks/JavaVM.framework/Headers" CACHE FILEPATH "jawt.h location" FORCE) + ENDIF(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h) + ENDIF(NOT JAVA_AWT_INCLUDE_PATH) + + # If using "-framework JavaVM", prefer its headers *before* the others in + # JAVA_AWT_INCLUDE_DIRECTORIES... (*prepend* to the list here) + # + SET(JAVA_AWT_INCLUDE_DIRECTORIES ~/Library/Frameworks/JavaVM.framework/Headers /Library/Frameworks/JavaVM.framework/Headers /System/Library/Frameworks/JavaVM.framework/Headers + ${JAVA_AWT_INCLUDE_DIRECTORIES} ) ENDIF(JAVA_HAVE_FRAMEWORK) ELSE(APPLE) @@ -113,7 +129,9 @@ FIND_PATH(JAVA_INCLUDE_PATH2 jni_md.h ) FIND_PATH(JAVA_AWT_INCLUDE_PATH jawt.h - ${JAVA_AWT_INCLUDE_DIRECTORIES} ${JAVA_INCLUDE_PATH} ) + ${JAVA_AWT_INCLUDE_DIRECTORIES} + ${JAVA_INCLUDE_PATH} +) MARK_AS_ADVANCED( JAVA_AWT_LIBRARY diff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake index 1cfe7ef4c0..70fbe1d246 100644 --- a/Modules/FindPerlLibs.cmake +++ b/Modules/FindPerlLibs.cmake @@ -32,7 +32,7 @@ FIND_PROGRAM(PERL_EXECUTABLE IF(PERL_EXECUTABLE) EXEC_PROGRAM(${PERL_EXECUTABLE} - ARGS -e "'use Config; print $Config{libperl}, \"\\n\"'" + ARGS -e "'use Config; print \$Config{libperl}, \"\\n\"'" OUTPUT_VARIABLE PERL_LIBRARY_OUTPUT_VARIABLE RETURN_VALUE PERL_LIBRARY_RETURN_VALUE ) @@ -42,13 +42,12 @@ IF(PERL_EXECUTABLE) ENDFOREACH(path ${PERL_POSSIBLE_LIB_PATHS}) ENDIF(NOT PERL_LIBRARY_RETURN_VALUE) EXEC_PROGRAM(${PERL_EXECUTABLE} - ARGS -e "'use Config; print $Config{cppflags}, \"\\n\"'" + ARGS -e "'use Config; print \$Config{cppflags}, \"\\n\"'" OUTPUT_VARIABLE PERL_CPPFLAGS_OUTPUT_VARIABLE RETURN_VALUE PERL_CPPFLAGS_RETURN_VALUE ) IF(NOT PERL_CPPFLAGS_RETURN_VALUE) SET(PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE}) - SEPARATE_ARGUMENTS(PERL_EXTRA_C_FLAGS) ENDIF(NOT PERL_CPPFLAGS_RETURN_VALUE) ENDIF(PERL_EXECUTABLE) diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index d824ade8fe..b8094f2c2d 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -1,7 +1,17 @@ -# Hack for Visual Studio support -# Search for system runtime libraries based on the platform. This is -# not complete because it is used only for the release process by the -# developers. +# By including this file, all files in the CMAKE_INSTALL_DEBUG_LIBRARIES, +# will be installed with INSTALL_PROGRAMS into /bin for WIN32 and /lib +# for non-win32. If CMAKE_SKIP_INSTALL_RULES is set to TRUE before including +# this file, then the INSTALL command is not called. The use can use +# the variable CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS to use a custom install +# command and install them into any directory they want. +# If it is the MSVC compiler, then the microsoft run +# time libraries will be found add automatically added to the +# CMAKE_INSTALL_DEBUG_LIBRARIES, and installed. +# If CMAKE_INSTALL_DEBUG_LIBRARIES is set and it is the MSVC +# compiler, then the debug libraries are installed when available. +# If CMAKE_INSTALL_MFC_LIBRARIES is set then the MFC run time +# libraries are installed as well as the CRT run time libraries. + IF(MSVC) FILE(TO_CMAKE_PATH "$ENV{SYSTEMROOT}" SYSTEMROOT) IF(MSVC70) @@ -32,6 +42,18 @@ IF(MSVC) "${MSVC80_CRT_DIR}/msvcp80.dll" "${MSVC80_CRT_DIR}/msvcr80.dll" ) + + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC80_CRT_DIR + "${MSVC80_REDIST_DIR}/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT") + SET(__install__libs ${__install__libs} + "${MSVC80_CRT_DIR}/Microsoft.VC80.DebugCRT.manifest" + "${MSVC80_CRT_DIR}/msvcm80d.dll" + "${MSVC80_CRT_DIR}/msvcp80d.dll" + "${MSVC80_CRT_DIR}/msvcr80d.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + ENDIF(MSVC80) IF(CMAKE_INSTALL_MFC_LIBRARIES) IF(MSVC70) @@ -45,6 +67,18 @@ IF(MSVC) ) ENDIF(MSVC71) IF(MSVC80) + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC80_MFC_DIR + "${MSVC80_REDIST_DIR}/Debug_NonRedist/x86/Microsoft.VC80.DebugMFC") + SET(__install__libs ${__install__libs} + "${MSVC80_MFC_DIR}/Microsoft.VC80.DebugMFC.manifest" + "${MSVC80_MFC_DIR}/mfc80d.dll" + "${MSVC80_MFC_DIR}/mfc80ud.dll" + "${MSVC80_MFC_DIR}/mfcm80d.dll" + "${MSVC80_MFC_DIR}/mfcm80ud.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC80_MFC_DIR "${MSVC80_REDIST_DIR}/x86/Microsoft.VC80.MFC") # Install the manifest that allows DLLs to be loaded from the # directory containing the executable. @@ -56,6 +90,24 @@ IF(MSVC) "${MSVC80_MFC_DIR}/mfcm80u.dll" ) ENDIF(MSVC80) + IF(MSVC80) + # include the language dll's for vs8 as well as the actuall dll's + SET(MSVC80_MFCLOC_DIR "${MSVC80_REDIST_DIR}/x86/Microsoft.VC80.MFCLOC") + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + SET(__install__libs ${__install__libs} + "${MSVC80_MFCLOC_DIR}/Microsoft.VC80.MFCLOC.manifest" + "${MSVC80_MFCLOC_DIR}/mfc80chs.dll" + "${MSVC80_MFCLOC_DIR}/mfc80cht.dll" + "${MSVC80_MFCLOC_DIR}/mfc80enu.dll" + "${MSVC80_MFCLOC_DIR}/mfc80esp.dll" + "${MSVC80_MFCLOC_DIR}/mfc80deu.dll" + "${MSVC80_MFCLOC_DIR}/mfc80fra.dll" + "${MSVC80_MFCLOC_DIR}/mfc80ita.dll" + "${MSVC80_MFCLOC_DIR}/mfc80jpn.dll" + "${MSVC80_MFCLOC_DIR}/mfc80kor.dll" + ) + ENDIF(MSVC80) ENDIF(CMAKE_INSTALL_MFC_LIBRARIES) FOREACH(lib ${__install__libs} @@ -70,11 +122,13 @@ ENDIF(MSVC) # Include system runtime libraries in the installation if any are # specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS. IF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS) + IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP) IF(WIN32) INSTALL_PROGRAMS(/bin ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}) ELSE(WIN32) INSTALL_PROGRAMS(/lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}) ENDIF(WIN32) + ENDIF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP) ENDIF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS) diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 47de71aecd..3a5c0708ce 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -588,6 +588,11 @@ cmLocalVisualStudio6Generator std::vector<std::string>::iterator i; for(i = this->Configurations.begin(); i != this->Configurations.end(); ++i) { + // Strip the subdirectory name out of the configuration name. + std::string config = *i; + std::string::size_type pos = config.find_last_of(" "); + config = config.substr(pos+1, std::string::npos); + config = config.substr(0, config.size()-1); if (i == this->Configurations.begin()) { fout << "!IF \"$(CFG)\" == " << i->c_str() << std::endl; @@ -606,7 +611,8 @@ cmLocalVisualStudio6Generator d != depends.end(); ++d) { // Lookup the real name of the dependency in case it is a CMake target. - std::string dep = this->GetRealDependency(d->c_str(), i->c_str()); + std::string dep = this->GetRealDependency(d->c_str(), + config.c_str()); fout << "\\\n\t" << this->ConvertToOptionallyRelativeOutputPath(dep.c_str()); } diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 023bb7bd05..7443f08444 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -382,7 +382,7 @@ cmVS7FlagTable cmLocalVisualStudio7GeneratorLinkFlagTable[] = {"LinkIncremental", "INCREMENTAL:NO", "link incremental", "1", 0}, {"LinkIncremental", "INCREMENTAL:YES", "link incremental", "2", 0}, {"IgnoreDefaultLibraryNames", "NODEFAULTLIB:", "default libs to ignore", "", - cmVS7FlagTable::UserValue}, + cmVS7FlagTable::UserValue | cmVS7FlagTable::SemicolonAppendable}, {"IgnoreAllDefaultLibraries", "NODEFAULTLIB", "ignore all default libs", "TRUE", 0}, {0,0,0,0,0} @@ -1804,51 +1804,68 @@ cmLocalVisualStudio7GeneratorOptions ::CheckFlagTable(cmVS7FlagTable const* table, const char* flag, bool& flag_handled) { - // Look for an entry in the flag table matching this flag. + // Look for an entry in the flag table matching this flag. for(cmVS7FlagTable const* entry = table; entry->IDEName; ++entry) + { + bool entry_found = false; + if(entry->special & cmVS7FlagTable::UserValue) + { + // This flag table entry accepts a user-specified value. If + // the entry specifies UserRequired we must match only if a + // non-empty value is given. + int n = static_cast<int>(strlen(entry->commandFlag)); + if(strncmp(flag+1, entry->commandFlag, n) == 0 && + (!(entry->special & cmVS7FlagTable::UserRequired) || + static_cast<int>(strlen(flag+1)) > n)) { - bool entry_found = false; - if(entry->special & cmVS7FlagTable::UserValue) + if(entry->special & cmVS7FlagTable::UserIgnored) { - // This flag table entry accepts a user-specified value. If - // the entry specifies UserRequired we must match only if a - // non-empty value is given. - int n = static_cast<int>(strlen(entry->commandFlag)); - if(strncmp(flag+1, entry->commandFlag, n) == 0 && - (!(entry->special & cmVS7FlagTable::UserRequired) || - static_cast<int>(strlen(flag+1)) > n)) + // Ignore the user-specified value. + this->FlagMap[entry->IDEName] = entry->value; + } + else if(entry->special & cmVS7FlagTable::SemicolonAppendable) + { + const char *new_value = flag+1+n; + + std::map<cmStdString,cmStdString>::iterator itr; + itr = this->FlagMap.find(entry->IDEName); + if(itr != this->FlagMap.end()) { - if(entry->special & cmVS7FlagTable::UserIgnored) - { - // Ignore the user-specified value. - this->FlagMap[entry->IDEName] = entry->value; - } - else - { - // Use the user-specified value. - this->FlagMap[entry->IDEName] = flag+1+n; - } - entry_found = true; + // Append to old value (if present) with semicolons; + itr->second += ";"; + itr->second += new_value; + } + else + { + this->FlagMap[entry->IDEName] = new_value; } } - else if(strcmp(flag+1, entry->commandFlag) == 0) - { - // This flag table entry provides a fixed value. - this->FlagMap[entry->IDEName] = entry->value; - entry_found = true; - } - - // If the flag has been handled by an entry not requesting a - // search continuation we are done. - if(entry_found && !(entry->special & cmVS7FlagTable::Continue)) + else { - return true; + // Use the user-specified value. + this->FlagMap[entry->IDEName] = flag+1+n; } - - // If the entry was found the flag has been handled. - flag_handled = flag_handled || entry_found; + entry_found = true; } - + } + else if(strcmp(flag+1, entry->commandFlag) == 0) + { + // This flag table entry provides a fixed value. + this->FlagMap[entry->IDEName] = entry->value; + entry_found = true; + } + + // If the flag has been handled by an entry not requesting a + // search continuation we are done. + if(entry_found && !(entry->special & cmVS7FlagTable::Continue)) + { + return true; + } + + // If the entry was found the flag has been handled. + flag_handled = flag_handled || entry_found; + } + return false; } diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h index 8bd1e6b7c6..59e39fefd6 100644 --- a/Source/cmLocalVisualStudio7Generator.h +++ b/Source/cmLocalVisualStudio7Generator.h @@ -144,7 +144,11 @@ struct cmVS7FlagTable UserIgnored = (1<<1), // ignore any user value UserRequired = (1<<2), // match only when user value is non-empty Continue = (1<<3), // continue looking for matching entries - + SemicolonAppendable = (1<<4), // a flag that if specified multiple times + // should have its value appended to the + // old value with semicolons (e.g. + // /NODEFAULTLIB: => + // IgnoreDefaultLibraryNames) UserValueIgnored = UserValue | UserIgnored, UserValueRequired = UserValue | UserRequired }; diff --git a/Source/cmTryCompileCommand.cxx b/Source/cmTryCompileCommand.cxx index d299162814..3d9859cf44 100644 --- a/Source/cmTryCompileCommand.cxx +++ b/Source/cmTryCompileCommand.cxx @@ -192,7 +192,8 @@ int cmTryCompileCommand::CoreTryCompileCode( fprintf(fout, " %s ", flags); } fprintf(fout, " ${COMPILE_DEFINITIONS}\")\n"); - fprintf(fout, "INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES})\n"); + fprintf(fout, "INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES})\n"); + fprintf(fout, "SET(CMAKE_SUPPRESS_REGENERATION 1)\n"); fprintf(fout, "LINK_DIRECTORIES(${LINK_DIRECTORIES})\n"); // handle any compile flags we need to pass on if (compileFlags.size()) |