Merge branch 'tng_5528' of ssh://gnunet.org/gnunet into tng_5528
[oweals/gnunet.git] / bootstrap
index 1160ab13c5c5ccbdee645bbcf924a59536b885b2..b4f5b4dc3d3374daa3d967b4200d583d34d27817 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -1,6 +1,12 @@
 #!/bin/sh
 #!/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.
 # 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.
 # We can't set -eu because we encounter warnings which
 # result in stops, whereas the warnings can for now be
 # safely ignored.
@@ -12,19 +18,30 @@ cleanup()
     rm -rf 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()
 {
 # This is more portable than `which' but comes with
 # the caveat of not(?) properly working on busybox's ash:
 existence()
 {
-    command -v "$1" >/dev/null 2>&1
+    type "$1" >/dev/null 2>&1
 }
 
 check_uncrustify()
 {
     if existence uncrustify; then
         echo "Installing uncrustify hook and configuration"
 }
 
 check_uncrustify()
 {
     if existence uncrustify; then
         echo "Installing uncrustify hook and configuration"
-        ln -s contrib/uncrustify.cfg uncrustify.cfg 2> /dev/null
-        ln -s ../../contrib/uncrustify_precommit .git/hooks/pre-commit 2> /dev/null
+        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"
     else
         echo "Uncrustify not detected, hook not installed."
         echo "Please install uncrustify if you plan on doing development"
@@ -48,7 +65,7 @@ check_yapf()
        existence yapf3.9 || \
        existence yapf4.0; then
         echo "Installing yapf symlink"
        existence yapf3.9 || \
        existence yapf4.0; then
         echo "Installing yapf symlink"
-        ln -s contrib/conf/.style.yapf 2> /dev/null
+        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
     else
         echo "yapf not detected, please install yapf if you plan on contributing python code"
     fi
@@ -70,9 +87,32 @@ check_libtool()
     fi
 }
 
     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 || true
+        git submodule sync || true
+    fi
+}
+
+init_buildcommon_include()
+{
+    cp contrib/build-common/Makefile.inc contrib/Makefile.inc || true
+}
+
 main()
 {
     cleanup
 main()
 {
     cleanup
+    submodules
+    init_buildcommon_include
     check_uncrustify
     check_yapf
     check_libtool
     check_uncrustify
     check_yapf
     check_libtool