build   [plain text]


$ENV{X11_PREFIX}="/usr/X11" if ($ENV{X11_PREFIX} eq '');
$ENV{CC}="gcc" if ($ENV{CC} eq '');

$target=shift @ARGV;

$ENV{LD_LIBRARY_PATH}="$prefix/lib:$ENV{LD_LIBRARY_PATH}" unless $ENV{LD_LIBRARY_PATH} =~ /$prefix/;
$ENV{PATH}="$ENV{DSTROOT}$prefix/bin:$prefix/bin:$ENV{PATH}" unless $ENV{PATH} =~ /$prefix/;
$ENV{FREETYPE_LIBS}="-L$prefix/lib -lfreetype -lz -Xlinker -framework -Xlinker CoreServices -Xlinker -framework -Xlinker ApplicationServices";

if($target eq 'installsrc') {
    sys_print("tar -cp --exclude .git --exclude .svn --exclude CVS . | tar -pox -C $ENV{SRCROOT}");
    foreach $module (glob('*')) {
        next if $module =~ /build/;
        next if $module =~ /Make/;
        next if $module =~ /uvn/;
        next if $module =~ /\./;
        print "installing source for $module\n";
        sys_print("../uvn extract; ../uvn patch");

if($target eq 'clean') {
    print "Cleaning out directory $ENV{SRCROOT}\n";
    sys_print("find . -name .uvn | xargs rm -rf");
    sys_print("find . -name \"*.gz\" | xargs rm");
    sys_print("find . -name \"*.bz2\" | xargs rm");
    sys_print("find . -name patches | xargs rm -rf");

if($target eq 'install') {
# Must create local aclocal dir or aclocal fails
    system "mkdir -p $ACLOCAL_LOCALDIR";
# The following is required to make aclocal find our .m4 macros
    $ENV{ACLOCAL}="aclocal -I $ACLOCAL_LOCALDIR -I $prefix/share/aclocal -I/usr/local/share/aclocal";
    print "Install phase: \n";
    print "SRCROOT = $ENV{SRCROOT}\n";
    print "DSTROOT = $ENV{DSTROOT}\n";
    print "OBJROOT = $ENV{OBJROOT}/\n";
    print "SYMROOT = $ENV{SYMROOT}\n";

    sys_print("ditto $ENV{SRCROOT} $ENV{OBJROOT}");
# All fonts require mkfontscale and mkfontdir to be available
# The following fonts require bdftopcf to be available:
#   adobe-100dpi, adobe-75dpi, adobe-utopia-100dpi, adobe-utopia-75dpi,
#   arabic-misc, bh-100dpi, bh-75dpi, bh-lucidatypewriter-100dpi,
#   bh-lucidatypewriter-75dpi, bitstream-100dpi, bitstream-75dpi,
#   cronyx-cyrillic, cursor-misc, daewoo-misc, dec-misc, isas-misc,
#   jis-misc, micro-misc, misc-cyrillic, misc-misc, mutt-misc,
#   schumacher-misc, screen-cyrillic, sony-misc, sun-misc and
#   winitzki-cyrillic
# Within the font module, the util component must be built before the
# following fonts:
#   adobe-100dpi, adobe-75dpi, adobe-utopia-100dpi, adobe-utopia-75dpi,
#   bh-100dpi, bh-75dpi, bh-lucidatypewriter-100dpi, bh-lucidatypewriter-75dpi,
#   misc-misc and schumacher-misc

# The alias component is recommended to be installed after the other fonts
# since the fonts.alias files reference specific fonts installed from the
# other font components
    while(<font-*>) {
	next if /util/;
	next if /alias/;
	push @font_packages, $_;

    foreach $arch (split(/ /,$ENV{RC_ARCHS})) {
        $arch_flags_lib .= "-arch $arch ";
        if($ENV{MACOSFORGE_LEO} eq "YES") {
            $arch_flags_exec .= " -arch $arch " unless $arch =~ /64/;
        } else {
            $arch_flags_exec .= " -arch $arch " unless $arch =~ /ppc/;


    # Backwards compatible symlink for Leopard/SnowLeopard which had them in /opt/X11/lib/X11/fonts
    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/lib/X11");
    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/share/fonts");
    sys_print("ln -s ../../share/fonts $ENV{DSTROOT}/$prefix/lib/X11/fonts");

    # Where font_cache stores its .pid file
    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/var/run");

    foreach (@font_packages) {

    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/share/fonts/TTF");
    sys_print("ditto $ENV{SRCROOT}/TTF $ENV{DSTROOT}/$prefix/share/fonts/TTF");
    sys_print("chown -R root:wheel $ENV{DSTROOT}/$prefix/share/fonts/TTF");

    # This isn't needed with fonts released in 2009
    # sys_print("rm -rf $ENV{DSTROOT}/$prefix/var/cache/fontconfig");

    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/lib/X11/fontconfig/conf.avail");
    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/lib/X11/fontconfig/conf.d");
    sys_print("install -c $ENV{SRCROOT}/fontconfig.osx-fonts.conf $ENV{DSTROOT}/$prefix/lib/X11/fontconfig/conf.avail/05-osx-fonts.conf");
    sys_print("ln -s ../conf.avail/05-osx-fonts.conf $ENV{DSTROOT}/$prefix/lib/X11/fontconfig/conf.d/05-osx-fonts.conf");

    sys_print("mkdir -p $ENV{DSTROOT}/$prefix/bin");
    sys_print("sed 's:__PREFIX__:$prefix:' $ENV{SRCROOT}/ > $ENV{OBJROOT}/font_cache");
    sys_print("install -c -m 755 $ENV{OBJROOT}/font_cache $ENV{DSTROOT}/$prefix/bin/font_cache");
    sys_print("/Developer/Makefiles/bin/ -d $ENV{DSTROOT}/$prefix/share/man/ man1 man2 man3 man4 man5 man6 man7 man8 man9");


sub build {

    print("build($module): ");
    die "$module not found" unless -e "$ENV{SRCROOT}/$module";
    chdir ("$ENV{SRCROOT}/$module");
    print "full_path=$full_path\n";
    sys_print("mkdir -p $ENV{OBJROOT}/$full_path");
    sys_print("ditto $ENV{SRCROOT}/$full_path $ENV{OBJROOT}/$full_path");
    sys_print("find . -depth 1 -type f -print | xargs -I foo cp -pv foo $ENV{OBJROOT}/$module");

    sys_print("rm -f m4/libtool.m4 m4/lt*.m4") if(-f "m4/libtool.m4");
    sys_print("autoreconf -fvi");

    print "Configuring...\n";
    $conf_flags=" --prefix=$prefix --disable-static --disable-dependency-tracking --disable-nls  --mandir=$prefix/share/man --cache-file=$ENV{OBJROOT}/configure.cache ";


    if(-e $conf_flags_path) {
	$conf_flags .= `cat $conf_flags_path`;
	chomp $conf_flags;

    sys_print("./configure $conf_flags");
    if(-e $post_config_path) {
	sys_print("cd .. && $post_config_path");
    sys_print("make -j".`sysctl -n hw.activecpu`);
    sys_print("make install");

sub get_workdir {
    system "pwd";
    system "ls -l";
    foreach (glob('*')) {
	if(-e "$_/configure") {
	    return $_;
    die "Unable to determine workdir";

sub set_arch_exec {
    $ENV{CC}="$ENV{CC_BASE} -I$ENV{DSTROOT}$prefix/include";
    $ENV{CFLAGS}="-ggdb3 -Os -pipe $arch_flags_exec -Wall -Wformat=2";
    $ENV{LDFLAGS}="-pipe $arch_flags_exec -L$ENV{DSTROOT}$prefix/lib";
    sys_print_nodie("rm $ENV{OBJROOT}/configure.cache");

sub set_arch_lib {
    $ENV{CC}="$ENV{CC_BASE} -I$ENV{DSTROOT}$prefix/include";
    $ENV{CFLAGS}="-ggdb3 -Os -pipe $arch_flags_lib -Wall -Wformat=2";
    $ENV{LDFLAGS}="-pipe $arch_flags_lib -L$ENV{DSTROOT}$prefix/lib";
    sys_print_nodie("rm $ENV{OBJROOT}/configure.cache");

sub sys_print {
    print "$command\n";
    system $command;
    $retval=$? >> 8;
    die "returned code $retval" if $retval;

sub sys_print_nodie {
    print "$command\n";
    system $command;
    $retval=$? >> 8;
    print "returned code $retval\n" if $retval;

sub make_dsyms {
    open(FIND,"find $ENV{DSTROOT} -type f -exec file {} +|");
    while(<FIND>) {
	if(/(.*): .*Mach-O/) {
	    $basename =~ s/\/.*\///;
	    sys_print_nodie("dsymutil --out=$ENV{SYMROOT}/$basename.dSYM $fullpath");
	    sys_print_nodie("strip -S $fullpath");
    close FIND;