[pacman-dev] [PATCH] Introduce new PKGBUILD variable `changelog`

Cedric Staniewski cedric at gmx.ca
Thu Oct 8 10:10:05 EDT 2009


Hi,

This patch adds a new PKGBUILD variable, changelog, which replaces the old, hardcoded ChangeLog file. The old behavior is completely removed, which means that existing ChangeLog files will be ignored if there is no appropriate line in the PKGBUILD. For a more detailed description, please see the patch below.

I hope I also caught all the necessary documentation updates.

Cedric


>From d8e1bb73705a665bc03f14f4eb3ec0d8b9e6d259 Mon Sep 17 00:00:00 2001
From: Cedric Staniewski <cedric at gmx.ca>
Date: Wed, 16 Sep 2009 14:38:18 +0200
Subject: [PATCH] Introduce new PKGBUILD variable `changelog`

Currently, a changelog is added to a package if a specific file with a
hardcoded name exists in the PKGBUILD's directory. This approach is not
pretty and also inconsistent with the handling of install files, but it
works.

With the introduction of split PKGBUILDs, however, a drawback in this
old behavior has arisen: you only have the possibility to include one
specific changelog file in either every package defined in the PKGBUILD
or in none.

The use of an additional variable, `changelog`, works around this issue
and makes it possible to include a changelog in only some of the
packages, and besides, each package of the PKGBUILD can have its own
changelog file.

Signed-off-by: Cedric Staniewski <cedric at gmx.ca>
---
 PKGBUILD-split.proto  |    2 ++
 PKGBUILD.proto        |    1 +
 contrib/PKGBUILD.vim  |    9 +++++++++
 doc/PKGBUILD.5.txt    |    8 +++++++-
 scripts/makepkg.sh.in |   23 ++++++++++++++++-------
 5 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/PKGBUILD-split.proto b/PKGBUILD-split.proto
index 08f98d6..11ceff2 100644
--- a/PKGBUILD-split.proto
+++ b/PKGBUILD-split.proto
@@ -21,6 +21,7 @@ replaces=()
 backup=()
 options=()
 install=
+changelog=
 source=($pkgbase-$pkgver.tar.gz)
 noextract=()
 md5sums=() #generate with 'makepkg -g'
