By default, statically link against the in-tree libapparmor. If the in-tree libapparmor is not yet built, print a helpful error message. To build against the system libapparmor, the SYSTEM_LIBAPPARMOR make variable can be set on the command line like so:
$ make SYSTEM_LIBAPPARMOR=1 This patch also fixes issues around the inclusion of the apparmor.h header. Previously, the in-tree apparmor.h was always being included even if the parser was being linked against the system libapparmor. Parser source files should no longer include apparmor.h as the Makefile includes the correct header at build time using the pre-processor's -include option. This is fragile and definitely not ideal, but there is a valid reason for doing it this way. -I../libraries/libapparmor/src/ was previously used, but that is incorrect because there are header file collisions in libraries/libapparmor/src/ and parser/. For example, a parser.h exists in both directories. Per-target modification of EXTRA_CXXFLAGS is performed for source files needing to include apparmor.h. Those targets were also updated to depend on the local apparmor.h when building against the in-tree libapparmor. When building against the system libapparmor, the variable used in the dependency list is empty. Likewise, a libapparmor.la dependency is added to the apparmor_parser target when building against the in-tree apparmor. Signed-off-by: Tyler Hicks <[email protected]> --- This turned out being much uglier than I initially expected. This patch should be fine to merge, but I'd love for someone to suggest something cleaner. I particularly don't like including apparmor.h through a pre-processor option. parser/Makefile | 48 ++++++++++++++++++++++++++++++++++++++---------- parser/dbus.c | 2 +- parser/parser_main.c | 2 +- parser/parser_misc.c | 2 +- parser/parser_regex.c | 2 +- parser/parser_yacc.y | 2 +- 6 files changed, 43 insertions(+), 15 deletions(-) diff --git a/parser/Makefile b/parser/Makefile index 20abd9e..8c5942d 100644 --- a/parser/Makefile +++ b/parser/Makefile @@ -56,9 +56,7 @@ CFLAGS = -g -pg -fprofile-arcs -ftest-coverage endif endif #CFLAGS -LIBAPPARMOR_PATH=../libraries/libapparmor/src/ -LIBAPPARMOR_LDPATH=$(LIBAPPARMOR_PATH)/.libs/ -EXTRA_CXXFLAGS = ${CFLAGS} ${CXX_WARNINGS} -std=gnu++0x -D_GNU_SOURCE -I$(LIBAPPARMOR_PATH) +EXTRA_CXXFLAGS = ${CFLAGS} ${CXX_WARNINGS} -std=gnu++0x -D_GNU_SOURCE EXTRA_CFLAGS = ${EXTRA_CXXFLAGS} ${CPP_WARNINGS} #LEXLIB := -lfl @@ -90,9 +88,24 @@ OBJECTS = $(SRCS:.c=.o) AAREDIR= libapparmor_re AAREOBJECT = ${AAREDIR}/libapparmor_re.a AAREOBJECTS = $(AAREOBJECT) -AARE_LDFLAGS=-static-libgcc -static-libstdc++ -L. -L$(LIBAPPARMOR_LDPATH) +AARE_LDFLAGS = -static-libgcc -static-libstdc++ -L. AALIB = -Wl,-Bstatic -lapparmor -Wl,-Bdynamic -lpthread +ifdef SYSTEM_LIBAPPARMOR + # Using the system libapparmor so Makefile dependencies can't be used + APPARMOR_H = + LIBAPPARMOR_A = + INCLUDE_APPARMOR_H = -include /usr/include/sys/apparmor.h +else + LOCAL_LIBAPPARMOR_PATH = ../libraries/libapparmor/src + LOCAL_LIBAPPARMOR_LDPATH = $(LOCAL_LIBAPPARMOR_PATH)/.libs + + APPARMOR_H = $(LOCAL_LIBAPPARMOR_PATH)/apparmor.h + LIBAPPARMOR_A = $(LOCAL_LIBAPPARMOR_LDPATH)/libapparmor.a + INCLUDE_APPARMOR_H = -include $(APPARMOR_H) + AARE_LDFLAGS += -L$(LOCAL_LIBAPPARMOR_LDPATH) +endif + LEX_C_FILES = parser_lex.c YACC_C_FILES = parser_yacc.c parser_yacc.h @@ -156,7 +169,17 @@ all: arch indep coverage: $(MAKE) clean apparmor_parser COVERAGE=1 -apparmor_parser: $(OBJECTS) $(AAREOBJECTS) +ifndef SYSTEM_LIBAPPARMOR +$(LIBAPPARMOR_A): + @if [ ! -f $@ ]; then \ + echo "error: $@ is missing. Pick one of these possible solutions:" 1>&2; \ + echo " 1) Build against the in-tree libapparmor by building it first and then trying again. See the top-level README for help." 1>&2; \ + echo " 2) Build against the system libapparmor by adding SYSTEM_LIBAPPARMOR=1 to your make command." 1>&2;\ + return 1; \ + fi +endif + +apparmor_parser: $(OBJECTS) $(AAREOBJECTS) $(LIBAPPARMOR_A) $(CXX) $(LDFLAGS) $(EXTRA_CFLAGS) -o $@ $(OBJECTS) $(LIBS) \ ${LEXLIB} $(AAREOBJECTS) $(AARE_LDFLAGS) $(AALIB) @@ -169,13 +192,16 @@ parser_lex.c: parser_lex.l parser_yacc.h parser.h profile.h parser_lex.o: parser_lex.c parser.h parser_yacc.h $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< -parser_misc.o: parser_misc.c parser.h parser_yacc.h profile.h af_names.h cap_names.h +parser_misc.o: EXTRA_CXXFLAGS += $(INCLUDE_APPARMOR_H) +parser_misc.o: parser_misc.c parser.h parser_yacc.h profile.h af_names.h cap_names.h $(APPARMOR_H) $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< -parser_yacc.o: parser_yacc.c parser_yacc.h +parser_yacc.o: EXTRA_CXXFLAGS += $(INCLUDE_APPARMOR_H) +parser_yacc.o: parser_yacc.c parser_yacc.h $(APPARMOR_H) $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< -parser_main.o: parser_main.c parser.h parser_version.h libapparmor_re/apparmor_re.h +parser_main.o: EXTRA_CXXFLAGS += $(INCLUDE_APPARMOR_H) +parser_main.o: parser_main.c parser.h parser_version.h libapparmor_re/apparmor_re.h $(APPARMOR_H) $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< parser_interface.o: parser_interface.c parser.h profile.h libapparmor_re/apparmor_re.h @@ -187,7 +213,8 @@ parser_include.o: parser_include.c parser.h parser_include.h parser_merge.o: parser_merge.c parser.h profile.h $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< -parser_regex.o: parser_regex.c parser.h profile.h libapparmor_re/apparmor_re.h +parser_regex.o: EXTRA_CXXFLAGS += $(INCLUDE_APPARMOR_H) +parser_regex.o: parser_regex.c parser.h profile.h libapparmor_re/apparmor_re.h $(APPARMOR_H) $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< parser_symtab.o: parser_symtab.c parser.h @@ -211,7 +238,8 @@ mount.o: mount.c mount.h parser.h immunix.h lib.o: lib.c lib.h parser.h $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< -dbus.o: dbus.c dbus.h parser.h immunix.h parser_yacc.h +dbus.o: EXTRA_CXXFLAGS += $(INCLUDE_APPARMOR_H) +dbus.o: dbus.c dbus.h parser.h immunix.h parser_yacc.h $(APPARMOR_H) $(CXX) $(EXTRA_CFLAGS) -c -o $@ $< profile.o: profile.cc profile.h parser.h diff --git a/parser/dbus.c b/parser/dbus.c index f5aaca2..bdda14c 100644 --- a/parser/dbus.c +++ b/parser/dbus.c @@ -18,7 +18,7 @@ #include <stdlib.h> #include <string.h> -#include <apparmor.h> +/* apparmor.h is included by Makefile */ #include "parser.h" #include "profile.h" diff --git a/parser/parser_main.c b/parser/parser_main.c index b9cc27d..befcc6e 100644 --- a/parser/parser_main.c +++ b/parser/parser_main.c @@ -41,7 +41,7 @@ #include <sys/sysctl.h> #include <sys/types.h> #include <sys/stat.h> -#include <apparmor.h> +/* apparmor.h is included by Makefile */ #include "lib.h" #include "parser.h" diff --git a/parser/parser_misc.c b/parser/parser_misc.c index dfa2240..9f2b852 100644 --- a/parser/parser_misc.c +++ b/parser/parser_misc.c @@ -37,7 +37,7 @@ #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> -#include <apparmor.h> +/* apparmor.h is included by Makefile */ #include "parser.h" #include "profile.h" diff --git a/parser/parser_regex.c b/parser/parser_regex.c index 9452d3f..c13bd29 100644 --- a/parser/parser_regex.c +++ b/parser/parser_regex.c @@ -21,7 +21,7 @@ #include <string.h> #include <libintl.h> #include <linux/limits.h> -#include <apparmor.h> +/* apparmor.h is included by Makefile */ #define _(s) gettext(s) /* #define DEBUG */ diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y index cba1e90..4c7e137 100644 --- a/parser/parser_yacc.y +++ b/parser/parser_yacc.y @@ -27,7 +27,7 @@ #include <errno.h> #include <fcntl.h> #include <libintl.h> -#include <apparmor.h> +/* apparmor.h is included by Makefile */ #define _(s) gettext(s) /* #define DEBUG */ -- 1.8.3.2 -- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
