make clean problematic bashism
Dear perf maintainers,
I attempted to compile perf 3.5.1 without worrying about installing dependencies first. The resulting error messages were quite helpful, and led me to install a bunch of development libraries and flex.
Unfortunately, after installing flex the build still failed, even after make clean.
The reason for this was a bunch of generated empty flex files in util/ that were not removed by make clean. They are intended to be erased, since the Makefile executes
rm -f util/*-{bison,flex}*
however, this command does not remove the files. I guess because {,} alternatives are only special in bash but the makefile is run with some other shell?
I got perf to compile now, but thought you would be interested to know about this little problem.
With kind regards,
Wouter Koolen
PS: as a side note: GNU make has the .DELETE_ON_ERROR: special target, which removes the target file when its generating command fails. This would have prevented my problem and sounds like a good idea in general. Maybe perf could make use of this feature when on GNU make?
Quoted 13 lines · Wouter M. Koolen
Dear perf maintainers,
I attempted to compile perf 3.5.1 without worrying about installing dependencies first. The resulting error messages were quite helpful, and led me to install a bunch of development libraries and flex.
Unfortunately, after installing flex the build still failed, even after make clean.
The reason for this was a bunch of generated empty flex files in util/ that were not removed by make clean. They are intended to be erased, since the
Makefileexecutes
Quoted 5 lines
rm -f util/*-{bison,flex}*
however, this command does not remove the files. I guess because {,} alternatives are only special in bash but the makefile is run with some other shell?
ISTR us getting a number of such patches, did we miss a site, acme?
Quoted 5 lines
I got perf to compile now, but thought you would be interested to know about this little problem.
With kind regards,
Quoted 7 lines
Wouter Koolen
PS: as a side note: GNU make has the .DELETE_ON_ERROR: special target, which removes the target file when its generating command fails. This would have prevented my problem and sounds like a good idea in general. Maybe perf could make use of this feature when on GNU make?
I don't think we build with anything but gnu make, mind sending a patch implementing your suggestion?
Quoted 30 lines · Peter Zijlstra
Quoted 13 lines · Wouter M. Koolen
Dear perf maintainers,
I attempted to compile perf 3.5.1 without worrying about installing dependencies first. The resulting error messages were quite helpful, and led me to install a bunch of development libraries and flex.
Unfortunately, after installing flex the build still failed, even after make clean.
The reason for this was a bunch of generated empty flex files in util/ that were not removed by make clean. They are intended to be erased, since the
MakefileexecutesQuoted 5 lines
rm -f util/*-{bison,flex}*
however, this command does not remove the files. I guess because {,} alternatives are only special in bash but the makefile is run with some other shell?
ISTR us getting a number of such patches, did we miss a site, acme?
Quoted 8 lines
I got perf to compile now, but thought you would be interested to know about this little problem.
With kind regards,
Wouter Koolen
Quoted 7 lines
Quoted 4 lines
PS: as a side note: GNU make has the .DELETE_ON_ERROR: special target, which removes the target file when its generating command fails. This would have prevented my problem and sounds like a good idea in general. Maybe perf could make use of this feature when on GNU make?
I don't think we build with anything but gnu make, mind sending a patch implementing your suggestion?
Hi Peter,
Some more information: my system has /bin/sh set to dash. I remember a question about this during Debian installation. I guess Ubuntu does something similar viz. https://lkml.org/lkml/2012/5/4/90
Patch attached :)
With kind regards,
Wouter
tools/perf/Makefile +2 -0
@@ -1,3 +1,5 @@ +.DELETE_ON_ERROR: + include ../scripts/Makefile.include # The default target of this Makefile is...
Em Wed, Aug 15, 2012 at 12:26:48PM +0200, Peter Zijlstra escreveu:
Quoted 5 lines · Wouter M. Koolen
Quoted 3 lines
The reason for this was a bunch of generated empty flex files in util/ that were not removed by make clean. They are intended to be erased, since the
Makefileexecutes
Quoted 7 lines
Quoted 5 lines
rm -f util/*-{bison,flex}*
however, this command does not remove the files. I guess because {,} alternatives are only special in bash but the makefile is run with some other shell?
ISTR us getting a number of such patches, did we miss a site, acme?
[acme@sandy linux]$ git describe --match 'v[0-9].[0-9]*' 7f309ed6453926a81e2a97d274f67f1e48f0d74c v3.5-358-g7f309ed
[acme@sandy linux]$ git show --oneline 7f309ed6453926a81e2a97d274f67f1e48f0d74c 7f309ed perf tools: Remove brace expansion from clean target
tools/perf/Makefile +2 -1
@@ -987,7 +987,8 @@ clean: $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(MAKE) -C Documentation/ clean $(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS - $(RM) $(OUTPUT)util/*-{bison,flex}* + $(RM) $(OUTPUT)util/*-bison* + $(RM) $(OUTPUT)util/*-flex* $(python-clean) .PHONY: all install clean strip $(LIBTRACEEVENT)
[acme@sandy linux]$
Quoted 10 lines
Quoted 7 lines
I got perf to compile now, but thought you would be interested to know about this little problem.
PS: as a side note: GNU make has the .DELETE_ON_ERROR: special target, which removes the target file when its generating command fails. This would have prevented my problem and sounds like a good idea in general. Maybe perf could make use of this feature when on GNU make?
I don't think we build with anything but gnu make, mind sending a patch implementing your suggestion?
Yeah, please submit a patch,
- Arnaldo