Browse Source

Add new 'package' CMake built-in target for generating binary packages.
This is in preparation for setting up Travis CI build to upload binary packages to a central hosting server.

Yao Wei Tjong 姚伟忠 11 years ago
parent
commit
4d565aa401

+ 20 - 6
Source/CMake/Modules/GetUrho3DRevision.cmake

@@ -22,12 +22,26 @@
 
 # Get Urho3D library revision number
 
-execute_process (COMMAND git describe --always --dirty RESULT_VARIABLE GIT_EXIT_CODE OUTPUT_VARIABLE LIB_REVISION ERROR_QUIET)
-if (GIT_EXIT_CODE EQUAL 0)
-    # Remove trailing end of line character
-    string (STRIP ${LIB_REVISION} LIB_REVISION)
-else ()
+execute_process (COMMAND git describe --always --tags --dirty RESULT_VARIABLE GIT_EXIT_CODE OUTPUT_VARIABLE LIB_REVISION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+if (NOT GIT_EXIT_CODE EQUAL 0)
     # No GIT command line tool or not a GIT repository
     set (LIB_REVISION Unversioned)
 endif ()
-file (WRITE ${FILENAME} "const char* revision=\"${LIB_REVISION}\";")
+if (FILENAME)
+    # Output complete revision number to a file
+    file (WRITE ${FILENAME} "const char* revision=\"${LIB_REVISION}\";\n")
+else ()
+    # Output just major.minor.patch number to stdout
+    string (REGEX MATCH "[^.]+\\.[^-]+" VERSION ${LIB_REVISION})            # Assume release tag always has major.minor format
+    if (VERSION)
+        string (REGEX MATCH "${VERSION}-([^-]+)" PATCH ${LIB_REVISION})     # Subsequent commits count after a release tag is treated as patch number
+        if (PATCH)
+            set (VERSION ${VERSION}.${CMAKE_MATCH_1})
+        else ()
+            set (VERSION ${VERSION}.0)
+        endif ()
+    else ()
+        set (VERSION 0.0.0)
+    endif ()
+    execute_process (COMMAND ${CMAKE_COMMAND} -E echo ${VERSION})
+endif ()

+ 2 - 2
Source/CMake/Modules/Urho3D-CMake-common.cmake

@@ -28,7 +28,7 @@ if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
     set (CMAKE_BUILD_TYPE Release)
 endif ()
 if (CMAKE_HOST_WIN32)
-    execute_process (COMMAND uname -o COMMAND tr -d '\n' RESULT_VARIABLE UNAME_EXIT_CODE OUTPUT_VARIABLE UNAME_OPERATING_SYSTEM ERROR_QUIET)
+    execute_process (COMMAND uname -o RESULT_VARIABLE UNAME_EXIT_CODE OUTPUT_VARIABLE UNAME_OPERATING_SYSTEM ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
     if (UNAME_EXIT_CODE EQUAL 0 AND UNAME_OPERATING_SYSTEM STREQUAL Msys)
         set (MSYS 1)
     endif ()
@@ -176,7 +176,7 @@ elseif (XCODE)
     set (CMAKE_OSX_SYSROOT macosx)	# Set Base SDK to "Latest OS X"
     if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
         # If not set, set to current running build system OS version by default
-        execute_process (COMMAND sw_vers -productVersion COMMAND tr -d '\n' OUTPUT_VARIABLE CURRENT_OSX_VERSION)
+        execute_process (COMMAND sw_vers -productVersion OUTPUT_VARIABLE CURRENT_OSX_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
         string (REGEX REPLACE ^\([^.]+\\.[^.]+\).* \\1 CMAKE_OSX_DEPLOYMENT_TARGET ${CURRENT_OSX_VERSION})
     endif ()
 endif ()

+ 31 - 0
Source/CMakeLists.txt

@@ -77,6 +77,37 @@ install (DIRECTORY ${PROJECT_ROOT_DIR}/Source/CMake/ DESTINATION ${DEST_SHARE_DI
 file (GLOB CMAKE_SCRIPTS ${PROJECT_ROOT_DIR}/${SCRIPT_PATTERN})
 install (FILES ${CMAKE_SCRIPTS} DESTINATION ${DEST_SHARE_DIR}/Scripts PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
 
+# Setup package variables
+set (URHO3D_DESCRIPTION "Urho3D is a lightweight, cross-platform rendering and game engine implemented in C++ and released under the MIT license. Greatly inspired by OGRE (http://www.ogre3d.org) and Horde3D (http://www.horde3d.org).")
+set (CPACK_PACKAGE_DESCRIPTION_SUMMARY ${URHO3D_DESCRIPTION})
+set (URHO3D_URL "https://github.com/urho3d/Urho3D")
+set (CPACK_PACKAGE_VENDOR ${URHO3D_URL})
+execute_process (COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/CMake/Modules/GetUrho3DRevision.cmake OUTPUT_VARIABLE URHO3D_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
+set (CPACK_PACKAGE_VERSION ${URHO3D_VERSION})
+string (REGEX MATCH "([^.]+)\\.([^.]+)\\.(.+)" MATCHED ${URHO3D_VERSION})
+if (MATCHED)
+    set (CPACK_PACKAGE_VERSION_MAJOR ${CMAKE_MATCH_1})
+    set (CPACK_PACKAGE_VERSION_MINOR ${CMAKE_MATCH_2})
+    set (CPACK_PACKAGE_VERSION_PATCH ${CMAKE_MATCH_3})
+endif ()
+set (CPACK_RESOURCE_FILE_LICENSE ${PROJECT_ROOT_DIR}/License.txt)
+set (CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
+set (CPACK_GENERATOR TGZ)
+if (ANDROID)
+    set (CPACK_SYSTEM_NAME Android)
+elseif (RASPI)
+    set (CPACK_SYSTEM_NAME Raspberry-Pi)
+elseif (IOS)
+    set (CPACK_SYSTEM_NAME IOS)
+elseif (WIN32)
+    set (CPACK_GENERATOR ZIP) 
+endif ()
+if (ENABLE_64BIT)
+    set (CPACK_SYSTEM_NAME ${CPACK_SYSTEM_NAME}-64bit)
+endif ()
+set (CPACK_SYSTEM_NAME ${CPACK_SYSTEM_NAME}-${URHO3D_LIB_TYPE}-snapshot)
+include (CPack)
+
 # Add targets
 foreach (TARGET Bullet Civetweb Detour FreeType JO kNet LZ4 PugiXml Recast SDL StanHull STB)
     add_subdirectory (ThirdParty/${TARGET})

+ 1 - 1
Source/Engine/CMakeLists.txt

@@ -165,7 +165,7 @@ if (NOT XCODE AND NOT MSVC)
         endif ()
     endif ()
 endif ()
-# \todo This is a deprecated property in CMake version 2.8.12 - Remove below macros when CMake minimum version is 2.8.12
+# \todo This is a deprecated property in CMake version 2.8.12 - Remove below commands when CMake minimum version is 2.8.12
 set_target_properties (${TARGET_NAME} PROPERTIES LINK_INTERFACE_LIBRARIES "")
 if (URHO3D_LIB_TYPE STREQUAL SHARED)
     if (NOT MSVC AND CMAKE_VERSION VERSION_LESS 2.8.11)

+ 3 - 3
Source/Engine/Urho3D.pc.in

@@ -31,8 +31,8 @@ CFLAGS_RELEASE=@CMAKE_CXX_FLAGS_RELEASE@
 CFLAGS_RELWITHDEBINFO=@CMAKE_CXX_FLAGS_RELWITHDEBINFO@
 
 Name: Urho3D
-Description: Urho3D is a lightweight, cross-platform rendering and game engine implemented in C++ and released under the MIT license. Greatly inspired by OGRE (http://www.ogre3d.org) and Horde3D (http://www.horde3d.org).
-Version: 1.3.0
-URL: https://code.google.com/p/urho3d/
+Description: @URHO3D_DESCRIPTION@
+Version: @URHO3D_VERSION@
+URL: @URHO3D_URL@
 Libs: @CMAKE_EXE_LINKER_FLAGS@ @URHO3D_ABS_PATH_LIBS@ -L${libdir} @URHO3D_LIBS@
 Cflags: @URHO3D_COMPILE_DEFINITIONS@ @CMAKE_CXX_FLAGS@ @GLOBAL_INCLUDE_DIRS@ @ENGINE_INCLUDE_DIRS@

+ 1 - 1
Source/ThirdParty/LuaJIT/DetectTargetArchitecture.cmake

@@ -77,7 +77,7 @@ set (TARGET_ARCH ${TARGET_ARCH} -DLUAJIT_TARGET=LUAJIT_ARCH_${TARGET_LJARCH})
 if (WIN32)
     set (HOST_SYS Windows)
 else ()
-    execute_process (COMMAND uname -s OUTPUT_VARIABLE HOST_SYS ERROR_QUIET)
+    execute_process (COMMAND uname -s OUTPUT_VARIABLE HOST_SYS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
 endif ()
 if (VARIANT)
     if (VARIANT MATCHES ios)