contrib/builddeb
author Augie Fackler <augie@google.com>
Mon, 30 Apr 2018 22:24:58 -0400
branchstable
changeset 38195 9c5ced5276d6
parent 34625 f1c2552c2de7
child 38005 ea70512b1ad6
permissions -rwxr-xr-x
mpatch: avoid integer overflow in combine() (SEC) All the callers of this function can handle a NULL return, so that appears to be the "safe" way to report an error.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     1
#!/bin/sh -e
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     2
#
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     3
# Build a Mercurial debian package from the current repo
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     4
#
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     5
# Tested on Jessie (stable as of original script authoring.)
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     6
24972
56c64c91b429 packaging: extract packagelib for common code from builddeb and buildrpm
Augie Fackler <augie@google.com>
parents: 24971
diff changeset
     7
. $(dirname $0)/packagelib.sh
56c64c91b429 packaging: extract packagelib for common code from builddeb and buildrpm
Augie Fackler <augie@google.com>
parents: 24971
diff changeset
     8
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
     9
BUILD=1
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    10
CLEANUP=1
27212
ef9301ce6046 builddeb: read default distribution and codename from lsb_release
Anton Shestakov <av6@dwimlabs.net>
parents: 27211
diff changeset
    11
DISTID=`(lsb_release -is 2> /dev/null | tr '[:upper:]' '[:lower:]') || echo debian`
ef9301ce6046 builddeb: read default distribution and codename from lsb_release
Anton Shestakov <av6@dwimlabs.net>
parents: 27211
diff changeset
    12
CODENAME=`lsb_release -cs 2> /dev/null || echo unknown`
28994
8797f03db5b6 builddeb: add flag for a source-only deb
Sean Farley <sean@farley.io>
parents: 28993
diff changeset
    13
DEBFLAGS=-b
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    14
while [ "$1" ]; do
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    15
    case "$1" in
27210
9b86d29867a5 builddeb: add --distid option to specify Distributor ID
Anton Shestakov <av6@dwimlabs.net>
parents: 27209
diff changeset
    16
    --distid )
9b86d29867a5 builddeb: add --distid option to specify Distributor ID
Anton Shestakov <av6@dwimlabs.net>
parents: 27209
diff changeset
    17
        shift
9b86d29867a5 builddeb: add --distid option to specify Distributor ID
Anton Shestakov <av6@dwimlabs.net>
parents: 27209
diff changeset
    18
        DISTID="$1"
9b86d29867a5 builddeb: add --distid option to specify Distributor ID
Anton Shestakov <av6@dwimlabs.net>
parents: 27209
diff changeset
    19
        shift
9b86d29867a5 builddeb: add --distid option to specify Distributor ID
Anton Shestakov <av6@dwimlabs.net>
parents: 27209
diff changeset
    20
        ;;
27209
7fbab10f812f builddeb: rename --release option to --codename
Anton Shestakov <av6@dwimlabs.net>
parents: 26833
diff changeset
    21
    --codename )
26108
05306b9359d3 builddeb: rework how output dir and platform are specified
Augie Fackler <augie@google.com>
parents: 26090
diff changeset
    22
        shift
27209
7fbab10f812f builddeb: rename --release option to --codename
Anton Shestakov <av6@dwimlabs.net>
parents: 26833
diff changeset
    23
        CODENAME="$1"
26108
05306b9359d3 builddeb: rework how output dir and platform are specified
Augie Fackler <augie@google.com>
parents: 26090
diff changeset
    24
        shift
05306b9359d3 builddeb: rework how output dir and platform are specified
Augie Fackler <augie@google.com>
parents: 26090
diff changeset
    25
        ;;
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    26
    --cleanup )
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    27
        shift
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    28
        BUILD=
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    29
        ;;
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    30
    --build )
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    31
        shift
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    32
        CLEANUP=
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    33
        ;;
28994
8797f03db5b6 builddeb: add flag for a source-only deb
Sean Farley <sean@farley.io>
parents: 28993
diff changeset
    34
    --source-only )
8797f03db5b6 builddeb: add flag for a source-only deb
Sean Farley <sean@farley.io>
parents: 28993
diff changeset
    35
        shift
8797f03db5b6 builddeb: add flag for a source-only deb
Sean Farley <sean@farley.io>
parents: 28993
diff changeset
    36
        DEBFLAGS=-S
8797f03db5b6 builddeb: add flag for a source-only deb
Sean Farley <sean@farley.io>
parents: 28993
diff changeset
    37
        ;;
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    38
    * )
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    39
        echo "Invalid parameter $1!" 1>&2
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    40
        exit 1
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    41
        ;;
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    42
    esac
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    43
done
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    44
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    45
trap "if [ '$CLEANUP' ] ; then rm -r '$PWD/debian' ; fi" EXIT
26108
05306b9359d3 builddeb: rework how output dir and platform are specified
Augie Fackler <augie@google.com>
parents: 26090
diff changeset
    46
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    47
set -u
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    48
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    49
if [ ! -d .hg ]; then
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    50
    echo 'You are not inside a Mercurial repository!' 1>&2
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    51
    exit 1
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    52
fi
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    53
24972
56c64c91b429 packaging: extract packagelib for common code from builddeb and buildrpm
Augie Fackler <augie@google.com>
parents: 24971
diff changeset
    54
gethgversion
26833
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
    55
debver="$version"
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
    56
