diff options
Diffstat (limited to 'infrastructure/BoxPlatform.pm.in')
-rw-r--r-- | infrastructure/BoxPlatform.pm.in | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/infrastructure/BoxPlatform.pm.in b/infrastructure/BoxPlatform.pm.in new file mode 100644 index 00000000..325e56c3 --- /dev/null +++ b/infrastructure/BoxPlatform.pm.in @@ -0,0 +1,155 @@ +package BoxPlatform; +use Exporter; +@ISA = qw/Exporter/; +@EXPORT = qw/$build_os $build_os_ver $ac_target $ac_target_cpu $ac_target_vendor $ac_target_os $make_command $bsd_make $platform_define $platform_cpu $gcc_v3 $product_version $product_name $install_into_dir $sub_make_options $platform_compile_line_extra $platform_link_line_extra $platform_lib_files $platform_exe_ext $target_windows $target_msvc/; + +BEGIN +{ + # which OS are we building under? + $ac_target = '@target@'; + $ac_target_cpu = '@target_cpu@'; + $ac_target_vendor = '@target_vendor@'; + $ac_target_os = '@target_os@'; + $target_windows = 0; + + if ($^O eq "MSWin32" and not -x "/usr/bin/uname") + { + $target_windows = 1; + $target_msvc = 1; + $build_os = "winnt"; + eval "use Win32"; + $build_os_ver = Win32::GetOSName(); + } + else + { + $target_windows = 1 if $ac_target_os =~ m'^mingw32' + or $ac_target_os eq "winnt"; + $target_msvc = 0; + $build_os = `uname`; + $build_os_ver = `uname -r`; + chomp $build_os; + chomp $build_os_ver; + } + + # Cygwin Builds usually something like CYGWIN_NT-5.0, CYGWIN_NT-5.1 + # Box Backup tried on Win2000,XP only :) + $build_os = 'CYGWIN' if $build_os =~ m/CYGWIN/; + $build_os = 'MINGW32' if $build_os =~ m/MINGW32/; + + if ($build_os eq 'Darwin') { + $xcode_ver = `xcodebuild -version | awk '/^Xcode/ {print \$2}'` + } + + if ($build_os eq 'Darwin' and $xcode_ver < 4) + { + $make_command = 'bsdmake'; + $bsd_make = 1; + } + elsif ($build_os eq 'SunOS') + { + $make_command = 'gmake'; + $bsd_make = 0; + } + else + { + $make_command = 'make'; + $bsd_make = ($build_os ne 'Linux' && $build_os ne 'CYGWIN' && + $build_os ne "MINGW32" && $build_os ne 'GNU/kFreeBSD' && + $build_os ne 'Darwin'); + } + + # blank extra flags by default + $platform_compile_line_extra = ''; + $platform_link_line_extra = ''; + $platform_lib_files = '@LIBS@'; + $platform_exe_ext = '@EXEEXT@'; + + # get version + my $version_file = "VERSION.txt"; + if (not -r $version_file) { $version_file = "../../$version_file" } + die "missing version file: $version_file" unless $version_file; + + open VERSION, $version_file or die "$version_file: $!"; + $product_version = <VERSION>; + chomp $product_version; + $product_name = <VERSION>; + chomp $product_name; + close VERSION; + + if($product_version =~ /USE_SVN_VERSION/) + { + # for developers, use Git version (SVN is no more): + my $gitversion = `git rev-parse HEAD`; + chomp $gitversion; + $product_version =~ s/USE_SVN_VERSION/git_$gitversion/; + } + + # where to put the files + $install_into_dir = '@sbindir_expanded@'; + + # see how many processors there are, and set make flags accordingly + if($build_os eq 'Darwin' || $build_os =~ /(Free|Net|Open)BSD/) + { + $cpus = `sysctl -n hw.ncpu`; + } + elsif($build_os eq 'Linux') + { + $cpus = `grep -c ^processor /proc/cpuinfo`; + } + elsif($build_os eq 'SunOS') + { + $cpus = `psrinfo -p`; + } + + chomp $cpus; + if($cpus > 1) + { + print STDERR "$cpus processors detected, will set make to perform concurrent jobs\n"; + $sub_make_options = ' -j '.($cpus + 1); + } + + # if it's Darwin, + if($build_os eq 'Darwin') + { + # test for fink installation + if(-d '/sw/include' && -d '/sw/lib') + { + print STDERR "Fink installation detected, will use headers and libraries\n"; + $platform_compile_line_extra = '-I/sw/include '; + $platform_link_line_extra = '-L/sw/lib '; + } + } + + if ($target_windows) + { + $platform_exe_ext = '.exe'; + } +} + +sub make_flag +{ + if($bsd_make) + { + return "-D $_[0]" + } + return $_[0].'=1'; +} + +sub parcel_root +{ + my $tos = $_[1] || $ac_target; + return $product_name.'-'.$product_version.'-'.$_[0].'-'.$tos; +} + +sub parcel_dir +{ + 'parcels/'.parcel_root($_[0], $_[1]) +} + +sub parcel_target +{ + parcel_dir($_[0]).'.tgz' +} + +1; + |