summaryrefslogtreecommitdiff
path: root/quacker
diff options
context:
space:
mode:
authorJohn Fultz <jfultz@wolfram.com>2014-12-10 02:22:51 -0600
committerJohn Fultz <jfultz@wolfram.com>2014-12-10 02:22:51 -0600
commit3c7f297b8d2e0b273ed2d56d138ff0ae026a4032 (patch)
treeb5298122694c7da98ded64c3803705edfec89c7c /quacker
parent1462523422911378306b7d146a23b14d0b58b444 (diff)
Move data/ to MacOS/Resources/ in Mac bundle.
This fixes the various issues with needing to code-sign data files. And simplifies the process of building and preparing to code sign considerably.
Diffstat (limited to 'quacker')
-rw-r--r--quacker/quacker.pro33
-rw-r--r--quacker/settings.cpp28
2 files changed, 39 insertions, 22 deletions
diff --git a/quacker/quacker.pro b/quacker/quacker.pro
index 2ee8cc2..246a261 100644
--- a/quacker/quacker.pro
+++ b/quacker/quacker.pro
@@ -1,18 +1,9 @@
TEMPLATE = app
-VERSION = 0.98
+VERSION = 0.99
TARGET = Quackle
DEPENDPATH += .. ../quackleio
INCLUDEPATH += . ..
-APP_ALPHABETS_FILES.files = $$files(../data/alphabets/*)
-APP_LEXICA_FILES.files = $$files(../data/lexica/*)
-APP_STRATEGY_FILEScswapr07.files = $$files(../data/strategy/cswapr07/*)
-APP_STRATEGY_FILEScsw12.files = $$files(../data/strategy/csw12/*)
-APP_STRATEGY_FILESods5.files = $$files(../data/strategy/ods5/*)
-APP_STRATEGY_FILEStwl06.files = $$files(../data/strategy/twl06/*)
-APP_STRATEGY_FILEStwl98.files = $$files(../data/strategy/twl98/*)
-APP_THEME_FILES.files = $$files(../data/themes/*)
-
MOC_DIR = moc
# enable/disable debug symbols
@@ -31,6 +22,7 @@ QMAKE_LFLAGS_RELEASE += -L../lib/release -L../quackleio/lib/release
QMAKE_LFLAGS_DEBUG += -L../lib/debug -L../quackleio/lib/debug
LIBS += -lquackleio -lquackle
+macx:LIBS += -framework CoreFoundation
# Input
HEADERS += *.h
@@ -55,16 +47,17 @@ macx {
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.8
# copy data/ directory into app bundle
- APP_ALPHABETS_FILES.path = Contents/MacOS/data/alphabets
- APP_LEXICA_FILES.path = Contents/MacOS/data/lexica
- APP_STRATEGY_FILEScswapr07.path = Contents/MacOS/data/strategy/cswapr07
- APP_STRATEGY_FILEScsw12.path = Contents/MacOS/data/strategy/csw12
- APP_STRATEGY_FILESods5.path = Contents/MacOS/data/strategy/ods5
- APP_STRATEGY_FILEStwl06.path = Contents/MacOS/data/strategy/twl06
- APP_STRATEGY_FILEStwl98.path = Contents/MacOS/data/strategy/twl98
- APP_THEME_FILES.path = Contents/MacOS/data/themes
-
- QMAKE_BUNDLE_DATA += APP_ALPHABETS_FILES APP_LEXICA_FILES APP_STRATEGY_FILEScswapr07 APP_STRATEGY_FILEScsw12 APP_STRATEGY_FILESods5 APP_STRATEGY_FILEStwl06 APP_STRATEGY_FILEStwl98 APP_THEME_FILES
+ APP_ALPHABETS_FILES.files = ../data/alphabets
+ APP_LEXICA_FILES.files = ../data/lexica
+ APP_STRATEGY_FILES.files = ../data/strategy
+ APP_THEME_FILES.files = ../data/themes
+
+ APP_ALPHABETS_FILES.path = Contents/Resources/data
+ APP_LEXICA_FILES.path = Contents/Resources/data
+ APP_STRATEGY_FILES.path = Contents/Resources/data
+ APP_THEME_FILES.path = Contents/Resources/data
+
+ QMAKE_BUNDLE_DATA += APP_ALPHABETS_FILES APP_LEXICA_FILES APP_STRATEGY_FILES APP_THEME_FILES
# plist gymnastics
QMAKE_POST_LINK += ;cp -n $$PWD/quacker.plist $${OUT_PWD}/$${TARGET}.app/Contents
diff --git a/quacker/settings.cpp b/quacker/settings.cpp
index 7c3d6bd..301608e 100644
--- a/quacker/settings.cpp
+++ b/quacker/settings.cpp
@@ -24,6 +24,10 @@
#include <QtGui>
#include <QMessageBox>
+#ifdef Q_WS_MAC
+#include <CoreFoundation/CoreFoundation.h>
+#endif // Q_WS_MAC
+
#include "alphabetparameters.h"
#include "board.h"
#include "boardparameters.h"
@@ -52,6 +56,28 @@ Settings::Settings(QWidget *parent)
: QWidget(parent), m_lexiconNameCombo(0), m_alphabetNameCombo(0), m_themeNameCombo(0)
{
m_self = this;
+ QDir directory = QFileInfo(qApp->arguments().at(0)).absoluteDir();
+
+ #ifdef Q_WS_MAC
+ if (CFBundleGetMainBundle())
+ {
+ CFURLRef dataUrlRef = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("data"), NULL, NULL);
+ if (dataUrlRef)
+ {
+ CFStringRef macPath = CFURLCopyFileSystemPath(dataUrlRef, kCFURLPOSIXPathStyle);
+ size_t sizeOfBuf = CFStringGetMaximumSizeOfFileSystemRepresentation(macPath);
+ char* buf = (char*) malloc(sizeOfBuf);
+
+ CFStringGetFileSystemRepresentation(macPath, buf, sizeOfBuf);
+ directory = QDir(buf);
+ directory.cdUp();
+
+ free(buf);
+ CFRelease(dataUrlRef);
+ CFRelease(macPath);
+ }
+ }
+ #endif
if (QFile::exists("data"))
m_dataDir = "data";
@@ -59,10 +85,8 @@ Settings::Settings(QWidget *parent)
m_dataDir = "../data";
else if (QFile::exists("Quackle.app/Contents/data"))
m_dataDir = "Quackle.app/Contents/data";
-
else
{
- QDir directory = QFileInfo(qApp->arguments().at(0)).absoluteDir();
if (!directory.cd("data") || !directory.cd("../data"))
QMessageBox::critical(0, tr("Error Initializing Data Files - Quacker"), tr("<p>Could not open data directory. Quackle will be useless. Try running the quacker executable with quackle/quacker/ as the current directory.</p>"));
m_dataDir = directory.absolutePath();