summaryrefslogtreecommitdiffstats
path: root/Construct
blob: bf77bb75592906cb7f62c48b3f9562e719b7ce34 (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
#
# Construct file to build scons during development.
# (Kind of ironic that we're using the classic Perl Cons
# to build its Python child...)
#
$project = 'scons';

$env = new cons( ENV => {
			  AEGIS_PROJECT => $ENV{AEGIS_PROJECT},
			  PATH => $ENV{PATH},
			} );

Default qw( . );

#
# Grab the information that we "build" into the files (using sed).
#
chomp($date = $ARG{date} || `date '+%Y/%m/%d %H:%M:%S'`);

$developer = $ARG{developer} || '???';

chomp($revision = $ARG{version} || `aesub '\$version' 2>/dev/null` || '0.01');

@arr = split(/\./, $revision);
@arr = ($arr[0], map {length($_) == 1 ? "0$_" : $_} @arr[1 .. $#arr]);
$revision = join('.', @arr);
pop @arr if $#arr >= 2;
map {s/^[CD]//, s/^0*(\d\d)$/$1/} @arr;
$version = join('.', @arr);

#
# We use %(-%) around the date so date changes don't cause rebuilds.
#
$sed_cmd = "sed" .
       " %( -e 's+__DATE__+$date+' %)" .
       " -e 's+__DEVELOPER__+$developer+'" .
       " -e 's+__REVISION__+$revision+'" .
       " -e 's+__VERSION__+$version+'" .
       " %< > %>";

#
# Run everything in the MANIFEST through the sed command we concocted.
#
chomp(@files = `cat src/MANIFEST`);

foreach $file (@files) {
    Command $env "build/$file", "src/$file", $sed_cmd;
}

#
# Use the Python distutils to generate the packages.
#
$tar_gz = "build/dist/$project-$version.tar.gz";

@targets = (
    "build/build/bdist.linux-i686/rpm/SOURCES/$project-$version.tar.gz",
    "build/build/bdist.linux-i686/rpm/SPECS/$project.spec",
    $tar_gz,
    "build/dist/$project-$version-1.src.rpm",
    "build/dist/$project-$version.linux-i686.tar.gz",
    "build/dist/$project-$version-1.noarch.rpm",
);

@build_files = map("build/$_", @files);

Command $env [@targets], @build_files, qq(
    rm -rf build/build build/dist/*
    cd build && python setup.py bdist bdist_rpm
);

Depends $env [@targets], 'build/MANIFEST';

#
# Unpack the .tar.gz created by the distutils into build/test, and
# add the TestCmd.py module.  The runtest.py script will set PYTHONPATH
# so that the tests only look under build/test.  This makes sure that
# our tests pass with what we really packaged, not because of something
# hanging around in the development directory.
#
$test_dir = "build/test";

Command $env "$test_dir/$project-$version/$project/__init__.py", $tar_gz, qq(
    rm -rf $test_dir/$project-$version
    tar zxf %< -C $test_dir
);

Install $env $test_dir, "TestCmd.py";

#
# If we're running in the actual Aegis project, pack up a complete
# source .tar.gz from the project files and files in the change,
# so we can share it with helpful developers who don't use Aegis.
#
eval '@src_files = grep($_ !~ /\.(aeignore|consign)$/ && ! $seen{$_}++,
		    `aegis -list -terse pf 2>/dev/null`,
		    `aegis -list -terse cf 2>/dev/null`)';
if (@src_files) {
    chomp(@src_files);

    foreach $file (@src_files) {
	Command $env "build/$project-src/$file", $file, $sed_cmd;
    }

    Command $env "build/dist/$project-src-$version.tar.gz",
    		$tar_gz,
		map("build/$project-src/$_", @src_files), qq(
	rm -rf build/$project-src-$version
	cp -r build/$project-src build/$project-src-$version
	find build/$project-src-$version -name .consign -exec rm {} \\;
	cd build && tar zcf dist/%>:f $project-src-$version
    );
}