From patchwork Wed Feb 8 02:03:23 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: avoid '//' prefixes when sysroot is set to '/' X-Patchwork-Submitter: Matthias Klose X-Patchwork-Id: 140051 Message-Id: <4F31D7EB.5000902@ubuntu.com> To: "Joseph S. Myers" Cc: GCC Patches Date: Wed, 08 Feb 2012 03:03:23 +0100 From: Matthias Klose List-Id: On 08.02.2012 02:01, Joseph S. Myers wrote: > On Wed, 8 Feb 2012, Matthias Klose wrote: > >> there is one more issue, when configuring >> >> --with-sysroot=/ --with-gxx-include-dir=/usr/include/c++/4.7 >> >> in that the leading / is stripped away in configure.ac. This case needs an >> explicit check. Ok for the trunk? > > This looks like a case where any sysroot with a trailing '/' could > misbehave and remove a leading '/' that should be left there, i.e. where > gcc_gxx_without_sysroot should be computed in a way that ignores any > trailing '/' on the sysroot setting. Or is such a removal actually > harmless in all cases except for plain '/' as the sysroot? not harmless, but not seen unless you pass --sysroot= to the driver. so lets strip the trailing / as well. this requires that the definition for AC_ARG_WITH(sysroot, ...) is moved before the use of the fixed with_sysroot before checking with_sysroot in the gcc_gxx_without_sysroot check. Matthias * configure.ac: Move AC_ARG_WITH checks for native-system-header-dir, build-sysroot, sysroot from the `Miscenalleous configure options' to the `Directories' section. * configure.ac: Strip trailing `/' from with_sysroot. (gcc_gxx_include_dir): Don't strip a `/' sysroot value. --- gcc/configure.ac.1 2012-02-08 02:38:57.199995985 +0100 +++ gcc/configure.ac 2012-02-08 02:46:21.890648210 +0100 @@ -145,6 +145,10 @@ [search for usr/lib, usr/include, et al, within DIR])], [ case ${with_sysroot} in + /) ;; + */) with_sysroot=`echo $with_sysroot | sed 's,/$,,'` ;; + esac + case ${with_sysroot} in yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;; *) TARGET_SYSTEM_ROOT=$with_sysroot ;; esac @@ -211,7 +215,9 @@ if test "${with_sysroot+set}" = set; then gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'` if test "${gcc_gxx_without_sysroot}"; then - gcc_gxx_include_dir="${gcc_gxx_without_sysroot}" + if test x${with_sysroot} != x/; then + gcc_gxx_include_dir="${gcc_gxx_without_sysroot}" + fi gcc_gxx_include_dir_add_sysroot=1 fi fi Index: gcc/configure.ac =================================================================== --- gcc/configure.ac (revision 183991) +++ gcc/configure.ac (working copy) @@ -118,6 +118,68 @@ local_prefix=/usr/local fi +AC_ARG_WITH([native-system-header-dir], + [ --with-native-system-header-dir=dir + use dir as the directory to look for standard + system header files in. Defaults to /usr/include.], +[ + case ${with_native_system_header_dir} in + yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;; + /* | [[A-Za-z]]:[[\\/]]*) ;; + *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;; + esac + configured_native_system_header_dir="${withval}" +], [configured_native_system_header_dir=]) + +AC_ARG_WITH(build-sysroot, + [AS_HELP_STRING([--with-build-sysroot=sysroot], + [use sysroot as the system root during the build])], + [if test x"$withval" != x ; then + SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval" + fi], + [SYSROOT_CFLAGS_FOR_TARGET=]) +AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET) + +AC_ARG_WITH(sysroot, +[AS_HELP_STRING([[--with-sysroot[=DIR]]], + [search for usr/lib, usr/include, et al, within DIR])], +[ + case ${with_sysroot} in + yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;; + *) TARGET_SYSTEM_ROOT=$with_sysroot ;; + esac + + TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"' + CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)' + + if test "x$prefix" = xNONE; then + test_prefix=/usr/local + else + test_prefix=$prefix + fi + if test "x$exec_prefix" = xNONE; then + test_exec_prefix=$test_prefix + else + test_exec_prefix=$exec_prefix + fi + case ${TARGET_SYSTEM_ROOT} in + "${test_prefix}"|"${test_prefix}/"*|\ + "${test_exec_prefix}"|"${test_exec_prefix}/"*|\ + '${prefix}'|'${prefix}/'*|\ + '${exec_prefix}'|'${exec_prefix}/'*) + t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE" + TARGET_SYSTEM_ROOT_DEFINE="$t" + ;; + esac +], [ + TARGET_SYSTEM_ROOT= + TARGET_SYSTEM_ROOT_DEFINE= + CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include' +]) +AC_SUBST(TARGET_SYSTEM_ROOT) +AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) +AC_SUBST(CROSS_SYSTEM_HEADER_DIR) + # Don't set gcc_gxx_include_dir to gxx_include_dir since that's only # passed in by the toplevel make and thus we'd get different behavior # depending on where we built the sources. @@ -739,68 +801,6 @@ ], [enable_shared=yes]) AC_SUBST(enable_shared) -AC_ARG_WITH([native-system-header-dir], - [ --with-native-system-header-dir=dir - use dir as the directory to look for standard - system header files in. Defaults to /usr/include.], -[ - case ${with_native_system_header_dir} in - yes|no) AC_MSG_ERROR([bad value ${withval} given for --with-native-system-header-dir]) ;; - /* | [[A-Za-z]]:[[\\/]]*) ;; - *) AC_MSG_ERROR([--with-native-system-header-dir argument ${withval} must be an absolute directory]) ;; - esac - configured_native_system_header_dir="${withval}" -], [configured_native_system_header_dir=]) - -AC_ARG_WITH(build-sysroot, - [AS_HELP_STRING([--with-build-sysroot=sysroot], - [use sysroot as the system root during the build])], - [if test x"$withval" != x ; then - SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval" - fi], - [SYSROOT_CFLAGS_FOR_TARGET=]) -AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET) - -AC_ARG_WITH(sysroot, -[AS_HELP_STRING([[--with-sysroot[=DIR]]], - [search for usr/lib, usr/include, et al, within DIR])], -[ - case ${with_sysroot} in - yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_noncanonical}/sys-root' ;; - *) TARGET_SYSTEM_ROOT=$with_sysroot ;; - esac - - TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"' - CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)' - - if test "x$prefix" = xNONE; then - test_prefix=/usr/local - else - test_prefix=$prefix - fi - if test "x$exec_prefix" = xNONE; then - test_exec_prefix=$test_prefix - else - test_exec_prefix=$exec_prefix - fi - case ${TARGET_SYSTEM_ROOT} in - "${test_prefix}"|"${test_prefix}/"*|\ - "${test_exec_prefix}"|"${test_exec_prefix}/"*|\ - '${prefix}'|'${prefix}/'*|\ - '${exec_prefix}'|'${exec_prefix}/'*) - t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE" - TARGET_SYSTEM_ROOT_DEFINE="$t" - ;; - esac -], [ - TARGET_SYSTEM_ROOT= - TARGET_SYSTEM_ROOT_DEFINE= - CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include' -]) -AC_SUBST(TARGET_SYSTEM_ROOT) -AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) -AC_SUBST(CROSS_SYSTEM_HEADER_DIR) - AC_ARG_WITH(specs, [AS_HELP_STRING([--with-specs=SPECS], [add SPECS to driver command-line processing])],