浏览代码

Fix build using Urho3D as external library. Closes 112.

Add test cases in Travis CI to test build using Urho3D as external library in external (non Urho3D) project.
Yao Wei Tjong 姚伟忠 12 年之前
父节点
当前提交
59b2b02888

+ 2 - 2
.travis.yml

@@ -7,8 +7,8 @@ before_install:
     - export DISPLAY=:99.0
     - sh -e /etc/init.d/xvfb start
     - /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1024x768x24
-script: ./cmake_gcc.sh -DURHO3D_LIB_TYPE=$TEST_LIB_TYPE -DENABLE_64BIT=1 -DENABLE_LUAJIT=1 -DENABLE_LUAJIT_AMALG=1 -DENABLE_SAMPLES=1 -DENABLE_TOOLS=1 -DENABLE_EXTRAS=1 -DENABLE_TESTING=1 && cd Build && make && make test
-after_success: rake travis
+script: rake travis_ci
+after_success: rake travis_ci_site_update
 env:
   global:
     secure: DE9IUM+pIV757GU0ccfDJhA752442pKu3DyBthrzHW9+GbsqbfuJOx045CYNN5vOWutFPC0A51B9WxhLNpXXqD3mfU8MhP1gkF7SskrHvcAPrCyfdqZf1Q8XDP5phm2KbHhhwxQMYmmicd6yj8DPNy2wRoSgPSDp/ZUDk51XZDU=

+ 43 - 2
Rakefile

@@ -1,8 +1,49 @@
 require "rubygems"
 
-# Usage: NOT intended to be used manually (if you insist then try: GIT_NAME=... GIT_EMAIL=... GH_TOKEN=... TRAVIS_BRANCH=master rake travis)
+# Usage: NOT intended to be used manually (if you insist then try: rake travis_ci)
+desc 'Configure, build, and test Urho3D project'
+task :travis_ci do
+  system './cmake_gcc.sh -DURHO3D_LIB_TYPE=$TEST_LIB_TYPE -DENABLE_64BIT=1 -DENABLE_LUAJIT=1 -DENABLE_LUAJIT_AMALG=1 -DENABLE_SAMPLES=1 -DENABLE_TOOLS=1 -DENABLE_EXTRAS=1 -DENABLE_TESTING=1 && cd Build && make && make test' or abort 'Failed to configure/build/test Urho3D library'
+  system 'mkdir -p Build/generated/externallib/{Source,Bin} && cp *.sh .*.sh Build/generated/externallib && cp Source/Tools/Urho3DPlayer/Urho3DPlayer.* Build/generated/externallib/Source && ln -sf ../../../../Bin/{Core,}Data Build/generated/externallib/Bin && cat <<EOF >Build/generated/externallib/Source/CMakeLists.txt
+# Set project name
+project (MySuperDuperGame)
+
+# Set minimum version
+cmake_minimum_required (VERSION 2.8.6)
+
+if (COMMAND cmake_policy)
+    cmake_policy (SET CMP0003 NEW)
+endif ()
+
+# Set CMake modules search path
+set (CMAKE_MODULE_PATH \$ENV{URHO3D_HOME}/Source/CMake/Modules CACHE PATH "Path to Urho3D-specific CMake modules")
+
+# Include Urho3D cmake module
+include (Urho3D-CMake-magic)
+
+# Find Urho3D library
+find_package (Urho3D REQUIRED)
+include_directories (\${URHO3D_INCLUDE_DIR})
+
+# Define target name
+set (TARGET_NAME Main)
+
+# Define source files
+define_source_files ()
+
+# Setup target with resource copying
+setup_main_executable ()
+
+# Setup test cases
+add_test (NAME ExternalLibAS COMMAND \${TARGET_NAME} Data/Scripts/12_PhysicsStressTest.as -w -timeout \${TEST_TIME_OUT})
+add_test (NAME ExternalLibLua COMMAND \${TARGET_NAME} Data/LuaScripts/12_PhysicsStressTest.lua -w -timeout \${TEST_TIME_OUT})
+EOF' or abort 'Failed to prepare temporary project structure using Urho3D as external library'
+  system "URHO3D_HOME=`pwd`; export URHO3D_HOME && cd Build/generated/externallib && echo '\nUsing Urho3D as external library in external project' && ./cmake_gcc.sh -DENABLE_64BIT=1 -DENABLE_LUA=1 -DENABLE_TESTING=1 && cd Build && make && make test" or abort 'Failed to configure/build/test temporary project using Urho3D as external library' 
+end
+
+# Usage: NOT intended to be used manually (if you insist then try: GIT_NAME=... GIT_EMAIL=... GH_TOKEN=... TRAVIS_BRANCH=master rake travis_ci_site_update)
 desc 'Update site documentation to GitHub Pages'
