Browse Source

Avoid hardcoding rapidjson as dependency to Urho3D library.

Yao Wei Tjong 姚伟忠 11 years ago
parent
commit
eb4a7663b5
2 changed files with 31 additions and 26 deletions
  1. 1 0
      Source/ThirdParty/rapidjson/CMakeLists.txt
  2. 30 26
      Source/Urho3D/CMakeLists.txt

+ 1 - 0
Source/ThirdParty/rapidjson/CMakeLists.txt

@@ -25,6 +25,7 @@ set (TARGET_NAME rapidjson)
 
 # Setup target
 add_custom_target(${TARGET_NAME} ALL)   # Dummy target just so that its post-build step can install headers to the build tree
+set (STATIC_LIBRARY_TARGETS ${STATIC_LIBRARY_TARGETS} ${TARGET_NAME} PARENT_SCOPE)
 
 # Install headers for building the Urho3D library
 install_header_files (DIRECTORY include/rapidjson/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/rapidjson FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 30 - 26
Source/Urho3D/CMakeLists.txt

@@ -30,7 +30,7 @@ endif ()
 # Define generated source files
 add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/librevision.h
     COMMAND ${CMAKE_COMMAND} -DFILENAME=${CMAKE_CURRENT_BINARY_DIR}/librevision.h -P CMake/Modules/GetUrho3DRevision.cmake
-    DEPENDS ${STATIC_LIBRARY_TARGETS} rapidjson ${CMAKE_SOURCE_DIR}/CMake/Modules/GetUrho3DRevision.cmake
+    DEPENDS ${STATIC_LIBRARY_TARGETS} ${CMAKE_SOURCE_DIR}/CMake/Modules/GetUrho3DRevision.cmake
     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
     COMMENT "Generating GIT revision number (tag + last commit SHA-1)")
 
@@ -83,24 +83,26 @@ if (MSVC AND URHO3D_LIB_TYPE STREQUAL SHARED)   # MSVC linker does not have forc
     foreach (TARGET ${STATIC_LIBRARY_TARGETS})
         get_target_property (SOURCES ${TARGET} SOURCES)
         get_target_property (INT_DIR ${TARGET} LOCATION)
-        get_filename_component (INT_DIR ${INT_DIR} PATH)
-        if (CMAKE_GENERATOR MATCHES 2008)
-            string (REPLACE /$(OutDir) /${TARGET}.dir/$(ConfigurationName) INT_DIR ${INT_DIR})
-        else ()
-            string (REPLACE /$(Configuration) /${TARGET}.dir/$(ConfigurationName) INT_DIR ${INT_DIR})
-        endif ()
-        foreach (SOURCE ${SOURCES})
-            get_filename_component (NAME ${SOURCE} NAME)
-            if (NAME MATCHES \\.c.*$|\\.mm?$|\\.S$|\\.s$)
-                string (REGEX REPLACE \\.c.*$|\\.mm?$|\\.S$|\\.s$ "" NAME ${NAME})
-                list (APPEND OBJ_FILES ${INT_DIR}/${NAME}.obj)
-            elseif (NAME MATCHES \\.o.*$)
-                list (APPEND OBJ_FILES ${SOURCE})
+        if (INT_DIR)
+            get_filename_component (INT_DIR ${INT_DIR} PATH)
+            if (CMAKE_GENERATOR MATCHES 2008)
+                string (REPLACE /$(OutDir) /${TARGET}.dir/$(ConfigurationName) INT_DIR ${INT_DIR})
+            else ()
+                string (REPLACE /$(Configuration) /${TARGET}.dir/$(ConfigurationName) INT_DIR ${INT_DIR})
             endif ()
-        endforeach ()
-        source_group ("Object Files\\${TARGET}" FILES ${OBJ_FILES})
-        list (APPEND ALL_OBJ_FILES ${OBJ_FILES})
-        unset (OBJ_FILES)
+            foreach (SOURCE ${SOURCES})
+                get_filename_component (NAME ${SOURCE} NAME)
+                if (NAME MATCHES \\.c.*$|\\.mm?$|\\.S$|\\.s$)
+                    string (REGEX REPLACE \\.c.*$|\\.mm?$|\\.S$|\\.s$ "" NAME ${NAME})
+                    list (APPEND OBJ_FILES ${INT_DIR}/${NAME}.obj)
+                elseif (NAME MATCHES \\.o.*$)
+                    list (APPEND OBJ_FILES ${SOURCE})
+                endif ()
+            endforeach ()
+            source_group ("Object Files\\${TARGET}" FILES ${OBJ_FILES})
+            list (APPEND ALL_OBJ_FILES ${OBJ_FILES})
+            unset (OBJ_FILES)
+        endif ()
     endforeach ()
 endif ()
 
@@ -165,7 +167,7 @@ if (NOT ANDROID)
 endif ()
 install (TARGETS ${TARGET_NAME} RUNTIME DESTINATION ${DEST_RUNTIME_DIR} LIBRARY DESTINATION ${DEST_LIBRARY_DIR} ARCHIVE DESTINATION ${DEST_LIBRARY_DIR})
 if (NOT GIT_EXIT_CODE EQUAL 0)
-    add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS} rapidjson)
+    add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS})
 endif ()
 
 # Setup dependency frameworks and libraries
@@ -193,13 +195,15 @@ elseif (NOT MSVC)
 endif ()
 foreach (TARGET ${STATIC_LIBRARY_TARGETS})
     get_target_property (ARCHIVE ${TARGET} LOCATION)
-    if (NOT MSVC)
-        set_property (TARGET ${TARGET_NAME} APPEND PROPERTY LINK_LIBRARIES ${FORCE_LOAD} ${ARCHIVE})    # Only works in Apple (Xcode and Makefile) and GCC while building shared library
-    endif ()
-    if (XCODE OR MSVC)
-        set_property (TARGET ${TARGET_NAME} APPEND_STRING PROPERTY STATIC_LIBRARY_FLAGS " ${ARCHIVE}")  # Only works in Apple (Xcode only) and MSVC while building static library
-    else ()
-        list (APPEND ARCHIVES ${ARCHIVE})
+    if (ARCHIVE)
+        if (NOT MSVC)
+            set_property (TARGET ${TARGET_NAME} APPEND PROPERTY LINK_LIBRARIES ${FORCE_LOAD} ${ARCHIVE})    # Only works in Apple (Xcode and Makefile) and GCC while building shared library
+        endif ()
+        if (XCODE OR MSVC)
+            set_property (TARGET ${TARGET_NAME} APPEND_STRING PROPERTY STATIC_LIBRARY_FLAGS " ${ARCHIVE}")  # Only works in Apple (Xcode only) and MSVC while building static library
+        else ()
+            list (APPEND ARCHIVES ${ARCHIVE})
+        endif ()
     endif ()
 endforeach ()
 if (NOT XCODE AND NOT MSVC)