danderson@95: #!/usr/bin/perl dvander@110: # vim: set ts=2 sw=2 tw=99 et: danderson@95: danderson@95: use strict; danderson@95: use Cwd; danderson@95: use File::Basename; danderson@95: use File::Path; danderson@95: danderson@95: my ($myself, $path) = fileparse($0); danderson@95: chdir($path); danderson@95: danderson@95: require 'helpers.pm'; danderson@95: danderson@95: #Go back above build dir danderson@95: chdir(Build::PathFormat('../../..')); danderson@95: danderson@95: #Get the source path. danderson@95: our ($root) = getcwd(); danderson@95: danderson@95: my $reconf = 0; danderson@95: danderson@95: #Create output folder if it doesn't exist. danderson@95: if (!(-d 'OUTPUT')) { dvander@110: $reconf = 1; danderson@95: } else { dvander@110: if (-f 'OUTPUT/sentinel') { dvander@110: my @s = stat('OUTPUT/sentinel'); dvander@110: my $mtime = $s[9]; dvander@110: my @files = ('build/pushbuild.txt', dvander@110: 'build/AMBuildScript', dvander@110: 'build/product.version', dvander@110: 'build/tools/bootstrap.pl'); dvander@110: my ($i); dvander@110: for ($i = 0; $i <= $#files; $i++) { dvander@110: if (IsNewer($files[$i], $mtime)) { dvander@110: $reconf = 1; dvander@110: last; dvander@110: } dvander@110: } dvander@110: } else { dvander@110: $reconf = 1; dvander@110: } danderson@95: } danderson@95: danderson@95: if ($reconf) { dvander@110: rmtree('OUTPUT'); dvander@110: mkdir('OUTPUT') or die("Failed to create output folder: $!\n"); dvander@110: chdir('OUTPUT'); danderson@95: dvander@110: print "Attempting to reconfigure...\n"; danderson@95: dvander@110: my ($os, $bits, $mode); dvander@110: $os = $ARGV[0]; dvander@110: $bits = $ARGV[1]; dvander@110: $mode = $ARGV[2]; danderson@95: dvander@110: my ($prefix, $python); dvander@110: if ($^O eq "darwin") { dvander@110: $prefix = 'CC=clang CXX=clang++ '; dvander@110: $python = 'python3'; dvander@110: } elsif ($^O eq "linux") { dvander@110: $prefix = 'CC="ccache gcc" CXX="ccache g++" '; dvander@110: $python = 'python3'; dvander@110: } elsif ($^O =~ /MSWin/) { dvander@110: $prefix = ''; dvander@110: $python = "C:\\Python31\\Python.exe"; dvander@110: } danderson@95: dvander@110: my ($cmdstring); dvander@110: $cmdstring = $prefix . dvander@110: $python . ' ' . dvander@110: Build::PathFormat('../build/configure.py') . ' '; danderson@95: dvander@110: if ($mode eq 'release') { dvander@110: $cmdstring .= '--enable-optimize '; dvander@110: } else { dvander@110: $cmdstring .= '--enable-debug '; dvander@110: } danderson@95: dvander@110: if ($bits eq '32') { dvander@110: $cmdstring .= '--arch=x86 '; dvander@110: } else { dvander@110: $cmdstring .= '--arch=x64 '; dvander@110: } danderson@95: dvander@110: my ($result); dvander@110: print "-> $cmdstring\n"; dvander@110: $result = `$cmdstring`; danderson@95: dvander@110: print "$result\n"; dvander@110: if ($? != 0) { dvander@110: die("Could not configure: $!\n"); dvander@110: } dvander@110: open(FILE, '>sentinel'); dvander@110: print FILE "this is nothing.\n"; dvander@110: close(FILE); danderson@95: } danderson@95: danderson@95: sub IsNewer danderson@95: { dvander@110: my ($file, $time) = (@_); danderson@95: dvander@110: my @s = stat($file); dvander@110: my $mtime = $s[9]; dvander@110: return $mtime > $time; danderson@95: } danderson@95: danderson@95: exit(0); danderson@95: danderson@95: