]>
git.saurik.com Git - apt.git/blob - prepare-release
4 cd "$(readlink -f $(dirname $0))"
6 if [ -n "${GBP_BUILD_DIR}" ]; then
10 VERSION
=$(dpkg-parsechangelog | sed -n -e '/^Version:/s/^Version: //p')
11 DISTRIBUTION
=$(dpkg-parsechangelog | sed -n -e '/^Distribution:/s/^Distribution: //p')
13 LIBAPTPKGVERSION
="$(awk -v ORS='.' '/^\#define APT_PKG_M/ {print $3}' apt-pkg/contrib/macros.h | sed 's/\.$//')"
14 LIBAPTINSTVERSION
="$(grep '^MAJOR=' apt-inst/makefile |cut -d '=' -f 2)"
16 librarysymbolsfromfile
() {
17 local MISSING
="$(grep '^+#MISSING' "$1")"
19 echo '=== Missing optional symbols:'
20 echo -n "$MISSING" | grep '|optional=' || true
21 echo '=== Missing required symbols:'
22 echo -n "$MISSING" | grep -v '|optional=' || true
23 echo '=== New symbols:'
24 grep '^+ ' "$1" | cut
-d' ' -f 2 | cut
-d'@' -f 1 | c
++filt
| while read line
; do
25 echo " (c++)\"${line}@${SYMVER}\" $VERSION"
29 if [ "$1" = 'pre-export' ]; then
30 libraryversioncheck
() {
33 if [ ! -e "debian/${LIBRARY}${VERSION}.symbols" ]; then
34 echo >&2 "Library ${LIBRARY} in version ${VERSION} has no symbols file! (maybe forgot to rename?)"
37 if [ "$(head -n1 "debian/${LIBRARY}${VERSION}.symbols")" != "${LIBRARY}.so.${VERSION} ${LIBRARY}${VERSION} #MINVER#" ]; then
38 echo >&2 "Library ${LIBRARY}${VERSION} has incorrect version in symbol header! (»$(head -n1 "debian/${LIBRARY}${VERSION}.symbols")«)"
43 libraryversioncheck
'libapt-pkg' "$LIBAPTPKGVERSION"
44 libraryversioncheck
'libapt-inst' "$LIBAPTINSTVERSION"
47 if [ "$DISTRIBUTION" = 'sid' ]; then
48 echo >&2 '»sid« is not a valid distribution. Replace it with »unstable« for you'
49 sed -i -e 's/) sid; urgency=/) unstable; urgency=/' debian
/changelog
50 DISTRIBUTION
='unstable'
51 elif [ "$DISTRIBUTION" = 'UNRELEASED' ]; then
52 echo >&2 'WARNING: Remember to change to a valid distribution for release'
53 VERSION
="$VERSION~$(date +%Y%m%d)"
56 sed -i -e "s/^PACKAGE_VERSION=\".*\"$/PACKAGE_VERSION=\"${VERSION}\"/" configure.ac
57 sed -i -e "s/^<!ENTITY apt-product-version \".*\">$/<!ENTITY apt-product-version \"${VERSION}\">/" doc
/apt
-verbatim.ent
59 # update the last-modification field of manpages based on git changes
60 grep --files-with-matches '<date>' doc
/*.xml
| while read file; do \
61 LASTMOD
="$(date -d "@$
(git log
--format='%at' --max-count=1 --invert-grep --fixed-strings --grep 'review
63 Git-Dch: Ignore' "$file")" '+%Y-%m-%dT00:00:00Z')"
64 sed -i -e "s#^\([ ]\+\)<date>.*</date>\$#\1<date>$LASTMOD</date>#" "$file"
67 if [ "$(date +%Y-%m-%d)" != "$(grep --max-count=1 '^"POT-Creation-Date: .*\n"$' po/apt-all.pot | cut -d' ' -f 2)" -o \
68 "$(date +%Y-%m-%d)" != "$(grep --max-count=1 '^"POT-Creation-Date: .*\n"$' doc/po/apt-doc.pot | cut -d' ' -f 2)" ]; then
69 echo >&2 'POT files are not up-to-date. Execute »make update-po« for you…'
72 elif [ "$1" = 'post-build' ]; then
73 if [ "$DISTRIBUTION" != "UNRELEASED" ]; then
74 echo >&2 "REMEMBER: Tag this release with »git tag -s ${VERSION}« if you are satisfied"
76 echo >&2 'REMEMBER: Change to a valid distribution before release'
79 dpkg
-checkbuilddeps -d 'libxml2-utils'
81 HEADERBLUEPRINT
="$(mktemp)"
82 sed -n '1,/^$/p' doc
/apt
.8.xml
> "$HEADERBLUEPRINT"
83 find doc
-mindepth 1 -maxdepth 1 -type f
-name '*.xml' | while read FILE
; do
84 if ! sed -n '1,/^$/p' "$FILE" | cmp "$HEADERBLUEPRINT" - >/dev
/null
2>&1; then
85 echo >&2 "WARNING: Manpage $FILE has not the usual header! (see diff below)"
86 sed -n '1,/^$/p' "$FILE" | diff -u "$HEADERBLUEPRINT" - || true
89 sed -n '1,/^$/p' doc
/guide.dbk
> "$HEADERBLUEPRINT"
90 find doc
-mindepth 1 -maxdepth 1 -type f
-name '*.dbk' | while read FILE
; do
91 if ! sed -n '1,/^$/p' "$FILE" | cmp "$HEADERBLUEPRINT" - >/dev
/null
2>&1; then
92 echo >&2 "WARNING: Documentation $FILE has not the usual header (see diff below)!"
93 sed -n '1,/^$/p' "$FILE" | diff -u "$HEADERBLUEPRINT" - || true
98 # check the manpages with each vendor for vendor-specific errors…
99 find vendor
-mindepth 1 -maxdepth 1 -type d
| cut
-d'/' -f 2 | while read DISTRO
; do
100 ln -sf ..
/vendor
/${DISTRO}/apt
-vendor.ent doc
101 if ! xmllint
--nonet --valid --noout $(find doc/ -maxdepth 1 -name '*.xml'); then
102 echo >&2 "WARNING: original docbook manpages have errors with vendor ${DISTRO}!"
105 # lets assume we will always have a german manpage translation
106 if [ -e 'doc/de/' ]; then
107 # … but check the translations only with one vendor for translation-specific errors
108 if ! xmllint
--nonet --valid --noout $(find doc/ -mindepth 2 -maxdepth 2 -name '*.xml'); then
109 echo >&2 "WARNING: translated docbook manpages have errors!"
112 echo >&2 "ERROR: translated manpages need to be build before they can be checked!"
114 rm -f doc
/apt
-vendor.ent
116 elif [ "$1" = 'library' ]; then
118 echo "Checking $1 in version $2"
119 local tmpfile
=$(mktemp)
120 dpkg
-gensymbols -p${1}${2} -ebuild/bin
/${1}.so.
${2} -Idebian/${1}${2}.symbols
-O/dev
/null
2> /dev
/null
> $tmpfile || true
121 librarysymbolsfromfile
"$tmpfile" "$(echo "${1}" | cut -c 4- | tr -d '-' | tr 'a-z' 'A-Z')_${2}"
124 librarysymbols
'libapt-pkg' "${LIBAPTPKGVERSION}"
126 librarysymbols
'libapt-inst' "${LIBAPTINSTVERSION}"
127 elif [ "$1" = 'buildlog' ]; then
128 while [ -n "$2" ]; do
129 librarysymbolsfromfile
"$2" 'UNKNOWN'
132 elif [ "$1" = 'travis-ci' ]; then
133 apt
-get install -qy --no-install-recommends $(sed -n -e '/^Build-Depends: /,/^Build-Depends-Indep: / {p}' debian/control | sed -e 's#([^)]*)##g' -e 's#^Build-Depends\(-Indep\)\?: ##' | tr -d ',')
134 apt
-get install -qy --no-install-recommends $(sed -n 's#^Depends: .*@, \(.*\)$#\
1#p' debian/tests/control | tr -d ',')
135 elif [ "$1" = 'coverage' ]; then
136 DIR
="${2:-./coverage}"
137 git clean
-dfX # remove ignored build artefacts for a clean start
138 make CFLAGS
+='--coverage' CXXFLAGS
+='--coverage'
139 LCOVRC
='--rc geninfo_checksum=1 --rc lcov_branch_coverage=1'
141 lcov
--no-external --directory .
--capture --initial --output-file "${DIR}/apt.coverage.init" ${LCOVRC}
143 .
/test
/integration
/run
-tests -q || true
144 lcov
--no-external --directory .
--capture --output-file "${DIR}/apt.coverage.run" ${LCOVRC}
145 lcov
-a "${DIR}/apt.coverage.init" -a "${DIR}/apt.coverage.run" -o "${DIR}/apt.coverage.total" ${LCOVRC}
146 cp "${DIR}/apt.coverage.total" "${DIR}/apt.coverage.fixed"
150 name
="$(basename "$file")"
151 while [ -n "$1" ]; do
152 if [ -r "$1/$name" ]; then
153 sed -i "s#$file#$1/$name#" "${DIR}/apt.coverage.fixed"
159 echo >&2 "Coverage data captured for unknown file $file"
162 grep 'build/include/' "${DIR}/apt.coverage.fixed" | sed "s#^SF:$(pwd)/##" | while read file; do
163 rewritefile
"$file" 'apt-pkg' 'apt-pkg/deb' 'apt-pkg/edsp' 'apt-pkg/contrib' \
164 'apt-inst' 'apt-inst/deb' 'apt-inst/contrib' 'apt-private'
166 genhtml
--output-directory "${DIR}" "${DIR}/apt.coverage.fixed" ${LCOVRC}
168 echo >&1 "Usage:\t$0 pre-export
171 If you use »gbp buildpackage« you can leave these alone as they will
172 be run at the right places auto-magically. Otherwise you should use
173 »pre-export« to update po and pot files as well as version numbering.
174 »post-build« can be used to run some more or less useful checks later on.
177 \t$0 buildlog filename…
179 »library« and »buildlog« aren't run automatically but can be useful for
180 maintaining the (more or less experimental) symbols files we provide.
181 »library« displays the diff between advertised symbols and the once provided
182 by the libraries, while »buildlog« extracts this diff from the buildlogs.
183 Both will format the diff properly.
186 \t$0 coverage [output-dir]
188 »travis-ci« is a shortcut to install all build- as well as test-dependencies
190 »coverage« does a clean build with the right flags for coverage reporting,
191 runs all tests and generates a html report in the end.