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;

