diff --git a/ubuntu20-04/piper/Dockerfile b/ubuntu20-04/piper/Dockerfile new file mode 100644 index 0000000..6463ada --- /dev/null +++ b/ubuntu20-04/piper/Dockerfile @@ -0,0 +1,18 @@ +FROM ubuntu:20.04 + +WORKDIR /build/piper + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update \ + && apt-get install -y build-essential git python3-dev python3-pip python-gi-dev gettext libcairo2-dev gtk-update-icon-cache desktop-file-utils + +RUN pip3 install meson ninja lxml evdev pycairo + +RUN git clone --depth=1 https://github.com/libratbag/piper.git /build/piper + +RUN meson setup builddir --prefix=/usr +RUN ninja -C builddir +RUN ninja -C builddir install + +CMD ["sleep", "infinity"] \ No newline at end of file diff --git a/ubuntu20-04/piper/build.sh b/ubuntu20-04/piper/build.sh new file mode 100755 index 0000000..f885ced --- /dev/null +++ b/ubuntu20-04/piper/build.sh @@ -0,0 +1,27 @@ +APP=piper + +CONTAINER="build-${APP}" +ROOT="/build/${APP}" +IMAGE="${CONTAINER}:latest" +TARGET="~/bin" + +docker build -t "${IMAGE}" "${APP}" || exit 1 +docker run -d --name "${CONTAINER}" "${IMAGE}" + +sudo mkdir -p /usr/lib/python3/dist-packages/piper +sudo docker cp "${CONTAINER}:/build/piper/piper" "/usr/lib/python3/dist-packages" +sudo docker cp "${CONTAINER}:${ROOT}/builddir/data/org.freedesktop.Piper.desktop" "/usr/share/applications" +sudo docker cp "${CONTAINER}:${ROOT}/builddir/data/org.freedesktop.Piper.appdata.xml" "/usr/share/metainfo" +sudo mkdir -p /usr/share/piper +sudo docker cp "${CONTAINER}:${ROOT}/builddir/data/piper.gresource" "/usr/share/piper" +sudo docker cp "${CONTAINER}:${ROOT}/builddir/data/piper.1" "/usr/share/man/man1" +sudo docker cp "${CONTAINER}:/build/piper/data/org.freedesktop.Piper.svg" "/usr/share/icons/hicolor/scalable/apps" +sudo docker cp "${CONTAINER}:/build/piper/data/org.freedesktop.Piper-symbolic.svg" "/usr/share/icons/hicolor/symbolic/apps" +sudo docker cp "${CONTAINER}:/build/piper/builddir/piper" "/usr/bin" +sudo docker cp "${CONTAINER}:${ROOT}/builddir/meson-private/python-3.8-installed.json" "/tmp" + +docker remove -f "${CONTAINER}" + +sudo gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor +sudo update-desktop-database -q /usr/share/applications +sudo python3 "${APP}/pycompile.py" /tmp/python-3.8-installed.json 0 \ No newline at end of file diff --git a/ubuntu20-04/piper/pycompile.py b/ubuntu20-04/piper/pycompile.py new file mode 100644 index 0000000..b1ccbea --- /dev/null +++ b/ubuntu20-04/piper/pycompile.py @@ -0,0 +1,59 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2016 The Meson development team + +# ignore all lints for this file, since it is run by python2 as well + +# type: ignore +# pylint: disable=deprecated-module + +import json, os, subprocess, sys +from compileall import compile_file + +custom_env = { + "MESON_INSTALL_DESTDIR_PY_PURELIB": '/usr/lib/python3/dist-packages/piper', + "MESON_INSTALL_PY_PURELIB": '/usr/lib/python3/dist-packages/piper', +} + +quiet = int(os.environ.get('MESON_INSTALL_QUIET', 0)) + +def compileall(files): + for f in files: + # f is prefixed by {py_xxxxlib}, both variants are 12 chars + # the key is the middle 10 chars of the prefix + key = f[1:11].upper() + f = f[12:] + + ddir = None + fullpath = absf = custom_env['MESON_INSTALL_DESTDIR_'+key] + f + f = custom_env['MESON_INSTALL_'+key] + f + + if absf != f: + ddir = os.path.dirname(f) + + if os.path.isdir(absf): + for root, _, files in os.walk(absf): + if ddir is not None: + ddir = root.replace(absf, f, 1) + for dirf in files: + if dirf.endswith('.py'): + fullpath = os.path.join(root, dirf) + compile_file(fullpath, ddir, force=True, quiet=quiet) + else: + compile_file(fullpath, ddir, force=True, quiet=quiet) + +def run(manifest): + data_file = os.path.join(os.path.dirname(__file__), manifest) + with open(data_file, 'rb') as f: + dat = json.load(f) + compileall(dat) + +if __name__ == '__main__': + manifest = sys.argv[1] + run(manifest) + if len(sys.argv) > 2: + optlevel = int(sys.argv[2]) + # python2 only needs one or the other + if optlevel == 1 or (sys.version_info >= (3,) and optlevel > 0): + subprocess.check_call([sys.executable, '-O'] + sys.argv[:2]) + if optlevel == 2: + subprocess.check_call([sys.executable, '-OO'] + sys.argv[:2])