&dhucpackage; &dhsection;

&dhpackage;

build Debian packages from SVN repository

              &dhpackage;
              [ 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

`&dhpackage;` 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 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/.

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.

## SEE ALSO

/usr/share/doc/svn-buildpackage/

- The svn-buildpackage HOWTO manual

svn-inject

1

- puts a Debian source package into Subversion repository

svn-upgrade

1

- upgrade source package from a new upstream revision

svn

1

- Subversion command line client tool

dpkg-buildpackage

1

- Debian source package tools

lintian

1

- Debian package checker