From: Marcin Krol Date: Sat, 20 Mar 2021 12:27:34 +0000 (+0100) Subject: - instead of disabling just systemd bcond, parse and apply ~/.distbcond X-Git-Url: https://git.tld-linux.org/?p=packages%2Frpm-build-tools.git;a=commitdiff_plain;h=b35217ea1e1522e9feb6aabfce686f09bd0e3370 - instead of disabling just systemd bcond, parse and apply ~/.distbcond --- diff --git a/builder.sh b/builder.sh index 787e216..4ea1d3d 100755 --- a/builder.sh +++ b/builder.sh @@ -1754,10 +1754,8 @@ build_package() { if grep -q -E 'systemd(unitdir|userunitdir|tmpfilesdir)' $specdir/$SPECFILE; then sed -i -e '/^%exclude_systemd_files/d; /^%files/s/$/\n%exclude_systemd_files/g;' $specdir/$SPECFILE fi - # Disable systemd bcond if present and enabled, there is no systemd in TLD - if grep -q -E '^%bcond_without\s+systemd\s+' $specdir/$SPECFILE; then - sed -i -r -e '/^%bcond_without\s+systemd\s+/s/bcond_without/bcond_with/g;' $specdir/$SPECFILE - fi + # Enable/disable distro wide bconds based on ~/.distbcond + process_distbcond "$specdir/$SPECFILE" # FIXME: eval here is exactly why? PATH=$CLEAN_PATH eval teeboth "'$logfile'" ${TIME_COMMAND} ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $specdir/$SPECFILE retval=$? @@ -1855,6 +1853,51 @@ process_bcondrc() { update_shell_title "parse ~/.bcondrc: DONE!" } +process_distbcond() { + # apply bconds from ~/.distbcond to spec + # The file structure is like gentoo's package.use: + # --- + # * -selinux + # samba -mysql -pgsql + # w32codec-installer license_agreement + # php +mysqli + # --- + if [ -f $HOME/.distbcond ] || ([ -n $HOME_ETC ] && [ -f $HOME_ETC/.distbcond ]); then + : + else + return + fi + + SN=${SPECFILE%%\.spec} + + local distbcond=$HOME/.distbcond + [ -n $HOME_ETC ] && [ -f $HOME_ETC/.distbcond ] && distbcond=$HOME_ETC/.distbcond + + local bcond_avail=$(find_spec_bcond $SPECFILE) + + while read pkg flags; do + # ignore comments + [[ "$pkg" == \#* ]] && continue + + # any package or current package? + if [ "$pkg" = "*" ] || [ "$pkg" = "$PACKAGE_NAME" ] || [ "$pkg" = "$SN" ]; then + for flag in $flags; do + local opt=${flag#[+-]} + + # use only flags which are in this package. + if [[ $bcond_avail = *${opt}* ]]; then + if [[ $flag = -* ]]; then + sed -i -r -e '/^%bcond_(with|without)\s+'$opt'/s/^%bcond_(with|without)/%bcond_with/g;' $specdir/$SPECFILE + elif [[ $flag = +* ]]; then + sed -i -r -e '/^%bcond_(with|without)\s+'$opt'/s/^%bcond_(with|without)/%bcond_without/g;' $specdir/$SPECFILE + fi + fi + done + fi + done < $distbcond + update_shell_title "parse ~/.distbcond: DONE!" +} + set_bconds_values() { update_shell_title "set bcond values"