diff --git a/Makefile.am b/Makefile.am index 2c99718..6fc255d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,10 @@ AUTOMAKE_OPTIONS = foreign subdir-objects -Wall bin_PROGRAMS = forge forge_SOURCES = src/main.c src/args.c src/forge.c src/file.c src/window.c src/shaders.c src/timer.c src/string.c src/config_file.c src/rand.c src/video.c src/shared.c src/midi.c src/state.c src/arr.c src/tempo.c $(top_srcdir)/include/glad/gl.h $(top_srcdir)/include/glad/egl.h $(top_srcdir)/hashmap.c/hashmap.c $(top_srcdir)/log.c/src/log.c -forge_CFLAGS = -Ofast -march=native -flto -funroll-loops -fprefetch-loop-arrays -fno-exceptions -fopenmp -I$(top_srcdir)/include -DGLFW_INCLUDE_NONE -DGLFW_EXPOSE_NATIVE_EGL -DGLFW_NATIVE_INCLUDE_NONE -DLOG_USE_COLOR +forge_CFLAGS = -Ofast -march=native -flto -funroll-loops -fprefetch-loop-arrays -fno-exceptions -fopenmp -I$(top_srcdir)/include -DGLFW_INCLUDE_NONE -DGLFW_EXPOSE_NATIVE_EGL -DGLFW_NATIVE_INCLUDE_NONE -DLOG_USE_COLOR -DDATADIR=\"$(datadir)/$(PACKAGE)\" forge_LDADD = -lm -lGL -lglfw -lasound -include_HEADERS = src/main.h src/args.h src/config.h src/types.h src/forge.h src/file.h src/constants.h src/window.h src/shaders.h src/timer.h src/string.h src/config_file.h src/rand.h src/video.h src/shared.h src/midi.h src/state.h src/arr.h src/tempo.h $(top_srcdir)/include/glad/gl.h $(top_srcdir)/include/glad/egl.h $(top_srcdir)/include/linmath.h $(top_srcdir)/include/hashmap.h $(top_srcdir)/include/log.h \ No newline at end of file +include_HEADERS = src/main.h src/args.h src/config.h src/types.h src/forge.h src/file.h src/constants.h src/window.h src/shaders.h src/timer.h src/string.h src/config_file.h src/rand.h src/video.h src/shared.h src/midi.h src/state.h src/arr.h src/tempo.h $(top_srcdir)/include/glad/gl.h $(top_srcdir)/include/glad/egl.h $(top_srcdir)/include/linmath.h $(top_srcdir)/include/hashmap.h $(top_srcdir)/include/log.h + +EXTRA_DIST = default.cfg shaders/frag0.glsl shaders/frag1.glsl shaders/frag2.glsl shaders/frag3.glsl shaders/frag4.glsl shaders/frag5.glsl shaders/frag6.glsl shaders/frag7.glsl shaders/frag8.glsl shaders/frag9.glsl shaders/frag10.glsl +confdir = $(prefix)/share/$(PACKAGE) +conf_DATA = default.cfg shaders/frag0.glsl shaders/frag1.glsl shaders/frag2.glsl shaders/frag3.glsl shaders/frag4.glsl shaders/frag5.glsl shaders/frag6.glsl shaders/frag7.glsl shaders/frag8.glsl shaders/frag9.glsl shaders/frag10.glsl \ No newline at end of file diff --git a/Makefile.dev b/Makefile.dev index 4ec7c77..59dcd05 100644 --- a/Makefile.dev +++ b/Makefile.dev @@ -1,6 +1,6 @@ TARGET ?= forge INSTALL_DIR ?= $(HOME)/.local/bin -TEST_ARGS ?= --frag=./shaders --config=./config/forge.cfg --video-in=/dev/video0 --video-in=/dev/video1 --video-in=/dev/video2 --video-in=/dev/video3 --video-in=/dev/video4 --video-in=/dev/video5 --video-in=/dev/video6 --video-in=/dev/video7 --video-in=/dev/video8 --video-in=/dev/video9 +TEST_ARGS ?= --video-in=/dev/video0 --video-in=/dev/video1 --video-in=/dev/video2 --video-in=/dev/video3 --video-in=/dev/video4 --video-in=/dev/video5 --video-in=/dev/video6 --video-in=/dev/video7 --video-in=/dev/video8 --video-in=/dev/video9 SHELL := /bin/bash .PHONY: build @@ -42,24 +42,17 @@ valgrind: build --undef-value-errors=no \ ./build/$(TARGET) $(TEST_ARGS) -.PHONY: release-% -release-%: clean - git pull origin master - sed -i -E "s/[0-9]+\\.[0-9]+\\.[0-9]+/$*/g" configure.ac - aclocal - autoconf - automake --add-missing - ./configure - make distcheck - mkdir -p build - cp "$(TARGET)-steel-$*.tar.gz" build/ - @rm -rf \ +.PHONY: clean-release +clean-release: + @rm -rf \ autom4te.cache \ aclocal.m4 \ compile \ config.* \ configure \ + configure~ \ depcomp \ + **\.deps \ $(TARGET) \ $(TARGET)-*.tar.gz \ $(TARGET)-*.pkg.tar.zst \ @@ -69,6 +62,28 @@ release-%: clean missing \ src/.* \ src/*.o + +.PHONY: test-release +test-release: clean clean-release + aclocal + autoconf + automake --add-missing + ./configure + make distcheck + mkdir -p build + cp "$(TARGET)-steel-*.tar.gz" build/ + +.PHONY: release-% +release-%: clean clean-release + git pull origin master + sed -i -E "s/[0-9]+\\.[0-9]+\\.[0-9]+/$*/g" configure.ac + aclocal + autoconf + automake --add-missing + ./configure + make distcheck + mkdir -p build + cp "$(TARGET)-steel-$*.tar.gz" build/ sed -i -E "s/pkgver=[0-9]+\\.[0-9]+\\.[0-9]+/pkgver=$*/g" PKGBUILD sha256sum build/forge-steel-$*.tar.gz | cut -d' ' -f1 | xargs -I{} sed -i -E "s/sha256sums=\\('.*'\\)/sha256sums=\\('{}'\\)/g" PKGBUILD git add configure.ac PKGBUILD diff --git a/PKGBUILD b/PKGBUILD index a1766f1..836af2d 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,13 +1,14 @@ pkgname=forge -pkgver=1.0.0 +pkgver=0.0.0 pkgrel=1 pkgdesc="Fusion Of Real Time Generative Effects" arch=('i686' 'pentium4' 'x86_64' 'arm' 'armv7h' 'armv6h' 'aarch64' 'riscv64') depends=('glfw>=1:3.0', 'v4l-utils>=1.30', 'alsa-lib>=1.2.14') -url="https://github.com/klemek/forge" +url="https://github.com/klemek/forge-steel" source=("${pkgname}-steel-${pkgver}.tar.gz::https://github.com/klemek/forge-steel/releases/download/steel-v${pkgver}/${pkgname}-steel-${pkgver}.tar.gz") sha256sums=('71e2db98e1346b101d175535c30875f28eb21432f4147ecc2b40c9da3973f5fb') srcdir=build +backup=("usr/share/${pkgname}") build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/README.md b/README.md index 932e828..3592533 100644 --- a/README.md +++ b/README.md @@ -65,8 +65,8 @@ options: -s, --screen output screen number (default: primary) -m, --monitor monitor screen number (default: none) -mo, --monitor-only no output screen - -f, --frag fragment shaders directory (default: TODO) - -c, --config fragment shaders config file (default: TODO) + -f, --frag fragment shaders directory (default: /usr/share/forge/shaders) + -c, --config fragment shaders config file (default: /usr/share/forge/default.cfg) -is, --internal-size internal texture height (default: 720) -v, --video-in path to video capture device (multiple allowed) -vs, --video-size video capture desired height (default: internal texture height) @@ -148,7 +148,7 @@ make -f Makefile.dev release-arch - [ ] Other - [ ] Update readme with usage documentation - [ ] Documentation in default config file - - [ ] Clone "shaders" and config in system path at setup + - [x] Clone "shaders" and config in system path at setup - [ ] Find and fix opengl errors 0500 ? - [ ] Investigate video device fps loss (bad unregister ?) - [ ] Bonus diff --git a/config/forge.cfg b/default.cfg similarity index 100% rename from config/forge.cfg rename to default.cfg diff --git a/src/args.c b/src/args.c index e2057a2..6a38a49 100644 --- a/src/args.c +++ b/src/args.c @@ -11,44 +11,44 @@ #include "types.h" static void print_help(int status_code) { - puts( - PACKAGE - " " VERSION "\n\n" - "usage: " PACKAGE " " - "[-h] " - "[-v] " - "[-hr] " - "[-s=SCREEN] " - "[-m=SCREEN] " - "[-mo] " - "[-f=DIR_PATH] " - "[-c=CFG_PATH] " - "[-is=SIZE] " - "[-v=FILE] " - "[-vs=SIZE] " - "[-t=TEMPO] " - "[--demo] " - "[-w] " - "\n\n" - "Fusion Of Real-time Generative Effects.\n\n" - "options:\n" - " -h, --help show this help message and exit\n" - " -v, --version print version\n" - " -hr, --hot-reload hot reload of shaders scripts\n" - " -s, --screen output screen number (default: primary)\n" - " -m, --monitor monitor screen number (default: none)\n" - " -mo, --monitor-only no output screen\n" - " -f, --frag fragment shaders directory (default: TODO)\n" - " -c, --config fragment shaders config file (default: " - "TODO)\n" - " -is, --internal-size internal texture height (default: 720)\n" - " -v, --video-in path to video capture device (multiple " - "allowed)\n" - " -vs, --video-size video capture desired height (default: " - "internal texture height)\n" - " -t, --tempo base tempo (default: 60)\n" - " --demo demonstration mode\n" - " -w, --windowed not fullscreen\n"); + puts(PACKAGE + " " VERSION "\n\n" + "usage: " PACKAGE " " + "[-h] " + "[-v] " + "[-hr] " + "[-s=SCREEN] " + "[-m=SCREEN] " + "[-mo] " + "[-f=DIR_PATH] " + "[-c=CFG_PATH] " + "[-is=SIZE] " + "[-v=FILE] " + "[-vs=SIZE] " + "[-t=TEMPO] " + "[--demo] " + "[-w] " + "\n\n" + "Fusion Of Real-time Generative Effects.\n\n" + "options:\n" + " -h, --help show this help message and exit\n" + " -v, --version print version\n" + " -hr, --hot-reload hot reload of shaders scripts\n" + " -s, --screen output screen number (default: primary)\n" + " -m, --monitor monitor screen number (default: none)\n" + " -mo, --monitor-only no output screen\n" + " -f, --frag fragment shaders directory " + "(default: " DATADIR "/shaders)\n" + " -c, --config fragment shaders config file " + "(default: " DATADIR "/default.cfg)\n" + " -is, --internal-size internal texture height (default: 720)\n" + " -v, --video-in path to video capture device (multiple " + "allowed)\n" + " -vs, --video-size video capture desired height (default: " + "internal texture height)\n" + " -t, --tempo base tempo (default: 60)\n" + " --demo demonstration mode\n" + " -w, --windowed not fullscreen\n"); exit(status_code); } @@ -91,8 +91,8 @@ Parameters args_parse(int argc, char **argv) { params.output_screen = 0; params.monitor = false; params.monitor_screen = 0; - params.frag_path = 0; - params.config_path = 0; + params.frag_path = DATADIR "/shaders"; + params.config_path = DATADIR "/default.cfg"; params.internal_size = 720; params.video_size = 0; params.base_tempo = 60.0f; @@ -150,22 +150,12 @@ Parameters args_parse(int argc, char **argv) { } } - if (params.frag_path == 0) { - log_error("required argument -f/--frag"); - exit(EXIT_FAILURE); - } - if (params.monitor && params.output && params.monitor_screen == params.output_screen && !params.windowed) { log_error("monitor screen cannot be the same as output screen"); exit(EXIT_FAILURE); } - if (params.frag_path == 0) { - log_error("required argument -fc/--frag-config"); - exit(EXIT_FAILURE); - } - if (params.video_size == 0) { params.video_size = params.internal_size; } diff --git a/src/config.h b/src/config.h index f58e3d2..7654bd6 100644 --- a/src/config.h +++ b/src/config.h @@ -5,11 +5,15 @@ #ifndef PACKAGE #define PACKAGE "forge" -#endif /* PACKAGE */ +#endif #ifndef VERSION #define VERSION "steel-dev" -#endif /* VERSION */ +#endif + +#ifndef DATADIR +#define DATADIR "." +#endif /* TYPES */