Explorar el Código

Fix the Urho3D DLL installation for targets in external projects.

Yao Wei Tjong 姚伟忠 hace 10 años
padre
commit
ff1ee0e4ad

+ 31 - 17
CMake/Modules/FindUrho3D.cmake

@@ -26,7 +26,10 @@
 #  URHO3D_INCLUDE_DIRS
 #  URHO3D_LIBRARIES
 #  URHO3D_LIBRARIES_REL (WIN32 only)
-#  URHO3D_LIBRARIES_DBG (WIN32 Only)
+#  URHO3D_LIBRARIES_DBG (WIN32 only)
+#  URHO3D_DLL (WIN32 only)
+#  URHO3D_DLL_REL (WIN32 only)
+#  URHO3D_DLL_DBG (WIN32 only)
 #
 #
 # For internal Urho3D project, the Urho3D "build tree" path is already known.
@@ -100,21 +103,6 @@ else ()
         set_property (GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
     endif ()
     find_path (URHO3D_INCLUDE_DIRS Urho3D.h PATH_SUFFIXES ${PATH_SUFFIX} ${SEARCH_OPT})
-    find_library (URHO3D_LIBRARIES NAMES Urho3D ${URHO3D_LIB_SEARCH_HINT} PATH_SUFFIXES ${PATH_SUFFIX} ${SEARCH_OPT})
-    if (WIN32)
-        # For Windows platform, give a second chance to search for a debug version of the library
-        find_library (URHO3D_LIBRARIES_DBG NAMES Urho3D_d ${URHO3D_LIB_SEARCH_HINT} PATH_SUFFIXES ${PATH_SUFFIX} ${SEARCH_OPT})
-        # If both the non-debug and debug version of the libraries are found then use them both
-        set (URHO3D_LIBRARIES_REL ${URHO3D_LIBRARIES})
-        # Otherwise, URHO3D_LIBRARIES variable should have the path to either one of the version
-        if (URHO3D_LIBRARIES)
-            if (URHO3D_LIBRARIES_DBG)
-                list (APPEND URHO3D_LIBRARIES ${URHO3D_LIBRARIES_DBG})
-            endif ()
-        else ()
-            set (URHO3D_LIBRARIES ${URHO3D_LIBRARIES_DBG})
-        endif ()
-    endif ()
     if (URHO3D_INCLUDE_DIRS)
         set (BASE_INCLUDE_DIR ${URHO3D_INCLUDE_DIRS})   # Preserve the base include dir because the original variable will be turned into a list below
         get_filename_component (PATH ${URHO3D_INCLUDE_DIRS} PATH)
@@ -131,6 +119,32 @@ else ()
             set (URHO3D_HOME ${PATH})
         endif ()
     endif ()
+    find_library (URHO3D_LIBRARIES NAMES Urho3D ${URHO3D_LIB_SEARCH_HINT} PATH_SUFFIXES ${PATH_SUFFIX} ${SEARCH_OPT})
+    if (WIN32)
+        # For Windows platform, give a second chance to search for a debug version of the library
+        find_library (URHO3D_LIBRARIES_DBG NAMES Urho3D_d ${URHO3D_LIB_SEARCH_HINT} PATH_SUFFIXES ${PATH_SUFFIX} ${SEARCH_OPT})
+        # If both the non-debug and debug version of the libraries are found then use them both
+        set (URHO3D_LIBRARIES_REL ${URHO3D_LIBRARIES})
+        # Otherwise, URHO3D_LIBRARIES variable should have the path to either one of the version
+        if (URHO3D_LIBRARIES)
+            if (URHO3D_LIBRARIES_DBG)
+                list (APPEND URHO3D_LIBRARIES ${URHO3D_LIBRARIES_DBG})
+            endif ()
+        else ()
+            set (URHO3D_LIBRARIES ${URHO3D_LIBRARIES_DBG})
+        endif ()
+        # For shared library type, also initialize the URHO3D_DLL variable for later use
+        if (URHO3D_LIB_TYPE STREQUAL SHARED AND URHO3D_HOME)
+            find_file (URHO3D_DLL_REL Urho3D.dll HINTS ${URHO3D_HOME}/bin NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+            if (URHO3D_DLL_REL)
+                list (APPEND URHO3D_DLL ${URHO3D_DLL_REL})
+            endif ()
+            find_file (URHO3D_DLL_DBG Urho3D_d.dll HINTS ${URHO3D_HOME}/bin NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+            if (URHO3D_DLL_DBG)
+                list (APPEND URHO3D_DLL ${URHO3D_DLL_DBG})
+            endif ()
+        endif ()
+    endif ()
 endif ()
 
 if (URHO3D_INCLUDE_DIRS AND URHO3D_LIBRARIES)
@@ -150,4 +164,4 @@ elseif (Urho3D_FIND_REQUIRED)
         "Use URHO3D_HOME environment variable or build option to specify the location of the build tree or SDK installation. ${NOT_FOUND_MESSAGE}")
 endif ()
 
-mark_as_advanced (URHO3D_INCLUDE_DIRS URHO3D_LIBRARIES URHO3D_LIBRARIES_REL URHO3D_LIBRARIES_DBG URHO3D_HOME)
+mark_as_advanced (URHO3D_INCLUDE_DIRS URHO3D_LIBRARIES URHO3D_LIBRARIES_REL URHO3D_LIBRARIES_DBG URHO3D_DLL URHO3D_DLL_REL URHO3D_DLL_DBG URHO3D_HOME)

+ 6 - 7
CMake/Modules/Urho3D-CMake-common.cmake

@@ -968,13 +968,13 @@ macro (setup_executable)
         # Make a copy of the D3D DLL to the runtime directory in the build tree
         add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DIRECT3D_DLL} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
     endif ()
-    if (WIN32 AND NOT ARG_NODEPS AND URHO3D_LIB_TYPE STREQUAL SHARED AND NOT DEST_RUNTIME_DIR STREQUAL bin)
+    if (WIN32 AND NOT ARG_NODEPS AND URHO3D_LIB_TYPE STREQUAL SHARED)
         # Make a copy of the Urho3D DLL to the runtime directory in the build tree
         if (TARGET Urho3D)
             add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Urho3D> ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
         else ()
-            foreach (URHO3D_DLL ${URHO3D_LIBRARIES})
-                add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${URHO3D_DLL} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+            foreach (DLL ${URHO3D_DLL})
+                add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLL} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
             endforeach ()
         endif ()
     endif ()
@@ -995,7 +995,7 @@ macro (setup_executable)
             install (FILES ${FILES} DESTINATION ${DEST_BUNDLE_DIR} OPTIONAL)    # We get html.map or html.mem depend on the build configuration
         else ()
             install (TARGETS ${TARGET_NAME} RUNTIME DESTINATION ${DEST_RUNTIME_DIR} BUNDLE DESTINATION ${DEST_BUNDLE_DIR})
-            if (WIN32 AND NOT ARG_NODEPS AND URHO3D_LIB_TYPE STREQUAL SHARED AND NOT URHO3D_DLL_INSTALLED AND NOT DEST_RUNTIME_DIR STREQUAL bin)
+            if (WIN32 AND NOT ARG_NODEPS AND URHO3D_LIB_TYPE STREQUAL SHARED AND NOT URHO3D_DLL_INSTALLED)
                 if (TARGET Urho3D)
                     if (CMAKE_VERSION VERSION_LESS 3.0)
                         get_target_property (LOCATION Urho3D LOCATION)
@@ -1005,13 +1005,12 @@ macro (setup_executable)
                         elseif (MSVC)
                             string (REPLACE /$(Configuration) "" LOCATION ${LOCATION})
                         endif ()
-                        file (GLOB URHO3D_DLL ${LOCATION}/Urho3D*.dll)
-                        install (FILES ${URHO3D_DLL} DESTINATION ${DEST_RUNTIME_DIR})
+                        install (FILES ${LOCATION}/Urho3D.dll ${LOCATION}/Urho3D_d.dll DESTINATION ${DEST_RUNTIME_DIR} OPTIONAL)
                     else ()
                         install (FILES $<TARGET_FILE:Urho3D> DESTINATION ${DEST_RUNTIME_DIR})
                     endif ()
                 else ()
-                    install (FILES ${URHO3D_LIBRARIES} DESTINATION ${DEST_RUNTIME_DIR})
+                    install (FILES ${URHO3D_DLL} DESTINATION ${DEST_RUNTIME_DIR})
                 endif ()
                 set (URHO3D_DLL_INSTALLED TRUE)
             endif ()

+ 3 - 0
Source/Urho3D/CMakeLists.txt

@@ -255,6 +255,9 @@ elseif (EMSCRIPTEN)
     set (CMAKE_SHARED_LIBRARY_SUFFIX ".bc")
 endif ()
 install (TARGETS ${TARGET_NAME} RUNTIME DESTINATION ${DEST_RUNTIME_DIR} LIBRARY DESTINATION ${DEST_LIBRARY_DIR} ARCHIVE DESTINATION ${DEST_LIBRARY_DIR})
+if (WIN32 AND URHO3D_LIB_TYPE STREQUAL SHARED)
+    set (URHO3D_DLL_INSTALLED TRUE)
+endif ()
 
 # Setup dependency frameworks and libraries
 if (APPLE)