Skip to contentSkip to conversation

make clean problematic bashism

perf Wouter M. Koolen 3 participants 4 messages Aug 15, 2012 perf events

lore
Share & tools
lore
#0 lore raw

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?

#1 lore raw
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 Makefile executes

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?

#2 lore raw
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 Makefile executes

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 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
index 0eee64c..29b2373 100644
@@ -1,3 +1,5 @@
+.DELETE_ON_ERROR:
+
 include ../scripts/Makefile.include
 
 # The default target of this Makefile is...
#3 lore raw
In reply to Peter Zijlstra

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 Makefile executes

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
index 32912af..35655c3 100644
@@ -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