diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index e2da5ef5b..21f9b0cac 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -21,6 +21,4 @@ jobs: run: | # add requirements sudo apt install portaudio19-dev gettext rename - export UNOPT=1 - ./check - ./build + make check build BUILDFLAGS="" diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..9cc9478e5 --- /dev/null +++ b/Makefile @@ -0,0 +1,69 @@ +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c +.DELETE_ON_ERROR: +MAKEFLAGS += --warn-undefined-variables +MAKEFLAGS += --no-builtin-rules +SUBMAKE := $(MAKE) --print-directory +.SUFFIXES: + +BUILDFLAGS := --release --strip +RUNFLAGS := +CHECKABLE := rslib pylib qt +DEVEL := rspy pylib qt + +# - modern pip required for wheel +# - add qt if missing +pyenv: + python3 -m venv pyenv && \ + . pyenv/bin/activate && \ + pip install --upgrade pip setuptools && \ + python -c 'import PyQt5' 2>/dev/null || pip install -r qt/requirements.qt + +# update build hash +meta/buildhash: + oldhash=$$(test -f meta/buildhash && cat meta/buildhash || true); \ + newhash=$$(git rev-parse --short HEAD); \ + if [ "$$oldhash" != "$$newhash" ]; then \ + echo $$newhash > meta/buildhash; \ + fi + +.PHONY: run +run: pyenv meta/buildhash + @. pyenv/bin/activate && \ + for dir in $(DEVEL); do \ + $(SUBMAKE) -C $$dir develop BUILDFLAGS="$(BUILDFLAGS)"; \ + done; \ + echo "Starting Anki..."; \ + qt/runanki $(RUNFLAGS) + +.PHONY: build +build: pyenv meta/buildhash + @. pyenv/bin/activate && \ + for dir in $(DEVEL); do \ + $(SUBMAKE) -C $$dir build BUILDFLAGS="$(BUILDFLAGS)"; \ + done; \ + helpers/rename-with-buildhash + @echo + @echo "Build complete." + +.PHONY: clean +clean: + rm -rf dist + @for dir in $(DEVEL); do \ + $(SUBMAKE) -C $$dir clean; \ + done + +.PHONY: check +check: pyenv meta/buildhash + @. pyenv/bin/activate && \ + for dir in $(CHECKABLE); do \ + $(SUBMAKE) -C $$dir check; \ + done; + @echo + @echo "All checks passed!" + +.PHONY: fix +fix: + for dir in $(CHECKABLE); do \ + $(SUBMAKE) -C $$dir fix; \ + done; \ diff --git a/build b/build deleted file mode 100755 index 17d2f5ccd..000000000 --- a/build +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -e - -. scripts.inc - -rm -rf dist - -for dir in $DEVEL; do - echo $dir - (cd $dir && make build BUILDFLAGS="$BUILDFLAGS") -done - -helpers/rename-with-buildhash diff --git a/check b/check deleted file mode 100755 index 201be0dd9..000000000 --- a/check +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -e - -. scripts.inc - -# install prereqs before checking -for dir in $DEVEL; do - echo $dir - (cd $dir && make develop BUILDFLAGS="$BUILDFLAGS") -done - -for dir in $CHECKABLE; do - echo $dir - (cd $dir && make check) -done diff --git a/clean b/clean deleted file mode 100755 index 069776e12..000000000 --- a/clean +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -set -e - -. scripts.inc - -rm -rf dist - -for dir in $DEVEL; do - echo $dir - (cd $dir && make clean) -done diff --git a/fix b/fix deleted file mode 100755 index 8aea5abf9..000000000 --- a/fix +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -set -e - -. scripts.inc - -for dir in $CHECKABLE; do - echo $dir - (cd $dir && make fix) -done diff --git a/pylib/Makefile b/pylib/Makefile index aea5d4f4b..df773c043 100644 --- a/pylib/Makefile +++ b/pylib/Makefile @@ -1,4 +1,3 @@ -PREFIX := /usr SHELL := bash .SHELLFLAGS := -eu -o pipefail -c .DELETE_ON_ERROR: diff --git a/qt/Makefile b/qt/Makefile index 9afc5cf64..26860ae49 100644 --- a/qt/Makefile +++ b/qt/Makefile @@ -1,4 +1,3 @@ -PREFIX := /usr SHELL := bash .SHELLFLAGS := -eu -o pipefail -c .DELETE_ON_ERROR: diff --git a/run b/run index 8a2f87fed..9bbd8e2d1 100755 --- a/run +++ b/run @@ -1,12 +1,3 @@ #!/bin/bash -set -e - -. scripts.inc - -for dir in $DEVEL; do - echo $dir - (cd $dir && make develop BUILDFLAGS="$BUILDFLAGS") -done - -qt/runanki "$@" +make -C $(dirname $0) run RUNFLAGS="$*"