Still some hair left
I’ve been asked to give more input on
make V=1 Vs.
--disable-shave, so here it is: once again, before shipping your package with shave enabled by default, there is something crucial to understand:
make V=1 (when having configured your package with
--enable-shave) is NOT equivalent to no shave at all (ie
--disable-shave). This is because the shave m4 macro is setting
MAKEFLAGS=-s in every single Makefile. This means that make won’t print the commands as is used to, and that the only way to print something on the screen is to echo it. It’s precisely what the shave wrappers do, they echo the CC/CXX and LIBTOOL commands when
V=1. So in short custom rules and a few automake commands won’t be displayed with
That said, it’s possible to craft a rule that would display the command with shaved enabled and
make V=1. The following rule:
lib-file2.h: Makefile $(SHAVE_GEN)echo "#define FOO_DEFINE 0xbabe" > lib-file2.h
lib-file2.h: Makefile @cmd='echo "#define FOO_DEFINE 0xbabe" > lib-file2.h'; \ if test x"$$V" = x1; then echo $$cmd; fi $(SHAVE_GEN)echo "#define FOO_DEFINE 0xbabe" > lib-file2.h
which is quite ugly, to say the least. (if you find a smarter way, please enlighten me!).
On the development side, shave is slowly becoming more mature:
- Thanks to Jan Schmidt, shave works with non GNU
echothat do not support
-n. It now works on Solaris, hopefully on BSDs and various Unixes as well (not tested though).
SHAVE_INIThas a new, optional, parameter which empowers the programmer to define shave’s default behaviour (when
./configureis run without shave any related option): either
SHAVE_INIT([autootols], [enable])will instruct shave to find its wrapper scripts in the autotools directory and that running
./configurewill actually enable the beast. SHAVE_INIT without parameters at all is supposed to mean that the wrapper scripts are in
./configurewill not enable shave without the
- however, shave has been reported to fail miserably with scratchbox.