make.pl   [plain text]


#!/usr/bin/perl
#
# Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
#
# @APPLE_LICENSE_HEADER_START@
# 
# This file contains Original Code and/or Modifications of Original Code
# as defined in and that are subject to the Apple Public Source License
# Version 2.0 (the 'License'). You may not use this file except in
# compliance with the License. Please obtain a copy of the License at
# http://www.opensource.apple.com/apsl/ and read it before using this
# file.
# 
# The Original Code and all software distributed under the License are
# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
# Please see the License for the specific language governing rights and
# limitations under the License.
# 
# @APPLE_LICENSE_HEADER_END@

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;