#!/usr/bin/perl

use strict;

my $gitroot = "/home/alex/git";
my $installroot = "/opt/xorgpci";

if (!-d "$installroot/share/aclocal") {
    `sudo mkdir -p $installroot/share/aclocal`;
}
if (!-d "$installroot/lib/pkgconfig") {
    `sudo mkdir -p $installroot/lib/pkgconfig`;
}

# macros
print "macros\n";
chdir ("$gitroot/util/macros");
`./autogen.sh --prefix=$installroot`;
`make`;
`sudo make install`;

$ENV{ACLOCAL} = qq{aclocal -I $installroot/share/aclocal};
$ENV{PKG_CONFIG_PATH} = qq{$installroot/lib/pkgconfig:} . $ENV{PKG_CONFIG_PATH};
$ENV{LD_LIBRARY_PATH} = qq{$installroot/lib:} . $ENV{LD_LIBRARY_PATH};
$ENV{LD_RUN_PATH} = qq{$installroot/lib:} . $ENV{LD_RUN_PATH};

# protocol headers
print "protocol headers\n";
my $protos = [ qw/
applewmproto
bigreqsproto
compositeproto
damageproto
dmxproto
evieproto
fixesproto
fontcacheproto
fontsproto
glproto
inputproto
kbproto
pmproto
printproto
randrproto
recordproto
renderproto
resourceproto
scrnsaverproto
trapproto
videoproto
windowswmproto
x11proto
xcmiscproto
xextproto
xf86bigfontproto
xf86dgaproto
xf86driproto
dri2proto
xf86miscproto
xf86rushproto
xf86vidmodeproto
xineramaproto
/ ];

foreach my $proto (@$protos) {
    print "$proto\n";
    chdir("$gitroot/proto/$proto");
    `./autogen.sh --prefix=$installroot`;
    `make`;
    `sudo make install`;
}

# libdrm
print "libdrm\n";
chdir ("$gitroot/drm");
`./autogen.sh --prefix=$installroot`;
`make`;
`sudo make install`;

# from build.sh:
# All protocol modules must be installed before the libs (okay, that's an
# overstatement, but all protocol modules should be installed anyway)
#
# the libraries have a dependency order:
# xtrans, Xau, Xdmcp before anything else
# fontenc before Xfont
# ICE before SM
# X11 before Xext
# (X11 and SM) before Xt
# Xt before Xmu and Xpm
# Xext before any other extension library
# Xfixes before Xcomposite
# Xp before XprintUtil before XprintAppUtil
#
# If xcb is being used for libX11, it must be built before libX11, but after
# Xau & Xdmcp
#

# libs
print "preX11libs\n";
my $preX11libs = [ qw/libpciaccess libxtrans libXau libXdmcp/ ];
foreach my $lib (@$preX11libs) {
    print "$lib\n";
    chdir("$gitroot/lib/$lib");
    `./autogen.sh --prefix=$installroot`;
    `make`;
    `sudo make install`;
}

# xcb
print "xcb\n";
my $xcbs = [ qw/proto pthread-stubs libxcb/ ];
foreach my $xcb (@$xcbs) {
    print "$xcb\n";
    chdir("$gitroot/xcb/$xcb");
    `./autogen.sh --prefix=$installroot`;
    `make`;
    `sudo make install`;
}

# libX11
print "libX11\n";
chdir ("$gitroot/lib/libX11");
`./autogen.sh --prefix=$installroot`;
`make`;
`sudo make install`;

# libs
print "postX11libs\n";
my $postX11libs = [ qw/
libXext
libAppleWM
libWindowsWM
libdmx
libfontenc
libFS
libICE
liblbxutil
liboldX
libSM
libXt
libXmu
libXpm
libXp
libXaw
libXfixes
libXcomposite
libXrender
libXdamage
libXcursor
libXevie
libXfont
libXfontcache
libXft
libXi
libXinerama
libxkbfile
libxkbui
libXprintUtil
libXprintAppUtil
libXrandr
libXRes
libXScrnSaver
libXTrap
libXtst
libXv
libXvMC
libXxf86dga
libXxf86misc
libXxf86vm
/ ];

foreach my $lib (@$postX11libs) {
    print "$lib\n";
    chdir("$gitroot/lib/$lib");
    `./autogen.sh --prefix=$installroot`;
    `make`;
    `sudo make install`;
}

# mesa
print "mesa\n";
# make sure INSTALL_DIR is setup properly
chdir ("$gitroot/mesa");
`./autogen.sh --prefix=$installroot --with-driver=dri --with-dri-driverdir=$installroot/lib/dri --with-demos=no`;
`make`;
`sudo make install`;
#`make glcore`;
#`sudo make glcore-install`;

#pixman
print "pixman\n";
chdir ("$gitroot/pixman");
`./autogen.sh --prefix=$installroot`;
`make`;
`sudo make install`;

# xserver
print "xserver\n";
chdir ("$gitroot/xserver");
`./autogen.sh --prefix=$installroot --enable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xwin --disable-xprint --disable-xorgcfg --with-mesa-source=$gitroot/mesa --with-dri-driver-path=$installroot/lib/dri`;
`make`;
`sudo make install`;

#drivers
print "drivers\n";
my $drivers = [ qw/xf86-input-keyboard xf86-input-mouse xf86-video-ati/ ];
foreach my $driver (@$drivers) {
    print "$driver\n";
    chdir("$gitroot/driver/$driver");
    `./autogen.sh --prefix=$installroot`;
    `make`;
    `sudo make install`;
}

#xkb data
print "xkb data\n";
chdir ("$gitroot/xkeyboard-config");
`./autogen.sh --prefix=$installroot`;
`make`;
`sudo make install`;

