This is the command svn-buildpackage that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator
PROGRAM:
NAME
svn-buildpackage - build Debian packages from SVN repository
SYNOPSIS
svn-buildpackage [[ OPTIONS... ] [ OPTIONS for dpkg-buildpackage ]]
DESCRIPTION
Builds a Debian package from a Subversion repository. The source code repository must be
in the format created by svn-inject, and this script must be executed from the working
directory (trunk/package).
By default, the working directory is used as the main source directory (assuming the whole
upstream source is being stored in the repository). The alternative is so called "merge
mode". With this method, only the debian directory (and maybe some other modified files)
are stored in the repository. At build time, the contents of the svn trunk are copied to
the extracted tarball contents (and can overwrite parts of it). To choose this working
model, set the svn property mergeWithUpstream on the debian directory
$ svn propset mergeWithUpstream 1 debian
mergeWithUpstream requires that the build system can prepare a tarball, typically using
make dist and autotools. All upstream packages will have some form of tarball creation
support and native packages that use autotools or which have internal tarball support can
use mergeWithUpstream to handle generated files that are needed to build the package but
are not present in SVN. See the HOWTO guide for examples of how this can be done. Native
packages that do not use autotools and do not have internal tarball support can still add
generated files to the source package tarball using the useNativeDist make target in the
top level Makefile. This custom target must be idempotent and only modify / generate the
desired files using only the exported SVN source and build dependencies. To allow
svn-buildpackage to use an make native-dist target in your top level Makefile, set the
useNativeDist property on the ./debian/ directory:
$ svn propset useNativeDist 1 debian
The default behaviour of svn-buildpackage is as follows:
Check the working directory, complain on uncommited files (also see --svn-ignore-new)
Copy the orig tarball to the build area if necessary (also see --svn-no-links)
Extract the tarball (in merge mode) or export the svn work directory to the build
directory (also see below and --svn-no-links)
Build with dpkg-buildpackage (also see --svn-builder, --svn-lintian, etc.)
Create a changelog entry for the future version
OPTIONS
svn-buildpackage accepts the following options on the command-line:
--svn-builder=COMMAND
Specifies alternative build command instead of dpkg-buildpackage, eg. debuild,
pdebuild, etc. Every parameter that svn-buildpackage doesn't know (--svn-*) is passed
to COMMAND. There is no difference between the command line and config file parameters
. They are used at the same time.
WARNING: shell quotation rules do not completely apply here, better use wrappers for
complex constructs. Using this option may break --svn-lintian and --svn-move
functionality. Some functions may be disabled when a custom build command is used
because the output file location is not predictable.
Default: use dpkg-buildpackage.
--svn-ignore-new | --svn-ignore
Don't stop on svn conflicts or new/changed files. To set this behaviour for single
files set the deb:ignoreM property to 1 on them. Also see documentation of the
svn:ignore property in the SVN book.
Default: Stop on conflicts or new/changed files.
--svn-dont-clean
Don't run debian/rules clean.
Default: clean first
--svn-no-links
Don't use file links but try to export or do hard copies of the working directory.
This is useful if your package fails to build because some files, empty directories,
broken links, ... cannot not be transported with in the default link-copy mode.
Default: use links where possible.
--svn-dont-purge
Don't remove the build directory when the build is done.
Default: remove after successful build.
--svn-reuse
If possible, reuse an existing build directory in subsequent builds. The build
directory is not purged after the build, it is not renamed when a build starts and the
files are just copied over into it. Useful in mergeWithUpstream mode with large
packages.
Default: build directory is removed.
--svn-rm-prev-dir
If a previous build directory is found, remove it before building instead of renaming
it. if --svn-reuse is also given in the same line, the reuse behaviour occurs.
Default: rename old directories with a 'obsolete' suffix.
--svn-export
Just export the working directory and do necessary code merge operations, then exit.
Default: Off.
--svn-tag
Final build: Tag, export, build cleanly & make new changelog entry.
Default: Off.
--svn-tag-only | --svn-only-tag
Don't build the package, do only the tag copy.
Default: Off.
--svn-retag
If an existing target directory has been found while trying to create the tag copy,
remove the target directory first.
Default: Off.
--svn-noautodch
No new Debian changelog entry is added automatically.
Default: A new UNRELEASED changelog entry is set via dch.
--svn-lintian
Run lintian on the resulting changes file when done.
Default: Off.
--svn-move
When done, move the created files (as listed in .changes) to the parent directory,
relative to the one where svn-buildpackage was started.
Default: Off.
--svn-move-to=...
Specifies the target directory to which to move the generated files.
Default: Off. (Files are left where the build command puts them.)
--svn-pkg=packagename
Overrides the detected package name. Use with caution since it could be set too late
during the processing (eg. still have the old value when expanding shell variables).
Default: Off.
--svn-arch=ARCH
Allows specifying the build architecture (e.g. i386 build on an amd64 machine).
Default: Off.
--svn-override=var=value,anothervar=value
Overrides any config variable that has been autodetected or found in .svn/deb-layout.
Default: Off.
--svn-prebuild | --svn-postbuild | --svn-pretag | --svn-posttag
Commands (hooks) to be executed before/after the build/tag command invocations, e.g.
to download the orig tarballs from the archive. Shell code can be emdded here though
it is not recommended. Various helping variables are available in the environment, see
ENVIRONMENT VARIABLES below for detailed explanation.
Please note that the prebuild and postbuild hooks replace the normal prebuild and
postbuild actions of svn-buildpackage. For prebuild, this means that the build
dependencies will not be checked. For postbuild, this means that the resulting files
won't be moved, and lintian will not be run.
Defaults: Off.
--svn-noninteractive
With this parameter svn-buildpackage will not interact with the user.
Default: Off.
--svn-savecfg
By default, svn-buildpackage used to create .svn/deb-layout on every invocation. Since
version 0.6.22 this behaviour is deprecated.
With this parameter svn-buildpackage will (partly) replicate the old behaviour. In
contrast to the deprecated behaviour, the .svn/deb-layout is regarded as a local
override; the old behaviour simply ignored any versioned layout information if it
found .svn/deb-layout.
This option was provided since it can be useful when creating a local override file.
Default: Off.
--svn-download-orig
This option makes svn-buildpackage try to download the upstream tarball using apt and
uscan.
Default: Off.
--svn-verbose
More verbose program output.
Default: Off.
-h | --help
Show the help message.
EXAMPLES
For more detailed information on how to use svn-buildpackage, see the HOWTO.
http://svn-bp.alioth.debian.org/[1].
To start working with existing native Debian package from a *.dsc file, import it into the
repository with command:
svn-inject package_0.1.dsc svn://host/debian/devel/packages
To start working with existing upstream package in Debian from a *.dsc file, import it
into the repository with command:
svn-inject -o package_0.1-2.dsc svn://host/debian/devel/packages
Before building an upstream package, ensure the original source is available, e.g. if
uscan is working:
svn mkdir ../tarballs
svn propset svn:ignore "*" ../tarballs
uscan --force-download --destdir ../tarballs
To test building the package from Subversion repository, use command below. Refer to dpkg-
buildpackage(1) manual page for the -us etc. options:
svn-buildpackage --svn-lintian -us -uc -rfakeroot
To check that package build in a clean state, test it with pbuilder(1):
svn mkdir ../build-area # To store results
svn propset svn:ignore "*" ../build-area
svn-buildpackage --svn-ignore-new --svn-builder=pdebuild
When a new upstream release becomes available, commit all changes and have the working
tree in clean state. Then use svn-upgrade(1) to import the new release:
svn status # Check that there are no uncommited changes
svn-upgrade --verbose ../package-2.0.tar.gz
CONFIGURATION FILE
svn-buildpackage's behaviour can be modified using the file ~/.svn-buildpackage.conf.
Additional parts can be added in each package working directory using the file
.svn/svn-buildpackage.conf. It is essentially a list of the long command line options
(without leading minus signs), one argument per line (without quotes surrounding
multi-word arguments). The variables are expanded with the system shell if shell variables
are found there. Avoid ~ sign because of unreliable expansion: it is better to use $HOME
instead. Example:
svn-builder=debuild -EPATH
svn-no-links
svn-override=origDir=$HOME/debian/upstream/$PACKAGE
# svn-ignore-new
#svn-lintian
DIRECTORY LAYOUT HANDLING
By default, svn-buildpackage expects a configuration file with path/url declaration,
.svn/deb-layout. The values there can be overridden with the --svn-override option, see
above. If a config file could not be found, the settings are autodetected following the
usual assumptions about local directories and repository layout. In addition, the contents
of a custom file debian/svn-deblayout will be imported during the initial configuration.
Package maintainers can store this file in the repository to pass correct defaults to new
svn-buildpackage users. The format is the same as in the file .svn/deb-layout. As an
alternative to the debian/svn-deblayout file, maintainers can set Subversion properties
for the debian/ directory; any properties of debian/ which have a name of the form
svn-bp:PROP will be the source of a PROP setting which has the value indicated by the
first line of the property value. If a full svn URL is not given, the repository root will
be prepended to this value.
ENVIRONMENT VARIABLES
The following environment variables are exported by svn-buildpackage and can be used in
hook commands or the package build system.
PACKAGE, package
The source package name.
SVN_BUILDPACKAGE
Version of svn-buildpackage.
TAG_VERSION, debian_version
The complete Debian version string, also used for the tag copy.
non_epoch_version
Same as debian_version but without any epoch strings.
upstream_version
Same as debian_version but without Debian extensions
guess_loc
Guessed upstream source package name in the pool, something like
libm/libmeta-html-perl_3.2.1.0.orig.tar.gz
DIFFSRC
(experimental) shows the location of generated diff file
All the layout properties are exported to the environment, too. The following ones have
meaning to svn-buildpackage.
buildArea
the location of build area directory
trunkUrl
the URL of the trunk directory for the current package.
tagsUrl
the URL of the tags base directory for the current package.
origDir
the local directory where the orig tarball should be located.
origUrl
the URL from where the orig tarball for the current package can be pulled from.
The following variables are understood by svn-buildpackage:
FORCETAG
Ignore the signs of an incomplete changelog and tag the repository anyway.
FORCEEXPORT
Export upstream source from the repository even if mergeWithUpstream property is set.
DEBIAN_FRONTEND
If DEBIAN_FRONTEND is set to 'noninteractive' --svn-noninteractive is called silently.
RECOMMENDATIONS
Use shell aliases. Here are some examples for Bash:
alias svn-b="svn-buildpackage -us -uc -rfakeroot --svn-ignore"
alias svn-br="svn-b --svn-dont-purge --svn-reuse"
alias svn-bt="svn-buildpackage --svn-tag -rfakeroot"
Those commands have respective meanings: build regardless of new or changed files; build
regardless of new or changed files and reuse the build directory; build (for upload) and
tag.
SSH is the easiest way to access remote repositories, although it usually requires
entering a password more frequently with svn-buildpackage. Workarounds include using an
ssh key without a passphrase (although this is insecure and still relatively slow), or the
SSH connection caching feature present in recent versions of SSH. For details, see the
svn-buildpackage manual.
Another way to get a remote link is using the Subversion DAV module (with SSL and Apache
user authentication), see the svn-buildpackage HOWTO manual for details.
Use svn-buildpackage online using onworks.net services