X-Git-Url: https://git.tld-linux.org/?a=blobdiff_plain;f=builder.sh;h=40e0ff48d25613a16b8c7f06d3e26f8ee02b646f;hb=2f7360988b2dbd3df72512b8fe6c0d25907e8be5;hp=a19da1207d111a72e70ecf92315418108f3452d0;hpb=45d8f2d9258214696ed2d3bba02ceb0236d47fd3;p=packages%2Frpm-build-tools.git diff --git a/builder.sh b/builder.sh index a19da12..40e0ff4 100755 --- a/builder.sh +++ b/builder.sh @@ -122,6 +122,7 @@ WGET_RETRIES=${MAX_WGET_RETRIES:-0} # rsync repository with git refs of packages PKGREVS_URL="http://pkgrevs.tld-linux.org" +SETPKGREV="false" # TLD git/df config TLD_GIT_SERVER="git://git.tld-linux.org" @@ -740,14 +741,20 @@ EOF } cache_rpm_dump() { + local SPEC_PATH if [ -n "$DEBUG" ]; then set -x set -v fi + if [ ! -z "$1" ]; then + SPEC_PATH="$1" + else + SPEC_PATH="$PACKAGE_DIR/$SPECFILE" + fi if [ -x /usr/bin/rpm-specdump ]; then update_shell_title "cache_rpm_dump using rpm-specdump command" - rpm_dump_cache=$(rpm-specdump $TARGET_SWITCH $BCOND --define "_specdir $PACKAGE_DIR" --define "_sourcedir $PACKAGE_DIR" $PACKAGE_DIR/$SPECFILE) + rpm_dump_cache=$(eval rpm-specdump $TARGET_SWITCH $BCOND $RPMOPTS --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $SPEC_PATH) else update_shell_title "cache_rpm_dump using rpmbuild command" local rpm_dump @@ -810,7 +817,7 @@ parse_spec() { get_icons cd $PACKAGE_DIR - cache_rpm_dump + cache_rpm_dump "$1" if rpm_dump | grep -qEi ":.*nosource.*1"; then FAIL_IF_NO_SOURCES="no" @@ -1553,6 +1560,7 @@ get_pkgrev() { set_pkgrev() { local _tag + parse_spec "$1" if [ "$TAG_VERSION" = "yes" ]; then _tag=`make_tagver` fi @@ -1750,9 +1758,23 @@ build_package() { local specdir=$(insert_gitlog $SPECFILE) ulimit -c unlimited + # If required exclude directories with systemd related files from package contents + 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 + # Enable/disable distro wide bconds based on ~/.distbcond + process_distbcond "$specdir/$SPECFILE" + # Add %tld macro to release to allow release control + sed -i -r -e '/^Release:/s/%\{\?tld\}//g; s/^Release:\s+(.*)$/Release:\t\1%{?tld}/;' $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=$? + + # Set pkgrev if requested and build status is OK + if [ ! -z "$SETPKGREV" ] && [ "$SETPKGREV" = "true" ] && [ "$retval" -eq "0" ]; then + set_pkgrev "$specdir/$SPECFILE" + fi + rm -r $specdir if [ -n "$logfile" ] && [ -n "$LOGDIROK" ] && [ -n "$LOGDIRFAIL" ]; then @@ -1847,6 +1869,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;' "$1" + elif [[ $flag = +* ]]; then + sed -i -r -e '/^%bcond_(with|without)\s+'$opt'/s/^%bcond_(with|without)/%bcond_without/g;' "$1" + fi + fi + done + fi + done < $distbcond + update_shell_title "parse ~/.distbcond: DONE!" +} + set_bconds_values() { update_shell_title "set bcond values" @@ -2467,7 +2534,8 @@ while [ $# -gt 0 ]; do DISTFILES_SERVER=${TLD_DISTFILES_SERVER} ;; --pkgrev) - COMMAND="set_pkgrev" + SETPKGREV="true" + COMMAND="build-source" shift;; -lp) COMMAND="list_pkgrev" @@ -2818,17 +2886,6 @@ case "$COMMAND" in "version" ) echo "$VERSIONSTRING" ;; - "set_pkgrev" ) - init_builder - if [ -z "$SPECFILE" ]; then - Exit_error err_no_spec_in_cmdl - fi - get_spec > /dev/null - parse_spec - set_bconds_values - display_bconds - set_pkgrev - ;; "list_pkgrev" ) init_builder if [ -z "$SPECFILE" ]; then