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