build_clean.sh 3.47 KB
Newer Older
1 2 3 4 5 6 7 8
#!/bin/bash


die() {
    echo "$*" >&2
    exit 1
}

9
usage() {
10
    echo "USAGE: $0 [-h|--help|-?|help] [-f|--force] [-c|--clean] [-Q|--quick] [-S|--srpm] [-N|--no-dist] [[-w|--with OPTION] ...] [[-W|--without OPTION] ...]"
11
    echo
12
    echo "Does all the steps from a clean git working directory to an RPM of NetworkManager"
13
    echo
14 15 16
    echo "Options:"
    echo "  --force: force build, even if working directory is not clean and has local modifications"
    echo "  --clean: run \`git-clean -fdx :/\` before build"
17
    echo "  --quick: only run \`make dist\` instead of \`make distcheck\`"
18
    echo "  --srpm: only build the SRPM"
19 20 21
    echo "  --no-dist: skip creating the source tarball if you already did \`make dist\`"
    echo "  --with \$OPTION: pass --with \$OPTION to rpmbuild. For example --with debug"
    echo "  --without \$OPTION: pass --without \$OPTION to rpmbuild. For example --without debug"
22 23 24 25 26 27 28 29 30 31 32 33
}


ORIGDIR="$(readlink -f "$PWD")"
SCRIPTDIR="$(dirname "$(readlink -f "$0")")"
GITDIR="$(cd "$SCRIPTDIR" && git rev-parse --show-toplevel || die "Could not get GITDIR")"


[[ -x "$SCRIPTDIR"/build.sh ]] || die "could not find \"$SCRIPTDIR/build.sh\""

cd "$GITDIR" || die "could not change to $GITDIR"

34 35
IGNORE_DIRTY=0
GIT_CLEAN=0
36
QUICK=0
37
NO_DIST=0
38
WITH_LIST=()
39

40
_next_with=
41
for A; do
42 43 44 45 46
    if [ -n "$_next_with" ]; then
        WITH_LIST=("${WITH_LIST[@]}" "$_next_with" "$A")
        _next_with=
        continue
    fi
47 48 49 50 51 52 53 54 55 56 57
    case "$A" in
        -h|--help|-\?|help)
            usage
            exit 0
            ;;
        -f|--force)
            IGNORE_DIRTY=1
            ;;
        -c|--clean)
            GIT_CLEAN=1
            ;;
58 59 60
        -Q|--quick)
            QUICK=1
            ;;
61 62 63
        -S|--srpm)
            BUILDTYPE=SRPM
            ;;
64 65
        -N|--no-dist)
            NO_DIST=1
66 67
            IGNORE_DIRTY=1
            ;;
68 69 70 71 72 73
        -w|--with)
            _next_with=--with
            ;;
        -W|--without)
            _next_with=--without
            ;;
74 75 76 77 78 79 80
        *)
            usage
            die "Unexpected argument \"$A\""
            ;;
    esac
done

81 82
test -n "$_next_with" && die "Missing argument to $_next_with"

83 84 85 86 87 88 89 90
if [[ $GIT_CLEAN == 1 ]]; then
    git clean -fdx :/
fi

if [[ $IGNORE_DIRTY != 1 ]]; then
    # check for a clean working directory.
    # We ignore the /contrib directory, because this is where the automation
    # scripts and the build results will be.
91
    if [[ "x$(LANG=C git clean -ndx | grep '^Would \(remove contrib/\|skip repository libgsystem/\).*$' -v)" != x ]]; then
92
        die "The working directory is not clean. Refuse to run. Try \`$0 --force\`, \`$0 --clean\`, or \`git clean -e :/contrib -dx -n\`"
93 94
    fi
    if [[ "x$(git status --porcelain)" != x ]]; then
95
        die "The working directory has local changes. Refuse to run. Try \`$0 --force\`"
96
    fi
97 98
fi

99
if [[ $NO_DIST != 1 ]]; then
100 101 102 103 104 105 106 107 108 109 110 111 112 113
    ./autogen.sh --enable-gtk-doc || die "Error autogen.sh"

    if [[ $QUICK == 1 ]]; then
        make -C shared || die "Error make -C shared"
        make -C introspection || die "Error make -C introspection"
        make -C libnm-core || die "Error make -C libnm-core"
        make -C libnm || die "Error make -C libnm"
        make -C libnm-util || die "Error make -C libnm-util"
        make -C libnm-glib || die "Error make -C libnm-glib"
        make dist || die "Error make distcheck"
    else
        make -j 10 || die "Error make"
        make distcheck || die "Error make distcheck"
    fi
114
fi
115

116
export BUILDTYPE
117
export NM_RPMBUILD_ARGS="${WITH_LIST[@]}"
118

119
"$SCRIPTDIR"/build.sh
120