On Fri, May 20, 2022 at 3:00 PM Christian Göttsche <cgzones@xxxxxxxxxxxxxx> wrote: > > The top level Makefile adds, if the environment variable DESTDIR is > defined, the according include and link directory to CFLAGS and LDFLAGS > to build all userspace tools against dependencies from this repository > and not the system. > If CFLAGS or LDFLAGS are specified by the user, e.g. > > DESTDIR=~/destdir CFLAGS=-Dfoo LDFLAGS=-Lbar make install > > use the override directive to force adding DESTDIR paths to the user > specified CFLAGS or LDFLAGS. > > Note that > > DESTDIR=~/destdir make CFLAGS=-Dfoo LDFLAGS=-Lbar install > > does not work, since in sub-directories the internal make options take > precedence over the overridden environment variables in the top > Makefile. Hello, >From my understanding of the documentation of "override" (https://www.gnu.org/software/make/manual/html_node/Override-Directive.html) it only matters when setting variables which come from the command line, not from the environment. On my system (Arch Linux with "GNU Make 4.3"), your first command works fine. To really be sure I understood things correctly, I added a target into the main Makefile: testenv: @echo Root Makefile: CFLAGS=$(CFLAGS) (cd libsepol && $(MAKE) $@) ... and added similar commands to libsepol/Makefile and libsepol/src/Makefile. Without override, "DESTDIR=/tmp/destdir CFLAGS=-Dfoo make testenv" displays: Root Makefile: CFLAGS=-Dfoo -I/tmp/destdir/usr/include libsepol Makefile: CFLAGS=-Dfoo -I/tmp/destdir/usr/include libsepol/src Makefile: CFLAGS=-Dfoo -I/tmp/destdir/usr/include -I. -I../include -D_GNU_SOURCE -I../cil/include -DHAVE_REALLOCARRAY ... which shows that the Makefile works as expected. Adding "override" does not change this output. It only changes it with "DESTDIR=/tmp/destdir make CFLAGS=-Dfoo testenv": Root Makefile: CFLAGS=-Dfoo -I/tmp/destdir/usr/include libsepol Makefile: CFLAGS=-Dfoo libsepol/src Makefile: CFLAGS=-Dfoo -I. -I../include -D_GNU_SOURCE -I../cil/include -DHAVE_REALLOCARRAY Your patch makes the first output have " -I/tmp/destdir/usr/include" but not the other lines, because $(MAKEFLAGS) contains "CFLAGS=-Dfoo" (as documented on https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html ). So using CFLAGS in command-line argument does not work and making it work would require removing CFLAGS and LDFLAGS from MAKEFLAGS, which seems fragile. Therefore, I did not manage to reproduce the issue that your patch was fixing and I did not understand why using "override" helped. You could be using a specific kind of make which behaves differently as mine. Could you please provide some way to reproduce the issue you were experiencing (that "DESTDIR=~/destdir CFLAGS=-Dfoo LDFLAGS=-Lbar make install" did not work on your system)? Thanks, Nicolas > Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx> > --- > Makefile | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/Makefile b/Makefile > index 2ffba8e9..e05e924b 100644 > --- a/Makefile > +++ b/Makefile > @@ -29,8 +29,8 @@ ifneq ($(DESTDIR),) > LIBDIR ?= $(DESTDIR)$(PREFIX)/lib > LIBSEPOLA ?= $(LIBDIR)/libsepol.a > > - CFLAGS += -I$(DESTDIR)$(PREFIX)/include > - LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR) > + override CFLAGS += -I$(DESTDIR)$(PREFIX)/include > + override LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR) > export CFLAGS > export LDFLAGS > export LIBSEPOLA > -- > 2.36.1 >