summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorng0 <ng0@n0.is>2019-10-22 16:32:07 +0000
committerng0 <ng0@n0.is>2019-10-22 16:32:07 +0000
commitdd8a253d1a3cc778410eeca48a763d106a396c44 (patch)
treeb07c5b7f8baa9d9cba1ba541885f69ecac2018e1
parentaae7f00662634db4c314acfa6d8008e0322a21f5 (diff)
downloadtaler-build-scripts-dd8a253d1a3cc778410eeca48a763d106a396c44.tar.gz
taler-build-scripts-dd8a253d1a3cc778410eeca48a763d106a396c44.tar.bz2
taler-build-scripts-dd8a253d1a3cc778410eeca48a763d106a396c44.zip
start to make sh code reusable.
hope the configure doesn't blow up, locally tested. this now requires readlink(1) and so far only serves the purpose to get to call python indepent of setting a python version in a Makefile for which with the current layout we'd have to run configure which would require python. Or we just record the location or name of the python executable in config.mk...
-rw-r--r--README17
-rwxr-xr-xconfigure50
-rwxr-xr-xsh/bin.sh/python.sh37
-rw-r--r--sh/lib.sh/existence.sh27
-rw-r--r--sh/lib.sh/existence_python.sh76
5 files changed, 160 insertions, 47 deletions
diff --git a/README b/README
index 2b2e5a5..ee915fc 100644
--- a/README
+++ b/README
@@ -12,3 +12,20 @@ A repository using these build-system files should be structured as follows:
Makefile and configure.py can also be placed directly into the root of the
repository. However, this might lead to errors when "make" can be invoked
before bootstrap and configure has been done.
+
+
+directory structure:
+--------------------
+
+conf:
+- contains mixed configuration data, mostly for linters and editors
+
+sh:
+- contains shell script code in reusable, importable pieces,
+ usually one function per file and files named after their
+ function.
+ the sh/lib.sh folder contains library code.
+ the sh/bin.sh folder contains executable scripts which can be
+ used for various functions.
+ Current caveat: the files all have to be included. shell independent
+ detection of real pathnames is tricky.
diff --git a/configure b/configure
index f6af08f..3014035 100755
--- a/configure
+++ b/configure
@@ -30,53 +30,9 @@
#
# SPDX-License-Identifier: 0BSD
-# there is a function used in curl to replicate which(1), but
-# it uses too many other tools. this one uses command and in
-# gnunet so far has no reports about failures.
-existence()
-{
- command -v "$1" >/dev/null 2>&1
-}
-
-# We have to check every possible variant of the
-# executable name because there is a PEP which
-# defines the executable to be like this.
-if existence python3; then
- if test ! -z "`python3 --version | awk '$2 ~ /3.7/ { print }'`"; then
- python="python3"
- else
- echo "*** At least python 3.7 is required for the buildsystem"
- exit 1
- fi
-# elif existence python3.1; then
-# python="python3.1"
-# elif existence python3.2; then
-# python="python3.2"
-# elif existence python3.3; then
-# python="python3.3"
-# elif existence python3.4; then
-# python="python3.4"
-# elif existence python3.5; then
-# python="python3.5"
-# elif existence python3.6; then
-# python="python3.6"
-elif existence python3.7; then
- python="python3.7"
-elif existence python3.8; then
- python="python3.8"
-else
- echo "*** No known python3 executable found in path ***"
- echo "*** falling back to env(1) python ***"
- # Unreliable, but if env finds no python, we still can
- # not assume python in a fixed location.
- # TODO: Check this in a clean chroot!
- python="env python"
-fi
-
-# we could check the return value here via || echo "blafoo"
-# or fail anyway once configure.py is invoked because we
-# don't have python if we reach the point to fail.
-PYTHON=$($python -c 'import sys; print(sys.executable)')
+dir=$(dirname "$(readlink -f -- "$0")")
+. $dir/sh/lib.sh/existence.sh
+. $dir/sh/lib.sh/existence_python.sh
scriptpath=build-system/taler-build-scripts
diff --git a/sh/bin.sh/python.sh b/sh/bin.sh/python.sh
new file mode 100755
index 0000000..2ec999a
--- /dev/null
+++ b/sh/bin.sh/python.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# This file is part of TALER
+# (C) 2019 GNUnet e.V.
+#
+# This is very simple POSIX sh script which
+# identifies the first matching
+# python3 identifier in $PATH and produces
+# configure.py from configure.py.in, and then
+# calls the new executable configure.py.
+#
+# It should be portable on Unices. Report bugs on
+# the bugtracker if you discover that it isn't
+# working as intended.
+#
+# Authors:
+# Author: ng0 <ng0@taler.net>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+# LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+# THIS SOFTWARE.
+#
+# SPDX-License-Identifier: 0BSD
+
+dir=$(dirname "$(readlink -f -- "$0")")
+. $dir/../lib.sh/existence.sh
+. $dir/../lib.sh/existence_python.sh
+
+exec "$PYTHON" $@
diff --git a/sh/lib.sh/existence.sh b/sh/lib.sh/existence.sh
new file mode 100644
index 0000000..a888dee
--- /dev/null
+++ b/sh/lib.sh/existence.sh
@@ -0,0 +1,27 @@
+# This file is part of TALER
+# (C) 2019 GNUnet e.V.
+#
+# Authors:
+# Author: ng0 <ng0@taler.net>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+# LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+# THIS SOFTWARE.
+#
+# SPDX-License-Identifier: 0BSD
+
+# there is a function used in curl to replicate which(1), but
+# it uses too many other tools. this one uses command and in
+# gnunet so far has no reports about failures.
+existence()
+{
+ command -v "$1" >/dev/null 2>&1
+}
diff --git a/sh/lib.sh/existence_python.sh b/sh/lib.sh/existence_python.sh
new file mode 100644
index 0000000..f32975a
--- /dev/null
+++ b/sh/lib.sh/existence_python.sh
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+# This file is part of TALER
+# (C) 2019 GNUnet e.V.
+#
+# This is very simple POSIX sh script which
+# identifies the first matching
+# python3 identifier in $PATH and produces
+# configure.py from configure.py.in, and then
+# calls the new executable configure.py.
+#
+# It should be portable on Unices. Report bugs on
+# the bugtracker if you discover that it isn't
+# working as intended.
+#
+# Authors:
+# Author: ng0 <ng0@taler.net>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+# LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+# THIS SOFTWARE.
+#
+# SPDX-License-Identifier: 0BSD
+
+existence_python()
+{
+ # We have to check every possible variant of the
+ # executable name because there is a PEP which
+ # defines the executable to be like this.
+ if existence python3; then
+ if test ! -z "`python3 --version | awk '$2 ~ /3.7/ { print }'`"; then
+ python="python3"
+ else
+ echo "*** At least python 3.7 is required for the buildsystem"
+ exit 1
+ fi
+ # elif existence python3.1; then
+ # python="python3.1"
+ # elif existence python3.2; then
+ # python="python3.2"
+ # elif existence python3.3; then
+ # python="python3.3"
+ # elif existence python3.4; then
+ # python="python3.4"
+ # elif existence python3.5; then
+ # python="python3.5"
+ # elif existence python3.6; then
+ # python="python3.6"
+ elif existence python3.7; then
+ python="python3.7"
+ elif existence python3.8; then
+ python="python3.8"
+ else
+ echo "*** No known python3 executable found in path ***"
+ echo "*** falling back to env(1) python ***"
+ # Unreliable, but if env finds no python, we still can
+ # not assume python in a fixed location.
+ # TODO: Check this in a clean chroot!
+ python="env python"
+ fi
+
+ # we could check the return value here via || echo "blafoo"
+ # or fail anyway once configure.py is invoked because we
+ # don't have python if we reach the point to fail.
+ PYTHON=$($python -c 'import sys; print(sys.executable)')
+}
+
+existence_python