CHMOD="no"
CHMOD_MODE="0644"
RPMOPTS=""
+RPMUSERDEFS=""
RPMBUILDOPTS=""
BCOND=""
GROUP_BCONDS="no"
# 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"
if ! is_rpmorg; then
local safe_macrofiles
safe_macrofiles=$(rpm $TARGET_SWITCH --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); print $0 } ')
- eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1
+ eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMUSERDEFS $RPMBUILDOPTS $BCOND $* 2>&1
else
- eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --load "$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $* 2>&1
+ eval PATH=$CLEAN_PATH $RPMBUILD $TARGET_SWITCH --load "$BUILDER_MACROS" $QUIET $RPMOPTS $RPMUSERDEFS $RPMBUILDOPTS $BCOND $* 2>&1
fi
}
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 $RPMUSERDEFS --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $SPEC_PATH)
else
update_shell_title "cache_rpm_dump using rpmbuild command"
local rpm_dump
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"
fi
if [ "$NOINIT" != "yes" ] ; then
- TOP_DIR=$(eval $RPM $RPMOPTS --eval '%{_topdir}')
+ TOP_DIR=$(eval $RPM $RPMOPTS $RPMUSERDEFS --eval '%{_topdir}')
local macros_ver=$(rpm -E %?rpm_build_macros)
if [ -z "$macros_ver" ]; then
set_pkgrev() {
local _tag
+ parse_spec "$1"
if [ "$TAG_VERSION" = "yes" ]; then
_tag=`make_tagver`
fi
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
+ PATH=$CLEAN_PATH eval teeboth "'$logfile'" ${TIME_COMMAND} ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMUSERDEFS $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
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"
local DEPS CNFL
if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ]; then
# TODO: Conflicts list doesn't check versions
- CNFL=$(eval rpm-getdeps $BCOND $RPMOPTS $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs)
- DEPS=$(eval rpm-getdeps $BCOND $RPMOPTS $SPECFILE 2> /dev/null | awk '/^\+/ { print $3 } ' | _rpm_prov_check | xargs)
+ CNFL=$(eval rpm-getdeps $BCOND $RPMOPTS $RPMUSERDEFS $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs)
+ DEPS=$(eval rpm-getdeps $BCOND $RPMOPTS $RPMUSERDEFS $SPECFILE 2> /dev/null | awk '/^\+/ { print $3 } ' | _rpm_prov_check | xargs)
fi
if [ "$FETCH_BUILD_REQUIRES_RPMSPECSRPM" = "yes" ]; then
- CNFL=$(eval rpm -q --specsrpm --conflicts $BCOND $RPMOPTS $SPECFILE | awk '{print $1}' | _rpm_cnfl_check | xargs)
- DEPS=$(eval rpm -q --specsrpm --requires $BCOND $RPMOPTS $SPECFILE | awk '{print $1}' | _rpm_prov_check | xargs)
+ CNFL=$(eval rpm -q --specsrpm --conflicts $BCOND $RPMOPTS $RPMUSERDEFS $SPECFILE | awk '{print $1}' | _rpm_cnfl_check | xargs)
+ DEPS=$(eval rpm -q --specsrpm --requires $BCOND $RPMOPTS $RPM_USERDEFS $SPECFILE | awk '{print $1}' | _rpm_prov_check | xargs)
fi
if [ -n "$CNFL" ]; then
}
init_rpm_dir() {
- local TOP_DIR=$(eval $RPM $RPMOPTS --eval '%{_topdir}')
- local rpmdir=$(eval $RPM $RPMOPTS --eval '%{_rpmdir}')
- local buildir=$(eval $RPM $RPMOPTS --eval '%{_builddir}')
- local srpmdir=$(eval $RPM $RPMOPTS --eval '%{_srcrpmdir}')
+ local TOP_DIR=$(eval $RPM $RPMOPTS $RPMUSERDEFS --eval '%{_topdir}')
+ local rpmdir=$(eval $RPM $RPMOPTS $RPMUSERDEFS --eval '%{_rpmdir}')
+ local buildir=$(eval $RPM $RPMOPTS $RPMUSERDEFS --eval '%{_builddir}')
+ local srpmdir=$(eval $RPM $RPMOPTS $RPMUSERDEFS --eval '%{_srcrpmdir}')
local TEMPLATES=template-specs
local tmp
MACRO="${1}"
shift
if echo "${MACRO}" | grep -q '\W'; then
- RPMOPTS="${RPMOPTS} --define \"${MACRO}\""
+ RPMUSERDEFS="${RPMUSERDEFS} --define \"${MACRO}\""
else
VALUE="${1}"
shift
- RPMOPTS="${RPMOPTS} --define \"${MACRO} ${VALUE}\""
+ RPMUSERDEFS="${RPMUSERDEFS} --define \"${MACRO} ${VALUE}\""
fi
;;
--alt_kernel)
DISTFILES_SERVER=${TLD_DISTFILES_SERVER}
;;
--pkgrev)
- COMMAND="set_pkgrev"
+ SETPKGREV="true"
+ COMMAND="build-source"
shift;;
-lp)
COMMAND="list_pkgrev"
"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