Browse Source

CPack/DragNDrop: Allow single license for multiple languages

When both CPACK_DMG_SLA_DIR and CPACK_RESOURCE_FILE_LICENSE are defined,
use the license file for all languages instead of looking for a license
file for each language.  Also expand the documentation on the SLA
variables.
Simon Levermann 10 years ago
parent
commit
ae434ee2dd

+ 19 - 1
Modules/CPackDMG.cmake

@@ -49,11 +49,29 @@
 # .. variable:: CPACK_DMG_SLA_DIR
 # .. variable:: CPACK_DMG_SLA_DIR
 #
 #
 #   Directory where license and menu files for different languages are stored.
 #   Directory where license and menu files for different languages are stored.
+#   Setting this causes CPack to look for a ``<language>.menu.txt`` and
+#   ``<language>.license.txt`` file for every language defined in
+#   ``CPACK_DMG_SLA_LANGUAGES``. If both this variable and
+#   ``CPACK_RESOURCE_FILE_LICENSE`` are set, CPack will only look for the menu
+#   files and use the same license file for all languages.
 #
 #
 # .. variable:: CPACK_DMG_SLA_LANGUAGES
 # .. variable:: CPACK_DMG_SLA_LANGUAGES
 #
 #
 #   Languages for which a license agreement is provided when mounting the
 #   Languages for which a license agreement is provided when mounting the
-#   generated DMG.
+#   generated DMG. A menu file consists of 9 lines of text. The first line is
+#   is the name of the language itself, uppercase, in English (e.g. German).
+#   The other lines are translations of the following strings:
+#
+#   - Agree
+#   - Disagree
+#   - Print
+#   - Save...
+#   - You agree to the terms of the License Agreement when you click the
+#     "Agree" button.
+#   - Software License Agreement
+#   - This text cannot be saved. The disk may be full or locked, or the file
+#     may be locked.
+#   - Unable to print. Make sure you have selected a printer.
 #
 #
 #   For every language in this list, CPack will try to find files
 #   For every language in this list, CPack will try to find files
 #   ``<language>.menu.txt`` and ``<language>.license.txt`` in the directory
 #   ``<language>.menu.txt`` and ``<language>.license.txt`` in the directory

+ 16 - 7
Source/CPack/cmCPackDragNDropGenerator.cxx

@@ -69,6 +69,7 @@ static const char* SLASTREnglish =
 
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 cmCPackDragNDropGenerator::cmCPackDragNDropGenerator()
 cmCPackDragNDropGenerator::cmCPackDragNDropGenerator()
+  : singleLicense(false)
 {
 {
   // default to one package file for components
   // default to one package file for components
   this->componentPackageMethod = ONE_PACKAGE;
   this->componentPackageMethod = ONE_PACKAGE;
@@ -131,10 +132,11 @@ int cmCPackDragNDropGenerator::InitializeInternal()
       if(!license_file.empty() &&
       if(!license_file.empty() &&
          (license_file.find("CPack.GenericLicense.txt") == std::string::npos))
          (license_file.find("CPack.GenericLicense.txt") == std::string::npos))
         {
         {
-        cmCPackLogger(cmCPackLog::LOG_WARNING,
+        cmCPackLogger(cmCPackLog::LOG_OUTPUT,
           "Both CPACK_DMG_SLA_DIR and CPACK_RESOURCE_FILE_LICENSE specified, "
           "Both CPACK_DMG_SLA_DIR and CPACK_RESOURCE_FILE_LICENSE specified, "
-          "defaulting to CPACK_DMG_SLA_DIR"
+          "using CPACK_RESOURCE_FILE_LICENSE as a license for all languages."
           << std::endl);
           << std::endl);
+        singleLicense = true;
         }
         }
       }
       }
     if(!this->IsSet("CPACK_DMG_SLA_LANGUAGES"))
     if(!this->IsSet("CPACK_DMG_SLA_LANGUAGES"))
@@ -166,7 +168,7 @@ int cmCPackDragNDropGenerator::InitializeInternal()
     for(size_t i = 0; i < languages.size(); ++i)
     for(size_t i = 0; i < languages.size(); ++i)
       {
       {
       std::string license = slaDirectory + "/" + languages[i] + ".license.txt";
       std::string license = slaDirectory + "/" + languages[i] + ".license.txt";
-      if (!cmSystemTools::FileExists(license))
+      if (!singleLicense && !cmSystemTools::FileExists(license))
         {
         {
         cmCPackLogger(cmCPackLog::LOG_ERROR,
         cmCPackLogger(cmCPackLog::LOG_ERROR,
           "Missing license file " << languages[i] << ".license.txt"
           "Missing license file " << languages[i] << ".license.txt"
@@ -366,7 +368,7 @@ int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir,
 
 
   // use sla_dir if both sla_dir and license_file are set
   // use sla_dir if both sla_dir and license_file are set
   if(!cpack_license_file.empty() &&
   if(!cpack_license_file.empty() &&
-     !slaDirectory.empty())
+     !slaDirectory.empty() && !singleLicense)
     {
     {
     cpack_license_file = "";
     cpack_license_file = "";
     }
     }
@@ -699,7 +701,14 @@ int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir,
       {
       {
       for(size_t i = 0; i < languages.size(); ++i)
       for(size_t i = 0; i < languages.size(); ++i)
         {
         {
-        WriteLicense(ofs, i + 5000, languages[i]);
+        if(singleLicense)
+          {
+          WriteLicense(ofs, i + 5000, languages[i], cpack_license_file);
+          }
+        else
+          {
+          WriteLicense(ofs, i + 5000, languages[i]);
+          }
         }
         }
       }
       }
 
 
@@ -850,7 +859,7 @@ void
 cmCPackDragNDropGenerator::WriteLicense(cmGeneratedFileStream& outputStream,
 cmCPackDragNDropGenerator::WriteLicense(cmGeneratedFileStream& outputStream,
   int licenseNumber, std::string licenseLanguage, std::string licenseFile)
   int licenseNumber, std::string licenseLanguage, std::string licenseFile)
 {
 {
-  if(!licenseFile.empty())
+  if(!licenseFile.empty() && !singleLicense)
     {
     {
     licenseNumber = 5002;
     licenseNumber = 5002;
     licenseLanguage = "English";
     licenseLanguage = "English";
@@ -887,7 +896,7 @@ cmCPackDragNDropGenerator::WriteLicense(cmGeneratedFileStream& outputStream,
 
 
   // End of License
   // End of License
   outputStream << "};\n\n";
   outputStream << "};\n\n";
-  if(!licenseFile.empty())
+  if(!licenseFile.empty() && !singleLicense)
     {
     {
     outputStream << SLASTREnglish;
     outputStream << SLASTREnglish;
     }
     }

+ 1 - 0
Source/CPack/cmCPackDragNDropGenerator.h

@@ -48,6 +48,7 @@ protected:
 
 
 private:
 private:
   std::string slaDirectory;
   std::string slaDirectory;
+  bool singleLicense;
 
 
   void WriteLicense(cmGeneratedFileStream& outputStream, int licenseNumber,
   void WriteLicense(cmGeneratedFileStream& outputStream, int licenseNumber,
     std::string licenseLanguage, std::string licenseFile = "");
     std::string licenseLanguage, std::string licenseFile = "");