Previous: , Up: Conventions   [Contents]


3.1.2 Repository Conventions

Repository conventions are important in order to ensure every package resemble themselves. Here are the things to keep in mind:

[2010]

Prefer tarballs over git packages unless there is a sensible reason. Here are some:

  • Every patch is a new release. (See vim)
  • There are no releases. (See sbase)
  • Following a development branch.
  • There has been a long time since the latest release, but upstream is far ahead.
[2020]

Prefer sources without a dependency to ‘automake’. There are usually distribution tarballs that are ‘autoconf’’ed. Don’t submit tarballs with an automake dependency unless you are ‘sure’ there is no alternative.

[2030]

Avoid these packages:

dbus

Usually can be disabled by --disable-dbus.

gettext

Usually can be disabled by --disable-nls.

[2040]
  • Always install a package to the ‘/usr’ prefix.
  • All binaries should go to ‘/usr/bin’, not ‘/usr/sbin’ or any other directory.
  • All libraries should go to ‘/usr/lib’.
[2050]

All build files on the repository should be a POSIX shell script, and must start with #!/bin/sh -e.

The next section is about package templates that should be used in order to ensure stylistic consistency. Note that the option configurations shouldn’t be taken literally, they are meant as examples.

  1. Make [2210]
    #!/bin/sh -e
    
    make
    make DESTDIR="$1" PREFIX=/usr install
    
  2. Configure/Make [2211]
    #!/bin/sh -e
    
    ./configure \
        --prefix=/usr \
        --disable-option \
        --enable-option
    
    make
    make DESTDIR="$1" install
    
  3. Autoconf/Automake [2212]

    See 2020

    #!/bin/sh -e
    
    autoreconf -fi
    
    ./configure \
        --prefix=/usr \
        --disable-option \
        --enable-option
    
    make
    make DESTDIR="$1" install
    
  4. Meson [2220]
    #!/bin/sh -e
    
    export DESTDIR=$1
    
    meson \
        --prefix=/usr \
        -Doption=false \
        -Doption2=true \
        . output
    
    ninja -C output
    ninja -C output install
    
  5. Cmake [2230]
    #!/bin/sh -e
    
    export DESTDIR=$1
    
    cmake -B build \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DCMAKE_BUILD_TYPE=Release \
        -DOPTION=ON
    
    cmake --build   build
    cmake --install build
    
  6. Go [2240]
    #!/bin/sh -e
    
    export GOPATH=$PWD/gopath
    trap "go clean -modcache" EXIT INT
    go mod vendor
    
    go build
    install -Dm755 program "$1/usr/bin/program"
    
  7. Python [2241]
    #!/bin/sh -e
    
    python setup.py build
    python setup.py install --prefix=/usr --root="$1"
    

Previous: Shell Conventions, Up: Conventions   [Contents]