202 lines
4.4 KiB
Text
202 lines
4.4 KiB
Text
|
|
/*
|
||
|
|
-----BEGIN QCMOD-----
|
||
|
|
name: buildmode
|
||
|
|
section: project
|
||
|
|
arg: release,Build with debugging turned off (default).
|
||
|
|
arg: debug,Build with debugging turned on.
|
||
|
|
arg: debug-and-release,Build two versions, with and without debugging turned on (mac only).
|
||
|
|
arg: no-separate-debug-info,Do not store debug information in a separate file (default for mac).
|
||
|
|
arg: separate-debug-info,Strip debug information into a separate .debug file (default for non-mac).
|
||
|
|
arg: no-framework,Do not build as a Mac framework.
|
||
|
|
arg: framework,Build as a Mac framework (default).
|
||
|
|
-----END QCMOD-----
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define QC_BUILDMODE
|
||
|
|
bool qc_buildmode_release = false;
|
||
|
|
bool qc_buildmode_debug = false;
|
||
|
|
bool qc_buildmode_framework = false;
|
||
|
|
bool qc_buildmode_separate_debug_info = false;
|
||
|
|
|
||
|
|
class qc_buildmode : public ConfObj
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
qc_buildmode(Conf *c) : ConfObj(c) {}
|
||
|
|
QString name() const { return "buildmode"; }
|
||
|
|
QString shortname() const { return "buildmode"; }
|
||
|
|
|
||
|
|
// no output
|
||
|
|
QString checkString() const { return QString(); }
|
||
|
|
|
||
|
|
bool exec()
|
||
|
|
{
|
||
|
|
// first, parse out the options
|
||
|
|
bool opt_release = false;
|
||
|
|
bool opt_debug = false;
|
||
|
|
bool opt_debug_and_release = false;
|
||
|
|
bool opt_no_framework = false;
|
||
|
|
bool opt_framework = false;
|
||
|
|
bool opt_no_separate_debug_info = false;
|
||
|
|
bool opt_separate_debug_info = false;
|
||
|
|
|
||
|
|
if(conf->getenv("QC_RELEASE") == "Y")
|
||
|
|
opt_release = true;
|
||
|
|
if(conf->getenv("QC_DEBUG") == "Y")
|
||
|
|
opt_debug = true;
|
||
|
|
if(conf->getenv("QC_DEBUG_AND_RELEASE") == "Y")
|
||
|
|
opt_debug_and_release = true;
|
||
|
|
if(conf->getenv("QC_NO_FRAMEWORK") == "Y")
|
||
|
|
opt_no_framework = true;
|
||
|
|
if(conf->getenv("QC_FRAMEWORK") == "Y")
|
||
|
|
opt_framework = true;
|
||
|
|
if(conf->getenv("QC_NO_SEPARATE_DEBUG_INFO") == "Y")
|
||
|
|
opt_no_separate_debug_info = true;
|
||
|
|
if(conf->getenv("QC_SEPARATE_DEBUG_INFO") == "Y")
|
||
|
|
opt_separate_debug_info = true;
|
||
|
|
|
||
|
|
bool staticmode = false;
|
||
|
|
if(conf->getenv("QC_STATIC") == "Y")
|
||
|
|
staticmode = true;
|
||
|
|
|
||
|
|
#ifndef Q_OS_MAC
|
||
|
|
if(opt_debug_and_release)
|
||
|
|
{
|
||
|
|
printf("\nError: The --debug-and-release option is for mac only.\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
if(opt_framework)
|
||
|
|
{
|
||
|
|
printf("\nError: The --framework option is for mac only.\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
if(opt_framework && opt_debug)
|
||
|
|
{
|
||
|
|
printf("\nError: Cannot use both --framework and --debug.\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
// sanity check exclusive options
|
||
|
|
int x;
|
||
|
|
|
||
|
|
// build mode
|
||
|
|
x = 0;
|
||
|
|
if(opt_release)
|
||
|
|
++x;
|
||
|
|
if(opt_debug)
|
||
|
|
++x;
|
||
|
|
if(opt_debug_and_release)
|
||
|
|
++x;
|
||
|
|
if(x > 1)
|
||
|
|
{
|
||
|
|
printf("\nError: Use only one of --release, --debug, or --debug-and-release.\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
// framework
|
||
|
|
if(opt_framework && staticmode)
|
||
|
|
{
|
||
|
|
printf("\nError: Cannot use both --framework and --static.\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
x = 0;
|
||
|
|
if(opt_no_framework)
|
||
|
|
++x;
|
||
|
|
if(opt_framework)
|
||
|
|
++x;
|
||
|
|
if(x > 1)
|
||
|
|
{
|
||
|
|
printf("\nError: Use only one of --framework or --no-framework.\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
// debug info
|
||
|
|
x = 0;
|
||
|
|
if(opt_no_separate_debug_info)
|
||
|
|
++x;
|
||
|
|
if(opt_separate_debug_info)
|
||
|
|
++x;
|
||
|
|
if(x > 1)
|
||
|
|
{
|
||
|
|
printf("\nError: Use only one of --separate-debug-info or --no-separate-debug-info\n");
|
||
|
|
exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
// now process the options
|
||
|
|
|
||
|
|
if(opt_release)
|
||
|
|
qc_buildmode_release = true;
|
||
|
|
else if(opt_debug)
|
||
|
|
qc_buildmode_debug = true;
|
||
|
|
else if(opt_debug_and_release)
|
||
|
|
{
|
||
|
|
qc_buildmode_release = true;
|
||
|
|
qc_buildmode_debug = true;
|
||
|
|
}
|
||
|
|
else // default
|
||
|
|
qc_buildmode_release = true;
|
||
|
|
|
||
|
|
if(opt_framework)
|
||
|
|
qc_buildmode_framework = true;
|
||
|
|
else if(opt_no_framework)
|
||
|
|
{
|
||
|
|
// nothing to do
|
||
|
|
}
|
||
|
|
else // default
|
||
|
|
{
|
||
|
|
if(!staticmode && !opt_debug)
|
||
|
|
qc_buildmode_framework = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(opt_separate_debug_info)
|
||
|
|
qc_buildmode_separate_debug_info = true;
|
||
|
|
else if(opt_no_separate_debug_info)
|
||
|
|
{
|
||
|
|
// nothing to do
|
||
|
|
}
|
||
|
|
else // default
|
||
|
|
{
|
||
|
|
#ifndef Q_OS_MAC
|
||
|
|
qc_buildmode_separate_debug_info = true;
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
// make the string
|
||
|
|
QStringList opts;
|
||
|
|
QString other;
|
||
|
|
|
||
|
|
if(qc_buildmode_release && qc_buildmode_debug)
|
||
|
|
{
|
||
|
|
opts += "debug_and_release";
|
||
|
|
opts += "build_all";
|
||
|
|
}
|
||
|
|
else if(qc_buildmode_release)
|
||
|
|
opts += "release";
|
||
|
|
else // qc_buildmode_debug
|
||
|
|
opts += "debug";
|
||
|
|
|
||
|
|
#ifdef Q_OS_MAC
|
||
|
|
if(qc_buildmode_framework)
|
||
|
|
opts += "lib_bundle";
|
||
|
|
#endif
|
||
|
|
|
||
|
|
if(qc_buildmode_separate_debug_info)
|
||
|
|
{
|
||
|
|
opts += "separate_debug_info";
|
||
|
|
other += "QMAKE_CFLAGS += -g\n";
|
||
|
|
other += "QMAKE_CXXFLAGS += -g\n";
|
||
|
|
}
|
||
|
|
|
||
|
|
QString str = QString("CONFIG += ") + opts.join(" ") + '\n';
|
||
|
|
conf->addExtra(str);
|
||
|
|
|
||
|
|
if(!other.isEmpty())
|
||
|
|
conf->addExtra(other);
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
};
|