summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfig/define-if.sh (renamed from config/cc-define.sh)9
-rw-r--r--config/has/acl-get-entry.c (renamed from config/acl-get-entry.c)0
-rw-r--r--config/has/acl-get-file.c (renamed from config/acl-get-file.c)0
-rw-r--r--config/has/acl-get-tag-type.c (renamed from config/acl-get-tag-type.c)0
-rw-r--r--config/has/acl-is-trivial-np.c (renamed from config/acl-is-trivial-np.c)0
-rw-r--r--config/has/acl-trivial.c (renamed from config/acl-trivial.c)0
-rw-r--r--config/has/aligned-alloc.c (renamed from config/aligned-alloc.c)0
-rw-r--r--config/has/confstr.c (renamed from config/confstr.c)0
-rw-r--r--config/has/extattr-get-file.c (renamed from config/extattr-get-file.c)0
-rw-r--r--config/has/extattr-get-link.c (renamed from config/extattr-get-link.c)0
-rw-r--r--config/has/extattr-list-file.c (renamed from config/extattr-list-file.c)0
-rw-r--r--config/has/extattr-list-link.c (renamed from config/extattr-list-link.c)0
-rw-r--r--config/has/fdclosedir.c (renamed from config/fdclosedir.c)0
-rw-r--r--config/has/getdents.c (renamed from config/getdents.c)0
-rw-r--r--config/has/getdents64-syscall.c (renamed from config/getdents64-syscall.c)0
-rw-r--r--config/has/getdents64.c (renamed from config/getdents64.c)0
-rw-r--r--config/has/getprogname-gnu.c (renamed from config/getprogname-gnu.c)0
-rw-r--r--config/has/getprogname.c (renamed from config/getprogname.c)0
-rw-r--r--config/has/max-align-t.c (renamed from config/max-align-t.c)0
-rw-r--r--config/has/pipe2.c (renamed from config/pipe2.c)0
-rw-r--r--config/has/posix-spawn-addfchdir-np.c (renamed from config/posix-spawn-addfchdir-np.c)0
-rw-r--r--config/has/posix-spawn-addfchdir.c (renamed from config/posix-spawn-addfchdir.c)0
-rw-r--r--config/has/st-acmtim.c (renamed from config/st-acmtim.c)0
-rw-r--r--config/has/st-acmtimespec.c (renamed from config/st-acmtimespec.c)0
-rw-r--r--config/has/st-birthtim.c (renamed from config/st-birthtim.c)0
-rw-r--r--config/has/st-birthtimespec.c (renamed from config/st-birthtimespec.c)0
-rw-r--r--config/has/st-flags.c (renamed from config/st-flags.c)0
-rw-r--r--config/has/statx-syscall.c (renamed from config/statx-syscall.c)0
-rw-r--r--config/has/statx.c (renamed from config/statx.c)0
-rw-r--r--config/has/strerror-l.c (renamed from config/strerror-l.c)0
-rw-r--r--config/has/strerror-r-gnu.c (renamed from config/strerror-r-gnu.c)0
-rw-r--r--config/has/strerror-r-posix.c (renamed from config/strerror-r-posix.c)0
-rw-r--r--config/has/tm-gmtoff.c (renamed from config/tm-gmtoff.c)0
-rw-r--r--config/has/uselocale.c (renamed from config/uselocale.c)0
-rw-r--r--config/header.mk89
-rwxr-xr-xconfig/pkgconf.sh2
-rw-r--r--config/pkgs.mk28
-rw-r--r--config/prelude.mk10
-rw-r--r--config/use/libacl.c (renamed from config/libacl.c)0
-rw-r--r--config/use/libcap.c (renamed from config/libcap.c)0
-rw-r--r--config/use/libselinux.c (renamed from config/libselinux.c)0
-rw-r--r--config/use/liburing.c (renamed from config/liburing.c)0
-rw-r--r--config/use/oniguruma.c (renamed from config/oniguruma.c)0
43 files changed, 70 insertions, 68 deletions
diff --git a/config/cc-define.sh b/config/define-if.sh
index edb5c87..059c1ac 100755
--- a/config/cc-define.sh
+++ b/config/define-if.sh
@@ -3,17 +3,18 @@
# Copyright © Tavian Barnes <tavianator@tavianator.com>
# SPDX-License-Identifier: 0BSD
-# Output a C preprocessor definition based on whether a C source file could be
-# compiled successfully
+# Output a C preprocessor definition based on whether a command succeeds
set -eu
SLUG="${1#config/}"
SLUG="${SLUG%.c}"
-MACRO="BFS_HAS_$(printf '%s' "$SLUG" | tr 'a-z-' 'A-Z_')"
+MACRO="BFS_$(printf '%s' "$SLUG" | tr '/a-z-' '_A-Z_')"
+shift
-if config/cc.sh "$1"; then
+if "$@"; then
printf '#define %s true\n' "$MACRO"
else
printf '#define %s false\n' "$MACRO"
+ exit 1
fi
diff --git a/config/acl-get-entry.c b/config/has/acl-get-entry.c
index 3cce771..3cce771 100644
--- a/config/acl-get-entry.c
+++ b/config/has/acl-get-entry.c
diff --git a/config/acl-get-file.c b/config/has/acl-get-file.c
index 89fbf23..89fbf23 100644
--- a/config/acl-get-file.c
+++ b/config/has/acl-get-file.c
diff --git a/config/acl-get-tag-type.c b/config/has/acl-get-tag-type.c
index 2901956..2901956 100644
--- a/config/acl-get-tag-type.c
+++ b/config/has/acl-get-tag-type.c
diff --git a/config/acl-is-trivial-np.c b/config/has/acl-is-trivial-np.c
index 9ca9fc7..9ca9fc7 100644
--- a/config/acl-is-trivial-np.c
+++ b/config/has/acl-is-trivial-np.c
diff --git a/config/acl-trivial.c b/config/has/acl-trivial.c
index 7efc838..7efc838 100644
--- a/config/acl-trivial.c
+++ b/config/has/acl-trivial.c
diff --git a/config/aligned-alloc.c b/config/has/aligned-alloc.c
index 4460038..4460038 100644
--- a/config/aligned-alloc.c
+++ b/config/has/aligned-alloc.c
diff --git a/config/confstr.c b/config/has/confstr.c
index 58280b4..58280b4 100644
--- a/config/confstr.c
+++ b/config/has/confstr.c
diff --git a/config/extattr-get-file.c b/config/has/extattr-get-file.c
index ac9cf96..ac9cf96 100644
--- a/config/extattr-get-file.c
+++ b/config/has/extattr-get-file.c
diff --git a/config/extattr-get-link.c b/config/has/extattr-get-link.c
index c35be5b..c35be5b 100644
--- a/config/extattr-get-link.c
+++ b/config/has/extattr-get-link.c
diff --git a/config/extattr-list-file.c b/config/has/extattr-list-file.c
index e68a8bb..e68a8bb 100644
--- a/config/extattr-list-file.c
+++ b/config/has/extattr-list-file.c
diff --git a/config/extattr-list-link.c b/config/has/extattr-list-link.c
index 49f0ec2..49f0ec2 100644
--- a/config/extattr-list-link.c
+++ b/config/has/extattr-list-link.c
diff --git a/config/fdclosedir.c b/config/has/fdclosedir.c
index f4ad1f5..f4ad1f5 100644
--- a/config/fdclosedir.c
+++ b/config/has/fdclosedir.c
diff --git a/config/getdents.c b/config/has/getdents.c
index d0d4228..d0d4228 100644
--- a/config/getdents.c
+++ b/config/has/getdents.c
diff --git a/config/getdents64-syscall.c b/config/has/getdents64-syscall.c
index 4838c14..4838c14 100644
--- a/config/getdents64-syscall.c
+++ b/config/has/getdents64-syscall.c
diff --git a/config/getdents64.c b/config/has/getdents64.c
index 1abf36d..1abf36d 100644
--- a/config/getdents64.c
+++ b/config/has/getdents64.c
diff --git a/config/getprogname-gnu.c b/config/has/getprogname-gnu.c
index 6b97c5e..6b97c5e 100644
--- a/config/getprogname-gnu.c
+++ b/config/has/getprogname-gnu.c
diff --git a/config/getprogname.c b/config/has/getprogname.c
index 83dc8e8..83dc8e8 100644
--- a/config/getprogname.c
+++ b/config/has/getprogname.c
diff --git a/config/max-align-t.c b/config/has/max-align-t.c
index 96165ce..96165ce 100644
--- a/config/max-align-t.c
+++ b/config/has/max-align-t.c
diff --git a/config/pipe2.c b/config/has/pipe2.c
index 4cb43b5..4cb43b5 100644
--- a/config/pipe2.c
+++ b/config/has/pipe2.c
diff --git a/config/posix-spawn-addfchdir-np.c b/config/has/posix-spawn-addfchdir-np.c
index b870a53..b870a53 100644
--- a/config/posix-spawn-addfchdir-np.c
+++ b/config/has/posix-spawn-addfchdir-np.c
diff --git a/config/posix-spawn-addfchdir.c b/config/has/posix-spawn-addfchdir.c
index c52ff81..c52ff81 100644
--- a/config/posix-spawn-addfchdir.c
+++ b/config/has/posix-spawn-addfchdir.c
diff --git a/config/st-acmtim.c b/config/has/st-acmtim.c
index d687ab0..d687ab0 100644
--- a/config/st-acmtim.c
+++ b/config/has/st-acmtim.c
diff --git a/config/st-acmtimespec.c b/config/has/st-acmtimespec.c
index f747bc0..f747bc0 100644
--- a/config/st-acmtimespec.c
+++ b/config/has/st-acmtimespec.c
diff --git a/config/st-birthtim.c b/config/has/st-birthtim.c
index 4964571..4964571 100644
--- a/config/st-birthtim.c
+++ b/config/has/st-birthtim.c
diff --git a/config/st-birthtimespec.c b/config/has/st-birthtimespec.c
index 91a613f..91a613f 100644
--- a/config/st-birthtimespec.c
+++ b/config/has/st-birthtimespec.c
diff --git a/config/st-flags.c b/config/has/st-flags.c
index b1d0c32..b1d0c32 100644
--- a/config/st-flags.c
+++ b/config/has/st-flags.c
diff --git a/config/statx-syscall.c b/config/has/statx-syscall.c
index 87ec869..87ec869 100644
--- a/config/statx-syscall.c
+++ b/config/has/statx-syscall.c
diff --git a/config/statx.c b/config/has/statx.c
index 65f1674..65f1674 100644
--- a/config/statx.c
+++ b/config/has/statx.c
diff --git a/config/strerror-l.c b/config/has/strerror-l.c
index 3dcc4d7..3dcc4d7 100644
--- a/config/strerror-l.c
+++ b/config/has/strerror-l.c
diff --git a/config/strerror-r-gnu.c b/config/has/strerror-r-gnu.c
index 26ca0ee..26ca0ee 100644
--- a/config/strerror-r-gnu.c
+++ b/config/has/strerror-r-gnu.c
diff --git a/config/strerror-r-posix.c b/config/has/strerror-r-posix.c
index 41b2d30..41b2d30 100644
--- a/config/strerror-r-posix.c
+++ b/config/has/strerror-r-posix.c
diff --git a/config/tm-gmtoff.c b/config/has/tm-gmtoff.c
index 543df48..543df48 100644
--- a/config/tm-gmtoff.c
+++ b/config/has/tm-gmtoff.c
diff --git a/config/uselocale.c b/config/has/uselocale.c
index a712ff8..a712ff8 100644
--- a/config/uselocale.c
+++ b/config/has/uselocale.c
diff --git a/config/header.mk b/config/header.mk
index ccc36d3..50ad5e8 100644
--- a/config/header.mk
+++ b/config/header.mk
@@ -9,62 +9,61 @@ include config/exports.mk
# All header fragments we generate
HEADERS := \
- ${GEN}/acl-get-entry.h \
- ${GEN}/acl-get-file.h \
- ${GEN}/acl-get-tag-type.h \
- ${GEN}/acl-is-trivial-np.h \
- ${GEN}/acl-trivial.h \
- ${GEN}/aligned-alloc.h \
- ${GEN}/confstr.h \
- ${GEN}/extattr-get-file.h \
- ${GEN}/extattr-get-link.h \
- ${GEN}/extattr-list-file.h \
- ${GEN}/extattr-list-link.h \
- ${GEN}/fdclosedir.h \
- ${GEN}/getdents.h \
- ${GEN}/getdents64.h \
- ${GEN}/getdents64-syscall.h \
- ${GEN}/getprogname.h \
- ${GEN}/getprogname-gnu.h \
- ${GEN}/max-align-t.h \
- ${GEN}/pipe2.h \
- ${GEN}/posix-spawn-addfchdir.h \
- ${GEN}/posix-spawn-addfchdir-np.h \
- ${GEN}/st-acmtim.h \
- ${GEN}/st-acmtimespec.h \
- ${GEN}/st-birthtim.h \
- ${GEN}/st-birthtimespec.h \
- ${GEN}/st-flags.h \
- ${GEN}/statx.h \
- ${GEN}/statx-syscall.h \
- ${GEN}/strerror-l.h \
- ${GEN}/strerror-r-gnu.h \
- ${GEN}/strerror-r-posix.h \
- ${GEN}/tm-gmtoff.h \
- ${GEN}/uselocale.h
+ ${GEN}/has/acl-get-entry.h \
+ ${GEN}/has/acl-get-file.h \
+ ${GEN}/has/acl-get-tag-type.h \
+ ${GEN}/has/acl-is-trivial-np.h \
+ ${GEN}/has/acl-trivial.h \
+ ${GEN}/has/aligned-alloc.h \
+ ${GEN}/has/confstr.h \
+ ${GEN}/has/extattr-get-file.h \
+ ${GEN}/has/extattr-get-link.h \
+ ${GEN}/has/extattr-list-file.h \
+ ${GEN}/has/extattr-list-link.h \
+ ${GEN}/has/fdclosedir.h \
+ ${GEN}/has/getdents.h \
+ ${GEN}/has/getdents64.h \
+ ${GEN}/has/getdents64-syscall.h \
+ ${GEN}/has/getprogname.h \
+ ${GEN}/has/getprogname-gnu.h \
+ ${GEN}/has/max-align-t.h \
+ ${GEN}/has/pipe2.h \
+ ${GEN}/has/posix-spawn-addfchdir.h \
+ ${GEN}/has/posix-spawn-addfchdir-np.h \
+ ${GEN}/has/st-acmtim.h \
+ ${GEN}/has/st-acmtimespec.h \
+ ${GEN}/has/st-birthtim.h \
+ ${GEN}/has/st-birthtimespec.h \
+ ${GEN}/has/st-flags.h \
+ ${GEN}/has/statx.h \
+ ${GEN}/has/statx-syscall.h \
+ ${GEN}/has/strerror-l.h \
+ ${GEN}/has/strerror-r-gnu.h \
+ ${GEN}/has/strerror-r-posix.h \
+ ${GEN}/has/tm-gmtoff.h \
+ ${GEN}/has/uselocale.h
-${GEN}/config.h: ${HEADERS}
+# Previously generated by pkgs.mk
+PKG_HEADERS := ${ALL_PKGS:%=${GEN}/use/%.h}
+
+${GEN}/config.h: ${PKG_HEADERS} ${HEADERS}
${MSG} "[ GEN] ${TGT}"
printf '// %s\n' "${TGT}" >$@
printf '#ifndef BFS_CONFIG_H\n' >>$@
printf '#define BFS_CONFIG_H\n' >>$@
- printf '#define BFS_USE_%s true\n' $$(printf '%s\n' ${PKGS} | tr 'a-z-' 'A-Z_') >>$@
cat ${.ALLSRC} >>$@
printf '#endif // BFS_CONFIG_H\n' >>$@
cat ${.ALLSRC:%=%.log} >$@.log
- ${RM} ${.ALLSRC} ${.ALLSRC:%=%.log}
${VCAT} $@
.PHONY: ${GEN}/config.h
-# The C source file to attempt to compile
-CSRC = ${@:${GEN}/%.h=config/%.c}
+# The short name of the config test
+SLUG = ${@:${GEN}/%.h=%}
${HEADERS}::
- config/cc-define.sh ${CSRC} >$@ 2>$@.log
- if ! [ "${IS_V}" ]; then \
- if grep -q 'true$$' $@; then \
- printf '[ CC ] %-${MSG_WIDTH}s ✔\n' ${CSRC}; \
- else \
- printf '[ CC ] %-${MSG_WIDTH}s ✘\n' ${CSRC}; \
- fi; \
+ ${MKDIR} ${@D}
+ if config/define-if.sh ${SLUG} config/cc.sh config/${SLUG}.c >$@ 2>$@.log; then \
+ test "${IS_V}" || printf '[ CC ] %-${MSG_WIDTH}s ✔\n' ${SLUG}.c; \
+ else \
+ test "${IS_V}" || printf '[ CC ] %-${MSG_WIDTH}s ✘\n' ${SLUG}.c; \
fi
diff --git a/config/pkgconf.sh b/config/pkgconf.sh
index 2fb2f1e..365ed61 100755
--- a/config/pkgconf.sh
+++ b/config/pkgconf.sh
@@ -41,7 +41,7 @@ if [ -z "$MODE" ]; then
CFLAGS=$("$0" --cflags "$LIB") || exit 1
LDFLAGS=$("$0" --ldflags "$LIB") || exit 1
LDLIBS=$("$0" --ldlibs "$LIB") || exit 1
- config/cc.sh $CFLAGS $LDFLAGS config/$LIB.c $LDLIBS || exit 1
+ config/cc.sh $CFLAGS $LDFLAGS config/use/$LIB.c $LDLIBS || exit 1
done
fi
diff --git a/config/pkgs.mk b/config/pkgs.mk
index 2c100ab..898f262 100644
--- a/config/pkgs.mk
+++ b/config/pkgs.mk
@@ -8,15 +8,9 @@ include ${GEN}/vars.mk
include ${GEN}/flags.mk
include config/exports.mk
-# External dependencies
-USE_PKGS := \
- ${GEN}/libacl.use \
- ${GEN}/libcap.use \
- ${GEN}/libselinux.use \
- ${GEN}/liburing.use \
- ${GEN}/oniguruma.use
+HEADERS := ${ALL_PKGS:%=${GEN}/use/%.h}
-${GEN}/pkgs.mk: ${USE_PKGS}
+${GEN}/pkgs.mk: ${HEADERS}
${MSG} "[ GEN] ${TGT}"
printf '# %s\n' "${TGT}" >$@
gen() { \
@@ -25,18 +19,18 @@ ${GEN}/pkgs.mk: ${USE_PKGS}
printf 'LDFLAGS += %s\n' "$$(config/pkgconf.sh --ldflags "$$@")"; \
printf 'LDLIBS := %s $${LDLIBS}\n' "$$(config/pkgconf.sh --ldlibs "$$@")"; \
}; \
- gen $$(cat ${.ALLSRC}) >>$@
+ gen $$(grep -l ' true$$' ${.ALLSRC} | sed 's|.*/\(.*\)\.h|\1|') >>$@
${VCAT} $@
+
.PHONY: ${GEN}/pkgs.mk
-# Convert ${GEN}/foo.use to foo
-PKG = ${@:${GEN}/%.use=%}
+# Convert ${GEN}/use/foo.h to foo
+PKG = ${@:${GEN}/use/%.h=%}
-${USE_PKGS}::
- if config/pkgconf.sh ${PKG} 2>$@.log; then \
- printf '%s\n' ${PKG} >$@; \
- test "${IS_V}" || printf '[ CC ] %-${MSG_WIDTH}s ✔\n' config/${PKG}.c; \
+${HEADERS}::
+ ${MKDIR} ${@D}
+ if config/define-if.sh use/${PKG} config/pkgconf.sh ${PKG} >$@ 2>$@.log; then \
+ test "${IS_V}" || printf '[ CC ] %-${MSG_WIDTH}s ✔\n' use/${PKG}.c; \
else \
- : >$@; \
- test "${IS_V}" || printf '[ CC ] %-${MSG_WIDTH}s ✘\n' config/${PKG}.c; \
+ test "${IS_V}" || printf '[ CC ] %-${MSG_WIDTH}s ✘\n' use/${PKG}.c; \
fi
diff --git a/config/prelude.mk b/config/prelude.mk
index e1e7a4d..6b0b649 100644
--- a/config/prelude.mk
+++ b/config/prelude.mk
@@ -110,13 +110,21 @@ MSG = @msg() { \
msg
# Maximum width of a short message, to align the ✔/✘
-MSG_WIDTH := 33
+MSG_WIDTH := 30
# cat a file if V=1
VCAT,y := @cat
VCAT, := @:
VCAT := ${VCAT,${IS_V}}
+# All external dependencies
+ALL_PKGS := \
+ libacl \
+ libcap \
+ libselinux \
+ liburing \
+ oniguruma
+
# List all object files here, as they're needed by both `make config` and `make`
# All object files except the entry point
diff --git a/config/libacl.c b/config/use/libacl.c
index de1fe50..de1fe50 100644
--- a/config/libacl.c
+++ b/config/use/libacl.c
diff --git a/config/libcap.c b/config/use/libcap.c
index 58e832c..58e832c 100644
--- a/config/libcap.c
+++ b/config/use/libcap.c
diff --git a/config/libselinux.c b/config/use/libselinux.c
index bca409d..bca409d 100644
--- a/config/libselinux.c
+++ b/config/use/libselinux.c
diff --git a/config/liburing.c b/config/use/liburing.c
index bea499a..bea499a 100644
--- a/config/liburing.c
+++ b/config/use/liburing.c
diff --git a/config/oniguruma.c b/config/use/oniguruma.c
index cb17596..cb17596 100644
--- a/config/oniguruma.c
+++ b/config/use/oniguruma.c