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
 # 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
     # No GIT command line tool or not a GIT repository
     set (LIB_REVISION Unversioned)
     set (LIB_REVISION Unversioned)
 endif ()
 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)
     set (CMAKE_BUILD_TYPE Release)
 endif ()
 endif ()
 if (CMAKE_HOST_WIN32)
 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)
     if (UNAME_EXIT_CODE EQUAL 0 AND UNAME_OPERATING_SYSTEM STREQUAL Msys)
         set (MSYS 1)
         set (MSYS 1)
     endif ()
     endif ()
@@ -176,7 +176,7 @@ elseif (XCODE)
     set (CMAKE_OSX_SYSROOT macosx)	# Set Base SDK to "Latest OS X"
     set (CMAKE_OSX_SYSROOT macosx)	# Set Base SDK to "Latest OS X"
     if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
     if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
         # If not set, set to current running build system OS version by default
         # 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})
         string (REGEX REPLACE ^\([^.]+\\.[^.]+\).* \\1 CMAKE_OSX_DEPLOYMENT_TARGET ${CURRENT_OSX_VERSION})
     endif ()
     endif ()
 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})
 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)
 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
 # Add targets
 foreach (TARGET Bullet Civetweb Detour FreeType JO kNet LZ4 PugiXml Recast SDL StanHull STB)
 foreach (TARGET Bullet Civetweb Detour FreeType JO kNet LZ4 PugiXml Recast SDL StanHull STB)
     add_subdirectory (ThirdParty/${TARGET})
     add_subdirectory (ThirdParty/${TARGET})

+ 1 - 1
Source/Engine/CMakeLists.txt

@@ -165,7 +165,7 @@ if (NOT XCODE AND NOT MSVC)
         endif ()
         endif ()
     endif ()
     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 "")
 set_target_properties (${TARGET_NAME} PROPERTIES LINK_INTERFACE_LIBRARIES "")
 if (URHO3D_LIB_TYPE STREQUAL SHARED)
 if (URHO3D_LIB_TYPE STREQUAL SHARED)
     if (NOT MSVC AND CMAKE_VERSION VERSION_LESS 2.8.11)
     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@
 CFLAGS_RELWITHDEBINFO=@CMAKE_CXX_FLAGS_RELWITHDEBINFO@
 
 
 Name: Urho3D
 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@
 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@
 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)
 if (WIN32)
     set (HOST_SYS Windows)
     set (HOST_SYS Windows)
 else ()
 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 ()
 endif ()
 if (VARIANT)
 if (VARIANT)
     if (VARIANT MATCHES ios)
     if (VARIANT MATCHES ios)