Nomsu makefile
To build, run make
To install, run make install
========= User-controlled variables ========
LUA= lua LUA_BIN= $(shell which $(LUA))
PREFIX= PACKAGEPATH= UNINSTALL_VERSION=
========= You shouldn’t need to mess with any of these variables below ================
MOONFILES= codeobj.moon errorhandling.moon files.moon nomsu.moon nomsucompiler.moon
syntaxtree.moon containers.moon bitops.moon parser.moon prettyerrors.moon
text.moon nomsudecompiler.moon nomsuenvironment.moon bootstrap.moon
builtinmetatables.moon colors.moon
LUAFILES= codeobj.lua errorhandling.lua files.lua nomsu.lua nomsucompiler.lua
syntaxtree.lua containers.lua bitops.lua parser.lua prettyerrors.lua
text.lua nomsudecompiler.lua nomsuenvironment.lua bootstrap.lua
builtinmetatables.lua colors.lua
CORENOMFILES=$(shell cat lib/core/init.nom | sed -n ‘s;export “(.)”;lib/\1.nom;p’) lib/core/init.nom
CORELUAFILES= $(patsubst %.nom,%.lua, $(CORENOMFILES))
COMPATNOMFILES=$(wildcard lib/compatibility/.nom)
COMPATLUAFILES= $(patsubst %.nom,%.lua, $(COMPATNOMFILES))
TOOLNOMFILES= $(wildcard lib/tools/.nom)
TOOLLUAFILES= $(patsubst %.nom,%.lua, $(TOOLNOMFILES))
LIBNOMFILES= $(wildcard lib/.nom) $(filter-out $(CORENOMFILES) $(TOOLNOMFILES) $(COMPATNOMFILES), $(wildcard lib//.nom))
LIBLUAFILES= $(patsubst %.nom,%.lua, $(LIBNOMFILES))
NOMFILES=$(CORENOMFILES) $(COMPATNOMFILES) $(TOOLNOMFILES) $(LIBNOMFILES)
PEGFILES= $(wildcard nomsu.*.peg)
GETVERSION= $(LUABIN) nomsu.lua –version
all: lua optimize optimize_extra
.PHONY: test test: lua optimize @printf “\033[1;4mRunning unoptimized tests…\033[0m\n” @$(LUABIN) nomsu.lua -O0 -t test $(CORENOMFILES) $(LIBNOMFILES) @printf “\n\033[1;4mRunning optimized tests…\033[0m\n” @$(LUABIN) nomsu.lua -O1 -t test $(CORELUAFILES) $(LIBLUAFILES)
%.lua: %.moon @moonc $<
%.lua: %.nom @$(LUA_BIN) nomsu.lua -c $<
.DELETEONERROR: version version: $(LUAFILES) $(CORENOMFILES) $(LIBNOMFILES) @$(LUABIN) nomsu.lua –version > version || exit
lua: $(LUA_FILES)
.PHONY: optimize optimize: lua $(CORELUAFILES) $(LIBLUAFILES)
.PHONY: optimizeextra optimizeextra: lua $(COMPATLUAFILES) $(TOOLLUAFILES)
.PHONY: clean clean: @printf “\033[1mDeleting…\033[0m” @rm -rvf version lib/.lua lib//*.lua
.PHONY: install
install: lua version optimize optimizeextra
@prefix=”$(PREFIX)”;
if [[ ! $$prefix ]]; then
read -p $$’\033[1mWhere do you want to install Nomsu? (default: /usr/local) \033[0m’ prefix;
fi;
if [[ ! $$prefix ]]; then prefix=”/usr/local”; fi;
packagepath=”$(PACKAGEPATH)”;
if [[ ! $$packagepath ]]; then
read -p $$’\033[1mWhere do you want Nomsu to put packages you install in the future? (default: /opt) \033[0m’ packagepath;
fi;
if [[ ! $$packagepath ]]; then packagepath=”/opt”; fi;
if [[ $$prefix != “realpath $$prefix” ]]; then
printf $$’\033[1;31mWarning: ‘$$prefix$$’ is not an absolute path. This may cause problems.\033[0m\n’;
read -p $$’\033[1mWould you rather use ‘realpath $$prefix$$’ instead? (recommended)[Y/n]\033[0m ‘ usereal;
if [[ ! $$usereal =~ ^[Nn] ]]; then
prefix="realpath $$prefix”;
fi;
fi;
version="cat version”;
mkdir -pv $$prefix/bin $$prefix/lib/nomsu/$$version $$prefix/share/nomsu/$$version $$prefix/share/man/man1 $$packagepath/nomsu
&& printf “#!$(LUABIN)\nNOMSUPREFIX, NOMSUPACKAGEPATH = [[$$prefix]], [[$$packagepath/nomsu]]”
| cat - nomsu.lua > $$prefix/bin/nomsu$$version
&& chmod +x $$prefix/bin/nomsu$$version
&& cp -v nomsu $$prefix/bin
&& cp -v doc/nomsu.1 $$prefix/share/man/man1
&& cp -rv $(LUAFILES) $(PEGFILES) lib $$prefix/share/nomsu/$$version;
.PHONY: uninstall
uninstall: version
@prefix=”$(PREFIX)”;
if [[ ! $$prefix ]]; then
read -p $$’\033[1mWhere do you want to uninstall Nomsu from? (default: /usr/local) \033[0m’ prefix;
fi;
if [[ ! $$prefix ]]; then prefix=”/usr/local”; fi;
printf “\033[1mNomsu will be uninstalled from:\033[0m\n”;
echo “ $$prefix/bin”;
echo “ $$prefix/lib”;
echo “ $$prefix/share”;
read -p $$’\033[1mis this okay? [Y/n]\033[0m ‘ ans;
if [[ $$ans =~ ^[Nn] ]]; then exit; fi;
printf “\033[1mDeleting…\033[0m\n”;
version=”$(UNINSTALL_VERSION)”;
if [[ ! $$version ]]; then version="cat version”; fi;
rm -rvf $$prefix/lib/nomsu/$$version $$prefix/share/nomsu/$$version $$prefix/bin/nomsu$$version;
if [[ “find $$prefix/bin -type f -regex '.*/nomsu[0-9.]+\$$'” == ““ ]]; then
rm -vf $$prefix/bin/nomsu $$prefix/share/man/man1/nomsu.1;
else
if [ -f $$prefix/bin/nomsu ]; then
read -p $$’\033[1mIt looks like there are other versions of Nomsu installed. Is it okay to leave the “nomsu” cross-version launcher in place? (recommended) [Y/n]\033[0m ‘ ans;
if [[ $$ans =~ ^[Nn] ]]; then
printf “\033[1mDeleting…\033[0m\n”;
rm -vf $$prefix/bin/nomsu $$prefix/share/man/man1/nomsu.1;
fi;
fi;
fi;
if [ “ls $$prefix/lib/nomsu 2>/dev/null” == ““ ]; then rm -rvf $$prefix/lib/nomsu; fi;
if [ “ls $$prefix/share/nomsu 2>/dev/null” == ““ ]; then rm -rvf $$prefix/share/nomsu; fi;
printf $$’\033[1mDone.\033[0m\n’;
uninstallpackages:
@packagepath=”$(PACKAGEPATH)”;
if [[ ! $$packagepath ]]; then
read -p $$’\033[1mWhere have your Nomsu packages been installed? (default: /opt) \033[0m’ packagepath;
fi;
if [[ ! $$packagepath ]]; then packagepath=”/opt”; fi;
if [ -d $$packagepath/nomsu ]; then
read -p $$’\033[1mDo you want to delete all installed libraries from /opt? [y/n] \033[0m’ confirm;
if [[ $$confirm == “y” ]]; then
rm -rvf $$packagepath/nomsu;
fi;
fi;
