Message ID | 4E0B8F82.4000600@myspectrum.nl |
---|---|
State | RFC |
Headers | show |
Dear Jeroen Hofstee, In message <4E0B8F82.4000600@myspectrum.nl> you wrote: > > rules.mk uses the GNU specific sed \w leading to not directly obvious > Make / _depend errors in the build process, like circular dependencies You should probably mention when such errors result - I have never seen any of these. > Current command (gsed = GNU sed, sed = FreeBSD takes \w as w). The first > command is not the intention. > [jeroen@blue ~]$ echo some/example/test.c | sed -e 's/\(.*\)\.\w/\1.o/'; > some/example/test.c > [jeroen@blue ~]$ echo some/example/test.c | gsed -e 's/\(.*\)\.\w/\1.o/'; > some/example/test.o > [jeroen@blue ~]$ echo some/example/test.w | sed -e 's/\(.*\)\.\w/\1.o/'; > some/example/test.o > [jeroen@blue ~]$ echo some/example/test.w | gsed -e 's/\(.*\)\.\w/\1.o/'; > some/example/test.o > > None GNU specific as per GNU docs (fine): > [jeroen@blue ~]$ echo some/example/test.c | sed -e > 's/\(.*\)\.[[:alnum:]_]/\1.o/'; > some/example/test.o > [jeroen@blue ~]$ echo some/example/test.c | gsed -e > 's/\(.*\)\.[[:alnum:]_]/\1.o/'; > some/example/test.o > > or shorter (regex are greedy): > [jeroen@blue ~]$ echo some/example/test.c | sed -e 's/\(.*\)\..*/\1.o/'; > some/example/test.o > [jeroen@blue ~]$ echo some/example/test.c | gsed -e 's/\(.*\)\..*/\1.o/'; > some/example/test.o I don't think this last version is equivalent to the original code. With GNU sed: -> echo foo/bar-baz.frob-nitz | sed -e 's/\(.*\)\.\w/\1.o/' foo/bar-baz.orob-nitz -> echo foo/bar-baz.frob-nitz | sed -e 's/\(.*\)\..*/\1.o/' foo/bar-baz.o > Would you accept a patch for this? Yes, of course - if the resultinmg code works, and if you follow patch submission rules (like SoB: line etc.). Best regards, Wolfgang Denk
diff --git a/rules.mk b/rules.mk index c2860e5..385e5f5 100644 --- a/rules.mk +++ b/rules.mk @@ -29,11 +29,11 @@ $(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS) $(HOSTSRCS) @rm -f $@ @touch $@ @for f in $(SRCS); do \ - g=`basename $$f | sed -e 's/\(.*\)\.\w/\1.o/'`; \ + g=`basename $$f | sed -e 's/\(.*\)\..*/\1.o/'`; \ $(CC) -M $(CPPFLAGS) -MQ $(obj)$$g $$f>> $@ ; \ done @for f in $(HOSTSRCS); do \ - g=`basename $$f | sed -e 's/\(.*\)\.\w/\1.o/'`; \ + g=`basename $$f | sed -e 's/\(.*\)\..*/\1.o/'`; \ $(HOSTCC) -M $(HOSTCPPFLAGS) -MQ $(obj)$$g $$f>> $@ ; \ done