code / nomsu

Lines6.6K Lua5.1K PEG1.3K make117
2 others 83
Markdown60 Bourne Again Shell23
(137 lines)
1 # Nomsu makefile
2 # To build, run `make`
3 # To install, run `make install`
5 # ========= User-controlled variables ========
6 LUA= lua
7 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.moon
18 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.lua
22 CORE_NOM_FILES=$(shell cat lib/core/init.nom | sed -n 's;export "\(.*\)";lib/\1.nom;p') lib/core/init.nom
23 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 --version
34 all: lua optimize optimize_extra
36 .PHONY: test
37 test: lua optimize
38 @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: %.moon
44 @moonc $<
46 %.lua: %.nom
47 @$(LUA_BIN) nomsu.lua -c $<
49 .DELETE_ON_ERROR: version
50 version: $(LUA_FILES) $(CORE_NOM_FILES) $(LIB_NOM_FILES)
51 @$(LUA_BIN) nomsu.lua --version > version || exit
53 lua: $(LUA_FILES)
55 .PHONY: optimize
56 optimize: lua $(CORE_LUA_FILES) $(LIB_LUA_FILES)
58 .PHONY: optimize_extra
59 optimize_extra: lua $(COMPAT_LUA_FILES) $(TOOL_LUA_FILES)
61 .PHONY: clean
62 clean:
63 @printf "\033[1mDeleting...\033[0m"
64 @rm -rvf version lib/*.lua lib/*/*.lua
66 .PHONY: install
67 install: lua version optimize optimize_extra
68 @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: uninstall
95 uninstall: version
96 @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;