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}"