Use correct path to qml files when looking for them in examples
authorOliver Wolff <oliver.wolff@digia.com>
Tue, 2 Oct 2012 09:45:13 +0000 (11:45 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 4 Oct 2012 06:17:33 +0000 (08:17 +0200)
As executables might end up in different folders on different plaforms
when built, examples' shared.h should not rely on having the qml files
in the same folder as the executables. On Windows they end up in debug/
release by default, while they are put in foo.app/Contents/MacOs on Mac
if app_bundle is set in CONFIG.

Change-Id: If0cea4c186920eb4689d5941b6ff5f333d97c574
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
examples/shared/shared.h

index 2a6cce0..613798f 100644 (file)
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
+#include <QDir>
 #include <QGuiApplication>
 #include <QQuickView>
 #define DECLARATIVE_EXAMPLE_MAIN(NAME) int main(int argc, char* argv[]) \
 {\
     QGuiApplication app(argc,argv);\
     QQuickView view;\
-    view.setSource(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + QLatin1String("/" #NAME ".qml")));\
+    QDir directory(QCoreApplication::applicationDirPath());\
+    if (QGuiApplication::platformName() == QLatin1String("windows")) {\
+        if (directory.absolutePath().endsWith("/debug", Qt::CaseInsensitive)\
+            || directory.absolutePath().endsWith("/release", Qt::CaseInsensitive))\
+            if (!directory.cdUp())\
+                exit(-1);\
+    } else if (QGuiApplication::platformName() == QLatin1String("Cocoa")) {\
+        if (directory.absolutePath().endsWith(#NAME".app/Contents/MacOS"))\
+            for (int i = 0; i < 3; ++i) {\
+                if (!directory.cdUp())\
+                    exit(-1);\
+            }\
+    }\
+    const QString fileName(directory.absolutePath() + "/" #NAME ".qml");\
+    if (!QFile::exists(fileName))\
+            exit(-1);\
+    view.setSource(QUrl::fromLocalFile(fileName));\
     view.show();\
     return app.exec();\
 }