From 546b8d23972c60851195cf7eff209949f5ba1fec Mon Sep 17 00:00:00 2001 From: Larry Shaffer Date: Wed, 11 Sep 2013 22:36:23 -0600 Subject: [PATCH] [globe] Fix Mac dependencies so plugin can run from app bundle --- CMakeLists.txt | 6 +++++- cmake_templates/qgsconfig.h.in | 2 ++ mac/cmake/1osg.cmake.in | 2 +- mac/cmake/1qt.cmake.in | 4 ++++ src/plugins/globe/globe_plugin.cpp | 9 +++++---- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f179eaa332f..fc959e58c50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -440,7 +440,11 @@ ELSE (WIN32) # changed later to reference in-app resources upon install SET (CMAKE_INSTALL_NAME_DIR ${CMAKE_BINARY_DIR}/output/lib) IF (WITH_GLOBE) - SET (OSG_PLUGINS_PATH "" CACHE PATH "Path to OSG plugins for bundling") + SET (OSG_PLUGINS_PATH "" CACHE PATH "Path to OSG plugins for bundling") + IF (QGIS_MACAPP_BUNDLE GREATER 0) + # ensure OSG plugins bundled path will be used by globe plugin + SET (HAVE_MACAPP_BUNDLED_OSG 1) + ENDIF (QGIS_MACAPP_BUNDLE GREATER 0) ENDIF (WITH_GLOBE) # recent cmakes force SDKs, recent SDKs don't have user symlinks # need to find non-system frameworks diff --git a/cmake_templates/qgsconfig.h.in b/cmake_templates/qgsconfig.h.in index 607bd6839d8..14cbf0a9ccd 100644 --- a/cmake_templates/qgsconfig.h.in +++ b/cmake_templates/qgsconfig.h.in @@ -50,5 +50,7 @@ #cmakedefine MAPSERVER_SKIP_ECW +#cmakedefine HAVE_MACAPP_BUNDLED_OSG + #endif diff --git a/mac/cmake/1osg.cmake.in b/mac/cmake/1osg.cmake.in index ca7fd6a554f..589526a96ef 100644 --- a/mac/cmake/1osg.cmake.in +++ b/mac/cmake/1osg.cmake.in @@ -15,7 +15,7 @@ SET (OSG_PLUGINS_PATH "@OSG_PLUGINS_PATH@") # list of osg frameworks to bundle -SET (OSGLIST OpenThreads osg osgDB osgGA osgViewer osgEarth osgEarthAnnotation osgEarthFeatures osgEarthSymbology osgEarthUtil osgFX osgManipulator osgShadow osgSim osgTerrain osgText osgUtil osgWidget) +SET (OSGLIST OpenThreads osg osgAnimation osgDB osgGA osgViewer osgEarth osgEarthAnnotation osgEarthFeatures osgEarthSymbology osgEarthUtil osgFX osgManipulator osgParticle osgPresentation osgShadow osgSim osgTerrain osgText osgUtil osgVolume osgWidget) IF (@HAVE_OSGEARTHQT@) SET (OSGLIST ${OSGLIST} osgQt osgEarthQt) ENDIF (@HAVE_OSGEARTHQT@) diff --git a/mac/cmake/1qt.cmake.in b/mac/cmake/1qt.cmake.in index 88324ec8f53..bc4790cd455 100644 --- a/mac/cmake/1qt.cmake.in +++ b/mac/cmake/1qt.cmake.in @@ -280,6 +280,10 @@ FOREACH (QFW ${QTLISTQG}) IF (@OSX_HAVE_LOADERPATH@) SET (QFW_CHG_TO "${ATLOADER}/@QGIS_PLUGIN_SUBDIR_REV@/${QGIS_FW_SUBDIR}/${LIBPOST}") ENDIF () + # osg qfont plugin + IF (@HAVE_OSGEARTHQT@) + INSTALLNAMETOOL_CHANGE ("${QFW_CHG}" "${QFW_CHG_TO}" "${QPLUGDIR}/../osgPlugins/osgdb_qfont.so") + ENDIF (@HAVE_OSGEARTHQT@) FOREACH (QI qgif;qico;qjpeg;qsvg;qtiff) INSTALLNAMETOOL_CHANGE ("${QFW_CHG}" "${QFW_CHG_TO}" "${QPLUGDIR}/../imageformats/lib${QI}.dylib") ENDFOREACH (QI) diff --git a/src/plugins/globe/globe_plugin.cpp b/src/plugins/globe/globe_plugin.cpp index babfd11650e..3ff11b2705c 100644 --- a/src/plugins/globe/globe_plugin.cpp +++ b/src/plugins/globe/globe_plugin.cpp @@ -96,10 +96,11 @@ GlobePlugin::GlobePlugin( QgisInterface* theQgisInterface ) setParent( theQgisInterface->mainWindow() ); // add internal osg plugin path if bundled osg on OS X -#ifdef QGIS_MACAPP_BUNDLE -#if QGIS_MACAPP_BUNDLE > 0 - setLibraryFilePathList( QgsApplication::prefixPath() + "/QGIS_PLUGIN_SUBDIR/../osgPlugins" ); -#endif +#ifdef HAVE_MACAPP_BUNDLED_OSG + if ( !QgsApplication::isRunningFromBuildDir() ) + { + osgDB::Registry::instance()->setLibraryFilePathList( QDir::cleanPath( QgsApplication::pluginPath() + "/../osgPlugins" ).toStdString() ); + } #endif mSettingsDialog = new QgsGlobePluginDialog( theQgisInterface->mainWindow(), QgisGui::ModalDialogFlags );