debian: fix build-deps for focal
[amule.git] / src / utils / scripts / denoiser.rules
blob5f1a65adac0e82af1b547e90379672fad95bccc5
1 # This file is part of the aMule project.
3 # Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org )
4 # Copyright (c) 2006-2011 Dévai Tamás ( gonosztopi@amule.org )
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; either
9 # version 2 of the License, or (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
21 # The sed script is tested with GNU sed versions 3.02, 4.1.2
22 # The generated Makefiles are tested with GNU make versions 3.79.1, 3.80
25 # Denoising levels:
27 #       0 - do nothing, handled outside the scope of this script.
29 #       1 - only strip Makefiles from comments and empty lines, this should
30 #       theoretically speed up 'make', although not as much that you could
31 #       notice it.
33 #       2 - leave directory change messages from make, but silence normal
34 #       command printing. No echo denoising at this level.
36 #       3 - silence all messages from make, and partial echo denoising.
38 #       4 - full denoising:
39 #               * silence all messages from make
40 #               * full echo denoising
41 #               * compiler warning suppression
44 # Syntax of this file:
46 #       This file gets preprocessed, all comments and empty lines removed. The
47 #       preprocessor understands '#if ', '#else' and '#endif' commands, as long
48 #       as they start on the first character on the line. No whitespace is
49 #       allowed before the commands. Note that the space character after #if is
50 #       part of the command, if it is replaced by a tab then it won't make a
51 #       command anymore!
53 # #if truth testing:
55 #       #if currently understands only one keyword: 'level', followed by a number
56 #       - the current denoising level. There may be any arbitrary characters
57 #       between the keyword and the value - i.e. 'levels 2,3' will also match
58 #       when 'level 3' matches.
60 # #if preprocessor commands may be nested for at least 4000 levels deep :-)
62 # The preprocessor script can be found at the end of this file.
65 # ----- now the code -----
67 # suppress messages from make
69 #if levels 3,4
70 1 i\
71 MAKEFLAGS=-s --no-print-directory
72 #endif
74 #if level 2
75 1 i\
76 MAKEFLAGS=-w -s
77 #endif
80 #if levels 2,3,4
82 #endif
85 # delete comments
86 /^#/ d
88 # delete empty lines
89 /^[     ]*$/ d
91 # delete HAVE_CONFIG_H
92 s/-DHAVE_CONFIG_H//
94 # take precedence over automake's silent rules feature
95 #if levels 2,3,4
96 /^AM_V_[A-Za-z]\+[      ]*=/ d
97 /^am__v_[A-Za-z]\+_0\?[         ]*=/ d
98 /^AM_DEFAULT_VERBOSITY[         ]*=/ d
99 #endif
102 # rewrite compiler flags
103 #if level 4
104 /=/ {
105         /^[^=]*[^R]CFLAGS/ b 8
106         /^[^=]*CPPFLAGS/ b 8
107         /^[^=]*CXXFLAGS/ b 8
108         b 9
109         :8
110         # save -Wl, -Wa, and -Wp, flags, they're for linker, assember and preprocessor respectively
111         s/ -Wl,/ -%l,/g
112         s/ -Wa,/ -%a,/g
113         s/ -Wp,/ -%p,/g
115         # delete all -W flags
116         / -W/ s/ -W[^ ]*//g
118         # restore -Wl, -Wa, and -Wp, flags
119         s/ -%l,/ -Wl,/g
120         s/ -%a,/ -Wa,/g
121         s/ -%p,/ -Wp,/g
123         # insert -w flag into MULECFLAGS and MULECXXFLAGS if it isn't already in
124         /^MULEC\(XX\)\?FLAGS/! b 9
125         / -w/! s/=/= -w/
126         :9
128 #endif
131 # rewrite rules
132 #if levels 2,3,4
133 # all rules contain ':' and start at the very beginning of the line
134 /^[^    ].*:/ {
135         # no rules contain '=', so just skip these lines
136         /=/ b
138         # save rule target in secondary buffer
139         h
140         s/\([^:][^:]*\):.*/\1/
141         x
143         # skip continuation lines
144         :1
145         /\\$/ {
146                 n
147                 b 1
148         }
150         # process rule commands
151         :2
152         n
153         :3
155         # delete comments inside rules
156         /^#/ {
157                 s/.*//
158                 N
159                 s/\n//g
160                 b 3
161         }
163         # if the current line is empty or not anymore a command, parse as usual
164         /^$/ b 0
165         /^[^    ]/ b 0
167         # get rid of the last pieces of automake's silent rules feature
168         s/^     $(AM_V_[A-Za-z]\+)/     /
170         x
171         /^\n/ b 5
173         # skipping install-strip target, since it will trigger the echo-denoiser,
174         # and would silence the whole installation, which is absolutely not wanted
175         /^install-strip$/ {
176                 s/.*//
177                 x
178                 b 0
179         }
181         # skip the check target, otherwise test results would be stripped
182         /^check-TESTS$/ {
183                 s/.*//
184                 x
185                 b 0
186         }
188         # do some output based on rule target
189         /\.o$/ {
190                 i\
191         echo "Compiling $(<F)"
192                 b 4
193         }
194         /\.obj$/ {
195                 i\
196         echo "Compiling $(<F)"
197                 b 4
198         }
199         /\.a$/ {
200                 i\
201         echo "Building $(@F)"
202                 b 4
203         }
204         /$(EXEEXT)$/ {
205                 i\
206         echo "Linking $(@F)"
207                 b 4
208         }
209         /^\.po\.g\?mo$/ {
210                 i\
211         echo "Generating translations for $(<F:.po=)"
212                 b 4
213         }
214         /\.cpp$/ {
215                 i\
216         echo "Generating $(@F)"
217                 b 4
218         }
219         /\.moc$/ {
220                 i\
221         echo "Compiling meta objects $(@)"
222                 b 4
223         }
224         /\.$(OBJEXT)$/ {
225                 i\
226         echo "Compiling $(<F)"
227                 b 4
228         }
229         /^$(DOMAIN)\.pot-update$/ {
230                 i\
231         echo "Updating translation catalog template"
232                 b 4
233         }
234         /^$(POFILES)$/ {
235                 i\
236         echo "Updating translation catalog for $(@F:.po=)"
237                 b 4
238         }
239         /^\.nop\.po-update$/ {
240                 i\
241         echo "Updating translation catalog for $(<F:.nop=)"
242                 b 4
243         }
244         :4
245         # indicate that we already did the echo thingie
246         #
247         # s/^/\n/ works with newer sed versions like 4.1.2,
248         # but unfortunately msys uses sed 3.02, which does not
249         # translate \n to a newline in the replacement string.
250         #s/^/\n/
251         #
252         # Compatible method: include a newline literally
253         s/^/\
255         :5
257         # If --enable-maintainer-mode, Makefiles may be automatically regenerated.
258         # Denoise new Makefile aswell.
259         /Makefile$/ {
260                 x
261                 /echo/! {
262                         /config\.status[         ][     ]*[^    ][^     ]*/ s/\(config\.status[          ][     ]*[^    ][^     ]*[^;\&\|]*\)\(.*\)/\1 denoiser\2/
263                 }
264                 x
265         }
267         x
269 #if levels 3,4
270         # Denoise echo commands (assuming that no echo command contains the ';' character)
271         #
272         # Denoising works by redirecting output to /dev/null, which is slower, though safer
273         # than removing the command.
274         /^[     ]*@*echo/ {
275                 x
276                 /maintainer-clean-generic/ b 6a
277                 /uninstall/ b 6c
278                 # Install targets may contain echo commands that must not be redirected,
279                 # so skip this echo unless it contains installation code
280                 /install/ {
281                         x
282                         /$(INSTALL/ b 6d
283                         /installing/ b 6d
284                         b 6
285                         :6d
286                         x
287                 }
288                 :6c
289 #if level 3
290                 /maintainer/ b 6a
291                 /$(RECURSIVE_TARGETS)/ b 6a
292                 /recursive/ b 6a
293 #endif
294                 b 6b
295                 :6a
296                 x
297                 b 6
298                 :6b
299                 x
300                 G
301                 h
302                 s/\(echo[^;][^;]*\).*/\1/
303                 # do not redirect if it's already redirected
304                 />/ {
305                         g
306                         s/[^\n]*//
307                         x
308                         s/\n.*//
309                         b 6
310                 }
311                 g
312                 s/[^\n]*//
313                 x
314                 s/\n.*//
315                 s/\(.*echo[^;][^;]*\)\(.*\)/\1>\/dev\/null\2/
316                 :6
317         }
318 #endif (levels 3,4)
319         
320         # mkinstalldirs will also echo its job, sink its output too
321         /$(mkinstalldirs)/ {
322                 G
323                 h
324                 s/\($(mkinstalldirs)[^;][^;]*\).*/\1/
325                 # do not redirect if it's already redirected
326                 />/ {
327                         g
328                         s/[^\n]*//
329                         x
330                         s/\n.*//
331                         b 7
332                 }
333                 g
334                 s/[^\n]*//
335                 x
336                 s/\n.*//
337                 s/\(.*$(mkinstalldirs)[^;][^;]*\)\(.*\)/\1>\/dev\/null\2/
338                 :7
339         }
341 #if level 4
342         # the above applies to msgfmt, but here it's enough to remove the '--statistics' flag
343         /$(GMSGFMT)/ s/--statistics//
345         # msgmerge needs a --silent flag
346         s/$(MSGMERGE)/\0 --silent/
347         s/$(MSGMERGE_UPDATE)/\0 --silent/
348 #endif
350         # the following two ruleset must be the last two in this block and in this order!
352 #if levels 3,4
353         # uninstallation
354         /^[     ]*rm -f[^;]*$(DESTDIR)/ {
355                 x
356                 /uninstall/ {
357                         H
358                         g
359                         s/.*rm -f[^;]*$(DESTDIR)\([^;" ][^;" ]*\).*/    echo "Uninstalling \1"; \\/
360                         P
361                         g
362                         s/[^\n]*//
363                         x
364                         s/\n.*//
365                         # skip checking for install: 1) trivially false 2) uninstall would match /install/
366                         b 2
367                 }
368                 x
369         }
371         # installation
372         /^[     ]*$([^)]*INSTALL/ {
373                 x
374                 /install/ {
375                         H
376                         g
377                         s/.*$(DESTDIR)\([^;" ][^;" ]*\).*/      echo "Installing \1"; \\/
378                         s/$(modulesdir)$$dir/$(modulesdir)/
379                         P
380                         g
381                         s/[^\n]*//
382                         x
383                         s/\n.*//
384                         b 2
385                 }
386                 x
387         }
388 #endif (levels 3,4)
390         b 2
392 #endif (levels 2,3,4)
395 # ---- the preprocessor ----
397 ## default processing mode is 'true'
398 #1 {
399 #       x
400 #       s/.*/1/
401 #       x
404 ## delete empty lines
405 #/^[    ]*$/ d;
407 ## look for "#if "
408 #/^#if / {
409 #       /level.*$level/ {
410 #               x
411 #               s/^/1/
412 #               x
413 #               b0
414 #       }
415 #       x
416 #       s/^/0/
417 #       x
418 #       :0
419 #       d
422 ## process "#else"
423 #/^#else/ {
424 #       x
425 #       /^1/ {
426 #               s/1/0/
427 #               b1
428 #       }
429 #       s/0/1/
430 #       :1
431 #       x
432 #       d
435 ## check for "#endif"
436 #/^#endif/ {
437 #       x
438 #       s/.//
439 #       x
440 #       d
443 ## delete comments
444 #/^[    ]*#/ d
446 ## process code lines according to #if/#else/#endif
448 #/^1/ {
449 #       x
450 #       b