From 70abf6e780185c9c7041593bc99aff0a26bc9265 Mon Sep 17 00:00:00 2001 From: Calin Cascaval Date: Fri, 26 Dec 2014 09:48:53 -0800 Subject: [PATCH] CPack: Fix PackageMaker internal versioning for OS X 10.10 Avoid using a floating point value to represent the version, since "10.10" would be treated as "10.1". --- Source/CPack/cmCPackPackageMakerGenerator.cxx | 34 ++++++++++++++----- Source/CPack/cmCPackPackageMakerGenerator.h | 2 +- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Source/CPack/cmCPackPackageMakerGenerator.cxx b/Source/CPack/cmCPackPackageMakerGenerator.cxx index d736948a28..e58415cc10 100644 --- a/Source/CPack/cmCPackPackageMakerGenerator.cxx +++ b/Source/CPack/cmCPackPackageMakerGenerator.cxx @@ -24,11 +24,20 @@ #include #include +#include + +static inline +unsigned int getVersion(unsigned int major, unsigned int minor) +{ + assert(major < 256 && minor < 256); + return ((major & 0xFF) << 16 | minor); +} + //---------------------------------------------------------------------- cmCPackPackageMakerGenerator::cmCPackPackageMakerGenerator() { this->PackageMakerVersion = 0.0; - this->PackageCompatibilityVersion = 10.4; + this->PackageCompatibilityVersion = getVersion(10, 4); } //---------------------------------------------------------------------- @@ -39,7 +48,7 @@ cmCPackPackageMakerGenerator::~cmCPackPackageMakerGenerator() //---------------------------------------------------------------------- bool cmCPackPackageMakerGenerator::SupportsComponentInstallation() const { - return this->PackageCompatibilityVersion >= 10.4; + return this->PackageCompatibilityVersion >= getVersion(10, 4); } //---------------------------------------------------------------------- @@ -241,7 +250,7 @@ int cmCPackPackageMakerGenerator::PackageFiles() std::string packageFile; if (compIt->second.IsDownloaded) { - if (this->PackageCompatibilityVersion >= 10.5 && + if (this->PackageCompatibilityVersion >= getVersion(10, 5) && this->PackageMakerVersion >= 3.0) { // Build this package within the upload directory. @@ -260,7 +269,7 @@ int cmCPackPackageMakerGenerator::PackageFiles() } else if (!warnedAboutDownloadCompatibility) { - if (this->PackageCompatibilityVersion < 10.5) + if (this->PackageCompatibilityVersion < getVersion(10, 5)) { cmCPackLogger( cmCPackLog::LOG_WARNING, @@ -520,22 +529,29 @@ int cmCPackPackageMakerGenerator::InitializeInternal() const char *packageCompat = this->GetOption("CPACK_OSX_PACKAGE_VERSION"); if (packageCompat && *packageCompat) { - this->PackageCompatibilityVersion = atof(packageCompat); + unsigned int majorVersion = 10; + unsigned int minorVersion = 5; + int res = sscanf(packageCompat, "%u.%u", &majorVersion, &minorVersion); + if (res == 2) + { + this->PackageCompatibilityVersion = + getVersion(majorVersion, minorVersion); + } } else if (this->GetOption("CPACK_DOWNLOAD_SITE")) { this->SetOption("CPACK_OSX_PACKAGE_VERSION", "10.5"); - this->PackageCompatibilityVersion = 10.5; + this->PackageCompatibilityVersion = getVersion(10, 5); } else if (this->GetOption("CPACK_COMPONENTS_ALL")) { this->SetOption("CPACK_OSX_PACKAGE_VERSION", "10.4"); - this->PackageCompatibilityVersion = 10.4; + this->PackageCompatibilityVersion = getVersion(10, 4); } else { this->SetOption("CPACK_OSX_PACKAGE_VERSION", "10.3"); - this->PackageCompatibilityVersion = 10.3; + this->PackageCompatibilityVersion = getVersion(10, 3); } std::vector no_paths; @@ -712,7 +728,7 @@ GenerateComponentPackage(const char *packageFile, // The command that will be used to run PackageMaker cmOStringStream pkgCmd; - if (this->PackageCompatibilityVersion < 10.5 || + if (this->PackageCompatibilityVersion < getVersion(10, 5) || this->PackageMakerVersion < 3.0) { // Create Description.plist and Info.plist files for normal Mac OS diff --git a/Source/CPack/cmCPackPackageMakerGenerator.h b/Source/CPack/cmCPackPackageMakerGenerator.h index e350a609df..4f9e2a8be1 100644 --- a/Source/CPack/cmCPackPackageMakerGenerator.h +++ b/Source/CPack/cmCPackPackageMakerGenerator.h @@ -117,7 +117,7 @@ protected: cmCPackComponent PostFlightComponent; double PackageMakerVersion; - double PackageCompatibilityVersion; + unsigned int PackageCompatibilityVersion; }; #endif