-void Quassel::setupBuildInfo(const QString &generated) {
- _buildInfo.applicationName = "Quassel IRC";
- _buildInfo.coreApplicationName = "quasselcore";
- _buildInfo.clientApplicationName = "quasselclient";
- _buildInfo.organizationName = "Quassel Project";
- _buildInfo.organizationDomain = "quassel-irc.org";
-
- QStringList gen = generated.split(',');
- Q_ASSERT(gen.count() == 10);
- _buildInfo.baseVersion = gen[0];
- _buildInfo.generatedVersion = gen[1];
- _buildInfo.isSourceDirty = !gen[2].isEmpty();
- _buildInfo.commitHash = gen[3];
- _buildInfo.commitDate = gen[4].toUInt();
- _buildInfo.protocolVersion = gen[5].toUInt();
- _buildInfo.clientNeedsProtocol = gen[6].toUInt();
- _buildInfo.coreNeedsProtocol = gen[7].toUInt();
- _buildInfo.buildDate = QString("%1 %2").arg(gen[8], gen[9]);
- // create a nice version string
- if(_buildInfo.generatedVersion.isEmpty()) {
- if(!_buildInfo.commitHash.isEmpty()) {
- // dist version
- _buildInfo.plainVersionString = QString("v%1 (dist-%2)")
- .arg(_buildInfo.baseVersion)
- .arg(_buildInfo.commitHash.left(7));
- _buildInfo.fancyVersionString = QString("v%1 (dist-<a href=\"http://git.quassel-irc.org/?p=quassel.git;a=commit;h=%3\">%2</a>)")
- .arg(_buildInfo.baseVersion)
- .arg(_buildInfo.commitHash.left(7))
- .arg(_buildInfo.commitHash);
- } else {
- // we only have a base version :(
- _buildInfo.plainVersionString = QString("v%1 (unknown rev)").arg(_buildInfo.baseVersion);
+
+void Quassel::setupEnvironment()
+{
+ // On modern Linux systems, XDG_DATA_DIRS contains a list of directories containing application data. This
+ // is, for example, used by Qt for finding icons and other things. In case Quassel is installed in a non-standard
+ // prefix (or run from the build directory), it makes sense to add this to XDG_DATA_DIRS so we don't have to
+ // hack extra search paths into various places.
+#ifdef Q_OS_UNIX
+ QString xdgDataVar = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
+ if (xdgDataVar.isEmpty())
+ xdgDataVar = QLatin1String("/usr/local/share:/usr/share"); // sane defaults
+
+ QStringList xdgDirs = xdgDataVar.split(QLatin1Char(':'), QString::SkipEmptyParts);
+
+ // Add our install prefix (if we're not in a bindir, this just adds the current workdir)
+ QString appDir = QCoreApplication::applicationDirPath();
+ int binpos = appDir.lastIndexOf("/bin");
+ if (binpos >= 0) {
+ appDir.replace(binpos, 4, "/share");
+ xdgDirs.append(appDir);
+ // Also append apps/quassel, this is only for QIconLoader to find icons there
+ xdgDirs.append(appDir + "/apps/quassel");
+ } else
+ xdgDirs.append(appDir); // build directory is always the last fallback
+
+ xdgDirs.removeDuplicates();
+
+ qputenv("XDG_DATA_DIRS", QFile::encodeName(xdgDirs.join(":")));
+#endif
+}
+
+
+void Quassel::setupBuildInfo()
+{
+ _buildInfo.applicationName = "quassel";
+ _buildInfo.coreApplicationName = "quasselcore";
+ _buildInfo.clientApplicationName = "quasselclient";
+ _buildInfo.organizationName = "Quassel Project";
+ _buildInfo.organizationDomain = "quassel-irc.org";
+
+ _buildInfo.protocolVersion = 10; // FIXME: deprecated, will be removed
+
+ _buildInfo.baseVersion = QUASSEL_VERSION_STRING;
+ _buildInfo.generatedVersion = GIT_DESCRIBE;
+
+ // Check if we got a commit hash
+ if (!QString(GIT_HEAD).isEmpty()) {
+ _buildInfo.commitHash = GIT_HEAD;
+ QDateTime date;
+ date.setTime_t(GIT_COMMIT_DATE);
+ _buildInfo.commitDate = date.toString();
+ }
+ else if (!QString(DIST_HASH).contains("Format")) {
+ _buildInfo.commitHash = DIST_HASH;
+ _buildInfo.commitDate = QString(DIST_DATE);