1# Include makefile config
2include config.mk
3
4# Token lib generation
5TLIST = common/tokenize.list
6THEAD = common/tokenize.h
7TSRC  = common/tokenize.c
8
9SRCS  = $(filter-out $(TSRC),$(wildcard *.c) $(wildcard common/*.c) $(wildcard common/clib/*.c) $(wildcard clib/*.c) $(wildcard clib/soup/*.c) $(wildcard widgets/*.c)) $(TSRC)
10HEADS = $(wildcard *.h) $(wildcard common/*.h) $(wildcard common/clib/*.h) $(wildcard widgets/*.h) $(wildcard clib/*.h) $(wildcard clib/soup/*.h) $(THEAD) buildopts.h
11OBJS  = $(foreach obj,$(SRCS:.c=.o),$(obj))
12
13EXT_SRCS = $(filter-out $(TSRC),$(wildcard extension/*.c) $(wildcard extension/clib/*.c) $(wildcard common/*.c)) $(wildcard common/clib/*.c) $(TSRC)
14EXT_OBJS = $(foreach obj,$(EXT_SRCS:.c=.o),$(obj))
15
16# List of sources used to generate Lua API documentation
17# Must be kept in sync with doc/docgen.ld
18DOC_SRCS = $(filter-out lib/markdown.lua lib/lousy/init.lua,$(shell for d in doc/luadoc lib common/clib; do find $$d -type f; done)) tests/lib.lua
19
20all: options newline luakit luakit.1.gz luakit.so apidoc
21
22options:
23	@echo luakit build options:
24	@echo "CC           = $(CC)"
25	@echo "LUA_PKG_NAME = $(LUA_PKG_NAME)"
26	@echo "LUA_BIN_NAME = $(LUA_BIN_NAME)"
27	@echo "CFLAGS       = $(CFLAGS)"
28	@echo "CPPFLAGS     = $(CPPFLAGS)"
29	@echo "LDFLAGS      = $(LDFLAGS)"
30	@echo "MANPREFIX    = $(MANPREFIX)"
31	@echo "DOCDIR       = $(DOCDIR)"
32	@echo "XDGPREFIX    = $(XDGPREFIX)"
33	@echo "PIXMAPDIR    = $(PIXMAPDIR)"
34	@echo "APPDIR       = $(APPDIR)"
35	@echo "LIBDIR       = $(LIBDIR)"
36	@echo
37	@echo build targets:
38	@echo "SRCS     = $(SRCS)"
39	@echo "HEADS    = $(HEADS)"
40	@echo "OBJS     = $(OBJS)"
41	@echo "EXT_SRCS = $(EXT_SRCS)"
42	@echo "EXT_OBJS = $(EXT_OBJS)"
43
44$(THEAD) $(TSRC): $(TLIST)
45	$(LUA_BIN_NAME) ./build-utils/gentokens.lua $(TLIST) $@
46
47buildopts.h: buildopts.h.in
48	sed -e 's#LUAKIT_INSTALL_PATH .*#LUAKIT_INSTALL_PATH "$(PREFIX)/share/luakit"#' \
49		-e 's#LUAKIT_CONFIG_PATH .*#LUAKIT_CONFIG_PATH "$(XDGPREFIX)"#' \
50		-e 's#LUAKIT_DOC_PATH .*#LUAKIT_DOC_PATH "$(DOCDIR)"#' \
51		-e 's#LUAKIT_MAN_PATH .*#LUAKIT_MAN_PATH "$(MANPREFIX)"#' \
52		-e 's#LUAKIT_PIXMAP_PATH .*#LUAKIT_PIXMAP_PATH "$(PIXMAPDIR)"#' \
53		-e 's#LUAKIT_APP_PATH .*#LUAKIT_APP_PATH "$(APPDIR)"#' \
54		-e 's#LUAKIT_LIB_PATH .*#LUAKIT_LIB_PATH "$(LIBDIR)"#' \
55		buildopts.h.in > buildopts.h
56
57$(filter-out $(EXT_OBJS),$(OBJS)) $(EXT_OBJS): $(HEADS) config.mk
58
59$(filter-out $(EXT_OBJS),$(OBJS)) : %.o : %.c
60	@echo $(CC) -c $< -o $@
61	@$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
62
63$(EXT_OBJS) : %.o : %.c
64	@echo $(CC) -c $< -o $@
65	@$(CC) -c $(CFLAGS) -DLUAKIT_WEB_EXTENSION -fPIC $(CPPFLAGS) $< -o $@
66
67widgets/webview.o: $(wildcard widgets/webview/*.c)
68
69luakit: $(OBJS)
70	@echo $(CC) -o $@ $(OBJS)
71	@$(CC) -o $@ $(OBJS) $(LDFLAGS)
72
73luakit.so: $(EXT_OBJS)
74	@echo $(CC) -o $@ $(EXT_OBJS)
75	@$(CC) -o $@ $(EXT_OBJS) -shared $(LDFLAGS)
76
77luakit.1: luakit.1.in
78	@sed "s|LUAKITVERSION|$(VERSION)|" $< > $@
79
80luakit.1.gz: luakit.1
81	@gzip -c $< > $@
82
83doc/apidocs/index.html: $(DOC_SRCS) $(wildcard build-utils/docgen/*)
84	rm -rf doc/apidocs
85	mkdir doc/apidocs
86	$(LUA_BIN_NAME) ./build-utils/docgen/makedoc.lua
87
88apidoc: doc/apidocs/index.html
89
90doc: buildopts.h $(THEAD) $(TSRC)
91	doxygen -s doc/luakit.doxygen
92
93clean:
94	rm -rf doc/apidocs doc/html luakit $(OBJS) $(EXT_OBJS) $(TSRC) $(THEAD) buildopts.h luakit.1 luakit.1.gz luakit.so
95
96install: all
97	install -d $(DESTDIR)$(PREFIX)/share/luakit/
98	install -d $(DESTDIR)$(DOCDIR) $(DESTDIR)$(DOCDIR)/classes $(DESTDIR)$(DOCDIR)/modules $(DESTDIR)$(DOCDIR)/pages
99	install -m644 README.md AUTHORS COPYING.GPLv3 $(DESTDIR)$(DOCDIR)
100	install -m644 doc/apidocs/classes/* $(DESTDIR)$(DOCDIR)/classes
101	install -m644 doc/apidocs/modules/* $(DESTDIR)$(DOCDIR)/modules
102	install -m644 doc/apidocs/pages/* $(DESTDIR)$(DOCDIR)/pages
103	install -m644 doc/apidocs/*.html $(DESTDIR)$(DOCDIR)
104	install -d $(DESTDIR)$(PREFIX)/share/luakit/lib $(DESTDIR)$(PREFIX)/share/luakit/lib/lousy $(DESTDIR)$(PREFIX)/share/luakit/lib/lousy/widget
105	install -m644 lib/*.* $(DESTDIR)$(PREFIX)/share/luakit/lib
106	install -m644 lib/lousy/*.* $(DESTDIR)$(PREFIX)/share/luakit/lib/lousy
107	install -m644 lib/lousy/widget/*.* $(DESTDIR)$(PREFIX)/share/luakit/lib/lousy/widget
108	install -d $(DESTDIR)$(LIBDIR)
109	install -m644 luakit.so $(DESTDIR)$(LIBDIR)/luakit.so
110	install -d $(DESTDIR)$(PREFIX)/bin
111	install luakit $(DESTDIR)$(PREFIX)/bin/luakit
112	install -d $(DESTDIR)$(XDGPREFIX)/luakit/
113	install -m644 config/*.lua $(DESTDIR)$(XDGPREFIX)/luakit/
114	install -d $(DESTDIR)$(PIXMAPDIR)
115	install -m644 extras/luakit.png $(DESTDIR)$(PIXMAPDIR)
116	install -m644 extras/luakit.svg $(DESTDIR)$(PIXMAPDIR)
117	install -d $(DESTDIR)$(APPDIR)
118	install -m644 extras/luakit.desktop $(DESTDIR)$(APPDIR)
119	install -d $(DESTDIR)$(MANPREFIX)/man1/
120	install -m644 luakit.1.gz $(DESTDIR)$(MANPREFIX)/man1/
121	mkdir -p resources
122	find resources -type d -exec install -d $(DESTDIR)$(PREFIX)/share/luakit/'{}' \;
123	find resources -type f -exec sh -c 'f="{}"; install -m644 "$$f" "$(DESTDIR)$(PREFIX)/share/luakit/$$(dirname $$f)"' \;
124
125uninstall:
126	rm -rf $(DESTDIR)$(PREFIX)/bin/luakit $(DESTDIR)$(PREFIX)/share/luakit $(DESTDIR)$(PREFIX)/lib/luakit
127	rm -rf $(DESTDIR)$(MANPREFIX)/man1/luakit.1.gz $(DESTDIR)$(XDGPREFIX)/luakit
128	rm -rf $(DESTDIR)$(APPDIR)/luakit.desktop $(DESTDIR)$(PIXMAPDIR)/luakit.png
129
130tests/util.so: tests/util.c Makefile
131	$(CC) -fPIC $(CFLAGS) $(CPPFLAGS) -shared $< $(LDFLAGS) -o $@
132
133run-tests: luakit luakit.so tests/util.so
134	@$(LUA_BIN_NAME) tests/run_test.lua
135
136newline: options;@echo
137.PHONY: all clean options install newline apidoc doc default
138