Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:adrianSuSE
build
build-recipe
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File build-recipe of Package build
# # 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= BUILD_SKIP_BUNDLE= RPM_BUILD_IN_PLACE= RPM_RECIPE_IN_SUBDIR= RPM_NOPREP= for i in spec dsc kiwi arch collax preinstallimage simpleimage mock livebuild snapcraft debootstrap debbuild appimage docker podman fissile helm flatpak mkosi; 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 ;; -skip-bundle) BUILD_SKIP_BUNDLE=1 ;; -rpm-build-in-place) RPM_BUILD_IN_PLACE=1 ;; -rpm-build-in-place-noprep) RPM_BUILD_IN_PLACE=1 RPM_NOPREP=1 ;; -rpm-recipe-in-subdir) RPM_BUILD_IN_PLACE=1 RPM_RECIPE_IN_SUBDIR=1 ;; -rpm-noprep) RPM_NOPREP=1 ;; -*) 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 ;; Chart.yaml) BUILDTYPE=helm ;; flatpak.yaml) BUILDTYPE=flatpak ;; flatpak.yml) BUILDTYPE=flatpak ;; flatpak.json) BUILDTYPE=flatpak ;; debian.control) BUILDTYPE=dsc ;; debian/control) BUILDTYPE=dsc ;; mkosi.*) BUILDTYPE=mkosi ;; 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 subdir 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" ;; mkosi) types="mkosi." ;; esac fi types="$types .spec _specsubdir:package _specsubdir:dist .dsc PKGBUILD Dockerfile build.collax .kiwi .src.rpm .nosrc.rpm simpleimage snapcraft.yaml Chart.yaml flatpak.yaml flatpak.json mkosi." fi for t in $types ; do found= subdir= if test "$t" != ${t#_specsubdir:} ; then test -n "$RPM_BUILD_IN_PLACE" && continue subdir="${t#_specsubdir:}" t="$subdir/*.spec" fi if test "$t" = mkosi. ; then files=("$f"/$t*) else files=("$f"/*$t) fi for ff in "${files[@]}"; do test -f "$ff" || continue RECIPEFILES=("${RECIPEFILES[@]}" "$ff") found=true done if test -n "$found" -a -n "$subdir" ; then echo "spec files found in '$subdir' directory, enabling build-in-place mode" RPM_BUILD_IN_PLACE=1 RPM_RECIPE_IN_SUBDIR=1 fi test -n "$found" && break if test "$t" = .dsc -a -f "$f/debian.control" ; then RECIPEFILES=("${RECIPEFILES[@]}" "$f/debian.control") break fi if test "$t" = .dsc -a -f "$f/debian/control" ; then RECIPEFILES=("${RECIPEFILES[@]}" "$f/debian/control") break fi done else RECIPEFILES[${#RECIPEFILES[@]}]="$f" fi done if test -z "$RECIPEFILES" ; then cleanup_and_exit 1 "no recipe files found in $@. exit..." fi } # extract rpm macros from configuration # these are potentialy also used in non-rpm builds recipe_setup_macros() { local rawcfgmacros=.rpmmacros test "$BUILDTYPE" = debbuild && rawcfgmacros=.debmacros queryconfig rawmacros --dist "$BUILD_DIST" --archpath "$BUILD_ARCH" --configdir "$CONFIG_DIR" > $BUILD_ROOT/root/$rawcfgmacros if test -n "$BUILD_DEBUG" && test "$BUILDTYPE" != debbuild ; then echo ' %prep %{?!__debug_package:%{?_build_create_debug:%?_build_insert_debug_package}}%%prep %package %{?!__debug_package:%{?_build_create_debug:%?_build_insert_debug_package}}%%package %_build_insert_debug_package \ %global __debug_package 1 \ %undefine _enable_debug_packages \ %debug_package ' >> $BUILD_ROOT/root/$rawcfgmacros fi if test -n "$BUILD_JOBS" ; then cat >> $BUILD_ROOT/root/$rawcfgmacros <<-EOF %jobs $BUILD_JOBS %_smp_mflags -j$BUILD_JOBS EOF fi test $BUILD_USER = abuild && cp -p $BUILD_ROOT/root/$rawcfgmacros $BUILD_ROOT/home/abuild/$rawcfgmacros } # 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 test "$BUILDTYPE" = mkosi && return 0 test "$BUILDTYPE" = preinstallimage && return 1 grep -E '^#[[: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" -a -n "$RUNNING_IN_VM" ; then mkdir -p "$TOPDIR/OTHER" echo "TIME_main_build: $(( `date +%s` - $RECIPE_BUILD_START_TIME))" >> "$TOPDIR/OTHER/_statistics" RECIPE_BUILD_START_TIME= fi } recipe_gendiff() { local obsgendiff=$(queryconfig \ --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" \ --archpath "$BUILD_ARCH" buildflags obsgendiff ) if test -n "$obsgendiff"; then if test -d "$BUILD_ROOT/usr/lib/build/obsgendiff.d"; then for script in "$BUILD_ROOT"/usr/lib/build/obsgendiff.d/*; do if test -x "$script" && ! chroot "$BUILD_ROOT" "/usr/lib/build/obsgendiff.d/${script##*/}" ; then cleanup_and_exit 1 "/usr/lib/build/obsgendiff.d/${script##*/} script failed!" fi done else cleanup_and_exit 1 "ERROR: obsgendiff enabled but no script installed" fi fi }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor