Browse Source

Setup to link against matching Urho3D library version. Fixes #152.

Existing CMake build scripts has been configured to generate different Urho3D library name based on active build configuration. However, when finding and using the library itself, the scripts did not differentiate the two versions and could cause problem with wrong version of the library is being erroneously linked against.
Yao Wei Tjong 姚伟忠 12 years ago
parent
commit
fdae68639c

+ 14 - 1
Source/CMake/Modules/FindUrho3D.cmake

@@ -26,6 +26,8 @@
 #  URHO3D_FOUND
 #  URHO3D_FOUND
 #  URHO3D_INCLUDE_DIRS
 #  URHO3D_INCLUDE_DIRS
 #  URHO3D_LIBRARIES
 #  URHO3D_LIBRARIES
+#  URHO3D_LIBRARIES_REL
+#  URHO3D_LIBRARIES_DBG
 #
 #
 
 
 if (URHO3D_FOUND)
 if (URHO3D_FOUND)
@@ -45,7 +47,7 @@ endif ()
 
 
 set (URHO3D_LIB_NAMES Urho3D)
 set (URHO3D_LIB_NAMES Urho3D)
 if (WIN32)
 if (WIN32)
-    list (APPEND URHO3D_LIB_NAMES Urho3D_d)
+    set (URHO3D_LIB_NAMES_DBG Urho3D_d)
 endif ()
 endif ()
 
 
 if (CMAKE_PROJECT_NAME MATCHES Urho3D.* AND PROJECT_ROOT_DIR)
 if (CMAKE_PROJECT_NAME MATCHES Urho3D.* AND PROJECT_ROOT_DIR)
@@ -95,6 +97,9 @@ if (URHO3D_HOME)
             set (FOUND_MESSAGE "Found Urho3D: as CMake target")
             set (FOUND_MESSAGE "Found Urho3D: as CMake target")
         else ()
         else ()
             find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
             find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+            if (WIN32)
+                find_library (URHO3D_LIBRARIES_DBG NAMES ${URHO3D_LIB_NAMES_DBG} PATHS ${URHO3D_LIB_SEARCH_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+            endif ()
         endif ()
         endif ()
     endif ()
     endif ()
 else ()
 else ()
@@ -119,6 +124,9 @@ else ()
     endif ()
     endif ()
     find_path (URHO3D_INCLUDE_DIRS Urho3D.h PATHS ${URHO3D_INC_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
     find_path (URHO3D_INCLUDE_DIRS Urho3D.h PATHS ${URHO3D_INC_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
     find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
     find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
+    if (WIN32)
+        find_library (URHO3D_LIBRARIES_DBG NAMES ${URHO3D_LIB_NAMES_DBG} PATHS ${URHO3D_LIB_SEARCH_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+    endif ()
 
 
     if (URHO3D_INCLUDE_DIRS)
     if (URHO3D_INCLUDE_DIRS)
         set (BASE_DIR ${URHO3D_INCLUDE_DIRS})
         set (BASE_DIR ${URHO3D_INCLUDE_DIRS})
@@ -132,6 +140,11 @@ else ()
     endif ()
     endif ()
 endif ()
 endif ()
 
 
+if (WIN32)
+    set (URHO3D_LIBRARIES_REL ${URHO3D_LIBRARIES})
+    set (URHO3D_LIBRARIES ${URHO3D_LIBRARIES} ${URHO3D_LIBRARIES_DBG})
+endif ()
+
 if (URHO3D_INCLUDE_DIRS AND URHO3D_LIBRARIES)
 if (URHO3D_INCLUDE_DIRS AND URHO3D_LIBRARIES)
     set (URHO3D_FOUND 1)
     set (URHO3D_FOUND 1)
     if (NOT FOUND_MESSAGE)
     if (NOT FOUND_MESSAGE)

+ 12 - 2
Source/CMake/Modules/Urho3D-CMake-magic.cmake

@@ -606,10 +606,20 @@ macro (define_dependency_libs TARGET)
             endif ()
             endif ()
         endif ()
         endif ()
 
 
-        # This variable value can either be 'Urho3D' target or an absolute path to an actual static/shared Urho3D library
+        # This variable value can either be 'Urho3D' target or an absolute path to an actual static/shared Urho3D library or empty (if we are building the library itself)
         # The former would cause CMake not only to link against the Urho3D library but also to add a dependency to Urho3D target
         # The former would cause CMake not only to link against the Urho3D library but also to add a dependency to Urho3D target
         if (URHO3D_LIBRARIES)
         if (URHO3D_LIBRARIES)
-            list (APPEND ABSOLUTE_PATH_LIBS ${URHO3D_LIBRARIES})
+            if (WIN32 AND IS_ABSOLUTE ${URHO3D_LIBRARIES} AND TARGET ${TARGET_NAME})
+                if (URHO3D_LIBRARIES_DBG)
+                    set (WIN32_LIBS debug ${URHO3D_LIBRARIES_DBG})
+                endif ()
+                if (URHO3D_LIBRARIES_REL)
+                    list (APPEND WIN32_LIBS optimized ${URHO3D_LIBRARIES_REL})
+                endif ()
+                target_link_libraries (${TARGET_NAME} ${WIN32_LIBS})
+            else ()
+                list (APPEND ABSOLUTE_PATH_LIBS ${URHO3D_LIBRARIES})
+            endif ()
         endif ()
         endif ()
 
 
         # LuaJIT specific - extra linker flags for linking against LuaJIT (adapted from LuaJIT's original Makefile)
         # LuaJIT specific - extra linker flags for linking against LuaJIT (adapted from LuaJIT's original Makefile)