mirror of https://github.com/CGAL/cgal
121 lines
3.5 KiB
Ruby
121 lines
3.5 KiB
Ruby
#! /usr/bin/ruby
|
|
|
|
# == Synopsis
|
|
#
|
|
# "Mirrors" package files into a build folder for compilation.
|
|
#
|
|
# The package files are taken from a source package directory
|
|
# (typically a folder under an svn working copy)
|
|
#
|
|
# The directory structure under the package folder is replicated under
|
|
# a target build directory (creating subdirs as neccesary)
|
|
#
|
|
# "Mirroring" a package file consist on creating within the build directory a "view"
|
|
# to the file located into the package directory.
|
|
# This allows compilation within a "CGAL build directory structure" while
|
|
# keeping the source files in its original location within an svn working copy.
|
|
#
|
|
# In true POSIX platforms this is done via a symlink.
|
|
#
|
|
# In Windows platforms hardlinks are used instead. To ensure that broken hardlinks
|
|
# are properly syncronized, these are re-created whenever the source file is newer.
|
|
#
|
|
# The mirroring operation is automatically selected according to the platform,
|
|
# but can be overrided if needed via the '--mirror_operation' option.
|
|
#
|
|
# Unless specified otherwise using the '-all' option, internal "dont_submit" files
|
|
# are excluded.
|
|
#
|
|
# == Usage
|
|
#
|
|
# mirror_all_packages [OPTIONS] PACKAGES_ROOT BUILD_ROOT
|
|
#
|
|
# PACKAGE_DIR the source package directory
|
|
#
|
|
# BUILD_DIR the destination build directory
|
|
#
|
|
# OPTIONS:
|
|
#
|
|
# -h, --help:
|
|
# show help
|
|
#
|
|
# -o, -mirror_operation [symlink|hardlink]
|
|
# Mirroring operation
|
|
# symlink is the default in platforms supporting it (*nix)
|
|
# hardlink is the default in platforms not supporting symlinks (windows)
|
|
#
|
|
# -i, --include_internal
|
|
# Include internal files (excluded by default).
|
|
#
|
|
|
|
require 'getoptlong'
|
|
require 'rdoc/usage'
|
|
|
|
require 'list_package_files_impl.rb'
|
|
require 'mirror_package_impl.rb'
|
|
|
|
# -- TEST --
|
|
ARGV = [TEST_PKG_ROOT, TEST_BUILD_ROOT]
|
|
# ARGV = ['-i',TEST_PKG_DIR, TEST_BUILD_ROOT]
|
|
# -- TEST --
|
|
|
|
opts = GetoptLong.new( [ '--help' , '-h', GetoptLong::NO_ARGUMENT ],
|
|
[ '--mirror_operation', '-o', GetoptLong::REQUIRED_ARGUMENT ],
|
|
[ '--include_internal', '-i', GetoptLong::NO_ARGUMENT ]
|
|
)
|
|
|
|
include_internal = false
|
|
|
|
mirror_operation = default_mirror_op
|
|
|
|
opts.each do |opt, arg|
|
|
case opt
|
|
when '--help'
|
|
RDoc::usage
|
|
|
|
when '--mirror_operation'
|
|
case arg
|
|
when 'symlink'
|
|
mirror_operation = :symlink
|
|
when 'hardlink'
|
|
mirror_operation = :hardlink
|
|
else
|
|
$stderr << "Invalid mirror operation: " << arg
|
|
end
|
|
|
|
when '--include_internal'
|
|
include_internal = true
|
|
|
|
end
|
|
end
|
|
|
|
src_package_root = ARGV.length >= 1 ? ARGV.shift : ''
|
|
tgt_build_root = ARGV.length >= 1 ? ARGV.shift : ''
|
|
|
|
unless src_package_root.empty? || tgt_build_root.empty? then
|
|
|
|
assert_exist!(src_package_root, 'packages root directory' )
|
|
assert_exist!(tgt_build_root , 'build root directory' )
|
|
|
|
include_in_release_file = src_package_root + '/Maintenance/release_building/include_in_release'
|
|
|
|
assert_exist!(include_in_release_file, 'include_in_release file')
|
|
|
|
packages = IO.readlines(include_in_release_file)
|
|
|
|
packages.each do |package|
|
|
|
|
package.chomp!
|
|
|
|
src_package_subdir = src_package_root + '/' + package
|
|
|
|
package_files = list_package_files(src_package_subdir,include_internal)
|
|
|
|
mirror_package(package_files,src_package_subdir,tgt_build_root,mirror_operation)
|
|
end
|
|
|
|
else
|
|
RDoc::usage
|
|
end
|
|
|
|
|