CHMOD="no"
CHMOD_MODE="0644"
RPMOPTS=""
+RPMUSERDEFS=""
RPMBUILDOPTS=""
BCOND=""
GROUP_BCONDS="no"
WGET_RETRIES=${MAX_WGET_RETRIES:-0}
+# .distbcond URL
+DISTBCOND_URL="https://src.tld-linux.org/.distbcond"
+
# rsync repository with git refs of packages
-PKGREVS_URL="http://pkgrevs.tld-linux.org"
+PKGREVS_URL="https://pkgrevs.tld-linux.org"
+PKGREVS_PREFIX="tld/"
SETPKGREV="false"
# TLD git/df config
# if the line contains short and long option, it will take only the long option
# but if you want both being completed, put the short option to separate line
echo "\
-Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version] [-a|--add_cvs] [-b|-ba|--build]
-[-bb|--build-binary] [-bs|--build-source] [-bc] [-bi] [-bl] [-u|--try-upgrade]
-[{-cf|--cvs-force}] [{-B|--branch} <branch>] [--depth <number>]
-[-g|--get] [-h|--help] [--ftp] [--http] [{-l|--logtofile} <logfile>] [-m|--mr-proper]
-[-q|--quiet] [--date <yyyy-mm-dd> [-r <tag>] [{-T|--tag <tag>]
-[-Tvs|--tag-version-stable] [-Ts|--tag-stable] [-Tv|--tag-version]
-[{-Tp|--tag-prefix} <prefix>] [{-tt|--test-tag}]
+Usage: builder [--all-branches] [-D|--debug] [-V|--version] [--short-version]
+[-a|--add_cvs] [-b|-ba|--build] [-bb|--build-binary] [-bs|--build-source]
+[-bc] [-bi] [-bl] [-u|--try-upgrade] [{-cf|--cvs-force}] [{-B|--branch} <branch>]
+[--depth <number>] [-g|--get] [-h|--help] [--ftp] [--http] [{-l|--logtofile} <logfile>]
+[-m|--mr-proper] [-q|--quiet] [--date <yyyy-mm-dd>] [-r <tag>]
[-nu|--no-urls] [-v|--verbose] [--opts <rpm opts>] [--short-circuit]
[--show-bconds] [--with/--without <feature>] [--define <macro> <value>]
[--git-pld|--git-tld] [--pkgrev] [-lp]
but icon file is absent),
-su, --source-urls - list urls - urls to sources and patches
intended for copying urls with spec with lots of macros in urls
--T <tag> , --tag <tag>
- - add git tag <tag> for files,
--Tvs, --tag-version-stable
- - add git tags STABLE and NAME-VERSION-RELEASE for files,
--Ts, --tag-stable
- - add git tag STABLE for files,
--Tv,
---tag-version - add git tag NAME-VERSION-RELEASE for files,
--Tp, --tag-prefix <prefix>
- - add <prefix> to NAME-VERSION-RELEASE tags,
--tt, --test-tag <prefix>
- - fail if tag is already present,
-ir, --integer-release-only
- allow only integer and snapshot releases
-v, --verbose - be verbose,
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
}
fi
if [ -x /usr/bin/rpm-specdump ]; then
update_shell_title "cache_rpm_dump using rpm-specdump command"
- rpm_dump_cache=$(eval rpm-specdump $TARGET_SWITCH $BCOND $RPMOPTS --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $SPEC_PATH)
+ 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
remove_build_requires
echo >&2 "Error: couldn't get out package name/version/release from spec file."
exit 6 ;;
- "err_tag_exists" )
+ "err_pkgrev_exists" )
remove_build_requires
- echo >&2 "Tag ${2} already exists"
+ echo >&2 "Error: package revision ${2} already exists"
exit 9 ;;
"err_fract_rel" )
remove_build_requires
"err_pkgrev_get" )
echo >&2 "Error: failed to get package revision for tag ${2}"
exit 16 ;;
+ "err_distbcond_update" )
+ echo >&2 "Error: failed to update .distbcond"
+ exit 17 ;;
"err_not_implemented" )
remove_build_requires
echo >&2 "Error: functionality not yet imlemented"
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
fi
}
-tag_exist() {
-# If tag exists and points to other commit exit with error
-# If it existsts and points to HEAD return 1
-# If it doesn't exist return 0
- local _tag="$1"
- local sha1=$(git rev-parse HEAD)
- echo "Searching for tag $_tag..."
- if [ -n "$DEPTH" ]; then
- local ref=$(git ls-remote $REMOTE_PLD "refs/tags/$_tag" | cut -c -40)
- else
- local ref=$(git show-ref -s "refs/tags/$_tag")
- fi
- [ -z "$ref" ] && return 0
- [ "$ref" = "$sha1" ] || Exit_error err_tag_exists "$_tag"
- return 1
-}
-
-make_tagver() {
+make_pkgrev() {
if [ -n "$DEBUG" ]; then
set -x
set -v
fi
- # Check whether first character of PACKAGE_NAME is legal for tag name
- if [ -z "${PACKAGE_NAME##[_0-9]*}" -a -z "$TAG_PREFIX" ]; then
- TAG_PREFIX=tag_
- fi
-
- # NOTE: CVS tags may must not contain the characters `$,.:;@'
- TAGVER=$(echo $TAG_PREFIX$PACKAGE_NAME-$PACKAGE_VERSION-$PACKAGE_RELEASE)
+ TAGVER=$(echo $PKGREVS_PREFIX$PACKAGE_NAME-$PACKAGE_VERSION-$PACKAGE_RELEASE)
# Remove @kernel.version_release from TAGVER because tagging sources
# could occur with different kernel-headers than kernel-headers used at build time.
echo -n "$TAGVER"
}
-tag_files() {
- if [ -n "$DEBUG" ]; then
- set -x
- set -v
- fi
-
- echo "Version: $PACKAGE_VERSION"
- echo "Release: $PACKAGE_RELEASE"
-
- local _tag
- if [ "$TAG_VERSION" = "yes" ]; then
- _tag=`make_tagver`
- fi
- if [ -n "$TAG" ]; then
- _tag="$TAG"
- fi
- echo "tag: $_tag"
-
- local OPTIONS="tag $CVS_FORCE"
-
- cd "$PACKAGE_DIR"
-
- if tag_exist $_tag || [ -n "$CVS_FORCE" ]; then
- update_shell_title "tag sources: $_tag"
- git $OPTIONS $_tag || exit
- git push $IPOPT $CVS_FORCE $REMOTE_PLD tag $_tag || Exit_error err_remote_problem $REMOTE_PLD
- else
- echo "Tag $_tag already exists and points to the same commit"
- fi
-}
-
get_pkgrev() {
[ -z "$1" ] && return 1
local _tmp=$(mktemp /tmp/.builder-XXXX)
set_pkgrev() {
local _tag
parse_spec "$1"
- if [ "$TAG_VERSION" = "yes" ]; then
- _tag=`make_tagver`
- fi
- if [ -n "$TAG" ]; then
- _tag="$TAG"
- fi
+ _tag=`make_pkgrev`
echo "Writing git revision for tag $_tag"
local _tmp=$(mktemp /tmp/.builder-XXXX)
rm $_tmp 2>/dev/null
rm $_tmp 2>/dev/null
[ "$(get_pkgrev "$_tag")" = "$CVSTAG" ] && return 0
echo "$result" | grep -q -E "^OK$" && return 0
- echo "$result" | grep -q -E "^EXISTS$" && Exit_error err_tag_exists "$_tag"
+ echo "$result" | grep -q -E "^EXISTS$" && Exit_error err_pkgrev_exists "$_tag"
Exit_error err_pkgrev_set
}
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
+ if grep -q -E '(lib/(systemd|binfmt.d|sysctl.d|sysusers.d|tmpfiles.d)|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
# 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
# w32codec-installer license_agreement
# php +mysqli
# ---
- if [ -f $HOME/.distbcond ] || ([ -n $HOME_ETC ] && [ -f $HOME_ETC/.distbcond ]); then
- :
- else
- return
+
+ local distbcond=$HOME/.distbcond
+
+ echo "Updating .distbcond"
+ wget -q --no-check-certificate $DISTBCOND_URL -O "$distbcond"
+ if [ $? -ne 0 ]; then
+ Exit_error err_distbcond_update
+ fi
+ DISTBCOND_MD5=$(grep -E "^# MD5 " "$distbcond" | cut -d ' ' -f 3)
+ DISTBCOND_MD5_LOCAL=$(grep -v -E "^#" "$distbcond" | md5sum | cut -d ' ' -f 1)
+ if [ "$DISTBCOND_MD5" != "$DISTBCOND_MD5_LOCAL" ]; then
+ rm -f "$distbcond"
+ Exit_error err_distbcond_update
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
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
-su | --source-urls)
COMMAND="list-sources-urls"
shift ;;
- -Tvs | --tag-version-stable )
- COMMAND="tag"
- TAG="STABLE"
- TAG_VERSION="yes"
- shift;;
- -Ts | --tag-stable )
- COMMAND="tag"
- TAG="STABLE"
- TAG_VERSION="no"
- shift;;
- -Tv | --tag-version )
- COMMAND="tag"
- TAG=""
- TAG_VERSION="yes"
- shift;;
- -Tp | --tag-prefix )
- TAG_PREFIX="$2"
- shift 2;;
- -tt | --test-tag )
- TEST_TAG="yes"
- shift;;
- -T | --tag )
- COMMAND="tag"
- shift
- TAG="$1"
- TAG_VERSION="no"
- shift;;
-ir | --integer-release-only )
INTEGER_RELEASE="yes"
shift;;
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)
fi
fi
- # ./builder -bs test.spec -r AC-branch -Tp auto-ac- -tt
- if [ -n "$TEST_TAG" ]; then
- local TAGVER=`
- make_tagver`
- tag_exist $TAGVER || [ $TAGVER = $CVSTAG ] || Exit_error err_tag_exists $TAGVER
- # check also tags created in CVS
- local TAGVER_CVS=$(echo $TAGVER | tr '[.@]' '[_#]')
- local CVSTAG_CVS=$(echo $CVSTAG | tr '[.@]' '[_#]')
- tag_exist $TAGVER_CVS || [ $TAGVER_CVS = $CVSTAG_CVS ] \
- || Exit_error err_tag_exists $TAGVER_CVS
- # - do not allow to build from HEAD when XX-branch exists
- TREE_PREFIX=$(echo "$TAG_PREFIX" | sed -e 's#^auto/\([a-zA-Z]\+\)/.*#\1#g')
- if [ "$TAGVER" != "$CVSTAG" -a "$TAGVER_CVS" != "$CVSTAG" -a "$TREE_PREFIX" != "$TAG_PREFIX" ]; then
- TAG_BRANCH="${TREE_PREFIX}-branch"
- if [ -n "$DEPTH" ]; then
- cmd_branches="git ls-remote --heads"
- ref_prefix=refs/heads
- else
- cmd_branches="git show-ref"
- ref_prefix=refs/remotes/${REMOTE_PLD}
- fi
- TAG_STATUS=$($cmd_branches | grep -i "${ref_prefix}/$TAG_BRANCH$" | cut -c'-40')
- if [ -n "$TAG_STATUS" -a "$TAG_STATUS" != $(git rev-parse "$CVSTAG") ]; then
- Exit_error err_branch_exists "$TAG_STATUS"
- fi
- fi
-
- fi
-
if [ -n "$NOSOURCE0" ] ; then
SOURCES=`echo $SOURCES | xargs | sed -e 's/[^ ]*//'`
fi
fi
update_md5 $SOURCES $PATCHES
;;
- "tag" )
- NOURLS=1
- NODIST="yes"
- init_builder
- if [ -z "$SPECFILE" ]; then
- Exit_error err_no_spec_in_cmdl
- fi
-
- parse_spec
- if [ ! -d .git ]; then
- echo "No git reposiotory" >&2
- exit 101
- fi
- tag_files
- ;;
"mr-proper" )
mr_proper
;;