/*
* aegis - project change supervisor
* Copyright (C) 1997-2008 Peter Miller
* Copyright (C) 2006-2008 Walter Franzini
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
branch_version_normalized = [split "." [version_short]];
is_stable_branch =
[expr
[words [branch_version_normalized]] "==" 2
&&
[word 2 [branch_version_normalized] 1 1] % 2 "==" 0
];
branch_project_minus = [project_minus];
if [is_stable_branch] then
{
other_branch =
[unsplit "."
[word 1 [branch_version_normalized]]
[expr [word 2 [branch_version_normalized]] ^ 1]
];
integration-build-targets += archive/[other_branch]/index.html;
}
else
branch_project_minus = [project_short]-[version];
integration-build-targets +=
archive/change_log.txt
archive/[project_minus].README
archive/[branch_project_minus].ae
archive/[project_minus].faq
archive/[project_minus].lsm
archive/[project_minus].spec
html-targets
lib/en/release/release.txt
;
rpm-arch = noarch;
if [find_command tardy] then
{
/* Need gnu style tar to build the archive - so try different names */
if [find_command gnutar] then
tar-cmd = gnutar;
else if [find_command gtar] then
tar-cmd = gtar;
else
tar-cmd = tar;
integration-build-targets +=
archive/[branch_project_minus].tar.gz
;
/*
* PMiller's build machine is Debian, not RedHat any more.
*/
#if 0
if [find_command rpm] then
{
rpm-arch = [collect rpm --showrc | [awk] "'/^build arch/{print $4}'" ];
if [matches %1.D%2 [version]] then
if [in [fromto %1.D%2 %2 [version]] 001 002] then
if [matches linux%1 [arch]] then
integration-build-targets += RPM;
}
#endif
}
if [find_command png2ico] then
if [find_command convert] then
integration-build-targets += archive/favicon.ico;
archive/favicon.ico: archive/aegis2.png
{
convert [resolve archive/aegis2.png] -scale 16 -gamma 2
temp16.png;
convert [resolve archive/aegis2.png] -scale 32 -gamma 2
temp32.png;
png2ico [target] temp16.png temp32.png;
rm temp16.png temp32.png;
}
html-targets: [html-targets];
html-sources = [match_mask web/%0%.html [source_files]];
html-targets =
[fromto web/%0%.html archive/%0%.html [html-sources]]
archive/[project_short].png
[fromto web/%0%.uue archive/%0%
[match_mask web/%0%.uue [source_files]]
]
archive/missiku/index.html
archive/eg_oss_begin.ae
archive/eg_oss_build.ae
archive/eg_oss_templ.ae
archive/eg_oss_aemak.ae
;
/*
The "convert" command is part of the ImageMagick package.
*/
if [find_command convert] then
{
html-targets +=
[fromto web/missiku/%.png.uue archive/missiku/%_2.png
[match_mask web/missiku/%.png.uue [source_files]]
]
;
}
if [count [html-sources]] then
cascade [html-sources] = web/version.so;
web/version.so: etc/version.so
{
cp [resolve [need]] [target];
}
web/%0%.html.d: web/%0%.html
set no-cascade
{
c_incl -nc -ns -eia -r -nrec
[prepost "-I" /[arch]/web [search_list]]
[prepost "-I" "/web" [search_list]]
-prefix "'cascade web/%0%.html ='"
-suffix "';'"
[resolve web/%0%.html]
[prepost "-rlp=" "" [search_list]] /* remove leading path */
-slp [arch] "'[arch]'" /* substitute leading path */
-o [target];
}
#include-cooked-nowarn [addsuffix ".d" [match_mask web/%0%.html [source_files]]]
archive/%0%.html: web/%0%.html: etc/ssp.awk
set shallow
{
roffpp
[prepost "-I" /[arch]/web [search_list]]
[prepost "-I" "/web" [search_list]]
[resolve web/%0%.html]
| GROFF_NO_SGR\=-c groff -Tascii -t -P-bhu -man
| [awk] -f [resolve etc/ssp.awk]
> [target];
}
archive/%.txt: etc/%.man
{
roffpp
[prepost "-I" /[arch]/etc [search_list]]
[prepost "-I" "/etc" [search_list]]
[prepost "-I" "/lib/en/readme" [search_list]]
[resolve etc/%.man]
| GROFF_NO_SGR\=-c groff -Tascii -t -P-bhu -man
| [awk] -f [resolve etc/ssp.awk]
> [target];
}
archive/[project_minus].ug.ps.gz: lib/en/user-guide/user-guide.ps.gz
set shallow
{
cp [resolve [need]] [target];
}
archive/[project_minus].rm.ps.gz: lib/en/refman/refman.ps.gz
set shallow
{
cp [resolve [need]] [target];
}
archive/[project_minus].faq: lib/en/faq/faq.txt
set shallow
{
cp [resolve [need]] [target];
}
archive/[project_minus].lsm: lib/en/lsm/lsm.txt
set shallow
{
cp [resolve [need]] [target];
}
archive/[project_minus].README: lib/en/readme/readme.txt
set shallow
{
cp [resolve [need]] [target];
}
source_file_order =
README
[project_short].spec /* so RPM can build without separate spec file */
[project_short].png
[sort
[stringset
[source_files]
install-sh
config.guess
config.sub
Makefile.in
BUILDING
LICENSE
README
etc/version.so
common/config.h.in
common/patchlevel.h
configure
/* etc/CHANGES */
[fromto
lib/%1/faq/main.%2 lib/%1/faq/toc.so
[match_mask lib/%1/faq/main.%2 [source_files]]
]
[fromto
lib/%/refman/main.%2 lib/%/refman/index.so
[match_mask lib/%/refman/main.%2 [source_files]]
]
[fromto
lib/%/refman/main.%2 lib/%/refman/parts.so
[match_mask lib/%/refman/main.%2 [source_files]]
]
[fromto
lib/icon/%.uue lib/icon/%
[match_mask lib/icon/%.uue [source_files]]
]
-
README
]
]
;
/*
* For the primary build, when making a release,
* add the full changes list.
*/
if [matches %1.D%2 [version]] then
if [in [fromto %1.D%2 %2 [version]] 001 002] then
if [matches linux%1 [arch]] then
source_file_order += etc/CHANGES.txt;
etc/CHANGES.txt: [arch]/bin/aegis
{
[resolve [arch]/bin/aegis] -list project_details -p [project_short]
-pw\=80 -pl\=66 -v > [target]
set meter;
}
if [find_command msgcat] then
{
source_file_order +=
/*
* This next file is for the benefit of the Translation Project
* robot. (Yes, that's right, a bloody robot.)
*
* See http://www.iro.umontreal.ca/contrib/po/HTML/maintainers.html
* for more information.
*
* I particularly dislike this approach, because it is incredibly
* short sighted. This approach fails to take into account that
* you may want to have translations of manual pages and other
* documentation, AS WELL AS translations of error messages.
*
* Would it make sense to ask authors to catenate all of
* ther man pages together, and have a po/PACKAGE.man file?
* No, of course not. Would it make sense to ask authors to
* catenate all of their other documentation together, and
* have a po/PACKAGE.latex file? No, of course not. Well then,
* why on Earth does it make sense to catenate together all of
* the messages into a po/PACKAGE.pot file? Betch.
*
* And then, to add insult to injury, it wastes space in the tarball.
*
* My project uses a directory tree
* lib/
* /
* LC_MESSAGES/
* all of the various .po files go here
* man/
* all of the man pages go here
* user-guide/
* all of the files which make the
* user guide go here.
* /
* and so on...
*
* As you can see, this can accomodate translated .po files,
* AND ALSO any other documentation, once it is translated.
*/
po/[project_short].pot
[prepost "po/"[project_short]"." ".po" [langs]]
/* see etc/i18n.cook for definition of "langs" variable */
;
}
archive/%.tar.gz: [source_file_order]
set shallow
{
if [exists archive/%.tar] then
rm archive/%.tar
set clearstat;
[tar-cmd] --create --file - --dereference [resolve [source_file_order]]
| tardy -unu 0 -gnu 0 -una Peter -gna Miller
-p % -ms 0644 -mc 07022 -now
[prepost "-rp=" "" [search_list]]
> archive/%.tar;
gzip -9 -v archive/%.tar;
}
patch_files = [fromto %0% %0%,P [source_files] etc/CHANGES.[version_short]];
patch_files = [vs_file],P [stringset [patch_files] - [vs_file],P];
archive/[project_minus].patch.gz: [patch_files]
set shallow
{
if [exists archive/[project_short].patch] then
rm archive/[project_short].patch
set clearstat;
sh [resolve etc/patches.sh] [resolve [patch_files]]
> archive/[project_short].patch;
gzip -9 -v archive/[project_short].patch;
}
[project_short].spec: etc/spec.sh [source_files]
{
version\=[version_short]
sh [resolve etc/spec.sh] [source_files] > [target];
}
archive/[project_minus].spec: [project_short].spec
set shallow
{
cp [resolve [need]] [target];
}
[vs_file],P: [vs_file]
{
echo "Index:" [vs_file] > [target];
prev =
[collect
aegis -list version -p [project] -c [change]
| [awk] -F"'\"'" "'/previous/{print $2}'"
];
echo "'Prereq: \""[prev]"\"'" >> [target];
echo "'#define PATCHLEVEL \""[prev]"\"'" |
diff -c - [vs_file] | sed '1,2d' >> [target];
}
%0%,P: %0%
if [exists [resolve %0%]]
{
aegis -cp %0% -delta 1 -output patch.orig -p [project] -c [change]
|| cp /dev/null patch.orig;
sh [resolve etc/patch.fil.sh] patch.orig [resolve %0%] %0% > [target];
rm patch.orig;
}
lib/%0%: lib/%0%.uue: [arch]/bin/test_base64
{
[resolve [arch]/bin/test_base64] -uu -i -nh
[resolve lib/%0%.uue] [target];
}
archive/[project_short].png: lib/icon2/64x64.png
set shallow
{
cp [resolve [need]] [target];
}
[project_short].png: archive/[project_short].png
{
cp [resolve [need]] [target];
}
/*
* This is not in the integration-build-targets because it takes far
* too long to do.
*/
RPM: archive/[project_minus]-1.[rpm-arch].rpm;
archive/[project_minus]-1.[rpm-arch].rpm archive/[project_minus]-1.src.rpm:
archive/[project_minus].tar.gz
etc/rpm-build.sh
set shallow
{
/*
* The book says that the icon files need to be in the SOURCES
* directory. Actually, they need to be in the same directory
* as the tarball.
*
* The icon must be GIF or XPM.
*/
sh [resolve etc/rpm-build.sh]
RPM-temporary
[resolve archive/[project_minus].tar.gz]
;
mv RPM-temporary/RPMS/[rpm-arch]/[project_minus]-1.[rpm-arch].rpm
archive/[project_minus]-1.[rpm-arch].rpm
;
mv RPM-temporary/SRPMS/[project_minus]-1.src.rpm
archive/[project_minus]-1.src.rpm
;
rm -r RPM-temporary;
}
LICENSE: lib/en/cat1/aelic.1
{
cat [resolve [need]] > [target];
}
archive/[branch_project_minus].ae: [source_files] [arch]/bin/aedist
{
[arch]/bin/aedist --send --entire-source -ndh
--comp-alg\=gzip
-p\=[project] -c\=[change]
-o [target] -naa;
}
/* ---------------------------------------------------------------------- */
example-cook-aesvt-version = 1.0;
example-cook-aesvt-baseline =
[collect aegis -cd -bl -p example-cook-aesvt.[example-cook-aesvt-version]
'2>/dev/null' || true];
if [example-cook-aesvt-baseline] then
{
html-targets +=
archive/example-cook-aesvt.html
archive/example-cook-aesvt.ae
;
archive/example-cook-aesvt.html: [example-cook-aesvt-baseline]/README.html
set shallow
{
cp [need] [target];
}
archive/example-cook-aesvt.ae:
[example-cook-aesvt-baseline
]/example-cook-aesvt.[example-cook-aesvt-version].ae
set shallow
{
cp [need] [target];
}
}
/* ---------------------------------------------------------------------- */
example-cook-fhist-version = 1.0;
example-cook-fhist-baseline =
[collect aegis -cd -bl -p example-cook-fhist.[example-cook-fhist-version]
'2>/dev/null' || true];
if [example-cook-fhist-baseline] then
{
html-targets +=
archive/example-cook-fhist.html
archive/example-cook-fhist.ae
;
archive/example-cook-fhist.html: [example-cook-fhist-baseline]/README.html
set shallow
{
cp [need] [target];
}
archive/example-cook-fhist.ae:
[example-cook-fhist-baseline
]/example-cook-fhist.[example-cook-fhist-version].ae
set shallow
{
cp [need] [target];
}
}
/* ---------------------------------------------------------------------- */
example-make-rcs-version = 1.0;
example-make-rcs-baseline =
[collect aegis -cd -bl -p example-make-rcs.[example-make-rcs-version]
'2>/dev/null' || true];
if [example-make-rcs-baseline] then
{
html-targets +=
archive/example-make-rcs.html
archive/example-make-rcs.ae
;
archive/example-make-rcs.html: [example-make-rcs-baseline]/README.html
set shallow
{
cp [need] [target];
}
archive/example-make-rcs.ae:
[example-make-rcs-baseline
]/example-make-rcs.[example-make-rcs-version].ae
set shallow
{
cp [need] [target];
}
}
/* ---------------------------------------------------------------------- */
example-c-plus-plus-version = 1.0;
example-c-plus-plus-baseline =
[collect aegis -cd -bl -p example-c-plus-plus.[example-c-plus-plus-version]
'2>/dev/null' || true];
if [example-c-plus-plus-baseline] then
{
html-targets +=
archive/example-c-plus-plus.html
archive/example-c-plus-plus.ae
;
archive/example-c-plus-plus.html: [example-c-plus-plus-baseline]/README.html
set shallow
{
cp [need] [target];
}
archive/example-c-plus-plus.ae:
[example-c-plus-plus-baseline
]/example-c-plus-plus.[example-c-plus-plus-version].ae
set shallow
{
cp [need] [target];
}
}
/* ---------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
example-c-plus-plus-version = 1.0;
example-c-plus-plus-baseline =
[collect aegis -cd -bl -p example-c-plus-plus.[example-c-plus-plus-version]
'2>/dev/null' || true];
if [example-c-plus-plus-baseline] then
{
html-targets +=
archive/example-c-plus-plus.html
archive/example-c-plus-plus.ae
;
archive/example-c-plus-plus.html: [example-c-plus-plus-baseline]/README.html
set shallow
{
cp [need] [target];
}
archive/example-c-plus-plus.ae:
[example-c-plus-plus-baseline
]/example-c-plus-plus.[example-c-plus-plus-version].ae
set shallow
{
cp [need] [target];
}
}
/* ---------------------------------------------------------------------- */
archive/change_log.txt: lib/en/change_log/change_log.txt
set shallow
{
cp [resolve [need]] [target];
}
check-tarball: [project_short]-sf.tgz;
[project_short]-sf.tgz: archive/[project_minus].tar.gz
{
sh [resolve etc/check-tar-gz.sh]
[pathname [resolve archive/[project_minus].tar.gz]]
[pathname [target]];
}
archive/%0%.png: web/%0%.png.uue: [arch]/bin/test_base64
set shallow
{
[arch]/bin/test_base64 -uu -i -nh [resolve web/%0%.png.uue] [target];
}
archive/missiku/%_2.png: archive/missiku/%.png
set shallow
{
convert -scale 64 [resolve archive/missiku/%.png] %.tmp.png;
pngcrush -q
'-text b "Author" "Gregory Delattre "'
'-text b "Copyright" "(C) 2005 Gregory Delattre"'
'-text b "HomePage" "http://zone72.free.fr/"'
-brute
%.tmp.png [target];
rm %.tmp.png
set silent;
}
archive/missiku/index.html: web/missiku/index.sh
[match_mask web/missiku/%.png.uue [source_files]]
set shallow
{
sh [resolve web/missiku/index.sh]
[sort
[fromto %0%.png.uue %.png
[match_mask web/missiku/%.png.uue [source_files]]
]
]
> [target];
}
archive/eg_oss_%.ae: web/eg_oss_%.sh
[arch]/bin/aegis
[arch]/bin/aedist
lib/config.example/gnu_diff
lib/config.example/aesvt
lib/config.example/merge
{
sh [resolve web/eg_oss_%.sh]
[arch]
aegis.conf.d/diff\=[resolve lib/config.example/gnu_diff]
aegis.conf.d/history\=[resolve lib/config.example/aesvt]
aegis.conf.d/merge\=[resolve lib/config.example/merge]
output\=[target]
;
}
if [is_stable_branch] then
{
other_branch_baseline = [collect aegis -cd -br [other_branch] -bl];
/*
* The development branch index file is changed every delta, because
* the delta number is in the page title.
*/
archive/[other_branch]/index.html:
[other_branch_baseline]/archive/index.html
{
rsync -a [other_branch_baseline]/archive/ archive/[other_branch]/
set meter;
}
}