On 09/04/13 09:46, Jason St. John wrote:
> From: "Jason St. John" <[email protected]>
> 
> Several grammatical errors and minor formatting consistency issues have been 
> resolved in
> PKGBUILD(5).
> 
> The pkgver() function is now fully documented in PKGBUILD(5), including
> several usage examples taken from ArchWiki. The "Using VCS Sources"
> section now states that CVS and Darcs are not natively supported in
> makepkg.
> 
> The example PKGBUILD for 'patch' was rather basic and lacked the
> prepare() and check() functions. The PKGBUILD was also rather dated
> compared to the current, official PKGBUILD. The new example PKGBUILD is
> a lot more complete and displays more features of makepkg.
> 
> Signed-off-by: Jason St. John <[email protected]>
> ---

I'm of the opinion we do not need most of this....  Details below.


>  doc/PKGBUILD-example.txt |  45 +++++++++----
>  doc/PKGBUILD.5.txt       | 163 
> ++++++++++++++++++++++++++++++++++-------------
>  2 files changed, 152 insertions(+), 56 deletions(-)
> 
> diff --git a/doc/PKGBUILD-example.txt b/doc/PKGBUILD-example.txt
> index 9ab5dff..8508b10 100644
> --- a/doc/PKGBUILD-example.txt
> +++ b/doc/PKGBUILD-example.txt
> @@ -1,24 +1,45 @@
>  # Maintainer: Joe User <[email protected]>
>  
>  pkgname=patch
> -pkgver=2.5.4
> -pkgrel=3
> -pkgdesc="A utility to apply patch files to original sources"
> +pkgver=2.7.1
> +pkgrel=2
> +pkgdesc='A utility to apply patch files to original sources'
>  arch=('i686' 'x86_64')
> -url="https://www.gnu.org/software/patch/patch.html";
> +url='https://www.gnu.org/software/patch/patch.html'
>  license=('GPL')
>  groups=('base-devel')
> -depends=('glibc' 'ed')
> -source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
> -md5sums=('ee5ae84d115f051d87fcaaef3b4ae782')
> +depends=('glibc')
> +makedepends=('ed')
> +optdepends=('ed: for patch -e functionality')
> +source=("ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz{,.sig}";
> +        'patch-2.7.1-initialize-data-structures-early-enough.patch')
> +md5sums=('e9ae5393426d3ad783a300a338c09b72'
> +         'b12189e0de3cb2af25268441647ec517'
> +         'dc6367a7cd49933d4006c246789e98da')
> +
> +prepare() {
> +     cd "${srcdir}/${pkgname}-${pkgver}"
> +
> +     # Fix segfault on non-numeric strip-count
> +     # (also segfaults on nonexistent directory passed to -d)
> +     # http://savannah.gnu.org/bugs/?37500
> +     patch -Np1 -i \
> +             
> "$srcdir/patch-2.7.1-initialize-data-structures-early-enough.patch"
> +}
>  
>  build() {
> -  cd "$srcdir"/$pkgname-$pkgver
> -  ./configure --prefix=/usr
> -  make
> +     cd "${srcdir}/${pkgname}-${pkgver}"
> +
> +     ./configure --prefix=/usr
> +     make
> +}
> +
> +check() {
> +     cd "${srcdir}/${pkgname}-${pkgver}"
> +     make check
>  }
>  
>  package() {
> -  cd "$srcdir"/$pkgname-$pkgver
> -  make prefix="$pkgdir"/usr install
> +     cd "${srcdir}/${pkgname}-${pkgver}"
> +     make DESTDIR="$pkgdir" install
>  }


This has gone from being a nice minimal example to something that is
very overboard...  We already refer the user to their distributions
PKGBUILDs or ABS to get more examples, so I think it should sta as
simple as possible.


> diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
> index ea280a0..f1d2998 100644
> --- a/doc/PKGBUILD.5.txt
> +++ b/doc/PKGBUILD.5.txt
> @@ -49,7 +49,7 @@ similar to `$_basekernver`.
>       The variable is not allowed to contain colons or hyphens.
>  +
>  The `pkgver` variable can be automatically updated by providing a `pkgver()` 
> function
> -in the PKGBUILD that outputs the new package version.  This is run after 
> downloading
> +in the PKGBUILD that outputs the new package version. This is run after 
> downloading
>  and extracting the sources so can use those files in determining the new 
> `pkgver`.
>  This is most useful when used with sources from version control systems (see 
> below).
>  

Sure - not shown in man page anyway...

