-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfigure
executable file
·108 lines (81 loc) · 1.89 KB
/
configure
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
#!/usr/bin/perl
use warnings;
use strict;
use Cwd;
use File::Basename;
use FindBin;
# Preset variables
our $top_builddir = getcwd;
our $top_srcdir = $FindBin::RealBin;
our $builddir = $top_builddir;
our $srcdir = $top_srcdir;
our $cfg_fname = "make.conf";
# Predeclared subroutines
sub process_dir($);
sub process_file($);
sub get_subdirs();
process_dir("");
my $reconfigureScript = <<"";
#!/bin/sh
$top_srcdir/configure
my $reconfigureBin = "$top_builddir/reconfigure";
`echo "$reconfigureScript" > $reconfigureBin && chmod +x $reconfigureBin`;
exit;
sub process_dir($) {
my $reldir = shift;
$builddir = $top_builddir;
$builddir .= "/" . $reldir if $reldir;
$srcdir = $top_srcdir;
$srcdir .= "/" . $reldir if $reldir;
if (! -d $builddir) {
mkdir $builddir || die "Error creating $builddir directory";
}
my @input_files = split(/\s+/, `ls ${srcdir}`);
for (@input_files) {
/(.+)\.in$/ or next;
process_file($1);
}
my @subdirs = get_subdirs();
foreach my $dir (@subdirs) {
my $subreldir = ($reldir) ? $reldir . "/" : "";
$subreldir .= $dir;
process_dir($subreldir);
}
}
sub process_file($) {
my $fname = shift;
my $infile = $srcdir . "/$fname.in";
open(IN, "< " . $infile) || die "Error opening $infile";
my $outfile = $builddir . "/$fname";
open(OUT, "> " . $outfile) || die "Error opening $outfile";
print OUT <<"EOF" if $fname eq "Makefile";
-include $top_srcdir/$cfg_fname
-include $top_builddir/$cfg_fname
EOF
my %vars = (
top_builddir => $top_builddir,
top_srcdir => $top_srcdir,
builddir => $builddir,
srcdir => $srcdir
);
while (<IN>) {
/\@(\w+)\@/ and do {
my $name = $1;
my $value = $vars{$name} || "";
s/\@${name}\@/${value}/eg;
};
print OUT;
}
close IN;
close OUT;
}
sub get_subdirs() {
my $Makefile = << 'EOF';
include Makefile
VAR:
@echo ${${VAR}}
EOF
my $cmd = "echo '$Makefile' | make -C $builddir -f - VAR=SUBDIRS VAR";
my $text = `$cmd`;
return split(/\s+/, $text);
}