@@ -44,6 +45,7 @@ package_pkg1() {
   backup=()
   options=()
   install=
+  changelog=
 
   cd "$srcdir/$pkgbase-$pkgver"
   make DESTDIR="$pkgdir/" install-pkg1
diff --git a/PKGBUILD.proto b/PKGBUILD.proto
index eddcf75..93da0fc 100644
--- a/PKGBUILD.proto
+++ b/PKGBUILD.proto
@@ -21,6 +21,7 @@ replaces=()
 backup=()
 options=()
 install=
+changelog=
 source=($pkgname-$pkgver.tar.gz)
 noextract=()
 md5sums=() #generate with 'makepkg -g'
diff --git a/contrib/PKGBUILD.vim b/contrib/PKGBUILD.vim
index 994eacc..af0f981 100644
--- a/contrib/PKGBUILD.vim
+++ b/contrib/PKGBUILD.vim
@@ -115,6 +115,12 @@ syn match pbValidInstall /\([[:alnum:]]\|\$\|+\|-\|_\)*\.install/ contained
 syn match pbIllegalInstall /[^=]/ contained contains=pbValidInstall
 syn match pbInstallGroup /^install=.*/ contains=pb_k_install,pbValidInstall,pbIllegalInstall,shDeref,shDoubleQuote,shSingleQuote
 
+" changelog
+syn keyword pb_k_changelog changelog contained
+syn match pbValidChangelog /\([[:alnum:]]\|\$\|+\|-\|_\)*/ contained
+syn match pbIllegalChangelog /[^=]/ contained contains=pbValidChangelog
+syn match pbChangelogGroup /^changelog=.*/ contains=pb_k_changelog,pbValidChangelog,pbIllegalChangelog,shDeref,shDoubleQuote,shSingleQuote
+
 " source:
 " XXX remove source from shStatement, fix strange bug
 syn clear shStatement
@@ -212,6 +218,9 @@ hi def link pb_k_provides pbKeywords
 hi def link pbIllegalInstall Error
 hi def link pb_k_install pbKeywords
 
+hi def link pbIllegalChangelog Error
+hi def link pb_k_changelog pbKeywords
+
 hi def link pb_k_source pbKeywords
 hi def link pbIllegalSource Error
 
diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
index e6f6edf..435a148 100644
--- a/doc/PKGBUILD.5.txt
+++ b/doc/PKGBUILD.5.txt
@@ -79,6 +79,12 @@ similar to `$_basekernver`.
 	be copied into the package by makepkg. It does not need to be included
 	in the source array (e.g. `install=pkgname.install`).
 
+*changelog*::
+	Specifies a changelog file which is supposed to be included in the package.
+	It is required that this file is placed into the same directory as the
+	PKGBUILD, and makepkg will copy it into the package. The file must not be
+	included in the source array (e.g. `changelog=$pkgname.changelog`).
+
 *source (array)*::
 	An array of source files required to build the package. Source files
 	must either reside in the same directory as the PKGBUILD file, or be a
@@ -271,7 +277,7 @@ All options and directives for the split packages default to the global values g
 within the PKGBUILD. However, some of these can be overridden within each split
 package's packaging function. The following variables can be overridden: `pkgdesc`,
 `license`, `groups`, `depends`, `optdepends`, `provides`, `conflicts`, `replaces`,
-`backup`, `options` and `install`.
+`backup`, `options`, `install` and `changelog`.
 
 An optional global directive is available when building a split package:
 
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 2941a5d..88487da 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -47,7 +47,7 @@ pkgdir="$startdir/pkg"
 packaging_options=('strip' 'docs' 'libtool' 'emptydirs' 'zipman' 'purge')
 other_options=('ccache' 'distcc' 'makeflags' 'force')
 splitpkg_overrides=('pkgdesc' 'license' 'groups' 'depends' 'optdepends' 'provides' \
-                    'conflicts' 'replaces' 'backup' 'options' 'install')
+                    'conflicts' 'replaces' 'backup' 'options' 'install' 'changelog')
 readonly -a packaging_options other_options splitpkg_overrides
 
 # Options
@@ -991,9 +991,9 @@ create_package() {
 	fi
 
 	# do we have a changelog?
-	if [ -f "$startdir/ChangeLog" ]; then
+	if [ -n "$changelog" ]; then
 		msg2 "$(gettext "Adding package changelog...")"
-		cp "$startdir/ChangeLog" .CHANGELOG
+		cp "$startdir/$changelog" .CHANGELOG
 		comp_files="$comp_files .CHANGELOG"
 	fi
 
@@ -1059,9 +1059,13 @@ create_srcpackage() {
 		fi
 	fi
 
-	if [ -f ChangeLog ]; then
-		msg2 "$(gettext "Adding %s...")" "ChangeLog"
-		ln -s "${startdir}/ChangeLog" "${srclinks}/${pkgbase}"
+	if [ -n "$changelog" ]; then
+		if [ -f "$changelog" ]; then
+			msg2 "$(gettext "Adding package changelog...")"
+			ln -s "${startdir}/$changelog" "${srclinks}/${pkgbase}/"
+		else
+			error "$(gettext "Changelog file %s not found.")" "$changelog"
+		fi
 	fi
 
 	local netfile
@@ -1193,6 +1197,11 @@ check_sanity() {
 		return 1
 	fi
 
+	if [ -n "$changelog" -a ! -f "$changelog" ]; then
+		error "$(gettext "Changelog file (%s) does not exist.")" "$changelog"
+		return 1
+	fi
+
 	local valid_options=1
 	local opt known kopt
 	for opt in ${options[@]}; do
@@ -1646,7 +1655,7 @@ if [ "$ASROOT" -eq 0 \
 fi
 
 unset pkgname pkgbase pkgver pkgrel pkgdesc url license groups provides
-unset md5sums replaces depends conflicts backup source install build
+unset md5sums replaces depends conflicts backup source install changelog build
 unset makedepends optdepends options noextract
 
 BUILDFILE=${BUILDFILE:-$BUILDSCRIPT}
-- 
1.6.4.4


More information about the pacman-dev mailing list