From 28805109bcdea33933e889801a065fd1484b0547 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 10 Feb 2014 15:31:40 -0500 Subject: cmStandardIncludes: Include cmIML/INT.h for portable integer types Also teach the bootstrap script to configure the needed headers. --- Source/cmStandardIncludes.h | 3 +++ bootstrap | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Source/cmStandardIncludes.h b/Source/cmStandardIncludes.h index ebfa8f9..b4ae657 100644 --- a/Source/cmStandardIncludes.h +++ b/Source/cmStandardIncludes.h @@ -40,6 +40,9 @@ #pragma warning ( disable : 1572 ) /* floating-point equality test */ #endif +// Provide fixed-size integer types. +#include + #include // Work-around for SGI MIPSpro 7.4.2m header bug // This is a hack to prevent warnings about these functions being diff --git a/bootstrap b/bootstrap index c0a3e3b..d654cb9 100755 --- a/bootstrap +++ b/bootstrap @@ -357,6 +357,11 @@ KWSYS_IOS_FILES=" iostream \ sstream" +KWIML_FILES=' + ABI.h + INT.h +' + # Display CMake bootstrap usage cmake_usage() { @@ -705,6 +710,11 @@ for a in stl ios; do fi done +[ -d "cmIML" ] || mkdir "cmIML" +if [ ! -d "cmIML" ]; then + cmake_error 12 "Cannot create directory ${cmake_bootstrap_dir}/cmIML" +fi + # Delete all the bootstrap files rm -f "${cmake_bootstrap_dir}/cmake_bootstrap.log" rm -f "${cmake_bootstrap_dir}/cmConfigure.h${_tmp}" @@ -1500,6 +1510,11 @@ for a in string vector set map algorithm; do "${cmake_bootstrap_dir}/cmsys/stl/${a}" KWSYS_STL_HEADER ${a} done +for a in ${KWIML_FILES}; do + cmake_replace_string "${cmake_source_dir}/Utilities/KWIML/${a}.in" \ + "${cmake_bootstrap_dir}/cmIML/${a}" KWIML cmIML +done + # Generate Makefile dep="cmConfigure.h cmsys/*.hxx cmsys/*.h `cmake_escape \"${cmake_source_dir}\"`/Source/*.h" objs="" -- cgit v0.12 From d2059d25114b53c1e7531704b3e955c6853a355e Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 10 Feb 2014 14:52:59 -0500 Subject: cmVersion: Fix CMake_VERSION_ENCODE for date in patch level Use a uint64_t to store encoded version numbers so we have plenty of bits available. Encode with room for up to 1000 minor releases between major releases and to encode dates until the year 10000 in the patch level. This is necessary because CMake development versions prior to release 2.8.0 used the date in the patch level, and this practice may be restored after the 3.0 release. --- Source/cmCacheManager.cxx | 2 +- Source/cmFindPackageCommand.h | 2 +- Source/cmLocalGenerator.cxx | 4 ++-- Source/cmLocalGenerator.h | 4 ++-- Source/cmVersion.h | 7 ++++++- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx index d3d8f3f..9e0064e 100644 --- a/Source/cmCacheManager.cxx +++ b/Source/cmCacheManager.cxx @@ -930,7 +930,7 @@ bool cmCacheManager::NeedCacheCompatibility(int major, int minor) // Compatibility is needed if the cache version is equal to or lower // than the given version. - unsigned int actual_compat = + cmIML_INT_uint64_t actual_compat = CMake_VERSION_ENCODE(this->CacheMajorVersion, this->CacheMinorVersion, 0); return (actual_compat && actual_compat <= CMake_VERSION_ENCODE(major, minor, 0)); diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h index 7ceebb2..0d80e48 100644 --- a/Source/cmFindPackageCommand.h +++ b/Source/cmFindPackageCommand.h @@ -114,7 +114,7 @@ private: unsigned int VersionFoundPatch; unsigned int VersionFoundTweak; unsigned int VersionFoundCount; - unsigned int RequiredCMakeVersion; + cmIML_INT_uint64_t RequiredCMakeVersion; bool Quiet; bool Required; bool UseConfigFiles; diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index a2a66ae..b8b7035 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -3345,7 +3345,7 @@ cmLocalGenerator::GetTargetDirectory(cmTarget const&) const } //---------------------------------------------------------------------------- -unsigned int cmLocalGenerator::GetBackwardsCompatibility() +cmIML_INT_uint64_t cmLocalGenerator::GetBackwardsCompatibility() { // The computed version may change until the project is fully // configured. @@ -3398,7 +3398,7 @@ bool cmLocalGenerator::NeedBackwardsCompatibility_2_4() // Compatibility is needed if CMAKE_BACKWARDS_COMPATIBILITY is set // equal to or lower than the given version. - unsigned int actual_compat = this->GetBackwardsCompatibility(); + cmIML_INT_uint64_t actual_compat = this->GetBackwardsCompatibility(); return (actual_compat && actual_compat <= CMake_VERSION_ENCODE(2, 4, 255)); } diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index ad662d5..9764813 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -321,7 +321,7 @@ public: * * and is monotonically increasing with the CMake version. */ - unsigned int GetBackwardsCompatibility(); + cmIML_INT_uint64_t GetBackwardsCompatibility(); /** * Test whether compatibility is set to a given version or lower. @@ -460,7 +460,7 @@ protected: bool RelativePathsConfigured; bool PathConversionsSetup; - unsigned int BackwardsCompatibility; + cmIML_INT_uint64_t BackwardsCompatibility; bool BackwardsCompatibilityFinal; private: std::string ConvertToOutputForExistingCommon(const char* remote, diff --git a/Source/cmVersion.h b/Source/cmVersion.h index e313524..0ab6390 100644 --- a/Source/cmVersion.h +++ b/Source/cmVersion.h @@ -32,8 +32,13 @@ public: static const char* GetCMakeVersion(); }; +/* Encode with room for up to 1000 minor releases between major releases + and to encode dates until the year 10000 in the patch level. */ +#define CMake_VERSION_ENCODE__BASE cmIML_INT_UINT64_C(100000000) #define CMake_VERSION_ENCODE(major, minor, patch) \ - ((major)*0x10000u + (minor)*0x100u + (patch)) + ((((major) * 1000u) * CMake_VERSION_ENCODE__BASE) + \ + (((minor) % 1000u) * CMake_VERSION_ENCODE__BASE) + \ + (((patch) % CMake_VERSION_ENCODE__BASE))) #endif -- cgit v0.12 From 9bcc1b21f05a8f522c5154e163942c6d133bb379 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 10 Feb 2014 11:50:54 -0500 Subject: Export: Fix internal CMake version test logic Fix the internal DEVEL_CMAKE_VERSION macro to use CMake_VERSION_ENCODE to compare version component-wise. Otherwise an old invocation of the macro may be tricked into using the current version when the requested major version is smaller than the current version but the requested minor version is larger. It should use the requested (old) version in that case. --- Source/cmExportInstallFileGenerator.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx index eb7cea9..56c0ec1 100644 --- a/Source/cmExportInstallFileGenerator.cxx +++ b/Source/cmExportInstallFileGenerator.cxx @@ -19,15 +19,17 @@ #include "cmInstallExportGenerator.h" #include "cmInstallTargetGenerator.h" #include "cmTargetExport.h" -#include "cmVersionConfig.h" +#include "cmVersionMacros.h" +#include "cmVersion.h" #define STRINGIFY_HELPER(X) #X #define STRINGIFY(X) STRINGIFY_HELPER(X) #define DEVEL_CMAKE_VERSION(maj, min, patch) \ - (maj > CMake_VERSION_MAJOR \ - || min > CMake_VERSION_MINOR \ - || patch > CMake_VERSION_PATCH) ? \ + (CMake_VERSION_ENCODE(maj, min, patch) > \ + CMake_VERSION_ENCODE(CMake_VERSION_MAJOR, CMake_VERSION_MINOR, \ + CMake_VERSION_PATCH) \ + ) ? \ STRINGIFY(CMake_VERSION_MAJOR) "." STRINGIFY(CMake_VERSION_MINOR) "." \ STRINGIFY(CMake_VERSION_PATCH) "." STRINGIFY(CMake_VERSION_TWEAK) \ : #maj "." #min "." #patch -- cgit v0.12