]> TLD Linux GIT Repositories - packages/rpm-build-tools.git/commitdiff
- instead of disabling just systemd bcond, parse and apply ~/.distbcond
authorMarcin Krol <hawk@tld-linux.org>
Sat, 20 Mar 2021 12:27:34 +0000 (13:27 +0100)
committerMarcin Krol <hawk@tld-linux.org>
Sat, 20 Mar 2021 12:27:34 +0000 (13:27 +0100)
builder.sh

index 787e2168a51ce54da32094a9de3bfec8131760ea..4ea1d3d8904a203ea2bb28b8e4ea0343583b2f81 100755 (executable)
@@ -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"