Merge branch 'v4-0-test' into v4-0-gmake3
[kai/samba-autobuild/.git] / source4 / build / make / rules.mk
1 # Rules file for Samba 4
2 # This relies on GNU make.
3 #
4 # Dependencies command
5 DEPENDS = $(CC) -M -MG -MP -MT $(<:.c=.o) -MT $@ \
6     $(CFLAGS) $(CPPFLAGS) $< -o $@
7 # Dependencies for host objects
8 HDEPENDS = $(CC) -M -MG -MP -MT $(<:.c=.ho) -MT $@ \
9     $(HOSTCC_FLAGS) $(CPPFLAGS) $< -o $@
10 # Dependencies for precompiled headers
11 PCHDEPENDS = $(CC) -M -MG -MT include/includes.h.gch -MT $@ \
12     $(CFLAGS) $(CPPFLAGS) $< -o $@
13
14 # Run a static analysis checker
15 CHECK = $(CC_CHECKER) $(CFLAGS) $(PICFLAG) $(CPPLAGS) -c $< -o $@
16
17 # Run the configured compiler
18 COMPILE = $(CC) $(CFLAGS) $(PICFLAG) \
19                   $(CPPFLAGS) \
20                   -c $< -o $@
21
22 # Run the compiler for the build host
23 HCOMPILE = $(HOSTCC) $(HOSTCC_FLAGS) $(CPPFLAGS) -c $< -o $@
24
25 # Precompile headers
26 PCHCOMPILE = @$(CC) -Ilib/replace \
27     $(CFLAGS) $(PICFLAG) $(CPPFLAGS) -c $< -o $@
28
29 # Partial linking
30 PARTLINK = @$(PROG_LD) -r
31
32 make_utility_dir = $(srcdir)/build/make/
33
34 include/config.h:
35         @echo "include/config.h not present"
36         @echo "You need to rerun ./autogen.sh and ./configure"
37         @/bin/false
38
39 pch::
40
41 clean:: clean_pch
42         @echo Removing objects
43         @-find . -name '*.o' -exec rm -f '{}' \;
44         @echo Removing hostcc objects
45         @-find . -name '*.ho' -exec rm -f '{}' \;
46         @echo Removing binaries
47         @-rm -f $(BIN_PROGS) $(SBIN_PROGS) $(BINARIES) $(TORTURE_PROGS)
48         @echo Removing libraries
49         @-rm -f $(STATIC_LIBRARIES) $(SHARED_LIBRARIES)
50         @-rm -f bin/static/*.a bin/shared/*.$(SHLIBEXT) bin/mergedobj/*.o
51         @echo Removing modules
52         @-rm -f bin/modules/*/*.$(SHLIBEXT)
53         @-rm -f bin/*_init_module.c
54         @echo Removing dummy targets
55         @-rm -f bin/.*_*
56         @echo Removing generated files
57         @-rm -f bin/*_init_module.c
58         @-rm -rf librpc/gen_* 
59         @echo Removing proto headers
60         @-rm -f $(PROTO_HEADERS)
61
62 distclean:: clean
63         -rm -f include/config.h include/config_tmp.h include/build.h
64         -rm -f data.mk
65         -rm -f config.status
66         -rm -f config.log config.cache
67         -rm -f config.pm config.mk
68         -rm -f $(PC_FILES)
69
70 removebackup::
71         -rm -f *.bak *~ */*.bak */*~ */*/*.bak */*/*~ */*/*/*.bak */*/*/*~
72
73 realdistclean:: distclean removebackup
74         -rm -f include/config_tmp.h.in
75         -rm -f version.h
76         -rm -f configure
77         -rm -f $(MANPAGES)
78
79 check:: test
80
81 unused_macros:
82         $(srcdir)/script/find_unused_macros.pl `find . -name "*.[ch]"` | sort
83
84 # Create a static library
85 %.a:
86         @echo Linking $@
87         @rm -f $@
88         @mkdir -p $(@D)
89         @$(STLD) $(STLD_FLAGS) $@ $^
90
91 ###############################################################################
92 # Templates
93 ###############################################################################
94
95 # Partially link
96 # Arguments: target object file, source object files
97 define partial_link_template 
98 $(1): $(2) ;
99         @echo Partially linking $$@
100         @mkdir -p $$(@D)
101         $$(PARTLINK) -o $$@ $$^
102 endef
103
104 # Link a binary
105 # Arguments: target file, depends, flags
106 define binary_link_template
107 $(1): $(2) ;
108         @echo Linking $$@
109         @$$(BNLD) $$(BNLD_FLAGS) $$(INTERN_LDFLAGS) -o $$@ $$(INSTALL_LINK_FLAGS) $(3)
110 endef
111
112 # Link a host-machine binary
113 # Arguments: target file, depends, flags
114 define host_binary_link_template
115 $(1): $(2) ;
116         @echo Linking $$@
117         @$$(HOSTLD) $$(HOSTLD_FLAGS) -L$${builddir}/bin/static -o $$@ $$(INSTALL_LINK_FLAGS) $(3)
118 endef
119
120 # Create a prototype header
121 # Arguments: header file, c files
122 define proto_header_template
123 $(1): $(2) ;
124         @echo "Creating $$@"
125         @$$(PERL) $$(srcdir)/script/mkproto.pl --srcdir=$$(srcdir) --builddir=$$(builddir) --all=$$@ $$^
126 endef
127
128 # Shared module
129 # Arguments: Target, dependencies, objects
130 define shared_module_template
131
132 $(1): $(2) ;
133         @echo Linking $$@
134         @mkdir -p $$(@D)
135         @$$(MDLD) $$(LDFLAGS) $$(MDLD_FLAGS) $$(INTERN_LDFLAGS) -o $$@ $$(INSTALL_LINK_FLAGS) $(3)
136
137 endef
138
139 ###############################################################################
140 # File types
141 ###############################################################################
142
143 .SUFFIXES: .x .c .et .y .l .d .o .h .h.gch .a .$(SHLIBEXT) .1 .1.xml .3 .3.xml .5 .5.xml .7 .7.xml .8 .8.xml .ho .idl .hd
144
145 .c.d:
146         @echo "Generating dependencies for $<"
147         @$(DEPENDS)
148
149 .c.hd:
150         @echo "Generating host-compiler dependencies for $<"
151         @$(HDEPENDS)
152
153 include/includes.d: include/includes.h
154         @echo "Generating dependencies for $<"
155         @$(PCHDEPENDS)
156
157 .c.o:
158         @if test -n "$(CC_CHECKER)"; then \
159                 echo "Checking  $< with '$(CC_CHECKER)'"; \
160                 $(CHECK) ; \
161         fi
162         @echo "Compiling $<"
163         @-mkdir -p `dirname $@`
164         @$(COMPILE) && exit 0 ; \
165                 echo "The following command failed:" 1>&2;\
166                 $(COMPILE) >/dev/null 2>&1
167
168
169 #               echo "$(COMPILE)" 1>&2;\
170
171 .c.ho:
172         @echo "Compiling $< with host compiler"
173         @-mkdir -p `dirname $@`
174         @$(HCOMPILE) && exit 0;\
175                 echo "The following command failed:" 1>&2;\
176                 echo "$(HCOMPILE)" 1>&2;\
177                 $(HCOMPILE) >/dev/null 2>&1
178
179 .h.h.gch:
180         @echo "Precompiling $<"
181         @$(PCHCOMPILE)
182
183 .y.c:
184         @echo "Building $< with $(YACC)"
185         @-$(make_utility_dir)/yacc_compile.sh "$(YACC)" "$<" "$@"
186
187 .l.c:
188         @echo "Building $< with $(LEX)"
189         @-$(make_utility_dir)/script/lex_compile.sh "$(LEX)" "$<" "$@"
190
191 %.a:
192         @echo Linking $@
193         @rm -f $@
194         @mkdir -p $(@D)
195         @$(STLD) $(STLD_FLAGS) $@ $^
196
197
198 DOCBOOK_MANPAGE_URL = http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
199
200 .1.xml.1:
201         $(XSLTPROC) -o $@ $(DOCBOOK_MANPAGE_URL) $<
202
203 .3.xml.3:
204         $(XSLTPROC) -o $@ $(DOCBOOK_MANPAGE_URL) $<
205
206 .5.xml.5:
207         $(XSLTPROC) -o $@ $(DOCBOOK_MANPAGE_URL) $<
208
209 .7.xml.7:
210         $(XSLTPROC) -o $@ $(DOCBOOK_MANPAGE_URL) $<
211
212 .8.xml.8:
213         $(XSLTPROC) -o $@ $(DOCBOOK_MANPAGE_URL) $<
214
215 dist:: idl_full manpages configure distclean 
216
217 configure: 
218         ./autogen.sh
219
220 showflags::
221         @echo 'Samba will be compiled with flags:'
222         @echo '  CPP        = $(CPP)'
223         @echo '  CPPFLAGS   = $(CPPFLAGS)'
224         @echo '  CC         = $(CC)'
225         @echo '  CFLAGS     = $(CFLAGS)'
226         @echo '  PICFLAG    = $(PICFLAG)'
227         @echo '  BNLD       = $(BNLD)'
228         @echo '  BNLD_FLAGS = $(BNLD_FLAGS)'
229         @echo '  STLD       = $(STLD)'
230         @echo '  STLD_FLAGS = $(STLD_FLAGS)'
231         @echo '  SHLD       = $(SHLD)'
232         @echo '  SHLD_FLAGS = $(SHLD_FLAGS)'
233         @echo '  MDLD       = $(MDLD)'
234         @echo '  MDLD_FLAGS = $(MDLD_FLAGS)'
235         @echo '  SHLIBEXT   = $(SHLIBEXT)'
236
237 etags:
238         etags `find $(srcdir) -name "*.[ch]"`
239
240 ctags:
241         ctags `find $(srcdir) -name "*.[ch]"`