mirror of
https://github.com/mirror/wget.git
synced 2025-03-29 21:50:16 +08:00
* bootstrap: Update script
This commit is contained in:
parent
98c23153a2
commit
7ba0a44939
244
bootstrap
244
bootstrap
@ -1,10 +1,10 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Print a version string.
|
# Print a version string.
|
||||||
scriptversion=2021-04-11.09; # UTC
|
scriptversion=2022-01-26.05; # UTC
|
||||||
|
|
||||||
# Bootstrap this package from checked-out sources.
|
# Bootstrap this package from checked-out sources.
|
||||||
|
|
||||||
# Copyright (C) 2003-2021 Free Software Foundation, Inc.
|
# Copyright (C) 2003-2022 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -313,6 +313,116 @@ find_tool ()
|
|||||||
eval "export $find_tool_envvar"
|
eval "export $find_tool_envvar"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Strip blank and comment lines to leave significant entries.
|
||||||
|
gitignore_entries() {
|
||||||
|
sed '/^#/d; /^$/d' "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# If $STR is not already on a line by itself in $FILE, insert it at the start.
|
||||||
|
# Entries are inserted at the start of the ignore list to ensure existing
|
||||||
|
# entries starting with ! are not overridden. Such entries support
|
||||||
|
# whitelisting exceptions after a more generic blacklist pattern.
|
||||||
|
insert_if_absent() {
|
||||||
|
file=$1
|
||||||
|
str=$2
|
||||||
|
test -f $file || touch $file
|
||||||
|
test -r $file || die "Error: failed to read ignore file: $file"
|
||||||
|
duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
|
||||||
|
if [ "$duplicate_entries" ] ; then
|
||||||
|
die "Error: Duplicate entries in $file: " $duplicate_entries
|
||||||
|
fi
|
||||||
|
linesold=$(gitignore_entries $file | wc -l)
|
||||||
|
linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
|
||||||
|
if [ $linesold != $linesnew ] ; then
|
||||||
|
{ echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
|
||||||
|
|| die "insert_if_absent $file $str: failed"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
|
||||||
|
# insert_if_absent.
|
||||||
|
insert_vc_ignore() {
|
||||||
|
vc_ignore_file="$1"
|
||||||
|
pattern="$2"
|
||||||
|
case $vc_ignore_file in
|
||||||
|
*.gitignore)
|
||||||
|
# A .gitignore entry that does not start with '/' applies
|
||||||
|
# recursively to subdirectories, so prepend '/' to every
|
||||||
|
# .gitignore entry.
|
||||||
|
pattern=$(echo "$pattern" | sed s,^,/,);;
|
||||||
|
esac
|
||||||
|
insert_if_absent "$vc_ignore_file" "$pattern"
|
||||||
|
}
|
||||||
|
|
||||||
|
symlink_to_dir()
|
||||||
|
{
|
||||||
|
src=$1/$2
|
||||||
|
dst=${3-$2}
|
||||||
|
|
||||||
|
test -f "$src" && {
|
||||||
|
|
||||||
|
# If the destination directory doesn't exist, create it.
|
||||||
|
# This is required at least for "lib/uniwidth/cjk.h".
|
||||||
|
dst_dir=$(dirname "$dst")
|
||||||
|
if ! test -d "$dst_dir"; then
|
||||||
|
mkdir -p "$dst_dir"
|
||||||
|
|
||||||
|
# If we've just created a directory like lib/uniwidth,
|
||||||
|
# tell version control system(s) it's ignorable.
|
||||||
|
# FIXME: for now, this does only one level
|
||||||
|
parent=$(dirname "$dst_dir")
|
||||||
|
for dot_ig in x $vc_ignore; do
|
||||||
|
test $dot_ig = x && continue
|
||||||
|
ig=$parent/$dot_ig
|
||||||
|
insert_vc_ignore $ig "${dst_dir##*/}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $copy; then
|
||||||
|
{
|
||||||
|
test ! -h "$dst" || {
|
||||||
|
echo "$me: rm -f $dst" &&
|
||||||
|
rm -f "$dst"
|
||||||
|
}
|
||||||
|
} &&
|
||||||
|
test -f "$dst" &&
|
||||||
|
cmp -s "$src" "$dst" || {
|
||||||
|
echo "$me: cp -fp $src $dst" &&
|
||||||
|
cp -fp "$src" "$dst"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# Leave any existing symlink alone, if it already points to the source,
|
||||||
|
# so that broken build tools that care about symlink times
|
||||||
|
# aren't confused into doing unnecessary builds. Conversely, if the
|
||||||
|
# existing symlink's timestamp is older than the source, make it afresh,
|
||||||
|
# so that broken tools aren't confused into skipping needed builds. See
|
||||||
|
# <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00326.html>.
|
||||||
|
test -h "$dst" &&
|
||||||
|
src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
|
||||||
|
dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
|
||||||
|
test "$src_i" = "$dst_i" &&
|
||||||
|
both_ls=$(ls -dt "$src" "$dst") &&
|
||||||
|
test "X$both_ls" = "X$dst$nl$src" || {
|
||||||
|
dot_dots=
|
||||||
|
case $src in
|
||||||
|
/*) ;;
|
||||||
|
*)
|
||||||
|
case /$dst/ in
|
||||||
|
*//* | */../* | */./* | /*/*/*/*/*/)
|
||||||
|
die "invalid symlink calculation: $src -> $dst";;
|
||||||
|
/*/*/*/*/) dot_dots=../../../;;
|
||||||
|
/*/*/*/) dot_dots=../../;;
|
||||||
|
/*/*/) dot_dots=../;;
|
||||||
|
esac;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "$me: ln -fs $dot_dots$src $dst" &&
|
||||||
|
ln -fs "$dot_dots$src" "$dst"
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Override the default configuration, if necessary.
|
# Override the default configuration, if necessary.
|
||||||
# Make sure that bootstrap.conf is sourced from the current directory
|
# Make sure that bootstrap.conf is sourced from the current directory
|
||||||
# if we were invoked as "sh bootstrap".
|
# if we were invoked as "sh bootstrap".
|
||||||
@ -375,47 +485,6 @@ if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
|
|||||||
die "Bootstrapping from a non-checked-out distribution is risky."
|
die "Bootstrapping from a non-checked-out distribution is risky."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Strip blank and comment lines to leave significant entries.
|
|
||||||
gitignore_entries() {
|
|
||||||
sed '/^#/d; /^$/d' "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# If $STR is not already on a line by itself in $FILE, insert it at the start.
|
|
||||||
# Entries are inserted at the start of the ignore list to ensure existing
|
|
||||||
# entries starting with ! are not overridden. Such entries support
|
|
||||||
# whitelisting exceptions after a more generic blacklist pattern.
|
|
||||||
insert_if_absent() {
|
|
||||||
file=$1
|
|
||||||
str=$2
|
|
||||||
test -f $file || touch $file
|
|
||||||
test -r $file || die "Error: failed to read ignore file: $file"
|
|
||||||
duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
|
|
||||||
if [ "$duplicate_entries" ] ; then
|
|
||||||
die "Error: Duplicate entries in $file: " $duplicate_entries
|
|
||||||
fi
|
|
||||||
linesold=$(gitignore_entries $file | wc -l)
|
|
||||||
linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
|
|
||||||
if [ $linesold != $linesnew ] ; then
|
|
||||||
{ echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
|
|
||||||
|| die "insert_if_absent $file $str: failed"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
|
|
||||||
# insert_if_absent.
|
|
||||||
insert_vc_ignore() {
|
|
||||||
vc_ignore_file="$1"
|
|
||||||
pattern="$2"
|
|
||||||
case $vc_ignore_file in
|
|
||||||
*.gitignore)
|
|
||||||
# A .gitignore entry that does not start with '/' applies
|
|
||||||
# recursively to subdirectories, so prepend '/' to every
|
|
||||||
# .gitignore entry.
|
|
||||||
pattern=$(echo "$pattern" | sed s,^,/,);;
|
|
||||||
esac
|
|
||||||
insert_if_absent "$vc_ignore_file" "$pattern"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
|
# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
|
||||||
found_aux_dir=no
|
found_aux_dir=no
|
||||||
grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
|
grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
|
||||||
@ -694,9 +763,25 @@ if $use_gnulib; then
|
|||||||
shallow=
|
shallow=
|
||||||
if test -z "$GNULIB_REVISION"; then
|
if test -z "$GNULIB_REVISION"; then
|
||||||
git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
|
git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
|
||||||
fi
|
|
||||||
git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \
|
git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \
|
||||||
|| cleanup_gnulib
|
|| cleanup_gnulib
|
||||||
|
else
|
||||||
|
git fetch -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
|
||||||
|
mkdir -p "$gnulib_path"
|
||||||
|
# Only want a shallow checkout of $GNULIB_REVISION, but git does not
|
||||||
|
# support cloning by commit hash. So attempt a shallow fetch by commit
|
||||||
|
# hash to minimize the amount of data downloaded and changes needed to
|
||||||
|
# be processed, which can drastically reduce download and processing
|
||||||
|
# time for checkout. If the fetch by commit fails, a shallow fetch can
|
||||||
|
# not be performed because we do not know what the depth of the commit
|
||||||
|
# is without fetching all commits. So fallback to fetching all commits.
|
||||||
|
git -C "$gnulib_path" init
|
||||||
|
git -C "$gnulib_path" remote add origin ${GNULIB_URL:-$default_gnulib_url}
|
||||||
|
git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \
|
||||||
|
|| git -C "$gnulib_path" fetch origin \
|
||||||
|
|| cleanup_gnulib
|
||||||
|
git -C "$gnulib_path" reset --hard FETCH_HEAD
|
||||||
|
fi
|
||||||
|
|
||||||
trap - 1 2 13 15
|
trap - 1 2 13 15
|
||||||
fi
|
fi
|
||||||
@ -813,75 +898,6 @@ case $SKIP_PO in
|
|||||||
fi;;
|
fi;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
symlink_to_dir()
|
|
||||||
{
|
|
||||||
src=$1/$2
|
|
||||||
dst=${3-$2}
|
|
||||||
|
|
||||||
test -f "$src" && {
|
|
||||||
|
|
||||||
# If the destination directory doesn't exist, create it.
|
|
||||||
# This is required at least for "lib/uniwidth/cjk.h".
|
|
||||||
dst_dir=$(dirname "$dst")
|
|
||||||
if ! test -d "$dst_dir"; then
|
|
||||||
mkdir -p "$dst_dir"
|
|
||||||
|
|
||||||
# If we've just created a directory like lib/uniwidth,
|
|
||||||
# tell version control system(s) it's ignorable.
|
|
||||||
# FIXME: for now, this does only one level
|
|
||||||
parent=$(dirname "$dst_dir")
|
|
||||||
for dot_ig in x $vc_ignore; do
|
|
||||||
test $dot_ig = x && continue
|
|
||||||
ig=$parent/$dot_ig
|
|
||||||
insert_vc_ignore $ig "${dst_dir##*/}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $copy; then
|
|
||||||
{
|
|
||||||
test ! -h "$dst" || {
|
|
||||||
echo "$me: rm -f $dst" &&
|
|
||||||
rm -f "$dst"
|
|
||||||
}
|
|
||||||
} &&
|
|
||||||
test -f "$dst" &&
|
|
||||||
cmp -s "$src" "$dst" || {
|
|
||||||
echo "$me: cp -fp $src $dst" &&
|
|
||||||
cp -fp "$src" "$dst"
|
|
||||||
}
|
|
||||||
else
|
|
||||||
# Leave any existing symlink alone, if it already points to the source,
|
|
||||||
# so that broken build tools that care about symlink times
|
|
||||||
# aren't confused into doing unnecessary builds. Conversely, if the
|
|
||||||
# existing symlink's timestamp is older than the source, make it afresh,
|
|
||||||
# so that broken tools aren't confused into skipping needed builds. See
|
|
||||||
# <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00326.html>.
|
|
||||||
test -h "$dst" &&
|
|
||||||
src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
|
|
||||||
dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
|
|
||||||
test "$src_i" = "$dst_i" &&
|
|
||||||
both_ls=$(ls -dt "$src" "$dst") &&
|
|
||||||
test "X$both_ls" = "X$dst$nl$src" || {
|
|
||||||
dot_dots=
|
|
||||||
case $src in
|
|
||||||
/*) ;;
|
|
||||||
*)
|
|
||||||
case /$dst/ in
|
|
||||||
*//* | */../* | */./* | /*/*/*/*/*/)
|
|
||||||
die "invalid symlink calculation: $src -> $dst";;
|
|
||||||
/*/*/*/*/) dot_dots=../../../;;
|
|
||||||
/*/*/*/) dot_dots=../../;;
|
|
||||||
/*/*/) dot_dots=../;;
|
|
||||||
esac;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "$me: ln -fs $dot_dots$src $dst" &&
|
|
||||||
ln -fs "$dot_dots$src" "$dst"
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
version_controlled_file() {
|
version_controlled_file() {
|
||||||
parent=$1
|
parent=$1
|
||||||
file=$2
|
file=$2
|
||||||
@ -1093,7 +1109,7 @@ bootstrap_epilogue
|
|||||||
|
|
||||||
echo "$0: done. Now you can run './configure'."
|
echo "$0: done. Now you can run './configure'."
|
||||||
|
|
||||||
# Local variables:
|
# Local Variables:
|
||||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||||
# time-stamp-start: "scriptversion="
|
# time-stamp-start: "scriptversion="
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
Loading…
Reference in New Issue
Block a user