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.
This commit is contained in:
Simon Levermann 2015-11-24 16:17:53 +01:00 committed by Brad King
parent 3c6a366876
commit ae434ee2dd
3 changed files with 36 additions and 8 deletions

View File

@ -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

View File

@ -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;
} }

View File

@ -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 = "");