* [PATCH] Makefile: Magic silent rules.
@ 2009-11-21 13:48 Chris Wilson
0 siblings, 0 replies; 6+ messages in thread
From: Chris Wilson @ 2009-11-21 13:48 UTC (permalink / raw)
To: notmuch
Use the facilities of GNU make to create a magic function that will
on the first invocation print a description of how to enable verbose
compile lines and then print the quiet rule.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Carl Worth <cworth@cworth.org>
Cc: Mikhail Gusarov <dottedmag@dottedmag.net>
---
Makefile | 18 +++++++++++++++---
Makefile.local | 2 +-
lib/Makefile.local | 2 +-
3 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index 0411cbb..96fcdd5 100644
--- a/Makefile
+++ b/Makefile
@@ -28,14 +28,26 @@ include lib/Makefile.local
# And get user settings from the output of configure
include Makefile.config
+# The user has not set any verbosity, default to quiet mode and inform the
+# user how to enable verbose compiles.
+ifeq ($(V),)
+quiet_DOC := "Use \"$(MAKE) V=1\" to see the verbose compile lines.\n"
+quiet = @echo $(quiet_DOC)$(eval quiet_DOC:=)" $1 $@";
+endif
+# The user has explicitly enabled quiet compilation.
+ifeq ($(V),0)
+quiet = @echo " $1 $@";
+endif
+# Otherwise, print the full command line.
+
%.o: %.cc
- $(CXX) -c $(CFLAGS) $(CXXFLAGS) $< -o $@
+ $(call quiet,CXX) $(CXX) -c $(CFLAGS) $(CXXFLAGS) $< -o $@
%.o: %.c
- $(CC) -c $(CFLAGS) $< -o $@
+ $(call quiet,CC) $(CC) -c $(CFLAGS) $< -o $@
%.elc: %.el
- emacs -batch -f batch-byte-compile $<
+ $(call quiet,EMACS) emacs -batch -f batch-byte-compile $<
.deps/%.d: %.c
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
diff --git a/Makefile.local b/Makefile.local
index ecd4ceb..115de0e 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -20,7 +20,7 @@ notmuch_client_srcs = \
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
notmuch: $(notmuch_client_modules) lib/notmuch.a
- $(CXX) $^ $(LDFLAGS) -o $@
+ $(call quiet,CXX) $(CXX) $^ $(LDFLAGS) -o $@
notmuch.1.gz: notmuch.1
gzip --stdout notmuch.1 > notmuch.1.gz
diff --git a/lib/Makefile.local b/lib/Makefile.local
index 79f7b0b..f635da7 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -18,7 +18,7 @@ libnotmuch_cxx_srcs = \
libnotmuch_modules = $(libnotmuch_c_srcs:.c=.o) $(libnotmuch_cxx_srcs:.cc=.o)
$(dir)/notmuch.a: $(libnotmuch_modules)
- $(AR) rcs $@ $^
+ $(call quiet,AR) $(AR) rcs $@ $^
SRCS := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs)
CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/notmuch.a
--
1.6.5.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH] Makefile: Magic silent rules.
@ 2009-11-21 19:02 Chris Wilson
2009-11-21 19:19 ` Mikhail Gusarov
0 siblings, 1 reply; 6+ messages in thread
From: Chris Wilson @ 2009-11-21 19:02 UTC (permalink / raw)
To: notmuch
Use the facilities of GNU make to create a magic function that will
on the first invocation print a description of how to enable verbose
compile lines and then print the quiet rule.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Carl Worth <cworth@cworth.org>
Cc: Mikhail Gusarov <dottedmag@dottedmag.net>
---
Makefile | 22 +++++++++++++++++++---
Makefile.local | 4 ++--
lib/Makefile.local | 2 +-
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index 3fedcf1..77e70ed 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,10 @@
WARN_FLAGS=-Wall -Wextra -Wmissing-declarations -Wwrite-strings -Wswitch-enum
CFLAGS=-O2
+# Additional programs that are used during the compilation process.
+EMACS ?= emacs
+GZIP ?= gzip
+
# Additional flags that we will append to whatever the user set.
# These aren't intended for the user to manipulate.
extra_cflags := $(shell pkg-config --cflags glib-2.0 gmime-2.4 talloc)
@@ -31,14 +35,26 @@ include lib/Makefile.local
# And get user settings from the output of configure
include Makefile.config
+# The user has not set any verbosity, default to quiet mode and inform the
+# user how to enable verbose compiles.
+ifeq ($(V),)
+quiet_DOC := "Use \"$(MAKE) V=1\" to see the verbose compile lines.\n"
+quiet = @echo $(quiet_DOC)$(eval quiet_DOC:=)" $1 $@"; $($1)
+endif
+# The user has explicitly enabled quiet compilation.
+ifeq ($(V),0)
+quiet = @echo " $1 $@"; $($1)
+endif
+# Otherwise, print the full command line.
+
%.o: %.cc $(all_deps)
- $(CXX) -c $(CXXFLAGS) $< -o $@
+ $(call quiet,CXX) -c $(CXXFLAGS) $< -o $@
%.o: %.c $(all_deps)
- $(CC) -c $(CFLAGS) $< -o $@
+ $(call quiet,CC) -c $(CFLAGS) $< -o $@
%.elc: %.el
- emacs -batch -f batch-byte-compile $<
+ $(call quiet,EMACS) -batch -f batch-byte-compile $<
.deps/%.d: %.c $(all_deps)
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
diff --git a/Makefile.local b/Makefile.local
index 3c99624..5fd5d4f 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -20,10 +20,10 @@ notmuch_client_srcs = \
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
notmuch: $(notmuch_client_modules) lib/notmuch.a
- $(CXX) $^ $(LDFLAGS) -o $@
+ $(call quiet,CXX) $^ $(LDFLAGS) -o $@
notmuch.1.gz: notmuch.1
- gzip --stdout notmuch.1 > notmuch.1.gz
+ $(call quiet,GZIP) --stdout $^ > $@
install: all notmuch.1.gz
for d in $(DESTDIR)$(prefix)/bin/ $(DESTDIR)$(prefix)/share/man/man1 \
diff --git a/lib/Makefile.local b/lib/Makefile.local
index 79f7b0b..a7562c9 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -18,7 +18,7 @@ libnotmuch_cxx_srcs = \
libnotmuch_modules = $(libnotmuch_c_srcs:.c=.o) $(libnotmuch_cxx_srcs:.cc=.o)
$(dir)/notmuch.a: $(libnotmuch_modules)
- $(AR) rcs $@ $^
+ $(call quiet,AR) rcs $@ $^
SRCS := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs)
CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/notmuch.a
--
1.6.5.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] Makefile: Magic silent rules.
2009-11-21 19:02 [PATCH] Makefile: Magic silent rules Chris Wilson
@ 2009-11-21 19:19 ` Mikhail Gusarov
2009-11-21 20:32 ` Chris Wilson
0 siblings, 1 reply; 6+ messages in thread
From: Mikhail Gusarov @ 2009-11-21 19:19 UTC (permalink / raw)
To: Chris Wilson; +Cc: notmuch
[-- Attachment #1: Type: text/plain, Size: 1334 bytes --]
Twas brillig at 19:02:22 21.11.2009 UTC+00 when chris@chris-wilson.co.uk did gyre and gimble:
CW> Use the facilities of GNU make to create a magic function that will
CW> on the first invocation print a description of how to enable
CW> verbose compile lines and then print the quiet rule.
Ugh. With silent rules enabled it gives me
/bin/sh: --rsyncable: not found
at the end (apparently gzip was eaten out)
And with V=1 it strips first two symbols from the command name:
c -Wall -Wextra -Wmissing-declarations -Wwrite-strings -Wswitch-enum -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gmime-2.4 -Ilib lib/query.cc -o lib/query.o
make: c: Command not found
make: [lib/query.o] Error 127 (ignored)
c -Wall -Wextra -Wmissing-declarations -Wwrite-strings -Wswitch-enum -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gmime-2.4 -Ilib lib/thread.cc -o lib/thread.o
make: c: Command not found
make: [lib/thread.o] Error 127 (ignored)
rcs lib/notmuch.a lib/libsha1.o lib/message-file.o lib/messages.o lib/sha1.o lib/tags.o lib/xutil.o lib/database.o lib/index.o lib/message.o lib/query.o lib/thread.o
make: rcs: Command not found
--
http://fossarchy.blogspot.com/
[-- Attachment #2: Type: application/pgp-signature, Size: 834 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] Makefile: Magic silent rules.
2009-11-21 19:19 ` Mikhail Gusarov
@ 2009-11-21 20:32 ` Chris Wilson
2009-11-21 22:50 ` Mikhail Gusarov
0 siblings, 1 reply; 6+ messages in thread
From: Chris Wilson @ 2009-11-21 20:32 UTC (permalink / raw)
To: notmuch
Use the facilities of GNU make to create a magic function that will
on the first invocation print a description of how to enable verbose
compile lines and then print the quiet rule.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Carl Worth <cworth@cworth.org>
Cc: Mikhail Gusarov <dottedmag@dottedmag.net>
[ickle: Rebased, and duplicate command string eliminated.]
[ickle: Fixed verbose bug pointed out by Mikhail]
---
Makefile | 23 ++++++++++++++++++++---
Makefile.local | 4 ++--
lib/Makefile.local | 2 +-
3 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index 3fedcf1..5d8f321 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,10 @@
WARN_FLAGS=-Wall -Wextra -Wmissing-declarations -Wwrite-strings -Wswitch-enum
CFLAGS=-O2
+# Additional programs that are used during the compilation process.
+EMACS ?= emacs
+GZIP ?= gzip
+
# Additional flags that we will append to whatever the user set.
# These aren't intended for the user to manipulate.
extra_cflags := $(shell pkg-config --cflags glib-2.0 gmime-2.4 talloc)
@@ -31,14 +35,27 @@ include lib/Makefile.local
# And get user settings from the output of configure
include Makefile.config
+# The user has not set any verbosity, default to quiet mode and inform the
+# user how to enable verbose compiles.
+ifeq ($(V),)
+quiet_DOC := "Use \"$(MAKE) V=1\" to see the verbose compile lines.\n"
+quiet = @echo $(quiet_DOC)$(eval quiet_DOC:=)" $1 $@"; $($1)
+endif
+# The user has explicitly enabled quiet compilation.
+ifeq ($(V),0)
+quiet = @echo " $1 $@"; $($1)
+endif
+# Otherwise, print the full command line.
+quiet ?= $($1)
+
%.o: %.cc $(all_deps)
- $(CXX) -c $(CXXFLAGS) $< -o $@
+ $(call quiet,CXX) -c $(CXXFLAGS) $< -o $@
%.o: %.c $(all_deps)
- $(CC) -c $(CFLAGS) $< -o $@
+ $(call quiet,CC) -c $(CFLAGS) $< -o $@
%.elc: %.el
- emacs -batch -f batch-byte-compile $<
+ $(call quiet,EMACS) -batch -f batch-byte-compile $<
.deps/%.d: %.c $(all_deps)
@set -e; rm -f $@; mkdir -p $$(dirname $@) ; \
diff --git a/Makefile.local b/Makefile.local
index 3c99624..5fd5d4f 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -20,10 +20,10 @@ notmuch_client_srcs = \
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
notmuch: $(notmuch_client_modules) lib/notmuch.a
- $(CXX) $^ $(LDFLAGS) -o $@
+ $(call quiet,CXX) $^ $(LDFLAGS) -o $@
notmuch.1.gz: notmuch.1
- gzip --stdout notmuch.1 > notmuch.1.gz
+ $(call quiet,GZIP) --stdout $^ > $@
install: all notmuch.1.gz
for d in $(DESTDIR)$(prefix)/bin/ $(DESTDIR)$(prefix)/share/man/man1 \
diff --git a/lib/Makefile.local b/lib/Makefile.local
index 79f7b0b..a7562c9 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -18,7 +18,7 @@ libnotmuch_cxx_srcs = \
libnotmuch_modules = $(libnotmuch_c_srcs:.c=.o) $(libnotmuch_cxx_srcs:.cc=.o)
$(dir)/notmuch.a: $(libnotmuch_modules)
- $(AR) rcs $@ $^
+ $(call quiet,AR) rcs $@ $^
SRCS := $(SRCS) $(libnotmuch_c_srcs) $(libnotmuch_cxx_srcs)
CLEAN := $(CLEAN) $(libnotmuch_modules) $(dir)/notmuch.a
--
1.6.5.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] Makefile: Magic silent rules.
2009-11-21 20:32 ` Chris Wilson
@ 2009-11-21 22:50 ` Mikhail Gusarov
2009-11-22 3:48 ` Carl Worth
0 siblings, 1 reply; 6+ messages in thread
From: Mikhail Gusarov @ 2009-11-21 22:50 UTC (permalink / raw)
To: Chris Wilson; +Cc: notmuch
[-- Attachment #1: Type: text/plain, Size: 621 bytes --]
Twas brillig at 20:32:20 21.11.2009 UTC+00 when chris@chris-wilson.co.uk did gyre and gimble:
CW> Use the facilities of GNU make to create a magic function that will
CW> on the first invocation print a description of how to enable
CW> verbose compile lines and then print the quiet rule.
Uhm. Now it eats much less :)
$ make
...
GZIP notmuch.1.gz
/bin/sh: --rsyncable: not found
make: *** [notmuch.1.gz] Error 127
$
$ make V=1
...
rsyncable --stdout notmuch.1 > notmuch.1.gz
/bin/sh: rsyncable: not found
make: [notmuch.1.gz] Error 127 (ignored)
$
--
http://fossarchy.blogspot.com/
[-- Attachment #2: Type: application/pgp-signature, Size: 834 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Makefile: Magic silent rules.
2009-11-21 22:50 ` Mikhail Gusarov
@ 2009-11-22 3:48 ` Carl Worth
0 siblings, 0 replies; 6+ messages in thread
From: Carl Worth @ 2009-11-22 3:48 UTC (permalink / raw)
To: Mikhail Gusarov, Chris Wilson; +Cc: notmuch
On Sun, 22 Nov 2009 04:50:41 +0600, Mikhail Gusarov <dottedmag@dottedmag.net> wrote:
> Uhm. Now it eats much less :)
>
> $ make
> ...
> GZIP notmuch.1.gz
> /bin/sh: --rsyncable: not found
> make: *** [notmuch.1.gz] Error 127
> $
>
> $ make V=1
> ...
> rsyncable --stdout notmuch.1 > notmuch.1.gz
> /bin/sh: rsyncable: not found
> make: [notmuch.1.gz] Error 127 (ignored)
The bug here was in using the GZIP variable assuming it would be a
program name. But since gzip expects it to be additional arguments, we
need to use a different name such as a "gzip" variable.
Thanks for the original implementation, Chris. And thanks for the
testing, Mikhail.
I've pushed the original plus the below on top.
-Carl
commit 1266d8511e9adc7296ec4ddbf609dec824b4c94f
Author: Carl Worth <cworth@cworth.org>
Date: Sun Nov 22 04:45:16 2009 +0100
Makefile: Fix to work even with GZIP environment variable set.
The rule here was written to assume that if the GZIP environment
variable was set that it would be the gzip binary to execute,
(similar to the CC and CXX variables). But GZIP is actually used
to pass arguments to gzip, so we have to use a different name.
diff --git a/Makefile b/Makefile
index 5d8f321..ae8bff1 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,9 @@ CFLAGS=-O2
# Additional programs that are used during the compilation process.
EMACS ?= emacs
-GZIP ?= gzip
+# Lowercase to avoid clash with GZIP environment variable for passing
+# arguments to gzip.
+gzip = gzip
# Additional flags that we will append to whatever the user set.
# These aren't intended for the user to manipulate.
diff --git a/Makefile.local b/Makefile.local
index 5fd5d4f..b6d3db3 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -23,7 +23,7 @@ notmuch: $(notmuch_client_modules) lib/notmuch.a
$(call quiet,CXX) $^ $(LDFLAGS) -o $@
notmuch.1.gz: notmuch.1
- $(call quiet,GZIP) --stdout $^ > $@
+ $(call quiet,gzip) --stdout $^ > $@
install: all notmuch.1.gz
for d in $(DESTDIR)$(prefix)/bin/ $(DESTDIR)$(prefix)/share/man/man1 \
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-11-22 3:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-21 19:02 [PATCH] Makefile: Magic silent rules Chris Wilson
2009-11-21 19:19 ` Mikhail Gusarov
2009-11-21 20:32 ` Chris Wilson
2009-11-21 22:50 ` Mikhail Gusarov
2009-11-22 3:48 ` Carl Worth
-- strict thread matches above, loose matches on Subject: below --
2009-11-21 13:48 Chris Wilson
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).