Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-03-21 19:42:21 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-03-21 19:42:21 +0300
commitf0d7fbc4b7fb9649b56e9ce67e3326f9f7e069da (patch)
tree15a8e4970d6dff7e6f72532728c7db4161e56791 /build_files
parent2513b194a219b87f4751a86b6b4b804de6c50f93 (diff)
CMake package_archive target to create a .zip/.tar.bz2 package on mac/unix,
to be used by buildbot.
Diffstat (limited to 'build_files')
-rw-r--r--build_files/cmake/packaging.cmake30
-rwxr-xr-xbuild_files/package_spec/build_archive.py69
2 files changed, 98 insertions, 1 deletions
diff --git a/build_files/cmake/packaging.cmake b/build_files/cmake/packaging.cmake
index b21c13f80b4..ee07857db26 100644
--- a/build_files/cmake/packaging.cmake
+++ b/build_files/cmake/packaging.cmake
@@ -51,7 +51,35 @@ if(APPLE)
# Libraries are bundled directly
set(CPACK_COMPONENT_LIBRARIES_HIDDEN TRUE)
-endif(APPLE)
+endif()
set(CPACK_PACKAGE_EXECUTABLES "blender")
include(CPack)
+
+# Target for build_archive.py script, to automatically pass along
+# version, revision, platform, build directory
+macro(add_package_archive packagename extension)
+ set(build_archive python ${CMAKE_SOURCE_DIR}/build_files/package_spec/build_archive.py)
+ set(package_output ${CMAKE_BINARY_DIR}/release/${packagename}.${extension})
+
+ add_custom_target(package_archive DEPENDS ${package_output})
+
+ add_custom_command(
+ OUTPUT ${package_output}
+ COMMAND ${build_archive} ${packagename} ${extension} bin release
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+endmacro()
+
+if(APPLE)
+ add_package_archive(
+ "blender-${BLENDER_VERSION}-r${BUILD_REV}-OSX-${CMAKE_OSX_ARCHITECTURES}"
+ "zip")
+elseif(UNIX)
+ # platform name could be tweaked, to include glibc, and ensure processor is correct (i386 vs i686)
+ string(TOLOWER ${CMAKE_SYSTEM_NAME} PACKAGE_SYSTEM_NAME)
+
+ add_package_archive(
+ "blender-${BLENDER_VERSION}-r${BUILD_REV}-${PACKAGE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}"
+ "tar.bz2")
+endif()
+
diff --git a/build_files/package_spec/build_archive.py b/build_files/package_spec/build_archive.py
new file mode 100755
index 00000000000..79e42af7b69
--- /dev/null
+++ b/build_files/package_spec/build_archive.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+
+import os
+import shutil
+import subprocess
+import sys
+
+# todo:
+# strip executables
+
+# get parameters
+if len(sys.argv) < 5:
+ sys.stderr.write('Excepted arguments: ./build_archive.py name extension install_dir output_dir')
+ sys.exit(1)
+
+package_name = sys.argv[1]
+extension = sys.argv[2]
+install_dir = sys.argv[3]
+output_dir = sys.argv[4]
+
+package_archive = os.path.join(output_dir, package_name + '.' + extension)
+package_dir = package_name
+
+# remove existing package with the same name
+try:
+ if os.path.exists(package_archive):
+ os.remove(package_archive)
+ if os.path.exists(package_dir):
+ shutil.rmtree(package_dir)
+except:
+ sys.stderr.write('Failed to clean up old package files: ' + sys.exc_info()[0] + '\n')
+ sys.exit(1)
+
+# create temporary package dir
+try:
+ shutil.copytree(install_dir, package_dir)
+
+ for f in os.listdir(package_dir):
+ if f.startswith('makes'):
+ os.remove(os.path.join(package_dir, f))
+except:
+ sys.stderr.write('Failed to copy install directory: ' + sys.exc_info()[0] + '\n')
+ sys.exit(1)
+
+# create archive
+try:
+ if not os.path.exists(output_dir):
+ os.mkdir(output_dir)
+
+ if extension == 'zip':
+ archive_cmd = ['zip', '-9', '-r', package_archive, package_dir]
+ elif extension == 'tar.bz2':
+ archive_cmd = ['tar', 'cjf', package_archive, package_dir]
+ else:
+ sys.stderr.write('Unknown archive extension: ' + extension)
+ sys.exit(-1)
+
+ subprocess.call(archive_cmd)
+except:
+ sys.stderr.write('Failed to create package archive: ' + sys.exc_info()[0] + '\n')
+ sys.exit(1)
+
+# empty temporary package dir
+try:
+ shutil.rmtree(package_dir)
+except:
+ sys.stderr.write('Failed to clean up package directory: ' + sys.exc_info()[0] + '\n')
+ sys.exit(1)
+