-task :travis do
+task :travis_ci_site_update do
   # Skip documentation update if one of the following conditions is met
   if ENV['TRAVIS_PULL_REQUEST'].to_i > 0 or ENV['TRAVIS_BRANCH'] != 'master' or ENV['TEST_LIB_TYPE'] == 'SHARED'
     next

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

@@ -67,7 +67,15 @@ if (URHO3D_HOME)
             list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/Source/ThirdParty/${DIR})
         endforeach ()
 
-        list (APPEND URHO3D_INCLUDE_DIR ${CMAKE_BINARY_DIR}/Engine)
+        # For non Urho3D project using Urho3D as external library, Urho3D project itself must be built using predefined build directory as per specified in the provided build scripts.
+        if (URHO3D_HOME STREQUAL PROJECT_ROOT_DIR)
+            set (BINARY_DIR ${CMAKE_BINARY_DIR})
+        elseif (ANDROID AND CMAKE_HOST_WIN32 AND NOT USE_MKLINK)
+            set (BINARY_DIR ${URHO3D_HOME}/Source/Android)
+        else ()
+            set (BINARY_DIR ${URHO3D_HOME}/${PLATFORM_PREFIX}Build)
+        endif () 
+        list (APPEND URHO3D_INCLUDE_DIR ${BINARY_DIR}/Engine)
         if (ANDROID)
             set (URHO3D_LIB_SEARCH_PATH ${ANDROID_LIBRARY_OUTPUT_PATH})
         else ()

+ 5 - 0
Source/CMake/Modules/Urho3D-CMake-magic.cmake

@@ -104,6 +104,11 @@ if (NOT IOS AND NOT ANDROID AND NOT RASPI AND USE_OPENGL)
     add_definitions (-DGLEW_NO_GLU)
 endif ()
 
+# Enable AngelScript by default
+if (NOT DEFINED ENABLE_ANGELSCRIPT)
+    set (ENABLE_ANGELSCRIPT 1)
+endif ()
+
 # Add definition for AngelScript
 if (ENABLE_ANGELSCRIPT)
     add_definitions (-DENABLE_ANGELSCRIPT)

+ 0 - 5
Source/CMakeLists.txt

@@ -33,11 +33,6 @@ endif ()
 # Set CMake modules search path
 set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
 
-# Enable AngelScript by default
-if (NOT DEFINED ENABLE_ANGELSCRIPT)
-    set (ENABLE_ANGELSCRIPT 1)
-endif ()
-
 # Include Urho3D cmake module
 include (Urho3D-CMake-magic)
 

+ 8 - 4
Source/Tools/Urho3DPlayer/CMakeLists.txt

@@ -30,7 +30,11 @@ define_source_files ()
 setup_main_executable ()
 
 # Setup test cases
-add_test (NAME Editor COMMAND ${TARGET_NAME} Data/Scripts/Editor.as -w -timeout ${TEST_TIME_OUT})
-add_test (NAME NinjaSnowWar COMMAND ${TARGET_NAME} Data/Scripts/NinjaSnowWar.as -w -timeout ${TEST_TIME_OUT})
-add_test (NAME AngelSprites COMMAND ${TARGET_NAME} Data/Scripts/03_Sprites.as -w -timeout ${TEST_TIME_OUT})
-add_test (NAME LuaSprites COMMAND ${TARGET_NAME} Data/LuaScripts/03_Sprites.lua -w -timeout ${TEST_TIME_OUT})
+if (ENABLE_ANGELSCRIPT)
+    add_test (NAME Editor COMMAND ${TARGET_NAME} Data/Scripts/Editor.as -w -timeout ${TEST_TIME_OUT})
+    add_test (NAME NinjaSnowWar COMMAND ${TARGET_NAME} Data/Scripts/NinjaSnowWar.as -w -timeout ${TEST_TIME_OUT})
+    add_test (NAME SpritesAS COMMAND ${TARGET_NAME} Data/Scripts/03_Sprites.as -w -timeout ${TEST_TIME_OUT})
+endif ()
+if (ENABLE_LUA)
+    add_test (NAME SpritesLua COMMAND ${TARGET_NAME} Data/LuaScripts/03_Sprites.lua -w -timeout ${TEST_TIME_OUT})
+endif ()

+ 1 - 1
cmake_gcc.sh

@@ -25,7 +25,7 @@ cd $( dirname $0 )
 SOURCE=`pwd`/Source
 
 # Define helpers
-. .bash_helpers.sh
+. ./.bash_helpers.sh
 
 # Create out-of-source build directory
 cmake -E make_directory Build