#!/bin/sh # # We should use /usr/bin/env sh, but some systems are notoriously picky. # In fact we could ommit this line if some automations wouldn't rely on # running this file via ./bootstrap. # # This file is in the public domain. # SPDX-License-Identifier: 0BSD # # We can't set -eu because we encounter warnings which # result in stops, whereas the warnings can for now be # safely ignored. # set -eu cleanup() { echo "Removing folder 'libltdl'..." rm -rf libltdl } errmsg='' # Check if shell supports builtin 'type'. if test -z "$errmsg"; then if ! (eval 'type type') >/dev/null 2>&1 then errmsg='Shell does not support type builtin' exit 1 fi fi # This is more portable than `which' but comes with # the caveat of not(?) properly working on busybox's ash: existence() { type "$1" >/dev/null 2>&1 } check_uncrustify() { if existence uncrustify; then echo "Installing uncrustify hook and configuration" ln -fs contrib/build-common/conf/uncrustify.cfg uncrustify.cfg 2> /dev/null ln -fs contrib/build-common/conf/uncrustify_precommit .git/hooks/pre-commit 2> /dev/null else echo "Uncrustify not detected, hook not installed." echo "Please install uncrustify if you plan on doing development" fi } # yapf can be a suffixed binary, don't change the essential logic # of this if you change it. check_yapf() { if existence yapf || \ existence yapf3.0 || \ existence yapf3.1 || \ existence yapf3.2 || \ existence yapf3.3 || \ existence yapf3.4 || \ existence yapf3.5 || \ existence yapf3.6 || \ existence yapf3.7 || \ existence yapf3.8 || \ existence yapf3.9 || \ existence yapf4.0; then echo "Installing yapf symlink" ln -fs contrib/build-common/conf/.style.yapf .style.yapf 2> /dev/null else echo "yapf not detected, please install yapf if you plan on contributing python code" fi } check_libtool() { echo "checking for libtoolize / libtool... " if existence libtool || \ existence libtoolize || \ existence glibtoolize || \ existence slibtool; then autoreconf -if . "bin/pogen.sh" else echo "*** No libtoolize (libtool) or libtool found, please install it ***" >&2; exit 1 fi } submodules() { # Try to update the submodule. Since bootstrap # is also invoked by distributors, we must # ignore any failing of this function as we # could have no outgoing network connection # in a restricted environment. if ! git --version >/dev/null; then echo "git not installed, skipping submodule update" else git submodule update --init || true git submodule update --recursive --remote || true git submodule sync || true fi } init_buildcommon_include() { cp contrib/build-common/Makefile.inc contrib/Makefile.inc || true } main() { cleanup submodules init_buildcommon_include check_uncrustify check_yapf check_libtool } main "$@"