about summary refs log tree commit diff stats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile125
1 files changed, 60 insertions, 65 deletions
diff --git a/Makefile b/Makefile
index 9deee797..8f6f0089 100644
--- a/Makefile
+++ b/Makefile
@@ -1,93 +1,88 @@
-NIMC = nim c
-OBJDIR = .obj
-FLAGS = -o:cha -d:curlLibName:$(CURLLIBNAME)
-FILES = src/main.nim
-prefix = /usr/local
-manprefix = /usr/local/share/man
-manprefix1 = $(manprefix)/man1
-manprefix5 = $(manprefix)/man5
+NIMC ?= nim c
+OBJDIR ?= .obj
+OUTDIR ?= target
+PREFIX ?= /usr/local
+MANPREFIX ?= $(PREFIX)/share/man
+MANPREFIX1 ?= $(MANPREFIX)/man1
+MANPREFIX5 ?= $(MANPREFIX)/man5
+TARGET ?= release
+
+ifeq ($(TARGET),debug)
+FLAGS += --debugger:native
+else ifeq ($(TARGET),release)
+FLAGS += -d:strip, -d:lto
+else ifeq ($(TARGET),release0)
+FLAGS += -d:release --stacktrace:on
+else ifeq ($(TARGET),release1)
+FLAGS += -d:release --debugger:native
+endif
+
+$(OUTDIR)/$(TARGET)/bin/cha: lib/libquickjs.a src/*.nim src/**/*.nim res/* res/**/*
+	@mkdir -p "$(OUTDIR)/$(TARGET)/bin"
+	$(NIMC) -d:curlLibName:$(CURLLIBNAME) -o:"$(OUTDIR)/$(TARGET)/bin/cha" \
+		--nimcache:"$(OBJDIR)/$(TARGET)" -d:$(TARGET) src/main.nim
+	ln -sf "$(OUTDIR)/$(TARGET)/bin/cha" cha
+
+CFLAGS = -g -Wall -O2 -DCONFIG_VERSION=\"$(shell cat lib/quickjs/VERSION)\" \
+	-DCONFIG_BIGNUM=1
 QJSOBJ = $(OBJDIR)/quickjs
-CFLAGS = -g -Wall -O2 -DCONFIG_VERSION=\"$(shell cat lib/quickjs/VERSION)\" -DCONFIG_BIGNUM=1
-
-.PHONY: debug
-debug: lib/libquickjs.a $(OBJDIR)/debug/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/debug --debugger:native -d:debug $(FILES)
-
-.PHONY: debug0
-debug0: lib/libquickjs.a $(OBJDIR)/debug0/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/debug0 -d:debug --stacktrace:off --linetrace:off --opt:speed $(FILES)
-
-.PHONY: release
-release: lib/libquickjs.a $(OBJDIR)/release/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/release -d:release -d:strip -d:lto $(FILES)
-
-.PHONY: release0
-release0: lib/libquickjs.a $(OBJDIR)/release0/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/release0 -d:release --stacktrace:on $(FILES)
-
-.PHONY: release1
-release1: lib/libquickjs.a $(OBJDIR)/release1/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/release1 --debugger:native -d:release $(FILES)
-
-.PHONY: profile
-profile: lib/libquickjs.a $(OBJDIR)/profile/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/profile --profiler:on --stacktrace:on -d:profile $(FILES)
-
-.PHONY: profile0
-profile0: lib/libquickjs.a $(OBJDIR)/profile0/
-	$(NIMC) $(FLAGS) --nimcache:$(OBJDIR)/profile0 -d:release --passC:"-pg" --passL:"-pg" $(FILES)
-
-$(OBJDIR)/%/:
-	mkdir -p $@
-
-$(QJSOBJ)/%.o: lib/quickjs/%.c | $(QJSOBJ)/
+$(QJSOBJ)/%.o: lib/quickjs/%.c
+	@mkdir -p "$(QJSOBJ)"
 	$(CC) $(CFLAGS) -c -o $@ $<
 
 lib/libquickjs.a: $(QJSOBJ)/quickjs.o $(QJSOBJ)/libregexp.o \
 		$(QJSOBJ)/libunicode.o $(QJSOBJ)/cutils.o \
-		$(QJSOBJ)/libbf.o | $(QJSOBJ)/
+		$(QJSOBJ)/libbf.o
+	@mkdir -p "$(QJSOBJ)"
 	$(AR) rcs $@ $^
 
-.PHONY: clean
-clean:
-	rm -f cha
-	rm -rf $(OBJDIR)
-	rm -f lib/libquickjs.a
-
-$(OBJDIR)/man/cha-%.md: doc/%.md | $(OBJDIR)/man/
+$(OBJDIR)/man/cha-%.md: doc/%.md
+	@mkdir -p "$(OBJDIR)/man"
 	./md2manpreproc $< > $@
 
