aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 9ad9f533828afed6e349a75b92aea52b80daac93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
.PHONY: all clean tests html

CC  := gcc

export LD_LIBRARY_PATH=$(PWD)/lib
export GUILE_AUTO_COMPILE=0

CFLAGS  = -std=gnu11 -Wall -Wextra -ggdb -fPIC $(shell guile-config compile)
LDFLAGS = $(shell guile-config link)

LIBS = libguile-calendar.so
SO_FILES = $(addprefix lib/, $(LIBS))

H_FILES = $(wildcard src/*.h)
C_FILES = $(wildcard src/*.c)

SCM_C_FILES = $(wildcard src/*.scm.c)
X_FILES = $(SCM_C_FILES:.scm.c=.x)

O_FILES = $(C_FILES:src/%.c=obj/%.o)

SCM_FILES = $(shell find module/ -type f -name \*.scm)
GO_FILES = $(SCM_FILES:%=obj/%.go)

GUILE_C_FLAGS = -Lmodule \
				-Wunused-variable -Wunused-toplevel \
				-Wshadowed-toplevel -Wunbound-variable \
				-Wmacro-use-before-definition -Warity-mismatch \
				-Wduplicate-case-datum -Wbad-case-datum

.SECONDARY: $(X_FILES) $(O_FILES)



all: $(SO_FILES) $(GO_FILES)

src/%.x : src/%.scm.c
	guile-snarf -o $@ $< $(CFLAGS)

obj/%.scm.o : src/%.scm.c src/%.x
	@mkdir -p obj
	$(CC) -c $(CFLAGS) -o $@ $<

obj/%.o : src/%.c # $(H_FILES) $(X_FILES)
	@mkdir -p obj
	$(CC) -c $(CFLAGS) -o $@ $<

lib/%.so: $(O_FILES)
	@mkdir -p lib
	$(CC) -shared -o $@ $^ $(LDFLAGS)

obj/module/vcomponent/primitive.scm.go: module/vcomponent/primitive.scm $(SO_FILES)
	@mkdir -p obj
	guild compile $(GUILE_C_FLAGS) -o $@ $<

obj/%.scm.go: %.scm 
	@mkdir -p obj
	guild compile $(GUILE_C_FLAGS) -o $@ $<

html: $(GO_FILES)
	mkdir -p html
	ln -sf ../static html
	module/main.scm html -f 2019-10-01 -t 2019-12-31 > html/index.html

tags: $(C_FILES) $(H_FILES)
	ctags -R
	./rfc-tags rfc5545.txt >> tags

clean:
	-rm -r html
	-rm -r obj
	-rm -r lib
	-rm src/*.x


tests:
	tests/run-tests.scm