make.pl   [plain text]


#!/usr/bin/perl

use strict;

# exec make, but first run make with a target of no64.  If it outputs YES,
# then remove 64-bit arches from RC_CFLAGS and RC_ARCHS, remover RC_xxx,
# where xxx is a 64-bit architecture.  If there are no archs left, just
# return success.

my $dir = '.';

for(0...$#ARGV) {
    if($ARGV[$_] eq '-C') {
	$dir = $ARGV[$_ + 1];
	last;
    }
}

my $no64 = `make -C $dir no64`;
chomp($no64);

if($no64 eq 'YES') {
    my @archs;
    my @arch64;
    my @cflags;
    my $arch = 0;
    for(split(" ", $ENV{RC_CFLAGS})) {
	if($arch) {
	    if(/64/) {
		push(@arch64, $_);
	    } else {
		push(@cflags, '-arch', $_);
		push(@archs, $_);
	    }
	    $arch = 0;
	    next;
	}
	if($_ eq '-arch') {
	    $arch = 1;
	    next;
	}
	push(@cflags, $_);
    }
    unless(scalar(@archs) > 0) {
	print "Not building:\tmake @ARGV\n";
	exit 0;
    }
    $ENV{RC_CFLAGS} = join(' ', @cflags);
    $ENV{RC_ARCHS} = join(' ', @archs);
    push(@ARGV, "RC_CFLAGS=$ENV{RC_CFLAGS}", "RC_ARCHS=$ENV{RC_ARCHS}");
    for(@arch64) {
	delete($ENV{"RC_$_"});
	push(@ARGV, "RC_$_=");
    }
}
print "make @ARGV\n";
exec {'make'} 'make', @ARGV;