[apparmor] [patch 2/3] parser: Add make variable to build against local or system libapparmor [v2]

Tyler Hicks tyhicks at canonical.com
Mon Jan 6 20:29:36 UTC 2014


On 2013-12-24 12:59:34, Steve Beattie wrote:
> 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

I want the "system" variable used for the parser and the regression test
to be the same and I like USE_SYSTEM better than SYSTEM_LIBAPPARMOR.

Would you mind doing a s/SYSTEM_LIBAPPARMOR/USE_SYSTEM/g on this patch
(including the commit message) prior to pushing to trunk?

Everything else looks good!

Acked-by: Tyler Hicks <tyhicks at canonical.com>

Tyler

> 
> 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.
> It modifies the apparmor.h include path based on the previous patch
> separating them out in the libapparmor source. This was needed because
> header file name collisions were already occurring.
> 
> For source files needing to include apparmor.h, the make 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.a dependency is added to the apparmor_parser target when
> building against the in-tree apparmor.
> 
> Patch history:
>   v1: from Tyler Hicks <tyhicks at canonical.com>
>       - initial version
>   v2: revert to altering the include search path rather than including
>       the apparmor.h header directly via cpp arguments, alter the
>       include statements to <sys/apparmor.h> which will work against
>       either in-tree or (default) system paths.
> 
> Signed-off-by: Tyler Hicks <tyhicks at canonical.com>
> Signed-off-by: Steve Beattie <steve at nxnw.org>
> ---
> 
>  parser/Makefile       |   45 +++++++++++++++++++++++++++++++++++----------
>  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, 40 insertions(+), 15 deletions(-)
> 
> Index: b/parser/Makefile
> ===================================================================
> --- a/parser/Makefile
> +++ b/parser/Makefile
> @@ -56,9 +56,7 @@ CFLAGS = -g -pg -fprofile-arcs -ftest-co
>  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,26 @@ 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
> +  LIBAPPARMOR_A =
> +  INCLUDE_APPARMOR =
> +  APPARMOR_H =
> +else
> +  LIBAPPARMOR_SRC = ../libraries/libapparmor/
> +  LOCAL_LIBAPPARMOR_INCLUDE = $(LIBAPPARMOR_SRC)/include
> +  LOCAL_LIBAPPARMOR_LDPATH = $(LIBAPPARMOR_SRC)/src/.libs
> +
> +  LIBAPPARMOR_A = $(LOCAL_LIBAPPARMOR_LDPATH)/libapparmor.a
> +  INCLUDE_APPARMOR = -I$(LOCAL_LIBAPPARMOR_INCLUDE)
> +  AARE_LDFLAGS += -L$(LOCAL_LIBAPPARMOR_LDPATH)
> +  APPARMOR_H = $(LOCAL_LIBAPPARMOR_INCLUDE)/sys/apparmor.h
> +endif
> +EXTRA_CFLAGS += $(INCLUDE_APPARMOR)
> +
>  LEX_C_FILES	= parser_lex.c
>  YACC_C_FILES	= parser_yacc.c parser_yacc.h
>  
> @@ -156,7 +171,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 +194,13 @@ parser_lex.c: parser_lex.l parser_yacc.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: 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: 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: 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 +212,7 @@ parser_include.o: parser_include.c parse
>  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: 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 +236,7 @@ mount.o: mount.c mount.h parser.h immuni
>  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: 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
> Index: b/parser/dbus.c
> ===================================================================
> --- a/parser/dbus.c
> +++ b/parser/dbus.c
> @@ -18,7 +18,7 @@
>  
>  #include <stdlib.h>
>  #include <string.h>
> -#include <apparmor.h>
> +#include <sys/apparmor.h>
>  
>  #include "parser.h"
>  #include "profile.h"
> Index: b/parser/parser_main.c
> ===================================================================
> --- 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>
> +#include <sys/apparmor.h>
>  
>  #include "lib.h"
>  #include "parser.h"
> Index: b/parser/parser_misc.c
> ===================================================================
> --- 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>
> +#include <sys/apparmor.h>
>  
>  #include "parser.h"
>  #include "profile.h"
> Index: b/parser/parser_regex.c
> ===================================================================
> --- 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>
> +#include <sys/apparmor.h>
>  #define _(s) gettext(s)
>  
>  #include <string>
> Index: b/parser/parser_yacc.y
> ===================================================================
> --- 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>
> +#include <sys/apparmor.h>
>  #define _(s) gettext(s)
>  
>  /* #define DEBUG */
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20140106/5ae0f106/attachment.pgp>


More information about the AppArmor mailing list