[PATCH v2] Get rid of `with_multisrctop`, and `MULTISRCTOP`

John Ericson git@JohnEricson.me
Thu Aug 21 18:28:33 GMT 2025


Any further feedback on this? Should I just go ahead and remake the patch to GCC likewise, too?

John

On Wed, Aug 13, 2025, at 4:07 PM, John Ericson wrote:
> See the new comment in `config-ml.in`, and the email chain starting with
> [1].
> 
> The short story is that I am trying to do a bunch of build system
> improvements to GCC to make it easier to build GCC's runtime libraries
> separately (see [1] for why). As part of this, I started looking at the
> current multilib implementation, with a hunch that things could be
> simpler, and with those simplifications, we could refine the idiomatic
> division of labor between the outer and inner build systems in a way
> that I think would be just better, and also would make the separate or
> "per component" builds I want to do more maintainable.
> 
> In that linked thread I found variable/mechanism that looked unused, and
> after some back and forth with Joseph Myers, we came to an agreement
> that since GNU Make was mandatory now, and thus VPATH support was
> assumed, there was no need to do these convoluted symlink tree things to
> unnaturally allow multilib to get away with `srcdir = objdir` building.
> (When indeed, `srcdir != objdir_for_machine1 != objdir_for_machine2` is
> multilib in a nutshell.)
> 
> The last (as of this patch) email in the chain is Joseph writing:
> 
> > I think it's reasonable to eliminate such a workaround, but I don't know
> > how the newlib community feels, should they wish to update the shared
> > toplevel build infrastructure with changes from GCC.
> 
> This email is thus me submitting the multilib version of this change
> first, to ask you all that question.
> 
> If our reasoning looks correct, and you see no reason to support these
> no-VPATH workarounds either, then we have our concensus! I think we can
> land this change in both repos (GCC, newlib-cygwin), in either order (no
> repo need wait on the other repo).
> 
> N.B. I am not exactly sure how to test this. I have tested that it
> doesn't break the a non-multilib build of newlib. But when I try to do a
> multilib build in this repo with the toplevel makefile, it doesn't want
> build anything.
> 
> config/ChangeLog:
> 
> * multi.m4: Simplify, no more srcdir = . special case needed.
> 
> ChangeLog:
> 
> * newlib/acinclude.m4: Simplify, no more srcdir = . special case needed.
> * symlink-tree: Removed. It is no longer needed by anything.
> * MAINTAINERS: Remove symlink-tree entry.
> * etc/update-copyright.py: Remove symlink-tree entry.
> * src-release: Remove symlink-tree entry.
> * config-ml.in: Simplify a bunch, and reword docs to explain
>   status quo: It's simpler than past, but can't yet forget about past
>   until tech debt is gone.
> * libgloss/configure: Regenerate.
> * newlib/configure: Regenerate.
> 
> [1]: https://sourceware.org/pipermail/gcc-patches/2025-August/691963.html
> [2]: https://blog.obsidian.systems/compiler-bootstrapping-in-nixpkgs/
> [3]: https://sourceware.org/pipermail/gcc-patches/2025-August/692233.html
> 
> Signed-off-by: John Ericson <git@JohnEricson.me>
> ---
> MAINTAINERS             |   4 --
> config-ml.in            | 110 ++++++++++++----------------------------
> config/multi.m4         |  13 +----
> etc/update-copyright.py |   1 -
> libgloss/Makefile.in    |   1 -
> libgloss/configure      |  13 +----
> multilib.am             |   1 -
> newlib/Makefile.in      |   1 -
> newlib/acinclude.m4     |  12 +----
> newlib/configure        |  23 ++-------
> src-release             |   2 +-
> symlink-tree            |  78 ----------------------------
> 12 files changed, 42 insertions(+), 217 deletions(-)
> delete mode 100755 symlink-tree
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index dd8601b4f..a479ea3d9 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -73,10 +73,6 @@ ltconfig; ltmain.sh; ltcf-*.sh
> move-if-change
> Send bug reports and patches to bug-gnulib@gnu.org.
>  
> -symlink-tree
> - gcc: http://gcc.gnu.org
> - See libiberty.
> -
> newlib/; libgloss/
> http://sourceware.org/newlib/
> Patches to newlib@sourceware.org.
> diff --git a/config-ml.in b/config-ml.in
> index 5e519942b..56b6abae2 100644
> --- a/config-ml.in
> +++ b/config-ml.in
> @@ -30,28 +30,19 @@
> # It is advisable to support a few --enable/--disable options to let the
> # user select which libraries s/he really wants.
> #
> -# Subdirectories wishing to use multilib should put the following lines
> +# Subdirectories wishing to use multilib should put the following line
> # in the "post-target" section of configure.ac.
> #
> -# if [ "${srcdir}" = "." ] ; then
> -#   if [ "${with_target_subdir}" != "." ] ; then
> -#     . ${with_multisrctop}../../config-ml.in
> -#   else
> -#     . ${with_multisrctop}../config-ml.in
> -#   fi
> -# else
> -#   . ${srcdir}/../config-ml.in
> -# fi
> -#
> +# . ${srcdir}/../config-ml.in
> #
> # Things are complicated because 6 separate cases must be handled:
> # 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6.
> #
> -# srcdir=. is special.  It must handle make programs that don't handle VPATH.
> -# To implement this, a symlink tree is built for each library and for each
> -# multilib subdir.
> +# srcdir=. was formerly special.  We used to want to handle make
> +# programs that don't handle VPATH.  To implement this, a symlink tree
> +# was built for each library and for each multilib subdir.
> #
> -# The build tree is layed out as
> +# The build tree was laid out as
> #
> # ./
> #   newlib
> @@ -60,6 +51,24 @@
> #          m68881/
> #                 newlib
> #
> +# In such a symlink tree, the source code *files* of newlib were linked
> +# into each location, but the "newlib" directories themselves were
> +# actual separate directories, to hold different different build
> +# artifacts in each case. Accordingly ${srcdir}/.. would not work as
> +# intended, because instead of pointing to the top-level source
> +# directory, it would point to one of the parent build directories (e.g.
> +# "m68881" or "m68020") in the example above.
> +#
> +# Now, however, GNU Make is required, and GNU Make always supports
> +# VPATH. We therefore dropped support for these symlink trees.  And
> +# accordingly, we can know that ${srcdir}/.. always does what we expect
> +# in all supported configurations.
> +#
> +# This will open the door to many many further simplifications of the
> +# multilib infrastructure. These simplifications are not yet
> +# implemented, however. Until they are, and the dead code removed, this
> +# historical information should stay in this file.
> +#
> # The nice feature about this arrangement is that inter-library references
> # in the build tree work without having to care where you are.  Note that
> # inter-library references also work in the source tree because symlink trees
> @@ -72,14 +81,9 @@
> # Configure variables:
> # ${with_target_subdir} = "." for native, or ${target_alias} for cross.
> # Set by top level Makefile.
> -# ${with_multisrctop} = how many levels of multilibs there are in the source
> -# tree.  It exists to handle the case of configuring in the source tree:
> -# ${srcdir} is not constant.
> # ${with_multisubdir} = name of multilib subdirectory (eg: m68020/m68881).
> #
> # Makefile variables:
> -# MULTISRCTOP = number of multilib levels in source tree (+1 if cross)
> -# (FIXME: note that this is different than ${with_multisrctop}.  Check out.).
> # MULTIBUILDTOP = number of multilib levels in build tree
> # MULTIDIRS = list of multilib subdirs (eg: m68000 m68020 ...)
> # (only defined in each library's main Makefile).
> @@ -101,7 +105,6 @@
>  
> Makefile=${ac_file-Makefile}
> ml_config_shell=${CONFIG_SHELL-/bin/sh}
> -ml_realsrcdir=${srcdir}
>  
> # Scan all the arguments and set all the ones we need.
>  
> @@ -188,23 +191,8 @@ if [ "${enable_multilib}" = yes ]; then
> # into one file, but it does leave us with having to perform this test.
> ml_toplevel_p=no
> if [ -z "${with_multisubdir}" ]; then
> -  if [ "${srcdir}" = "." ]; then
> -    # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
> -    # ${with_target_subdir} = "." for native, otherwise target alias.
> -    if [ "${with_target_subdir}" = "." ]; then
> -      if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
> - ml_toplevel_p=yes
> -      fi
> -    else
> -      if [ -f ${ml_realsrcdir}/../../config-ml.in ]; then
> - ml_toplevel_p=yes
> -      fi
> -    fi
> -  else
> -    # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
> -    if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
> -      ml_toplevel_p=yes
> -    fi
> +  if [ -f ${srcdir}/../config-ml.in ]; then
> +    ml_toplevel_p=yes
>    fi
> fi
>  
> @@ -565,36 +553,20 @@ mv Makefile.tem ${Makefile}
> fi # ${ml_toplevel_p} = yes
>  
> if [ "${ml_verbose}" = --verbose ]; then
> -  echo "Adding multilib support to ${Makefile} in ${ml_realsrcdir}"
> +  echo "Adding multilib support to ${Makefile} in ${srcdir}"
>    if [ "${ml_toplevel_p}" = yes ]; then
>      echo "multidirs=${multidirs}"
>    fi
>    echo "with_multisubdir=${with_multisubdir}"
> fi
>  
> -if [ "${srcdir}" = "." ]; then
> -  if [ "${with_target_subdir}" != "." ]; then
> -    ml_srcdotdot="../"
> -  else
> -    ml_srcdotdot=""
> -  fi
> -else
> -  ml_srcdotdot=""
> -fi
> -
> if [ -z "${with_multisubdir}" ]; then
>    ml_subdir=
>    ml_builddotdot=
> -  : # ml_srcdotdot= # already set
> else
>    ml_subdir="/${with_multisubdir}"
>    # The '[^/][^/]*' appears that way to work around a SunOS sed bug.
>    ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/
> -  if [ "$srcdir" = "." ]; then
> -    ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot}
> -  else
> -    : # ml_srcdotdot= # already set
> -  fi
> fi
>  
> if [ "${ml_toplevel_p}" = yes ]; then
> @@ -606,8 +578,8 @@ else
> fi
>  
> # TOP is used by newlib and should not be used elsewhere for this purpose.
> -# MULTI{SRC,BUILD}TOP are the proper ones to use.  MULTISRCTOP is empty
> -# when srcdir != builddir.  MULTIBUILDTOP is always some number of ../'s.
> +# MULTIBUILDTOP are the proper ones to use.
> +# MULTIBUILDTOP is always some number of ../'s.
> # FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can
> # delete TOP.  Newlib may wish to continue to use TOP for its own purposes
> # of course.
> @@ -628,7 +600,6 @@ fi
> # options).
>  
> sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${ml_builddotdot}\1:" \
> -    -e "s:^MULTISRCTOP[ ]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \
>      -e "s:^MULTIBUILDTOP[ ]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \
>      -e "s:^MULTIDIRS[ ]*=.*$:MULTIDIRS = ${multidirs}:" \
>      -e "s:^MULTISUBDIR[ ]*=.*$:MULTISUBDIR = ${ml_subdir}:" \
> @@ -692,24 +663,8 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
>  
>      case ${srcdir} in
>      ".")
> -      echo "Building symlink tree in `${PWDCMD-pwd}`/${ml_dir}/${ml_libdir}"
> -      if [ "${with_target_subdir}" != "." ]; then
> - ml_unsubdir="../"
> -      else
> - ml_unsubdir=""
> -      fi
> -      (cd ${ml_dir}/${ml_libdir};
> -       ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "")
> -      if [ -f ${ml_dir}/${ml_libdir}/${Makefile} ]; then
> - if [ x"${MAKE}" = x ]; then
> -   (cd ${ml_dir}/${ml_libdir}; make distclean)
> - else
> -   (cd ${ml_dir}/${ml_libdir}; ${MAKE} distclean)
> - fi
> -      fi
> -      ml_newsrcdir="."
> -      ml_srcdiroption=
> -      multisrctop=${dotdot}
> +      echo "Multilib builds with srcdir = objdir are no longer supported. Please use a separate objdir."
> +      exit 1
>        ;;
>      *)
>        case "${srcdir}" in
> @@ -721,7 +676,6 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
>          ;;
>        esac
>        ml_srcdiroption="-srcdir=${ml_newsrcdir}"
> -      multisrctop=
>        ;;
>      esac
>  
> @@ -867,7 +821,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
>      fi
>  
>      if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
> - --with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
> + --with-multisubdir=${ml_dir} \
> "${ac_configure_args}" ${ml_config_env} ${ml_srcdiroption} ; then
>        true
>      else
> diff --git a/config/multi.m4 b/config/multi.m4
> index 5b62ecc0a..5f033284f 100644
> --- a/config/multi.m4
> +++ b/config/multi.m4
> @@ -23,18 +23,10 @@ AC_ARG_ENABLE(multilib,
>       [multilib=yes])
>  
> # We may get other options which we leave undocumented:
> -# --with-target-subdir, --with-multisrctop, --with-multisubdir
> +# --with-target-subdir, --with-multisubdir
> # See config-ml.in if you want the gory details.
>  
> -if test "$srcdir" = "."; then
> -  if test "$with_target_subdir" != "."; then
> -    multi_basedir="$srcdir/$with_multisrctop../$2"
> -  else
> -    multi_basedir="$srcdir/$with_multisrctop$2"
> -  fi
> -else
> -  multi_basedir="$srcdir/$2"
> -fi
> +multi_basedir="$srcdir/$2"
> AC_SUBST(multi_basedir)
>  
> # Even if the default multilib is not a cross compilation,
> @@ -57,7 +49,6 @@ srcdir="$srcdir"
> host="$host"
> target="$target"
> with_multisubdir="$with_multisubdir"
> -with_multisrctop="$with_multisrctop"
> with_target_subdir="$with_target_subdir"
> ac_configure_args="${multilib_arg} ${ac_configure_args}"
> multi_basedir="$multi_basedir"
> diff --git a/etc/update-copyright.py b/etc/update-copyright.py
> index 7f605d058..df7c83671 100755
> --- a/etc/update-copyright.py
> +++ b/etc/update-copyright.py
> @@ -96,7 +96,6 @@ class GenericFilter:
>                  'mkinstalldirs',
>                  'move-if-change',
>                  'shlibpath.m4',
> -                'symlink-tree',
>                  'ylwrap',
>  
>                  # Skip FSF mission statement, etc.
> diff --git a/libgloss/Makefile.in b/libgloss/Makefile.in
> index 5146a7880..212d74ed8 100644
> --- a/libgloss/Makefile.in
> +++ b/libgloss/Makefile.in
> @@ -2139,7 +2139,6 @@ FLAGS_TO_PASS = \
> "INSTALL_DATA=$(INSTALL_DATA)" \
> "DESTDIR=$(DESTDIR)"
>  
> -MULTISRCTOP = 
> MULTIBUILDTOP = 
> MULTIDIRS = 
> MULTISUBDIR = 
> diff --git a/libgloss/configure b/libgloss/configure
> index ba071824b..1c47f72ea 100755
> --- a/libgloss/configure
> +++ b/libgloss/configure
> @@ -5652,18 +5652,10 @@ fi
>  
>  
> # We may get other options which we leave undocumented:
> -# --with-target-subdir, --with-multisrctop, --with-multisubdir
> +# --with-target-subdir, --with-multisubdir
> # See config-ml.in if you want the gory details.
>  
> -if test "$srcdir" = "."; then
> -  if test "$with_target_subdir" != "."; then
> -    multi_basedir="$srcdir/$with_multisrctop../.."
> -  else
> -    multi_basedir="$srcdir/$with_multisrctop.."
> -  fi
> -else
> -  multi_basedir="$srcdir/.."
> -fi
> +multi_basedir="$srcdir/.."
>  
>  
> # Even if the default multilib is not a cross compilation,
> @@ -6616,7 +6608,6 @@ srcdir="$srcdir"
> host="$host"
> target="$target"
> with_multisubdir="$with_multisubdir"
> -with_multisrctop="$with_multisrctop"
> with_target_subdir="$with_target_subdir"
> ac_configure_args="${multilib_arg} ${ac_configure_args}"
> multi_basedir="$multi_basedir"
> diff --git a/multilib.am b/multilib.am
> index 5c98b69bd..0c4e3283e 100644
> --- a/multilib.am
> +++ b/multilib.am
> @@ -10,7 +10,6 @@
> ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> ## GNU General Public License for more details.
>  
> -MULTISRCTOP =
> MULTIBUILDTOP =
> MULTIDIRS =
> MULTISUBDIR =
> diff --git a/newlib/Makefile.in b/newlib/Makefile.in
> index c5492c6b6..c16ab2626 100644
> --- a/newlib/Makefile.in
> +++ b/newlib/Makefile.in
> @@ -4305,7 +4305,6 @@ TARG_INCLUDE_CP_DIR = \
> if (cd $$srcdir 2>/dev/null && [ "`echo *.h`" != "*.h" ]); then cp $$srcdir/*.h $$dstdir/; fi
>  
> CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
> -MULTISRCTOP = 
> MULTIBUILDTOP = 
> MULTIDIRS = 
> MULTISUBDIR = 
> diff --git a/newlib/acinclude.m4 b/newlib/acinclude.m4
> index 19301289f..3ba0fa01f 100644
> --- a/newlib/acinclude.m4
> +++ b/newlib/acinclude.m4
> @@ -94,19 +94,11 @@ AC_ARG_ENABLE(newlib-fno-builtin,
>  
>  
> dnl We may get other options which we don't document:
> -dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
> +dnl --with-target-subdir, --with-multisubdir
>  
> test -z "[$]{with_target_subdir}" && with_target_subdir=.
>  
> -if test "[$]{srcdir}" = "."; then
> -  if test "[$]{with_target_subdir}" != "."; then
> -    newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
> -  else
> -    newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
> -  fi
> -else
> -  newlib_basedir="[$]{srcdir}/$1"
> -fi
> +newlib_basedir="[$]{srcdir}/$1"
> AC_SUBST(newlib_basedir)
>  
> abs_newlib_basedir=`cd "${newlib_basedir}" && pwd`
> diff --git a/newlib/configure b/newlib/configure
> index 33a2ed1c5..3219f0366 100755
> --- a/newlib/configure
> +++ b/newlib/configure
> @@ -2648,18 +2648,10 @@ fi
>  
>  
> # We may get other options which we leave undocumented:
> -# --with-target-subdir, --with-multisrctop, --with-multisubdir
> +# --with-target-subdir, --with-multisubdir
> # See config-ml.in if you want the gory details.
>  
> -if test "$srcdir" = "."; then
> -  if test "$with_target_subdir" != "."; then
> -    multi_basedir="$srcdir/$with_multisrctop../.."
> -  else
> -    multi_basedir="$srcdir/$with_multisrctop.."
> -  fi
> -else
> -  multi_basedir="$srcdir/.."
> -fi
> +multi_basedir="$srcdir/.."
>  
>  
> # Even if the default multilib is not a cross compilation,
> @@ -4872,15 +4864,7 @@ fi
>  
> test -z "${with_target_subdir}" && with_target_subdir=.
>  
> -if test "${srcdir}" = "."; then
> -  if test "${with_target_subdir}" != "."; then
> -    newlib_basedir="${srcdir}/${with_multisrctop}../."
> -  else
> -    newlib_basedir="${srcdir}/${with_multisrctop}."
> -  fi
> -else
> -  newlib_basedir="${srcdir}/."
> -fi
> +newlib_basedir="${srcdir}/."
>  
>  
> abs_newlib_basedir=`cd "${newlib_basedir}" && pwd`
> @@ -8732,7 +8716,6 @@ srcdir="$srcdir"
> host="$host"
> target="$target"
> with_multisubdir="$with_multisubdir"
> -with_multisrctop="$with_multisrctop"
> with_target_subdir="$with_target_subdir"
> ac_configure_args="${multilib_arg} ${ac_configure_args}"
> multi_basedir="$multi_basedir"
> diff --git a/src-release b/src-release
> index b28597c09..878510b28 100644
> --- a/src-release
> +++ b/src-release
> @@ -46,7 +46,7 @@ PWD = $${PWDCMD-pwd}
> # Files in devo used in any net release.
> DEVO_SUPPORT= README Makefile.in configure configure.ac \
> config.guess config.sub config move-if-change \
> - COPYING COPYING.LIB install-sh config-ml.in symlink-tree \
> + COPYING COPYING.LIB install-sh config-ml.in \
> mkinstalldirs ltmain.sh missing ylwrap \
> libtool.m4 ltsugar.m4 ltversion.m4 ltoptions.m4 \
> Makefile.def Makefile.tpl src-release config.rpath \
> diff --git a/symlink-tree b/symlink-tree
> deleted file mode 100755
> index a9d50831b..000000000
> --- a/symlink-tree
> +++ /dev/null
> @@ -1,78 +0,0 @@
> -#!/bin/sh
> -# Create a symlink tree.
> -#
> -# Copyright (C) 1995, 2000, 2003  Free Software Foundation, Inc.
> -#
> -# This file is free software; you can redistribute it and/or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; either version 2 of the License, or
> -# (at your option) any later version.
> -#
> -# This program is distributed in the hope that it will be useful,
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -# GNU General Public License for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software
> -# Foundation, Inc., 51 Franklin Street, Fifth Floor,
> -# Boston, MA 02110-1301, USA.
> -#
> -# As a special exception to the GNU General Public License, if you
> -# distribute this file as part of a program that contains a
> -# configuration script generated by Autoconf, you may include it under
> -# the same distribution terms that you use for the rest of that program.
> -#
> -# Please report bugs to <gcc-bugs@gnu.org>
> -# and send patches to <gcc-patches@gnu.org>.
> -
> -# Syntax: symlink-tree srcdir "ignore1 ignore2 ..."
> -#
> -# where srcdir is the directory to create a symlink tree to,
> -# and "ignoreN" is a list of files/directories to ignore.
> -
> -prog=$0
> -srcdir=$1
> -ignore="$2"
> -
> -if test $# -lt 1; then
> -  echo "symlink-tree error:  Usage: symlink-tree srcdir \"ignore1 ignore2 ...\""
> -  exit 1
> -fi
> -
> -ignore_additional=". .. CVS"
> -
> -# If we were invoked with a relative path name, adjust ${prog} to work
> -# in subdirs.
> -case ${prog} in
> -/* | [A-Za-z]:[\\/]*) ;;
> -*) prog=../${prog} ;;
> -esac
> -
> -# Set newsrcdir to something subdirectories can use.
> -case ${srcdir} in
> -/* | [A-Za-z]:[\\/]*) newsrcdir=${srcdir} ;;
> -*) newsrcdir=../${srcdir} ;;
> -esac
> -
> -for f in `ls -a ${srcdir}`; do
> -  if [ -d ${srcdir}/$f ]; then
> -    found=
> -    for i in ${ignore} ${ignore_additional}; do
> -      if [ "$f" = "$i" ]; then
> - found=yes
> -      fi
> -    done
> -    if [ -z "${found}" ]; then
> -      echo "$f ..working in"
> -      if [ -d $f ]; then true; else mkdir $f; fi
> -      (cd $f; ${prog} ${newsrcdir}/$f "${ignore}")
> -    fi
> -  else
> -    echo "$f ..linked"
> -    rm -f $f
> -    ln -s ${srcdir}/$f .
> -  fi
> -done
> -
> -exit 0
> -- 
> 2.49.0
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/newlib/attachments/20250821/de536573/attachment-0001.htm>


More information about the Newlib mailing list