package do_common; use warnings; use strict; BEGIN { use Exporter; our @ISA = qw/Exporter/; our @EXPORT = qw/&read_config $basedir $prefix %mod_specific_configuration @all_modules/; } # ## ### #### CONFIGURATION ### ## # # The location of the 'git' directory our $basedir = $ENV{'HOME'} . '/git'; # The location you want to install to our $prefix = '/usr/local'; # Package-specific arguments to the 'configure' script our %mod_specific_configuration = ( 'app/xdm' => '--with-xft=no', 'app/compiz' => '--enable-gtk', 'lib/libdrm' => '--enable-radeon-experimental-api --enable-nouveau-experimental-api', 'lib/libX11' => '--with-xcb=yes', './xserver' => "--enable-xquartz=no --enable-dmx=no --enable-xace=yes --enable-xselinux=yes --enable-xcsecurity=yes --enable-kdrive=no --enable-xvfb=no --enable-xephyr=yes --enable-xfbdev=yes --enable-dri2=yes --enable-xnest=no", 'doc/xorg-docs' => "--enable-ps=no --enable-txt=no --enable-html=yes", 'driver/xf86-video-vesa' => "--enable-pciaccess=yes", 'xcb/libxcb' => "--enable-selinux=yes --enable-xinput=yes", 'xcb/xpyb' => "--enable-xselinux=yes --enable-xinput=yes" ); our @all_modules = qw| driver/xf86-input-acecad xorg/driver/xf86-input-acecad driver/xf86-input-aiptek xorg/driver/xf86-input-aiptek driver/xf86-input-calcomp xorg/driver/xf86-input-calcomp driver/xf86-input-citron xorg/driver/xf86-input-citron driver/xf86-input-digitaledge xorg/driver/xf86-input-digitaledge driver/xf86-input-dmc xorg/driver/xf86-input-dmc driver/xf86-input-dynapro xorg/driver/xf86-input-dynapro driver/xf86-input-elo2300 xorg/driver/xf86-input-elo2300 driver/xf86-input-elographics xorg/driver/xf86-input-elographics driver/xf86-input-evdev xorg/driver/xf86-input-evdev driver/xf86-input-fpit xorg/driver/xf86-input-fpit driver/xf86-input-hyperpen xorg/driver/xf86-input-hyperpen driver/xf86-input-jamstudio xorg/driver/xf86-input-jamstudio driver/xf86-input-joystick xorg/driver/xf86-input-joystick driver/xf86-input-keyboard xorg/driver/xf86-input-keyboard driver/xf86-input-magellan xorg/driver/xf86-input-magellan driver/xf86-input-magictouch xorg/driver/xf86-input-magictouch driver/xf86-input-microtouch xorg/driver/xf86-input-microtouch driver/xf86-input-mouse xorg/driver/xf86-input-mouse driver/xf86-input-mutouch xorg/driver/xf86-input-mutouch driver/xf86-input-palmax xorg/driver/xf86-input-palmax driver/xf86-input-penmount xorg/driver/xf86-input-penmount driver/xf86-input-sample xorg/driver/xf86-input-sample driver/xf86-input-spaceorb xorg/driver/xf86-input-spaceorb driver/xf86-input-summa xorg/driver/xf86-input-summa driver/xf86-input-synaptics xorg/driver/xf86-input-synaptics driver/xf86-input-tek4957 xorg/driver/xf86-input-tek4957 driver/xf86-input-ur98 xorg/driver/xf86-input-ur98 driver/xf86-input-vmmouse xorg/driver/xf86-input-vmmouse driver/xf86-input-void xorg/driver/xf86-input-void driver/xf86-video-apm xorg/driver/xf86-video-apm driver/xf86-video-ark xorg/driver/xf86-video-ark driver/xf86-video-ast xorg/driver/xf86-video-ast driver/xf86-video-ati xorg/driver/xf86-video-ati driver/xf86-video-chips xorg/driver/xf86-video-chips driver/xf86-video-cirrus xorg/driver/xf86-video-cirrus driver/xf86-video-cyrix xorg/driver/xf86-video-cyrix driver/xf86-video-dummy xorg/driver/xf86-video-dummy driver/xf86-video-fbdev xorg/driver/xf86-video-fbdev driver/xf86-video-geode xorg/driver/xf86-video-geode driver/xf86-video-glide xorg/driver/xf86-video-glide driver/xf86-video-glint xorg/driver/xf86-video-glint driver/xf86-video-i128 xorg/driver/xf86-video-i128 driver/xf86-video-i740 xorg/driver/xf86-video-i740 driver/xf86-video-impact xorg/driver/xf86-video-impact driver/xf86-video-imstt xorg/driver/xf86-video-imstt driver/xf86-video-intel xorg/driver/xf86-video-intel driver/xf86-video-mga xorg/driver/xf86-video-mga driver/xf86-video-neomagic xorg/driver/xf86-video-neomagic driver/xf86-video-newport xorg/driver/xf86-video-newport driver/xf86-video-nouveau nouveau/xf86-video-nouveau driver/xf86-video-nsc xorg/driver/xf86-video-nsc driver/xf86-video-nv xorg/driver/xf86-video-nv driver/xf86-video-radeonhd xorg/driver/xf86-video-radeonhd driver/xf86-video-rendition xorg/driver/xf86-video-rendition driver/xf86-video-s3 xorg/driver/xf86-video-s3 driver/xf86-video-s3virge xorg/driver/xf86-video-s3virge driver/xf86-video-savage xorg/driver/xf86-video-savage driver/xf86-video-siliconmotion xorg/driver/xf86-video-siliconmotion driver/xf86-video-sis xorg/driver/xf86-video-sis driver/xf86-video-sisusb xorg/driver/xf86-video-sisusb driver/xf86-video-sunbw2 xorg/driver/xf86-video-sunbw2 driver/xf86-video-suncg14 xorg/driver/xf86-video-suncg14 driver/xf86-video-suncg3 xorg/driver/xf86-video-suncg3 driver/xf86-video-suncg6 xorg/driver/xf86-video-suncg6 driver/xf86-video-sunffb xorg/driver/xf86-video-sunffb driver/xf86-video-sunleo xorg/driver/xf86-video-sunleo driver/xf86-video-suntcx xorg/driver/xf86-video-suntcx driver/xf86-video-tdfx xorg/driver/xf86-video-tdfx driver/xf86-video-tga xorg/driver/xf86-video-tga driver/xf86-video-trident xorg/driver/xf86-video-trident driver/xf86-video-tseng xorg/driver/xf86-video-tseng driver/xf86-video-v4l xorg/driver/xf86-video-v4l driver/xf86-video-vermilion xorg/driver/xf86-video-vermilion driver/xf86-video-vesa xorg/driver/xf86-video-vesa driver/xf86-video-vga xorg/driver/xf86-video-vga driver/xf86-video-via xorg/driver/xf86-video-via driver/xf86-video-vmware xorg/driver/xf86-video-vmware driver/xf86-video-voodoo xorg/driver/xf86-video-voodoo driver/xf86-video-wsfb xorg/driver/xf86-video-wsfb driver/xf86-video-xgi xorg/driver/xf86-video-xgi driver/xf86-video-xgixp xorg/driver/xf86-video-xgixp font/adobe-100dpi xorg/font/adobe-100dpi font/adobe-75dpi xorg/font/adobe-75dpi font/adobe-utopia-100dpi xorg/font/adobe-utopia-100dpi font/adobe-utopia-75dpi xorg/font/adobe-utopia-75dpi font/adobe-utopia-type1 xorg/font/adobe-utopia-type1 font/alias xorg/font/alias font/arabic-misc xorg/font/arabic-misc font/bh-100dpi xorg/font/bh-100dpi font/bh-75dpi xorg/font/bh-75dpi font/bh-lucidatypewriter-100dpi xorg/font/bh-lucidatypewriter-100dpi font/bh-lucidatypewriter-75dpi xorg/font/bh-lucidatypewriter-75dpi font/bh-ttf xorg/font/bh-ttf font/bh-type1 xorg/font/bh-type1 font/bitstream-100dpi xorg/font/bitstream-100dpi font/bitstream-75dpi xorg/font/bitstream-75dpi font/bitstream-speedo xorg/font/bitstream-speedo font/bitstream-type1 xorg/font/bitstream-type1 font/cronyx-cyrillic xorg/font/cronyx-cyrillic font/cursor-misc xorg/font/cursor-misc font/daewoo-misc xorg/font/daewoo-misc font/dec-misc xorg/font/dec-misc font/encodings xorg/font/encodings font/ibm-type1 xorg/font/ibm-type1 font/isas-misc xorg/font/isas-misc font/jis-misc xorg/font/jis-misc font/micro-misc xorg/font/micro-misc font/misc-cyrillic xorg/font/misc-cyrillic font/misc-ethiopic xorg/font/misc-ethiopic font/misc-meltho xorg/font/misc-meltho font/misc-misc xorg/font/misc-misc font/mutt-misc xorg/font/mutt-misc font/schumacher-misc xorg/font/schumacher-misc font/screen-cyrillic xorg/font/screen-cyrillic font/sony-misc xorg/font/sony-misc font/sun-misc xorg/font/sun-misc font/util xorg/font/util font/winitzki-cyrillic xorg/font/winitzki-cyrillic font/xfree86-type1 xorg/font/xfree86-type1 lib/libpciaccess xorg/lib/libpciaccess lib/libAppleWM xorg/lib/libAppleWM lib/libdmx xorg/lib/libdmx lib/libfontenc xorg/lib/libfontenc lib/libFS xorg/lib/libFS lib/libICE xorg/lib/libICE lib/liboldX xorg/lib/liboldX lib/libSM xorg/lib/libSM lib/libWindowsWM xorg/lib/libWindowsWM lib/libX11 xorg/lib/libX11 lib/libXau xorg/lib/libXau lib/libXaw xorg/lib/libXaw lib/libXcomposite xorg/lib/libXcomposite lib/libXcursor xorg/lib/libXcursor lib/libXdamage xorg/lib/libXdamage lib/libXdmcp xorg/lib/libXdmcp lib/libXevie xorg/lib/libXevie lib/libXext xorg/lib/libXext lib/libXfixes xorg/lib/libXfixes lib/libXfont xorg/lib/libXfont lib/libXfontcache xorg/lib/libXfontcache lib/libXft xorg/lib/libXft lib/libXi xorg/lib/libXi lib/libXinerama xorg/lib/libXinerama lib/libxkbfile xorg/lib/libxkbfile lib/libxkbui xorg/lib/libxkbui lib/libXmu xorg/lib/libXmu lib/libXp xorg/lib/libXp lib/libXpm xorg/lib/libXpm lib/libXprintAppUtil xorg/lib/libXprintAppUtil lib/libXprintUtil xorg/lib/libXprintUtil lib/libXrandr xorg/lib/libXrandr lib/libXrender xorg/lib/libXrender lib/libXRes xorg/lib/libXRes lib/libXScrnSaver xorg/lib/libXScrnSaver lib/libXt xorg/lib/libXt lib/libxtrans xorg/lib/libxtrans lib/libXTrap xorg/lib/libXTrap lib/libXtst xorg/lib/libXtst lib/libXv xorg/lib/libXv lib/libXvMC xorg/lib/libXvMC lib/libXxf86dga xorg/lib/libXxf86dga lib/libXxf86misc xorg/lib/libXxf86misc lib/libXxf86rush xorg/lib/libXxf86rush lib/libXxf86vm xorg/lib/libXxf86vm proto/applewmproto xorg/proto/applewmproto proto/bigreqsproto xorg/proto/bigreqsproto proto/compositeproto xorg/proto/compositeproto proto/damageproto xorg/proto/damageproto proto/dmxproto xorg/proto/dmxproto proto/dri2proto xorg/proto/dri2proto proto/evieproto xorg/proto/evieproto proto/fixesproto xorg/proto/fixesproto proto/fontcacheproto xorg/proto/fontcacheproto proto/fontsproto xorg/proto/fontsproto proto/glproto xorg/proto/glproto proto/inputproto xorg/proto/inputproto proto/kbproto xorg/proto/kbproto proto/panoramixproto xorg/proto/panoramixproto proto/pmproto xorg/proto/pmproto proto/printproto xorg/proto/printproto proto/randrproto xorg/proto/randrproto proto/recordproto xorg/proto/recordproto proto/renderproto xorg/proto/renderproto proto/resourceproto xorg/proto/resourceproto proto/scrnsaverproto xorg/proto/scrnsaverproto proto/trapproto xorg/proto/trapproto proto/videoproto xorg/proto/videoproto proto/windowswmproto xorg/proto/windowswmproto proto/x11proto xorg/proto/x11proto proto/xcmiscproto xorg/proto/xcmiscproto proto/xextproto xorg/proto/xextproto proto/xf86bigfontproto xorg/proto/xf86bigfontproto proto/xf86dgaproto xorg/proto/xf86dgaproto proto/xf86driproto xorg/proto/xf86driproto proto/xf86miscproto xorg/proto/xf86miscproto proto/xf86rushproto xorg/proto/xf86rushproto proto/xf86vidmodeproto xorg/proto/xf86vidmodeproto proto/xineramaproto xorg/proto/xineramaproto util/cf xorg/util/cf util/gccmakedep xorg/util/gccmakedep util/imake xorg/util/imake util/install-check xorg/util/install-check util/lndir xorg/util/lndir util/macros xorg/util/macros util/makedepend xorg/util/makedepend util/modular xorg/util/modular util/xmkmf xorg/util/xmkmf data/bitmaps xorg/data/bitmaps data/cursors xorg/data/cursors doc/xorg-docs xorg/doc/xorg-docs doc/xorg-sgml-doctools xorg/doc/xorg-sgml-doctools app/compiz xorg/app/compiz xcb/pthread-stubs xcb/pthread-stubs xcb/proto xcb/proto xcb/libxcb xcb/libxcb xcb/xpyb xcb/xpyb app/xkeyboard-config xkeyboard-config app/xinput xorg/app/xinput app/xkbcomp xorg/app/xkbcomp app/xlsatoms xorg/app/xlsatoms app/xlsclients xorg/app/xlsclients app/xprop xorg/app/xprop app/xwininfo xorg/app/xwininfo lib/libpixman pixman lib/libdrm mesa/drm mesa mesa/mesa xserver xorg/xserver |; # END CONFIGURATION # Returns array of [directory, options] sub read_config { my ($basedir, $path, $section) = @_; open(FH, '<', $path) or die "do_common: Failed to open $path for reading: $!\n"; while () { chomp; last if $_ eq "[$section]"; } die "do_common: Section $section not found in file\n" if eof(FH); my @result; my @current; my $curdir; while() { chomp; next if /^\s*$/; next if /^\s*\#/; last if /^\[/; # Reached new directory group if (/^(\S+?):/) { for (@current) { $$_[0] =~ s///; push @result, [ "$curdir/$$_[0]", $$_[1] ]; } @current = (); $curdir = $1; chdir("$basedir/$curdir") or die "do_common: Failed to change directory to $basedir/$curdir: $!\n"; } # Minus operator removes from list elsif (/^\t-(.+)/) { my $glob = $1; foreach my $dir (glob($glob)) { # Already in list? for (@current) { if ($$_[0] eq $dir) { $$_[0] = ""; } } } } # Plus operator (with arguments) forces early position elsif (/^ \t \+ (.+?) \( (.*?) \) $/x) { my ($glob, $args) = ($1, $2); foreach my $dir (glob($glob)) { push @current, [ "$dir", $args ]; } } # Plus operator (without arguments) forces early position elsif (/^\t\+(.+)/) { my $glob = $1; foreach my $dir (glob($glob)) { push @current, [ "$dir", "" ]; } } # Regular (with arguments) elsif (/^ \t (.+?) \( (.*?) \) $/x) { my ($glob, $args) = ($1, $2); OUTER: foreach my $dir (glob($glob)) { # Already in list? for (@current) { if ($$_[0] eq $dir) { $$_[0] = ""; } if ($$_[0] eq "$dir") { next OUTER; } } push @current, [ $dir, $args ]; } } # Regular (without arguments) elsif (/^\t(.+)/) { my $glob = $1; OUTER: foreach my $dir (glob($glob)) { # Already in list? for (@current) { if ($$_[0] eq $dir) { $$_[0] = ""; } if ($$_[0] eq "$dir") { next OUTER; } } push @current, [ $dir, "" ]; } } else { die "do_common: Format error on line $.\n"; } } for (@current) { $$_[0] =~ s///; push @result, [ "$curdir/$$_[0]", $$_[1] ]; } close(FH); @result = grep($$_[0] !~ //, @result); return \@result; } 1;