1
# $Id: Makefile 510 2007-03-30 17:09:50Z jmichael-at-suse-de $
2
# ----------------------------------------------------------------------
3
# Copyright (c) 2004, 2005, 2006 NOVELL (All rights reserved)
5
# This program is free software; you can redistribute it and/or
6
# modify it under the terms of version 2 of the GNU General Public
7
# License published by the Free Software Foundation.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, contact Novell, Inc.
16
# ----------------------------------------------------------------------
21
include common/Make.rules
23
COMMONDIR_EXISTS=$(strip $(shell [ -d ${COMMONDIR} ] && echo true))
24
ifeq ($(COMMONDIR_EXISTS), true)
25
common/Make.rules: $(COMMONDIR)/Make.rules
30
APPARMOR_BIN_PREFIX=${DESTDIR}/lib/apparmor
32
INSTALL_CONFDIR=${DESTDIR}${CONFDIR}
33
LOCALEDIR=/usr/share/locale
35
YACC := /usr/bin/bison
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 \
42
if ${CC} $${warning} -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then \
51
EXTRA_CFLAGS = ${CFLAGS} ${WARNINGS}
55
# override this on the make command to point to where the immunix.h file is
56
# (yeah this is lame, but since we are tied to the kernel so tightly...)
57
#INCLUDEDIR = /usr/src/linux/include
61
CFLAGS += -I$(INCLUDEDIR)
64
# Internationalization support. Define a package and a LOCALEDIR
65
EXTRA_CFLAGS+=-DPACKAGE=\"${NAME}\" -DLOCALEDIR=\"${LOCALEDIR}\"
67
# Compile-time configuration of the location of the config file
68
EXTRA_CFLAGS+=-DSUBDOMAIN_CONFDIR=\"${CONFDIR}\"
70
SRCS = parser_include.c parser_interface.c parser_lex.c parser_main.c \
71
parser_misc.c parser_merge.c parser_symtab.c parser_yacc.c \
72
parser_regex.c parser_variable.c parser_policy.c
73
HDRS = parser.h parser_include.h immunix.h
74
TOOLS = apparmor_parser
76
OBJECTS = parser_lex.o parser_yacc.o parser_main.o parser_interface.o \
77
parser_include.o parser_merge.o parser_symtab.o parser_misc.o \
78
parser_regex.o parser_variable.o parser_policy.o
80
AAREDIR= libapparmor_re
81
AAREOBJECTS = ${AAREDIR}/libapparmor_re.a
84
PCREOBJECTS = ${PCREDIR}/pcre.o
86
LEX_C_FILES = parser_lex.c
87
YACC_C_FILES = parser_yacc.c parser_yacc.h
89
TESTS = tst_regex tst_misc tst_symtab tst_variable
90
TEST_FLAGS = -Wl,--warn-unresolved-symbols
93
TEST_OBJECTS = $(filter-out parser_lex.o, \
94
$(filter-out parser_yacc.o, \
95
$(filter-out parser_main.o, ${OBJECTS} ${PCREOBJECTS})))
104
BUILD_OUTPUT = > /dev/null 2>&1
107
export Q VERBOSE BUILD_OUTPUT
109
po/${NAME}.pot: ${SRCS} ${HDRS}
110
make -C po ${NAME}.pot NAME=${NAME} SOURCES="${SRCS} ${HDRS}"
112
all: $(LEX_C_FILES) $(YACC_C_FILES) $(TOOLS)
116
apparmor_parser: $(OBJECTS) $(PCREOBJECTS) $(AAREOBJECTS)
118
ln -s `g++ -print-file-name=libstdc++.a`
119
g++ $(EXTRA_CFLAGS) -o $@ $(OBJECTS) $(PCREOBJECTS) $(LIBS) \
120
${LEXLIB} $(AAREOBJECTS) -static-libgcc -L.
122
parser_yacc.c parser_yacc.h: parser_yacc.y parser.h
123
$(YACC) $(YFLAGS) -o parser_yacc.c parser_yacc.y
125
parser_lex.c: parser_lex.l parser_yacc.h parser.h
126
$(LEX) ${LEXFLAGS} -o$@ $<
128
parser_lex.o: parser_lex.c parser.h parser_yacc.h
129
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
131
parser_misc.o: parser_misc.c parser.h parser_yacc.h
132
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
134
parser_yacc.o: parser_yacc.c parser_yacc.h
135
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
137
parser_main.o: parser_main.c parser.h parser_version.h
138
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
140
parser_interface.o: parser_interface.c parser.h
141
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
143
parser_include.o: parser_include.c parser.h parser_include.h
144
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
146
parser_merge.o: parser_merge.c parser.h
147
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
149
parser_regex.o: parser_regex.c parser.h
150
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
152
parser_symtab.o: parser_symtab.c parser.h
153
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
155
parser_variable.o: parser_variable.c parser.h
156
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
158
parser_policy.o: parser_policy.c parser.h parser_yacc.h
159
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
161
parser_version.h: Makefile
162
@echo \#define PARSER_VERSION \"$(VERSION)\" > .ver
165
tst_symtab: parser_symtab.c parser.h parser_variable.o
166
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< parser_variable.o $(BUILD_OUTPUT)
168
tst_variable: parser_variable.c parser.h $(filter-out parser_variable.o, ${TEST_OBJECTS})
169
$(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)
179
for test in ${TESTS} ; do echo "*** running $${test}" && ./$${test} $(BUILD_OUTPUT) ; done
180
$(Q)make -s -C tst tests
182
# always need to rebuild.
183
.SILENT: $(AAREOBJECTS)
187
.SILENT: $(PCREOBJECTS)
189
make -C $(PCREDIR) "CFLAGS=$(EXTRA_CFLAGS)"
191
.PHONY: install-rhel4
192
install-rhel4: install-redhat
194
.PHONY: install-redhat
196
install -m 755 -d $(DESTDIR)/etc/init.d
197
install -m 755 rc.apparmor.$(subst install-,,$@) $(DESTDIR)/etc/init.d/apparmor
198
install -m 755 rc.aaeventd.redhat $(DESTDIR)/etc/init.d/aaeventd
202
install -m 755 -d $(DESTDIR)/etc/init.d
203
install -m 755 rc.apparmor.$(subst install-,,$(@)) $(DESTDIR)/etc/init.d/boot.apparmor
204
install -m 755 rc.aaeventd.$(subst install-,,$(@)) $(DESTDIR)/etc/init.d/aaeventd
205
install -m 755 -d $(DESTDIR)/sbin
206
ln -sf /etc/init.d/boot.apparmor $(DESTDIR)/sbin/rcapparmor
207
ln -sf rcapparmor $(DESTDIR)/sbin/rcsubdomain
208
ln -sf /etc/init.d/aaeventd $(DESTDIR)/sbin/rcaaeventd
210
.PHONY: install-slackware
212
install -m 755 -d $(APPARMOR_BIN_PREFIX)/install
213
install -m 755 frob_slack_rc $(APPARMOR_BIN_PREFIX)/install
214
install -m 755 -d $(DESTDIR)/etc/rc.d
215
install -m 755 rc.apparmor.$(subst install-,,$(@)) $(DESTDIR)/etc/rc.d/rc.apparmor
217
.PHONY: install-debian
222
INSTALLDEPS+=install-$(DISTRO)
226
install: $(INSTALLDEPS)
227
install -m 755 -d $(DESTDIR)/sbin
228
install -m 755 ${TOOLS} $(DESTDIR)/sbin
229
install -m 755 -d $(INSTALL_CONFDIR)
230
install -m 644 subdomain.conf $(INSTALL_CONFDIR)
231
install -m 755 -d ${DESTDIR}/var/lib/apparmor
232
install -m 755 -d $(APPARMOR_BIN_PREFIX)
233
install -m 755 rc.apparmor.functions $(APPARMOR_BIN_PREFIX)
234
make -C po install NAME=${NAME} DESTDIR=${DESTDIR}
239
rm -f core core.* *.o *.s *.a *~
240
rm -f $(TOOLS) $(TESTS)
242
rm -f $(YACC_C_FILES)
243
rm -f parser_version.h
244
rm -f $(NAME)*.tar.gz $(NAME)*.tgz
246
make -s -C $(PCREDIR) clean
247
make -s -C $(AAREDIR) clean
253
@rm -f $(LEX_C_FILES) $(YACC_C_FILES)