Externalize license key handling from configure

Enterprise only license key handling removed from configure.
This does not affect the functionality of the Open Source version nor
the enterprise version.

Change-Id: I01736eba3066c56b6e50e022fae8de6aa9bd884b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
This commit is contained in:
Kalle Viironen 2014-02-26 16:16:34 +02:00 committed by The Qt Project
parent dd1220651c
commit ebcb5c176f
5 changed files with 58 additions and 492 deletions

312
configure vendored
View File

@ -2766,203 +2766,25 @@ if [ "$COMMERCIAL_USER" = "ask" ]; then
done done
fi fi
CFG_RTOS_ENABLED=yes
EditionString=Commercial
if [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes" ]; then if [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes" ]; then
# Commercial preview release # Commercial preview release
Licensee="Preview" Licensee="Preview"
Edition="Preview" Edition="Preview"
LicenseType="Technology Preview" EditionString="Technology Preview"
elif [ $COMMERCIAL_USER = "yes" ]; then elif [ $COMMERCIAL_USER = "yes" ]; then
# one of commercial editions if test -x "$relpath/bin/licheck"; then
LicheckOutput=`$relpath/bin/licheck $relpath $outpath $PLATFORM $XPLATFORM`
# read in the license file if [ $? -ne 0 ]; then
[ -z "$LICENSE_FILE" ] && LICENSE_FILE="$QT_LICENSE_FILE"
[ -z "$LICENSE_FILE" ] && LICENSE_FILE="$HOME/.qt-license"
if [ -f "$LICENSE_FILE" ]; then
tr -d '\r' <"$LICENSE_FILE" >"${LICENSE_FILE}.tmp"
diff "${LICENSE_FILE}.tmp" "${LICENSE_FILE}" >/dev/null 2>&1 || LICENSE_FILE="${LICENSE_FILE}.tmp"
. "$LICENSE_FILE" >/dev/null 2>&1
if [ -z "$LicenseKeyExt" ]; then
echo
echo "You are using an old license file."
echo
echo "Please install the license file supplied by Digia,"
echo "or install the Qt Open Source Edition if you intend to"
echo "develop free software."
exit 1
fi
if [ -z "$Licensee" ]; then
echo
echo "Invalid license key. Please check the license key."
exit 1 exit 1
else
eval "$LicheckOutput"
fi fi
else else
if [ -z "$LicenseKeyExt" ]; then
echo
echo $ECHO_N "Please enter your license key: $ECHO_C"
read LicenseKeyExt
Licensee="Unknown user"
fi
fi
# Key verification
echo "$LicenseKeyExt" | grep ".....*-....*-....*-....*-.....*-.....*-...." >/dev/null 2>&1 \
&& LicenseValid="yes" \
|| LicenseValid="no"
if [ "$LicenseValid" != "yes" ]; then
echo echo
echo "Invalid license key. Please check the license key." echo "Error: This is the Open Source version of Qt."
exit 1 echo "If you want to use Enterprise features of Qt,"
fi echo "use the contact form at http://qt.digia.com/contact-us"
ProductCode=`echo $LicenseKeyExt | cut -f 1 -d - | cut -b 1` echo "to purchase a license."
PlatformCode=`echo $LicenseKeyExt | cut -f 2 -d -`
LicenseTypeCode=`echo $LicenseKeyExt | cut -f 3 -d -`
LicenseFeatureCode=`echo $LicenseKeyExt | cut -f 4 -d - | cut -b 1`
# determine which edition we are licensed to use
case "$LicenseTypeCode" in
F4M)
LicenseType="Commercial"
case $ProductCode in
F)
Edition="Universal"
;;
B)
Edition="FullFramework"
EditionString="Full Framework"
;;
L)
Edition="GUIFramework"
EditionString="GUI Framework"
;;
esac
;;
Z4M|R4M|Q4M)
LicenseType="Evaluation"
QMakeVar add DEFINES QT_EVAL
case $ProductCode in
B)
Edition="Evaluation"
;;
esac
;;
esac
if [ -z "$LicenseType" -o -z "$Edition" ]; then
echo
echo "Invalid license key. Please check the license key."
exit 1
fi
# verify that we are licensed to use Qt on this platform
LICENSE_EXTENSION=
case "$PlatformCode" in
*L)
CFG_RTOS_ENABLED=yes
PlatformCode=`echo "$PlatformCode" | sed 'h;y/8NPQRTZ/UCWX9M7/;x;G;s/\(.\)....\(.\)./\1\2/'`
;;
*)
CFG_RTOS_ENABLED=no
PlatformCode=`echo "$PlatformCode" | sed 's/.$//'`
;;
esac
### EMBEDDED_QPA logic missing ###
case "$PlatformCode,$XPLATFORM_MAC" in
X9,* | XC,* | XU,* | XW,* | XM,*)
# Qt All-OS
LICENSE_EXTENSION="-ALLOS"
;;
8M,* | KM,* | S9,* | SC,* | SM,* | SU,* | SW,* | X9,* | XC,* | XU,* | XW,*)
# Qt for Embedded Linux
LICENSE_EXTENSION="-EMBEDDED"
;;
6M,* | N7,* | N9,* | NX,*)
# Embedded no-deploy
LICENSE_EXTENSION="-EMBEDDED"
;;
FM,* | LM,yes | ZM,no)
# Desktop
LICENSE_EXTENSION="-DESKTOP"
;;
*)
Platform=Linux/X11
[ "$XPLATFORM_MAC" = "yes" ] && Platform='Mac OS X'
echo
echo "You are not licensed for the $Platform platform."
echo
echo "Please use the contact form at http://qt.digia.com/contact-us"
echo "to upgrade your license to include the $Platform platform, or install"
echo "the Qt Open Source Edition if you intend to develop free software."
exit 1
;;
esac
if test -r "$relpath/.LICENSE"; then
# Generic, non-final license
LICENSE_EXTENSION=""
line=`sed 'y/a-z/A-Z/;q' "$relpath"/.LICENSE`
case "$line" in
*BETA*)
Edition=Beta
;;
*TECHNOLOGY?PREVIEW*)
Edition=Preview
;;
*EVALUATION*)
Edition=Evaluation
;;
*)
echo >&2 "Invalid license files; cannot continue"
exit 1
;;
esac
Licensee="$Edition"
EditionString="$Edition"
fi
case "$LicenseFeatureCode" in
B|G|L|Y)
# US
case "$LicenseType" in
Commercial)
cp -f "$relpath/.LICENSE${LICENSE_EXTENSION}-US" "$outpath/LICENSE"
;;
Evaluation)
cp -f "$relpath/.LICENSE-EVALUATION-US" "$outpath/LICENSE"
;;
esac
;;
2|4|5|F)
# non-US
case "$LicenseType" in
Commercial)
cp -f "$relpath/.LICENSE${LICENSE_EXTENSION}" "$outpath/LICENSE"
;;
Evaluation)
cp -f "$relpath/.LICENSE-EVALUATION" "$outpath/LICENSE"
;;
esac
;;
*)
echo
echo "Invalid license key. Please check the license key."
exit 1
;;
esac
case "$LicenseFeatureCode" in
4|B|F|Y)
CFG_RTOS_ENABLED=yes
;;
2|5|G|L)
CFG_RTOS_ENABLED=no
;;
esac
if [ '!' -f "$outpath/LICENSE" ]; then
echo "The LICENSE, LICENSE.GPL LICENSE.LGPL file shipped with"
echo "this software has disappeared."
echo
echo "Sorry, you are not licensed to use this software."
echo "Try re-installing."
echo echo
exit 1 exit 1
fi fi
@ -2972,22 +2794,11 @@ elif [ $COMMERCIAL_USER = "no" ]; then
Edition="OpenSource" Edition="OpenSource"
EditionString="Open Source" EditionString="Open Source"
fi fi
echo
echo "This is the Qt ${EditionString} Edition."
echo
if [ "$CFG_RTOS_ENABLED" = "no" ]; then if [ "$Edition" = "OpenSource" ] || [ "$Edition" = "Preview" ]; then
case `basename "$XPLATFORM"` in echo
qnx-* | vxworks-*) echo "This is the Qt ${EditionString} Edition."
echo "" echo
echo "You are not licensed for Qt for `basename $XPLATFORM`."
echo ""
echo "Please use the contact form at http://qt.digia.com/contact-us"
echo "to upgrade your license to include this platform, or install"
echo "the Qt Open Source Edition if you intend to develop free software."
exit 1
;;
esac
fi fi
if [ "$Edition" = "OpenSource" ]; then if [ "$Edition" = "OpenSource" ]; then
@ -3003,7 +2814,7 @@ if [ "$Edition" = "OpenSource" ]; then
fi fi
echo echo
if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then
echo "You have already accepted the terms of the $LicenseType license." echo "You have already accepted the terms of the $EditionString license."
acceptance=yes acceptance=yes
else else
if [ -f "$relpath/LICENSE.GPL" ]; then if [ -f "$relpath/LICENSE.GPL" ]; then
@ -3034,7 +2845,7 @@ elif [ "$Edition" = "Preview" ]; then
while true; do while true; do
if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then
echo "You have already accepted the terms of the $LicenseType license." echo "You have already accepted the terms of the $EditionString license."
acceptance=yes acceptance=yes
else else
echo "You are licensed to use this software under the terms of" echo "You are licensed to use this software under the terms of"
@ -3058,77 +2869,6 @@ elif [ "$Edition" = "Preview" ]; then
more "$relpath/LICENSE.PREVIEW.COMMERCIAL" more "$relpath/LICENSE.PREVIEW.COMMERCIAL"
fi fi
done done
elif [ "$Edition" != "OpenSource" ]; then
if [ -n "$ExpiryDate" ]; then
ExpiryDate=`echo $ExpiryDate | sed -e 's,-,,g' | tr -d '\n\r'`
[ -z "$ExpiryDate" ] && ExpiryDate="0"
Today=`date +%Y%m%d`
if [ "$Today" -gt "$ExpiryDate" ]; then
case "$LicenseType" in
Commercial|Academic|Educational)
echo
echo "WARNING WARNING WARNING WARNING"
echo
echo " Your support and upgrade period has expired."
echo
echo " You may continue to use your last licensed release"
echo " of Qt under the terms of your existing license"
echo " agreement. But you are not entitled to technical"
echo " support, nor are you entitled to use any more recent"
echo " Qt releases."
echo
echo " Please use the contact form at http://qt.digia.com/contact-us"
echo " to renew your support and upgrades for this license."
echo
echo "WARNING WARNING WARNING WARNING"
echo
sleep 3
;;
Evaluation|*)
echo
echo "NOTICE NOTICE NOTICE NOTICE"
echo
echo " Your Evaluation license has expired."
echo
echo " You are no longer licensed to use this software. Please"
echo " use the contact form at http://qt.digia.com/contact-us to"
echo " purchase license, or install the Qt Open Source Edition"
echo " if you intend to develop free software."
echo
echo "NOTICE NOTICE NOTICE NOTICE"
echo
exit 1
;;
esac
fi
fi
TheLicense=`head -n 1 "$outpath/LICENSE"`
while true; do
if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then
echo "You have already accepted the terms of the $TheLicense."
acceptance=yes
else
echo "You are licensed to use this software under the terms of"
echo "the $TheLicense."
echo
echo "Type '?' to view the $TheLicense."
echo "Type 'yes' to accept this license offer."
echo "Type 'no' to decline this license offer."
echo
echo $ECHO_N "Do you accept the terms of the $TheLicense? $ECHO_C"
read acceptance
fi
echo
if [ "$acceptance" = "yes" ]; then
break
elif [ "$acceptance" = "no" ]; then
echo "You are not licensed to use this software."
echo
exit 1
else [ "$acceptance" = "?" ]
more "$outpath/LICENSE"
fi
done
fi fi
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
@ -3851,22 +3591,6 @@ else
chmod -w "$outpath/src/corelib/global/qconfig.cpp" chmod -w "$outpath/src/corelib/global/qconfig.cpp"
fi fi
# -----------------------------------------------------------------------------
if [ "$LicenseType" = "Evaluation" ]; then
EVALKEY=qt_qevalkey=$LicenseKeyExt
elif echo "$DEFINES" | grep QT_EVAL >/dev/null 2>&1; then
EVALKEY=qt_qevalkey=
fi
if [ -n "$EVALKEY" ]; then
rm -f "$outpath/src/corelib/global/qconfig_eval.cpp"
cat > "$outpath/src/corelib/global/qconfig_eval.cpp" <<EOF
/* Evaluation license key */
static const volatile char qt_eval_key_data [512 + 12] = "$EVALKEY";
EOF
chmod -w "$outpath/src/corelib/global/qconfig_eval.cpp"
fi
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# build qmake # build qmake
@ -6224,10 +5948,6 @@ full)
;; ;;
esac esac
cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
EOF
echo '/* Compile time features */' >>"$outpath/src/corelib/global/qconfig.h.new" echo '/* Compile time features */' >>"$outpath/src/corelib/global/qconfig.h.new"
[ '!' -z "$LicenseKeyExt" ] && echo "#define QT_PRODUCT_LICENSEKEY \"$LicenseKeyExt\"" >>"$outpath/src/corelib/global/qconfig.h.new" [ '!' -z "$LicenseKeyExt" ] && echo "#define QT_PRODUCT_LICENSEKEY \"$LicenseKeyExt\"" >>"$outpath/src/corelib/global/qconfig.h.new"