> @@ -91,13 +91,13 @@ This is most useful when used with sources from version 
> control systems (see bel
>  
>  *install*::
>       Specifies a special install script that is to be included in the 
> package.
> -     This file should reside in the same directory as the PKGBUILD, and will
> +     This file should reside in the same directory as the PKGBUILD and will
>       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 that is to be included in the package.
> -     This file should reside in the same directory as the PKGBUILD, and will
> +     This file should reside in the same directory as the PKGBUILD and will
>       be copied into the package by makepkg. It does not need to be included
>       in the source array (e.g., `changelog=$pkgname.changelog`).
>  
> @@ -105,10 +105,9 @@ This is most useful when used with sources from version 
> control systems (see bel
>       An array of source files required to build the package. Source files
>       must either reside in the same directory as the PKGBUILD, or be a
>       fully-qualified URL that makepkg can use to download the file.
> -     To make the PKGBUILD as useful as possible, use the `$pkgname` and 
> `$pkgver`
> -     variables if possible when specifying the download location. Compressed 
> files
> -     will be extracted automatically unless found in
> -     the noextract array described below.
> +     To make maintaining the PKGBUILD easy, use the `$pkgname` and `$pkgver`

To simplify the maintenance of PKGBUILDs, use...

> +     variables when specifying the download location, if possible. 
> Compressed files
> +     will be extracted automatically unless found in the noextract array 
> described below.
>  +
>  It is also possible to change the name of the downloaded file, which is 
> helpful
>  with weird URLs and for handling multiple source files with the same
> @@ -123,7 +122,7 @@ makepkg as PGP signatures and will be automatically used 
> to verify the integrity
>  of the corresponding source file.
>  
>  *noextract (array)*::
> -     An array of filenames corresponding to those from the source array. 
> Files
> +     An array of file names corresponding to those from the source array. 
> Files
>       listed here will not be extracted with the rest of the source files. 
> This
>       is useful for packages that use compressed data directly.
>  
> @@ -152,9 +151,9 @@ of the corresponding source file.
>       files should use `arch=('any')`.
>  
>  *backup (array)*::
> -     An array of filenames, without preceding slashes, that
> +     An array of file names, without preceding slashes, that
>       should be backed up if the package is removed or upgraded. This is
> -     commonly used for packages placing configuration files in /etc. See
> +     commonly used for packages placing configuration files in '/etc'. See
>       Handling Config Files in linkman:pacman[8] for more information.
>  
>  *depends (array)*::
> @@ -289,13 +288,13 @@ Packaging Functions
>  -------------------
>  
>  In addition to the above directives, PKGBUILDs require a set of functions 
> that
> -provide instructions to build and install the package.  As a minimum, the 
> PKGBUILD
> -must contain a package() function which installs all the package's files 
> into the
> -packaging directory, with optional prepare(), build() and check() being used 
> to
> -create those files from source.
> +provide instructions to build and install the package. As a minimum, the 
> PKGBUILD
> +must contain a `package()` function which installs all the package's files 
> into
> +the packaging directory, with optional `prepare()`, `build()`, and `check()`

functions

> +being used to create those files from source.
>  
>  *package() Function*::
> -     The package() function is used to install files into the directory that
> +     The `package()` function is used to install files into the directory 
> that
>       will become the root directory of the built package and is run after all
>       the optional functions listed below. When specified in combination with
>       the fakeroot BUILDENV option in linkman:makepkg.conf[5], fakeroot usage
> @@ -303,41 +302,41 @@ create those files from source.
>       be run as the user calling makepkg.
>  
>  *prepare() Function*::
> -     An optional prepare() function can be specified in which operations that
> +     An optional `prepare()` function can be specified in which operations 
> that
>       are to be run in order to prepare the sources for building (such as
>       patching) are performed. This function is run after the source 
> extraction
> -     and before the build() function and is skipped when source extraction is
> +     and before the `build()` function and is skipped when source extraction 
> is
>       skipped.
>  
>  *build() Function*::
> -     The optional build() function is use to compile and/or adjust the source
> -     files in preparation to be installed by the package() function. This is
> +     The optional `build()` function is use to compile and/or adjust the 
> source
> +     files in preparation to be installed by the `package()` function. This 
> is
>       directly sourced and executed by makepkg, so anything that bash or the
>       system has available is available for use here. Be sure any exotic
> -     commands used are covered by `makedepends`.
> +     commands used are covered by the `makedepends` array.
>  +
>  If you create any variables of your own in the build function, it is
> -recommended to use the bash `local` keyword to scope the variable to inside
> -the build function.
> +recommended to use the Bash `local` keyword to scope the variable to inside
> +the `build()` function.
>  
>  *check() Function*::
> -     An optional check() function can be specified in which a package's
> -     test-suite may be run. This function is run between the build() and
> -     package() functions. Be sure any exotic commands used are covered by
> -     `checkdepends`.
> +     An optional `check()` function can be specified in which a package's
> +     test-suite may be run. This function is run between the `build()` and
> +     `package()` functions. Be sure any exotic commands used are covered by 
> the
> +     `checkdepends` array.
>  
> -All of the above variables such as `$pkgname` and `$pkgver` are available 
> for use
> -in the build function. In addition, makepkg defines the following variables 
> for use
> -during the build and install process:
> +All of the above variables such as `$pkgname` and `$pkgver` are available for
> +use in the build function. In addition, makepkg defines the following 
> variables
> +for during the build and install process:

for during -> for use during?

>  
>  *srcdir*::
> -       This contains the directory where makepkg extracts, or copies, all 
> source
> -       files.
> +     This contains the directory where makepkg extracts, or copies, all 
> source
> +     files.
>  
>  *pkgdir*::
> -       This contains the directory where makepkg bundles the installed 
> package
> -       (this directory will become the root directory of your built package).
> -       This variable should only be used in the package() function.
> +     This contains the directory where makepkg bundles the installed package
> +     (this directory will become the root directory of your built package).
> +     This variable should only be used in the `package()` function.
>  
>  *startdir*::
>       This contains the absolute path to the directory where the PKGBUILD is
> @@ -362,8 +361,8 @@ An optional global directive is available when building a 
> split package:
>  
>  *pkgbase*::
>       The name used to refer to the group of packages in the output of makepkg
> -     and in the naming of source-only tarballs.  If not specified, the first
> -     element in the `pkgname` array is used.  The variable is not allowed to
> +     and in the naming of source-only tarballs. If not specified, the first
> +     element in the `pkgname` array is used. The variable is not allowed to
>       begin with a hyphen.
>  
>  Install/Upgrade/Remove Scripting
> @@ -415,10 +414,12 @@ reference with all of the available functions defined.
>  
>  Using VCS Sources[[VCS]]
>  ------------------------
> -Building a developmental version of a package using sources from a version 
> control
> -system (VCS) is enabled by specifying the source in the form
> -`source=('folder::url#fragment')`. Currently makepkg supports the `bzr`, 
> `git`, `hg` and
> -`svn` protocols.
> +Building a developmental version of a package using sources from a version
> +control system (VCS) is enabled by specifying the source in the form
> +`source=('folder::url#fragment')`. Currently makepkg supports the `bzr`, 
> `git`,
> +`hg` and `svn` protocols. For `cvs` and `darcs`, the source array should be 
> left
> +empty and manual cloning of upstream repositories must be done in the
> +`prepare()` function.

For other version control system, manual cloning...
(arrays should not be left enpty)

Or people could submit patches...


>  
>  The source URL is divided into three components:
>  
> @@ -427,10 +428,11 @@ The source URL is divided into three components:
>       source into.
>  
>  *url*::
> -     The url to the VCS repo. This must include the the vcs in the URL 
> protocol for
> -     makepkg to recognize this as a VCS source.  If the protocol does not 
> include
> -     the VCS name, it can be added by prefixing the URL with `vcs+`. For 
> example,
> -     using a git repository over `http` would have a source URL in the form
> +     The URL to the VCS repository. This must include the VCS in the URL 
> protocol
> +     for makepkg to recognize this as a VCS source. If the protocol does not
> +     include the VCS name, it can be added by prefixing the URL with `vcs+`. 
> For
> +     example, using a git repository over `http` would have a source URL in 
> the
> +     form:
>       `git+http://...`.
>  
>  *fragment*::
> @@ -451,6 +453,79 @@ The source URL is divided into three components:
>       *svn*;;
>               revision
>  
> +The `pkgver()` function is used to automatically update the `pkgver` 
> variable in
> +VCS PKGBUILDs.

Already documented in the pkgver() section.

> +There are several recommended ways to use the `pkgver()` function. Examples 
> for
> +various numbering schemes are below for each VCS supported by makepkg.

I really do not think these are warranted in the man page.

> +*Git*::
> +     *Using the tag of the last commit*;;
> +             Example result: 4.1.0
> +
> +             pkgver() {
> +                     cd local_repo
> +                     git describe --always | sed 's|-|.|g'
> +             }
> +
> +     *Using the total count of commits and the tag of the last commit*;;
> +             Example result: 0.1142.2.0.6
> +
> +             pkgver() {
> +                     cd local_repo
> +                     echo "0.$(git rev-list --count HEAD).$(git describe 
> --always)"
> +             }
> +
> +     *Using the last commit date*;;
> +             Example result: 20130108
> +
> +             pkgver() {
> +                     cd local_repo
> +                     git log -1 --format="%cd" --date=short | tr -d '-'
> +             }
> +
> +     *Using the amount of seconds between the last commit and the Unix 
> epoch*;;
> +             Example result: 1358182650
> +
> +             pkgver() {
> +                     cd local_repo
> +                     git log -1 --format=%cd --date=raw | cut -d " " -f1
> +             }
> +
> +*Subversion*::
> +     Example result: 8546
> +
> +     pkgver() {
> +             cd "$SRCDEST"/local_repo
> +             svnversion | tr -d [A-z]
> +     }
> +
> +*Mercurial*::
> +     Example result: 2813.75881cc5391e
> +
> +     pkgver() {
> +             cd local_repo
> +             hg identify -ni | awk 'BEGIN{OFS=".";} {print $2,$1}'
> +     }
> +
> +*Bazaar*::
> +     Example result: 830
> +
> +     pkgver() {
> +             cd local_repo
> +             bzr revno
> +     }
> +
> +*Fallback*::
> +     If no acceptable version information can be extracted from the
> +     repository, use the current date.
> +     Example result: 20130408
> +
> +     pkgver() {
> +             date +%Y%m%d
> +     }
> +
> +
>  Example
>  -------
>  The following is an example PKGBUILD for the 'patch' package. For more
> 


Reply via email to