mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2025-06-18 15:28:10 +00:00
Consider it success if DoForceRmdir removes only the content
Fixes #929. Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
@ -9,12 +9,6 @@ config CONFIGURE_has_wget
|
|||||||
config CONFIGURE_has_curl
|
config CONFIGURE_has_curl
|
||||||
@KCONFIG_curl@
|
@KCONFIG_curl@
|
||||||
|
|
||||||
config CONFIGURE_has_stat_flavor_BSD
|
|
||||||
@KCONFIG_stat_flavor_BSD@
|
|
||||||
|
|
||||||
config CONFIGURE_has_stat_flavor_GNU
|
|
||||||
@KCONFIG_stat_flavor_GNU@
|
|
||||||
|
|
||||||
config CONFIGURE_has_make_3_81_or_newer
|
config CONFIGURE_has_make_3_81_or_newer
|
||||||
@KCONFIG_make_3_81_or_newer@
|
@KCONFIG_make_3_81_or_newer@
|
||||||
|
|
||||||
|
@ -138,8 +138,6 @@ AC_CHECK_PROGS([curl], [curl])
|
|||||||
CTNG_SET_KCONFIG_OPTION([curl])
|
CTNG_SET_KCONFIG_OPTION([curl])
|
||||||
AC_SUBST([curl])
|
AC_SUBST([curl])
|
||||||
|
|
||||||
CTNG_PROG_STAT
|
|
||||||
|
|
||||||
CTNG_CPU_COUNT
|
CTNG_CPU_COUNT
|
||||||
|
|
||||||
CTNG_PATH_TOOL_REQ([PATCH], [gpatch patch], [patch])
|
CTNG_PATH_TOOL_REQ([PATCH], [gpatch patch], [patch])
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
# Check that stat(1) is present and determine the syntax for the format
|
|
||||||
# string (BSD or GNU). Defines ac_cv_stat_flavor to either GNU or BSD;
|
|
||||||
# and evaluates either IF-GNU or IF-BSD expression.
|
|
||||||
# CTNG_PROG_STAT([IF-GNU], [IF-BSD])
|
|
||||||
AC_DEFUN([CTNG_PROG_STAT_FORMAT],
|
|
||||||
[AC_CACHE_CHECK([whether stat takes GNU or BSD format],
|
|
||||||
[ctng_cv_stat_flavor],
|
|
||||||
[touch conftest
|
|
||||||
chmod 642 conftest
|
|
||||||
attr_bsd=$(stat -f '%Lp' conftest 2>conftest.stderr.bsd)
|
|
||||||
CTNG_MSG_LOG_ENVVAR([attr_bsd], [stat -f output])
|
|
||||||
CTNG_MSG_LOG_FILE([conftest.stderr.bsd])
|
|
||||||
attr_gnu=$(stat -c '%a' conftest 2>conftest.stderr.gnu)
|
|
||||||
CTNG_MSG_LOG_ENVVAR([attr_gnu], [stat -c output])
|
|
||||||
CTNG_MSG_LOG_FILE([conftest.stderr.gnu])
|
|
||||||
rm -f conftest conftest.stderr.*
|
|
||||||
AS_IF([test "$attr_bsd" = "642"],
|
|
||||||
[ctng_cv_stat_flavor=BSD],
|
|
||||||
[test "$attr_gnu" = "642"],
|
|
||||||
[ctng_cv_stat_flavor=GNU],
|
|
||||||
[ctng_cv_stat_flavor=unknown])])
|
|
||||||
AS_IF([test "$ctng_cv_stat_flavor" = "GNU" ], [$1],
|
|
||||||
[test "$ctng_cv_stat_flavor" = "BSD" ], [$2],
|
|
||||||
[AC_MSG_ERROR([cannot determine stat(1) format option])])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([CTNG_PROG_STAT],
|
|
||||||
[AX_REQUIRE_DEFINED([CTNG_CHECK_PROGS_REQ])
|
|
||||||
CTNG_CHECK_PROGS_REQ([stat], [stat])
|
|
||||||
CTNG_PROG_STAT_FORMAT(
|
|
||||||
[CTNG_SET_KCONFIG_OPTION([stat_flavor_GNU], [y])
|
|
||||||
CTNG_SET_KCONFIG_OPTION([stat_flavor_BSD])],
|
|
||||||
[CTNG_SET_KCONFIG_OPTION([stat_flavor_BSD], [y])
|
|
||||||
CTNG_SET_KCONFIG_OPTION([stat_flavor_GNU])])
|
|
||||||
])
|
|
@ -253,11 +253,6 @@ if [ "${CT_SAVE_TARBALLS}" = "y" \
|
|||||||
CT_SAVE_TARBALLS=
|
CT_SAVE_TARBALLS=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check now if we can write to the destination directory:
|
|
||||||
if [ -d "${CT_PREFIX_DIR}" ]; then
|
|
||||||
CT_TestAndAbort "Destination directory '${CT_PREFIX_DIR}' is not removable" ! -w $(dirname "${CT_PREFIX_DIR}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Good, now grab a bit of informations on the system we're being run on,
|
# Good, now grab a bit of informations on the system we're being run on,
|
||||||
# just in case something goes awok, and it's not our fault:
|
# just in case something goes awok, and it's not our fault:
|
||||||
CT_SYS_USER=$(id -un)
|
CT_SYS_USER=$(id -un)
|
||||||
|
@ -582,7 +582,8 @@ CT_Popd() {
|
|||||||
|
|
||||||
# Create a dir and pushd into it
|
# Create a dir and pushd into it
|
||||||
# Usage: CT_mkdir_pushd <dir/to/create>
|
# Usage: CT_mkdir_pushd <dir/to/create>
|
||||||
CT_mkdir_pushd() {
|
CT_mkdir_pushd()
|
||||||
|
{
|
||||||
local dir="${1}"
|
local dir="${1}"
|
||||||
|
|
||||||
mkdir -p "${dir}"
|
mkdir -p "${dir}"
|
||||||
@ -592,7 +593,8 @@ CT_mkdir_pushd() {
|
|||||||
# Creates a temporary directory
|
# Creates a temporary directory
|
||||||
# $1: variable to assign to
|
# $1: variable to assign to
|
||||||
# Usage: CT_MktempDir foo
|
# Usage: CT_MktempDir foo
|
||||||
CT_MktempDir() {
|
CT_MktempDir()
|
||||||
|
{
|
||||||
# Some mktemp do not allow more than 6 Xs
|
# Some mktemp do not allow more than 6 Xs
|
||||||
eval "$1"=$(mktemp -q -d "${CT_BUILD_DIR}/tmp.XXXXXX")
|
eval "$1"=$(mktemp -q -d "${CT_BUILD_DIR}/tmp.XXXXXX")
|
||||||
CT_TestOrAbort "Could not make temporary directory" -n "${!1}" -a -d "${!1}"
|
CT_TestOrAbort "Could not make temporary directory" -n "${!1}" -a -d "${!1}"
|
||||||
@ -602,26 +604,29 @@ CT_MktempDir() {
|
|||||||
|
|
||||||
# Removes one or more directories, even if it is read-only, or its parent is
|
# Removes one or more directories, even if it is read-only, or its parent is
|
||||||
# Usage: CT_DoForceRmdir dir [...]
|
# Usage: CT_DoForceRmdir dir [...]
|
||||||
CT_DoForceRmdir() {
|
CT_DoForceRmdir()
|
||||||
|
{
|
||||||
local dir
|
local dir
|
||||||
local mode
|
local cnt
|
||||||
|
|
||||||
for dir in "${@}"; do
|
for dir in "${@}"; do
|
||||||
[ -d "${dir}" ] || continue
|
[ -e "${dir}" ] || continue
|
||||||
case "${CT_CONFIGURE_has_stat_flavor_GNU},${CT_CONFIGURE_has_stat_flavor_BSD}" in
|
CT_TestOrAbort "Cannot remove '${dir}': not a directory" -d "${dir}"
|
||||||
y,*)
|
CT_DoExecLog ALL chmod -R u+w "${dir}" || :;
|
||||||
mode="$(stat -c '%a' "$(dirname "${dir}")")"
|
if CT_DoExecLog ALL rm -rf "${dir}"; then
|
||||||
;;
|
continue
|
||||||
*,y)
|
fi
|
||||||
mode="$(stat -f '%Lp' "$(dirname "${dir}")")"
|
# If we succeeded in removing the whole directory, good. If not,
|
||||||
;;
|
# but only the top level directory remains - it is fine, too, because
|
||||||
*)
|
# this function is used to remove the directories that are going to be
|
||||||
CT_Abort "Unknown stat format options"
|
# re-created. Hence, verify we at least succeeded in verifying the
|
||||||
;;
|
# contents of this directory.
|
||||||
esac
|
if [ -d "${dir}" ]; then
|
||||||
CT_DoExecLog ALL chmod u+w "$(dirname "${dir}")"
|
cnt=$(ls -a "${dir}" | { grep -v '^\.\{1,2\}$' || :; } | wc -l)
|
||||||
CT_DoExecLog ALL chmod -R u+w "${dir}"
|
if [ "${cnt}" != "0" ]; then
|
||||||
CT_DoExecLog ALL rm -rf "${dir}"
|
CT_Abort "Failed to remove '${dir}'"
|
||||||
CT_DoExecLog ALL chmod ${mode} "$(dirname "${dir}")"
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,7 +635,8 @@ CT_DoForceRmdir() {
|
|||||||
# $1: path to add
|
# $1: path to add
|
||||||
# $2: add as 'first' or 'last' path, 'first' is assumed if $2 is empty
|
# $2: add as 'first' or 'last' path, 'first' is assumed if $2 is empty
|
||||||
# Usage CT_SetLibPath /some/where/lib [first|last]
|
# Usage CT_SetLibPath /some/where/lib [first|last]
|
||||||
CT_SetLibPath() {
|
CT_SetLibPath()
|
||||||
|
{
|
||||||
local path="$1"
|
local path="$1"
|
||||||
local pos="$2"
|
local pos="$2"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user