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