Initial shot of "new" rake-based builder
Based on SVN https://swing.fit.cvut.cz/svn/stx/goodies/builder/trunk/rake@592
task :'checkout:post' => BUILD_DIR / 'misc' / 'distutils'
file BUILD_DIR / 'misc' / 'distutils' => BUILD_DIR do
checkout :'swing', 'misc/distutils', :branch => ''
end
task :'dist:jv' => [ :'dist:jv:pre' , :'dist:jv:main', :'dist:jv:post' ]
du = BUILD_DIR / 'misc' / 'distutils'
app_version = nil
version = nil
install_dir = nil
bin_dir = nil
pkg_dir = nil
lib_dir = nil
include_dir = nil
libexec_dir = nil
rc_dir = win32? ? bin_dir : lib_dir
install_dir_doc = nil
doc_dir = nil
namespace :'dist:jv' do
task :'variables' do
app_name = project.app_name || (raise Exception.new("No app_name property specified"))
app_version = project.app_version || (raise Exception.new("No app_version property specified"))
version = app_version.split('_').first
install_dir = DIST_DIR / 'dist' / "#{app_name}-#{app_version}_#{ARCH}-#{PLATFORM}"
bin_dir = install_dir / 'bin'
pkg_dir = install_dir / 'lib' / 'smalltalkx' / version / 'packages'
lib_dir = install_dir / 'lib' / 'smalltalkx' / version / 'lib'
include_dir = install_dir / 'lib' / 'smalltalkx' / version / 'include'
rc_dir = win32? ? bin_dir : lib_dir
libexec_dir = install_dir / 'lib' / 'smalltalkx' / version / 'bin'
# install_dir_doc = DIST_DIR / 'docs' / "#{app_name}-#{app_version}_docs"
# doc_dir = install_dir_doc / 'share' / 'doc' / 'smalltalkx' / version
install_dir_doc = install_dir
doc_dir = install_dir / 'lib' / 'smalltalkx' / version
# HACK to make dirs globally available in 'post' rules...
$install_jv_dirs = {
:install_dir => install_dir,
:bin_dir => bin_dir,
:doc_dir => doc_dir,
:pkg_dir => pkg_dir,
:lib_dir => lib_dir,
:include_dir => include_dir,
:rc_dir => rc_dir,
:libexec_dir => libexec_dir
}
end
desc "Installs jv-branch SDK into #{DIST_DIR}"
task :'all' => [:'pre', :'main',:'post', :'archive' ]
task :'pre'
task :'post'
task :'main' => [ :'setup', :'binaries', :'scripts', :'librun', :'packages', :'resources' , :'doc']
task :'binaries' => :'variables' do
mkdir_p bin_dir
mkdir_p libexec_dir
install STC , bin_dir
install STC , libexec_dir
case
when win32?
install BUILD_DIR / 'stx' / 'projects' / 'smalltalk' / 'stx.exe', libexec_dir
install BUILD_DIR / 'stx' / 'projects' / 'smalltalk' / 'stx.com', libexec_dir
when unix?
install BUILD_DIR / 'stx' / 'projects' / 'smalltalk' / 'stx', libexec_dir
mv libexec_dir / 'stx' , libexec_dir / 'stx-bin'
else
error_unsupported_platform
end
end
task :'resources' => :'variables' do
[
'stx/goodies/bitmaps' ,
'stx/doc/online/english/credits.html'
].each do | resource |
mkdir_p pkg_dir / File.dirname(resource)
cp_r BUILD_DIR / resource , pkg_dir / File.dirname(resource)
end
rm_rf pkg_dir / 'stx' / 'include'
cp_r_dereference BUILD_DIR / 'stx' / 'include' , include_dir
end
task :'scripts' => :'variables' do
mkdir_p bin_dir
mkdir_p lib_dir
mkdir_p lib_dir / 'rc.d'
rc_files = %W{display.rc host.rc keyboard.rc smalltalk_r.rc smalltalk.rc private.rc patches}
if win32?
rc_files << 'd_win32.rc'
else
#rc_files << 'd_xfree.rc'
#rc_files << 'd_xorg.rc'
end
rc_files.each do | rc_file |
install BUILD_DIR / 'stx' / 'projects' / 'smalltalk' / rc_file, rc_dir
end
install BUILD_DIR / 'stx' / 'projects' / 'smalltalk'/ '*.wsp' , lib_dir
install du / 'src' / 'lib' / 'rc.d' / '*' , lib_dir / 'rc.d'
install du / 'src' / 'lib' / '*.rc' , rc_dir
if unix?
install du / 'src' / 'lib' / "splash-smalltalkx-#{version}.gif", lib_dir / 'splash-smalltalkx.gif'
end
case
when win32?
install du / 'src-win32' / 'bin' / 'stx.bat' , bin_dir
when unix?
install du / 'src-unix' / 'bin' / 'stx' , bin_dir
else
error_unsupported_platform
end
end
task :'librun' => :'variables' do
case
when unix?
mkdir_p lib_dir / 'lib'
install BUILD_DIR / 'stx' / 'librun' / 'librun.so' , lib_dir / 'lib'
when win32?
install BUILD_DIR / 'stx' / 'librun' / OBJ_DIR / 'librun.dll', bin_dir
else
error_unsupported_platform
end
end
task :'packages' => :'variables' do
mkdir_p lib_dir / 'lib'
pkgs = project.packages.clone
pkgs.push(project.application)
# Sort here by size of package. This forces nested packaged
# to be installed after their 'super' package. Fixes
# libjava#25
pkgs.sort! { | a, b | a.name.size <=> b.name.size }
pkgs.each do | pkg |
rm_rf pkg_dir / pkg.directory if File.exist? pkg_dir / pkg.directory
mkdir_p pkg_dir / pkg.directory
#cp_rx BUILD_DIR / pkg.directory / '.' , pkg_dir / pkg.directory do | fname |
# /\.svn|CVS|\.cvsignore|objbc|\.H$|\.STH$|\.SC$|\.sc$|\.o/.match(fname) == nil
#end
install BUILD_DIR / pkg.directory / '*.st' , pkg_dir / pkg.directory
install BUILD_DIR / pkg.directory / 'abbrev.stc' , pkg_dir / pkg.directory if File.exist? BUILD_DIR / pkg.directory / 'abbrev.stc'
install BUILD_DIR / pkg.directory / '*.so' , pkg_dir / pkg.directory
['resources' , 'bitmaps' , 'styles', 'java' ].each do | subdir |
if File.exist? BUILD_DIR / pkg.directory / subdir
cp_rx BUILD_DIR / pkg.directory / subdir , pkg_dir / pkg.directory do | fname |
# fname is full path!!!
/\.svn|CVS|\.cvsignore|tests/.match(fname) == nil
end
end
end
#Put SVN identification...
if File.exist? BUILD_DIR / pkg.directory / '.svn'
chdir BUILD_DIR / pkg.directory do
sh "svn info > \"#{pkg_dir / pkg.directory / '.svn.info'}\""
end
end
if unix?
( pkg_dir / pkg.directory / '**' ).each do | file |
chmod 0644, file if File.file? file
chmod 0755, file if File.directory? file
end
if not pkg.application?
(pkg_dir / pkg.directory / '*.so').each do | dll_name |
# make the DLL executable
chmod 0777, dll_name
# symlink the dll
chdir lib_dir / 'lib' do
rm File.basename(dll_name) if File.exist? File.basename(dll_name)
ln_s File.join('..', '..' , 'packages' , pkg.directory , File.basename(dll_name)) , File.basename(dll_name)
end
end
end
end
if win32?
if pkg.application?
install BUILD_DIR / pkg.directory / '*.dll', bin_dir
install BUILD_DIR / pkg.directory / '*.exe', bin_dir
install BUILD_DIR / pkg.directory / '*.com', bin_dir
install BUILD_DIR / pkg.directory / 'symbols.stc', bin_dir
install BUILD_DIR / pkg.directory / 'modules.stx', bin_dir
mv bin_dir / 'stx.exe' , bin_dir / 'stx-bin.exe'
mv bin_dir / 'stx.com' , bin_dir / 'stx-bin.com'
else
rm pkg_dir / pkg.directory / '*.dll'
end
end
end
end
task :'archive' => :'variables' do
chdir File.dirname install_dir do
if win32?
sh *%W{zip -q -r ..\\#{File.basename(install_dir)}.zip #{File.basename(install_dir)}}
else
sh *%W{tar cjf ../#{File.basename(install_dir)}.tar.bz2 #{File.basename(install_dir)}}
end
end
end
task :'archive-doc' => :'variables' do
if install_dir_doc != pkg_dir then
chdir File.dirname install_dir_doc do
if win32?
sh *%W{zip -q -r ..\\#{File.basename(install_dir_doc)}.zip #{File.basename(install_dir_doc)}}
else
sh *%W{tar cjf ../#{File.basename(install_dir_doc)}.tar.bz2 #{File.basename(install_dir_doc)}}
end
end
end
end
task :'doc' => :'variables' do
mkdir_p doc_dir
puts BUILD_DIR / 'stx' / 'doc'
cp_rx BUILD_DIR / 'stx' / 'doc' , doc_dir do | fname |
# fname is full path!!!
/\.svn|CVS|\.cvsignore|books|not_delivered/.match(fname) == nil
end
end
end # namespace :'dist:jv'
task :'dist:jv:docs' => [ :'dist:jv:docs:pre' , :'dist:jv:docs:main', :'dist:jv:docs:post' ]
namespace :'dist:jv:docs' do
task :'pre'
task :'post'
task :'main' => [ :'setup', :'files' ]
task :'setup' => [ :'dist:jv:variables' ]
task :'files' => :'setup' do
raise Exception.new("Not yet implemented");
end
end # namespace :'dist:jv:docs'