diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-03-21 19:42:21 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-03-21 19:42:21 +0300 |
commit | f0d7fbc4b7fb9649b56e9ce67e3326f9f7e069da (patch) | |
tree | 15a8e4970d6dff7e6f72532728c7db4161e56791 | |
parent | 2513b194a219b87f4751a86b6b4b804de6c50f93 (diff) |
CMake package_archive target to create a .zip/.tar.bz2 package on mac/unix,
to be used by buildbot.
-rw-r--r-- | GNUmakefile | 4 | ||||
-rw-r--r-- | build_files/cmake/packaging.cmake | 30 | ||||
-rwxr-xr-x | build_files/package_spec/build_archive.py | 69 |
3 files changed, 102 insertions, 1 deletions
diff --git a/GNUmakefile b/GNUmakefile index 772cec3c471..42d7c33e46b 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -90,6 +90,10 @@ package_debian: package_pacman: cd build_files/package_spec/pacman ; MAKEFLAGS="-j$(NPROCS)" makepkg --asroot +package_archive: + cd $(BUILD_DIR) ; make -s package_archive + @echo archive in "$(BUILD_DIR)/release" + # forward build targets test: cd $(BUILD_DIR) ; ctest . --output-on-failure 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) + |