#!/bin/sh set -euC check_command () { echo -n "Checking for command $1 ... " if command -v "$1" >/dev/null then echo 'found!' else echo 'not available!'; exit 1 fi } check_perl_deps () { for d in "$@" do echo -n "Checking for perl module $d ... " if perl -Ilib -e "use $d;" then echo 'found!' else echo 'not available!'; exit 1 fi done } check_node_module () { echo -n "Checking for node module $1 ... " if [ -d "node_modules/$1" ] then echo 'found!' else echo 'not available!'; exit 1 fi } check_ninja_version () { ninja_file="$(mktemp -t jwm-build-XXXXXXXX)" echo "ninja_required_version = $1" >>"$ninja_file" echo -n "Checking ninja version at least $1 ... " if ninja -f "$ninja_file" >/dev/null then echo 'sufficient!' else echo 'inadequate!'; exit 1 fi rm "$ninja_file" } JWM_INIT= if readlink /sbin/init | grep -q systemd then JWM_INIT=systemd fi eval PERL_LIB_PATH="$(perl -V::installsitelib)" eval PERL_BIN_PATH="$(perl -V::installsitebin)" allargs="$*" while getopts 'c:d:e:i:hm:p:P:' opt do case $opt in (e) JWM_MAILDIR_EXTRACTOR="$OPTARG";; (m) JWM_MODE="$OPTARG";; (c) JWM_LOGIN_SCHEME="$OPTARG";; (d) DESTDIR="$OPTARG";; (p) PREFIX="$OPTARG";; (P) PERL_LIB_PATH="$OPTARG";; (i) JWM_INIT="$OPTARG";; (h) t="$(printf '\t')" expand -t 38,68 <&2; exit 2; } : "${JWM_MAILDIR_EXTRACTOR=extractpy}" && echo "$JWM_MAILDIR_EXTRACTOR" | grep -Eq '^extract(pl|py|rs)$' : "${JWM_MODE=development}" && [ "$JWM_MODE" = development -o "$JWM_MODE" = production ] : "${JWM_LOGIN_SCHEME=plain}" && [ "$JWM_LOGIN_SCHEME" = plain -o "$JWM_LOGIN_SCHEME" = cram_md5 ] : "${DESTDIR=/}" && [ -d "$DESTDIR" ] : "${PREFIX=usr/local}" PATH="$(pwd)/node_modules/.bin${PATH:+:$PATH}" check_command perl check_perl_deps v5.24 check_command prove check_command pod2man check_command morbo check_command hypnotoad check_command npm check_command esbuild check_command sass check_command ninja check_ninja_version 1.11 check_perl_deps 'Mojolicious 9.31' Email::MIME Role::Tiny Class::Method::Modifiers TOML::Tiny namespace::clean Test2::Bundle::More MIME::Words check_node_module bulma if [ "$JWM_LOGIN_SCHEME" = cram_md5 ] then check_node_module crypto-js check_perl_deps Digest::HMAC_MD5 fi case "$JWM_MAILDIR_EXTRACTOR" in (extractpl) [ -x "$(pwd)/script/extract.pl" ] check_perl_deps Mail::Box::Maildir MAILDIR_EXTRACTOR_BIN=script/extract.pl ;; (extractpy) [ -x "$(pwd)/script/extract.py" ] check_command python3 MAILDIR_EXTRACTOR_BIN=script/extract.py ;; (extractrs) [ -f "$(pwd)/extract/Cargo.toml" ] || { echo 'extractrs not available' >&2; exit; } JWM_EXTRACTRS_DIR=extract check_command cargo MAILDIR_EXTRACTOR_BIN=bin/jwebmail-extract ;; esac export LOGIN_SCHEME="$JWM_LOGIN_SCHEME" export CONFARGS="$allargs" export MAILDIR_EXTRACTOR_NAME="$JWM_MAILDIR_EXTRACTOR" export MAILDIR_EXTRACTOR_BIN export JWM_EXTRACTRS_DIR export JWM_MODE export JWM_INIT export DESTDIR export PREFIX export PERL_LIB_PATH export PERL_BIN_PATH export DATADIR="share/jwebmail" if [ "$PREFIX" = usr ] then export CONFDIR="../etc" else export CONFDIR="etc" fi perl -pe 's/@(\w+)@/$ENV{$1}/ga' lib/JWebmail/Config.pm.in >|lib/JWebmail/Config.pm perl -pe 's/@(\w+)@/$ENV{$1}/ga' install/jwebmail.service.in >|install/jwebmail.service sh confninja.sh >|build.ninja