mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2025-02-06 10:59:21 +00:00
Implement "milestones" for packages
Also get rid of dependency on GNU sort. Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
parent
5935d586e1
commit
b9af225f58
@ -5,11 +5,19 @@ comment "GNU binutils"
|
|||||||
source "config/versions/binutils.in"
|
source "config/versions/binutils.in"
|
||||||
|
|
||||||
config BINUTILS_HAS_HASH_STYLE
|
config BINUTILS_HAS_HASH_STYLE
|
||||||
default y if BINUTILS_V_2_23_2_or_later || BINUTILS_LINARO_V_2_23_2_2013_10_4_or_later
|
default y if BINUTILS_MS_2_23
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config BINUTILS_HAS_GOLD
|
config BINUTILS_HAS_GOLD
|
||||||
default y if BINUTILS_V_2_23_2_or_later || BINUTILS_LINARO_V_2_23_2_2013_10_4_or_later
|
default y if BINUTILS_MS_2_23
|
||||||
|
bool
|
||||||
|
|
||||||
|
config BINUTILS_HAS_PLUGINS
|
||||||
|
default y if BINUTILS_MS_2_23
|
||||||
|
bool
|
||||||
|
|
||||||
|
config BINUTILS_HAS_PKGVERSION_BUGURL
|
||||||
|
default y if BINUTILS_MS_2_23
|
||||||
bool
|
bool
|
||||||
|
|
||||||
# gold only suports the listed architectures
|
# gold only suports the listed architectures
|
||||||
@ -25,14 +33,6 @@ config BINUTILS_GOLD_SUPPORT
|
|||||||
depends on BINUTILS_GOLD_SUPPORTS_ARCH
|
depends on BINUTILS_GOLD_SUPPORTS_ARCH
|
||||||
depends on ! STATIC_TOOLCHAIN
|
depends on ! STATIC_TOOLCHAIN
|
||||||
|
|
||||||
config BINUTILS_HAS_PLUGINS
|
|
||||||
default y if BINUTILS_V_2_23_2_or_later || BINUTILS_LINARO_V_2_23_2_2013_10_4_or_later
|
|
||||||
bool
|
|
||||||
|
|
||||||
config BINUTILS_HAS_PKGVERSION_BUGURL
|
|
||||||
default y if BINUTILS_V_2_23_2_or_later || BINUTILS_LINARO_V_2_23_2_2013_10_4_or_later
|
|
||||||
bool
|
|
||||||
|
|
||||||
# Force using the BFD linker if needed. There are two options:
|
# Force using the BFD linker if needed. There are two options:
|
||||||
# - For some C libraries (eg. glibc at least), BFD ld must be
|
# - For some C libraries (eg. glibc at least), BFD ld must be
|
||||||
# built and be selected by default.
|
# built and be selected by default.
|
||||||
|
@ -32,7 +32,7 @@ config CC_GCC_GOLD
|
|||||||
default y
|
default y
|
||||||
|
|
||||||
config CC_GCC_HAS_LIBMPX
|
config CC_GCC_HAS_LIBMPX
|
||||||
depends on GCC_V_5_4_0_or_later || GCC_LINARO_V_5_4_2017_01_or_later
|
depends on GCC_MS_5
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config CC_LANG_JAVA_USE_ECJ
|
config CC_LANG_JAVA_USE_ECJ
|
||||||
|
@ -186,9 +186,10 @@ run_template()
|
|||||||
config_dir=config/versions
|
config_dir=config/versions
|
||||||
template=maintainer/kconfig-versions.template
|
template=maintainer/kconfig-versions.template
|
||||||
|
|
||||||
declare -A pkg_forks
|
declare -A pkg_forks pkg_milestones
|
||||||
declare -a pkg_masters pkg_nforks pkg_all
|
declare -a pkg_masters pkg_nforks pkg_all
|
||||||
|
|
||||||
|
# Convert the argument to a Kconfig-style macro
|
||||||
kconfigize()
|
kconfigize()
|
||||||
{
|
{
|
||||||
local v="${1}"
|
local v="${1}"
|
||||||
@ -197,6 +198,158 @@ kconfigize()
|
|||||||
echo "${v^^}"
|
echo "${v^^}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Helper for cmp_versions: compare an upstream/debian portion of
|
||||||
|
# a version. Returns 0 if equal, otherwise echoes "-1" or "1" and
|
||||||
|
# returns 1.
|
||||||
|
equal_versions()
|
||||||
|
{
|
||||||
|
local v1="${1}"
|
||||||
|
local v2="${2}"
|
||||||
|
local p1 p2
|
||||||
|
|
||||||
|
# Compare alternating non-numerical/numerical portions, until
|
||||||
|
# non-equal portion is found or either string is exhausted.
|
||||||
|
while [ -n "${v1}" -a -n "${v2}" ]; do
|
||||||
|
# Find non-numerical portions and compare lexicographically
|
||||||
|
p1="${v1%%[0-9]*}"
|
||||||
|
p2="${v2%%[0-9]*}"
|
||||||
|
v1="${v1#${p1}}"
|
||||||
|
v2="${v2#${p2}}"
|
||||||
|
#debug "lex [${p1}] v [${p2}]"
|
||||||
|
if [ "${p1}" \< "${p2}" ]; then
|
||||||
|
echo "-1"
|
||||||
|
return 1
|
||||||
|
elif [ "${p1}" \> "${p2}" ]; then
|
||||||
|
echo "1"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
#debug "rem [${v1}] v [${v2}]"
|
||||||
|
# Find numerical portions and compare numerically
|
||||||
|
p1="${v1%%[^0-9]*}"
|
||||||
|
p2="${v2%%[^0-9]*}"
|
||||||
|
v1="${v1#${p1}}"
|
||||||
|
v2="${v2#${p2}}"
|
||||||
|
#debug "num [${p1}] v [${p2}]"
|
||||||
|
if [ "${p1:-0}" -lt "${p2:-0}" ]; then
|
||||||
|
echo "-1"
|
||||||
|
return 1
|
||||||
|
elif [ "${p1:-0}" -gt "${p2:-0}" ]; then
|
||||||
|
echo "1"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
#debug "rem [${v1}] v [${v2}]"
|
||||||
|
done
|
||||||
|
if [ -n "${v1}" ]; then
|
||||||
|
echo "1"
|
||||||
|
return 1
|
||||||
|
elif [ -n "${v2}" ]; then
|
||||||
|
echo "-1"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Compare two version strings, similar to sort -V. But we don't
|
||||||
|
# want to depend on GNU sort availability on the host.
|
||||||
|
# See http://www.debian.org/doc/debian-policy/ch-controlfields.html
|
||||||
|
# for description of what the version is expected to be.
|
||||||
|
# Returns "-1", "0" or "1" if first version is earlier, same or
|
||||||
|
# later than the second.
|
||||||
|
cmp_versions()
|
||||||
|
{
|
||||||
|
local v1="${1}"
|
||||||
|
local v2="${2}"
|
||||||
|
local e1=0 e2=0 u1 u2 d1=0 d2=0
|
||||||
|
|
||||||
|
# Case-insensitive comparison
|
||||||
|
v1="${v1^^}"
|
||||||
|
v2="${v2^^}"
|
||||||
|
|
||||||
|
# Find if the versions contain epoch part
|
||||||
|
case "${v1}" in
|
||||||
|
*:*)
|
||||||
|
e1="${v1%%:*}"
|
||||||
|
v1="${v1#*:}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case "${v2}" in
|
||||||
|
*:*)
|
||||||
|
e2="${v2%%:*}"
|
||||||
|
v2="${v2#*:}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Compare epochs numerically
|
||||||
|
if [ "${e1}" -lt "${e2}" ]; then
|
||||||
|
echo "-1"
|
||||||
|
return
|
||||||
|
elif [ "${e1}" -gt "${e2}" ]; then
|
||||||
|
echo "1"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find if the version contains a "debian" part.
|
||||||
|
# v1/v2 will now contain "upstream" part.
|
||||||
|
case "${v1}" in
|
||||||
|
*-*)
|
||||||
|
d1=${v1##*-}
|
||||||
|
v1=${v1%-*}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case "${v2}" in
|
||||||
|
*-*)
|
||||||
|
d2=${v2##*-}
|
||||||
|
v2=${v2%-*}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Compare upstream
|
||||||
|
if equal_versions "${v1}" "${v2}" && equal_versions "${d1}" "${d2}"; then
|
||||||
|
echo "0"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sort versions, descending
|
||||||
|
sort_versions()
|
||||||
|
{
|
||||||
|
local sorted
|
||||||
|
local remains="$*"
|
||||||
|
local next_remains
|
||||||
|
local v vx found
|
||||||
|
|
||||||
|
while [ -n "${remains}" ]; do
|
||||||
|
#debug "Sorting [${remains}]"
|
||||||
|
for v in ${remains}; do
|
||||||
|
found=yes
|
||||||
|
next_remains=
|
||||||
|
#debug "Candidate ${v}"
|
||||||
|
for vx in ${remains}; do
|
||||||
|
#debug "${v} vs ${vx} :: `cmp_versions ${v} ${vx}`"
|
||||||
|
case `cmp_versions ${v} ${vx}` in
|
||||||
|
1)
|
||||||
|
next_remains+=" ${vx}"
|
||||||
|
;;
|
||||||
|
0)
|
||||||
|
;;
|
||||||
|
-1)
|
||||||
|
found=no
|
||||||
|
#debug "Bad: earlier than ${vx}"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if [ "${found}" = "yes" ]; then
|
||||||
|
# $v is less than all other members in next_remains
|
||||||
|
sorted+=" ${v}"
|
||||||
|
remains="${next_remains}"
|
||||||
|
#debug "Good candidate ${v} sorted [${sorted}] remains [${remains}]"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
echo "${sorted}"
|
||||||
|
}
|
||||||
|
|
||||||
read_file()
|
read_file()
|
||||||
{
|
{
|
||||||
local l
|
local l
|
||||||
@ -232,6 +385,7 @@ find_forks()
|
|||||||
else
|
else
|
||||||
pkg_nforks[${1}]=$[pkg_nforks[${1}]+1]
|
pkg_nforks[${1}]=$[pkg_nforks[${1}]+1]
|
||||||
pkg_forks[${1}]="${1}${pkg_forks[${1}]}"
|
pkg_forks[${1}]="${1}${pkg_forks[${1}]}"
|
||||||
|
pkg_milestones[${1}]=`sort_versions ${info[milestones]}`
|
||||||
pkg_masters+=( "${1}" )
|
pkg_masters+=( "${1}" )
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -271,8 +425,8 @@ enter_fork()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
versions=`cd packages/${fork} && \
|
versions=`cd packages/${fork} && \
|
||||||
for f in */version.desc; do [ -r "${f}" ] && echo "${f%/version.desc}"; done | \
|
for f in */version.desc; do [ -r "${f}" ] && echo "${f%/version.desc}"; done`
|
||||||
sort -rV | xargs echo`
|
versions=`sort_versions ${versions}`
|
||||||
|
|
||||||
set_iter version ${versions}
|
set_iter version ${versions}
|
||||||
info[all_versions]=${versions}
|
info[all_versions]=${versions}
|
||||||
@ -292,10 +446,17 @@ enter_fork()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_latest_milestone()
|
||||||
|
{
|
||||||
|
if [ `cmp_versions ${info[ms]} ${info[ver]}` -le 0 -a -z "${milestone}" ]; then
|
||||||
|
milestone=${info[ms_kcfg]}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
enter_version()
|
enter_version()
|
||||||
{
|
{
|
||||||
local version="${1}"
|
local version="${1}"
|
||||||
local tmp
|
local tmp milestone
|
||||||
|
|
||||||
# Set defaults
|
# Set defaults
|
||||||
info[obsolete]=
|
info[obsolete]=
|
||||||
@ -304,9 +465,28 @@ enter_version()
|
|||||||
eval `read_version_desc ${info[name]} ${version}`
|
eval `read_version_desc ${info[name]} ${version}`
|
||||||
info[ver]=${version}
|
info[ver]=${version}
|
||||||
info[kcfg]=`kconfigize ${version}`
|
info[kcfg]=`kconfigize ${version}`
|
||||||
|
# TBD do we need "prev" version?
|
||||||
tmp=" ${info[all_versions]} "
|
tmp=" ${info[all_versions]} "
|
||||||
tmp=${tmp##* ${version} }
|
tmp=${tmp##* ${version} }
|
||||||
info[prev]=`kconfigize ${tmp%% *}`
|
info[prev]=`kconfigize ${tmp%% *}`
|
||||||
|
|
||||||
|
# Find the latest milestone preceding this version
|
||||||
|
milestone=
|
||||||
|
do_foreach milestone set_latest_milestone
|
||||||
|
info[milestone]=${milestone}
|
||||||
|
}
|
||||||
|
|
||||||
|
enter_milestone()
|
||||||
|
{
|
||||||
|
local ms="${1}"
|
||||||
|
local tmp
|
||||||
|
|
||||||
|
info[ms]=${ms}
|
||||||
|
info[ms_kcfg]=`kconfigize ${ms}`
|
||||||
|
|
||||||
|
tmp=" ${info[all_milestones]} "
|
||||||
|
tmp=${tmp##* ${ms} }
|
||||||
|
info[ms_prev]=`kconfigize ${tmp%% *}`
|
||||||
}
|
}
|
||||||
|
|
||||||
rm -rf "${config_dir}"
|
rm -rf "${config_dir}"
|
||||||
@ -338,8 +518,11 @@ for p in "${pkg_masters[@]}"; do
|
|||||||
[master]=${p} \
|
[master]=${p} \
|
||||||
[masterpfx]=`kconfigize ${p}` \
|
[masterpfx]=`kconfigize ${p}` \
|
||||||
[nforks]=${pkg_nforks[${p}]} \
|
[nforks]=${pkg_nforks[${p}]} \
|
||||||
|
[all_milestones]=${pkg_milestones[${p}]} \
|
||||||
)
|
)
|
||||||
set_iter fork ${pkg_forks[${p}]}
|
set_iter fork ${pkg_forks[${p}]}
|
||||||
|
set_iter milestone ${pkg_milestones[${p}]}
|
||||||
|
|
||||||
# TBD check that origins are set for all forks if there is more than one? or is it automatic because of a missing variable check?
|
# TBD check that origins are set for all forks if there is more than one? or is it automatic because of a missing variable check?
|
||||||
# TBD get rid of the "origin" completely and use just the fork name?
|
# TBD get rid of the "origin" completely and use just the fork name?
|
||||||
run_template "${template}"
|
run_template "${template}"
|
||||||
|
@ -56,7 +56,7 @@ config @@pfx@@_SRC_DEVEL
|
|||||||
bool "Vendor repository"
|
bool "Vendor repository"
|
||||||
help
|
help
|
||||||
Check out from vendor repository at:
|
Check out from vendor repository at:
|
||||||
@@repository@@
|
@@repository_url@@
|
||||||
|
|
||||||
#!end-if
|
#!end-if
|
||||||
config @@pfx@@_SRC_CUSTOM
|
config @@pfx@@_SRC_CUSTOM
|
||||||
@ -112,7 +112,15 @@ choice
|
|||||||
#!foreach version
|
#!foreach version
|
||||||
config @@pfx@@_V_@@kcfg@@
|
config @@pfx@@_V_@@kcfg@@
|
||||||
bool "@@ver@@"
|
bool "@@ver@@"
|
||||||
select @@pfx@@_V_@@kcfg@@_or_later
|
#!if [ "@@obsolete@@" = "yes" ]
|
||||||
|
depends on OBSOLETE
|
||||||
|
#!end-if
|
||||||
|
#!if [ "@@experimental@@" = "yes" ]
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
#!end-if
|
||||||
|
#!if [ -n "@@milestone@@" ]
|
||||||
|
select @@masterpfx@@_MS_@@milestone@@
|
||||||
|
#!end-if
|
||||||
|
|
||||||
#!end-foreach
|
#!end-foreach
|
||||||
endchoice
|
endchoice
|
||||||
@ -128,13 +136,13 @@ config @@pfx@@_VERSION
|
|||||||
#!end-foreach
|
#!end-foreach
|
||||||
default "unknown"
|
default "unknown"
|
||||||
|
|
||||||
#!foreach version
|
#!end-foreach
|
||||||
config @@pfx@@_V_@@kcfg@@_or_later
|
|
||||||
|
#!foreach milestone
|
||||||
|
config @@masterpfx@@_MS_@@ms_kcfg@@
|
||||||
bool
|
bool
|
||||||
#!if [ -n "@@prev@@" ]
|
#!if [ -n "@@ms_prev@@" ]
|
||||||
select @@pfx@@_V_@@prev@@_or_later
|
select @@masterpfx@@_MS_@@ms_prev@@
|
||||||
#!end-if
|
#!end-if
|
||||||
|
|
||||||
#!end-foreach
|
#!end-foreach
|
||||||
|
|
||||||
#!end-foreach
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
repository="git git://sourceware.org/git/binutils-gdb.git"
|
repository="git git://sourceware.org/git/binutils-gdb.git"
|
||||||
download_url="TBD other mirrors https://ftp.gnu.org/gnu/binutils/binutils-${version}.${format}"
|
download_url="TBD other mirrors https://ftp.gnu.org/gnu/binutils/binutils-${version}.${format}"
|
||||||
origin="GNU"
|
origin="GNU"
|
||||||
|
milestones="2.23"
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
repository="svn svn://gcc.gnu.org/svn/gcc"
|
repository="svn svn://gcc.gnu.org/svn/gcc"
|
||||||
download_url="TBD other mirrors ftp://ftp.gnu.org/gnu/gcc/gcc-${version}/gcc-${version}.${format}"
|
download_url="TBD other mirrors ftp://ftp.gnu.org/gnu/gcc/gcc-${version}/gcc-${version}.${format}"
|
||||||
origin="GNU"
|
origin="GNU"
|
||||||
|
milestones="5"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user