View File

@ -3388,7 +3388,7 @@ void Configure::generateConfigfiles()
<< endl; << endl;
} }
tmpStream << "/* License information */" << endl; tmpStream << "/* License information */" << endl;
tmpStream << "#define QT_PRODUCT_LICENSEE \"" << licenseInfo[ "LICENSEE" ] << "\"" << endl; tmpStream << "#define QT_PRODUCT_LICENSEE \"" << dictionary[ "LICENSEE" ] << "\"" << endl;
tmpStream << "#define QT_PRODUCT_LICENSE \"" << dictionary[ "EDITION" ] << "\"" << endl; tmpStream << "#define QT_PRODUCT_LICENSE \"" << dictionary[ "EDITION" ] << "\"" << endl;
tmpStream << endl; tmpStream << endl;
if (dictionary["BUILDDEV"] == "yes") { if (dictionary["BUILDDEV"] == "yes") {
@ -3508,16 +3508,6 @@ void Configure::generateConfigfiles()
dictionary[ "DONE" ] = "error"; dictionary[ "DONE" ] = "error";
} }
if (dictionary["EDITION"] == "Evaluation" || qmakeDefines.contains("QT_EVAL")) {
FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig_eval.cpp");
tmpStream << "/* Evaluation license key */" << endl
<< "static const volatile char qt_eval_key_data [512 + 12] = \"qt_qevalkey=" << licenseInfo["LICENSEKEYEXT"] << "\";" << endl;
if (!tmpStream.flush())
dictionary[ "DONE" ] = "error";
}
} }
void Configure::displayConfig() void Configure::displayConfig()
@ -3542,10 +3532,10 @@ void Configure::displayConfig()
sout << " PATH=\n " << env << endl; sout << " PATH=\n " << env << endl;
if (dictionary[QStringLiteral("EDITION")] != QStringLiteral("OpenSource")) { if (dictionary[QStringLiteral("EDITION")] != QStringLiteral("OpenSource")) {
QString l1 = licenseInfo[ "LICENSEE" ]; QString l1 = dictionary[ "LICENSEE" ];
QString l2 = licenseInfo[ "LICENSEID" ]; QString l2 = dictionary[ "LICENSEID" ];
QString l3 = dictionary["EDITION"] + ' ' + "Edition"; QString l3 = dictionary["EDITION"] + ' ' + "Edition";
QString l4 = licenseInfo[ "EXPIRYDATE" ]; QString l4 = dictionary[ "EXPIRYDATE" ];
sout << "Licensee...................." << (l1.isNull() ? "" : l1) << endl; sout << "Licensee...................." << (l1.isNull() ? "" : l1) << endl;
sout << "License ID.................." << (l2.isNull() ? "" : l2) << endl; sout << "License ID.................." << (l2.isNull() ? "" : l2) << endl;
sout << "Product license............." << (l3.isNull() ? "" : l3) << endl; sout << "Product license............." << (l3.isNull() ? "" : l3) << endl;
@ -3877,7 +3867,7 @@ void Configure::generateQConfigCpp()
{ {
FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig.cpp"); FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig.cpp");
tmpStream << "/* Licensed */" << endl tmpStream << "/* Licensed */" << endl
<< "static const char qt_configure_licensee_str [512 + 12] = \"qt_lcnsuser=" << licenseInfo["LICENSEE"] << "\";" << endl << "static const char qt_configure_licensee_str [512 + 12] = \"qt_lcnsuser=" << dictionary["LICENSEE"] << "\";" << endl
<< "static const char qt_configure_licensed_products_str [512 + 12] = \"qt_lcnsprod=" << dictionary["EDITION"] << "\";" << endl << "static const char qt_configure_licensed_products_str [512 + 12] = \"qt_lcnsprod=" << dictionary["EDITION"] << "\";" << endl
<< endl << endl
<< "/* Build date */" << endl << "/* Build date */" << endl
@ -4302,7 +4292,7 @@ void Configure::readLicense()
} }
if (hasOpenSource && openSource) { if (hasOpenSource && openSource) {
cout << endl << "This is the " << dictionary["PLATFORM NAME"] << " Open Source Edition." << endl; cout << endl << "This is the " << dictionary["PLATFORM NAME"] << " Open Source Edition." << endl;
licenseInfo["LICENSEE"] = "Open Source"; dictionary["LICENSEE"] = "Open Source";
dictionary["EDITION"] = "OpenSource"; dictionary["EDITION"] = "OpenSource";
cout << endl; cout << endl;
if (!showLicense(dictionary["LICENSE FILE"])) { if (!showLicense(dictionary["LICENSE FILE"])) {
@ -4316,20 +4306,14 @@ void Configure::readLicense()
} }
#ifdef COMMERCIAL_VERSION #ifdef COMMERCIAL_VERSION
else { else {
Tools::checkLicense(dictionary, licenseInfo, firstLicensePath(), sourcePath); Tools::checkLicense(dictionary, sourcePath, buildPath);
if (dictionary["DONE"] != "error") {
// give the user some feedback, and prompt for license acceptance
cout << endl << "This is the " << dictionary["PLATFORM NAME"] << " " << dictionary["EDITION"] << " Edition."<< endl << endl;
if (!showLicense(dictionary["LICENSE FILE"])) {
cout << "Configuration aborted since license was not accepted";
dictionary["DONE"] = "error";
return;
}
}
} }
#else // !COMMERCIAL_VERSION #else // !COMMERCIAL_VERSION
else { else {
cout << endl << "Cannot build commercial edition from the open source version of the library." << endl; cout << endl << "Error: This is the Open Source version of Qt."
<< endl << "If you want to use Enterprise features of Qt,"
<< endl << "use the contact form at http://qt.digia.com/contact-us"
<< endl << "to purchase a license." << endl << endl;
dictionary["DONE"] = "error"; dictionary["DONE"] = "error";
} }
#endif #endif

View File

@ -147,7 +147,6 @@ private:
QString sybase; QString sybase;
QString sybaseLibs; QString sybaseLibs;
QMap<QString,QString> licenseInfo;
QString outputLine; QString outputLine;
QTextStream outStream; QTextStream outStream;

View File

@ -40,191 +40,56 @@
****************************************************************************/ ****************************************************************************/
#include "tools.h" #include "tools.h"
#include "environment.h"
#include <qdir.h> #include <qdir.h>
#include <qfile.h> #include <qfile.h>
#include <qbytearray.h> #include <qbytearray.h>
#include <qstringlist.h>
// std stuff ------------------------------------
#include <iostream> #include <iostream>
#include <windows.h>
#include <conio.h>
#define NUMBER_OF_PARTS 7
std::ostream &operator<<(std::ostream &s, const QString &val); // defined in configureapp.cpp std::ostream &operator<<(std::ostream &s, const QString &val);
using namespace std; using namespace std;
void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString> &licenseInfo, void Tools::checkLicense(QMap<QString,QString> &dictionary,
const QString &path, const QString &sourcePath) const QString &sourcePath, const QString &buildPath)
{ {
QString tpLicense = sourcePath + "/LICENSE.PREVIEW.OPENSOURCE"; QString tpLicense = sourcePath + "/LICENSE.PREVIEW.COMMERCIAL";
if (QFile::exists(tpLicense)) { if (QFile::exists(tpLicense)) {
dictionary["EDITION"] = "Preview"; dictionary["EDITION"] = "Preview";
dictionary["LICENSE FILE"] = tpLicense; dictionary["LICENSE FILE"] = tpLicense;
return; // No license key checking in Tech Preview
}
tpLicense = sourcePath + "/LICENSE.PREVIEW.COMMERCIAL";
if (QFile::exists(tpLicense)) {
dictionary["EDITION"] = "Preview";
dictionary["LICENSE FILE"] = tpLicense;
return; // No license key checking in Tech Preview
}
// Read in the license file
QFile licenseFile(path);
if( !path.isEmpty() && licenseFile.open( QFile::ReadOnly ) ) {
cout << "Reading license file in....." << qPrintable(path) << endl;
QString buffer = licenseFile.readLine(1024);
while (!buffer.isEmpty()) {
if( buffer[ 0 ] != '#' ) {
QStringList components = buffer.split( '=' );
if ( components.size() >= 2 ) {
QStringList::Iterator it = components.begin();
QString key = (*it++).trimmed().remove('"').toUpper();
QString value = (*it++).trimmed().remove('"');
licenseInfo[ key ] = value;
}
}
// read next line
buffer = licenseFile.readLine(1024);
}
licenseFile.close();
} else {
cout << "License file not found in " << QDir::homePath() << endl;
cout << "Please put the Qt license file, '.qt-license' in your home "
<< "directory and run configure again.";
dictionary["DONE"] = "error";
return; return;
} }
// Verify license info... const QString licenseChecker =
QString licenseKey = licenseInfo["LICENSEKEYEXT"]; QDir::toNativeSeparators(sourcePath + "/bin/licheck.exe");
QByteArray clicenseKey = licenseKey.toLatin1();
//We check the license
static const char * const SEP = "-";
char *licenseParts[NUMBER_OF_PARTS];
int partNumber = 0;
for (char *part = strtok(clicenseKey.data(), SEP); part != 0; part = strtok(0, SEP))
licenseParts[partNumber++] = part;
if (partNumber < (NUMBER_OF_PARTS-1)) {
dictionary["DONE"] = "error";
cout << "License file does not contain proper license key." <<partNumber<< endl;
return;
}
char products = licenseParts[0][0]; if (QFile::exists(licenseChecker)) {
char* platforms = licenseParts[1]; const QString qMakeSpec =
char* licenseSchema = licenseParts[2]; QDir::toNativeSeparators(dictionary.value("QMAKESPEC"));
char licenseFeatures = licenseParts[3][0]; const QString xQMakeSpec =
QDir::toNativeSeparators(dictionary.value("XQMAKESPEC"));
// Determine edition --------------------------------------------------------------------------- QString command = QString("%1 %2 %3 %4 %5")
QString licenseType; .arg(licenseChecker,
if (strcmp(licenseSchema,"F4M") == 0) { QDir::toNativeSeparators(sourcePath),
licenseType = "Commercial"; QDir::toNativeSeparators(buildPath),
if (products == 'F') { qMakeSpec, xQMakeSpec);
dictionary["EDITION"] = "Universal";
} else if (products == 'B') { int returnValue = 0;
dictionary["EDITION"] = "FullFramework"; QString licheckOutput = Environment::execute(command, &returnValue);
if (returnValue) {
dictionary["DONE"] = "error";
} else { } else {
dictionary["EDITION"] = "GUIFramework"; foreach (const QString &var, licheckOutput.split('\n'))
dictionary[var.section('=', 0, 0).toUpper()] = var.section('=', 1, 1);
} }
} else if (strcmp(licenseSchema,"Z4M") == 0 || strcmp(licenseSchema,"R4M") == 0 || strcmp(licenseSchema,"Q4M") == 0) { } else {
if (products == 'B') { cout << endl << "Error: Could not find licheck.exe" << endl
dictionary["EDITION"] = "Evaluation"; << "Try re-installing." << endl << endl;
licenseType = "Evaluation";
}
}
if (platforms[2] == 'L') {
static const char src[] = "8NPQRTZ";
static const char dst[] = "UCWX9M7";
const char *p = strchr(src, platforms[1]);
platforms[1] = dst[p - src];
}
#define PL(a,b) (int(a)+int(b)*256)
int platformCode = PL(platforms[0],platforms[1]);
switch (platformCode) {
case PL('X','9'):
case PL('X','C'):
case PL('X','U'):
case PL('X','W'):
case PL('X','M'): // old license key
dictionary["LICENSE_EXTENSION"] = "-ALLOS";
break;
case PL('6', 'M'):
case PL('8', 'M'):
case PL('K', 'M'): // old license key
case PL('N', '7'):
case PL('N', '9'):
case PL('N', 'X'):
case PL('S', '9'):
case PL('S', 'C'):
case PL('S', 'U'):
case PL('S', 'W'):
dictionary["LICENSE_EXTENSION"] = "-EMBEDDED";
if (dictionary["PLATFORM NAME"].contains("Windows CE")
&& platformCode != PL('6', 'M') && platformCode != PL('S', '9')
&& platformCode != PL('S', 'C') && platformCode != PL('S', 'U')
&& platformCode != PL('S', 'W') && platformCode != PL('K', 'M')) {
dictionary["DONE"] = "error";
}
break;
case PL('R', 'M'):
case PL('F', 'M'):
dictionary["LICENSE_EXTENSION"] = "-DESKTOP";
if (!dictionary["PLATFORM NAME"].endsWith("Windows")) {
dictionary["DONE"] = "error";
}
break;
default:
dictionary["DONE"] = "error";
break;
}
#undef PL
if (dictionary.value("DONE") == "error") {
cout << "You are not licensed for the " << dictionary["PLATFORM NAME"] << " platform." << endl << endl;
cout << "Please use the contact form at http://qt.digia.com/contact-us to upgrade your license" << endl;
cout << "to include the " << dictionary["PLATFORM NAME"] << " platform, or install the" << endl;
cout << "Qt Open Source Edition if you intend to develop free software." << endl;
return;
}
// Override for evaluation licenses
if (dictionary["EDITION"] == "Evaluation")
dictionary["LICENSE_EXTENSION"] = "-EVALUATION";
if (QFile::exists(sourcePath + "/.LICENSE")) {
// Generic, no-suffix license
dictionary["LICENSE_EXTENSION"].clear();
} else if (dictionary["LICENSE_EXTENSION"].isEmpty()) {
cout << "License file does not contain proper license key." << endl;
dictionary["DONE"] = "error"; dictionary["DONE"] = "error";
} }
if (licenseType.isEmpty()
|| dictionary["EDITION"].isEmpty()) {
cout << "License file does not contain proper license key." << endl;
dictionary["DONE"] = "error";
return;
}
// copy one of .LICENSE-*(-US) to LICENSE
QString toLicenseFile = sourcePath + "/LICENSE";
QString fromLicenseFile = sourcePath + "/.LICENSE" + dictionary["LICENSE_EXTENSION"];
if (licenseFeatures == 'B' || licenseFeatures == 'G'
|| licenseFeatures == 'L' || licenseFeatures == 'Y')
fromLicenseFile += "-US";
if (!CopyFile((wchar_t*)QDir::toNativeSeparators(fromLicenseFile).utf16(),
(wchar_t*)QDir::toNativeSeparators(toLicenseFile).utf16(), false)) {
cout << "Failed to copy license file (" << fromLicenseFile << ")";
dictionary["DONE"] = "error";
return;
}
dictionary["LICENSE FILE"] = toLicenseFile;
} }

View File

@ -43,15 +43,13 @@
#define _TOOLS_H_ #define _TOOLS_H_
#include <qstring.h> #include <qstring.h>
#include <qstringlist.h>
#include <qmap.h> #include <qmap.h>
class Tools class Tools
{ {
public: public:
static void checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString> &licenseInfo, static void checkLicense(QMap<QString,QString> &dictionary,
const QString &path, const QString &sourcePath); const QString &sourcePath, const QString &buildPath);
}; };
#endif // _TOOLS_H_ #endif // _TOOLS_H_