$target=shift @ARGV;
if($target eq 'installsrc') {
sys_print("mkdir $ENV{SRCROOT}") unless -e $ENV{SRCROOT};
sys_print("ditto . $ENV{SRCROOT}");
sys_print("ditto mesa $ENV{SRCROOT}/mesa");
exit();
}
if($target eq 'clean') {
print "Cleaning out directory $ENV{SRCROOT}\n";
chdir($ENV{SRCROOT});
sys_print("find . -name .svn | xargs rm -rf");
sys_print("find . -name \"*.gz\" | xargs rm");
sys_print("find . -name \"*.bz2\" | xargs rm");
exit();
}
if($target eq 'install') {
print "Install phase: \n";
$prefix="/usr/X11";
sys_print("mkdir $ENV{DSTROOT}") unless -e $ENV{DSTROOT};
sys_print("mkdir $ENV{OBJROOT}") unless -e $ENV{OBJROOT};
$ENV{DESTDIR}=$ENV{DSTROOT};
($osx_version)=(`sw_vers -productVersion` =~ /(10\.\d)/);
print "Building on $osx_version\n";
$ACLOCAL_LOCALDIR="$prefix/share/aclocal";
system "mkdir -p $ACLOCAL_LOCALDIR";
$ENV{ACLOCAL}="aclocal -I $ACLOCAL_LOCALDIR";
$ENV{LIBTOOLIZE}="/usr/bin/glibtoolize";
$ENV{PKG_CONFIG_PATH}="$prefix/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}";
$ENV{LD_LIBRARY_PATH}="$prefix/lib:$ENV{LD_LIBRARY_PATH}";
$ENV{PATH}="$prefix/bin:$ENV{PATH}";
$ENV{FONTPATH}="/usr/X11/lib/X11/fonts/misc/,/usr/X11/lib/X11/fonts/Type1/,".
"/usr/X11/lib/X11/fonts/75dpi/,/usr/X11/lib/X11/fonts/100dpi/,".
"/usr/X11/lib/X11/fonts/cyrillic/,/usr/X11/lib/X11/fonts/TTF/";
foreach $arch (split(/ /,$ENV{RC_ARCHS})) {
$arch_flags .= "-arch $arch ";
$arch_flags_32 .= " -arch $arch " unless $arch =~ /64/;
}
$ENV{CFLAGS}="-I$ENV{DSTROOT}$prefix/include -I$prefix/include -D__DEBUG__ -g3 -pipe $arch_flags -DDARWIN_WITH_QUARTZ -DXFree86Server -DTRANS_REOPEN";
$ENV{LDFLAGS}="-L$ENV{DSTROOT}$prefix/lib -L$prefix/lib -pipe $arch_flags";
$ENV{MACOSX_DEPLOYMENT_TARGET}=$osx_version;
$ENV{RC_Project_Source_Version}=0 unless exists $ENV{RC_Project_Source_Version};
sys_print("ditto $ENV{SRCROOT}/ $ENV{OBJROOT}");
print "Building MesaGL\n";
chdir("$ENV{OBJROOT}/mesa/Mesa-6.5.2");
sys_print("make");
sys_print("mkdir -p $ENV{DSTROOT}$prefix/lib");
sys_print("mkdir -p $ENV{DSTROOT}$prefix/include/GL");
sys_print("ditto lib $ENV{DSTROOT}$prefix/lib");
sys_print("ditto include/GL $ENV{DSTROOT}$prefix/include/GL");
sys_print("cp src/glw/*.h $ENV{DSTROOT}$prefix/include/GL");
sys_print("rm -rf $ENV{DSTROOT}$prefix/include/GL/internal");
sys_print("chown -R root:wheel $ENV{DSTROOT}$prefix/include/GL/*");
sys_print("ln -s libGLU.1.dylib $ENV{DSTROOT}$prefix/lib/libGLU.1.3.dylib");
sys_print("ln -s libGL.1.dylib $ENV{DSTROOT}$prefix/lib/libGL.1.2.dylib");
sys_print("chown -R root:wheel $ENV{DSTROOT}$prefix/lib");
chdir("$ENV{OBJROOT}/libGL");
sys_print("make");
sys_print("cp GL/libGL.1.2.dylib $ENV{DSTROOT}$prefix/lib/libGL.1.dylib");
sys_print("cp mesa/OSmesa/libOSMesa.4.dylib $ENV{DSTROOT}$prefix/lib/");
sys_print("ln -s libOSMesa.4.dylib $ENV{DSTROOT}$prefix/lib/libOSMesa.4.0.dylib");
sys_print("ln -s libOSMesa.4.dylib $ENV{DSTROOT}$prefix/lib/libOSMesa.dylib");
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime();
$mon++;
$year+=1900;
$ENV{CFLAGS}="-I$ENV{DSTROOT}$prefix/include -I$prefix/include -D__DEBUG__ -g3 -pipe $arch_flags_32 -DDARWIN_WITH_QUARTZ -DXFree86Server "
. "-DTRANS_REOPEN -DROOTLESS_WORKAROUND -DBUILD_DATE=\\\"$year$mon$mday\\\"";
$ENV{LDFLAGS}="-L$ENV{DSTROOT}$prefix/lib -L$prefix/lib -pipe $arch_flags_32";
chdir("$ENV{OBJROOT}/xorg-server-X11R7.2-1.2.0");
print "Building Xserver\n";
sys_print("autoreconf -fvi");
$conf_flags="--with-mesa-source=$ENV{OBJROOT}/mesa/Mesa-6.5.2 --enable-debug --enable-xorg --enable-quartz ".
"--disable-dependency-tracking --disable-nls --disable-xvfb --disable-xprint --disable-xnest ".
"--datarootdir=/usr/X11/lib/X11 --with-fontdir=/usr/X11/lib/X11/fonts --disable-xf86bigfont " .
"--with-module-dir=/usr/X11/lib/xorg/modules --prefix=$prefix";
sys_print( "./configure $conf_flags");
print "building\n";
sys_print("make -j2");
sys_print("make install");
chdir("../..");
sys_print_nodie("mkdir -p $ENV{DSTROOT}/usr/X11");
sys_print_nodie("mv $ENV{OBJROOT}/xorg-server-X11R7.2-1.2.0/hw/darwin/apple/build/X11.app ".
"$ENV{DSTROOT}/usr/X11/X11.app");
sys_print_nodie("chown -R root:wheel $ENV{DSTROOT}/usr/X11/X11.app");
sys_print_nodie("mv $ENV{OBJROOT}/xorg-server-X11R7.2-1.2.0/hw/darwin/apple/build/X11.app.dSYM ".
"$ENV{SYMROOT}/");
$x11_file = "$ENV{DSTROOT}/usr/X11/X11.app/Contents/MacOS/X11";
system("lipo -remove ppc64 -output $x11_file $x11_file") if($ENV{RC_ppc64});
system("lipo -remove x86_64 -output $x11_file $x11_file") if($ENV{RC_x86_64});
sys_print_nodie("cd $ENV{DSTROOT}/usr/X11/X11.app/Contents/Resources && mv Info.plist ..");
sys_print_nodie("mkdir -p $ENV{DSTROOT}/Applications/Utilities");
sys_print_nodie("mv $ENV{OBJROOT}/xorg-server-X11R7.2-1.2.0/hw/darwin/launcher/build/X11.app ".
"$ENV{DSTROOT}/Applications/Utilities/X11.app");
sys_print_nodie("mv $ENV{OBJROOT}/xorg-server-X11R7.2-1.2.0/hw/darwin/launcher/build/X11.app.dSYM ".
"$ENV{SYMROOT}/X11-launcher.app.dSYM");
$x11_file = "$ENV{DSTROOT}/Applications/Utilities/X11.app/Contents/MacOS/X11";
system("lipo -remove ppc64 -output $x11_file $x11_file") if($ENV{RC_ppc64});
system("lipo -remove x86_64 -output $x11_file $x11_file") if($ENV{RC_x86_64});
sys_print_nodie("cd $ENV{DSTROOT}/Applications/Utilities/X11.app/Contents/Resources && mv Info.plist ..");
sys_print_nodie("rm -rf $ENV{DSTROOT}$prefix/bin/Applications $ENV{DSTROOT}$prefix/bin/X");
sys_print_nodie("rm $ENV{DSTROOT}$prefix/bin/startXClients $ENV{DSTROOT}$prefix/bin/XDarwinStartup");
sys_print_nodie("ln -s Xquartz $ENV{DSTROOT}/usr/X11/bin/X");
sys_print_nodie("mkdir -p $ENV{DSTROOT}/usr/X11/man");
sys_print_nodie("cd $ENV{DSTROOT}/etc/X11/man/man1 && rm XDarwin* && mv Xserver.1 Xquartz.1 && ln -s Xquartz.1 X");
sys_print_nodie("mv $ENV{DSTROOT}/etc/X11/man/man1 $ENV{DSTROOT}/usr/X11/man");
sys_print_nodie("rm -rf $ENV{DSTROOT}/Applications/Utilities/XDarwin.app $ENV{DSTROOT}/etc");
make_dsyms();
}
sub get_workdir {
foreach (glob('*')) {
return $_ if(-e "$_/configure");
}
die "Unable to determine workdir";
}
sub make_dsyms {
open(FIND,"find $ENV{DSTROOT} -type f -exec file {} +|");
while(<FIND>) {
if(/(.*): .*Mach-O/) {
$basename=$1;
$fullname=$1;
$basename =~ s/\/.*\///;
sys_print_nodie("dsymutil --out=$ENV{SYMROOT}/$basename.dSYM $fullname");
sys_print_nodie("strip -S $fullname");
}
}
close FIND;
}
sub sys_print {
$command=shift;
print "$command\n";
system $command;
$retval=$? >> 8;
die "returned code $retval" if $retval;
}
sub sys_print_nodie {
$command=shift;
print "$command\n";
system $command;
$retval=$? >> 8;
print "returned code $retval\n" if $retval;
}