build_clean.sh 5.21 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] [-S|--srpm] [-g|--git] [-Q|--quick] [-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 "This is also the preferred way to create a distribution tarball for release:"
    echo "  $ $0 -c -S"
    echo
17
    echo "Options:"
18 19 20 21 22 23 24 25
    echo "  -f|--force: force build, even if working directory is not clean and has local modifications"
    echo "  -c|--clean: run \`git-clean -fdx :/\` before build"
    echo "  -S|--srpm: only build the SRPM"
    echo "  -g|--git: create tarball from current git HEAD (skips make dist)"
    echo "  -Q|--quick: only run \`make dist\` instead of \`make distcheck\`"
    echo "  -N|--no-dist: skip creating the source tarball if you already did \`make dist\`"
    echo "  -w|--with \$OPTION: pass --with \$OPTION to rpmbuild. For example --with debug"
    echo "  -W|--without \$OPTION: pass --without \$OPTION to rpmbuild. For example --without debug"
26
    echo "  -s|--snapshot TEXT: use TEXT as the snapshot version for the new package (overwrites \$NM_BUILD_SNAPSHOT environment)"
27
    echo "  -r|--release: built a release tarball (this option must be alone)"
28 29 30 31 32 33 34 35 36 37 38 39
}


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"

40 41
IGNORE_DIRTY=0
GIT_CLEAN=0
42
QUICK=0
43
NO_DIST=0
44
WITH_LIST=()
45
SOURCE_FROM_GIT=0
46
SNAPSHOT="$NM_BUILD_SNAPSHOT"
47

48 49
ADD_WITH_TEST=1

50 51
NARGS=$#

52 53 54
while [[ $# -gt 0 ]]; do
    A="$1"
    shift
55 56 57 58 59 60 61 62
    case "$A" in
        -h|--help|-\?|help)
            usage
            exit 0
            ;;
        -f|--force)
            IGNORE_DIRTY=1
            ;;
63 64 65 66 67
        -r|--release)
            [[ $NARGS -eq 1 ]] || die "--release option must be alone"
            export NMTST_CHECK_GTK_DOC=1
            BUILDTYPE=SRPM
            ;;
68 69 70
        -c|--clean)
            GIT_CLEAN=1
            ;;
71 72 73
        -S|--srpm)
            BUILDTYPE=SRPM
            ;;
74 75 76 77 78
        -s|--snapshot)
            [[ $# -gt 0 ]] || die "Missing argument to $A"
            SNAPSHOT="$1"
            shift
            ;;
79 80 81 82 83 84 85 86
        -g|--git)
            NO_DIST=1
            IGNORE_DIRTY=1
            SOURCE_FROM_GIT=1
            ;;
        -Q|--quick)
            QUICK=1
            ;;
87 88
        -N|--no-dist)
            NO_DIST=1
89
            IGNORE_DIRTY=1
90
            SOURCE_FROM_GIT=0
91
            ;;
92
        -w|--with)
93 94
            [[ $# -gt 0 ]] || die "Missing argument to $A"
            WITH_LIST=("${WITH_LIST[@]}" "--with" "$1")
95 96 97
            if [[ "$1" == test ]]; then
                ADD_WITH_TEST=0
            fi
98
            shift
99 100
            ;;
        -W|--without)
101 102
            [[ $# -gt 0 ]] || die "Missing argument to $A"
            WITH_LIST=("${WITH_LIST[@]}" "--without" "$1")
103 104 105
            if [[ "$1" == test ]]; then
                ADD_WITH_TEST=0
            fi
106
            shift
107
            ;;
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
        *)
            usage
            die "Unexpected argument \"$A\""
            ;;
    esac
done

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.
123
    if [[ "x$(LANG=C git clean -ndx | grep '^Would \(remove contrib/\|skip repository libgsystem/\).*$' -v)" != x ]]; then
124
        die "The working directory is not clean. Refuse to run. Try \`$0 --force\`, \`$0 --clean\`, or \`git clean -e :/contrib -dx -n\`"
125 126
    fi
    if [[ "x$(git status --porcelain)" != x ]]; then
127
        die "The working directory has local changes. Refuse to run. Try \`$0 --force\`"
128
    fi
129 130
fi

131
if [[ $NO_DIST != 1 ]]; then
132
    ./autogen.sh \
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
        --program-prefix= \
        --prefix=/usr \
        --exec-prefix=/usr \
        --bindir=/usr/bin \
        --sbindir=/usr/sbin \
        --sysconfdir=/etc \
        --datadir=/usr/share \
        --includedir=/usr/include \
        --libdir=/usr/lib \
        --libexecdir=/usr/libexec \
        --localstatedir=/var \
        --sharedstatedir=/var/lib \
        --mandir=/usr/share/man \
        --infodir=/usr/share/info \
        \
        --disable-dependency-tracking \
149 150 151 152
        --enable-gtk-doc \
        --enable-introspection \
        --enable-ifcfg-rh \
        --enable-ifupdown \
153
        --enable-config-plugin-ibft \
154 155 156 157 158 159
        --with-config-logging-backend-default=syslog \
        --with-libaudit=yes-disabled-by-default \
        --enable-polkit=yes \
        --with-config-dhcp-default=internal \
        --with-config-dns-rc-manager-default=symlink \
        || die "Error autogen.sh"
160
    if [[ $QUICK == 1 ]]; then
161
        make dist -j 7 || die "Error make dist"
162
    else
163
        make distcheck -j 7 || die "Error make distcheck"
164
    fi
165
fi
166

167 168 169 170
if [[ "$ADD_WITH_TEST" == 1 ]]; then
    WITH_LIST=("${WITH_LIST[@]}" "--with" "test")
fi

171
export SOURCE_FROM_GIT
172
export BUILDTYPE
173
export NM_RPMBUILD_ARGS="${WITH_LIST[@]}"
174
export SNAPSHOT
175

176
"$SCRIPTDIR"/build.sh
177