summaryrefslogtreecommitdiff
path: root/README
blob: d84587648f2cad92125666454b5042845b7f36ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138


	shave
	-----

Fed up with endless screens of libtool/automake output? Fed up with
having to resort to -Werror to see warnings in your code? Then shave
might be for you.  shave transforms the messy output of autotools into
a pretty Kbuild-like one (Kbuild is the Linux build system). It’s
composed of a m4 macro and 2 small shell scripts.

Hopefully, in a few minutes, you should be able to see your project
compile like this:

$ make
Making all in foo
  GEN   lib-file2.h
Making all in internal
  CC    internal-file0.o
  LINK  libinternal.la
  CC    lib-file0.o
  CC    lib-file1.o
  LINK  libfoo.la
Making all in tools
  CC    tool0-tool0.o
  LINK  tool0

Just like Kbuild, shave supports outputting the underlying commands using:

$ make V=1

shave can be enabled/disabled at configure time with the --enable-shave
option.


	Getting shave
	-------------

You can download shave either by grabbing a release tarball at:

	http://download.lespiau.name/shave

or by cloning a git repository:

	git clone git://git.lespiau.name/shave


	Setup
	-----

* Put the two shell scripts shave.in and shave-libtool.in in the
  directory of your choice (it can be at the root of your autotooled
  project),
* add shave and shave-libtool to AC_CONFIG_FILES,
* add shave.m4 either in acinclude.m4 or your macro directory,
* add a call to SHAVE_INIT just before AC_CONFIG_FILES/AC_OUTPUT.
  SHAVE_INIT takes two (optionals) arguments:
      - the directory where shave and shave-libtool are,
      - enable/disable: wether shave will be enabled or disabled by
        default.

As usual with the autotools, copy & paste from an already shaved
project is likely to be the most used way to make shave work for you.


	Custom rules
	------------

Sometimes you have custom Makefile rules, e.g. to generate a small
header, run glib-mkenums or glib-genmarshal. It would be nice to output
a pretty ‘GEN’ line. That’s quite easy actually, just add a line at the
top of your Makefile.am (Q is defined by shave.m4)

QUIET_GEN = $(Q:@=@echo '  GEN   '$@;)

and then it’s just a matter of prepending $(QUIET_GEN) to the rule
creating the file:

lib-file2.h: Makefile
       $(QUIET_GEN)echo "#define FOO_DEFINE 0xbabe" > lib-file2.h


	shave + gtk-doc
	---------------

gtk-doc + shave + libtool 1.x (2.x is fine) is known to have a small
issue, a patch is available (gnome bug #572396) and gtk-doc 1.12 will
have it.  Meanwhile I suggest adding a few lines to your autogen.sh
script.

sed -e 's#) --mode=compile#) --tag=CC --mode=compile#' gtk-doc.make \
		> gtk-doc.temp \
	&& mv gtk-doc.temp gtk-doc.make
sed -e 's#) --mode=link#) --tag=CC --mode=link#' gtk-doc.make \
		> gtk-doc.temp \
        && mv gtk-doc.temp gtk-doc.make


	dolt + shave
	------------

It’s possible to use dolt in conjunction with shave with a surprisingly
small patch to dolt:

	http://git.lespiau.name/cgit/dolt/commit/?h=shave-dolt


	Caveats
	-------

* Shave defines the Q and V variables that could clash with your
  Makefiles,
* In short custom rules and a few automake commands won’t be displayed
  with make V=1.
  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.


	Layout
	------

shave         : the actual thing
test-flat-nolt: flat layout, no use of litool (broken!)
test-flat-lt  : flat layout, use of libtool
test          : common layout, libtooled, with noinst libs
test-cxx      : common layout, libtooled, with noinst libs, C++

To use the tests:
	* cd $test
	* autoreconf --install
	* ./configure
	* make