Skip to content
This repository has been archived by the owner on Jun 16, 2019. It is now read-only.

fasheng/pkgbuildup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PKGBUILDUP

NAME

pkgbuildup - a helper tool for AUR package maintainer to automatic update PKGBUILD files

SYNOPSIS

pkgbuildup [ -p <file> ] [ -l <file> ] [ -h ] [ -v ]

OPTIONS

-p <file>
Use an alternate update script (instead of ‘PKGBUILDUP’)
-l, –listvar <file>
List variables in a template file
-h, –help
Prints help message
-v, –version
Prints version information

DESCRIPTION

pkgbuildup use two types of files named PKGBUILD.tpl and PKGBUILDUP to help AUR package maintainer to automatic update PKGBUILD files.

PKGBUILD.tpl is a template file used to generate new PKGBUILD, it support simple template variable syntax which format looks like {% var %}, the variable name is composed by english letters(a-z, A-Z), underline(_) and numbers(0-9).

PKGBUILDUP for pkgbuildup is corresponding to PKGBUILD for makepkg, its a shell script file, too. User could write code to getting the latest package information and store them to a key-value table, the key name is the variable name in PKGBUILD.tpl, and pkgbuildup will use it to generate a new PKGBUILD file.

And pkgbuildup also provides few functions and variables to make it easier to write a PKGBUILDUP script, for example, if porting a debian package to archlinux, you may want to use update_pkgbuild_for_source_site(), more information please see the documentation(http://fasheng.github.io/pkgbuildup).

EXAMPLE

Here is an example to porting hello binary package in debian to archlinux, and shows how to dispatch multiple source files in PKGBUILD. But be careful, in the real situation, download source file and compile it will be a better choice when porting a linux software.

Firstly, we get the package web page: http://ftp.debian.org/debian/pool/main/h/hello

And the content of PKGBUILD.tpl will be:

# There are six template variables: pkgver, pkgrel, fileurl_x86,
# fileurl_x64, md5_x86, and md5_x64. In this example we will see that
# pkgbuildup could dispatch multiple source files easily.
pkgname=hello
pkgver={% pkgver %}
pkgrel={% pkgrel %}
pkgdesc='Hello package from Debian'
arch=('i686' 'x86_64')
url="http://www.debian.com/"
license=('GPL3')
depends=()

_fileurl_x86="{% fileurl_x86 %}"
_fileurl_x64="{% fileurl_x64 %}"
_md5_x86="{% md5_x86 %}"
_md5_x64="{% md5_x64 %}"
if test "$CARCH" == i686; then
    _fileurl=${_fileurl_x86}
    _md5=${_md5_x86}
else
    _fileurl=${_fileurl_x64}
    _md5=${_md5_x64}
fi
source=("${_fileurl}")
md5sums=("${_md5}")

package() {
    tar xvf ${srcdir}/data.tar.xz -C ${pkgdir}/
}

If run command pkgbuild -l PKGBUILD.tpl, it will output:

pkgver
pkgrel
fileurl_x86
fileurl_x64
md5_x86
md5_x64

Then is the PKGBUILDUP file:

update_hello() {
    local url="http://ftp.debian.org/debian/pool/main/h/hello"
    local filereg_x86="hello_.*?_i386.deb"
    local filereg_x64="hello_.*?_amd64.deb"

    # Meaningful variables for update_pkgbuild_for_source_site()
    # $FILE_INFO, a array with useful information to get the latest
    #   package file name, echo element own four fields which were
    #   separate by "::".
    #   The element format looks like as:
    #     "fileurl_var::checksum_var::url::filename_regexp"
    #   fileurl_var and checksum_var are the template variable's name
    local FILE_INFO=("fileurl_x86::md5_x86::${url}::${filereg_x86}"
                     "fileurl_x64::md5_x64::${url}::${filereg_x64}")

    # $PKGREL_CMD, the command to get package release version, if
    # exist "%s", will be replaced by $pkgrelreg. This command will
    # be used on first package file name in $FILE_INFO
    local PKGREL_CMD="grep -oP '\-\d+_' | tr -d '\-_'"

    # Arguments for update_pkgbuild_for_source_site()
    local tplfile="hello/PKGBUILD.tpl"
    local pkgverreg='[0-9]\.[0-9]'  # regexp to get package version
    local pkgrelreg=""             # regexp to get package release
                                   # version, we custom $PKGREL_CMD
                                   # directly, so here is just empty
    local makepkg="true"           # run makepkg after updating
    local upload="false"           # upload package to aur after updating

    # update_pkgbuild_for_source_site() is a helper function in
    # pkgbuildup, it will update PKGBUILD which package file living in
    # other linux distribution's source site, and get the latest
    # package file name by parsing the web page
    update_pkgbuild_for_source_site "${tplfile}" "${pkgverreg}" "${pkgrelreg}" "${makepkg}" "${upload}"
}

Now we just run command pkgbuildup under the directory of PKGBUILD, it will get the latest package name automatically and update the PKGBUILD file, run makepkg, and upload the newer PKGBUILD file to AUR if you wish. pkgbuildup also provide a simple log file named pkgbuildup_result.log, in this example, its content will be:

[SUCCESS]  hello/PKGBUILD.tpl

So, you can see, pkgbuildup is easy to use, and not much code needed, if used in conjunction with other tools like cron, it maybe be more powerful.

LICENSE

GNU General Public License, Version 3.0

About

Help AUR package maintainer update PKGBUILD files automatically

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published