This repository has been archived on 2025-12-24. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
yachat/iris/qcm/buildmode.qcm

202 lines
4.4 KiB
Text
Raw Permalink Normal View History

2025-12-25 01:37:49 +05:00
/*
-----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;
}
};