configure (9959B)
1 #!/bin/bash 2 3 ENABLED= 4 MK_BINARIES='ZZZ chpst envuidgid finit fsvc fsvs halt init modules-load pgrphack poweroff reboot seedrng setlock setuidgid shutdown sigremap softlimit vlogger zzz' 5 6 MK_INSTALL_PREFIX=/ 7 MK_INSTALL_SBIN=/sbin 8 MK_INSTALL_SHARE=/usr/share 9 MK_INSTALL_MAN8=/usr/share/man/man8 10 MK_INSTALL_DOCS=/usr/share/doc/fiss 11 MK_INSTALL_ETC=/etc 12 13 # Compiler Options 14 MK_CC=${CC:-gcc} 15 MK_CFLAGS=${CFLAGS:--g -Wall -Wextra -Wpedantic -Wno-gnu-zero-variadic-macro-arguments} 16 MK_LDFLAGS=${LDFLAGS:--fPIE} 17 18 # Utilities 19 MK_SED=sed 20 MK_PYTHON=python3 21 MK_AWK=awk 22 MK_MAKE_DOCS='tools/make-docs.py' 23 MK_MAKE_MAN='tools/make-man.py' 24 25 MK_VERBOSE= 26 27 H_STOP_TIMEOUT=5 # seconds 28 H_NAME_MAX=128 # chars 29 H_FAIL_MAX=32 # times 30 H_SERVICE_MAX=128 # services 31 H_BOOT_SERVICE="boot" 32 H_CHECK_INTERVAL=3 # seconds 33 H_PARAM_FILE_LINE_MAX=1024 # bytes 34 H_ENV_FILE_LINE_MAX=1024 # bytes 35 H_RESCUE_SHELL="/bin/bash" 36 H_DEPENDENCY_MAX=128 # times 37 H_ARGUMENTS_MAX=16 # lines 38 H_ENV_MAX=16 # lines 39 H_LOG_DIR="/var/log/fiss" 40 H_USER_BUFFER=256 # chars 41 H_USER_GROUP_MAX=32 # groups 42 H_VLOGGER_BUFFER=1024 43 H_STATUS_WAIT=5 # seconds 44 45 46 enable() { 47 if [ -z "$ENABLED" ]; then 48 ENABLED=y 49 MK_BINARIES= 50 fi 51 MK_BINARIES="$MK_BINARIES $1" 52 } 53 54 print_help() { 55 cat <<EOF 56 ./configure sets the compilation environment with given arguments 57 and run some requirement-tests 58 59 Usage: ./configure [options] 60 61 --verbose ............... enables verbose command printing in make 62 63 --using-cc .............. sets the C-compiler (default: \$CC or gcc) 64 --using-sed ............. sets the sed-preprocessor (default: sed) 65 --using-python .......... sets the python-interpreter (default: python3) 66 --using-awk ............. sets the awk-interpreter (default: awk) 67 --using-mkdocs .......... sets the docs generator (default: tools/mk-docs.py) 68 --using-mkman ........... sets the man generator (default: tools/mk-man.py) 69 70 --cflags ................ sets the C flags (default: \$CFLAGS or '-Wall -Wextra -Wpendantic -g') 71 --ldflags ............... sets the linker flags (default: \$LDFLAGS) 72 73 --prefix ................ sets the root-prefix (default: /) 74 --install-bin ........... sets the binary-destination (default: /sbin) 75 --install-etc ........... sets the config-destination (default: /etc) 76 --install-share ......... sets the share-destination (default: /usr/share) 77 --install-man ........... sets the man8-destination (default: /usr/share/man/man8) 78 --install-docs .......... sets the docs-destination (default: /usr/share/doc) 79 80 --disable-install-bin ... disabling installing binary 81 --disable-install-etc ... disabling installing config 82 --disable-install-share . disabling installing share 83 --disable-install-man ... disabling installing man8 84 --disable-install-docs .. disabling installing docs 85 86 --enable-ZZZ ............ enable ZZZ 87 --enable-chpst .......... enable chpst 88 --enable-envuidgid ...... enable envuidgid 89 --enable-finit .......... enable finit 90 --enable-fsvc ........... enable fsvc 91 --enable-fsvs ........... enable fsvs 92 --enable-halt ........... enable halt 93 --enable-init ........... enable init 94 --enable-modules-load ... enable modules-load 95 --enable-pgrphack ....... enable pgrphack 96 --enable-poweroff ....... enable poweroff 97 --enable-reboot ......... enable reboot 98 --enable-seedrng ........ enable seedrng 99 --enable-setlock ........ enable setlock 100 --enable-setuidgid ...... enable setuidgid 101 --enable-shutdown ....... enable shutdown 102 --enable-sigremap ....... enable sigremap 103 --enable-softlimit ...... enable softlimit 104 --enable-vlogger ........ enable vlogger 105 --enable-zzz ............ enable zzz 106 107 --stop-timeout .......... sets the timeout whenever service must be killed 108 --fail-limit ............ sets the limit a service may failed before it is declared as dead 109 --service-name-limit .... sets the limit of a service name 110 --service-limit ......... sets the limit of services 111 --default-runlevel ...... sets the default runlevel started by finit 112 --check-interval ........ sets the interval services are read and checked 113 --total-depends-limit ... sets the limit of total dependencies 114 --log-directory ......... sets the default log directory (default: /var/log/fiss) 115 --default-fsvc-timeout .. sets the timeout fsvc is wating for status update (default: 5) 116 --vlogger-buffer ........ sets the buffer vlogger is using (1024 bytes) 117 --param-line-limit ...... sets the limit of a line in ./param 118 --param-limit ........... sets the limit of lines in ./params 119 --env-line-limit ........ sets the limit of a line in ./env 120 --env-limit ............. sets the limit of lines in ./env 121 --user-file-limit ....... sets the limit of characters in ./user 122 --group-limit ........... sets the limit of groups in ./user 123 124 --help .................. prints this and exits 125 EOF 126 127 exit $1 128 } 129 130 panic() { 131 echo "error:" $@ 132 exit 1 133 } 134 135 while [ -n "$1" ]; do 136 case $1 in 137 --using-cc) MK_CC=$2; shift 2;; 138 --using-sed) MK_SED=$2; shift 2;; 139 --using-python) MK_SED=$2; shift 2;; 140 --using-awk) MK_AWK=$2; shift 2;; 141 --using-mkdocs) MK_MAKE_DOCS=$2; shift 2;; 142 --using-mkman) MK_MAKE_MAN=$2; shift 2;; 143 144 --verbose) MK_VERBOSE=y; shift;; 145 --cflags) MK_CFLAGS=$2; shift 2;; 146 --ldflags) MK_LDFLAGS=$2; shift 2;; 147 --prefix) MK_INSTALL_PREFIX=$2; shift 2;; 148 149 --install-bin) MK_INSTALL_SBIN=$2; shift 2;; 150 --install-etc) MK_INSTALL_ETC=$2; shift 2;; 151 --install-share) MK_INSTALL_SHARE=$2; shift 2;; 152 --install-man) MK_INSTALL_MAN8=$2; shift 2;; 153 --install-docs) MK_INSTALL_DOCS=$2; shift 2;; 154 155 --disable-install-bin) MK_INSTALL_SBIN=; shift;; 156 --disable-install-etc) MK_INSTALL_ETC=; shift;; 157 --disable-install-share) MK_INSTALL_SHARE=; shift;; 158 --disable-install-man) MK_INSTALL_MAN8=; shift;; 159 --disable-install-docs) MK_INSTALL_DOCS=; shift;; 160 161 --enable-ZZZ) enable ZZZ; shift;; 162 --enable-chpst) enable chpst; shift;; 163 --enable-envuidgid) enable envuidgid; shift;; 164 --enable-finit) enable finit; shift;; 165 --enable-fsvc) enable fsvc; shift;; 166 --enable-fsvs) enable fsvs; shift;; 167 --enable-halt) enable halt; shift;; 168 --enable-init) enable init; shift;; 169 --enable-modules-load) enable modules-load; shift;; 170 --enable-pgrphack) enable pgrphack; shift;; 171 --enable-poweroff) enable poweroff; shift;; 172 --enable-reboot) enable reboot; shift;; 173 --enable-seedrng) enable seedrng; shift;; 174 --enable-setlock) enable setlock; shift;; 175 --enable-setuidgid) enable setuidgid; shift;; 176 --enable-shutdown) enable shutdown; shift;; 177 --enable-sigremap) enable sigremap; shift;; 178 --enable-softlimit) enable softlimit; shift;; 179 --enable-vlogger) enable vlogger; shift;; 180 --enable-zzz) enable zzz; shift;; 181 182 --stop-timeout) H_STOP_TIMEOUT=$2; shift 2;; 183 --fail-limit) H_FAIL_MAX=$2; shift 2;; 184 --service-name-limit) H_NAME_MAX=$2; shift 2;; 185 --service-limit) H_SERVICE_MAX=$2; shift 2;; 186 --boot-service) H_BOOT_SERVICE=$2; shift 2;; 187 --check-interval) H_CHECK_INTERVAL=$2; shift 2;; 188 --rescure-shell) H_RESCUE_SHELL=$2; shift 2;; 189 --total-depends-limit) H_DEPENDENCY_MAX=$2; shift 2;; 190 --log-directory) H_LOG_DIR=$2; shift 2;; 191 --default-fsvc-timeout) H_STATUS_WAIT=$2; shift 2;; 192 --vlogger-buffer) H_VLOGGER_BUFFER=$2; shift 2;; 193 --param-line-limit) H_PARAM_FILE_LINE_MAX=$2; shift 2;; 194 --env-line-limit) H_ENV_FILE_LINE_MAX=$2; shift 2;; 195 --param-limit) H_ARGUMENTS_MAX=$2; shift 2;; 196 --env-limit) H_ENV_MAX=$2; shift 2;; 197 --user-file-limit) H_USER_BUFFER=$2; shift 2;; 198 --group-limit) H_USER_GROUP_MAX=$2; shift 2;; 199 200 --help) print_help 0;; 201 *) echo "error: unknown option '$1'"; print_help 1;; 202 esac 203 done 204 205 command -v $MK_CC 2>&1 > /dev/null || panic "$MK_CC is not a valid executable" 206 command -v $MK_SED 2>&1 > /dev/null || panic "$MK_SED is not a valid executable" 207 command -v $MK_PYTHON 2>&1 > /dev/null || panic "$MK_PYTHON is not a valid executable" 208 command -v $MK_AWK 2>&1 > /dev/null || panic "$MK_AWK is not a valid executable" 209 [ -r $MK_MAKE_DOCS ] || panic "$MK_MAKE_DOCS is not found" 210 [ -r $MK_MAKE_MAN ] || panic "$MK_MAKE_MAN is not found" 211 212 H_SERVICE_DIR="$MK_INSTALL_ETC/service.d" 213 H_START_EXEC="$MK_INSTALL_SHARE/fiss/start" 214 H_STOP_EXEC="$MK_INSTALL_SHARE/fiss/stop" 215 H_SUSPEND_EXEC="$MK_INSTALL_SHARE/fiss/suspend" 216 H_RESUME_EXEC="$MK_INSTALL_SHARE/fiss/resume" 217 218 cat > config.mk <<EOF 219 BINARIES := $MK_BINARIES 220 INSTALL_PREFIX := $MK_INSTALL_PREFIX 221 INSTALL_SBIN := $MK_INSTALL_SBIN 222 INSTALL_SHARE := $MK_INSTALL_SHARE 223 INSTALL_MAN8 := $MK_INSTALL_MAN8 224 INSTALL_DOCS := $MK_INSTALL_DOCS 225 INSTALL_ETC := $MK_INSTALL_ETC 226 227 CC := $MK_CC 228 CFLAGS := $MK_CFLAGS 229 LDFLAGS := $MK_LDFLAGS 230 231 SED := $MK_SED 232 PYTHON := $MK_PYTHON 233 AWK := $MK_AWK 234 MAKE_DOCS := $MK_MAKE_DOCS 235 MAKE_MAN := $MK_MAKE_MAN 236 237 VERBOSE := $MK_VERBOSE 238 EOF 239 240 cat > config.h <<EOF 241 // generated by ./configure 242 243 #pragma once 244 245 #define SV_STOP_TIMEOUT $H_STOP_TIMEOUT 246 #define SV_NAME_MAX $H_NAME_MAX 247 #define SV_FAIL_MAX $H_FAIL_MAX 248 #define SV_SERVICE_MAX $H_SERVICE_MAX 249 #define SV_CHECK_INTERVAL $H_CHECK_INTERVAL 250 #define SV_PARAM_FILE_LINE_MAX $H_PARAM_FILE_LINE_MAX 251 #define SV_ENV_FILE_LINE_MAX $H_ENV_FILE_LINE_MAX 252 #define SV_DEPENDENCY_MAX $H_DEPENDENCY_MAX 253 #define SV_ARGUMENTS_MAX $H_ARGUMENTS_MAX 254 #define SV_ENV_MAX $H_ENV_MAX 255 #define SV_USER_BUFFER $H_USER_BUFFER 256 #define SV_USER_GROUP_MAX $H_USER_GROUP_MAX 257 #define SV_VLOGGER_BUFFER $H_VLOGGER_BUFFER 258 #define SV_STATUS_WAIT $H_STATUS_WAIT 259 #define SV_BOOT_SERVICE "$H_BOOT_SERVICE" 260 #define SV_LOG_DIR "$H_LOG_DIR" 261 #define SV_RESCUE_SHELL "$H_RESCUE_SHELL" 262 #define SV_SERVICE_DIR "$H_SERVICE_DIR" 263 #define SV_START_EXEC "$H_START_EXEC" 264 #define SV_STOP_EXEC "$H_STOP_EXEC" 265 #define SV_SUSPEND_EXEC "$H_SUSPEND_EXEC" 266 #define SV_RESUME_EXEC "$H_RESUME_EXEC" 267 EOF 268 269 echo 'Configuring succeed!'