[apparmor] [RFC] [patch] Makefile automatically fallback to USE_SYSTEM=1

John Johansen john.johansen at canonical.com
Tue Mar 11 19:22:19 UTC 2014


On 03/11/2014 11:52 AM, Steve Beattie wrote:
> On Fri, Mar 07, 2014 at 08:19:45AM -0800, John Johansen wrote:
>> So this is a patch I have been using for a while to get around having
>> to specify USE_SYSTEM=1 every time I run the tests. Is it worth
>> upstreaming and applying to the other Makefiles that currently can take
>> USE_SYSTEM as a parameter
>>
>> If USE_SYSTEM=1 is NOT specified
>>   it tries to find a local build and if it can't find one, it sets
>>   USE_SYSTEM=1 and issues a warning message
>> If USE_SYSTEM=1 is specified
>>   it only tries building against the system libraries
> 
> I'm still mulling/trying to remember the arguments from when we added
> USE_SYSTEM so I don't have a yay or nay on this patch, except for two
> things. The first is that make clean should work even if neither the
> system libapparmor or the in-tree libapparmor exists. The second is:

I don't remember it either, but I am finding the current behavior a
major annoyance. This or something like it doesn't have to make it
upstream but I will continue to use it, which is why the RFC.

> 
>> === modified file 'tests/regression/apparmor/Makefile'
>> --- tests/regression/apparmor/Makefile	2014-01-24 19:03:22 +0000
>> +++ tests/regression/apparmor/Makefile	2014-03-07 00:39:38 +0000
>> @@ -6,7 +6,33 @@
>>  #	published by the Free Software Foundation, version 2 of the
>>  #	License.
>>  
>> -ifdef USE_SYSTEM
>> +define nl
>> +
>> +
>> +endef
> 
> The nl definition is useful generally, so I'd like to see it go into
> common/Make.rules and then used in whatever make warning/error messages
> we have. Here's a prototype patch that does that (though I didn't touch
> the parser handling of USE_SYSTEM):
> 
sure that works for me, the patch looks good even without the updating
the parser's handling of USE_SYSTEM which can come as a separate patch

> Signed-off-by: Steve Beattie <steve at nxnw.org>
Acked-by: John Johansen <john.johansen at canonical.com>

