From 25cd9ebf452867ef5bc21e5a307ae8850f5c73a9 Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 15 Sep 2013 21:56:47 +0400
Subject: [PATCH 1/7] Plugins are frameworks in Ogre 1.9. Version hack removed.

---
 components/files/ogreplugin.cpp | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/components/files/ogreplugin.cpp b/components/files/ogreplugin.cpp
index c319f7758..6070c43a8 100644
--- a/components/files/ogreplugin.cpp
+++ b/components/files/ogreplugin.cpp
@@ -6,18 +6,12 @@
 namespace Files {
 
 bool loadOgrePlugin(const std::string &pluginDir, std::string pluginName, Ogre::Root &ogreRoot) {
-#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
-	std::ostringstream verStream;
-	verStream << "." << OGRE_VERSION_MAJOR << "." << OGRE_VERSION_MINOR << "." << OGRE_VERSION_PATCH;
-	pluginName = pluginName + verStream.str();
-#endif
-
 	std::string pluginExt;
 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
     pluginExt = ".dll";
 #endif
 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
-    pluginExt = ".dylib";
+    pluginExt = ".framework";
 #endif
 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
     pluginExt = ".so";

From 36fb89c6cdb203257e65d882123c13cf6c3d9829 Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 15 Sep 2013 23:03:07 +0400
Subject: [PATCH 2/7] Cleanup

---
 CMakeLists.txt | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ec306e5a..96b0e1a32 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -262,8 +262,6 @@ if (APPLE)
         set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_DBG})
     endif ()
 
-    #set(OGRE_PLUGIN_DIR "${OGRE_PLUGIN_DIR}/")
-
     configure_file(${OpenMW_SOURCE_DIR}/files/mac/Info.plist
         "${APP_BUNDLE_DIR}/Contents/Info.plist")
 
@@ -664,7 +662,7 @@ if (APPLE)
     set(CPACK_GENERATOR "DragNDrop")
     set(CPACK_PACKAGE_VERSION ${OPENMW_VERSION})
     set(CPACK_PACKAGE_VERSION_MAJOR ${OPENMW_VERSION_MAJOR})
-    set(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINO})
+    set(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINOR})
     set(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE})
 
     set(APPS "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}")

From a18e3c9cc17dc69d085c376435e263f139a641bb Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 15 Sep 2013 23:10:21 +0400
Subject: [PATCH 3/7] Fixed packaging when building against Ogre 1.9

---
 CMakeLists.txt | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 96b0e1a32..fa62d508f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -283,7 +283,7 @@ endif()
 add_definitions(-DOGRE_PLUGIN_DIR_REL="${OGRE_PLUGIN_DIR_REL}")
 add_definitions(-DOGRE_PLUGIN_DIR_DBG="${OGRE_PLUGIN_DIR_DBG}")
 if (APPLE AND OPENMW_OSX_DEPLOYMENT)
-    add_definitions(-DOGRE_PLUGIN_DIR="${APP_BUNDLE_NAME}/Contents/Plugins")
+    add_definitions(-DOGRE_PLUGIN_DIR="${APP_BUNDLE_NAME}/Contents/Frameworks")
 else()
     add_definitions(-DOGRE_PLUGIN_DIR="${OGRE_PLUGIN_DIR}")
 endif()
@@ -666,7 +666,7 @@ if (APPLE)
     set(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE})
 
     set(APPS "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}")
-    set(PLUGINS "")
+
     set(ABSOLUTE_PLUGINS "")
 
     foreach (PLUGIN ${USED_OGRE_PLUGINS})
@@ -674,11 +674,9 @@ if (APPLE)
         set(ABSOLUTE_PLUGINS ${PLUGIN_ABS} ${ABSOLUTE_PLUGINS})
     endforeach ()
 
-    set(PLUGIN_INSTALL_BASE "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}/Contents/Plugins")
-    install(FILES ${ABSOLUTE_PLUGINS} DESTINATION "${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}/Contents/Plugins" COMPONENT Runtime)
+    set(PLUGIN_INSTALL_BASE "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}/Contents/Frameworks")
     foreach (PLUGIN ${ABSOLUTE_PLUGINS})
-        get_filename_component(PLUGIN_RELATIVE ${PLUGIN} NAME)
-        set(PLUGINS ${PLUGINS} "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}")
+        install(DIRECTORY ${PLUGIN} DESTINATION "${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}/Contents/Frameworks" COMPONENT Runtime)
     endforeach ()
 
     #For now, search unresolved dependencies only in default system paths, so if you put unresolveable (i.e. with @executable_path in id name) lib or framework somewhere else, it would fail
@@ -726,7 +724,7 @@ if (APPLE)
         cmake_policy(SET CMP0009 OLD)
         set(BU_CHMOD_BUNDLE_ITEMS ON)
         include(BundleUtilities)
