]>
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 if [ "$(date +%Y-%m-%d)" != "$(grep --max-count=1 '^"POT-Creation-Date: .*\n"$' po/apt-all.pot | cut -d' ' -f 2)" -o \
60 "$(date +%Y-%m-%d)" != "$(grep --max-count=1 '^"POT-Creation-Date: .*\n"$' doc/po/apt-doc.pot | cut -d' ' -f 2)" ]; then
61 echo >&2 'POT files are not up-to-date. Execute »make update-po« for you…'
64 elif [ "$1" = 'post-build' ]; then
65 if [ "$DISTRIBUTION" != "UNRELEASED" ]; then
66 echo >&2 "REMEMBER: Tag this release with »git tag ${VERSION}« if you are satisfied"
68 echo >&2 'REMEMBER: Change to a valid distribution before release'
71 dpkg
-checkbuilddeps -d 'libxml2-utils'
73 HEADERBLUEPRINT
="$(mktemp)"
74 sed -n '1,/^$/p' doc
/apt
.8.xml
> "$HEADERBLUEPRINT"
75 find doc
-mindepth 1 -maxdepth 1 -type f
-name '*.xml' | while read FILE
; do
76 if ! sed -n '1,/^$/p' "$FILE" | cmp "$HEADERBLUEPRINT" - >/dev
/null
2>&1; then
77 echo >&2 "WARNING: Manpage $FILE has not the usual header! (see diff below)"
78 sed -n '1,/^$/p' "$FILE" | diff -u "$HEADERBLUEPRINT" - || true
81 sed -n '1,/^$/p' doc
/guide.dbk
> "$HEADERBLUEPRINT"
82 find doc
-mindepth 1 -maxdepth 1 -type f
-name '*.dbk' | while read FILE
; do
83 if ! sed -n '1,/^$/p' "$FILE" | cmp "$HEADERBLUEPRINT" - >/dev
/null
2>&1; then
84 echo >&2 "WARNING: Documentation $FILE has not the usual header (see diff below)!"
85 sed -n '1,/^$/p' "$FILE" | diff -u "$HEADERBLUEPRINT" - || true
90 # check the manpages with each vendor for vendor-specific errors…
91 find vendor
-mindepth 1 -maxdepth 1 -type d
| cut
-d'/' -f 2 | while read DISTRO
; do
92 ln -sf ..
/vendor
/${DISTRO}/apt
-vendor.ent doc
93 if ! xmllint
--nonet --valid --noout $(find doc/ -maxdepth 1 -name '*.xml'); then
94 echo >&2 "WARNING: original docbook manpages have errors with vendor ${DISTRO}!"
97 # lets assume we will always have a german manpage translation
98 if [ -e 'doc/de/' ]; then
99 # … but check the translations only with one vendor for translation-specific errors
100 if ! xmllint
--nonet --valid --noout $(find doc/ -mindepth 2 -maxdepth 2 -name '*.xml'); then
101 echo >&2 "WARNING: translated docbook manpages have errors!"
104 echo >&2 "ERROR: translated manpages need to be build before they can be checked!"
106 rm -f doc
/apt
-vendor.ent
108 elif [ "$1" = 'library' ]; then
110 echo "Checking $1 in version $2"
111 local tmpfile
=$(mktemp)
112 dpkg
-gensymbols -p${1}${2} -ebuild/bin
/${1}.so.
${2} -Idebian/${1}${2}.symbols
-O/dev
/null
2> /dev
/null
> $tmpfile || true
113 librarysymbolsfromfile
"$tmpfile" "$(echo "${1}" | cut -c 4- | tr -d '-' | tr 'a-z' 'A-Z')_${2}"
116 librarysymbols
'libapt-pkg' "${LIBAPTPKGVERSION}"
118 librarysymbols
'libapt-inst' "${LIBAPTINSTVERSION}"
119 elif [ "$1" = 'buildlog' ]; then
120 while [ -n "$2" ]; do
121 librarysymbolsfromfile
"$2" 'UNKNOWN'
124 elif [ "$1" = 'travis-ci' ]; then
125 apt
-get install -q --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 ',')
126 apt
-get install -q --no-install-recommends $(sed -n 's#^Depends: .*@, \(.*\)$#\
1#p' debian/tests/control | tr -d ',')
127 elif [ "$1" = 'coverage' ]; then
128 DIR
="${2:-./coverage}"
129 git clean
-dfX # remove ignored build artefacts for a clean start
130 make CFLAGS
+='--coverage' CXXFLAGS
+='--coverage'
131 LCOVRC
='--rc geninfo_checksum=1 --rc lcov_branch_coverage=1'
133 lcov
--no-external --directory .
--capture --initial --output-file "${DIR}/apt.coverage.init" ${LCOVRC}
135 .
/test
/integration
/run
-tests -q || true
136 lcov
--no-external --directory .
--capture --output-file "${DIR}/apt.coverage.run" ${LCOVRC}
137 lcov
-a "${DIR}/apt.coverage.init" -a "${DIR}/apt.coverage.run" -o "${DIR}/apt.coverage.total" ${LCOVRC}
138 cp "${DIR}/apt.coverage.total" "${DIR}/apt.coverage.fixed"
142 name
="$(basename "$file")"
143 while [ -n "$1" ]; do
144 if [ -r "$1/$name" ]; then
145 sed -i "s#$file#$1/$name#" "${DIR}/apt.coverage.fixed"
151 echo >&2 "Coverage data captured for unknown file $file"
154 grep 'build/include/' "${DIR}/apt.coverage.fixed" | sed "s#^SF:$(pwd)/##" | while read file; do
155 rewritefile
"$file" 'apt-pkg' 'apt-pkg/deb' 'apt-pkg/edsp' 'apt-pkg/contrib' \
156 'apt-inst' 'apt-inst/deb' 'apt-inst/contrib' 'apt-private'
158 genhtml
--output-directory "${DIR}" "${DIR}/apt.coverage.fixed" ${LCOVRC}
160 echo >&1 "Usage:\t$0 pre-export
163 If you use »git buildpackage« you can leave these alone as they will
164 be run at the right places auto-magically. Otherwise you should use
165 »pre-export« to update po and pot files as well as version numbering.
166 »post-build« can be used to run some more or less useful checks later on.
169 \t$0 buildlog filename…
171 »library« and »buildlog« aren't run automatically but can be useful for
172 maintaining the (more or less experimental) symbols files we provide.
173 »library« displays the diff between advertised symbols and the once provided
174 by the libraries, while »buildlog« extracts this diff from the buildlogs.
175 Both will format the diff properly.
178 \t$0 coverage [output-dir]
180 »travis-ci« is a shortcut to install all build- as well as test-dependencies
182 »coverage« does a clean build with the right flags for coverage reporting,
183 runs all tests and generates a html report in the end.