1
# $Id: Makefile 510 2007-03-30 17:09:50Z jmichael-at-suse-de $
2
1
# ----------------------------------------------------------------------
3
# Copyright (c) 2004, 2005, 2006 NOVELL (All rights reserved)
2
# Copyright (c) 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
3
# NOVELL (All rights reserved)
5
5
# This program is free software; you can redistribute it and/or
6
6
# modify it under the terms of version 2 of the GNU General Public
31
31
CONFDIR=/etc/apparmor
32
32
INSTALL_CONFDIR=${DESTDIR}${CONFDIR}
33
33
LOCALEDIR=/usr/share/locale
34
MANPAGES=apparmor.d.5 apparmor.7 apparmor_parser.8 subdomain.conf.5 apparmor.vim.5
35
36
YACC := /usr/bin/bison
37
38
LEX := /usr/bin/flex
39
WARNINGS = -Wall -Wstrict-prototypes
40
EXTRA_WARNINGS = -Wsign-compare -Wmissing-field-initializers -Wnested-externs -Wformat-security -Wunused-parameter
41
WARNINGS += $(shell for warning in ${EXTRA_WARNINGS} ; do \
41
EXTRA_WARNINGS = -Wsign-compare -Wmissing-field-initializers -Wformat-security -Wunused-parameter
42
CXX_WARNINGS = ${WARNINGS} $(shell for warning in ${EXTRA_WARNINGS} ; do \
42
43
if ${CC} $${warning} -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then \
43
44
echo "$${warning}"; \
47
CPP_WARNINGS = -Wstrict-prototypes -Wnested-externs
51
EXTRA_CFLAGS = ${CFLAGS} ${WARNINGS}
56
EXTRA_CXXFLAGS = ${CFLAGS} ${CXX_WARNINGS} -D_GNU_SOURCE
57
EXTRA_CFLAGS = ${EXTRA_CXXFLAGS} ${CPP_WARNINGS}
70
76
SRCS = parser_include.c parser_interface.c parser_lex.c parser_main.c \
71
77
parser_misc.c parser_merge.c parser_symtab.c parser_yacc.c \
72
parser_regex.c parser_variable.c parser_policy.c
78
parser_regex.c parser_variable.c parser_policy.c parser_alias.c
73
79
HDRS = parser.h parser_include.h immunix.h
74
80
TOOLS = apparmor_parser
76
82
OBJECTS = parser_lex.o parser_yacc.o parser_main.o parser_interface.o \
77
83
parser_include.o parser_merge.o parser_symtab.o parser_misc.o \
78
parser_regex.o parser_variable.o parser_policy.o
84
parser_regex.o parser_variable.o parser_policy.o parser_alias.o
80
86
AAREDIR= libapparmor_re
81
87
AAREOBJECTS = ${AAREDIR}/libapparmor_re.a
84
PCREOBJECTS = ${PCREDIR}/pcre.o
86
89
LEX_C_FILES = parser_lex.c
87
90
YACC_C_FILES = parser_yacc.c parser_yacc.h
93
96
TEST_OBJECTS = $(filter-out parser_lex.o, \
94
97
$(filter-out parser_yacc.o, \
95
$(filter-out parser_main.o, ${OBJECTS} ${PCREOBJECTS})))
98
$(filter-out parser_main.o, ${OBJECTS})))
109
115
po/${NAME}.pot: ${SRCS} ${HDRS}
110
116
make -C po ${NAME}.pot NAME=${NAME} SOURCES="${SRCS} ${HDRS}"
112
all: $(LEX_C_FILES) $(YACC_C_FILES) $(TOOLS)
118
techdoc.pdf: techdoc.tex
119
while pdflatex $< ${BUILD_OUTPUT} || exit 1 ; \
120
grep -q "Label(s) may have changed" techdoc.log; \
123
techdoc/index.html: techdoc.pdf
124
latex2html -show_section_numbers -split 0 -noinfo -nonavigation -noaddress techdoc.tex ${BUILD_OUTPUT}
126
techdoc.txt: techdoc/index.html
129
# targets arranged this way so that people who don't want full docs can
130
# pick specific targets they want.
113
132
$(Q)make -C po all
116
apparmor_parser: $(OBJECTS) $(PCREOBJECTS) $(AAREOBJECTS)
134
manpages: $(MANPAGES)
136
htmlmanpages: $(HTMLMANPAGES)
140
docs: manpages htmlmanpages pdf
144
apparmor_parser: $(OBJECTS) $(AAREOBJECTS)
117
145
rm -f ./libstdc++.a
118
146
ln -s `g++ -print-file-name=libstdc++.a`
119
g++ $(EXTRA_CFLAGS) -o $@ $(OBJECTS) $(PCREOBJECTS) $(LIBS) \
147
g++ $(EXTRA_CFLAGS) -o $@ $(OBJECTS) $(LIBS) \
120
148
${LEXLIB} $(AAREOBJECTS) -static-libgcc -L.
122
150
parser_yacc.c parser_yacc.h: parser_yacc.y parser.h
123
$(YACC) $(YFLAGS) -o parser_yacc.c parser_yacc.y
151
$(YACC) $(YFLAGS) -o parser_yacc.c parser_yacc.y
125
153
parser_lex.c: parser_lex.l parser_yacc.h parser.h
126
154
$(LEX) ${LEXFLAGS} -o$@ $<
128
156
parser_lex.o: parser_lex.c parser.h parser_yacc.h
129
157
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
131
parser_misc.o: parser_misc.c parser.h parser_yacc.h
159
parser_misc.o: parser_misc.c parser.h parser_yacc.h af_names.h cap_names.h
132
160
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
134
162
parser_yacc.o: parser_yacc.c parser_yacc.h
135
163
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
137
parser_main.o: parser_main.c parser.h parser_version.h
165
parser_main.o: parser_main.c parser.h parser_version.h libapparmor_re/apparmor_re.h
138
166
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
140
parser_interface.o: parser_interface.c parser.h
168
parser_interface.o: parser_interface.c parser.h libapparmor_re/apparmor_re.h
141
169
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
143
171
parser_include.o: parser_include.c parser.h parser_include.h
146
174
parser_merge.o: parser_merge.c parser.h
147
175
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
149
parser_regex.o: parser_regex.c parser.h
177
parser_regex.o: parser_regex.c parser.h libapparmor_re/apparmor_re.h
150
178
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
152
180
parser_symtab.o: parser_symtab.c parser.h
158
186
parser_policy.o: parser_policy.c parser.h parser_yacc.h
159
187
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
189
parser_alias.o: parser_alias.c parser.h
190
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
161
192
parser_version.h: Makefile
162
193
@echo \#define PARSER_VERSION \"$(VERSION)\" > .ver
196
# These are the families that it doesn't make sense for apparmor to mediate.
197
# We use PF_ here since that is what is required in bits/socket.h, but we will
198
# rewrite these as AF_.
199
FILTER_FAMILIES=PF_MAX PF_UNSPEC PF_UNIX PF_LOCAL PF_NETLINK
201
__FILTER=$(shell echo $(strip $(FILTER_FAMILIES)) | sed -e 's/ /\\\|/g')
203
af_names.h: /usr/include/bits/socket.h
204
LC_ALL=C sed -n -e '/$(__FILTER)/d' -e "s/^\#define[ \\t]\\+PF_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\\(.*\\)\$$/#ifndef AF_\\1\\n# define AF_\\1 \\2\\n#endif\\nAA_GEN_NET_ENT(\"\\L\\1\", \\UAF_\\1)\\n/p" $< > $@
205
LC_ALL=C sed -n -e "s/^\#define[ \\t]\\+PF_MAX[ \\t]\\+\\([0-9]\\+\\)[ \\t]\\+.*/#define AA_AF_MAX \\1\n/p" $< >> $@
208
cap_names.h: /usr/include/linux/capability.h
209
LC_ALL=C sed -n -e "/CAP_EMPTY_SET/d" -e "s/^\#define[ \\t]\\+CAP_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9xa-f]\\+\\)\\(.*\\)\$$/\{\"\\L\\1\", \\UCAP_\\1\},/p" $< > $@
165
211
tst_symtab: parser_symtab.c parser.h parser_variable.o
166
212
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< parser_variable.o $(BUILD_OUTPUT)
168
214
tst_variable: parser_variable.c parser.h $(filter-out parser_variable.o, ${TEST_OBJECTS})
169
215
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(filter-out parser_variable.o, ${TEST_OBJECTS}) $(BUILD_OUTPUT)
171
tst_misc: parser_misc.c parser.h parser_yacc.h
172
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(BUILD_OUTPUT)
174
tst_regex: parser_regex.c parser.h parser_yacc.h $(PCREOBJECTS)
175
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(PCREOBJECTS) $(BUILD_OUTPUT)
217
tst_misc: parser_misc.c parser.h parser_yacc.h af_names.h cap_names.h
218
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(BUILD_OUTPUT)
220
tst_regex: parser_regex.c parser.h parser_yacc.h
221
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(BUILD_OUTPUT)
179
for test in ${TESTS} ; do echo "*** running $${test}" && ./$${test} $(BUILD_OUTPUT) ; done
229
sh -e -c 'for test in ${TESTS} ; do echo "*** running $${test}" && ./$${test} $(BUILD_OUTPUT) ; done'
180
230
$(Q)make -s -C tst tests
182
235
# always need to rebuild.
183
236
.SILENT: $(AAREOBJECTS)
237
.PHONY: $(AAREOBJECTS)
187
.SILENT: $(PCREOBJECTS)
189
make -C $(PCREDIR) "CFLAGS=$(EXTRA_CFLAGS)"
239
make -C $(AAREDIR) CFLAGS="$(EXTRA_CXXFLAGS)"
191
241
.PHONY: install-rhel4
192
242
install-rhel4: install-redhat
232
285
install -m 755 -d $(APPARMOR_BIN_PREFIX)
233
286
install -m 755 rc.apparmor.functions $(APPARMOR_BIN_PREFIX)
234
287
make -C po install NAME=${NAME} DESTDIR=${DESTDIR}
288
make install_manpages DESTDIR=${DESTDIR}
239
rm -f core core.* *.o *.s *.a *~
293
rm -f core core.* *.o *.s *.a *~
240
294
rm -f $(TOOLS) $(TESTS)
241
295
rm -f $(LEX_C_FILES)
242
296
rm -f $(YACC_C_FILES)
243
297
rm -f parser_version.h
244
298
rm -f $(NAME)*.tar.gz $(NAME)*.tgz
245
299
rm -f libstdc++.a
246
make -s -C $(PCREDIR) clean
302
rm -rf techdoc.aux techdoc.log techdoc.pdf techdoc.toc techdor.txt techdoc/
247
303
make -s -C $(AAREDIR) clean
248
304
make -s -C po clean
250
307
.SILENT: dist_clean