Skip to content

Commit 12e0f35

Browse files
committed
Set GDAL env vars for when gdal lib is bundled in app on Mac
1 parent 8c8a9e0 commit 12e0f35

File tree

5 files changed

+72
-0
lines changed

5 files changed

+72
-0
lines changed

src/app/main.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,24 @@ int main( int argc, char *argv[] )
682682
{
683683
setenv( "GDAL_DRIVER_PATH", gdalPlugins.toUtf8(), 1 );
684684
}
685+
686+
// Point GDAL_DATA at any GDAL share directory embedded in the app bundle
687+
if ( !getenv( "GDAL_DATA" ) )
688+
{
689+
QStringList gdalShares;
690+
QString appResources( QDir::cleanPath( QgsApplication::pkgDataPath() ) );
691+
gdalShares << QCoreApplication::applicationDirPath().append( "/share/gdal" )
692+
<< appResources.append( "/share/gdal" )
693+
<< appResources.append( "/gdal" );
694+
Q_FOREACH ( const QString& gdalShare, gdalShares )
695+
{
696+
if ( QFile::exists( gdalShare ) )
697+
{
698+
setenv( "GDAL_DATA", gdalShare.toUtf8().constData(), 1 );
699+
break;
700+
}
701+
}
702+
}
685703
#endif
686704

687705
QSettings mySettings;

src/browser/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,6 @@ IF (APPLE)
103103
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../${QGIS_LIB_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/MacOS/lib\")")
104104
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_PLUGIN_SUBDIR}/.. \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/Plugins\")")
105105
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_DATA_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/Resources\")")
106+
# may not exist, unless BundleUtilities are used
107+
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../share \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/QGIS Browser.app/Contents/MacOS/share\")")
106108
ENDIF (APPLE)

src/browser/main.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,34 @@ int main( int argc, char ** argv )
5151
QCoreApplication::setOrganizationDomain( "qgis.org" );
5252
QCoreApplication::setApplicationName( "QGIS2" );
5353

54+
#ifdef Q_OS_MACX
55+
// If the GDAL plugins are bundled with the application and GDAL_DRIVER_PATH
56+
// is not already defined, use the GDAL plugins in the application bundle.
57+
QString gdalPlugins( QCoreApplication::applicationDirPath().append( "/lib/gdalplugins" ) );
58+
if ( QFile::exists( gdalPlugins ) && !getenv( "GDAL_DRIVER_PATH" ) )
59+
{
60+
setenv( "GDAL_DRIVER_PATH", gdalPlugins.toUtf8(), 1 );
61+
}
62+
63+
// Point GDAL_DATA at any GDAL share directory embedded in the app bundle
64+
if ( !getenv( "GDAL_DATA" ) )
65+
{
66+
QStringList gdalShares;
67+
QString appResources( QDir::cleanPath( QgsApplication::pkgDataPath() ) );
68+
gdalShares << QCoreApplication::applicationDirPath().append( "/share/gdal" )
69+
<< appResources.append( "/share/gdal" )
70+
<< appResources.append( "/gdal" );
71+
Q_FOREACH ( const QString& gdalShare, gdalShares )
72+
{
73+
if ( QFile::exists( gdalShare ) )
74+
{
75+
setenv( "GDAL_DATA", gdalShare.toUtf8().constData(), 1 );
76+
break;
77+
}
78+
}
79+
}
80+
#endif
81+
5482
QgsBrowser w;
5583

5684
a.connect( &a, SIGNAL( aboutToQuit() ), &w, SLOT( saveWindowState() ) );

tests/bench/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,11 @@ INSTALL (TARGETS qgis_bench
5353
)
5454
IF (APPLE)
5555
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_FW_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/Frameworks\")")
56+
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../${QGIS_LIB_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/MacOS/lib\")")
57+
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_PLUGIN_SUBDIR}/.. \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/Plugins\")")
58+
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_DATA_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/Resources\")")
59+
# may not exist, unless BundleUtilities are used
60+
INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../../share \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_bench.app/Contents/MacOS/share\")")
61+
5662
ENDIF (APPLE)
5763

tests/bench/main.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,24 @@ int main( int argc, char *argv[] )
407407
{
408408
setenv( "GDAL_DRIVER_PATH", gdalPlugins.toUtf8(), 1 );
409409
}
410+
411+
// Point GDAL_DATA at any GDAL share directory embedded in the app bundle
412+
if ( !getenv( "GDAL_DATA" ) )
413+
{
414+
QStringList gdalShares;
415+
QString appResources( QDir::cleanPath( QgsApplication::pkgDataPath() ) );
416+
gdalShares << QCoreApplication::applicationDirPath().append( "/share/gdal" )
417+
<< appResources.append( "/share/gdal" )
418+
<< appResources.append( "/gdal" );
419+
Q_FOREACH ( const QString& gdalShare, gdalShares )
420+
{
421+
if ( QFile::exists( gdalShare ) )
422+
{
423+
setenv( "GDAL_DATA", gdalShare.toUtf8().constData(), 1 );
424+
break;
425+
}
426+
}
427+
}
410428
#endif
411429

412430
QSettings mySettings;

0 commit comments

Comments
 (0)