(137 lines)
1 # Nomsu makefile2 # To build, run `make`3 # To install, run `make install`5 # ========= User-controlled variables ========6 LUA= lua7 LUA_BIN= $(shell which $(LUA))9 PREFIX=10 PACKAGEPATH=11 UNINSTALL_VERSION=12 # ========= You shouldn't need to mess with any of these variables below ================14 MOON_FILES= code_obj.moon error_handling.moon files.moon nomsu.moon nomsu_compiler.moon \15 syntax_tree.moon containers.moon bitops.moon parser.moon pretty_errors.moon \16 text.moon nomsu_decompiler.moon nomsu_environment.moon bootstrap.moon \17 builtin_metatables.moon colors.moon18 LUA_FILES= code_obj.lua error_handling.lua files.lua nomsu.lua nomsu_compiler.lua \19 syntax_tree.lua containers.lua bitops.lua parser.lua pretty_errors.lua \20 text.lua nomsu_decompiler.lua nomsu_environment.lua bootstrap.lua \21 builtin_metatables.lua colors.lua22 CORE_NOM_FILES=$(shell cat lib/core/init.nom | sed -n 's;export "\(.*\)";lib/\1.nom;p') lib/core/init.nom23 CORE_LUA_FILES= $(patsubst %.nom,%.lua, $(CORE_NOM_FILES))24 COMPAT_NOM_FILES=$(wildcard lib/compatibility/*.nom)25 COMPAT_LUA_FILES= $(patsubst %.nom,%.lua, $(COMPAT_NOM_FILES))26 TOOL_NOM_FILES= $(wildcard lib/tools/*.nom)27 TOOL_LUA_FILES= $(patsubst %.nom,%.lua, $(TOOL_NOM_FILES))28 LIB_NOM_FILES= $(wildcard lib/*.nom) $(filter-out $(CORE_NOM_FILES) $(TOOL_NOM_FILES) $(COMPAT_NOM_FILES), $(wildcard lib/*/*.nom))29 LIB_LUA_FILES= $(patsubst %.nom,%.lua, $(LIB_NOM_FILES))30 NOM_FILES=$(CORE_NOM_FILES) $(COMPAT_NOM_FILES) $(TOOL_NOM_FILES) $(LIB_NOM_FILES)31 PEG_FILES= $(wildcard nomsu.*.peg)32 GET_VERSION= $(LUA_BIN) nomsu.lua --version34 all: lua optimize optimize_extra36 .PHONY: test37 test: lua optimize38 @printf "\033[1;4mRunning unoptimized tests...\033[0m\n"39 @$(LUA_BIN) nomsu.lua -O0 -t test $(CORE_NOM_FILES) $(LIB_NOM_FILES)40 @printf "\n\033[1;4mRunning optimized tests...\033[0m\n"41 @$(LUA_BIN) nomsu.lua -O1 -t test $(CORE_LUA_FILES) $(LIB_LUA_FILES)43 %.lua: %.moon44 @moonc $<46 %.lua: %.nom47 @$(LUA_BIN) nomsu.lua -c $<49 .DELETE_ON_ERROR: version50 version: $(LUA_FILES) $(CORE_NOM_FILES) $(LIB_NOM_FILES)51 @$(LUA_BIN) nomsu.lua --version > version || exit53 lua: $(LUA_FILES)55 .PHONY: optimize56 optimize: lua $(CORE_LUA_FILES) $(LIB_LUA_FILES)58 .PHONY: optimize_extra59 optimize_extra: lua $(COMPAT_LUA_FILES) $(TOOL_LUA_FILES)61 .PHONY: clean62 clean:63 @printf "\033[1mDeleting...\033[0m"64 @rm -rvf version lib/*.lua lib/*/*.lua66 .PHONY: install67 install: lua version optimize optimize_extra68 @prefix="$(PREFIX)"; \69 if [[ ! $$prefix ]]; then \70 read -p $$'\033[1mWhere do you want to install Nomsu? (default: /usr/local) \033[0m' prefix; \71 fi; \72 if [[ ! $$prefix ]]; then prefix="/usr/local"; fi; \73 packagepath="$(PACKAGEPATH)"; \74 if [[ ! $$packagepath ]]; then \75 read -p $$'\033[1mWhere do you want Nomsu to put packages you install in the future? (default: /opt) \033[0m' packagepath; \76 fi; \77 if [[ ! $$packagepath ]]; then packagepath="/opt"; fi; \78 if [[ $$prefix != "`realpath $$prefix`" ]]; then \79 printf $$'\033[1;31mWarning: '$$prefix$$' is not an absolute path. This may cause problems.\033[0m\n'; \80 read -p $$'\033[1mWould you rather use '`realpath $$prefix`$$' instead? (recommended)[Y/n]\033[0m ' use_real; \81 if [[ ! $$use_real =~ ^[Nn] ]]; then \82 prefix="`realpath $$prefix`"; \83 fi; \84 fi; \85 version="`cat version`"; \86 mkdir -pv $$prefix/bin $$prefix/lib/nomsu/$$version $$prefix/share/nomsu/$$version $$prefix/share/man/man1 $$packagepath/nomsu \87 && printf "#!$(LUA_BIN)\nNOMSU_PREFIX, NOMSU_PACKAGEPATH = [[$$prefix]], [[$$packagepath/nomsu]]" \88 | cat - nomsu.lua > $$prefix/bin/nomsu$$version \89 && chmod +x $$prefix/bin/nomsu$$version \90 && cp -v nomsu $$prefix/bin \91 && cp -v doc/nomsu.1 $$prefix/share/man/man1 \92 && cp -rv $(LUA_FILES) $(PEG_FILES) lib $$prefix/share/nomsu/$$version;94 .PHONY: uninstall95 uninstall: version96 @prefix="$(PREFIX)"; \97 if [[ ! $$prefix ]]; then \98 read -p $$'\033[1mWhere do you want to uninstall Nomsu from? (default: /usr/local) \033[0m' prefix; \99 fi; \100 if [[ ! $$prefix ]]; then prefix="/usr/local"; fi; \101 printf "\033[1mNomsu will be uninstalled from:\033[0m\n"; \102 echo " $$prefix/bin"; \103 echo " $$prefix/lib"; \104 echo " $$prefix/share"; \105 read -p $$'\033[1mis this okay? [Y/n]\033[0m ' ans; \106 if [[ $$ans =~ ^[Nn] ]]; then exit; fi; \107 printf "\033[1mDeleting...\033[0m\n"; \108 version="$(UNINSTALL_VERSION)"; \109 if [[ ! $$version ]]; then version="`cat version`"; fi;\110 rm -rvf $$prefix/lib/nomsu/$$version $$prefix/share/nomsu/$$version $$prefix/bin/nomsu$$version; \111 if [[ "`find $$prefix/bin -type f -regex '.*/nomsu[0-9.]+\$$'`" == "" ]]; then \112 rm -vf $$prefix/bin/nomsu $$prefix/share/man/man1/nomsu.1; \113 else \114 if [ -f $$prefix/bin/nomsu ]; then \115 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; \116 if [[ $$ans =~ ^[Nn] ]]; then \117 printf "\033[1mDeleting...\033[0m\n"; \118 rm -vf $$prefix/bin/nomsu $$prefix/share/man/man1/nomsu.1; \119 fi; \120 fi; \121 fi; \122 if [ "`ls $$prefix/lib/nomsu 2>/dev/null`" == "" ]; then rm -rvf $$prefix/lib/nomsu; fi;\123 if [ "`ls $$prefix/share/nomsu 2>/dev/null`" == "" ]; then rm -rvf $$prefix/share/nomsu; fi;\124 printf $$'\033[1mDone.\033[0m\n';126 uninstallpackages:127 @packagepath="$(PACKAGEPATH)"; \128 if [[ ! $$packagepath ]]; then \129 read -p $$'\033[1mWhere have your Nomsu packages been installed? (default: /opt) \033[0m' packagepath; \130 fi; \131 if [[ ! $$packagepath ]]; then packagepath="/opt"; fi; \132 if [ -d $$packagepath/nomsu ]; then \133 read -p $$'\033[1mDo you want to delete all installed libraries from /opt? [y/n] \033[0m' confirm; \134 if [[ $$confirm == "y" ]]; then \135 rm -rvf $$packagepath/nomsu; \136 fi; \137 fi;