diff mbox series

Makefile: expand ~ in DESTDIR

Message ID 20230531011548.1133249-1-yamato@redhat.com (mailing list archive)
State Rejected
Delegated to: Petr Lautrbach
Headers show
Series Makefile: expand ~ in DESTDIR | expand

Commit Message

Masatake YAMATO May 31, 2023, 1:15 a.m. UTC
Though instructed as

    DESTDIR=~/obj ./scripts/env_use_destdir make test

in README.md, compiling policy_define.c was failed with following errors:

    make[1]: Entering directory '/home/yamato/var/selinux/checkpolicy'
    cc -O2 -Werror -Wall -Wextra -Wfloat-equal -Wformat=2 -Winit-self \
       -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes \
       -Wnull-dereference -Wpointer-arith -Wshadow -Wstrict-prototypes \
       -Wundef -Wunused -Wwrite-strings -fno-common -I~/obj/usr/include \
       -o policy_define.o -c policy_define.c
    policy_define.c: In function ‘define_te_avtab_xperms_helper’:
    policy_define.c:2083:61: error: ‘RULE_NOTSELF’ undeclared (first use in this function); did you mean ‘RULE_SELF’?
     2083 |                         avrule->flags |= (add ? RULE_SELF : RULE_NOTSELF);
	  |                                                             ^~~~~~~~~~~~
	  |                                                             RULE_SELF

because cc cannot find the directory ~/obj/usr/include passed via -I option.

cc doesn't expand "~".

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
---
 Makefile | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Petr Lautrbach June 2, 2023, 12:04 p.m. UTC | #1
Masatake YAMATO <yamato@redhat.com> writes:

> Though instructed as
>
>     DESTDIR=~/obj ./scripts/env_use_destdir make test
>
> in README.md, compiling policy_define.c was failed with following errors:
>
>     make[1]: Entering directory '/home/yamato/var/selinux/checkpolicy'
>     cc -O2 -Werror -Wall -Wextra -Wfloat-equal -Wformat=2 -Winit-self \
>        -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes \
>        -Wnull-dereference -Wpointer-arith -Wshadow -Wstrict-prototypes \
>        -Wundef -Wunused -Wwrite-strings -fno-common -I~/obj/usr/include \
>        -o policy_define.o -c policy_define.c
>     policy_define.c: In function ‘define_te_avtab_xperms_helper’:
>     policy_define.c:2083:61: error: ‘RULE_NOTSELF’ undeclared (first use in this function); did you mean ‘RULE_SELF’?
>      2083 |                         avrule->flags |= (add ? RULE_SELF : RULE_NOTSELF);
> 	  |                                                             ^~~~~~~~~~~~
> 	  |                                                             RULE_SELF
>
> because cc cannot find the directory ~/obj/usr/include passed via -I option.
>
> cc doesn't expand "~".
>
> Signed-off-by: Masatake YAMATO <yamato@redhat.com>

It doesn't work when DESTDIR does not exist -  If no existing file name
matches a pattern, then that pattern is omitted from the output of the
wildcard function, see
https://www.gnu.org/software/make/manual/html_node/Wildcard-Function.html


Petr

> ---
>  Makefile | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 2ffba8e9..053c6d3d 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -26,11 +26,11 @@ else
>  endif
>  
>  ifneq ($(DESTDIR),)
> -	LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
> +	LIBDIR ?= $(wildcard $(DESTDIR))$(PREFIX)/lib
>  	LIBSEPOLA ?= $(LIBDIR)/libsepol.a
>  
> -	CFLAGS += -I$(DESTDIR)$(PREFIX)/include
> -	LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR)
> +	CFLAGS += -I$(wildcard $(DESTDIR))$(PREFIX)/include
> +	LDFLAGS += -L$(wildcard $(DESTDIR))$(PREFIX)/lib -L$(LIBDIR)
>  	export CFLAGS
>  	export LDFLAGS
>  	export LIBSEPOLA
> -- 
> 2.40.1
Christian Göttsche June 2, 2023, 12:54 p.m. UTC | #2
On Fri, 2 Jun 2023 at 14:05, Petr Lautrbach <plautrba@redhat.com> wrote:
>
> Masatake YAMATO <yamato@redhat.com> writes:
>
> > Though instructed as
> >
> >     DESTDIR=~/obj ./scripts/env_use_destdir make test

Is that a valid use case of the script `env_use_destdir`?
I thought the script is just for executing binaries depending on the
shared libraries in DESTDIR (e.g. `DESTDIR=~/obj
./scripts/env_use_destdir seinfo`), not for make invocations.

> >
> > in README.md, compiling policy_define.c was failed with following errors:
> >
> >     make[1]: Entering directory '/home/yamato/var/selinux/checkpolicy'
> >     cc -O2 -Werror -Wall -Wextra -Wfloat-equal -Wformat=2 -Winit-self \
> >        -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes \
> >        -Wnull-dereference -Wpointer-arith -Wshadow -Wstrict-prototypes \
> >        -Wundef -Wunused -Wwrite-strings -fno-common -I~/obj/usr/include \
> >        -o policy_define.o -c policy_define.c
> >     policy_define.c: In function ‘define_te_avtab_xperms_helper’:
> >     policy_define.c:2083:61: error: ‘RULE_NOTSELF’ undeclared (first use in this function); did you mean ‘RULE_SELF’?
> >      2083 |                         avrule->flags |= (add ? RULE_SELF : RULE_NOTSELF);
> >         |                                                             ^~~~~~~~~~~~
> >         |                                                             RULE_SELF
> >
> > because cc cannot find the directory ~/obj/usr/include passed via -I option.
> >
> > cc doesn't expand "~".
> >
> > Signed-off-by: Masatake YAMATO <yamato@redhat.com>
>
> It doesn't work when DESTDIR does not exist -  If no existing file name
> matches a pattern, then that pattern is omitted from the output of the
> wildcard function, see
> https://www.gnu.org/software/make/manual/html_node/Wildcard-Function.html
>
>
> Petr
>
> > ---
> >  Makefile | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index 2ffba8e9..053c6d3d 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -26,11 +26,11 @@ else
> >  endif
> >
> >  ifneq ($(DESTDIR),)
> > -     LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
> > +     LIBDIR ?= $(wildcard $(DESTDIR))$(PREFIX)/lib
> >       LIBSEPOLA ?= $(LIBDIR)/libsepol.a
> >
> > -     CFLAGS += -I$(DESTDIR)$(PREFIX)/include
> > -     LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR)
> > +     CFLAGS += -I$(wildcard $(DESTDIR))$(PREFIX)/include
> > +     LDFLAGS += -L$(wildcard $(DESTDIR))$(PREFIX)/lib -L$(LIBDIR)
> >       export CFLAGS
> >       export LDFLAGS
> >       export LIBSEPOLA
> > --
> > 2.40.1
>
Petr Lautrbach June 2, 2023, 2:04 p.m. UTC | #3
Christian Göttsche <cgzones@googlemail.com> writes:

> On Fri, 2 Jun 2023 at 14:05, Petr Lautrbach <plautrba@redhat.com> wrote:
>>
>> Masatake YAMATO <yamato@redhat.com> writes:
>>
>> > Though instructed as
>> >
>> >     DESTDIR=~/obj ./scripts/env_use_destdir make test
>
> Is that a valid use case of the script `env_use_destdir`?
> I thought the script is just for executing binaries depending on the
> shared libraries in DESTDIR (e.g. `DESTDIR=~/obj
> ./scripts/env_use_destdir seinfo`), not for make invocations.

`make` is just another binary to run in pre-set environment. Especially
for `make test` it is important to use PATH and LD_LIBRARY_PATH pointing
to the new built binaries.

I personally use `source ./scripts/env_use_destdir` also for manual
testing.

Petr



>> >
>> > in README.md, compiling policy_define.c was failed with following errors:
>> >
>> >     make[1]: Entering directory '/home/yamato/var/selinux/checkpolicy'
>> >     cc -O2 -Werror -Wall -Wextra -Wfloat-equal -Wformat=2 -Winit-self \
>> >        -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes \
>> >        -Wnull-dereference -Wpointer-arith -Wshadow -Wstrict-prototypes \
>> >        -Wundef -Wunused -Wwrite-strings -fno-common -I~/obj/usr/include \
>> >        -o policy_define.o -c policy_define.c
>> >     policy_define.c: In function ‘define_te_avtab_xperms_helper’:
>> >     policy_define.c:2083:61: error: ‘RULE_NOTSELF’ undeclared (first use in this function); did you mean ‘RULE_SELF’?
>> >      2083 |                         avrule->flags |= (add ? RULE_SELF : RULE_NOTSELF);
>> >         |                                                             ^~~~~~~~~~~~
>> >         |                                                             RULE_SELF
>> >
>> > because cc cannot find the directory ~/obj/usr/include passed via -I option.
>> >
>> > cc doesn't expand "~".
>> >
>> > Signed-off-by: Masatake YAMATO <yamato@redhat.com>
>>
>> It doesn't work when DESTDIR does not exist -  If no existing file name
>> matches a pattern, then that pattern is omitted from the output of the
>> wildcard function, see
>> https://www.gnu.org/software/make/manual/html_node/Wildcard-Function.html
>>
>>
>> Petr
>>
>> > ---
>> >  Makefile | 6 +++---
>> >  1 file changed, 3 insertions(+), 3 deletions(-)
>> >
>> > diff --git a/Makefile b/Makefile
>> > index 2ffba8e9..053c6d3d 100644
>> > --- a/Makefile
>> > +++ b/Makefile
>> > @@ -26,11 +26,11 @@ else
>> >  endif
>> >
>> >  ifneq ($(DESTDIR),)
>> > -     LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
>> > +     LIBDIR ?= $(wildcard $(DESTDIR))$(PREFIX)/lib
>> >       LIBSEPOLA ?= $(LIBDIR)/libsepol.a
>> >
>> > -     CFLAGS += -I$(DESTDIR)$(PREFIX)/include
>> > -     LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR)
>> > +     CFLAGS += -I$(wildcard $(DESTDIR))$(PREFIX)/include
>> > +     LDFLAGS += -L$(wildcard $(DESTDIR))$(PREFIX)/lib -L$(LIBDIR)
>> >       export CFLAGS
>> >       export LDFLAGS
>> >       export LIBSEPOLA
>> > --
>> > 2.40.1
>>
Masatake YAMATO June 8, 2023, 1:21 a.m. UTC | #4
I would like to withdraw my patch.
It seems that I skipped install target before running the test target.
So I got the error.

Sorry for making noise.

Masatake YAMATO

> Though instructed as
> 
>     DESTDIR=~/obj ./scripts/env_use_destdir make test
> 
> in README.md, compiling policy_define.c was failed with following errors:
> 
>     make[1]: Entering directory '/home/yamato/var/selinux/checkpolicy'
>     cc -O2 -Werror -Wall -Wextra -Wfloat-equal -Wformat=2 -Winit-self \
>        -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes \
>        -Wnull-dereference -Wpointer-arith -Wshadow -Wstrict-prototypes \
>        -Wundef -Wunused -Wwrite-strings -fno-common -I~/obj/usr/include \
>        -o policy_define.o -c policy_define.c
>     policy_define.c: In function ‘define_te_avtab_xperms_helper’:
>     policy_define.c:2083:61: error: ‘RULE_NOTSELF’ undeclared (first use in this function); did you mean ‘RULE_SELF’?
>      2083 |                         avrule->flags |= (add ? RULE_SELF : RULE_NOTSELF);
> 	  |                                                             ^~~~~~~~~~~~
> 	  |                                                             RULE_SELF
> 
> because cc cannot find the directory ~/obj/usr/include passed via -I option.
> 
> cc doesn't expand "~".
> 
> Signed-off-by: Masatake YAMATO <yamato@redhat.com>
> ---
>  Makefile | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 2ffba8e9..053c6d3d 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -26,11 +26,11 @@ else
>  endif
>  
>  ifneq ($(DESTDIR),)
> -	LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
> +	LIBDIR ?= $(wildcard $(DESTDIR))$(PREFIX)/lib
>  	LIBSEPOLA ?= $(LIBDIR)/libsepol.a
>  
> -	CFLAGS += -I$(DESTDIR)$(PREFIX)/include
> -	LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR)
> +	CFLAGS += -I$(wildcard $(DESTDIR))$(PREFIX)/include
> +	LDFLAGS += -L$(wildcard $(DESTDIR))$(PREFIX)/lib -L$(LIBDIR)
>  	export CFLAGS
>  	export LDFLAGS
>  	export LIBSEPOLA
> -- 
> 2.40.1
>
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 2ffba8e9..053c6d3d 100644
--- a/Makefile
+++ b/Makefile
@@ -26,11 +26,11 @@  else
 endif
 
 ifneq ($(DESTDIR),)
-	LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
+	LIBDIR ?= $(wildcard $(DESTDIR))$(PREFIX)/lib
 	LIBSEPOLA ?= $(LIBDIR)/libsepol.a
 
-	CFLAGS += -I$(DESTDIR)$(PREFIX)/include
-	LDFLAGS += -L$(DESTDIR)$(PREFIX)/lib -L$(LIBDIR)
+	CFLAGS += -I$(wildcard $(DESTDIR))$(PREFIX)/include
+	LDFLAGS += -L$(wildcard $(DESTDIR))$(PREFIX)/lib -L$(LIBDIR)
 	export CFLAGS
 	export LDFLAGS
 	export LIBSEPOLA