Browse Source

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 years ago
parent
commit
59b2b02888

+ 2 - 2
.travis.yml

@@ -7,8 +7,8 @@ before_install:
     - export DISPLAY=:99.0
     - export DISPLAY=:99.0
     - sh -e /etc/init.d/xvfb start
     - 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
     - /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:
 env:
   global:
   global:
     secure: DE9IUM+pIV757GU0ccfDJhA752442pKu3DyBthrzHW9+GbsqbfuJOx045CYNN5vOWutFPC0A51B9WxhLNpXXqD3mfU8MhP1gkF7SskrHvcAPrCyfdqZf1Q8XDP5phm2KbHhhwxQMYmmicd6yj8DPNy2wRoSgPSDp/ZUDk51XZDU=
     secure: DE9IUM+pIV757GU0ccfDJhA752442pKu3DyBthrzHW9+GbsqbfuJOx045CYNN5vOWutFPC0A51B9WxhLNpXXqD3mfU8MhP1gkF7SskrHvcAPrCyfdqZf1Q8XDP5phm2KbHhhwxQMYmmicd6yj8DPNy2wRoSgPSDp/ZUDk51XZDU=

+ 43 - 2
Rakefile

@@ -1,8 +1,49 @@
 require "rubygems"
 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'
 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
   # 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'
   if ENV['TRAVIS_PULL_REQUEST'].to_i > 0 or ENV['TRAVIS_BRANCH'] != 'master' or ENV['TEST_LIB_TYPE'] == 'SHARED'
     next
     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})
             list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/Source/ThirdParty/${DIR})
         endforeach ()
         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)
         if (ANDROID)
             set (URHO3D_LIB_SEARCH_PATH ${ANDROID_LIBRARY_OUTPUT_PATH})
             set (URHO3D_LIB_SEARCH_PATH ${ANDROID_LIBRARY_OUTPUT_PATH})
         else ()
         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)
     add_definitions (-DGLEW_NO_GLU)
 endif ()
 endif ()
 
 
+# Enable AngelScript by default
+if (NOT DEFINED ENABLE_ANGELSCRIPT)
+    set (ENABLE_ANGELSCRIPT 1)
+endif ()
+
 # Add definition for AngelScript
 # Add definition for AngelScript
 if (ENABLE_ANGELSCRIPT)
 if (ENABLE_ANGELSCRIPT)
     add_definitions (-DENABLE_ANGELSCRIPT)
     add_definitions (-DENABLE_ANGELSCRIPT)

+ 0 - 5
Source/CMakeLists.txt

@@ -33,11 +33,6 @@ endif ()
 # Set CMake modules search path
 # Set CMake modules search path
 set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
 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 module
 include (Urho3D-CMake-magic)
 include (Urho3D-CMake-magic)
 
 

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

@@ -30,7 +30,11 @@ define_source_files ()
 setup_main_executable ()
 setup_main_executable ()
 
 
 # Setup test cases
 # 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
 SOURCE=`pwd`/Source
 
 
 # Define helpers
 # Define helpers
-. .bash_helpers.sh
+. ./.bash_helpers.sh
 
 
 # Create out-of-source build directory
 # Create out-of-source build directory
 cmake -E make_directory Build
 cmake -E make_directory Build