# # recipe specific functions for the build script # ################################################################ # # Copyright (c) 1995-2014 SUSE Linux Products GmbH # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or 3 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program (see the file COPYING); if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # ################################################################ BUILDTYPE= KIWI_PARAMETERS= for i in spec dsc kiwi arch collax preinstallimage simpleimage mock livebuild snapcraft debootstrap debbuild appimage docker podman fissile; do . "$BUILD_DIR/build-recipe-$i" done recipe_setup() { recipe_setup_$BUILDTYPE "$@" } recipe_prepare() { recipe_prepare_$BUILDTYPE "$@" } recipe_build() { recipe_build_$BUILDTYPE "$@" } recipe_resultdirs () { recipe_resultdirs_$BUILDTYPE "$@" } recipe_cleanup () { recipe_cleanup_$BUILDTYPE "$@" } recipe_parse_options() { case ${PARAM/#--/-} in -stage) needarg BUILD_RPM_BUILD_STAGE="$ARG" shift ;; -kiwi-parameter) test -z "$ARG" && ARG="$1" needarg KIWI_PARAMETERS="$KIWI_PARAMETERS $ARG" shift ;; -*) return 1 ;; esac nextargs=("$@") return 0 } recipe_set_buildtype() { BUILDTYPE= case ${RECIPEFILE##_service:*:} in *.spec|*.src.rpm) BUILDTYPE=spec ;; *.dsc) BUILDTYPE=dsc ;; *.kiwi) BUILDTYPE=kiwi ;; PKGBUILD) BUILDTYPE=arch ;; snapcraft.yaml) BUILDTYPE=snapcraft ;; appimage.yml) BUILDTYPE=appimage ;; Dockerfile) BUILDTYPE=docker ;; fissile.yml) BUILDTYPE=fissile ;; build.collax) BUILDTYPE=collax ;; _preinstallimage) BUILDTYPE=preinstallimage ;; simpleimage) BUILDTYPE=simpleimage ;; *.livebuild) BUILDTYPE=livebuild ;; esac if test -z "$BUILDTYPE" ; then cleanup_and_exit 1 "I don't know how to build $RECIPEFILE" fi # we can't query right after vm startup, so we put the BUILDENGINE in the build.data if test -z "$RUNNING_IN_VM" ; then BUILDENGINE= if test -n "$BUILD_DIST" ; then BUILDENGINE=`queryconfig buildengine --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" --archpath "$BUILD_ARCH"` test "$BUILDENGINE" = UNDEFINED && BUILDENGINE= fi fi # tweak buildtype according to engine if test "$BUILDENGINE" = mock -a "$BUILDTYPE" = spec ; then BUILDTYPE=mock fi if test "$BUILDENGINE" = debootstrap -a "$BUILDTYPE" = dsc ; then BUILDTYPE=debootstrap fi if test "$BUILDENGINE" = debbuild -a "$BUILDTYPE" = spec ; then BUILDTYPE=debbuild fi if test "$BUILDENGINE" = podman -a "$BUILDTYPE" = docker ; then BUILDTYPE=podman fi } # expands all directories into files expand_recipe_directories() { local f t ff found types if test -z "$RECIPEFILES" ; then set -- "`pwd`" else set -- "${RECIPEFILES[@]}" fi RECIPEFILES=() for f in "$@" ; do if test "$f" = "${f#/}" ; then f="`pwd`/$f" fi if test -d "$f" ; then if test -z "$types" ; then if test -n "$BUILD_DIST" ; then case $(queryconfig --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" --archpath "$BUILD_ARCH" type) in dsc) types=".dsc" ;; kiwi) types=".kiwi" ;; arch) types="PKGBUILD" ;; collax) types="build.collax" ;; livebuild) types=".livebuild" ;; snapcraft) types="snapcraft.yaml" ;; esac fi types="$types .spec .dsc PKGBUILD build.collax .kiwi .src.rpm .nosrc.rpm simpleimage snapcraft.yaml" fi for t in $types ; do found= for ff in "$f"/*$t ; do test -f "$ff" || continue RECIPEFILES=("${RECIPEFILES[@]}" "$ff") found=true done test -n "$found" && break done else RECIPEFILES[${#RECIPEFILES[@]}]="$f" fi done if test -z "$RECIPEFILES" ; then cleanup_and_exit 1 "no recipe files found in $@. exit..." fi } # generate a .build-changelog file from a .changes file recipe_create_changelog() { rm -f $BUILD_ROOT/.build-changelog case $1 in *.dsc) CFFORMAT=debian ;; *) CFFORMAT=rpm ;; esac # add --emailonly option for sles builds if test "$CFFORMAT" = rpm ; then case `queryconfig --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" --archpath "$BUILD_ARCH" eval '%{?is_opensuse}/%{?!fullname_in_changelog:%{?suse_version}}'` in *[1-9]*/*) ;; */*[1-9]*) CFFORMAT="$CFFORMAT --emailonly" ;; esac fi echo "running changelog2spec --target $CFFORMAT --file $1" if ! $BUILD_DIR/changelog2spec --target $CFFORMAT --file "$1" > $BUILD_ROOT/.build-changelog ; then rm -f $BUILD_ROOT/.build-changelog fi } recipe_needs_build_binaries() { test "$BUILDTYPE" = mock && return 0 test "$BUILDTYPE" = debootstrap && return 0 test "$BUILDTYPE" = livebuild && return 0 test "$BUILDTYPE" = snapcraft && return 0 test "$BUILDTYPE" = appimage && return 0 test "$BUILDTYPE" = docker && return 0 test "$BUILDTYPE" = fissile && return 0 test "$BUILDTYPE" = podman && return 0 egrep '^#[[:blank:]]*needsbinariesforbuild[[:blank:]]*$' >/dev/null <"$1" && return 0 return 1 } recipe_build_time_statistics() { if test "$DO_STATISTICS" = 1 -a -n "$RECIPE_BUILD_START_TIME" -a -n "$TOPDIR" ; then mkdir -p "$TOPDIR/OTHER" echo "TIME_main_build: $(( `date +%s` - $RECIPE_BUILD_START_TIME))" >> "$TOPDIR/OTHER/_statistics" RECIPE_BUILD_START_TIME= fi }