# Binaries ECHO=echo KODEV=kodev MKDIR=mkdir -p COPY=cp RM=rm -f SPP=spp CD=cd AWK=awk GREP=grep SORT=sort # Config worker_chroot = /var/lib/smr/kore_worker kmgr_chroot = /var/lib/smr/kore_kmgr parent_chroot = /var/lib/smr/kore_parent conf_path = /etc/smr host_config = /etc/smr ifeq ($(DEV),"true") approot=/ chroot_dir=./kore_chroot$(approot) else approot=/var/smr/ chroot_dir=$(worker_chroot)$(approot) endif mirror=http://dl-cdn.alpinelinux.org/alpine/ arch=aarch64 version=2.12.9 certbot_email=--register-unsafely-without-email #certbot_email=-m you@cock.li user=robin port=8888 domain=test.monster:$(port) server_cert=cert/server.pem server_key=cert/key.pem SPPFLAGS=-D port=$(port) -D kore_chroot=$(chroot_dir) -D chuser=$(user) -D domain=$(domain) -D bin_path="$(bin_path)" -D server_cert="$(server_cert)" -D server_key="$(server_key)" -D worker_chroot="$(worker_chroot)" -D kmgr_chroot="$(kmgr_chroot)" -D approot="$(approot)" # squelch prints, flip to print verbose information #Q=@ Q= LUAROCKS_FLAGS=--tree $(chroot_dir)/usr/lib/luarocks --lua-version 5.1 chroot_packages=\ -p luarocks5.1 \ -p "build-base" \ -p "ca-certificates" \ -p ssl_client \ -p luajit \ -p "lua5.1-dev" \ -p "luajit-dev" \ -p "lua5.1-lpeg" \ -p sqlite \ -p "sqlite-dev" \ -p certbot \ -p zlib \ -p "zlib-dev" \ -p git lua_packages = \ lsqlite3 \ etlua \ lpeg \ zlib # Probably don't change stuff past here if you're just using smr lua_in_files=$(shell find src/lua/*.in -type f) lua_files=$(shell find src/lua/*.lua -type f) $(shell find src/lua/endpoints -type f) $(lua_in_files:%.in=%) src_files=$(shell find src -type f) $(shell find conf -type f) sql_files=$(shell find src/sql -type f) test_files=$(shell find spec -type f) built_tests=$(test_files:%=$(chroot_dir)%) built_files=$(lua_files:src/lua/%.lua=$(chroot_dir)%.lua) in_page_files=$(shell find src/pages/*.in -type f) in_part_files=$(shell find src/pages/parts/*.in -type f) page_files=$(in_page_files:%.in=%) part_files=$(in_part_files:%.in=%) $(shell find src/pages/parts/*.etlua -type f) built_pages=$(page_files:src/pages/%.etlua=$(chroot_dir)pages/%.etlua) built_sql=$(sql_files:src/sql/%.sql=$(chroot_dir)sql/%.sql) built=$(built_files) $(built_sql) $(built_pages) $(built_tests) asset_in_files=$(wildcard assets/*.in -type f) asset_files=$(asset_in_files:%.in=%) initscript=/lib/systemd/system/smr.service config=$(conf_path)/smr.conf bin_path=$(shell pwd) help: ## Print this help $(Q)$(GREP) -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | $(SORT) | $(AWK) 'BEGIN {FS = ":.*?## "}; {printf "%-10s %s\n", $$1, $$2}' all: $(chroot_dir) smr.so $(built_files) $(built_pages) $(built_sql) ## Build and run smr in a chroot $(Q)$(ECHO) "[running] $@" $(Q)$(KODEV) run conf/smr.conf : conf/smr.conf.in Makefile $(Q)$(ECHO) "[preprocess] $@" $(Q)$(SPP) -o $@ $(SPPFLAGS) $< apk-tools-static-$(version).apk: wget -q $(mirror)latest-stable/main/$(arch)/apk-tools-static-$(version).apk clean: ## clean up all the files generated by this makefile $(Q)$(ECHO) "[clean] $@" $(Q)$(KODEV) clean $(Q)$(RM) $(page_files) $(Q)$(RM) conf/smr.conf $(Q)$(RM) src/pages/parts/story_breif.etlua $(Q)$(RM) src/lua/config.lua $(Q)$(RM) $(asset_files) install: $(worker_chroot) $(kmgr_chroot) $(parent_chroot) $(initscript) $(config) smr.so $(built_files) $(built_pages) $(built_sql) ## Install smr into a new host system $(config) : conf/smr.conf $(Q)$(MKDIR) $(host_config) $(Q)$(COPY) $< $@ $(initscript) : packaging/systemd/smr.service $(Q)$(COPY) $< $@ cloc: ## calculate source lines of code in smr cloc --force-lang="HTML",etlua.in src assets $(chroot_dir): $(Q)$(MKDIR) $(chroot_dir) $(Q)$(MKDIR) $(chroot_dir)/pages $(Q)$(MKDIR) $(chroot_dir)/sql $(Q)$(MKDIR) $(chroot_dir)/data $(Q)$(MKDIR) $(chroot_dir)/data/archive $(Q)$(MKDIR) $(chroot_dir)/endpoints alpine-chroot-install: $(Q)wget https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.14.0/alpine-chroot-install \ && echo 'ccbf65f85cdc351851f8ad025bb3e65bae4d5b06 alpine-chroot-install' | sha1sum -c \ || exit 1 $(Q)chmod +x alpine-chroot-install $(worker_chroot) $(kmgr_chroot) $(parent_chroot): alpine-chroot-install $(Q)export APK_TOOLS_URI="https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v2.12.9/aarch64/apk.static"; \ export APK_TOOLS_SHA256="0164d47954c8a52e8ed10db1633174974a3b1e4182a1993a5a8343e394ee1bbc"; \ ./alpine-chroot-install -d $@ -a $(arch) -$(chroot_packages) code : $(built_files) $(built_files): $(chroot_dir)%.lua : src/lua/%.lua $(chroot_dir) $(Q)$(ECHO) "[copy] $@" $(Q)$(COPY) $< $@ $(built_pages): $(chroot_dir)pages/%.etlua : src/pages/%.etlua $(Q)$(ECHO) "[copy] $@" $(Q)$(COPY) $^ $@ src/lua/config.lua : src/lua/config.lua.in Makefile $(Q)$(ECHO) "[preprocess] $@" $(Q)$(SPP) $(SPPFLAGS) -o $@ $< $(page_files) : % : %.in $(part_files) $(Q)$(ECHO) "[preprocess] $@" $(Q)$(SPP) $(SPPFLAGS) -o $@ $< src/pages/parts/story_breif.etlua : src/pages/parts/story_breif.etlua.in $(Q)$(ECHO) "[preprocess] $@" $(Q)$(SPP) $(SPPFLAGS) -o $@ $< $(built_sql): $(chroot_dir)sql/%.sql : src/sql/%.sql $(Q)$(ECHO) "[copy] $@" $(Q)$(COPY) $^ $@ $(built_tests) : $(chroot_dir)% : % $(Q)$(ECHO) "[copy] $@" $(Q)$(COPY) $^ $@ $(asset_files) : % : %.in $(Q)$(ECHO) "[preprocess] $@" $(Q)$(SPP) $(SPPFLAGS) -o $@ $< smr.so : $(src_files) conf/smr.conf conf/build.conf $(asset_files) .flavor $(Q)$(ECHO) "[build] $@" $(Q)$(KODEV) build test : $(built) ## run the unit tests $(Q)$(CD) kore_chroot && busted -v --no-keep-going #--exclude-tags slow cov : $(built) ## code coverage (based on unit tests) $(Q)$(RM) $(kore_chroot)/luacov.stats.out $(Q)$(CD) $(kore_chroot) && busted -v -c --no-keep-going #--exclude-tags slow $(Q)$(CD) $(kore_chroot) && luacov endpoints/ $(Q)$(ECHO) "open kore_chroot/luacov.report.out to view coverage results."