-$(OBJDIR)/man/cha-%.5: $(OBJDIR)/man/cha-%.md | $(OBJDIR)/man/
+$(OBJDIR)/man/cha-%.5: $(OBJDIR)/man/cha-%.md
 	pandoc --standalone --to man $< -o $@
 
-$(OBJDIR)/man/cha.1: doc/cha.1 | $(OBJDIR)/man/
+$(OBJDIR)/man/cha.1: doc/cha.1
+	@mkdir -p "$(OBJDIR)/man"
 	cp doc/cha.1 "$(OBJDIR)/man/cha.1"
 
+.PHONY: clean
+clean:
+	rm -rf "$(OUTDIR)"
+	rm -rf "$(OBJDIR)"
+	rm -f lib/libquickjs.a
+
 .PHONY: manpage
-manpage:  $(OBJDIR)/man/cha-config.5 $(OBJDIR)/man/cha-mailcap.5 \
+manpage: $(OBJDIR)/man/cha-config.5 $(OBJDIR)/man/cha-mailcap.5 \
 	$(OBJDIR)/man/cha-mime.types.5 $(OBJDIR)/man/cha-localcgi.5 \
 	$(OBJDIR)/man/cha-urimethodmap.5 \
 	$(OBJDIR)/man/cha.1
 
 .PHONY: install
 install:
-	mkdir -p "$(DESTDIR)$(prefix)/bin"
-	install -m755 cha "$(DESTDIR)$(prefix)/bin"
+	mkdir -p "$(DESTDIR)$(PREFIX)/bin"
+	install -m755 "$(OUTDIR)/$(TARGET)/bin/cha" "$(DESTDIR)$(PREFIX)/bin"
 	if test -d "$(OBJDIR)/man"; then \
-	mkdir -p "$(DESTDIR)$(manprefix5)"; \
-	mkdir -p "$(DESTDIR)$(manprefix1)"; \
-	install -m644 "$(OBJDIR)/man/cha-config.5" "$(DESTDIR)$(manprefix5)"; \
-	install -m644 "$(OBJDIR)/man/cha-mailcap.5" "$(DESTDIR)$(manprefix5)"; \
-	install -m644 "$(OBJDIR)/man/cha-mime.types.5" "$(DESTDIR)$(manprefix5)"; \
-	install -m644 "$(OBJDIR)/man/cha-localcgi.5" "$(DESTDIR)$(manprefix5)"; \
-	install -m644 "$(OBJDIR)/man/cha-urimethodmap.5" "$(DESTDIR)$(manprefix5)"; \
-	install -m644 "$(OBJDIR)/man/cha.1" "$(DESTDIR)$(manprefix1)"; \
+	mkdir -p "$(DESTDIR)$(MANPREFIX5)"; \
+	mkdir -p "$(DESTDIR)$(MANPREFIX1)"; \
+	install -m644 "$(OBJDIR)/man/cha-config.5" "$(DESTDIR)$(MANPREFIX5)"; \
+	install -m644 "$(OBJDIR)/man/cha-mailcap.5" "$(DESTDIR)$(MANPREFIX5)"; \
+	install -m644 "$(OBJDIR)/man/cha-mime.types.5" "$(DESTDIR)$(MANPREFIX5)"; \
+	install -m644 "$(OBJDIR)/man/cha-localcgi.5" "$(DESTDIR)$(MANPREFIX5)"; \
+	install -m644 "$(OBJDIR)/man/cha-urimethodmap.5" "$(DESTDIR)$(MANPREFIX5)"; \
+	install -m644 "$(OBJDIR)/man/cha.1" "$(DESTDIR)$(MANPREFIX1)"; \
 	fi
 
 .PHONY: uninstall
 uninstall:
-	rm -f "$(DESTDIR)$(prefix)/bin/cha"
-
+	rm -f "$(DESTDIR)$(PREFIX)/bin/cha"
+	rm -f "$(DESTDIR)$(MANPREFIX5)/cha-config.5"
+	rm -f "$(DESTDIR)$(MANPREFIX5)/cha-mailcap.5"
+	rm -f "$(DESTDIR)$(MANPREFIX5)/cha-mime.types.5"
+	rm -f "$(DESTDIR)$(MANPREFIX5)/cha-localcgi.5"
+	rm -f "$(DESTDIR)$(MANPREFIX5)/cha-urimethodmap.5"
+	rm -f "$(DESTDIR)$(MANPREFIX1)/cha.1"
 
 .PHONY: submodule
 submodule: