Message ID | 20240313224806.2859045-1-jwcart2@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | af543f1ba784 |
Delegated to: | Petr Lautrbach |
Headers | show |
Series | libselinux, libsepol: Add CFLAGS and LDFLAGS to Makefile checks | expand |
On 3/13/24 17:48, James Carter wrote: > In libselinux there is an availability check for strlcpy() and > in both libselinux and libsepol there are availability checks for > reallocarray() in the src Makfiles. CFLAGS and LDFLAGS are needed > for cross-compiling, but, unfortunately, the default CFLAGS cause > all of these availability checks to fail to compile because of > compilationerrors (rather than just the function not being available). > > Add CFLAGS and LDFLAGS to the availibility checks, update the checks > so that a compilation error will only happen if the function being > checked for is not available, and make checks for the same function > the same in both libselinux and libsepol. > > Suggested-by: Jordan Williams <jordan@jwillikers.com> > Suggested-by: Winfried Dobbe <winfried_mb2@xmsnet.nl> > Signed-off-by: James Carter <jwcart2@gmail.com> > --- > libselinux/src/Makefile | 4 ++-- > libsepol/src/Makefile | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile > index d3b981fc..41cfbdca 100644 > --- a/libselinux/src/Makefile > +++ b/libselinux/src/Makefile > @@ -104,13 +104,13 @@ override CFLAGS += -I../include -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS) > > # check for strlcpy(3) availability > H := \# > -ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char*d,*s;strlcpy(d, s, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > +ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char d[2];const char *s="a";return (size_t)strlcpy(d,s,sizeof(d))>=sizeof(d);}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > override CFLAGS += -DHAVE_STRLCPY > endif > > # check for reallocarray(3) availability > H := \# > -ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){reallocarray(NULL, 0, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > override CFLAGS += -DHAVE_REALLOCARRAY > endif > > diff --git a/libsepol/src/Makefile b/libsepol/src/Makefile > index 16b9bd5e..7b0e8446 100644 > --- a/libsepol/src/Makefile > +++ b/libsepol/src/Makefile > @@ -31,7 +31,7 @@ endif > > # check for reallocarray(3) availability > H := \# > -ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > override CFLAGS += -DHAVE_REALLOCARRAY > endif > This works great, thanks!
Fine with me as well. Thanks, Winfried > Op 14-03-2024 14:59 CET schreef Jordan Williams <jordan@jwillikers.com>: > > > On 3/13/24 17:48, James Carter wrote: > > In libselinux there is an availability check for strlcpy() and > > in both libselinux and libsepol there are availability checks for > > reallocarray() in the src Makfiles. CFLAGS and LDFLAGS are needed > > for cross-compiling, but, unfortunately, the default CFLAGS cause > > all of these availability checks to fail to compile because of > > compilationerrors (rather than just the function not being available). > > > > Add CFLAGS and LDFLAGS to the availibility checks, update the checks > > so that a compilation error will only happen if the function being > > checked for is not available, and make checks for the same function > > the same in both libselinux and libsepol. > > > > Suggested-by: Jordan Williams <jordan@jwillikers.com> > > Suggested-by: Winfried Dobbe <winfried_mb2@xmsnet.nl> > > Signed-off-by: James Carter <jwcart2@gmail.com> > > --- > > libselinux/src/Makefile | 4 ++-- > > libsepol/src/Makefile | 2 +- > > 2 files changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile > > index d3b981fc..41cfbdca 100644 > > --- a/libselinux/src/Makefile > > +++ b/libselinux/src/Makefile > > @@ -104,13 +104,13 @@ override CFLAGS += -I../include -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS) > > > > # check for strlcpy(3) availability > > H := \# > > -ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char*d,*s;strlcpy(d, s, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > > +ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char d[2];const char *s="a";return (size_t)strlcpy(d,s,sizeof(d))>=sizeof(d);}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > > override CFLAGS += -DHAVE_STRLCPY > > endif > > > > # check for reallocarray(3) availability > > H := \# > > -ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){reallocarray(NULL, 0, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > > +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > > override CFLAGS += -DHAVE_REALLOCARRAY > > endif > > > > diff --git a/libsepol/src/Makefile b/libsepol/src/Makefile > > index 16b9bd5e..7b0e8446 100644 > > --- a/libsepol/src/Makefile > > +++ b/libsepol/src/Makefile > > @@ -31,7 +31,7 @@ endif > > > > # check for reallocarray(3) availability > > H := \# > > -ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > > +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > > override CFLAGS += -DHAVE_REALLOCARRAY > > endif > > > This works great, thanks!
On Wed, Mar 13, 2024 at 6:48 PM James Carter <jwcart2@gmail.com> wrote: > > In libselinux there is an availability check for strlcpy() and > in both libselinux and libsepol there are availability checks for > reallocarray() in the src Makfiles. CFLAGS and LDFLAGS are needed > for cross-compiling, but, unfortunately, the default CFLAGS cause > all of these availability checks to fail to compile because of > compilationerrors (rather than just the function not being available). > > Add CFLAGS and LDFLAGS to the availibility checks, update the checks > so that a compilation error will only happen if the function being > checked for is not available, and make checks for the same function > the same in both libselinux and libsepol. > > Suggested-by: Jordan Williams <jordan@jwillikers.com> > Suggested-by: Winfried Dobbe <winfried_mb2@xmsnet.nl> > Signed-off-by: James Carter <jwcart2@gmail.com> This patch has been merged. Jim > --- > libselinux/src/Makefile | 4 ++-- > libsepol/src/Makefile | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile > index d3b981fc..41cfbdca 100644 > --- a/libselinux/src/Makefile > +++ b/libselinux/src/Makefile > @@ -104,13 +104,13 @@ override CFLAGS += -I../include -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS) > > # check for strlcpy(3) availability > H := \# > -ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char*d,*s;strlcpy(d, s, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > +ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char d[2];const char *s="a";return (size_t)strlcpy(d,s,sizeof(d))>=sizeof(d);}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > override CFLAGS += -DHAVE_STRLCPY > endif > > # check for reallocarray(3) availability > H := \# > -ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){reallocarray(NULL, 0, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > override CFLAGS += -DHAVE_REALLOCARRAY > endif > > diff --git a/libsepol/src/Makefile b/libsepol/src/Makefile > index 16b9bd5e..7b0e8446 100644 > --- a/libsepol/src/Makefile > +++ b/libsepol/src/Makefile > @@ -31,7 +31,7 @@ endif > > # check for reallocarray(3) availability > H := \# > -ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) > override CFLAGS += -DHAVE_REALLOCARRAY > endif > > -- > 2.44.0 >
diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile index d3b981fc..41cfbdca 100644 --- a/libselinux/src/Makefile +++ b/libselinux/src/Makefile @@ -104,13 +104,13 @@ override CFLAGS += -I../include -D_GNU_SOURCE $(DISABLE_FLAGS) $(PCRE_CFLAGS) # check for strlcpy(3) availability H := \# -ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char*d,*s;strlcpy(d, s, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) +ifeq (yes,$(shell printf '${H}include <string.h>\nint main(void){char d[2];const char *s="a";return (size_t)strlcpy(d,s,sizeof(d))>=sizeof(d);}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) override CFLAGS += -DHAVE_STRLCPY endif # check for reallocarray(3) availability H := \# -ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){reallocarray(NULL, 0, 0);return 0;}' | $(CC) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) override CFLAGS += -DHAVE_REALLOCARRAY endif diff --git a/libsepol/src/Makefile b/libsepol/src/Makefile index 16b9bd5e..7b0e8446 100644 --- a/libsepol/src/Makefile +++ b/libsepol/src/Makefile @@ -31,7 +31,7 @@ endif # check for reallocarray(3) availability H := \# -ifeq (yes,$(shell printf '${H}define _GNU_SOURCE\n${H}include <stdlib.h>\nint main(void){void*p=reallocarray(NULL, 1, sizeof(char));return 0;}' | $(CC) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) +ifeq (yes,$(shell printf '${H}include <stdlib.h>\nint main(void){return reallocarray(NULL,0,0)==NULL;}' | $(CC) $(CFLAGS) $(LDFLAGS) -x c -o /dev/null - >/dev/null 2>&1 && echo yes)) override CFLAGS += -DHAVE_REALLOCARRAY endif
In libselinux there is an availability check for strlcpy() and in both libselinux and libsepol there are availability checks for reallocarray() in the src Makfiles. CFLAGS and LDFLAGS are needed for cross-compiling, but, unfortunately, the default CFLAGS cause all of these availability checks to fail to compile because of compilationerrors (rather than just the function not being available). Add CFLAGS and LDFLAGS to the availibility checks, update the checks so that a compilation error will only happen if the function being checked for is not available, and make checks for the same function the same in both libselinux and libsepol. Suggested-by: Jordan Williams <jordan@jwillikers.com> Suggested-by: Winfried Dobbe <winfried_mb2@xmsnet.nl> Signed-off-by: James Carter <jwcart2@gmail.com> --- libselinux/src/Makefile | 4 ++-- libsepol/src/Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)