-        fixup_bundle(\"${APPS}\" \"${PLUGINS}\" \"${DIRS}\")
+        fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
         " COMPONENT Runtime)
         include(CPack)
 endif (APPLE)

From 3c281c6a62e0fd000245956b89737ae1997472b3 Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 16 Feb 2014 14:12:45 +0400
Subject: [PATCH 4/7] OS X: specify path to framework binary, not to framework
 directory

---
 CMakeLists.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f9d532910..e27910958 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -680,7 +680,8 @@ if (APPLE)
 
         foreach (PLUGIN ${ABSOLUTE_PLUGINS})
             get_filename_component(PLUGIN_RELATIVE ${PLUGIN} NAME)
-            set(PLUGINS ${PLUGINS} "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}")
+            get_filename_component(PLUGIN_RELATIVE_WE ${PLUGIN} NAME_WE)
+            set(PLUGINS ${PLUGINS} "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}/${PLUGIN_RELATIVE_WE}")
         endforeach ()
 
         set(${plugins_var} ${PLUGINS} PARENT_SCOPE)

From 8f99da084b11036793dd4154802792fd98f29fc2 Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 16 Feb 2014 14:12:59 +0400
Subject: [PATCH 5/7] OS X: plugins are now in Frameworks dir, not in Plugins

---
 components/ogreinit/ogreinit.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/components/ogreinit/ogreinit.cpp b/components/ogreinit/ogreinit.cpp
index 46424a29a..840cf4bb0 100644
--- a/components/ogreinit/ogreinit.cpp
+++ b/components/ogreinit/ogreinit.cpp
@@ -133,7 +133,7 @@ namespace OgreInit
             pluginDir = OGRE_PLUGIN_DIR;
             // if path is not specified try to find plugins inside the app bundle
             if (pluginDir.empty())
-                pluginDir = Ogre::macPluginPath();
+                pluginDir = Ogre::macFrameworksPath();
     #endif
     #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
             pluginDir = OGRE_PLUGIN_DIR_REL;

From e4017b8bfe706f881b5aa9c41edea2225491b880 Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 16 Feb 2014 14:16:45 +0400
Subject: [PATCH 6/7] It seems that OctreeSceneManager is not required anymore

---
 CMakeLists.txt | 1 -
 1 file changed, 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e27910958..024527ae5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -252,7 +252,6 @@ link_directories(${SDL2_LIBRARY_DIRS} ${Boost_LIBRARY_DIRS} ${OGRE_LIB_DIR} ${MY
 if (APPLE)
     # List used Ogre plugins
     SET(USED_OGRE_PLUGINS ${OGRE_RenderSystem_GL_LIBRARY_REL}
-                          ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
                           ${OGRE_Plugin_ParticleFX_LIBRARY_REL})
 
     # Actually we must use OGRE_Plugin_CgProgramManager_FOUND but it's

From 4a6186852129332ad34dbb79118a10729d6e8b4f Mon Sep 17 00:00:00 2001
From: Nikolay Kasyanov <corrmage@gmail.com>
Date: Sun, 16 Feb 2014 19:01:28 +0400
Subject: [PATCH 7/7] OS X: fixed Ogre plugin packaging

---
 CMakeLists.txt | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 024527ae5..a9d1f2017 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -668,11 +668,15 @@ if (APPLE)
         set(ABSOLUTE_PLUGINS ${PLUGIN_ABS} ${ABSOLUTE_PLUGINS})
     endforeach ()
 
+    install(CODE "
+        set(BU_CHMOD_BUNDLE_ITEMS ON)
+        include(BundleUtilities)
+    " COMPONENT Runtime)
+
     # installs used plugins in bundle at given path (bundle_path must be relative to ${CMAKE_INSTALL_PREFIX})
     # and returns list of install paths for all installed plugins
     function (install_plugins_for_bundle bundle_path plugins_var)
         set(RELATIVE_PLUGIN_INSTALL_BASE "${bundle_path}/Contents/Frameworks")
-        install(DIRECTORY ${ABSOLUTE_PLUGINS} DESTINATION ${RELATIVE_PLUGIN_INSTALL_BASE} COMPONENT Runtime)
 
         set(PLUGINS "")
         set(PLUGIN_INSTALL_BASE "\${CMAKE_INSTALL_PREFIX}/${RELATIVE_PLUGIN_INSTALL_BASE}")
@@ -680,7 +684,13 @@ if (APPLE)
         foreach (PLUGIN ${ABSOLUTE_PLUGINS})
             get_filename_component(PLUGIN_RELATIVE ${PLUGIN} NAME)
             get_filename_component(PLUGIN_RELATIVE_WE ${PLUGIN} NAME_WE)
-            set(PLUGINS ${PLUGINS} "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}/${PLUGIN_RELATIVE_WE}")
+
+            set(PLUGIN_DYLIB_IN_BUNDLE "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}/${PLUGIN_RELATIVE_WE}")
+            set(PLUGINS ${PLUGINS} "${PLUGIN_DYLIB_IN_BUNDLE}")
+
+            install(CODE "
+                copy_resolved_framework_into_bundle(\"${PLUGIN}/${PLUGIN_RELATIVE_WE}\" \"${PLUGIN_DYLIB_IN_BUNDLE}\")
+            " COMPONENT Runtime)
         endforeach ()
 
         set(${plugins_var} ${PLUGINS} PARENT_SCOPE)
@@ -700,6 +710,7 @@ if (APPLE)
     # Current limitations:
     #   1. Handles only frameworks, not simple libs
     INSTALL(CODE "
+        cmake_policy(SET CMP0009 OLD)
         set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES})
         set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
         set(CMAKE_SYSTEM_FRAMEWORK_PATH ${CMAKE_SYSTEM_FRAMEWORK_PATH})
@@ -731,9 +742,6 @@ if (APPLE)
             endif()
         endfunction(gp_resolve_item_override)
 
-        cmake_policy(SET CMP0009 OLD)
-        set(BU_CHMOD_BUNDLE_ITEMS ON)
-        include(BundleUtilities)
         fixup_bundle(\"${OPENMW_APP}\" \"${PLUGINS}\" \"${DIRS}\")
         fixup_bundle(\"${OPENCS_APP}\" \"${OPENCS_PLUGINS}\" \"${DIRS}\")
         " COMPONENT Runtime)