master
build.cfg
1# posix: POSIX 2024
2PRESET_FEATURES=all
3
4# subset of: posix xsi net pseudo extra linux dev
5PRESET_UTILS="posix xsi net pseudo extra linux dev"
6
7# installation paths
8VERSION=2026-08-09T03-56-UTC-03
9PREFIX=/usr/local
10MANPREFIX=/usr/local/share/man
11
12# toolchain
13CC=cc
14CFLAGS="-std=c99 -Wall -Wextra -pedantic"
15LDFLAGS=""
16LDLIBS=""
17AR=ar
18ARFLAGS="rc"
19RANLIB=ranlib
20
21# preset expansion: do not edit below
22
23case "$PRESET_FEATURES" in
24posix)
25 FEATURE_FIND_DELETE=0; FEATURE_FIND_QUIT=0
26 FEATURE_FIND_EMPTY=0; FEATURE_FIND_INUM=0
27 FEATURE_FIND_SAMEFILE=0; FEATURE_FIND_MAXDEPTH=0
28 FEATURE_FIND_MINDEPTH=0; FEATURE_FIND_MMIN=0
29 FEATURE_FIND_AMIN=0; FEATURE_FIND_CMIN=0
30 FEATURE_FIND_INAME=0; FEATURE_FIND_IPATH=0
31 FEATURE_FIND_REGEX=0; FEATURE_FIND_PRINT0=0
32 FEATURE_SED_INPLACE=0; FEATURE_SED_PRESERVE_NEWLINE=0
33 FEATURE_GREP_CONTEXT=0; FEATURE_GREP_MAX_COUNT=0
34 FEATURE_TAR_CREATE=0; FEATURE_TAR_EXCLUDE=0
35 FEATURE_STAT_FILESYSTEM=0; FEATURE_STAT_FORMAT=0
36 FEATURE_SORT_BIG=0; FEATURE_SORT_STABLE=0
37 FEATURE_OD_ENDIAN=0;
38 FEATURE_SH_EASTER=0; FEATURE_SH_HISTEDIT=0;
39 FEATURE_SH_LOCAL=0 FEATURE_SH_LET=0;
40 FEATURE_SH_ULIMIT=0 FEATURE_SH_SETVAR=0;
41 FEATURE_SH_WORDEXP=0
42 FEATURE_CAL_EXT=0
43 FEATURE_LS_COLOR=0
44 FEATURE_DIFF3_MERGE=0; FEATURE_DIFF3_EDSCRIPT=0
45 FEATURE_DIFF_CONTEXT=0; FEATURE_DIFF_UNIFIED=0
46 FEATURE_DIFF_ED=0; FEATURE_DIFF_BRIEF=0
47 FEATURE_DIFF_SIDEBYSIDE=0
48 FEATURE_PATCH_BACKUP=0; FEATURE_PATCH_FUZZ=0
49 FEATURE_PATCH_STRIP_CR=0
50 FEATURE_MODPROBE_SHOW_DEPENDS=0; FEATURE_MODPROBE_BLACKLIST=0
51 FEATURE_MODPROBE_SYSLOG=0; FEATURE_MODPROBE_DIR_OVERRIDE=0
52 FEATURE_DEPMOD_ALIAS=0; FEATURE_DEPMOD_SYMBOLS=0
53 FEATURE_TAR_TTY_SAFE=0; FEATURE_TAR_NOFOLLOW=0
54 FEATURE_READLINK_REALPATH=0; FEATURE_UMOUNT_OPTIONS=0
55 FEATURE_LN_RELATIVE=0
56 FEATURE_LN_NO_TARGET_DIR=0
57 FEATURE_BC_QUIET=0
58 FEATURE_BC_MULTICHAR=0
59 FEATURE_BC_ESCAPES=0
60 FEATURE_TAR_TO_STDOUT=0; FEATURE_TAR_KEEP_OLD=0
61 FEATURE_TAR_STRIP_COMPONENTS=0; FEATURE_TAR_FILES_FROM=0
62 FEATURE_TAR_EXCLUDE_FROM=0; FEATURE_IP_ROUTE_ADD_DEL=0
63 FEATURE_IP_LINK_SET=0; FEATURE_IP_ADDR_FLUSH=0
64 ;;
65common)
66 FEATURE_FIND_DELETE=1; FEATURE_FIND_QUIT=1
67 FEATURE_FIND_EMPTY=1; FEATURE_FIND_INUM=1
68 FEATURE_FIND_SAMEFILE=1; FEATURE_FIND_MAXDEPTH=1
69 FEATURE_FIND_MINDEPTH=1; FEATURE_FIND_MMIN=1
70 FEATURE_FIND_AMIN=1; FEATURE_FIND_CMIN=1
71 FEATURE_FIND_INAME=1; FEATURE_FIND_IPATH=1
72 FEATURE_FIND_REGEX=1; FEATURE_FIND_PRINT0=1
73 FEATURE_SED_INPLACE=1; FEATURE_SED_PRESERVE_NEWLINE=1
74 FEATURE_GREP_CONTEXT=1; FEATURE_GREP_MAX_COUNT=1
75 FEATURE_TAR_CREATE=1; FEATURE_TAR_EXCLUDE=1
76 FEATURE_STAT_FILESYSTEM=1; FEATURE_STAT_FORMAT=1
77 FEATURE_SORT_BIG=0; FEATURE_SORT_STABLE=1
78 FEATURE_OD_ENDIAN=0;
79 FEATURE_SH_EASTER=1; FEATURE_SH_HISTEDIT=0;
80 FEATURE_SH_LOCAL=1 FEATURE_SH_LET=1;
81 FEATURE_SH_ULIMIT=1 FEATURE_SH_SETVAR=0;
82 FEATURE_CAL_EXT=1
83 FEATURE_LS_COLOR=1
84 FEATURE_DIFF3_MERGE=0; FEATURE_DIFF3_EDSCRIPT=1
85 FEATURE_DIFF_CONTEXT=1; FEATURE_DIFF_UNIFIED=1
86 FEATURE_DIFF_ED=1; FEATURE_DIFF_BRIEF=1
87 FEATURE_DIFF_SIDEBYSIDE=0
88 FEATURE_PATCH_BACKUP=1; FEATURE_PATCH_FUZZ=1
89 FEATURE_PATCH_STRIP_CR=1
90 FEATURE_MODPROBE_SHOW_DEPENDS=1; FEATURE_MODPROBE_BLACKLIST=1
91 FEATURE_MODPROBE_SYSLOG=1; FEATURE_MODPROBE_DIR_OVERRIDE=1
92 FEATURE_DEPMOD_ALIAS=1; FEATURE_DEPMOD_SYMBOLS=1
93 FEATURE_TAR_TTY_SAFE=1; FEATURE_TAR_NOFOLLOW=1
94 FEATURE_READLINK_REALPATH=1; FEATURE_UMOUNT_OPTIONS=1
95 FEATURE_LN_RELATIVE=1
96 FEATURE_LN_NO_TARGET_DIR=1
97 FEATURE_BC_QUIET=1
98 FEATURE_BC_MULTICHAR=1
99 FEATURE_BC_ESCAPES=1
100 FEATURE_TAR_TO_STDOUT=1; FEATURE_TAR_KEEP_OLD=1
101 FEATURE_TAR_STRIP_COMPONENTS=1; FEATURE_TAR_FILES_FROM=1
102 FEATURE_TAR_EXCLUDE_FROM=1; FEATURE_IP_ROUTE_ADD_DEL=1
103 FEATURE_IP_LINK_SET=1; FEATURE_IP_ADDR_FLUSH=1
104 ;;
105all)
106 FEATURE_FIND_DELETE=1; FEATURE_FIND_QUIT=1
107 FEATURE_FIND_EMPTY=1; FEATURE_FIND_INUM=1
108 FEATURE_FIND_SAMEFILE=1; FEATURE_FIND_MAXDEPTH=1
109 FEATURE_FIND_MINDEPTH=1; FEATURE_FIND_MMIN=1
110 FEATURE_FIND_AMIN=1; FEATURE_FIND_CMIN=1
111 FEATURE_FIND_INAME=1; FEATURE_FIND_IPATH=1
112 FEATURE_FIND_REGEX=1; FEATURE_FIND_PRINT0=1
113 FEATURE_SED_INPLACE=1; FEATURE_SED_PRESERVE_NEWLINE=1
114 FEATURE_GREP_CONTEXT=1; FEATURE_GREP_MAX_COUNT=1
115 FEATURE_TAR_CREATE=1; FEATURE_TAR_EXCLUDE=1
116 FEATURE_STAT_FILESYSTEM=1; FEATURE_STAT_FORMAT=1
117 FEATURE_SORT_BIG=1; FEATURE_SORT_STABLE=1
118 FEATURE_OD_ENDIAN=1;
119 FEATURE_SH_EASTER=1; FEATURE_SH_HISTEDIT=1
120 FEATURE_SH_LOCAL=1 FEATURE_NOEXEC=0;
121 FEATURE_NOFORK=0; FEATURE_SH_LET=1;
122 FEATURE_SH_ULIMIT=1 FEATURE_SH_SETVAR=1;
123 FEATURE_SH_WORDEXP=1
124 FEATURE_CAL_EXT=1
125 FEATURE_LS_COLOR=1
126 FEATURE_DIFF3_MERGE=1; FEATURE_DIFF3_EDSCRIPT=1
127 FEATURE_DIFF_CONTEXT=1; FEATURE_DIFF_UNIFIED=1
128 FEATURE_DIFF_ED=1; FEATURE_DIFF_BRIEF=1
129 FEATURE_DIFF_SIDEBYSIDE=1
130 FEATURE_PATCH_BACKUP=1; FEATURE_PATCH_FUZZ=1
131 FEATURE_PATCH_STRIP_CR=1
132 FEATURE_MODPROBE_SHOW_DEPENDS=1; FEATURE_MODPROBE_BLACKLIST=1
133 FEATURE_MODPROBE_SYSLOG=1; FEATURE_MODPROBE_DIR_OVERRIDE=1
134 FEATURE_DEPMOD_ALIAS=1; FEATURE_DEPMOD_SYMBOLS=1
135 FEATURE_TAR_TTY_SAFE=1; FEATURE_TAR_NOFOLLOW=1
136 FEATURE_READLINK_REALPATH=1; FEATURE_UMOUNT_OPTIONS=1
137 FEATURE_LN_RELATIVE=1
138 FEATURE_LN_NO_TARGET_DIR=1
139 FEATURE_BC_QUIET=1
140 FEATURE_BC_MULTICHAR=1
141 FEATURE_BC_ESCAPES=1
142 FEATURE_TAR_TO_STDOUT=1; FEATURE_TAR_KEEP_OLD=1
143 FEATURE_TAR_STRIP_COMPONENTS=1; FEATURE_TAR_FILES_FROM=1
144 FEATURE_TAR_EXCLUDE_FROM=1; FEATURE_IP_ROUTE_ADD_DEL=1
145 FEATURE_IP_LINK_SET=1; FEATURE_IP_ADDR_FLUSH=1
146 ;;
147*)
148 printf 'build.cfg: unknown PRESET_FEATURES value: %s\n' "$PRESET_FEATURES" >&2
149 return 1 2>/dev/null || exit 1
150 ;;
151esac
152
153
154BUILD_POSIX=0; BUILD_XSI=0; BUILD_PSEUDO=0; BUILD_NET=0; BUILD_LINUX=0; BUILD_EXTRA=0; BUILD_DEV=0
155for _p in $PRESET_UTILS; do
156 case "$_p" in
157 posix) BUILD_POSIX=1 ;;
158 linux) BUILD_LINUX=1 ;;
159 net) BUILD_NET=1 ;;
160 xsi) BUILD_XSI=1 ;;
161 pseudo) BUILD_PSEUDO=1 ;;
162 extra) BUILD_EXTRA=1 ;;
163 dev) BUILD_DEV=1 ;;
164 *)
165 printf 'build.cfg: unknown util preset: %s\n' "$_p" >&2
166 return 1 2>/dev/null || exit 1
167 ;;
168 esac
169done
170unset _p
171
172# per-item overrides (after preset expansion)
173# BUILD_POSIX_SH=0 # disable a tool when its group is active
174# BUILD_DEV_AS=1 # enable a tool whose group isnt in PRESET_UTILS
175FEATURE_SH_HISTEDIT=1
176
177# FEATURE_NOEXEC: when set to 1, wexec/wpopen/wsystem can execute registered
178# tool mains directly inside the forked child process (skipping execve)
179# this is equivalent to busybox noexec applet support
180# this applies to ALL commands contained within aruu-box, you may also
181# specify if some specific command is not an attack vector to also be nofork
182# via enabling FEATURE_NOFORK=1 and specifying those commands in NOFORK_LIST
183#
184# FEATURE_NOEXEC=1
185#
186# FEATURE_NOEXEC_OVERRIDE: only meaningful when FEATURE_NOEXEC=1
187# when set to 1, ARUU_NOEXEC=0 in the environment forces fork+exec at runtime
188#
189# FEATURE_NOEXEC_OVERRIDE=1
190#
191# FEATURE_NOFORK: when set to 1, wexecvp/wexecv can run simple commands
192# (like cat, echo, pwd, test) directly in the current process without spawning
193# a subprocess (noexec+nofork). this is equivalent to busybox nofork applet support
194#
195# FEATURE_NOFORK=1
196#
197# FEATURE_NOFORK_OVERRIDE: only meaningful when FEATURE_NOFORK=1
198# when set to 1, ARUU_NOFORK=0 in the environment forces fork for nofork commands
199# even tho they will still not do execvp() call at runtime
200# unless FEATURE_NOEXEC_OVERRIDE was enabled at build time and ARUU_NOEXEC=0
201#
202# FEATURE_NOFORK_OVERRIDE=1
203#
204# NOFORK_LIST: list of builtins that can run without fork (noexec+nofork)
205#
206NOFORK_LIST="true false echo pwd test [ basename dirname cat clear yes"
207#
208
209BUILD_EXTRA_YAP=0
210if pkg-config --exists tinfo 2>/dev/null; then
211 BUILD_EXTRA_YAP=1
212fi
213
214# tls backend: set exactly one to 1 to enable tls
215#
216FEATURE_USE_BEARSSL=0
217FEATURE_USE_LIBTLS=0
218FEATURE_USE_OPENSSL=0
219FEATURE_USE_SSL=1
220#
221if [ "$FEATURE_USE_SSL" = 1 ] &&
222 [ "$FEATURE_USE_BEARSSL$FEATURE_USE_LIBTLS$FEATURE_USE_OPENSSL" = "000" ]
223then
224 if pkg-config --exists libbearssl 2>/dev/null || pkg-config --exists bearssl 2>/dev/null; then
225 FEATURE_USE_BEARSSL=1
226 elif pkg-config --exists libtls 2>/dev/null; then
227 FEATURE_USE_LIBTLS=1
228 elif pkg-config --exists openssl 2>/dev/null; then
229 FEATURE_USE_OPENSSL=1
230 fi
231fi
232
233unset FEATURE_USE_SSL
234# auto-detect TLS/SSL flags based on selected backend
235CPPFLAGS_TLS="" LDFLAGS_TLS="" LDLIBS_TLS="" PKG_NAME=""
236if [ "$FEATURE_USE_BEARSSL" = 1 ]; then
237 if pkg-config --exists libbearssl 2>/dev/null; then
238 PKG_NAME="libbearssl"
239 elif pkg-config --exists bearssl 2>/dev/null; then
240 PKG_NAME="bearssl"
241 fi
242elif [ "$FEATURE_USE_LIBTLS" = 1 ]; then
243 if pkg-config --exists libtls 2>/dev/null; then
244 PKG_NAME="libtls"
245 else
246 LDLIBS_TLS="-ltls"
247 fi
248elif [ "$FEATURE_USE_OPENSSL" = 1 ]; then
249 if pkg-config --exists openssl 2>/dev/null; then
250 PKG_NAME="openssl"
251 else
252 LDLIBS_TLS="-lssl -lcrypto"
253 fi
254fi
255if [ -n "$PKG_NAME" ]; then
256 CPPFLAGS_TLS="$(pkg-config --cflags "$PKG_NAME")"
257 LDLIBS_TLS="$(pkg-config --libs "$PKG_NAME")"
258fi
259# trim whitespace
260CPPFLAGS_TLS=$(echo "$CPPFLAGS_TLS" | xargs)
261LDFLAGS_TLS=$(echo "$LDFLAGS_TLS" | xargs)
262LDLIBS_TLS=$(echo "$LDLIBS_TLS" | xargs)
263
264# makes ninqu try them in this order:
265NINJA_TRY="${NINJA_TRY:-samu,ninja}"