if [ -n "$type" ] ; then
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
    57
    debver="$debver~$type"
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
    58
fi
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
    59
if [ -n "$distance" ] ; then
29045
52f71214efce builddeb: use codename in version
Sean Farley <sean@farley.io>
parents: 28994
diff changeset
    60
    debver="$debver+$distance-$CODENAME-$node"
29093
c4f0e764b231 builddeb: add distroseries to tagged versions
Sean Farley <sean@farley.io>
parents: 29046
diff changeset
    61
elif [ "$DEBFLAGS" = "-S" ] ; then
c4f0e764b231 builddeb: add distroseries to tagged versions
Sean Farley <sean@farley.io>
parents: 29046
diff changeset
    62
    # for building a ppa (--source-only) for a release (distance == 0), we need
c4f0e764b231 builddeb: add distroseries to tagged versions
Sean Farley <sean@farley.io>
parents: 29046
diff changeset
    63
    # to version the distroseries so that we can upload to launchpad
c4f0e764b231 builddeb: add distroseries to tagged versions
Sean Farley <sean@farley.io>
parents: 29046
diff changeset
    64
    debver="$debver~${CODENAME}1"
26833
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
    65
fi
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    66
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    67
control=debian/control
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    68
changelog=debian/changelog
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    69
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    70
if [ "$BUILD" ]; then
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    71
    if [ -d debian ] ; then
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    72
        echo "Error! debian control directory already exists!"
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    73
        exit 1
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    74
    fi
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    75
34625
f1c2552c2de7 build: "make deb" failed when the base path contained spaces
muxator <a.mux@inwind.it>
parents: 29093
diff changeset
    76
    cp -r "$PWD"/contrib/debian debian
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    77
28988
4f1dac94b53f builddeb: use sed -i
Sean Farley <sean@farley.io>
parents: 27212
diff changeset
    78
    sed -i.tmp "s/__VERSION__/$debver/" $changelog
4f1dac94b53f builddeb: use sed -i
Sean Farley <sean@farley.io>
parents: 27212
diff changeset
    79
    sed -i.tmp "s/__DATE__/$(date --rfc-2822)/" $changelog
28989
a8256e3701be builddeb: use the os codename instead of 'unstable'
Sean Farley <sean@farley.io>
parents: 28988
diff changeset
    80
    sed -i.tmp "s/__CODENAME__/$CODENAME/" $changelog
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    81
    rm $changelog.tmp
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    82
28993
837119bf7f01 builddeb: create source archive for ubuntu
Sean Farley <sean@farley.io>
parents: 28992
diff changeset
    83
    # remove the node from the version string
837119bf7f01 builddeb: create source archive for ubuntu
Sean Farley <sean@farley.io>
parents: 28992
diff changeset
    84
    SRCFILE="mercurial_$(echo $debver | sed "s,-$node,,").orig.tar.gz"
837119bf7f01 builddeb: create source archive for ubuntu
Sean Farley <sean@farley.io>
parents: 28992
diff changeset
    85
    "$PWD/hg" archive $SRCFILE
837119bf7f01 builddeb: create source archive for ubuntu
Sean Farley <sean@farley.io>
parents: 28992
diff changeset
    86
    mv $SRCFILE ..
28994
8797f03db5b6 builddeb: add flag for a source-only deb
Sean Farley <sean@farley.io>
parents: 28993
diff changeset
    87
    debuild -us -uc -i -I $DEBFLAGS
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    88
    if [ $? != 0 ]; then
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    89
        echo 'debuild failed!'
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    90
        exit 1
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    91
    fi
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    92
24971
ab75baaf81d5 builddeb: new script for building a deb package
Augie Fackler <augie@google.com>
parents:
diff changeset
    93
fi
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    94
if [ "$CLEANUP" ] ; then
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    95
    echo
27210
9b86d29867a5 builddeb: add --distid option to specify Distributor ID
Anton Shestakov <av6@dwimlabs.net>
parents: 27209
diff changeset
    96
    OUTPUTDIR=${OUTPUTDIR:=packages/$DISTID-$CODENAME}
27212
ef9301ce6046 builddeb: read default distribution and codename from lsb_release
Anton Shestakov <av6@dwimlabs.net>
parents: 27211
diff changeset
    97
    mkdir -p "$OUTPUTDIR"
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
    98
    find ../mercurial*.deb ../mercurial_*.build ../mercurial_*.changes \
28991
1967c6b714e6 builddeb: copy over .gz and .dsc files
Sean Farley <sean@farley.io>
parents: 28990
diff changeset
    99
          ../mercurial*.dsc ../mercurial*.gz \
28990
62c245c59433 builddeb: ignore errors about find not finding files
Sean Farley <sean@farley.io>
parents: 28989
diff changeset
   100
          -type f -newer $control -print0 2>/dev/null | \
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
   101
      xargs -Inarf -0 mv narf "$OUTPUTDIR"
26833
6474b64045fb packaging: rework version detection and declaration (issue4912)
Augie Fackler <augie@google.com>
parents: 26148
diff changeset
   102
    echo "Built packages for $debver:"
26148
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
   103
    find "$OUTPUTDIR" -type f -newer $control -name '*.deb'
7f49efcaa9b4 debian: switch to using debhelper and dh_python2 to build debs
Augie Fackler <augie@google.com>
parents: 26108
diff changeset
   104
fi