summaryrefslogtreecommitdiff
path: root/do_common.pm
blob: b02bfc02d2d9bb414f1f8d1cbdfb9e2c1cc6970a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
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
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 (<FH>) {
	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(<FH>) {
	chomp;
	next if /^\s*$/;
	next if /^\s*\#/;

	last if /^\[/;

	# Reached new directory group
	if (/^(\S+?):/) {
	    for (@current) {
		$$_[0] =~ s/<NOSKIP>//;
		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] = "<SKIP>";
		    }
		}
	    }
	}
	
	# Plus operator (with arguments) forces early position
	elsif (/^ \t  \+  (.+?)         \(     (.*?)        \) $/x) {
	    my ($glob, $args) = ($1, $2);
	    
	    foreach my $dir (glob($glob)) {
		push @current, [ "<NOSKIP>$dir", $args ];
	    }
	}

	# Plus operator (without arguments) forces early position
	elsif (/^\t\+(.+)/) {
	    my $glob = $1;

	    foreach my $dir (glob($glob)) {
		push @current, [ "<NOSKIP>$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] = "<SKIP>";
		    }
		    if ($$_[0] eq "<NOSKIP>$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] = "<SKIP>";
		    }
		    if ($$_[0] eq "<NOSKIP>$dir") {
			next OUTER;
		    }
		}
		push @current, [ $dir, "" ];
	    }
	}
	
	else {
	    die "do_common: Format error on line $.\n";
	}
    }
    for (@current) {
	$$_[0] =~ s/<NOSKIP>//;
	push @result, [ "$curdir/$$_[0]", $$_[1] ];
    }
	
    close(FH);
    @result = grep($$_[0] !~ /<SKIP>/, @result);
    return \@result;
}

1;