diff mbox series

core: detect and reject build paths which contain an '@'

Message ID 20180820204953.29566-1-yann.morin.1998@free.fr
State Accepted
Commit 7007dc2bc99ad191c418c468707cdc3980273cda
Headers show
Series core: detect and reject build paths which contain an '@' | expand

Commit Message

Yann E. MORIN Aug. 20, 2018, 8:49 p.m. UTC
gcc does not build when the srcdir path contains a '@', because that
path is then substitued in a texi file as argument to an @include
directive. But then, the '@' in the path will start a command evaluation
of its own, thus breaking the build. For example, with a $(O) path set
to /home/ymorin/dev/buildroot/O/to@ti :

    perl ../../gcc/../contrib/texi2pod.pl ../../gcc/doc/invoke.texi > gcc.pod
    ../../gcc/doc/invoke.texi:1678: unknown command `ti'
    ../../gcc/doc/invoke.texi:1678: @include: could not find /home/ymorin/dev/buildroot/O/to/build/host-gcc-initial-7.3.0/build/gcc/../../gcc/../libiberty/at-file.texi

Reported-by: c32 on IRC
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 Makefile | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Peter Korsgaard Oct. 20, 2018, 6:50 p.m. UTC | #1
>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

 > gcc does not build when the srcdir path contains a '@', because that
 > path is then substitued in a texi file as argument to an @include
 > directive. But then, the '@' in the path will start a command evaluation
 > of its own, thus breaking the build. For example, with a $(O) path set
 > to /home/ymorin/dev/buildroot/O/to@ti :

 >     perl ../../gcc/../contrib/texi2pod.pl ../../gcc/doc/invoke.texi > gcc.pod
 >     ../../gcc/doc/invoke.texi:1678: unknown command `ti'
 >     ../../gcc/doc/invoke.texi:1678: @include: could not find /home/ymorin/dev/buildroot/O/to/build/host-gcc-initial-7.3.0/build/gcc/../../gcc/../libiberty/at-file.texi

 > Reported-by: c32 on IRC
 > Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
 > ---
 >  Makefile | 5 +++++
 >  1 file changed, 5 insertions(+)

 > diff --git a/Makefile b/Makefile
 > index d1ee9293a2..8a2b614b81 100644
 > --- a/Makefile
 > +++ b/Makefile
 > @@ -60,6 +60,11 @@ override O := $(patsubst %/,%,$(patsubst %.,%,$(O)))
 >  # avoid empty CANONICAL_O in case on non-existing entry.
 >  CANONICAL_O := $(shell mkdir -p $(O) >/dev/null 2>&1)$(realpath $(O))
 
 > +# gcc fails to build when the srcdir contains a '@'
 > +ifneq ($(CANONICAL_O),$(subst @,,$(CANONICAL_O)))

I find findstring easier to read, so I've changed it to:

ifneq ($(findstring @,$(CANONICAL_O)),)

And committed, thanks.
Peter Korsgaard Oct. 24, 2018, 12:30 p.m. UTC | #2
>>>>> "Peter" == Peter Korsgaard <peter@korsgaard.com> writes:

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:
 >> gcc does not build when the srcdir path contains a '@', because that
 >> path is then substitued in a texi file as argument to an @include
 >> directive. But then, the '@' in the path will start a command evaluation
 >> of its own, thus breaking the build. For example, with a $(O) path set
 >> to /home/ymorin/dev/buildroot/O/to@ti :

 >> perl ../../gcc/../contrib/texi2pod.pl ../../gcc/doc/invoke.texi > gcc.pod
 >> ../../gcc/doc/invoke.texi:1678: unknown command `ti'
 >> ../../gcc/doc/invoke.texi:1678: @include: could not find /home/ymorin/dev/buildroot/O/to/build/host-gcc-initial-7.3.0/build/gcc/../../gcc/../libiberty/at-file.texi

 >> Reported-by: c32 on IRC
 >> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
 >> ---
 >> Makefile | 5 +++++
 >> 1 file changed, 5 insertions(+)

 >> diff --git a/Makefile b/Makefile
 >> index d1ee9293a2..8a2b614b81 100644
 >> --- a/Makefile
 >> +++ b/Makefile
 >> @@ -60,6 +60,11 @@ override O := $(patsubst %/,%,$(patsubst %.,%,$(O)))
 >> # avoid empty CANONICAL_O in case on non-existing entry.
 >> CANONICAL_O := $(shell mkdir -p $(O) >/dev/null 2>&1)$(realpath $(O))
 
 >> +# gcc fails to build when the srcdir contains a '@'
 >> +ifneq ($(CANONICAL_O),$(subst @,,$(CANONICAL_O)))

 > I find findstring easier to read, so I've changed it to:

 > ifneq ($(findstring @,$(CANONICAL_O)),)

 > And committed, thanks.

Committed to 2018.02.x and 2018.08.x with that change, thanks.
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index d1ee9293a2..8a2b614b81 100644
--- a/Makefile
+++ b/Makefile
@@ -60,6 +60,11 @@  override O := $(patsubst %/,%,$(patsubst %.,%,$(O)))
 # avoid empty CANONICAL_O in case on non-existing entry.
 CANONICAL_O := $(shell mkdir -p $(O) >/dev/null 2>&1)$(realpath $(O))
 
+# gcc fails to build when the srcdir contains a '@'
+ifneq ($(CANONICAL_O),$(subst @,,$(CANONICAL_O)))
+$(error The build directory can not contain a '@')
+endif
+
 CANONICAL_CURDIR = $(realpath $(CURDIR))
 
 REQ_UMASK = 0022