Browse Source

Merge topic 'cpack-PackageMaker-OSX-10.10'

70abf6e7 CPack: Fix PackageMaker internal versioning for OS X 10.10
Brad King 10 years ago
parent
commit
fa636e19ce

+ 25 - 9
Source/CPack/cmCPackPackageMakerGenerator.cxx

@@ -24,11 +24,20 @@
 #include <cmsys/Glob.hxx>
 #include <cmsys/FStream.hxx>
 
+#include <assert.h>
+
+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<std::string> no_paths;
@@ -712,7 +728,7 @@ GenerateComponentPackage(const char *packageFile,
   // The command that will be used to run PackageMaker
   std::ostringstream 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

+ 1 - 1
Source/CPack/cmCPackPackageMakerGenerator.h

@@ -117,7 +117,7 @@ protected:
   cmCPackComponent PostFlightComponent;
 
   double PackageMakerVersion;
-  double PackageCompatibilityVersion;
+  unsigned int PackageCompatibilityVersion;
 };
 
 #endif