> ---
>  changehat/mod_apparmor/Makefile    |   26 ++++++++++++++------------
>  changehat/pam_apparmor/Makefile    |   26 ++++++++++++++------------
>  common/Make.rules                  |    5 +++++
>  tests/regression/apparmor/Makefile |   30 ++++++++++++++++++------------
>  4 files changed, 51 insertions(+), 36 deletions(-)
> 
> Index: b/common/Make.rules
> ===================================================================
> --- a/common/Make.rules
> +++ b/common/Make.rules
> @@ -36,6 +36,11 @@ ifndef AWK
>  $(error awk utility required for build but not available)
>  endif
>  
> +define nl
> +
> +
> +endef
> +
>  # OVERRIDABLE variables
>  # Set these variables before including Make.rules to change its behavior
>  #   SPECFILE - for packages that have a non-standard specfile name
> Index: b/tests/regression/apparmor/Makefile
> ===================================================================
> --- a/tests/regression/apparmor/Makefile
> +++ b/tests/regression/apparmor/Makefile
> @@ -6,6 +6,10 @@
>  #	published by the Free Software Foundation, version 2 of the
>  #	License.
>  
> +all:
> +COMMONDIR=../../../common/
> +include $(COMMONDIR)/Make.rules
> +
>  ifdef USE_SYSTEM
>    # use the system libapparmor headers and library
>    LIBAPPARMOR = $(shell if pkg-config --exists libapparmor ; then \
> @@ -14,9 +18,12 @@ ifdef USE_SYSTEM
>  				echo -lapparmor ; \
>  			fi )
>    ifeq ($(strip $(LIBAPPARMOR)),)
> -    ERROR_MESSAGE = Unable to find libapparmor installed on this system; either \
> -	    install libapparmor devel packages, set the LIBAPPARMOR variable \
> -	    manually, or build against in-tree libapparmor)
> +    ERROR_MESSAGE = $(error ${nl}\
> +************************************************************************${nl}\
> +Unable to find libapparmor installed on this system; either${nl}\
> +install libapparmor devel packages, set the LIBAPPARMOR variable${nl}\
> +manually, or build against in-tree libapparmor.${nl}\
> +************************************************************************${nl})
>    endif # LIBAPPARMOR not set
>    LDLIBS += $(LIBAPPARMOR)
>  
> @@ -26,10 +33,13 @@ else # !USE_SYSTEM
>    LIBAPPARMOR_INCLUDE = $(LIBAPPARMOR_SRC)/include
>    LIBAPPARMOR_PATH := $(LIBAPPARMOR_SRC)/src/.libs/
>    ifeq ($(realpath $(LIBAPPARMOR_PATH)/libapparmor.a),)
> -    ERROR_MESSAGE = $(LIBAPPARMOR_PATH)/libapparmor.a is missing; either build against \
> -	    the in-tree libapparmor by building it first and then trying again \
> -	    (see the top-level README for help) or build against the system \
> -	    libapparmor by adding USE_SYSTEM=1 to your make command.)
> +        ERROR_MESSAGE = $(error ${nl}\
> +************************************************************************${nl}\
> +$(LIBAPPARMOR_PATH)/libapparmor.a is missing; either build against${nl}\
> +the in-tree libapparmor by building it first and then trying again${nl}\
> +(see the top-level README for help) or build against the system${nl}\
> +libapparmor by adding USE_SYSTEM=1 to your make command.${nl}\
> +************************************************************************${nl})
>    endif
>  
>    CFLAGS += -L$(LIBAPPARMOR_PATH) -I$(LIBAPPARMOR_INCLUDE)
> @@ -180,11 +190,7 @@ RISKY_TESTS=
>  
>  .PHONY: libapparmor_check
>  .SILENT: libapparmor_check
> -libapparmor_check:
> -	@if [ -n "$(ERROR_MESSAGE)" ] ; then \
> -		echo "$(ERROR_MESSAGE)" 1>&2 ; \
> -		return 1 ; \
> -	fi
> +libapparmor_check: ; $(ERROR_MESSAGE)
>  
>  all: libapparmor_check $(EXEC) changehat.h uservars.inc
>  
> Index: b/changehat/mod_apparmor/Makefile
> ===================================================================
> --- a/changehat/mod_apparmor/Makefile
> +++ b/changehat/mod_apparmor/Makefile
> @@ -48,9 +48,12 @@ ifdef USE_SYSTEM
>                                  echo -lapparmor ; \
>                          fi )
>    ifeq ($(strip $(LIBAPPARMOR)),)
> -    ERROR_MESSAGE = Unable to find libapparmor installed on this system; either \
> -            install libapparmor devel packages, set the LIBAPPARMOR variable \
> -            manually, or build against in-tree libapparmor)
> +    ERROR_MESSAGE = $(error ${nl}\
> +************************************************************************${nl}\
> +Unable to find libapparmor installed on this system; either${nl}\
> +install libapparmor devel packages, set the LIBAPPARMOR variable${nl}\
> +manually, or build against in-tree libapparmor.${nl}\
> +************************************************************************${nl})
>    endif # LIBAPPARMOR not set
>    LDLIBS += $(LIBAPPARMOR)
>  else
> @@ -58,10 +61,13 @@ else
>    LIBAPPARMOR_INCLUDE = $(LIBAPPARMOR_SRC)/include
>    LIBAPPARMOR_PATH := $(LIBAPPARMOR_SRC)/src/.libs/
>      ifeq ($(realpath $(LIBAPPARMOR_PATH)/libapparmor.a),)
> -        ERROR_MESSAGE = $(LIBAPPARMOR_PATH)/libapparmor.a is missing; either build against \
> -                the in-tree libapparmor by building it first and then trying again \
> -                (see the top-level README for help) or build against the system \
> -                libapparmor by adding USE_SYSTEM=1 to your make command.)
> +        ERROR_MESSAGE = $(error ${nl}\
> +************************************************************************${nl}\
> +$(LIBAPPARMOR_PATH)/libapparmor.a is missing; either build against${nl}\
> +the in-tree libapparmor by building it first and then trying again${nl}\
> +(see the top-level README for help) or build against the system${nl}\
> +libapparmor by adding USE_SYSTEM=1 to your make command.${nl}\
> +************************************************************************${nl})
>      endif
>    # Need to pass -Wl twice here to get past both apxs2 and libtool, as
>    # libtool will add the path to the RPATH of the library if passed -L/some/path
> @@ -71,11 +77,7 @@ endif
>  
>  .PHONY: libapparmor_check
>  .SILENT: libapparmor_check
> -libapparmor_check:
> -	@if [ -n "$(ERROR_MESSAGE)" ] ; then \
> -		echo "$(ERROR_MESSAGE)" 1>&2 ; \
> -		return 1 ; \
> -	fi
> +libapparmor_check: ; $(ERROR_MESSAGE)
>  
>  all: libapparmor_check $(TARGET) ${MANPAGES} ${HTMLMANPAGES}
>  
> Index: b/changehat/pam_apparmor/Makefile
> ===================================================================
> --- a/changehat/pam_apparmor/Makefile
> +++ b/changehat/pam_apparmor/Makefile
> @@ -33,9 +33,12 @@ ifdef USE_SYSTEM
>                                  echo -lapparmor ; \
>                          fi )
>    ifeq ($(strip $(LIBAPPARMOR)),)
> -    ERROR_MESSAGE = Unable to find libapparmor installed on this system; either \
> -            install libapparmor devel packages, set the LIBAPPARMOR variable \
> -            manually, or build against in-tree libapparmor)
> +    ERROR_MESSAGE = $(error ${nl}\
> +************************************************************************${nl}\
> +Unable to find libapparmor installed on this system; either${nl}\
> +install libapparmor devel packages, set the LIBAPPARMOR variable${nl}\
> +manually, or build against in-tree libapparmor.${nl}\
> +************************************************************************${nl})
>    endif
>    LIBAPPARMOR_INCLUDE =
>    AA_LDLIBS = $(LIBAPPARMOR)
> @@ -45,10 +48,13 @@ else
>    LIBAPPARMOR_INCLUDE_PATH = $(LIBAPPARMOR_SRC)/include
>    LIBAPPARMOR_PATH := $(LIBAPPARMOR_SRC)/src/.libs/
>      ifeq ($(realpath $(LIBAPPARMOR_PATH)/libapparmor.a),)
> -        ERROR_MESSAGE = $(LIBAPPARMOR_PATH)/libapparmor.a is missing; either build against \
> -                the in-tree libapparmor by building it first and then trying again \
> -                (see the top-level README for help) or build against the system \
> -                libapparmor by adding USE_SYSTEM=1 to your make command.)
> +        ERROR_MESSAGE = $(error ${nl}\
> +************************************************************************${nl}\
> +$(LIBAPPARMOR_PATH)/libapparmor.a is missing; either build against${nl}\
> +the in-tree libapparmor by building it first and then trying again${nl}\
> +(see the top-level README for help) or build against the system${nl}\
> +libapparmor by adding USE_SYSTEM=1 to your make command.${nl}\
> +************************************************************************${nl})
>      endif
>    LIBAPPARMOR_INCLUDE = -I$(LIBAPPARMOR_INCLUDE_PATH)
>    AA_LINK_FLAGS = -L$(LIBAPPARMOR_PATH)
> @@ -61,11 +67,7 @@ OBJECTS=${NAME}.o get_options.o
>  
>  .PHONY: libapparmor_check
>  .SILENT: libapparmor_check
> -libapparmor_check:
> -	 @if [ -n "$(ERROR_MESSAGE)" ] ; then \
> -	 	echo "$(ERROR_MESSAGE)" 1>&2 ; \
> -		return 1 ; \
> -	fi
> +libapparmor_check: ; $(ERROR_MESSAGE)
>  
>  all: libapparmor_check $(NAME).so
>  
> 
> 
> 




More information about the AppArmor mailing list