Kevin Kofler b8dd49
Index: cmake/automoc/kde4automoc.cpp
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/automoc/kde4automoc.cpp	(Revision 0)
Kevin Kofler b8dd49
+++ cmake/automoc/kde4automoc.cpp	(Revision 801202)
Kevin Kofler b8dd49
@@ -0,0 +1,344 @@
Kevin Kofler b8dd49
+/*  This file is part of the KDE project
Kevin Kofler b8dd49
+    Copyright (C) 2007 Matthias Kretz <kretz@kde.org>
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    This program is free software; you can redistribute it and/or
Kevin Kofler b8dd49
+    modify it under the terms of the GNU General Public License as
Kevin Kofler b8dd49
+    published by the Free Software Foundation; either version 2 of
Kevin Kofler b8dd49
+    the License, or (at your option) any later version.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    This program is distributed in the hope that it will be useful,
Kevin Kofler b8dd49
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
Kevin Kofler b8dd49
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Kevin Kofler b8dd49
+    GNU General Public License for more details.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    You should have received a copy of the GNU General Public License
Kevin Kofler b8dd49
+    along with this program; if not, write to the Free Software
Kevin Kofler b8dd49
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Kevin Kofler b8dd49
+    02110-1301, USA.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+*/
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+#include <QtCore/QCoreApplication>
Kevin Kofler b8dd49
+#include <QtCore/QDateTime>
Kevin Kofler b8dd49
+#include <QtCore/QFile>
Kevin Kofler b8dd49
+#include <QtCore/QFileInfo>
Kevin Kofler b8dd49
+#include <QtCore/QHash>
Kevin Kofler b8dd49
+#include <QtCore/QProcess>
Kevin Kofler b8dd49
+#include <QtCore/QQueue>
Kevin Kofler b8dd49
+#include <QtCore/QRegExp>
Kevin Kofler b8dd49
+#include <QtCore/QStringList>
Kevin Kofler b8dd49
+#include <QtCore/QTextStream>
Kevin Kofler b8dd49
+#include <QtCore/QtDebug>
Kevin Kofler b8dd49
+#include <cstdlib>
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+class AutoMoc
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    public:
Kevin Kofler b8dd49
+        AutoMoc();
Kevin Kofler b8dd49
+        bool run();
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    private:
Kevin Kofler b8dd49
+        void generateMoc(const QString &sourceFile, const QString &mocFileName);
Kevin Kofler b8dd49
+        void waitForProcesses();
Kevin Kofler b8dd49
+        void usage(const QString &);
Kevin Kofler b8dd49
+        void echoColor(const QString &msg)
Kevin Kofler b8dd49
+        {
Kevin Kofler b8dd49
+            QProcess *cmakeEcho = new QProcess;
Kevin Kofler b8dd49
+            cmakeEcho->setProcessChannelMode(QProcess::ForwardedChannels);
Kevin Kofler b8dd49
+            QStringList args(cmakeEchoColorArgs);
Kevin Kofler b8dd49
+            args << msg;
Kevin Kofler b8dd49
+            cmakeEcho->start("cmake", args, QIODevice::NotOpen);
Kevin Kofler b8dd49
+            processes.enqueue(Process(cmakeEcho, QString()));
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+        QString builddir;
Kevin Kofler b8dd49
+        QString mocExe;
Kevin Kofler b8dd49
+        QStringList mocIncludes;
Kevin Kofler b8dd49
+        QStringList cmakeEchoColorArgs;
Kevin Kofler b8dd49
+        const bool verbose;
Kevin Kofler b8dd49
+        QTextStream cerr;
Kevin Kofler b8dd49
+        QTextStream cout;
Kevin Kofler b8dd49
+        struct Process
Kevin Kofler b8dd49
+        {
Kevin Kofler b8dd49
+            Process(QProcess *a, const QString &b) : qproc(a), mocFilePath(b) {}
Kevin Kofler b8dd49
+            QProcess *qproc;
Kevin Kofler b8dd49
+            QString mocFilePath;
Kevin Kofler b8dd49
+        };
Kevin Kofler b8dd49
+        QQueue<Process> processes;
Kevin Kofler b8dd49
+        bool failed;
Kevin Kofler b8dd49
+};
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+void AutoMoc::usage(const QString &path)
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    cout << "usage: " << path << " <outfile> <srcdir> <builddir> <moc executable>" << endl;
Kevin Kofler b8dd49
+    ::exit(EXIT_FAILURE);
Kevin Kofler b8dd49
+}
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+int main(int argc, char **argv)
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    QCoreApplication app(argc, argv);
Kevin Kofler b8dd49
+    if (!AutoMoc().run()) {
Kevin Kofler b8dd49
+        return EXIT_FAILURE;
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+    return 0;
Kevin Kofler b8dd49
+}
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+AutoMoc::AutoMoc()
Kevin Kofler b8dd49
+    : verbose(!qgetenv("VERBOSE").isEmpty()), cerr(stderr), cout(stdout), failed(false)
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    const QByteArray colorEnv = qgetenv("COLOR");
Kevin Kofler b8dd49
+    cmakeEchoColorArgs << "-E" << "cmake_echo_color" << QString("--switch=") + colorEnv << "--blue"
Kevin Kofler b8dd49
+        << "--bold";
Kevin Kofler b8dd49
+}
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+bool AutoMoc::run()
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    const QStringList args = QCoreApplication::arguments();
Kevin Kofler b8dd49
+    Q_ASSERT(args.size() > 0);
Kevin Kofler b8dd49
+    if (args.size() < 4) {
Kevin Kofler b8dd49
+        usage(args[0]);
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+    QFile outfile(args[1]);
Kevin Kofler b8dd49
+    const QFileInfo outfileInfo(outfile);
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    QString srcdir(args[2]);
Kevin Kofler b8dd49
+    if (!srcdir.endsWith('/')) {
Kevin Kofler b8dd49
+        srcdir += '/';
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+    builddir = args[3];
Kevin Kofler b8dd49
+    if (!builddir.endsWith('/')) {
Kevin Kofler b8dd49
+        builddir += '/';
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+    mocExe = args[4];
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    QFile dotFiles(args[1] + ".files");
Kevin Kofler b8dd49
+    dotFiles.open(QIODevice::ReadOnly | QIODevice::Text);
Kevin Kofler b8dd49
+    QByteArray line = dotFiles.readLine();
Kevin Kofler b8dd49
+    Q_ASSERT(line == "MOC_INCLUDES:\n");
Kevin Kofler b8dd49
+    line = dotFiles.readLine().trimmed();
Kevin Kofler b8dd49
+    const QStringList incPaths = QString::fromUtf8(line).split(';');
Kevin Kofler b8dd49
+    foreach (const QString &path, incPaths) {
Kevin Kofler b8dd49
+        if (!path.isEmpty()) {
Kevin Kofler b8dd49
+            mocIncludes << "-I" + path;
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+    line = dotFiles.readLine();
Kevin Kofler b8dd49
+    Q_ASSERT(line == "SOURCES:\n");
Kevin Kofler b8dd49
+    line = dotFiles.readLine().trimmed();
Kevin Kofler b8dd49
+    dotFiles.close();
Kevin Kofler b8dd49
+    const QStringList sourceFiles = QString::fromUtf8(line).split(';');
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    // the program goes through all .cpp files to see which moc files are included. It is not really
Kevin Kofler b8dd49
+    // interesting how the moc file is named, but what file the moc is created from. Once a moc is
Kevin Kofler b8dd49
+    // included the same moc may not be included in the _automoc.cpp file anymore. OTOH if there's a
Kevin Kofler b8dd49
+    // header containing Q_OBJECT where no corresponding moc file is included anywhere a
Kevin Kofler b8dd49
+    // moc_<filename>.cpp file is created and included in the _automoc.cpp file.
Kevin Kofler b8dd49
+    QHash<QString, QString> includedMocs;    // key = moc source filepath, value = moc output filepath
Kevin Kofler b8dd49
+    QHash<QString, QString> notIncludedMocs; // key = moc source filepath, value = moc output filename
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    QRegExp mocIncludeRegExp("[\n]\\s*#\\s*include\\s+[\"<](moc_[^ \">]+\\.cpp|[^ \">]+\\.moc)[\">]");
Kevin Kofler b8dd49
+    QRegExp qObjectRegExp("[\n]\\s*Q_OBJECT\\b");
Kevin Kofler b8dd49
+    QStringList headerExtensions;
Kevin Kofler b8dd49
+    headerExtensions << ".h" << ".hpp" << ".hxx" << ".H";
Kevin Kofler b8dd49
+    foreach (const QString &absFilename, sourceFiles) {
Kevin Kofler b8dd49
+        //qDebug() << absFilename;
Kevin Kofler b8dd49
+        const QFileInfo sourceFileInfo(absFilename);
Kevin Kofler b8dd49
+        if (absFilename.endsWith(".cpp") || absFilename.endsWith(".cc") ||
Kevin Kofler b8dd49
+                absFilename.endsWith(".cxx") || absFilename.endsWith(".C")) {
Kevin Kofler b8dd49
+            //qDebug() << "check .cpp file";
Kevin Kofler b8dd49
+            QFile sourceFile(absFilename);
Kevin Kofler b8dd49
+            sourceFile.open(QIODevice::ReadOnly);
Kevin Kofler b8dd49
+            const QByteArray contents = sourceFile.readAll();
Kevin Kofler b8dd49
+            if (contents.isEmpty()) {
Kevin Kofler b8dd49
+                cerr << "kde4automoc: empty source file: " << absFilename << endl;
Kevin Kofler b8dd49
+                continue;
Kevin Kofler b8dd49
+            }
Kevin Kofler b8dd49
+            const QString contentsString = QString::fromUtf8(contents);
Kevin Kofler b8dd49
+            const QString absPath = sourceFileInfo.absolutePath() + '/';
Kevin Kofler b8dd49
+            Q_ASSERT(absPath.endsWith('/'));
Kevin Kofler b8dd49
+            int matchOffset = mocIncludeRegExp.indexIn(contentsString);
Kevin Kofler b8dd49
+            if (matchOffset < 0) {
Kevin Kofler b8dd49
+                // no moc #include, look whether we need to create a moc from the .h nevertheless
Kevin Kofler b8dd49
+                //qDebug() << "no moc #include in the .cpp file";
Kevin Kofler b8dd49
+                const QString basename = sourceFileInfo.completeBaseName();
Kevin Kofler b8dd49
+                const QString headername = absPath + basename + ".h";
Kevin Kofler b8dd49
+                if (QFile::exists(headername) && !includedMocs.contains(headername) &&
Kevin Kofler b8dd49
+                        !notIncludedMocs.contains(headername)) {
Kevin Kofler b8dd49
+                    const QString currentMoc = "moc_" + basename + ".cpp";
Kevin Kofler b8dd49
+                    QFile header(headername);
Kevin Kofler b8dd49
+                    header.open(QIODevice::ReadOnly);
Kevin Kofler b8dd49
+                    const QByteArray contents = header.readAll();
Kevin Kofler b8dd49
+                    if (qObjectRegExp.indexIn(QString::fromUtf8(contents)) >= 0) {
Kevin Kofler b8dd49
+                        //qDebug() << "header contains Q_OBJECT macro";
Kevin Kofler b8dd49
+                        notIncludedMocs.insert(headername, currentMoc);
Kevin Kofler b8dd49
+                    }
Kevin Kofler b8dd49
+                }
Kevin Kofler b8dd49
+                const QString privateHeaderName = absPath + basename + "_p.h";
Kevin Kofler b8dd49
+                if (QFile::exists(privateHeaderName) && !includedMocs.contains(privateHeaderName) &&
Kevin Kofler b8dd49
+                        !notIncludedMocs.contains(privateHeaderName)) {
Kevin Kofler b8dd49
+                    const QString currentMoc = "moc_" + basename + "_p.cpp";
Kevin Kofler b8dd49
+                    QFile header(privateHeaderName);
Kevin Kofler b8dd49
+                    header.open(QIODevice::ReadOnly);
Kevin Kofler b8dd49
+                    const QByteArray contents = header.readAll();
Kevin Kofler b8dd49
+                    if (qObjectRegExp.indexIn(QString::fromUtf8(contents)) >= 0) {
Kevin Kofler b8dd49
+                        //qDebug() << "header contains Q_OBJECT macro";
Kevin Kofler b8dd49
+                        notIncludedMocs.insert(privateHeaderName, currentMoc);
Kevin Kofler b8dd49
+                    }
Kevin Kofler b8dd49
+                }
Kevin Kofler b8dd49
+            } else {
Kevin Kofler b8dd49
+                do { // call this for every moc include in the file
Kevin Kofler b8dd49
+                    const QString currentMoc = mocIncludeRegExp.cap(1);
Kevin Kofler b8dd49
+                    //qDebug() << "found moc include: " << currentMoc << " at offset " << matchOffset;
Kevin Kofler b8dd49
+                    QString basename = QFileInfo(currentMoc).completeBaseName();
Kevin Kofler b8dd49
+                    const bool moc_style = currentMoc.startsWith("moc_");
Kevin Kofler b8dd49
+                    if (moc_style || qObjectRegExp.indexIn(contentsString) < 0) {
Kevin Kofler b8dd49
+                        if (moc_style) {
Kevin Kofler b8dd49
+                            basename = basename.right(basename.length() - 4);
Kevin Kofler b8dd49
+                        }
Kevin Kofler b8dd49
+                        bool headerFound = false;
Kevin Kofler b8dd49
+                        foreach (const QString &ext, headerExtensions) {
Kevin Kofler b8dd49
+                            QString sourceFilePath = absPath + basename + ext;
Kevin Kofler b8dd49
+                            if (QFile::exists(sourceFilePath)) {
Kevin Kofler b8dd49
+                                headerFound = true;
Kevin Kofler b8dd49
+                                includedMocs.insert(sourceFilePath, currentMoc);
Kevin Kofler b8dd49
+                                notIncludedMocs.remove(sourceFilePath);
Kevin Kofler b8dd49
+                                break;
Kevin Kofler b8dd49
+                            }
Kevin Kofler b8dd49
+                        }
Kevin Kofler b8dd49
+                        if (!headerFound) {
Kevin Kofler b8dd49
+                                cerr << "kde4automoc: The file \"" << absFilename <<
Kevin Kofler b8dd49
+                                    "\" includes the moc file \"" << currentMoc << "\", but \"" <<
Kevin Kofler b8dd49
+                                    absPath + basename + "{" + headerExtensions.join(",") + "}" <<
Kevin Kofler b8dd49
+                                    "\" do not exist." << endl;
Kevin Kofler b8dd49
+                                ::exit(EXIT_FAILURE);
Kevin Kofler b8dd49
+                        }
Kevin Kofler b8dd49
+                    } else {
Kevin Kofler b8dd49
+                        includedMocs.insert(absFilename, currentMoc);
Kevin Kofler b8dd49
+                        notIncludedMocs.remove(absFilename);
Kevin Kofler b8dd49
+                    }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+                    matchOffset = mocIncludeRegExp.indexIn(contentsString,
Kevin Kofler b8dd49
+                            matchOffset + currentMoc.length());
Kevin Kofler b8dd49
+                } while(matchOffset >= 0);
Kevin Kofler b8dd49
+            }
Kevin Kofler b8dd49
+        } else if (absFilename.endsWith(".h") || absFilename.endsWith(".hpp") ||
Kevin Kofler b8dd49
+                absFilename.endsWith(".hxx") || absFilename.endsWith(".H")) {
Kevin Kofler b8dd49
+            if (!includedMocs.contains(absFilename) && !notIncludedMocs.contains(absFilename)) {
Kevin Kofler b8dd49
+                // if this header is not getting processed yet and is explicitly mentioned for the
Kevin Kofler b8dd49
+                // automoc the moc is run unconditionally on the header and the resulting file is
Kevin Kofler b8dd49
+                // included in the _automoc.cpp file (unless there's a .cpp file later on that
Kevin Kofler b8dd49
+                // includes the moc from this header)
Kevin Kofler b8dd49
+                const QString currentMoc = "moc_" + sourceFileInfo.completeBaseName() + ".cpp";
Kevin Kofler b8dd49
+                notIncludedMocs.insert(absFilename, currentMoc);
Kevin Kofler b8dd49
+            }
Kevin Kofler b8dd49
+        } else {
Kevin Kofler b8dd49
+            if (verbose) {
Kevin Kofler b8dd49
+               cout << "kde4automoc: ignoring file '" << absFilename << "' with unknown suffix" << endl;
Kevin Kofler b8dd49
+            }
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    // run moc on all the moc's that are #included in source files
Kevin Kofler b8dd49
+    QHash<QString, QString>::ConstIterator end = includedMocs.constEnd();
Kevin Kofler b8dd49
+    QHash<QString, QString>::ConstIterator it = includedMocs.constBegin();
Kevin Kofler b8dd49
+    for (; it != end; ++it) {
Kevin Kofler b8dd49
+        generateMoc(it.key(), it.value());
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    QByteArray automocSource;
Kevin Kofler b8dd49
+    QTextStream outStream(&automocSource, QIODevice::WriteOnly);
Kevin Kofler b8dd49
+    outStream << "/* This file is autogenerated, do not edit */\n";
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    if (notIncludedMocs.isEmpty()) {
Kevin Kofler b8dd49
+        outStream << "enum some_compilers { need_more_than_nothing };\n";
Kevin Kofler b8dd49
+    } else {
Kevin Kofler b8dd49
+        // run moc on the remaining headers and include them in the _automoc.cpp file
Kevin Kofler b8dd49
+        end = notIncludedMocs.constEnd();
Kevin Kofler b8dd49
+        it = notIncludedMocs.constBegin();
Kevin Kofler b8dd49
+        for (; it != end; ++it) {
Kevin Kofler b8dd49
+            generateMoc(it.key(), it.value());
Kevin Kofler b8dd49
+            outStream << "#include \"" << it.value() << "\"\n";
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    // let all remaining moc processes finish
Kevin Kofler b8dd49
+    waitForProcesses();
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    if (failed) {
Kevin Kofler b8dd49
+        // if any moc process failed we don't want to touch the _automoc.cpp file so that
Kevin Kofler b8dd49
+        // kde4automoc is rerun until the issue is fixed
Kevin Kofler b8dd49
+        cerr << "returning failed.."<< endl;
Kevin Kofler b8dd49
+        return false;
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+    outStream.flush();
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    // source file that includes all remaining moc files
Kevin Kofler b8dd49
+    outfile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate);
Kevin Kofler b8dd49
+    outfile.write(automocSource);
Kevin Kofler b8dd49
+    outfile.close();
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    return true;
Kevin Kofler b8dd49
+}
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+void AutoMoc::waitForProcesses()
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    while (!processes.isEmpty()) {
Kevin Kofler b8dd49
+        Process proc = processes.dequeue();
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+        bool result = proc.qproc->waitForFinished(-1);
Kevin Kofler b8dd49
+        //ignore errors from the cmake echo process
Kevin Kofler b8dd49
+        if (!proc.mocFilePath.isEmpty()) {
Kevin Kofler b8dd49
+            if (!result || proc.qproc->exitCode()) {
Kevin Kofler b8dd49
+                cerr << "kde4automoc: process for " << proc.mocFilePath
Kevin Kofler b8dd49
+                     << " failed: " << proc.qproc->errorString() << endl;
Kevin Kofler b8dd49
+                cerr << "pid to wait for: " << proc.qproc->pid() << endl;
Kevin Kofler b8dd49
+                cerr << "processes in queue: " << processes.size() << endl;
Kevin Kofler b8dd49
+                failed = true;
Kevin Kofler b8dd49
+                QFile::remove(proc.mocFilePath);
Kevin Kofler b8dd49
+            }
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+        delete proc.qproc;
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+}
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+void AutoMoc::generateMoc(const QString &sourceFile, const QString &mocFileName)
Kevin Kofler b8dd49
+{
Kevin Kofler b8dd49
+    //qDebug() << Q_FUNC_INFO << sourceFile << mocFileName;
Kevin Kofler b8dd49
+    const QString mocFilePath = builddir + mocFileName;
Kevin Kofler b8dd49
+    if (QFileInfo(mocFilePath).lastModified() < QFileInfo(sourceFile).lastModified()) {
Kevin Kofler b8dd49
+        if (verbose) {
Kevin Kofler b8dd49
+            echoColor("Generating " + mocFilePath + " from " + sourceFile);
Kevin Kofler b8dd49
+        } else {
Kevin Kofler b8dd49
+            echoColor("Generating " + mocFileName);
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+        // we don't want too many child processes
Kevin Kofler b8dd49
+#ifdef Q_OS_FREEBSD
Kevin Kofler b8dd49
+	static const int max_processes = 0;
Kevin Kofler b8dd49
+#else
Kevin Kofler b8dd49
+	static const int max_processes = 10;
Kevin Kofler b8dd49
+#endif
Kevin Kofler b8dd49
+	
Kevin Kofler b8dd49
+        if (processes.size() > max_processes) {
Kevin Kofler b8dd49
+            waitForProcesses();
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+        QProcess *mocProc = new QProcess;
Kevin Kofler b8dd49
+        mocProc->setProcessChannelMode(QProcess::ForwardedChannels);
Kevin Kofler b8dd49
+        QStringList args(mocIncludes);
Kevin Kofler b8dd49
+#ifdef Q_OS_WIN
Kevin Kofler b8dd49
+        args << "-DWIN32";
Kevin Kofler b8dd49
+#endif
Kevin Kofler b8dd49
+        args << "-o" << mocFilePath << sourceFile;
Kevin Kofler b8dd49
+        //qDebug() << "executing: " << mocExe << args;
Kevin Kofler b8dd49
+        mocProc->start(mocExe, args, QIODevice::NotOpen);
Kevin Kofler b8dd49
+        if (mocProc->waitForStarted())
Kevin Kofler b8dd49
+            processes.enqueue(Process(mocProc, mocFilePath));
Kevin Kofler b8dd49
+        else {
Kevin Kofler b8dd49
+            cerr << "kde4automoc: process for " << mocFilePath << "failed to start: " 
Kevin Kofler b8dd49
+                 << mocProc->errorString() << endl;
Kevin Kofler b8dd49
+            failed = true;
Kevin Kofler b8dd49
+            delete mocProc;
Kevin Kofler b8dd49
+        }
Kevin Kofler b8dd49
+    }
Kevin Kofler b8dd49
+}
Kevin Kofler b8dd49
Index: cmake/automoc/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/automoc/CMakeLists.txt	(Revision 0)
Kevin Kofler b8dd49
+++ cmake/automoc/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -0,0 +1,4 @@
Kevin Kofler b8dd49
+include_directories(${QT_INCLUDE_DIR})
Kevin Kofler b8dd49
+add_executable(kde4automoc kde4automoc.cpp)
Kevin Kofler b8dd49
+kde4_handle_rpath_for_executable(kde4automoc "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+target_link_libraries(kde4automoc ${QT_QTCORE_LIBRARY})
Kevin Kofler b8dd49
Index: cmake/modules/InstallSettings.cmake
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/modules/InstallSettings.cmake	(Revision 801314)
Kevin Kofler b8dd49
+++ cmake/modules/InstallSettings.cmake	(Revision 801202)
Kevin Kofler b8dd49
@@ -1,136 +0,0 @@
Kevin Kofler b8dd49
-# Copyright (c) 2008 Kevin Krammer <kevin.krammer@gmx.at>
Kevin Kofler b8dd49
-#
Kevin Kofler b8dd49
-# Redistribution and use is allowed according to the terms of the BSD license.
Kevin Kofler b8dd49
-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-if (WIN32)
Kevin Kofler b8dd49
-# use relative install prefix to avoid hardcoded install paths in cmake_install.cmake files
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   set(LIB_INSTALL_DIR      "lib${LIB_SUFFIX}" )            # The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   set(EXEC_INSTALL_PREFIX  "" )        # Base directory for executables and libraries
Kevin Kofler b8dd49
-   set(SHARE_INSTALL_PREFIX "share" )   # Base directory for files which go to share/
Kevin Kofler b8dd49
-   set(BIN_INSTALL_DIR      "bin"   )   # The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)
Kevin Kofler b8dd49
-   set(SBIN_INSTALL_DIR     "sbin"  )   # The install dir for system executables (default ${EXEC_INSTALL_PREFIX}/sbin)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   set(LIBEXEC_INSTALL_DIR  "${BIN_INSTALL_DIR}"          ) # The subdirectory relative to the install prefix where libraries will be installed (default is ${BIN_INSTALL_DIR})
Kevin Kofler b8dd49
-   set(INCLUDE_INSTALL_DIR  "include"                     ) # The subdirectory to the header prefix
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   set(PLUGIN_INSTALL_DIR       "lib${LIB_SUFFIX}/kde4"   ) #                "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)
Kevin Kofler b8dd49
-   set(CONFIG_INSTALL_DIR       "share/config"            ) # The config file install dir
Kevin Kofler b8dd49
-   set(DATA_INSTALL_DIR         "share/apps"              ) # The parent directory where applications can install their data
Kevin Kofler b8dd49
-   set(HTML_INSTALL_DIR         "share/doc/HTML"          ) # The HTML install dir for documentation
Kevin Kofler b8dd49
-   set(ICON_INSTALL_DIR         "share/icons"             ) # The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)
Kevin Kofler b8dd49
-   set(KCFG_INSTALL_DIR         "share/config.kcfg"       ) # The install dir for kconfig files
Kevin Kofler b8dd49
-   set(LOCALE_INSTALL_DIR       "share/locale"            ) # The install dir for translations
Kevin Kofler b8dd49
-   set(MIME_INSTALL_DIR         "share/mimelnk"           ) # The install dir for the mimetype desktop files
Kevin Kofler b8dd49
-   set(SERVICES_INSTALL_DIR     "share/kde4/services"     ) # The install dir for service (desktop, protocol, ...) files
Kevin Kofler b8dd49
-   set(SERVICETYPES_INSTALL_DIR "share/kde4/servicetypes" ) # The install dir for servicestypes desktop files
Kevin Kofler b8dd49
-   set(SOUND_INSTALL_DIR        "share/sounds"            ) # The install dir for sound files
Kevin Kofler b8dd49
-   set(TEMPLATES_INSTALL_DIR    "share/templates"         ) # The install dir for templates (Create new file...)
Kevin Kofler b8dd49
-   set(WALLPAPER_INSTALL_DIR    "share/wallpapers"        ) # The install dir for wallpapers
Kevin Kofler b8dd49
-   set(DEMO_INSTALL_DIR         "share/demos"             ) # The install dir for demos
Kevin Kofler b8dd49
-   set(KCONF_UPDATE_INSTALL_DIR "share/apps/kconf_update" ) # The kconf_update install dir
Kevin Kofler b8dd49
-   set(AUTOSTART_INSTALL_DIR    "share/autostart"         ) # The install dir for autostart files
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   set(XDG_APPS_INSTALL_DIR      "share/applications/kde4"   ) # The XDG apps dir
Kevin Kofler b8dd49
-   set(XDG_DIRECTORY_INSTALL_DIR "share/desktop-directories" ) # The XDG directory
Kevin Kofler b8dd49
-   set(XDG_MIME_INSTALL_DIR      "share/mime/packages"       ) # The install dir for the xdg mimetypes
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   set(SYSCONF_INSTALL_DIR       "etc"                       ) # The kde sysconfig install dir (default /etc)
Kevin Kofler b8dd49
-   set(MAN_INSTALL_DIR           "share/man"                 ) # The kde man install dir (default ${SHARE_INSTALL_PREFIX}/man/)
Kevin Kofler b8dd49
-   set(INFO_INSTALL_DIR          "share/info"                ) # The kde info install dir (default ${SHARE_INSTALL_PREFIX}/info)")
Kevin Kofler b8dd49
-   set(DBUS_INTERFACES_INSTALL_DIR "share/dbus-1/interfaces" ) # The kde dbus interfaces install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)")
Kevin Kofler b8dd49
-   set(DBUS_SERVICES_INSTALL_DIR "share/dbus-1/services"     ) # The kde dbus services install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/services)")
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-else (WIN32)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   # this macro implements some very special logic how to deal with the cache
Kevin Kofler b8dd49
-   # by default the various install locations inherit their value from theit "parent" variable
Kevin Kofler b8dd49
-   # so if you set CMAKE_INSTALL_PREFIX, then EXEC_INSTALL_PREFIX, PLUGIN_INSTALL_DIR will
Kevin Kofler b8dd49
-   # calculate their value by appending subdirs to CMAKE_INSTALL_PREFIX
Kevin Kofler b8dd49
-   # this would work completely without using the cache.
Kevin Kofler b8dd49
-   # but if somebody wants e.g. a different EXEC_INSTALL_PREFIX this value has to go into
Kevin Kofler b8dd49
-   # the cache, otherwise it will be forgotten on the next cmake run.
Kevin Kofler b8dd49
-   # Once a variable is in the cache, it doesn't depend on its "parent" variables
Kevin Kofler b8dd49
-   # anymore and you can only change it by editing it directly.
Kevin Kofler b8dd49
-   # this macro helps in this regard, because as long as you don't set one of the
Kevin Kofler b8dd49
-   # variables explicitely to some location, it will always calculate its value from its
Kevin Kofler b8dd49
-   # parents. So modifying CMAKE_INSTALL_PREFIX later on will have the desired effect.
Kevin Kofler b8dd49
-   # But once you decide to set e.g. EXEC_INSTALL_PREFIX to some special location
Kevin Kofler b8dd49
-   # this will go into the cache and it will no longer depend on CMAKE_INSTALL_PREFIX.
Kevin Kofler b8dd49
-   macro(_SET_FANCY _var _value _comment)
Kevin Kofler b8dd49
-      set(predefinedvalue "${_value}")
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-      if (NOT DEFINED ${_var})
Kevin Kofler b8dd49
-         set(${_var} ${predefinedvalue})
Kevin Kofler b8dd49
-      else (NOT DEFINED ${_var})
Kevin Kofler b8dd49
-         set(${_var} "${${_var}}" CACHE PATH "${_comment}")
Kevin Kofler b8dd49
-      endif (NOT DEFINED ${_var})
Kevin Kofler b8dd49
-   endmacro(_SET_FANCY)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   _set_fancy(EXEC_INSTALL_PREFIX  "${CMAKE_INSTALL_PREFIX}"                 "Base directory for executables and libraries")
Kevin Kofler b8dd49
-   _set_fancy(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share"           "Base directory for files which go to share/")
Kevin Kofler b8dd49
-   _set_fancy(BIN_INSTALL_DIR      "${EXEC_INSTALL_PREFIX}/bin"              "The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)")
Kevin Kofler b8dd49
-   _set_fancy(SBIN_INSTALL_DIR     "${EXEC_INSTALL_PREFIX}/sbin"             "The install dir for system executables (default ${EXEC_INSTALL_PREFIX}/sbin)")
Kevin Kofler b8dd49
-   _set_fancy(LIB_INSTALL_DIR      "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" "The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})")
Kevin Kofler b8dd49
-   _set_fancy(LIBEXEC_INSTALL_DIR  "${LIB_INSTALL_DIR}/kde4/libexec"         "The subdirectory relative to the install prefix where libraries will be installed (default is ${LIB_INSTALL_DIR}/kde4/libexec)")
Kevin Kofler b8dd49
-   _set_fancy(INCLUDE_INSTALL_DIR  "${CMAKE_INSTALL_PREFIX}/include"         "The subdirectory to the header prefix")
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   _set_fancy(PLUGIN_INSTALL_DIR       "${LIB_INSTALL_DIR}/kde4"                "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)")
Kevin Kofler b8dd49
-   _set_fancy(CONFIG_INSTALL_DIR       "${SHARE_INSTALL_PREFIX}/config"         "The config file install dir")
Kevin Kofler b8dd49
-   _set_fancy(DATA_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/apps"           "The parent directory where applications can install their data")
Kevin Kofler b8dd49
-   _set_fancy(HTML_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/doc/HTML"       "The HTML install dir for documentation")
Kevin Kofler b8dd49
-   _set_fancy(ICON_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/icons"          "The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)")
Kevin Kofler b8dd49
-   _set_fancy(KCFG_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/config.kcfg"    "The install dir for kconfig files")
Kevin Kofler b8dd49
-   _set_fancy(LOCALE_INSTALL_DIR       "${SHARE_INSTALL_PREFIX}/locale"         "The install dir for translations")
Kevin Kofler b8dd49
-   _set_fancy(MIME_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/mimelnk"        "The install dir for the mimetype desktop files")
Kevin Kofler b8dd49
-   _set_fancy(SERVICES_INSTALL_DIR     "${SHARE_INSTALL_PREFIX}/kde4/services"  "The install dir for service (desktop, protocol, ...) files")
Kevin Kofler b8dd49
-   _set_fancy(SERVICETYPES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/kde4/servicetypes" "The install dir for servicestypes desktop files")
Kevin Kofler b8dd49
-   _set_fancy(SOUND_INSTALL_DIR        "${SHARE_INSTALL_PREFIX}/sounds"         "The install dir for sound files")
Kevin Kofler b8dd49
-   _set_fancy(TEMPLATES_INSTALL_DIR    "${SHARE_INSTALL_PREFIX}/templates"      "The install dir for templates (Create new file...)")
Kevin Kofler b8dd49
-   _set_fancy(WALLPAPER_INSTALL_DIR    "${SHARE_INSTALL_PREFIX}/wallpapers"     "The install dir for wallpapers")
Kevin Kofler b8dd49
-   _set_fancy(DEMO_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/demos"          "The install dir for demos")
Kevin Kofler b8dd49
-   _set_fancy(KCONF_UPDATE_INSTALL_DIR "${DATA_INSTALL_DIR}/kconf_update"       "The kconf_update install dir")
Kevin Kofler b8dd49
-   _set_fancy(AUTOSTART_INSTALL_DIR    "${SHARE_INSTALL_PREFIX}/autostart"      "The install dir for autostart files")
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   _set_fancy(XDG_APPS_INSTALL_DIR     "${SHARE_INSTALL_PREFIX}/applications/kde4"         "The XDG apps dir")
Kevin Kofler b8dd49
-   _set_fancy(XDG_DIRECTORY_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/desktop-directories"      "The XDG directory")
Kevin Kofler b8dd49
-   _set_fancy(XDG_MIME_INSTALL_DIR     "${SHARE_INSTALL_PREFIX}/mime/packages"  "The install dir for the xdg mimetypes")
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-   _set_fancy(SYSCONF_INSTALL_DIR      "${CMAKE_INSTALL_PREFIX}/etc"            "The kde sysconfig install dir (default ${CMAKE_INSTALL_PREFIX}/etc)")
Kevin Kofler b8dd49
-   _set_fancy(MAN_INSTALL_DIR          "${SHARE_INSTALL_PREFIX}/man"            "The kde man install dir (default ${SHARE_INSTALL_PREFIX}/man/)")
Kevin Kofler b8dd49
-   _set_fancy(INFO_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/info"           "The kde info install dir (default ${SHARE_INSTALL_PREFIX}/info)")
Kevin Kofler b8dd49
-   _set_fancy(DBUS_INTERFACES_INSTALL_DIR      "${SHARE_INSTALL_PREFIX}/dbus-1/interfaces" "The kde dbus interfaces install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)")
Kevin Kofler b8dd49
-   _set_fancy(DBUS_SERVICES_INSTALL_DIR      "${SHARE_INSTALL_PREFIX}/dbus-1/services"     "The kde dbus services install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/services)")
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-endif (WIN32)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-# The INSTALL_TARGETS_DEFAULT_ARGS variable should be used when libraries are installed.
Kevin Kofler b8dd49
-# The arguments are also ok for regular executables, i.e. executables which don't go
Kevin Kofler b8dd49
-# into sbin/ or libexec/, but for installing executables the basic syntax 
Kevin Kofler b8dd49
-# INSTALL(TARGETS kate DESTINATION "${BIN_INSTALL_DIR}")
Kevin Kofler b8dd49
-# is enough, so using this variable there doesn't help a lot.
Kevin Kofler b8dd49
-# The variable must not be used for installing plugins.
Kevin Kofler b8dd49
-# Usage is like this:
Kevin Kofler b8dd49
-#    install(TARGETS kdecore kdeui ${INSTALL_TARGETS_DEFAULT_ARGS} )
Kevin Kofler b8dd49
-#
Kevin Kofler b8dd49
-# This will install libraries correctly under UNIX, OSX and Windows (i.e. dll's go
Kevin Kofler b8dd49
-# into bin/.
Kevin Kofler b8dd49
-# Later on it will be possible to extend this for installing OSX frameworks
Kevin Kofler b8dd49
-# The COMPONENT Devel argument has the effect that static libraries belong to the 
Kevin Kofler b8dd49
-# "Devel" install component. If we use this also for all install() commands
Kevin Kofler b8dd49
-# for header files, it will be possible to install
Kevin Kofler b8dd49
-#   -everything: make install OR cmake -P cmake_install.cmake
Kevin Kofler b8dd49
-#   -only the development files: cmake -DCOMPONENT=Devel -P cmake_install.cmake
Kevin Kofler b8dd49
-#   -everything except the development files: cmake -DCOMPONENT=Unspecified -P cmake_install.cmake
Kevin Kofler b8dd49
-# This can then also be used for packaging with cpack.
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-set(INSTALL_TARGETS_DEFAULT_ARGS  RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
Kevin Kofler b8dd49
-                                  LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
Kevin Kofler b8dd49
-                                  ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" COMPONENT Devel )
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
Index: cmake/modules/AkonadiInternal.cmake
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/modules/AkonadiInternal.cmake	(Revision 0)
Kevin Kofler b8dd49
+++ cmake/modules/AkonadiInternal.cmake	(Revision 801202)
Kevin Kofler b8dd49
@@ -0,0 +1,165 @@
Kevin Kofler b8dd49
+# Copyright (c) 2008 Kevin Krammer <kevin.krammer@gmx.at>
Kevin Kofler b8dd49
+#
Kevin Kofler b8dd49
+# Redistribution and use is allowed according to the terms of the BSD license.
Kevin Kofler b8dd49
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+include(FindQt4)
Kevin Kofler b8dd49
+include(KDE4Macros)
Kevin Kofler b8dd49
+include(MacroAdditionalCleanFiles)
Kevin Kofler b8dd49
+include(MacroLogFeature)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+set (EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (WIN32)
Kevin Kofler b8dd49
+      set(LIBRARY_OUTPUT_PATH            ${EXECUTABLE_OUTPUT_PATH} )
Kevin Kofler b8dd49
+      # CMAKE_CFG_INTDIR is the output subdirectory created e.g. by XCode and MSVC
Kevin Kofler b8dd49
+      set(KDE4_KCFGC_EXECUTABLE          ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/kconfig_compiler )
Kevin Kofler b8dd49
+      set(KDE4_AUTOMOC_EXECUTABLE        ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/kde4automoc )
Kevin Kofler b8dd49
+      set(KDE4_MEINPROC_EXECUTABLE       ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/meinproc4 )
Kevin Kofler b8dd49
+      set(KDE4_MAKEKDEWIDGETS_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/makekdewidgets )
Kevin Kofler b8dd49
+   else (WIN32)
Kevin Kofler b8dd49
+      set(LIBRARY_OUTPUT_PATH            ${CMAKE_BINARY_DIR}/lib )
Kevin Kofler b8dd49
+      set(KDE4_KCFGC_EXECUTABLE          ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/kconfig_compiler.shell )
Kevin Kofler b8dd49
+      set(KDE4_AUTOMOC_EXECUTABLE        ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/kde4automoc )
Kevin Kofler b8dd49
+      set(KDE4_MEINPROC_EXECUTABLE       ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/meinproc4.shell )
Kevin Kofler b8dd49
+      set(KDE4_MAKEKDEWIDGETS_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/makekdewidgets.shell )
Kevin Kofler b8dd49
+   endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # when building, make automoc depend on the executable...
Kevin Kofler b8dd49
+   set( _KDE4_AUTOMOC_EXECUTABLE_DEP kde4automoc)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+if (WIN32)
Kevin Kofler b8dd49
+# use relative install prefix to avoid hardcoded install paths in cmake_install.cmake files
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(LIB_INSTALL_DIR      "lib${LIB_SUFFIX}" )            # The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(EXEC_INSTALL_PREFIX  "" )        # Base directory for executables and libraries
Kevin Kofler b8dd49
+   set(SHARE_INSTALL_PREFIX "share" )   # Base directory for files which go to share/
Kevin Kofler b8dd49
+   set(BIN_INSTALL_DIR      "bin"   )   # The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)
Kevin Kofler b8dd49
+   set(SBIN_INSTALL_DIR     "sbin"  )   # The install dir for system executables (default ${EXEC_INSTALL_PREFIX}/sbin)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(LIBEXEC_INSTALL_DIR  "${BIN_INSTALL_DIR}"          ) # The subdirectory relative to the install prefix where libraries will be installed (default is ${BIN_INSTALL_DIR})
Kevin Kofler b8dd49
+   set(INCLUDE_INSTALL_DIR  "include"                     ) # The subdirectory to the header prefix
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(PLUGIN_INSTALL_DIR       "lib${LIB_SUFFIX}/kde4"   ) #                "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)
Kevin Kofler b8dd49
+   set(CONFIG_INSTALL_DIR       "share/config"            ) # The config file install dir
Kevin Kofler b8dd49
+   set(DATA_INSTALL_DIR         "share/apps"              ) # The parent directory where applications can install their data
Kevin Kofler b8dd49
+   set(HTML_INSTALL_DIR         "share/doc/HTML"          ) # The HTML install dir for documentation
Kevin Kofler b8dd49
+   set(ICON_INSTALL_DIR         "share/icons"             ) # The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)
Kevin Kofler b8dd49
+   set(KCFG_INSTALL_DIR         "share/config.kcfg"       ) # The install dir for kconfig files
Kevin Kofler b8dd49
+   set(LOCALE_INSTALL_DIR       "share/locale"            ) # The install dir for translations
Kevin Kofler b8dd49
+   set(MIME_INSTALL_DIR         "share/mimelnk"           ) # The install dir for the mimetype desktop files
Kevin Kofler b8dd49
+   set(SERVICES_INSTALL_DIR     "share/kde4/services"     ) # The install dir for service (desktop, protocol, ...) files
Kevin Kofler b8dd49
+   set(SERVICETYPES_INSTALL_DIR "share/kde4/servicetypes" ) # The install dir for servicestypes desktop files
Kevin Kofler b8dd49
+   set(SOUND_INSTALL_DIR        "share/sounds"            ) # The install dir for sound files
Kevin Kofler b8dd49
+   set(TEMPLATES_INSTALL_DIR    "share/templates"         ) # The install dir for templates (Create new file...)
Kevin Kofler b8dd49
+   set(WALLPAPER_INSTALL_DIR    "share/wallpapers"        ) # The install dir for wallpapers
Kevin Kofler b8dd49
+   set(DEMO_INSTALL_DIR         "share/demos"             ) # The install dir for demos
Kevin Kofler b8dd49
+   set(KCONF_UPDATE_INSTALL_DIR "share/apps/kconf_update" ) # The kconf_update install dir
Kevin Kofler b8dd49
+   set(AUTOSTART_INSTALL_DIR    "share/autostart"         ) # The install dir for autostart files
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(XDG_APPS_INSTALL_DIR      "share/applications/kde4"   ) # The XDG apps dir
Kevin Kofler b8dd49
+   set(XDG_DIRECTORY_INSTALL_DIR "share/desktop-directories" ) # The XDG directory
Kevin Kofler b8dd49
+   set(XDG_MIME_INSTALL_DIR      "share/mime/packages"       ) # The install dir for the xdg mimetypes
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(SYSCONF_INSTALL_DIR       "etc"                       ) # The kde sysconfig install dir (default /etc)
Kevin Kofler b8dd49
+   set(MAN_INSTALL_DIR           "share/man"                 ) # The kde man install dir (default ${SHARE_INSTALL_PREFIX}/man/)
Kevin Kofler b8dd49
+   set(INFO_INSTALL_DIR          "share/info"                ) # The kde info install dir (default ${SHARE_INSTALL_PREFIX}/info)")
Kevin Kofler b8dd49
+   set(DBUS_INTERFACES_INSTALL_DIR "share/dbus-1/interfaces" ) # The kde dbus interfaces install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)")
Kevin Kofler b8dd49
+   set(DBUS_SERVICES_INSTALL_DIR "share/dbus-1/services"     ) # The kde dbus services install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/services)")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+else (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # this macro implements some very special logic how to deal with the cache
Kevin Kofler b8dd49
+   # by default the various install locations inherit their value from theit "parent" variable
Kevin Kofler b8dd49
+   # so if you set CMAKE_INSTALL_PREFIX, then EXEC_INSTALL_PREFIX, PLUGIN_INSTALL_DIR will
Kevin Kofler b8dd49
+   # calculate their value by appending subdirs to CMAKE_INSTALL_PREFIX
Kevin Kofler b8dd49
+   # this would work completely without using the cache.
Kevin Kofler b8dd49
+   # but if somebody wants e.g. a different EXEC_INSTALL_PREFIX this value has to go into
Kevin Kofler b8dd49
+   # the cache, otherwise it will be forgotten on the next cmake run.
Kevin Kofler b8dd49
+   # Once a variable is in the cache, it doesn't depend on its "parent" variables
Kevin Kofler b8dd49
+   # anymore and you can only change it by editing it directly.
Kevin Kofler b8dd49
+   # this macro helps in this regard, because as long as you don't set one of the
Kevin Kofler b8dd49
+   # variables explicitely to some location, it will always calculate its value from its
Kevin Kofler b8dd49
+   # parents. So modifying CMAKE_INSTALL_PREFIX later on will have the desired effect.
Kevin Kofler b8dd49
+   # But once you decide to set e.g. EXEC_INSTALL_PREFIX to some special location
Kevin Kofler b8dd49
+   # this will go into the cache and it will no longer depend on CMAKE_INSTALL_PREFIX.
Kevin Kofler b8dd49
+   #
Kevin Kofler b8dd49
+   # additionally if installing to the same location as kdelibs, the other install
Kevin Kofler b8dd49
+   # directories are reused from the installed kdelibs
Kevin Kofler b8dd49
+   macro(_SET_FANCY _var _value _comment)
Kevin Kofler b8dd49
+      set(predefinedvalue "${_value}")
Kevin Kofler b8dd49
+      if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "${KDE4_INSTALL_DIR}" AND DEFINED KDE4_${_var})
Kevin Kofler b8dd49
+         set(predefinedvalue "${KDE4_${_var}}")
Kevin Kofler b8dd49
+      endif ("${CMAKE_INSTALL_PREFIX}" STREQUAL "${KDE4_INSTALL_DIR}" AND DEFINED KDE4_${_var})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      if (NOT DEFINED ${_var})
Kevin Kofler b8dd49
+         set(${_var} ${predefinedvalue})
Kevin Kofler b8dd49
+      else (NOT DEFINED ${_var})
Kevin Kofler b8dd49
+         set(${_var} "${${_var}}" CACHE PATH "${_comment}")
Kevin Kofler b8dd49
+      endif (NOT DEFINED ${_var})
Kevin Kofler b8dd49
+   endmacro(_SET_FANCY)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   _set_fancy(EXEC_INSTALL_PREFIX  "${CMAKE_INSTALL_PREFIX}"                 "Base directory for executables and libraries")
Kevin Kofler b8dd49
+   _set_fancy(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share"           "Base directory for files which go to share/")
Kevin Kofler b8dd49
+   _set_fancy(BIN_INSTALL_DIR      "${EXEC_INSTALL_PREFIX}/bin"              "The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)")
Kevin Kofler b8dd49
+   _set_fancy(SBIN_INSTALL_DIR     "${EXEC_INSTALL_PREFIX}/sbin"             "The install dir for system executables (default ${EXEC_INSTALL_PREFIX}/sbin)")
Kevin Kofler b8dd49
+   _set_fancy(LIB_INSTALL_DIR      "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" "The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})")
Kevin Kofler b8dd49
+   _set_fancy(LIBEXEC_INSTALL_DIR  "${LIB_INSTALL_DIR}/kde4/libexec"         "The subdirectory relative to the install prefix where libraries will be installed (default is ${LIB_INSTALL_DIR}/kde4/libexec)")
Kevin Kofler b8dd49
+   _set_fancy(INCLUDE_INSTALL_DIR  "${CMAKE_INSTALL_PREFIX}/include"         "The subdirectory to the header prefix")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   _set_fancy(PLUGIN_INSTALL_DIR       "${LIB_INSTALL_DIR}/kde4"                "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)")
Kevin Kofler b8dd49
+   _set_fancy(CONFIG_INSTALL_DIR       "${SHARE_INSTALL_PREFIX}/config"         "The config file install dir")
Kevin Kofler b8dd49
+   _set_fancy(DATA_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/apps"           "The parent directory where applications can install their data")
Kevin Kofler b8dd49
+   _set_fancy(HTML_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/doc/HTML"       "The HTML install dir for documentation")
Kevin Kofler b8dd49
+   _set_fancy(ICON_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/icons"          "The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)")
Kevin Kofler b8dd49
+   _set_fancy(KCFG_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/config.kcfg"    "The install dir for kconfig files")
Kevin Kofler b8dd49
+   _set_fancy(LOCALE_INSTALL_DIR       "${SHARE_INSTALL_PREFIX}/locale"         "The install dir for translations")
Kevin Kofler b8dd49
+   _set_fancy(MIME_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/mimelnk"        "The install dir for the mimetype desktop files")
Kevin Kofler b8dd49
+   _set_fancy(SERVICES_INSTALL_DIR     "${SHARE_INSTALL_PREFIX}/kde4/services"  "The install dir for service (desktop, protocol, ...) files")
Kevin Kofler b8dd49
+   _set_fancy(SERVICETYPES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/kde4/servicetypes" "The install dir for servicestypes desktop files")
Kevin Kofler b8dd49
+   _set_fancy(SOUND_INSTALL_DIR        "${SHARE_INSTALL_PREFIX}/sounds"         "The install dir for sound files")
Kevin Kofler b8dd49
+   _set_fancy(TEMPLATES_INSTALL_DIR    "${SHARE_INSTALL_PREFIX}/templates"      "The install dir for templates (Create new file...)")
Kevin Kofler b8dd49
+   _set_fancy(WALLPAPER_INSTALL_DIR    "${SHARE_INSTALL_PREFIX}/wallpapers"     "The install dir for wallpapers")
Kevin Kofler b8dd49
+   _set_fancy(DEMO_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/demos"          "The install dir for demos")
Kevin Kofler b8dd49
+   _set_fancy(KCONF_UPDATE_INSTALL_DIR "${DATA_INSTALL_DIR}/kconf_update"       "The kconf_update install dir")
Kevin Kofler b8dd49
+   _set_fancy(AUTOSTART_INSTALL_DIR    "${SHARE_INSTALL_PREFIX}/autostart"      "The install dir for autostart files")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   _set_fancy(XDG_APPS_INSTALL_DIR     "${SHARE_INSTALL_PREFIX}/applications/kde4"         "The XDG apps dir")
Kevin Kofler b8dd49
+   _set_fancy(XDG_DIRECTORY_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/desktop-directories"      "The XDG directory")
Kevin Kofler b8dd49
+   _set_fancy(XDG_MIME_INSTALL_DIR     "${SHARE_INSTALL_PREFIX}/mime/packages"  "The install dir for the xdg mimetypes")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   _set_fancy(SYSCONF_INSTALL_DIR      "${CMAKE_INSTALL_PREFIX}/etc"            "The kde sysconfig install dir (default ${CMAKE_INSTALL_PREFIX}/etc)")
Kevin Kofler b8dd49
+   _set_fancy(MAN_INSTALL_DIR          "${SHARE_INSTALL_PREFIX}/man"            "The kde man install dir (default ${SHARE_INSTALL_PREFIX}/man/)")
Kevin Kofler b8dd49
+   _set_fancy(INFO_INSTALL_DIR         "${SHARE_INSTALL_PREFIX}/info"           "The kde info install dir (default ${SHARE_INSTALL_PREFIX}/info)")
Kevin Kofler b8dd49
+   _set_fancy(DBUS_INTERFACES_INSTALL_DIR      "${SHARE_INSTALL_PREFIX}/dbus-1/interfaces" "The kde dbus interfaces install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/interfaces)")
Kevin Kofler b8dd49
+   _set_fancy(DBUS_SERVICES_INSTALL_DIR      "${SHARE_INSTALL_PREFIX}/dbus-1/services"     "The kde dbus services install dir (default  ${SHARE_INSTALL_PREFIX}/dbus-1/services)")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# The INSTALL_TARGETS_DEFAULT_ARGS variable should be used when libraries are installed.
Kevin Kofler b8dd49
+# The arguments are also ok for regular executables, i.e. executables which don't go
Kevin Kofler b8dd49
+# into sbin/ or libexec/, but for installing executables the basic syntax 
Kevin Kofler b8dd49
+# INSTALL(TARGETS kate DESTINATION "${BIN_INSTALL_DIR}")
Kevin Kofler b8dd49
+# is enough, so using this variable there doesn't help a lot.
Kevin Kofler b8dd49
+# The variable must not be used for installing plugins.
Kevin Kofler b8dd49
+# Usage is like this:
Kevin Kofler b8dd49
+#    install(TARGETS kdecore kdeui ${INSTALL_TARGETS_DEFAULT_ARGS} )
Kevin Kofler b8dd49
+#
Kevin Kofler b8dd49
+# This will install libraries correctly under UNIX, OSX and Windows (i.e. dll's go
Kevin Kofler b8dd49
+# into bin/.
Kevin Kofler b8dd49
+# Later on it will be possible to extend this for installing OSX frameworks
Kevin Kofler b8dd49
+# The COMPONENT Devel argument has the effect that static libraries belong to the 
Kevin Kofler b8dd49
+# "Devel" install component. If we use this also for all install() commands
Kevin Kofler b8dd49
+# for header files, it will be possible to install
Kevin Kofler b8dd49
+#   -everything: make install OR cmake -P cmake_install.cmake
Kevin Kofler b8dd49
+#   -only the development files: cmake -DCOMPONENT=Devel -P cmake_install.cmake
Kevin Kofler b8dd49
+#   -everything except the development files: cmake -DCOMPONENT=Unspecified -P cmake_install.cmake
Kevin Kofler b8dd49
+# This can then also be used for packaging with cpack.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+set(INSTALL_TARGETS_DEFAULT_ARGS  RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
Kevin Kofler b8dd49
+                                  LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
Kevin Kofler b8dd49
+                                  ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" COMPONENT Devel )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
Index: cmake/modules/kde4_exec_via_sh.cmake
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/modules/kde4_exec_via_sh.cmake	(Revision 0)
Kevin Kofler b8dd49
+++ cmake/modules/kde4_exec_via_sh.cmake	(Revision 801202)
Kevin Kofler b8dd49
@@ -0,0 +1,31 @@
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
Kevin Kofler b8dd49
+#
Kevin Kofler b8dd49
+# Redistribution and use is allowed according to the terms of the BSD license.
Kevin Kofler b8dd49
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+if (UNIX)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+file(WRITE "${_filename}" 
Kevin Kofler b8dd49
+"#!/bin/sh
Kevin Kofler b8dd49
+# created by cmake, don't edit, changes will be lost
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+${_library_path_variable}=${_ld_library_path}\${${_library_path_variable}:+:\$${_library_path_variable}} \"${_executable}\" \"$@\"
Kevin Kofler b8dd49
+")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# make it executable
Kevin Kofler b8dd49
+# since this is only executed on UNIX, it is safe to call chmod
Kevin Kofler b8dd49
+exec_program(chmod ARGS ug+x \"${_filename}\" OUTPUT_VARIABLE _dummy )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+else (UNIX)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+file(TO_NATIVE_PATH "${_ld_library_path}" win_path)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+file(WRITE "${_filename}" 
Kevin Kofler b8dd49
+"
Kevin Kofler b8dd49
+set PATH=${win_path};$ENV{PATH}
Kevin Kofler b8dd49
+\"${_executable}\" %*
Kevin Kofler b8dd49
+")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endif (UNIX)
Kevin Kofler b8dd49
Index: cmake/modules/kde4automoc.files.in
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/modules/kde4automoc.files.in	(Revision 0)
Kevin Kofler b8dd49
+++ cmake/modules/kde4automoc.files.in	(Revision 801202)
Kevin Kofler b8dd49
@@ -0,0 +1,4 @@
Kevin Kofler b8dd49
+MOC_INCLUDES:
Kevin Kofler b8dd49
+@_moc_incs@
Kevin Kofler b8dd49
+SOURCES:
Kevin Kofler b8dd49
+@_moc_files@
Kevin Kofler b8dd49
Index: cmake/modules/KDE4Macros.cmake
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/modules/KDE4Macros.cmake	(Revision 0)
Kevin Kofler b8dd49
+++ cmake/modules/KDE4Macros.cmake	(Revision 801202)
Kevin Kofler b8dd49
@@ -0,0 +1,1131 @@
Kevin Kofler b8dd49
+# for documentation look at FindKDE4Internal.cmake
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# this file contains the following macros:
Kevin Kofler b8dd49
+# KDE4_ADD_UI_FILES
Kevin Kofler b8dd49
+# KDE4_ADD_UI3_FILES
Kevin Kofler b8dd49
+# KDE4_ADD_KCFG_FILES
Kevin Kofler b8dd49
+# KDE4_SET_CUSTOM_TARGET_PROPERTY
Kevin Kofler b8dd49
+# KDE4_GET_CUSTOM_TARGET_PROPERTY
Kevin Kofler b8dd49
+# KDE4_MOC_HEADERS
Kevin Kofler b8dd49
+# KDE4_HANDLE_AUTOMOC
Kevin Kofler b8dd49
+# KDE4_CREATE_FINAL_FILES
Kevin Kofler b8dd49
+# KDE4_ADD_PLUGIN
Kevin Kofler b8dd49
+# KDE4_ADD_KDEINIT_EXECUTABLE
Kevin Kofler b8dd49
+# KDE4_ADD_UNIT_TEST
Kevin Kofler b8dd49
+# KDE4_ADD_EXECUTABLE
Kevin Kofler b8dd49
+# KDE4_ADD_WIDGET_FILES
Kevin Kofler b8dd49
+# KDE4_UPDATE_ICONCACHE
Kevin Kofler b8dd49
+# KDE4_INSTALL_ICONS
Kevin Kofler b8dd49
+# KDE4_REMOVE_OBSOLETE_CMAKE_FILES
Kevin Kofler b8dd49
+# KDE4_NO_ENABLE_FINAL
Kevin Kofler b8dd49
+# KDE4_CREATE_HANDBOOK
Kevin Kofler b8dd49
+# KDE4_ADD_APP_ICON
Kevin Kofler b8dd49
+# KDE4_CREATE_MANPAGE
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# Copyright (c) 2006, 2007, Alexander Neundorf, <neundorf@kde.org>
Kevin Kofler b8dd49
+# Copyright (c) 2006, 2007, Laurent Montel, <montel@kde.org>
Kevin Kofler b8dd49
+# Copyright (c) 2007 Matthias Kretz <kretz@kde.org>
Kevin Kofler b8dd49
+#
Kevin Kofler b8dd49
+# Redistribution and use is allowed according to the terms of the BSD license.
Kevin Kofler b8dd49
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_KCFG_FILES _sources )
Kevin Kofler b8dd49
+   if( ${ARGV1} STREQUAL "GENERATE_MOC" )
Kevin Kofler b8dd49
+      set(_kcfg_generatemoc TRUE)
Kevin Kofler b8dd49
+   endif( ${ARGV1} STREQUAL "GENERATE_MOC" )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   foreach (_current_FILE ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+     if(NOT ${_current_FILE} STREQUAL "GENERATE_MOC")
Kevin Kofler b8dd49
+       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
Kevin Kofler b8dd49
+       get_filename_component(_abs_PATH ${_tmp_FILE} PATH)
Kevin Kofler b8dd49
+       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+       file(READ ${_tmp_FILE} _contents)
Kevin Kofler b8dd49
+       string(REGEX REPLACE "^(.*\n)?File=([^\n]+kcfg).*\n.*$" "\\2"  _kcfg_FILE "${_contents}")
Kevin Kofler b8dd49
+       set(_src_FILE    ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
Kevin Kofler b8dd49
+       set(_header_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
Kevin Kofler b8dd49
+       set(_moc_FILE    ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+       # the command for creating the source file from the kcfg file
Kevin Kofler b8dd49
+       add_custom_command(OUTPUT ${_header_FILE} ${_src_FILE}
Kevin Kofler b8dd49
+          COMMAND ${KDE4_KCFGC_EXECUTABLE}
Kevin Kofler b8dd49
+          ARGS ${_abs_PATH}/${_kcfg_FILE} ${_tmp_FILE} -d ${CMAKE_CURRENT_BINARY_DIR}
Kevin Kofler b8dd49
+          MAIN_DEPENDENCY ${_tmp_FILE}
Kevin Kofler b8dd49
+          DEPENDS ${_abs_PATH}/${_kcfg_FILE} ${_KDE4_KCONFIG_COMPILER_DEP} )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+       if(_kcfg_generatemoc)
Kevin Kofler b8dd49
+         qt4_generate_moc(${_header_FILE} ${_moc_FILE} )
Kevin Kofler b8dd49
+         set_source_files_properties(${_src_FILE} PROPERTIES SKIP_AUTOMOC TRUE)  # don't run automoc on this file
Kevin Kofler b8dd49
+         list(APPEND ${_sources} ${_moc_FILE})
Kevin Kofler b8dd49
+       endif(_kcfg_generatemoc)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+       list(APPEND ${_sources} ${_src_FILE} ${_header_FILE})
Kevin Kofler b8dd49
+     endif(NOT ${_current_FILE} STREQUAL "GENERATE_MOC")
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_KCFG_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+GET_FILENAME_COMPONENT(KDE4_MODULE_DIR  ${CMAKE_CURRENT_LIST_FILE} PATH)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+#create the implementation files from the ui files and add them to the list of sources
Kevin Kofler b8dd49
+#usage: KDE4_ADD_UI_FILES(foo_SRCS ${ui_files})
Kevin Kofler b8dd49
+macro (KDE4_ADD_UI_FILES _sources )
Kevin Kofler b8dd49
+   foreach (_current_FILE ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
Kevin Kofler b8dd49
+      get_filename_component(_basename ${_tmp_FILE} NAME_WE)
Kevin Kofler b8dd49
+      set(_header ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.h)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # we need to run uic and replace some things in the generated file
Kevin Kofler b8dd49
+      # this is done by executing the cmake script kde4uic.cmake
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_header}
Kevin Kofler b8dd49
+         COMMAND ${CMAKE_COMMAND}
Kevin Kofler b8dd49
+         ARGS
Kevin Kofler b8dd49
+         -DKDE4_HEADER:BOOL=ON
Kevin Kofler b8dd49
+         -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE}
Kevin Kofler b8dd49
+         -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE}
Kevin Kofler b8dd49
+         -DKDE_UIC_H_FILE:FILEPATH=${_header}
Kevin Kofler b8dd49
+         -DKDE_UIC_BASENAME:STRING=${_basename}
Kevin Kofler b8dd49
+         -P ${KDE4_MODULE_DIR}/kde4uic.cmake
Kevin Kofler b8dd49
+         MAIN_DEPENDENCY ${_tmp_FILE}
Kevin Kofler b8dd49
+      )
Kevin Kofler b8dd49
+      list(APPEND ${_sources} ${_header})
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_UI_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+#create the implementation files from the ui files and add them to the list of sources
Kevin Kofler b8dd49
+#usage: KDE4_ADD_UI3_FILES(foo_SRCS ${ui_files})
Kevin Kofler b8dd49
+macro (KDE4_ADD_UI3_FILES _sources )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   qt4_get_moc_inc_dirs(_moc_INCS)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   foreach (_current_FILE ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
Kevin Kofler b8dd49
+      get_filename_component(_basename ${_tmp_FILE} NAME_WE)
Kevin Kofler b8dd49
+      set(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
Kevin Kofler b8dd49
+      set(_src ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
Kevin Kofler b8dd49
+      set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_header}
Kevin Kofler b8dd49
+         COMMAND ${CMAKE_COMMAND}
Kevin Kofler b8dd49
+         -DKDE3_HEADER:BOOL=ON
Kevin Kofler b8dd49
+         -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC3_EXECUTABLE}
Kevin Kofler b8dd49
+         -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE}
Kevin Kofler b8dd49
+         -DKDE_UIC_H_FILE:FILEPATH=${_header}
Kevin Kofler b8dd49
+         -DKDE_UIC_BASENAME:STRING=${_basename}
Kevin Kofler b8dd49
+         -DKDE_UIC_PLUGIN_DIR:FILEPATH="."
Kevin Kofler b8dd49
+         -P ${KDE4_MODULE_DIR}/kde4uic.cmake
Kevin Kofler b8dd49
+         MAIN_DEPENDENCY ${_tmp_FILE}
Kevin Kofler b8dd49
+      )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# we need to run uic3 and replace some things in the generated file
Kevin Kofler b8dd49
+      # this is done by executing the cmake script kde4uic.cmake
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_src}
Kevin Kofler b8dd49
+         COMMAND ${CMAKE_COMMAND}
Kevin Kofler b8dd49
+         ARGS
Kevin Kofler b8dd49
+         -DKDE3_IMPL:BOOL=ON
Kevin Kofler b8dd49
+         -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC3_EXECUTABLE}
Kevin Kofler b8dd49
+         -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE}
Kevin Kofler b8dd49
+         -DKDE_UIC_CPP_FILE:FILEPATH=${_src}
Kevin Kofler b8dd49
+         -DKDE_UIC_H_FILE:FILEPATH=${_header}
Kevin Kofler b8dd49
+         -DKDE_UIC_BASENAME:STRING=${_basename}
Kevin Kofler b8dd49
+         -DKDE_UIC_PLUGIN_DIR:FILEPATH="."
Kevin Kofler b8dd49
+         -P ${KDE4_MODULE_DIR}/kde4uic.cmake
Kevin Kofler b8dd49
+         MAIN_DEPENDENCY ${_header}
Kevin Kofler b8dd49
+      )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_moc}
Kevin Kofler b8dd49
+         COMMAND ${QT_MOC_EXECUTABLE}
Kevin Kofler b8dd49
+         ARGS ${_moc_INCS} ${_header} -o ${_moc}
Kevin Kofler b8dd49
+         MAIN_DEPENDENCY ${_header}
Kevin Kofler b8dd49
+      )
Kevin Kofler b8dd49
+      list(APPEND ${_sources} ${_src} ${_moc} )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_UI3_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_SET_CUSTOM_TARGET_PROPERTY _target_name _property_name _property)
Kevin Kofler b8dd49
+   string(REGEX REPLACE "[/ ]" "_" _dir "${CMAKE_CURRENT_SOURCE_DIR}")
Kevin Kofler b8dd49
+   set(_kde4_${_dir}_${_target_name}_${_property_name} "${_property}")
Kevin Kofler b8dd49
+endmacro (KDE4_SET_CUSTOM_TARGET_PROPERTY)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_GET_CUSTOM_TARGET_PROPERTY _var _target_name _property_name)
Kevin Kofler b8dd49
+   string(REGEX REPLACE "[/ ]" "_" _dir "${CMAKE_CURRENT_SOURCE_DIR}")
Kevin Kofler b8dd49
+   set(${_var} "${_kde4_${_dir}_${_target_name}_${_property_name}}")
Kevin Kofler b8dd49
+endmacro (KDE4_GET_CUSTOM_TARGET_PROPERTY)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_MOC_HEADERS _target_NAME)
Kevin Kofler b8dd49
+   set (_headers_to_moc)
Kevin Kofler b8dd49
+   foreach (_current_FILE ${ARGN})
Kevin Kofler b8dd49
+      get_filename_component(_suffix "${_current_FILE}" EXT)
Kevin Kofler b8dd49
+      if (".h" STREQUAL "${_suffix}" OR ".hpp" STREQUAL "${_suffix}" OR ".hxx" STREQUAL "${_suffix}" OR ".H" STREQUAL "${_suffix}")
Kevin Kofler b8dd49
+         list(APPEND _headers_to_moc ${_current_FILE})
Kevin Kofler b8dd49
+      else (".h" STREQUAL "${_suffix}" OR ".hpp" STREQUAL "${_suffix}" OR ".hxx" STREQUAL "${_suffix}" OR ".H" STREQUAL "${_suffix}")
Kevin Kofler b8dd49
+         message(STATUS "KDE4_MOC_HEADERS: ignoring non-header file ${_current_FILE}")
Kevin Kofler b8dd49
+      endif (".h" STREQUAL "${_suffix}" OR ".hpp" STREQUAL "${_suffix}" OR ".hxx" STREQUAL "${_suffix}" OR ".H" STREQUAL "${_suffix}")
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+   # need to create moc_<filename>.cpp file using kde4automoc.cmake
Kevin Kofler b8dd49
+   # and add it to the target
Kevin Kofler b8dd49
+   if(_headers_to_moc)
Kevin Kofler b8dd49
+      kde4_set_custom_target_property(${_target_NAME} AUTOMOC_HEADERS "${_headers_to_moc}")
Kevin Kofler b8dd49
+   endif(_headers_to_moc)
Kevin Kofler b8dd49
+endmacro (KDE4_MOC_HEADERS)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro(KDE4_HANDLE_AUTOMOC _target_NAME _SRCS)
Kevin Kofler b8dd49
+   set(_moc_files)
Kevin Kofler b8dd49
+   set(_moc_headers)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # first list all explicitly set headers
Kevin Kofler b8dd49
+   kde4_get_custom_target_property(_headers_to_moc ${_target_NAME} AUTOMOC_HEADERS)
Kevin Kofler b8dd49
+   if(NOT _headers_to_moc STREQUAL "NOTFOUND")
Kevin Kofler b8dd49
+      foreach(_header_to_moc ${_headers_to_moc})
Kevin Kofler b8dd49
+         get_filename_component(_abs_header ${_header_to_moc} ABSOLUTE)
Kevin Kofler b8dd49
+         list(APPEND _moc_files ${_abs_header})
Kevin Kofler b8dd49
+         list(APPEND _moc_headers ${_abs_header})
Kevin Kofler b8dd49
+      endforeach(_header_to_moc)
Kevin Kofler b8dd49
+   endif(NOT _headers_to_moc STREQUAL "NOTFOUND")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # now add all the sources for the automoc
Kevin Kofler b8dd49
+   foreach (_current_FILE ${${_SRCS}})
Kevin Kofler b8dd49
+      get_filename_component(_abs_current_FILE "${_current_FILE}" ABSOLUTE)
Kevin Kofler b8dd49
+      get_source_file_property(_skip "${_abs_current_FILE}" SKIP_AUTOMOC)
Kevin Kofler b8dd49
+      get_source_file_property(_generated "${_abs_current_FILE}" GENERATED)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      if(NOT _generated AND NOT _skip)
Kevin Kofler b8dd49
+         get_filename_component(_suffix "${_current_FILE}" EXT)
Kevin Kofler b8dd49
+         # skip every source file that's not C++
Kevin Kofler b8dd49
+         if(_suffix STREQUAL ".cpp" OR _suffix STREQUAL ".cc" OR _suffix STREQUAL ".cxx" OR _suffix STREQUAL ".C")
Kevin Kofler b8dd49
+            get_filename_component(_basename "${_current_FILE}" NAME_WE)
Kevin Kofler b8dd49
+            get_filename_component(_abs_path "${_abs_current_FILE}" PATH)
Kevin Kofler b8dd49
+            set(_header "${_abs_path}/${_basename}.h")
Kevin Kofler b8dd49
+            if(EXISTS "${_header}")
Kevin Kofler b8dd49
+               list(APPEND _moc_headers ${_header})
Kevin Kofler b8dd49
+            endif(EXISTS "${_header}")
Kevin Kofler b8dd49
+            set(_pheader "${_abs_path}/${_basename}_p.h")
Kevin Kofler b8dd49
+            if(EXISTS "${_pheader}")
Kevin Kofler b8dd49
+               list(APPEND _moc_headers ${_pheader})
Kevin Kofler b8dd49
+            endif(EXISTS "${_pheader}")
Kevin Kofler b8dd49
+            list(APPEND _moc_files ${_abs_current_FILE})
Kevin Kofler b8dd49
+         endif(_suffix STREQUAL ".cpp" OR _suffix STREQUAL ".cc" OR _suffix STREQUAL ".cxx" OR _suffix STREQUAL ".C")
Kevin Kofler b8dd49
+      endif(NOT _generated AND NOT _skip)
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if(_moc_files)
Kevin Kofler b8dd49
+      set(_automoc_source "${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_automoc.cpp")
Kevin Kofler b8dd49
+      get_directory_property(_moc_incs INCLUDE_DIRECTORIES)
Kevin Kofler b8dd49
+      configure_file(${KDE4_MODULE_DIR}/kde4automoc.files.in ${_automoc_source}.files)
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_automoc_source}
Kevin Kofler b8dd49
+         COMMAND ${KDE4_AUTOMOC_EXECUTABLE}
Kevin Kofler b8dd49
+         ${_automoc_source}
Kevin Kofler b8dd49
+         ${CMAKE_CURRENT_SOURCE_DIR}
Kevin Kofler b8dd49
+         ${CMAKE_CURRENT_BINARY_DIR}
Kevin Kofler b8dd49
+         ${QT_MOC_EXECUTABLE}
Kevin Kofler b8dd49
+         DEPENDS ${${_SRCS}} ${_moc_headers} ${_automoc_source}.files ${_KDE4_AUTOMOC_EXECUTABLE_DEP}
Kevin Kofler b8dd49
+         )
Kevin Kofler b8dd49
+      # the OBJECT_DEPENDS is only necessary when a new moc file has to be generated that is included in a source file
Kevin Kofler b8dd49
+      # problem: the whole target is recompiled when the automoc.cpp file is touched
Kevin Kofler b8dd49
+      # set_source_files_properties(${${_SRCS}} PROPERTIES OBJECT_DEPENDS ${_automoc_source})
Kevin Kofler b8dd49
+      set(${_SRCS} ${_automoc_source} ${${_SRCS}})
Kevin Kofler b8dd49
+   endif(_moc_files)
Kevin Kofler b8dd49
+endmacro(KDE4_HANDLE_AUTOMOC)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro(KDE4_INSTALL_TS_FILES _lang _sdir)
Kevin Kofler b8dd49
+   file(GLOB_RECURSE _ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${_sdir}/*)
Kevin Kofler b8dd49
+   foreach(_current_TS_FILES ${_ts_files})
Kevin Kofler b8dd49
+      string(REGEX MATCH "\\.svn/" _in_svn ${_current_TS_FILES})
Kevin Kofler b8dd49
+      if(NOT _in_svn)
Kevin Kofler b8dd49
+         get_filename_component(_subpath ${_current_TS_FILES} PATH)
Kevin Kofler b8dd49
+         install(FILES ${_current_TS_FILES} DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_SCRIPTS/${_subpath})
Kevin Kofler b8dd49
+      endif(NOT _in_svn)
Kevin Kofler b8dd49
+   endforeach(_current_TS_FILES)
Kevin Kofler b8dd49
+endmacro(KDE4_INSTALL_TS_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_INSTALL_HANDBOOK _lang)
Kevin Kofler b8dd49
+   message(STATUS "KDE4_INSTALL_HANDBOOK() is deprecated. Remove it please. Now all is done in KDE4_CREATE_HANDBOOK.")
Kevin Kofler b8dd49
+endmacro (KDE4_INSTALL_HANDBOOK )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_CREATE_HANDBOOK _docbook)
Kevin Kofler b8dd49
+   get_filename_component(_input ${_docbook} ABSOLUTE)
Kevin Kofler b8dd49
+   set(_doc ${CMAKE_CURRENT_BINARY_DIR}/index.cache.bz2)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   #Bootstrap
Kevin Kofler b8dd49
+   if (_kdeBootStrapping)
Kevin Kofler b8dd49
+      set(_ssheet ${CMAKE_SOURCE_DIR}/kdoctools/customization/kde-chunk.xsl)
Kevin Kofler b8dd49
+      set(_bootstrapOption "--srcdir=${CMAKE_SOURCE_DIR}/kdoctools/")
Kevin Kofler b8dd49
+   else (_kdeBootStrapping)
Kevin Kofler b8dd49
+      set(_ssheet ${KDE4_DATA_INSTALL_DIR}/ksgmltools2/customization/kde-chunk.xsl)
Kevin Kofler b8dd49
+      set(_bootstrapOption)
Kevin Kofler b8dd49
+   endif (_kdeBootStrapping)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   file(GLOB _docs *.docbook)
Kevin Kofler b8dd49
+   add_custom_command(OUTPUT ${_doc}
Kevin Kofler b8dd49
+      COMMAND ${KDE4_MEINPROC_EXECUTABLE} --check ${_bootstrapOption} --cache ${_doc} ${_input}
Kevin Kofler b8dd49
+      DEPENDS ${_docs} ${_KDE4_MEINPROC_EXECUTABLE_DEP} ${_ssheet}
Kevin Kofler b8dd49
+      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
Kevin Kofler b8dd49
+   )
Kevin Kofler b8dd49
+   get_filename_component(_targ ${CMAKE_CURRENT_SOURCE_DIR} NAME)
Kevin Kofler b8dd49
+   set(_targ "${_targ}-handbook")
Kevin Kofler b8dd49
+   add_custom_target(${_targ} ALL DEPENDS ${_doc})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if(KDE4_ENABLE_HTMLHANDBOOK)
Kevin Kofler b8dd49
+      set(_htmlDoc ${CMAKE_CURRENT_SOURCE_DIR}/index.html)
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_htmlDoc}
Kevin Kofler b8dd49
+         COMMAND ${KDE4_MEINPROC_EXECUTABLE} --check ${_bootstrapOption} -o ${_htmlDoc} ${_input}
Kevin Kofler b8dd49
+         DEPENDS ${_input} ${_KDE4_MEINPROC_EXECUTABLE_DEP} ${_ssheet}
Kevin Kofler b8dd49
+         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
Kevin Kofler b8dd49
+      )
Kevin Kofler b8dd49
+      add_custom_target(htmlhandbook DEPENDS ${_htmlDoc})
Kevin Kofler b8dd49
+   endif(KDE4_ENABLE_HTMLHANDBOOK)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_args ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_installDest)
Kevin Kofler b8dd49
+   if(_args)
Kevin Kofler b8dd49
+      list(GET _args 0 _tmp)
Kevin Kofler b8dd49
+      if("${_tmp}" STREQUAL "INSTALL_DESTINATION")
Kevin Kofler b8dd49
+         list(GET _args 1 _installDest )
Kevin Kofler b8dd49
+         list(REMOVE_AT _args 0 1)
Kevin Kofler b8dd49
+      endif("${_tmp}" STREQUAL "INSTALL_DESTINATION")
Kevin Kofler b8dd49
+   endif(_args)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   get_filename_component(dirname ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
Kevin Kofler b8dd49
+   if(_args)
Kevin Kofler b8dd49
+      list(GET _args 0 _tmp)
Kevin Kofler b8dd49
+      if("${_tmp}" STREQUAL "SUBDIR")
Kevin Kofler b8dd49
+         list(GET _args 1 dirname )
Kevin Kofler b8dd49
+         list(REMOVE_AT _args 0 1)
Kevin Kofler b8dd49
+      endif("${_tmp}" STREQUAL "SUBDIR")
Kevin Kofler b8dd49
+   endif(_args)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if(_installDest)
Kevin Kofler b8dd49
+      file(GLOB _images *.png)
Kevin Kofler b8dd49
+      install(FILES ${_doc} ${_docs} ${_images} DESTINATION ${_installDest}/${dirname})
Kevin Kofler b8dd49
+      # TODO symlinks on non-unix platforms
Kevin Kofler b8dd49
+      if (UNIX)
Kevin Kofler b8dd49
+         # execute some cmake code on make install which creates the symlink
Kevin Kofler b8dd49
+         install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink \"${_installDest}/common\"  \"\$ENV{DESTDIR}${_installDest}/${dirname}/common\" )" )
Kevin Kofler b8dd49
+      endif (UNIX)
Kevin Kofler b8dd49
+   endif(_installDest)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_CREATE_HANDBOOK)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_CREATE_MANPAGE _docbook _section)
Kevin Kofler b8dd49
+   get_filename_component(_input ${_docbook} ABSOLUTE)
Kevin Kofler b8dd49
+   get_filename_component(_base ${_input} NAME_WE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_doc ${CMAKE_CURRENT_BINARY_DIR}/${_base}.${_section})
Kevin Kofler b8dd49
+   # sometimes we have "man-" prepended
Kevin Kofler b8dd49
+   string(REGEX REPLACE "/man-" "/" _outdoc ${_doc})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   #Bootstrap
Kevin Kofler b8dd49
+   if (_kdeBootStrapping)
Kevin Kofler b8dd49
+      set(_ssheet "${CMAKE_SOURCE_DIR}/kdoctools/docbook/xsl/manpages/docbook.xsl")
Kevin Kofler b8dd49
+      set(_bootstrapOption "--srcdir=${CMAKE_SOURCE_DIR}/kdoctools/")
Kevin Kofler b8dd49
+   else (_kdeBootStrapping)
Kevin Kofler b8dd49
+      set(_ssheet "${KDE4_DATA_INSTALL_DIR}/ksgmltools2/docbook/xsl/manpages/docbook.xsl")
Kevin Kofler b8dd49
+      set(_bootstrapOption)
Kevin Kofler b8dd49
+   endif (_kdeBootStrapping)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   add_custom_command(OUTPUT ${_outdoc}
Kevin Kofler b8dd49
+      COMMAND ${KDE4_MEINPROC_EXECUTABLE} --stylesheet ${_ssheet} --check ${_bootstrapOption} ${_input}
Kevin Kofler b8dd49
+      DEPENDS ${_input} ${_KDE4_MEINPROC_EXECUTABLE_DEP} ${_ssheet}
Kevin Kofler b8dd49
+   )
Kevin Kofler b8dd49
+   get_filename_component(_targ ${CMAKE_CURRENT_SOURCE_DIR} NAME)
Kevin Kofler b8dd49
+   set(_targ "${_targ}-manpage")
Kevin Kofler b8dd49
+   add_custom_target(${_targ} ALL DEPENDS "${_outdoc}")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_args ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_installDest)
Kevin Kofler b8dd49
+   if(_args)
Kevin Kofler b8dd49
+      list(GET _args 0 _tmp)
Kevin Kofler b8dd49
+      if("${_tmp}" STREQUAL "INSTALL_DESTINATION")
Kevin Kofler b8dd49
+         list(GET _args 1 _installDest )
Kevin Kofler b8dd49
+         list(REMOVE_AT _args 0 1)
Kevin Kofler b8dd49
+      endif("${_tmp}" STREQUAL "INSTALL_DESTINATION")
Kevin Kofler b8dd49
+   endif(_args)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   get_filename_component(dirname ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
Kevin Kofler b8dd49
+   if(_args)
Kevin Kofler b8dd49
+      list(GET _args 0 _tmp)
Kevin Kofler b8dd49
+      if("${_tmp}" STREQUAL "SUBDIR")
Kevin Kofler b8dd49
+         list(GET _args 1 dirname )
Kevin Kofler b8dd49
+         list(REMOVE_AT _args 0 1)
Kevin Kofler b8dd49
+      endif("${_tmp}" STREQUAL "SUBDIR")
Kevin Kofler b8dd49
+   endif(_args)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if(_installDest)
Kevin Kofler b8dd49
+      install(FILES ${_outdoc} DESTINATION ${_installDest}/man${_section})
Kevin Kofler b8dd49
+   endif(_installDest)
Kevin Kofler b8dd49
+endmacro (KDE4_CREATE_MANPAGE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_UPDATE_ICONCACHE)
Kevin Kofler b8dd49
+    # Update mtime of hicolor icon theme dir.
Kevin Kofler b8dd49
+    # We don't always have touch command (e.g. on Windows), so instead create
Kevin Kofler b8dd49
+    #  and delete a temporary file in the theme dir.
Kevin Kofler b8dd49
+   install(CODE "
Kevin Kofler b8dd49
+    set(DESTDIR_VALUE \"\$ENV{DESTDIR}\")
Kevin Kofler b8dd49
+    if (NOT DESTDIR_VALUE)
Kevin Kofler b8dd49
+        file(WRITE \"${ICON_INSTALL_DIR}/hicolor/temp.txt\" \"update\")
Kevin Kofler b8dd49
+        file(REMOVE \"${ICON_INSTALL_DIR}/hicolor/temp.txt\")
Kevin Kofler b8dd49
+    endif (NOT DESTDIR_VALUE)
Kevin Kofler b8dd49
+    ")
Kevin Kofler b8dd49
+endmacro (KDE4_UPDATE_ICONCACHE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# a "map" of short type names to the directories
Kevin Kofler b8dd49
+# unknown names should give empty results
Kevin Kofler b8dd49
+# KDE 3 compatibility
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_mime       "mimetypes")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_filesys    "places")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_device     "devices")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_app        "apps")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_action     "actions")
Kevin Kofler b8dd49
+# KDE 4 / icon naming specification compatibility
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_mimetypes  "mimetypes")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_places     "places")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_devices    "devices")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_apps       "apps")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_actions    "actions")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_categories "categories")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_status     "status")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_emblems    "emblems")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_emotes     "emotes")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_animations "animations")
Kevin Kofler b8dd49
+set(_KDE4_ICON_GROUP_intl       "intl")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# a "map" of short theme names to the theme directory
Kevin Kofler b8dd49
+set(_KDE4_ICON_THEME_ox "oxygen")
Kevin Kofler b8dd49
+set(_KDE4_ICON_THEME_cr "crystalsvg")
Kevin Kofler b8dd49
+set(_KDE4_ICON_THEME_lo "locolor")
Kevin Kofler b8dd49
+set(_KDE4_ICON_THEME_hi "hicolor")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# only used internally by KDE4_INSTALL_ICONS
Kevin Kofler b8dd49
+macro (_KDE4_ADD_ICON_INSTALL_RULE _install_SCRIPT _install_PATH _group _orig_NAME _install_NAME _l10n_SUBDIR)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # if the string doesn't match the pattern, the result is the full string, so all three have the same content
Kevin Kofler b8dd49
+   if (NOT ${_group} STREQUAL ${_install_NAME} )
Kevin Kofler b8dd49
+      set(_icon_GROUP  ${_KDE4_ICON_GROUP_${_group}})
Kevin Kofler b8dd49
+      if(NOT _icon_GROUP)
Kevin Kofler b8dd49
+         set(_icon_GROUP "actions")
Kevin Kofler b8dd49
+      endif(NOT _icon_GROUP)
Kevin Kofler b8dd49
+#      message(STATUS "icon: ${_current_ICON} size: ${_size} group: ${_group} name: ${_name} l10n: ${_l10n_SUBDIR}")
Kevin Kofler b8dd49
+      install(FILES ${_orig_NAME} DESTINATION ${_install_PATH}/${_icon_GROUP}/${_l10n_SUBDIR}/ RENAME ${_install_NAME} )
Kevin Kofler b8dd49
+   endif (NOT ${_group} STREQUAL ${_install_NAME} )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (_KDE4_ADD_ICON_INSTALL_RULE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_INSTALL_ICONS _defaultpath )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # the l10n-subdir if language given as second argument (localized icon)
Kevin Kofler b8dd49
+   set(_lang ${ARGV1})
Kevin Kofler b8dd49
+   if(_lang)
Kevin Kofler b8dd49
+      set(_l10n_SUBDIR l10n/${_lang})
Kevin Kofler b8dd49
+   else(_lang)
Kevin Kofler b8dd49
+      set(_l10n_SUBDIR ".")
Kevin Kofler b8dd49
+   endif(_lang)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # first the png icons
Kevin Kofler b8dd49
+   file(GLOB _icons *.png)
Kevin Kofler b8dd49
+   foreach (_current_ICON ${_icons} )
Kevin Kofler b8dd49
+      string(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\1" _type  "${_current_ICON}")
Kevin Kofler b8dd49
+      string(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\2" _size  "${_current_ICON}")
Kevin Kofler b8dd49
+      string(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\3" _group "${_current_ICON}")
Kevin Kofler b8dd49
+      string(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\4" _name  "${_current_ICON}")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      set(_theme_GROUP ${_KDE4_ICON_THEME_${_type}})
Kevin Kofler b8dd49
+      if( _theme_GROUP)
Kevin Kofler b8dd49
+         _KDE4_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
Kevin Kofler b8dd49
+                    ${_defaultpath}/${_theme_GROUP}/${_size}x${_size}
Kevin Kofler b8dd49
+                    ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR})
Kevin Kofler b8dd49
+      endif( _theme_GROUP)
Kevin Kofler b8dd49
+   endforeach (_current_ICON)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # mng icons
Kevin Kofler b8dd49
+   file(GLOB _icons *.mng)
Kevin Kofler b8dd49
+   foreach (_current_ICON ${_icons} )
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.mng)$" "\\1" _type  "${_current_ICON}")
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.mng)$" "\\2" _size  "${_current_ICON}")
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.mng)$" "\\3" _group "${_current_ICON}")
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.mng)$" "\\4" _name  "${_current_ICON}")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      set(_theme_GROUP ${_KDE4_ICON_THEME_${_type}})
Kevin Kofler b8dd49
+      if( _theme_GROUP)
Kevin Kofler b8dd49
+         _KDE4_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
Kevin Kofler b8dd49
+                ${_defaultpath}/${_theme_GROUP}/${_size}x${_size}
Kevin Kofler b8dd49
+                ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR})
Kevin Kofler b8dd49
+      endif( _theme_GROUP)
Kevin Kofler b8dd49
+   endforeach (_current_ICON)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # and now the svg icons
Kevin Kofler b8dd49
+   file(GLOB _icons *.svgz)
Kevin Kofler b8dd49
+   foreach (_current_ICON ${_icons} )
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)sc\\-([a-z]+)\\-(.+\\.svgz)$" "\\1" _type "${_current_ICON}")
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)sc\\-([a-z]+)\\-(.+\\.svgz)$" "\\2" _group "${_current_ICON}")
Kevin Kofler b8dd49
+      STRING(REGEX REPLACE "^.*/([a-zA-Z]+)sc\\-([a-z]+)\\-(.+\\.svgz)$" "\\3" _name "${_current_ICON}")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      set(_theme_GROUP ${_KDE4_ICON_THEME_${_type}})
Kevin Kofler b8dd49
+      if( _theme_GROUP)
Kevin Kofler b8dd49
+          _KDE4_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
Kevin Kofler b8dd49
+                            ${_defaultpath}/${_theme_GROUP}/scalable
Kevin Kofler b8dd49
+                            ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR})
Kevin Kofler b8dd49
+      endif( _theme_GROUP)
Kevin Kofler b8dd49
+   endforeach (_current_ICON)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   KDE4_UPDATE_ICONCACHE()
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_INSTALL_ICONS)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# For all C++ sources a big source file which includes all the files
Kevin Kofler b8dd49
+# is created.
Kevin Kofler b8dd49
+# This is not done for the C sources, they are just gathered in a separate list
Kevin Kofler b8dd49
+# because they are usually not written by KDE and as such not intended to be
Kevin Kofler b8dd49
+# compiled all-in-one.
Kevin Kofler b8dd49
+macro (KDE4_CREATE_FINAL_FILES _filenameCPP _filesExcludedFromFinalFile )
Kevin Kofler b8dd49
+   set(${_filesExcludedFromFinalFile})
Kevin Kofler b8dd49
+   file(WRITE "${_filenameCPP}" "//autogenerated file\n")
Kevin Kofler b8dd49
+   foreach (_current_FILE ${ARGN})
Kevin Kofler b8dd49
+      get_filename_component(_abs_FILE "${_current_FILE}" ABSOLUTE)
Kevin Kofler b8dd49
+      # don't include any generated files in the final-file
Kevin Kofler b8dd49
+      # because then cmake will not know the dependencies
Kevin Kofler b8dd49
+      get_source_file_property(_isGenerated "${_abs_FILE}" GENERATED)
Kevin Kofler b8dd49
+      if (_isGenerated)
Kevin Kofler b8dd49
+         list(APPEND ${_filesExcludedFromFinalFile} "${_abs_FILE}")
Kevin Kofler b8dd49
+      else (_isGenerated)
Kevin Kofler b8dd49
+         # only put C++ files in the final-file
Kevin Kofler b8dd49
+         if("${_abs_FILE}" MATCHES ".+\\.(cpp|cc|cxx|C)$")
Kevin Kofler b8dd49
+            file(APPEND "${_filenameCPP}" "#include \"${_abs_FILE}\"\n")
Kevin Kofler b8dd49
+         else("${_abs_FILE}" MATCHES ".+\\.(cpp|cc|cxx|C)$")
Kevin Kofler b8dd49
+            list(APPEND ${_filesExcludedFromFinalFile} "${_abs_FILE}")
Kevin Kofler b8dd49
+         endif("${_abs_FILE}" MATCHES ".+\\.(cpp|cc|cxx|C)$")
Kevin Kofler b8dd49
+      endif (_isGenerated)
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_CREATE_FINAL_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# This macro sets the RPATH related options for libraries, plugins and kdeinit executables.
Kevin Kofler b8dd49
+# It overrides the defaults set in FindKDE4Internal.cmake.
Kevin Kofler b8dd49
+# If RPATH is not explicitly disabled, libraries and plugins are built without RPATH, in
Kevin Kofler b8dd49
+# the hope that the RPATH which is compiled into the executable is good enough.
Kevin Kofler b8dd49
+macro (KDE4_HANDLE_RPATH_FOR_LIBRARY _target_NAME)
Kevin Kofler b8dd49
+   if (NOT CMAKE_SKIP_RPATH)
Kevin Kofler b8dd49
+      if(KDE4_USE_ALWAYS_FULL_RPATH)
Kevin Kofler b8dd49
+         set_target_properties(${_target_NAME} PROPERTIES  SKIP_BUILD_RPATH FALSE  BUILD_WITH_INSTALL_RPATH FALSE)
Kevin Kofler b8dd49
+      else(KDE4_USE_ALWAYS_FULL_RPATH)
Kevin Kofler b8dd49
+         set_target_properties(${_target_NAME} PROPERTIES  INSTALL_RPATH_USE_LINK_PATH FALSE  SKIP_BUILD_RPATH TRUE  BUILD_WITH_INSTALL_RPATH TRUE  INSTALL_RPATH "")
Kevin Kofler b8dd49
+      endif(KDE4_USE_ALWAYS_FULL_RPATH)
Kevin Kofler b8dd49
+   endif (NOT CMAKE_SKIP_RPATH)
Kevin Kofler b8dd49
+endmacro (KDE4_HANDLE_RPATH_FOR_LIBRARY)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# This macro sets the RPATH related options for executables
Kevin Kofler b8dd49
+# and creates wrapper shell scripts for the executables.
Kevin Kofler b8dd49
+# It overrides the defaults set in FindKDE4Internal.cmake.
Kevin Kofler b8dd49
+# For every executable a wrapper script is created, which sets the appropriate
Kevin Kofler b8dd49
+# environment variable for the platform (LD_LIBRARY_PATH on most UNIX systems,
Kevin Kofler b8dd49
+# DYLD_LIBRARY_PATH on OS X and PATH in Windows) so  that it points to the built
Kevin Kofler b8dd49
+# but not yet installed versions of the libraries. So if RPATH is disabled, the executables
Kevin Kofler b8dd49
+# can be run via these scripts from the build tree and will find the correct libraries.
Kevin Kofler b8dd49
+# If RPATH is not disabled, these scripts are also used but only for consistency, because
Kevin Kofler b8dd49
+# they don't really influence anything then, because the compiled-in RPATH overrides
Kevin Kofler b8dd49
+# the LD_LIBRARY_PATH env. variable.
Kevin Kofler b8dd49
+# Executables with the RUN_UNINSTALLED option will be built with the RPATH pointing to the
Kevin Kofler b8dd49
+# build dir, so that they can be run safely without being installed, e.g. as code generators
Kevin Kofler b8dd49
+# for other stuff during the build. These executables will be relinked during "make install".
Kevin Kofler b8dd49
+# All other executables are built with the RPATH with which they will be installed.
Kevin Kofler b8dd49
+macro (KDE4_HANDLE_RPATH_FOR_EXECUTABLE _target_NAME _type)
Kevin Kofler b8dd49
+   if (UNIX)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # set the RPATH related properties
Kevin Kofler b8dd49
+      if (NOT CMAKE_SKIP_RPATH)
Kevin Kofler b8dd49
+         if (${_type} STREQUAL "GUI")
Kevin Kofler b8dd49
+            set_target_properties(${_target_NAME} PROPERTIES  SKIP_BUILD_RPATH TRUE  BUILD_WITH_INSTALL_RPATH TRUE)
Kevin Kofler b8dd49
+         endif (${_type} STREQUAL "GUI")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+         if (${_type} STREQUAL "NOGUI")
Kevin Kofler b8dd49
+            set_target_properties(${_target_NAME} PROPERTIES  SKIP_BUILD_RPATH TRUE  BUILD_WITH_INSTALL_RPATH TRUE)
Kevin Kofler b8dd49
+         endif (${_type} STREQUAL "NOGUI")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+         if (${_type} STREQUAL "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+            set_target_properties(${_target_NAME} PROPERTIES  SKIP_BUILD_RPATH FALSE  BUILD_WITH_INSTALL_RPATH FALSE)
Kevin Kofler b8dd49
+         endif (${_type} STREQUAL "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+      endif (NOT CMAKE_SKIP_RPATH)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      if (APPLE)
Kevin Kofler b8dd49
+         set(_library_path_variable "DYLD_LIBRARY_PATH")
Kevin Kofler b8dd49
+      else (APPLE)
Kevin Kofler b8dd49
+         set(_library_path_variable "LD_LIBRARY_PATH")
Kevin Kofler b8dd49
+      endif (APPLE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      if (APPLE)
Kevin Kofler b8dd49
+         # DYLD_LIBRARY_PATH does not work like LD_LIBRARY_PATH
Kevin Kofler b8dd49
+         # OSX already has the RPATH in libraries and executables, putting runtime directories in
Kevin Kofler b8dd49
+         # DYLD_LIBRARY_PATH actually breaks things
Kevin Kofler b8dd49
+         set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/:${KDE4_LIB_DIR}")
Kevin Kofler b8dd49
+      else (APPLE)
Kevin Kofler b8dd49
+         set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/:${LIB_INSTALL_DIR}:${KDE4_LIB_DIR}:${QT_LIBRARY_DIR}")
Kevin Kofler b8dd49
+      endif (APPLE)
Kevin Kofler b8dd49
+      get_target_property(_executable ${_target_NAME} LOCATION )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # use add_custom_target() to have the sh-wrapper generated during build time instead of cmake time
Kevin Kofler b8dd49
+      add_custom_command(TARGET ${_target_NAME} POST_BUILD
Kevin Kofler b8dd49
+         COMMAND ${CMAKE_COMMAND}
Kevin Kofler b8dd49
+         -D_filename=${_executable}.shell -D_library_path_variable=${_library_path_variable}
Kevin Kofler b8dd49
+         -D_ld_library_path="${_ld_library_path}" -D_executable=${_executable}
Kevin Kofler b8dd49
+         -P ${KDE4_MODULE_DIR}/kde4_exec_via_sh.cmake
Kevin Kofler b8dd49
+         )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      macro_additional_clean_files(${_executable}.shell)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # under UNIX, set the property WRAPPER_SCRIPT to the name of the generated shell script
Kevin Kofler b8dd49
+      # so it can be queried and used later on easily
Kevin Kofler b8dd49
+      set_target_properties(${_target_NAME} PROPERTIES WRAPPER_SCRIPT ${_executable}.shell)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   else (UNIX)
Kevin Kofler b8dd49
+      # under windows, set the property WRAPPER_SCRIPT just to the name of the executable
Kevin Kofler b8dd49
+      # maybe later this will change to a generated batch file (for setting the PATH so that the Qt libs are found)
Kevin Kofler b8dd49
+      get_target_property(_executable ${_target_NAME} LOCATION )
Kevin Kofler b8dd49
+      set_target_properties(${_target_NAME} PROPERTIES WRAPPER_SCRIPT ${_executable})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      set(_ld_library_path "${LIBRARY_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}\;${LIB_INSTALL_DIR}\;${KDE4_LIB_DIR}\;${QT_LIBRARY_DIR}")
Kevin Kofler b8dd49
+      get_target_property(_executable ${_target_NAME} LOCATION )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # use add_custom_target() to have the batch-file-wrapper generated during build time instead of cmake time
Kevin Kofler b8dd49
+      add_custom_command(TARGET ${_target_NAME} POST_BUILD
Kevin Kofler b8dd49
+         COMMAND ${CMAKE_COMMAND}
Kevin Kofler b8dd49
+         -D_filename="${_executable}.bat"
Kevin Kofler b8dd49
+         -D_ld_library_path="${_ld_library_path}" -D_executable="${_executable}"
Kevin Kofler b8dd49
+         -P ${KDE4_MODULE_DIR}/kde4_exec_via_sh.cmake
Kevin Kofler b8dd49
+         )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   endif (UNIX)
Kevin Kofler b8dd49
+endmacro (KDE4_HANDLE_RPATH_FOR_EXECUTABLE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_PLUGIN _target_NAME _with_PREFIX)
Kevin Kofler b8dd49
+#is the first argument is "WITH_PREFIX" then keep the standard "lib" prefix, otherwise set the prefix empty
Kevin Kofler b8dd49
+   if (${_with_PREFIX} STREQUAL "WITH_PREFIX")
Kevin Kofler b8dd49
+      set(_first_SRC)
Kevin Kofler b8dd49
+   else (${_with_PREFIX} STREQUAL "WITH_PREFIX")
Kevin Kofler b8dd49
+      set(_first_SRC ${_with_PREFIX})
Kevin Kofler b8dd49
+   endif (${_with_PREFIX} STREQUAL "WITH_PREFIX")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_SRCS ${_first_SRC} ${ARGN})
Kevin Kofler b8dd49
+   kde4_handle_automoc(${_target_NAME} _SRCS)
Kevin Kofler b8dd49
+   if (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
Kevin Kofler b8dd49
+      add_library(${_target_NAME} MODULE  ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files})
Kevin Kofler b8dd49
+   else (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      add_library(${_target_NAME} MODULE ${_SRCS})
Kevin Kofler b8dd49
+   endif (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (_first_SRC)
Kevin Kofler b8dd49
+      set_target_properties(${_target_NAME} PROPERTIES PREFIX "")
Kevin Kofler b8dd49
+   endif (_first_SRC)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_handle_rpath_for_library(${_target_NAME})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (WIN32)
Kevin Kofler b8dd49
+      # for shared libraries/plugins a -DMAKE_target_LIB is required
Kevin Kofler b8dd49
+      string(TOUPPER ${_target_NAME} _symbol)
Kevin Kofler b8dd49
+      string(REGEX REPLACE "[^_A-Za-z0-9]" "_" _symbol ${_symbol})
Kevin Kofler b8dd49
+      set(_symbol "MAKE_${_symbol}_LIB")
Kevin Kofler b8dd49
+      set_target_properties(${_target_NAME} PROPERTIES DEFINE_SYMBOL ${_symbol})
Kevin Kofler b8dd49
+   endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_PLUGIN _target_NAME _with_PREFIX)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# this macro is intended to check whether a list of source
Kevin Kofler b8dd49
+# files has the "NOGUI" or "RUN_UNINSTALLED" keywords at the beginning
Kevin Kofler b8dd49
+# in _output_LIST the list of source files is returned with the "NOGUI"
Kevin Kofler b8dd49
+# and "RUN_UNINSTALLED" keywords removed
Kevin Kofler b8dd49
+# if "NOGUI" is in the list of files, the _nogui argument is set to
Kevin Kofler b8dd49
+# "NOGUI" (which evaluates to TRUE in cmake), otherwise it is set empty
Kevin Kofler b8dd49
+# (which evaluates to FALSE in cmake)
Kevin Kofler b8dd49
+# if "RUN_UNINSTALLED" is in the list of files, the _uninst argument is set to
Kevin Kofler b8dd49
+# "RUN_UNINSTALLED" (which evaluates to TRUE in cmake), otherwise it is set empty
Kevin Kofler b8dd49
+# (which evaluates to FALSE in cmake)
Kevin Kofler b8dd49
+# if "TEST" is in the list of files, the _test argument is set to
Kevin Kofler b8dd49
+# "TEST" (which evaluates to TRUE in cmake), otherwise it is set empty
Kevin Kofler b8dd49
+# (which evaluates to FALSE in cmake)
Kevin Kofler b8dd49
+macro(KDE4_CHECK_EXECUTABLE_PARAMS _output_LIST _nogui _uninst _test)
Kevin Kofler b8dd49
+   set(${_nogui})
Kevin Kofler b8dd49
+   set(${_uninst})
Kevin Kofler b8dd49
+   set(${_test})
Kevin Kofler b8dd49
+   set(${_output_LIST} ${ARGN})
Kevin Kofler b8dd49
+   list(LENGTH ${_output_LIST} count)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   list(GET ${_output_LIST} 0 first_PARAM)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(second_PARAM "NOTFOUND")
Kevin Kofler b8dd49
+   if (${count} GREATER 1)
Kevin Kofler b8dd49
+      list(GET ${_output_LIST} 1 second_PARAM)
Kevin Kofler b8dd49
+   endif (${count} GREATER 1)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(remove "NOTFOUND")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${first_PARAM} STREQUAL "NOGUI")
Kevin Kofler b8dd49
+      set(${_nogui} "NOGUI")
Kevin Kofler b8dd49
+      set(remove 0)
Kevin Kofler b8dd49
+   endif (${first_PARAM} STREQUAL "NOGUI")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${first_PARAM} STREQUAL "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+      set(${_uninst} "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+      set(remove 0)
Kevin Kofler b8dd49
+   endif (${first_PARAM} STREQUAL "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${first_PARAM} STREQUAL "TEST")
Kevin Kofler b8dd49
+      set(${_test} "TEST")
Kevin Kofler b8dd49
+      set(remove 0)
Kevin Kofler b8dd49
+   endif (${first_PARAM} STREQUAL "TEST")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${second_PARAM} STREQUAL "NOGUI")
Kevin Kofler b8dd49
+      set(${_nogui} "NOGUI")
Kevin Kofler b8dd49
+      set(remove 0;1)
Kevin Kofler b8dd49
+   endif (${second_PARAM} STREQUAL "NOGUI")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${second_PARAM} STREQUAL "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+      set(${_uninst} "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+      set(remove 0;1)
Kevin Kofler b8dd49
+   endif (${second_PARAM} STREQUAL "RUN_UNINSTALLED")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${second_PARAM} STREQUAL "TEST")
Kevin Kofler b8dd49
+      set(${_test} "TEST")
Kevin Kofler b8dd49
+      set(remove 0;1)
Kevin Kofler b8dd49
+   endif (${second_PARAM} STREQUAL "TEST")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (NOT "${remove}" STREQUAL "NOTFOUND")
Kevin Kofler b8dd49
+      list(REMOVE_AT ${_output_LIST} ${remove})
Kevin Kofler b8dd49
+   endif (NOT "${remove}" STREQUAL "NOTFOUND")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro(KDE4_CHECK_EXECUTABLE_PARAMS)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_KDEINIT_EXECUTABLE _target_NAME )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_check_executable_params(_SRCS _nogui _uninst _test ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+#   if (WIN32)
Kevin Kofler b8dd49
+#      # under windows, just build a normal executable
Kevin Kofler b8dd49
+#      KDE4_ADD_EXECUTABLE(${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp ${ARGN} )
Kevin Kofler b8dd49
+#   else (WIN32)
Kevin Kofler b8dd49
+      # under UNIX, create a shared library and a small executable, which links to this library
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_handle_automoc(kdeinit_${_target_NAME} _SRCS)
Kevin Kofler b8dd49
+   if (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/kdeinit_${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
Kevin Kofler b8dd49
+      add_library(kdeinit_${_target_NAME} SHARED  ${CMAKE_CURRENT_BINARY_DIR}/kdeinit_${_target_NAME}_final_cpp.cpp ${_separate_files})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   else (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      add_library(kdeinit_${_target_NAME} SHARED ${_SRCS})
Kevin Kofler b8dd49
+   endif (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_handle_rpath_for_library(kdeinit_${_target_NAME})
Kevin Kofler b8dd49
+   set_target_properties(kdeinit_${_target_NAME} PROPERTIES OUTPUT_NAME kdeinit4_${_target_NAME})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   configure_file(${KDE4_MODULE_DIR}/kde4init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp)
Kevin Kofler b8dd49
+   kde4_add_executable(${_target_NAME} "${_nogui}" "${_uninst}" ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp)
Kevin Kofler b8dd49
+   target_link_libraries(${_target_NAME} kdeinit_${_target_NAME})
Kevin Kofler b8dd49
+#   endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (WIN32)
Kevin Kofler b8dd49
+      target_link_libraries(${_target_NAME} ${QT_QTMAIN_LIBRARY})
Kevin Kofler b8dd49
+   endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_KDEINIT_EXECUTABLE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# add a unit test, which is executed when running make test
Kevin Kofler b8dd49
+# it will be built with RPATH pointing to the build dir
Kevin Kofler b8dd49
+# The targets are always created, but only built for the "all"
Kevin Kofler b8dd49
+# target if the option KDE4_BUILD_TESTS is enabled. Otherwise the rules for the target
Kevin Kofler b8dd49
+# are created but not built by default. You can build them by manually building the target.
Kevin Kofler b8dd49
+# The name of the target can be specified using TESTNAME <testname>, if it is not given
Kevin Kofler b8dd49
+# the macro will default to the <name>
Kevin Kofler b8dd49
+macro (KDE4_ADD_UNIT_TEST _test_NAME)
Kevin Kofler b8dd49
+    set(_srcList ${ARGN})
Kevin Kofler b8dd49
+    set(_targetName ${_test_NAME})
Kevin Kofler b8dd49
+    if( ${ARGV1} STREQUAL "TESTNAME" )
Kevin Kofler b8dd49
+        set(_targetName ${ARGV2})
Kevin Kofler b8dd49
+        list(REMOVE_AT _srcList 0 1)
Kevin Kofler b8dd49
+    endif( ${ARGV1} STREQUAL "TESTNAME" )
Kevin Kofler b8dd49
+    
Kevin Kofler b8dd49
+    set(_nogui)
Kevin Kofler b8dd49
+    list(GET ${_srcList} 0 first_PARAM)
Kevin Kofler b8dd49
+    if( ${first_PARAM} STREQUAL "NOGUI" )
Kevin Kofler b8dd49
+        set(_nogui "NOGUI")
Kevin Kofler b8dd49
+    endif( ${first_PARAM} STREQUAL "NOGUI" )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    kde4_add_executable( ${_test_NAME} TEST ${_srcList} )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    if(NOT KDE4_TEST_OUTPUT)
Kevin Kofler b8dd49
+        set(KDE4_TEST_OUTPUT plaintext)
Kevin Kofler b8dd49
+    endif(NOT KDE4_TEST_OUTPUT)
Kevin Kofler b8dd49
+    set(KDE4_TEST_OUTPUT ${KDE4_TEST_OUTPUT} CACHE STRING "The output to generate when running the QTest unit tests")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    set(using_qtest "")
Kevin Kofler b8dd49
+    foreach(_filename ${_srcList})
Kevin Kofler b8dd49
+        if(NOT using_qtest)
Kevin Kofler b8dd49
+            if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_filename}")
Kevin Kofler b8dd49
+                file(READ ${_filename} file_CONTENT)
Kevin Kofler b8dd49
+                string(REGEX MATCH "QTEST_(KDE)?MAIN" using_qtest "${file_CONTENT}")
Kevin Kofler b8dd49
+            endif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_filename}")
Kevin Kofler b8dd49
+        endif(NOT using_qtest)
Kevin Kofler b8dd49
+    endforeach(_filename)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    set(_executable ${EXECUTABLE_OUTPUT_PATH}/${_test_NAME})
Kevin Kofler b8dd49
+    if (Q_WS_MAC AND NOT _nogui)
Kevin Kofler b8dd49
+        set(_executable ${EXECUTABLE_OUTPUT_PATH}/${_test_NAME}.app/Contents/MacOS/${_test_NAME})
Kevin Kofler b8dd49
+    else (Q_WS_MAC AND NOT _nogui)
Kevin Kofler b8dd49
+        # Use .shell wrapper where available, to use uninstalled libs.
Kevin Kofler b8dd49
+        if (UNIX)
Kevin Kofler b8dd49
+            set(_executable ${_executable}.shell)
Kevin Kofler b8dd49
+        endif (UNIX)
Kevin Kofler b8dd49
+    endif (Q_WS_MAC AND NOT _nogui)
Kevin Kofler b8dd49
+    
Kevin Kofler b8dd49
+    if (using_qtest AND KDE4_TEST_OUTPUT STREQUAL "xml")
Kevin Kofler b8dd49
+        #MESSAGE(STATUS "${_targetName} : Using QTestLib, can produce XML report.")
Kevin Kofler b8dd49
+        add_test( ${_targetName} ${_executable} -xml -o ${_targetName}.tml)
Kevin Kofler b8dd49
+    else (using_qtest AND KDE4_TEST_OUTPUT STREQUAL "xml")
Kevin Kofler b8dd49
+        #MESSAGE(STATUS "${_targetName} : NOT using QTestLib, can't produce XML report, please use QTestLib to write your unit tests.")
Kevin Kofler b8dd49
+        add_test( ${_targetName} ${_executable} )
Kevin Kofler b8dd49
+    endif (using_qtest AND KDE4_TEST_OUTPUT STREQUAL "xml")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+#    add_test( ${_targetName} ${EXECUTABLE_OUTPUT_PATH}/${_test_NAME} -xml -o ${_test_NAME}.tml )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+    if (NOT MSVC_IDE)   #not needed for the ide
Kevin Kofler b8dd49
+        # if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests
Kevin Kofler b8dd49
+        if (NOT KDE4_BUILD_TESTS)
Kevin Kofler b8dd49
+           get_directory_property(_buildtestsAdded BUILDTESTS_ADDED)
Kevin Kofler b8dd49
+           if(NOT _buildtestsAdded)
Kevin Kofler b8dd49
+              add_custom_target(buildtests)
Kevin Kofler b8dd49
+              set_directory_properties(PROPERTIES BUILDTESTS_ADDED TRUE)
Kevin Kofler b8dd49
+           endif(NOT _buildtestsAdded)
Kevin Kofler b8dd49
+           add_dependencies(buildtests ${_test_NAME})
Kevin Kofler b8dd49
+        endif (NOT KDE4_BUILD_TESTS)
Kevin Kofler b8dd49
+    endif (NOT MSVC_IDE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_UNIT_TEST)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_TEST_EXECUTABLE _target_NAME)
Kevin Kofler b8dd49
+   MESSAGE(SEND_ERROR "KDE4_ADD_TEST_EXECUTABLE is deprecated use KDE4_ADD_EXECUTABLE(<target> TEST <files>) instead")
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_TEST_EXECUTABLE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_EXECUTABLE _target_NAME)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_check_executable_params( _SRCS _nogui _uninst _test ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_add_executable_param)
Kevin Kofler b8dd49
+   set(_type "GUI")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # determine additional parameters for add_executable()
Kevin Kofler b8dd49
+   # for GUI apps, create a bundle on OSX
Kevin Kofler b8dd49
+   if (Q_WS_MAC)
Kevin Kofler b8dd49
+      set(_add_executable_param MACOSX_BUNDLE)
Kevin Kofler b8dd49
+   endif (Q_WS_MAC)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # for GUI apps, this disables the additional console under Windows
Kevin Kofler b8dd49
+   if (WIN32)
Kevin Kofler b8dd49
+      set(_add_executable_param WIN32)
Kevin Kofler b8dd49
+   endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (_nogui)
Kevin Kofler b8dd49
+      set(_type "NOGUI")
Kevin Kofler b8dd49
+      set(_add_executable_param)
Kevin Kofler b8dd49
+   endif (_nogui)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (_uninst OR _test)
Kevin Kofler b8dd49
+      set(_type "RUN_UNINSTALLED ${_type}")
Kevin Kofler b8dd49
+   endif (_uninst OR _test)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (_test AND NOT KDE4_BUILD_TESTS)
Kevin Kofler b8dd49
+      set(_add_executable_param ${_add_executable_param} EXCLUDE_FROM_ALL)
Kevin Kofler b8dd49
+   endif (_test AND NOT KDE4_BUILD_TESTS)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_handle_automoc(${_target_NAME} _SRCS)
Kevin Kofler b8dd49
+   if (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
Kevin Kofler b8dd49
+      add_executable(${_target_NAME} ${_add_executable_param} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files})
Kevin Kofler b8dd49
+   else (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      add_executable(${_target_NAME} ${_add_executable_param} ${_SRCS})
Kevin Kofler b8dd49
+   endif (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (_test)
Kevin Kofler b8dd49
+      set_target_properties(${_target_NAME} PROPERTIES COMPILE_FLAGS -DKDESRCDIR="\\"${CMAKE_CURRENT_SOURCE_DIR}\\"")
Kevin Kofler b8dd49
+   endif (_test)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_handle_rpath_for_executable(${_target_NAME} ${_type})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (WIN32)
Kevin Kofler b8dd49
+      target_link_libraries(${_target_NAME} ${QT_QTMAIN_LIBRARY})
Kevin Kofler b8dd49
+   endif (WIN32)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_EXECUTABLE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE)
Kevin Kofler b8dd49
+#is the first argument is "WITH_PREFIX" then keep the standard "lib" prefix, otherwise set the prefix empty
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_first_SRC ${_lib_TYPE})
Kevin Kofler b8dd49
+   set(_add_lib_param)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   if (${_lib_TYPE} STREQUAL "STATIC")
Kevin Kofler b8dd49
+      set(_first_SRC)
Kevin Kofler b8dd49
+      set(_add_lib_param STATIC)
Kevin Kofler b8dd49
+   endif (${_lib_TYPE} STREQUAL "STATIC")
Kevin Kofler b8dd49
+   if (${_lib_TYPE} STREQUAL "SHARED")
Kevin Kofler b8dd49
+      set(_first_SRC)
Kevin Kofler b8dd49
+      set(_add_lib_param SHARED)
Kevin Kofler b8dd49
+   endif (${_lib_TYPE} STREQUAL "SHARED")
Kevin Kofler b8dd49
+   if (${_lib_TYPE} STREQUAL "MODULE")
Kevin Kofler b8dd49
+      set(_first_SRC)
Kevin Kofler b8dd49
+      set(_add_lib_param MODULE)
Kevin Kofler b8dd49
+   endif (${_lib_TYPE} STREQUAL "MODULE")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   set(_SRCS ${_first_SRC} ${ARGN})
Kevin Kofler b8dd49
+   kde4_handle_automoc(${_target_NAME} _SRCS)
Kevin Kofler b8dd49
+   if (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
Kevin Kofler b8dd49
+      add_library(${_target_NAME} ${_add_lib_param}  ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files})
Kevin Kofler b8dd49
+   else (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      add_library(${_target_NAME} ${_add_lib_param} ${_SRCS})
Kevin Kofler b8dd49
+   endif (KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   kde4_handle_rpath_for_library(${_target_NAME})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   # for shared libraries a -DMAKE_target_LIB is required
Kevin Kofler b8dd49
+   string(TOUPPER ${_target_NAME} _symbol)
Kevin Kofler b8dd49
+   string(REGEX REPLACE "[^_A-Za-z0-9]" "_" _symbol ${_symbol})
Kevin Kofler b8dd49
+   set(_symbol "MAKE_${_symbol}_LIB")
Kevin Kofler b8dd49
+   set_target_properties(${_target_NAME} PROPERTIES DEFINE_SYMBOL ${_symbol})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_LIBRARY _target_NAME _lib_TYPE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_WIDGET_FILES _sources)
Kevin Kofler b8dd49
+   foreach (_current_FILE ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      get_filename_component(_input ${_current_FILE} ABSOLUTE)
Kevin Kofler b8dd49
+      get_filename_component(_basename ${_input} NAME_WE)
Kevin Kofler b8dd49
+      set(_source ${CMAKE_CURRENT_BINARY_DIR}/${_basename}widgets.cpp)
Kevin Kofler b8dd49
+      set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}widgets.moc)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # create source file from the .widgets file
Kevin Kofler b8dd49
+      add_custom_command(OUTPUT ${_source}
Kevin Kofler b8dd49
+        COMMAND ${KDE4_MAKEKDEWIDGETS_EXECUTABLE}
Kevin Kofler b8dd49
+        ARGS -o ${_source} ${_input}
Kevin Kofler b8dd49
+        MAIN_DEPENDENCY ${_input} DEPENDS ${_KDE4_MAKEKDEWIDGETS_DEP})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      # create moc file
Kevin Kofler b8dd49
+      qt4_generate_moc(${_source} ${_moc} )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+      list(APPEND ${_sources} ${_source} ${_moc})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   endforeach (_current_FILE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_WIDGET_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+MACRO(KDE4_REMOVE_OBSOLETE_CMAKE_FILES)
Kevin Kofler b8dd49
+# the files listed here will be removed by remove_obsoleted_cmake_files.cmake, Alex
Kevin Kofler b8dd49
+   install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/remove_files.cmake )
Kevin Kofler b8dd49
+   set(module_install_dir ${DATA_INSTALL_DIR}/cmake/modules )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/remove_files.cmake "#generated by cmake, dont edit\n\n")
Kevin Kofler b8dd49
+   foreach ( _current_FILE ${ARGN})
Kevin Kofler b8dd49
+      file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/remove_files.cmake "message(STATUS \"Removing ${module_install_dir}/${_current_FILE}\" )\n" )
Kevin Kofler b8dd49
+      file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/remove_files.cmake "exec_program( ${CMAKE_COMMAND} ARGS -E remove ${module_install_dir}/${_current_FILE} OUTPUT_VARIABLE _dummy)\n" )
Kevin Kofler b8dd49
+   endforeach ( _current_FILE)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+ENDMACRO(KDE4_REMOVE_OBSOLETE_CMAKE_FILES)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+MACRO(KDE4_NO_ENABLE_FINAL _project_name)
Kevin Kofler b8dd49
+   if(KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+      set(KDE4_ENABLE_FINAL OFF)
Kevin Kofler b8dd49
+      remove_definitions(-DKDE_USE_FINAL)
Kevin Kofler b8dd49
+      message(STATUS "You used enable-final argument but \"${_project_name}\" doesn't support it. Try to fix compile it and remove KDE4_NO_ENABLE_FINAL macro. Thanks")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+   endif(KDE4_ENABLE_FINAL)
Kevin Kofler b8dd49
+ENDMACRO(KDE4_NO_ENABLE_FINAL _project_name)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro(KDE4_CREATE_EXPORTS_HEADER _outputFile _libName)
Kevin Kofler b8dd49
+   string(TOUPPER ${_libName} _libNameUpperCase)
Kevin Kofler b8dd49
+   string(REGEX REPLACE "[^_A-Za-z0-9]" "_" _libNameUpperCase ${_libNameUpperCase})
Kevin Kofler b8dd49
+   # the next line is is required, because in CMake arguments to macros are not real
Kevin Kofler b8dd49
+   # variables, but handled differently. The next line create a real CMake variable,
Kevin Kofler b8dd49
+   # so configure_file() will replace it correctly.
Kevin Kofler b8dd49
+   set(_libName ${_libName})
Kevin Kofler b8dd49
+   # compared to write(FILE) configure_file() only really writes the file if the
Kevin Kofler b8dd49
+   # contents have changed. Otherwise we would have a lot of recompiles.
Kevin Kofler b8dd49
+   configure_file(${KDE4_MODULE_DIR}/kde4exportsheader.h.in ${_outputFile})
Kevin Kofler b8dd49
+endmacro(KDE4_CREATE_EXPORTS_HEADER _outputFile _libName)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_CREATE_HTML_HANDBOOK _docbook)
Kevin Kofler b8dd49
+   message(STATUS "KDE4_CREATE_HTML_HANDBOOK() is deprecated. Enable the option KDE4_ENABLE_HTMLHANDBOOK instead, this will give you targets htmlhandbook for creating the html help.")
Kevin Kofler b8dd49
+endmacro (KDE4_CREATE_HTML_HANDBOOK)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# adds application icon to target source list
Kevin Kofler b8dd49
+# 'appsources' - the sources of the application
Kevin Kofler b8dd49
+# 'pngfiles' - specifies the list of icon files
Kevin Kofler b8dd49
+# example: KDE4_ADD_WIN32_APP_ICON(myapp_SRCS "pics/cr16-myapp.png;pics/cr32-myapp.png")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_WIN32_APP_ICON appsources)
Kevin Kofler b8dd49
+    message(STATUS "KDE4_ADD_WIN32_APP_ICON() is deprecated, use KDE4_ADD_APP_ICON() instead")
Kevin Kofler b8dd49
+    if (WIN32)
Kevin Kofler b8dd49
+        find_program(PNG2ICO_EXECUTABLE NAMES png2ico)
Kevin Kofler b8dd49
+        find_program(WINDRES_EXECUTABLE NAMES windres)
Kevin Kofler b8dd49
+        if(MSVC)
Kevin Kofler b8dd49
+            set(WINDRES_EXECUTABLE TRUE)
Kevin Kofler b8dd49
+        endif(MSVC)
Kevin Kofler b8dd49
+        STRING(REPLACE _SRCS "" appname ${appsources})
Kevin Kofler b8dd49
+        if (PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE)
Kevin Kofler b8dd49
+            set (_outfilename ${CMAKE_CURRENT_BINARY_DIR}/${appname})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+            # png2ico is found by the above find_program
Kevin Kofler b8dd49
+#            message("png2ico ${_outfilename}.ico ${ARGN}")
Kevin Kofler b8dd49
+            exec_program(png2ico ARGS ${_outfilename}.ico ${ARGN})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+            # now make rc file for adding it to the sources
Kevin Kofler b8dd49
+            file(WRITE ${_outfilename}.rc "IDI_ICON1        ICON        DISCARDABLE    \"${_outfilename}.ico\"\n")
Kevin Kofler b8dd49
+            if (MINGW)
Kevin Kofler b8dd49
+                exec_program(windres
Kevin Kofler b8dd49
+                    ARGS "-i ${_outfilename}.rc -o ${_outfilename}_res.o --include-dir=${CMAKE_CURRENT_SOURCE_DIR}")
Kevin Kofler b8dd49
+                list(APPEND ${appsources} ${CMAKE_CURRENT_BINARY_DIR}/${appname}_res.o)
Kevin Kofler b8dd49
+            else(MINGW)
Kevin Kofler b8dd49
+                list(APPEND ${appsources} ${CMAKE_CURRENT_BINARY_DIR}/${appname}.rc)
Kevin Kofler b8dd49
+            endif(MINGW)
Kevin Kofler b8dd49
+        endif(PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE)
Kevin Kofler b8dd49
+    endif(WIN32)
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_WIN32_APP_ICON)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# adds application icon to target source list 
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+# this macro adds an application icon to the specified target
Kevin Kofler b8dd49
+# mac osx notes : the application icon is added to a Mac OS X bundle so that Finder and friends show the right thing.
Kevin Kofler b8dd49
+# win32 notes: the application icon(s) are compiled into the application 
Kevin Kofler b8dd49
+# parameters: 
Kevin Kofler b8dd49
+# 'appsources'  - specifies the list of source files 
Kevin Kofler b8dd49
+# 'pattern'     - regular expression for searching application icons 
Kevin Kofler b8dd49
+# example: KDE4_ADD_APP_ICON( myapp_sources "pics/cr*-myapp.png")
Kevin Kofler b8dd49
+# example: KDE4_ADD_APP_ICON( myapp_sources "icons/oxygen/*/apps/myapp.png")
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+macro (KDE4_ADD_APP_ICON appsources pattern)
Kevin Kofler b8dd49
+    string(REPLACE _SRCS "" target ${appsources})
Kevin Kofler b8dd49
+    if (WIN32)
Kevin Kofler b8dd49
+        find_program(PNG2ICO_EXECUTABLE NAMES png2ico)
Kevin Kofler b8dd49
+        find_program(WINDRES_EXECUTABLE NAMES windres)
Kevin Kofler b8dd49
+        if(MSVC)
Kevin Kofler b8dd49
+            set(WINDRES_EXECUTABLE TRUE)
Kevin Kofler b8dd49
+        endif(MSVC)
Kevin Kofler b8dd49
+        if (PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE)
Kevin Kofler b8dd49
+            string(REPLACE "*" "(.*)" pattern_rx "${pattern}")
Kevin Kofler b8dd49
+            file(GLOB_RECURSE files  "${pattern}")
Kevin Kofler b8dd49
+            foreach (it ${files})
Kevin Kofler b8dd49
+                string(REGEX REPLACE "${pattern_rx}" "\\1" fn "${it}")
Kevin Kofler b8dd49
+                if (fn MATCHES ".*16.*" )
Kevin Kofler b8dd49
+                    list (APPEND _icons ${it})
Kevin Kofler b8dd49
+                endif (fn MATCHES ".*16.*")
Kevin Kofler b8dd49
+                if (fn MATCHES ".*32.*" )
Kevin Kofler b8dd49
+                    list (APPEND _icons ${it})
Kevin Kofler b8dd49
+                endif (fn MATCHES ".*32.*")
Kevin Kofler b8dd49
+                if (fn MATCHES ".*48.*" )
Kevin Kofler b8dd49
+                    list (APPEND _icons ${it})
Kevin Kofler b8dd49
+                endif (fn MATCHES ".*48.*")
Kevin Kofler b8dd49
+                if (fn MATCHES ".*64.*" )
Kevin Kofler b8dd49
+                    list (APPEND _icons ${it})
Kevin Kofler b8dd49
+                endif (fn MATCHES ".*64.*")
Kevin Kofler b8dd49
+                if (fn MATCHES ".*128.*" )
Kevin Kofler b8dd49
+                    list (APPEND _icons ${it})
Kevin Kofler b8dd49
+                endif (fn MATCHES ".*128.*")
Kevin Kofler b8dd49
+            endforeach (it)
Kevin Kofler b8dd49
+            if (_icons)
Kevin Kofler b8dd49
+                set (_outfilename ${CMAKE_CURRENT_BINARY_DIR}/${target})
Kevin Kofler b8dd49
+                add_custom_command(OUTPUT ${_outfilename}.ico ${_outfilename}.rc
Kevin Kofler b8dd49
+                                   COMMAND ${PNG2ICO_EXECUTABLE} ARGS --rcfile ${_outfilename}.rc ${_outfilename}.ico ${_icons}
Kevin Kofler b8dd49
+                                   DEPENDS ${PNG2ICO_EXECUTABLE} ${_icons}
Kevin Kofler b8dd49
+                                   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Kevin Kofler b8dd49
+                                  )
Kevin Kofler b8dd49
+                if (MINGW)
Kevin Kofler b8dd49
+                    add_custom_command(OUTPUT ${_outfilename}_res.o
Kevin Kofler b8dd49
+                                       COMMAND ${WINDRES_EXECUTABLE} ARGS -i ${_outfilename}.rc -o ${_outfilename}_res.o --include-dir=${CMAKE_CURRENT_SOURCE_DIR}
Kevin Kofler b8dd49
+                                       DEPENDS ${WINDRES_EXECUTABLE} ${_outfilename}.rc
Kevin Kofler b8dd49
+                                       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Kevin Kofler b8dd49
+                                      )
Kevin Kofler b8dd49
+                    list(APPEND ${appsources} ${_outfilename}_res.o)
Kevin Kofler b8dd49
+                else(MINGW)
Kevin Kofler b8dd49
+                    list(APPEND ${appsources} ${_outfilename}.rc)
Kevin Kofler b8dd49
+                endif(MINGW)
Kevin Kofler b8dd49
+            else(_icons)
Kevin Kofler b8dd49
+                message(STATUS "Unable to find a related icon for target ${target} - application will not have an application icon!")
Kevin Kofler b8dd49
+            endif(_icons)
Kevin Kofler b8dd49
+        else(PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE)
Kevin Kofler b8dd49
+            message(STATUS "Unable to find the png2ico or windres utilities - application will not have an application icon!")
Kevin Kofler b8dd49
+        endif(PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE)
Kevin Kofler b8dd49
+    endif(WIN32)
Kevin Kofler b8dd49
+    if (Q_WS_MAC)
Kevin Kofler b8dd49
+        # first convert image to a tiff using the Mac OS X "sips" utility,
Kevin Kofler b8dd49
+        # then use tiff2icns to convert to an icon
Kevin Kofler b8dd49
+        find_program(SIPS_EXECUTABLE NAMES sips)
Kevin Kofler b8dd49
+        find_program(TIFF2ICNS_EXECUTABLE NAMES tiff2icns)
Kevin Kofler b8dd49
+        if (SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE)
Kevin Kofler b8dd49
+            file(GLOB_RECURSE files  "${pattern}")
Kevin Kofler b8dd49
+            # we can only test for the 128-icon like that - we don't use patterns anymore
Kevin Kofler b8dd49
+            foreach (it ${files})
Kevin Kofler b8dd49
+                if (it MATCHES ".*128.*" )
Kevin Kofler b8dd49
+                    set (_icon ${it})
Kevin Kofler b8dd49
+                endif (it MATCHES ".*128.*")
Kevin Kofler b8dd49
+            endforeach (it)
Kevin Kofler b8dd49
+            set (_outfilename ${CMAKE_CURRENT_BINARY_DIR}/${target})
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+            if (_icon)
Kevin Kofler b8dd49
+                
Kevin Kofler b8dd49
+                # first, get the basename of our app icon
Kevin Kofler b8dd49
+                add_custom_command(OUTPUT ${_outfilename}.icns
Kevin Kofler b8dd49
+                                   COMMAND ${SIPS_EXECUTABLE} -s format tiff ${_icon} --out ${outfilename}.tiff
Kevin Kofler b8dd49
+                                   COMMAND ${TIFF2ICNS_EXECUTABLE} ${outfilename}.tiff ${_outfilename}.icns
Kevin Kofler b8dd49
+                                   DEPENDS ${_icon}
Kevin Kofler b8dd49
+                                   )
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+                macro_additional_clean_files(${outfilename}.tiff ${_outfilename}.icns)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+                # This will register the icon into the bundle
Kevin Kofler b8dd49
+                set(MACOSX_BUNDLE_ICON_FILE ${target}.icns)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+                # Append the icns file to the sources list so it will be a dependency to the
Kevin Kofler b8dd49
+                # main target
Kevin Kofler b8dd49
+                list(APPEND ${appsources} ${_outfilename}.icns)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+                #            this doesn't seem to work for me - Use manual "install" instead
Kevin Kofler b8dd49
+                #            SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/${target}.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+                install(FILES ${_outfilename}.icns DESTINATION ${BIN_INSTALL_DIR}/${target}.app/Contents/Resources/)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+            else(_icon)
Kevin Kofler b8dd49
+                # TODO - try to scale a non-128 icon...? Try to convert an SVG on the fly?
Kevin Kofler b8dd49
+                message(STATUS "Unable to find an 128x128 icon for target ${target} - application will not have an application icon!")
Kevin Kofler b8dd49
+            endif(_icon)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+        else(SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE)
Kevin Kofler b8dd49
+            message(STATUS "Unable to find the sips and tiff2icns utilities - application will not have an application icon!")
Kevin Kofler b8dd49
+        endif(SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE)
Kevin Kofler b8dd49
+    endif(Q_WS_MAC)    
Kevin Kofler b8dd49
+endmacro (KDE4_ADD_APP_ICON)
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
+
Kevin Kofler b8dd49
Index: cmake/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- cmake/CMakeLists.txt	(Revision 801314)
Kevin Kofler b8dd49
+++ cmake/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -1,3 +1,4 @@
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
+add_subdirectory(automoc)
Kevin Kofler b8dd49
 #add_subdirectory(modules)
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
Index: server/control/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- server/control/CMakeLists.txt	(Revision 801314)
Kevin Kofler b8dd49
+++ server/control/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -25,7 +25,7 @@
Kevin Kofler b8dd49
   processcontrol.cpp
Kevin Kofler b8dd49
 )
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-automoc4(akonadi_control control_SRCS)
Kevin Kofler b8dd49
+qt4_automoc(${control_SRCS})
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 qt4_add_dbus_adaptor( control_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../../interfaces/org.kde.Akonadi.AgentManager.xml agentmanager.h AgentManager )
Kevin Kofler b8dd49
 qt4_add_dbus_adaptor( control_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/org.kde.Akonadi.ControlManager.xml controlmanager.h ControlManager )
Kevin Kofler b8dd49
Index: server/tests/unittest/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- server/tests/unittest/CMakeLists.txt	(Revision 801314)
Kevin Kofler b8dd49
+++ server/tests/unittest/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -5,8 +5,6 @@
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 set(handlertest_SRCS handlertest.cpp teststoragebackend.cpp )
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-automoc4(handlertest handlertest_SRCS)
Kevin Kofler b8dd49
-add_executable(handlertest ${handlertest_SRCS})
Kevin Kofler b8dd49
-add_test(akonadi-handlertest handlertest)
Kevin Kofler b8dd49
+kde4_add_unit_test(handlertest TESTNAME akonadi-handlertest ${handlertest_SRCS})
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 target_link_libraries(handlertest akonadiprivate ${QT_QTTEST_LIBRARY})
Kevin Kofler b8dd49
Index: server/src/tests/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- server/src/tests/CMakeLists.txt	(Revision 801314)
Kevin Kofler b8dd49
+++ server/src/tests/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -5,17 +5,10 @@
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 set(interpretertest_SRCS interpretertest.cpp ../interpreter.cpp )
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-automoc4(interpretertest interpretertest_SRCS)
Kevin Kofler b8dd49
-add_executable(interpretertest ${interpretertest_SRCS})
Kevin Kofler b8dd49
-add_test(akonadi-interpretertest interpretertest)
Kevin Kofler b8dd49
+kde4_add_unit_test(interpretertest TESTNAME akonadi-interpretertest ${interpretertest_SRCS})
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 target_link_libraries(interpretertest ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY})
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-set(querybuildertest_SRCS querybuildertest.cpp)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
-automoc4(querybuildertest querybuildertest_SRCS)
Kevin Kofler b8dd49
-add_executable(querybuildertest ${querybuildertest_SRCS})
Kevin Kofler b8dd49
-add_test(akonadi-querybuildertest querybuildertest)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
+kde4_add_unit_test(querybuildertest TESTNAME akonadi-querybuildertest querybuildertest.cpp)
Kevin Kofler b8dd49
 target_link_libraries(querybuildertest ${QT_QTCORE_LIBRARY} ${QT_QTSQL_LIBRARY} ${QT_QTTEST_LIBRARY})
Kevin Kofler b8dd49
Index: server/akonadictl/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- server/akonadictl/CMakeLists.txt	(Revision 801314)
Kevin Kofler b8dd49
+++ server/akonadictl/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -12,7 +12,7 @@
Kevin Kofler b8dd49
   main.cpp
Kevin Kofler b8dd49
 )
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-automoc4(akonadictl akonadictl_SRCS)
Kevin Kofler b8dd49
+qt4_automoc(${akonadictl_SRCS})
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 qt4_add_dbus_interfaces( akonadictl_SRCS
Kevin Kofler b8dd49
   ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/org.kde.Akonadi.ControlManager.xml
Kevin Kofler b8dd49
Index: server/CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- server/CMakeLists.txt	(Revision 801314)
Kevin Kofler b8dd49
+++ server/CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -98,7 +103,7 @@
Kevin Kofler b8dd49
   src/nepomukmanager.cpp
Kevin Kofler b8dd49
 )
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-automoc4(akonadiprivate libakonadiprivate_SRCS)
Kevin Kofler b8dd49
+qt4_automoc(${libakonadiprivate_SRCS})
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 qt4_add_dbus_adaptor( libakonadiprivate_SRCS interfaces/org.kde.Akonadi.TracerNotification.xml dbustracer.h Akonadi::DBusTracer )
Kevin Kofler b8dd49
 qt4_add_dbus_adaptor( libakonadiprivate_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/org.kde.Akonadi.Tracer.xml tracer.h Akonadi::Tracer
Kevin Kofler b8dd49
@@ -114,7 +119,7 @@
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 set(xesam_xml  interfaces/org.freedesktop.xesam.Search.xml)
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-set_source_files_properties(${xesam_xml} PROPERTIES INCLUDE "xesamtypes.h")
Kevin Kofler b8dd49
+SET_SOURCE_FILES_PROPERTIES(${xesam_xml} PROPERTIES INCLUDE "xesamtypes.h")
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 qt4_add_dbus_interface( libakonadiprivate_SRCS ${xesam_xml} xesaminterface )
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
Index: CMakeLists.txt
Kevin Kofler b8dd49
===================================================================
Kevin Kofler b8dd49
--- CMakeLists.txt	(Revision 801302)
Kevin Kofler b8dd49
+++ CMakeLists.txt	(Revision 801202)
Kevin Kofler b8dd49
@@ -2,9 +2,6 @@
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 cmake_minimum_required(VERSION 2.4.5 FATAL_ERROR)
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-# enable unit tests
Kevin Kofler b8dd49
-enable_testing()
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
 # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
Kevin Kofler b8dd49
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
@@ -18,8 +15,6 @@
Kevin Kofler b8dd49
    message(FATAL_ERROR  "Akonadi requires Qt4 with QtDBus module in order to built.")
Kevin Kofler b8dd49
 endif(NOT QT_QTDBUS_FOUND)
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-find_package(Automoc4 REQUIRED)
Kevin Kofler b8dd49
-
Kevin Kofler b8dd49
 set(SHARED_MIME_INFO_MINIMUM_VERSION "0.20")
Kevin Kofler b8dd49
 find_package(SharedMimeInfo REQUIRED)
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
@@ -81,7 +76,7 @@
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 ################# build targets ########################
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
-#add_subdirectory(cmake)
Kevin Kofler b8dd49
+add_subdirectory(cmake)
Kevin Kofler b8dd49
 
Kevin Kofler b8dd49
 include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/akonadi ${QT_INCLUDES})