1-include local.mk
2include mk/compat.mk
3include mk/util.mk
4include mk/discount.mk
5-include mk/flatpak.mk
6-include mk/dist.mk
7
8# Installation directories (may be overridden on the command line)
9prefix = /usr/local
10bindir = $(prefix)/bin
11datadir = $(prefix)/share
12appdir = $(datadir)/applications
13icondir = $(datadir)/icons/hicolor
14appicondir = $(icondir)/scalable/apps
15
16# The following 3 commands are run after the install and uninstall
17# targets, unless the DESTDIR variable is set. The presence of DESTDIR
18# usually indicates a distro packaging environment, in which case the
19# equivalent, distro-provided macros/hooks should be used instead.
20define POSTINSTALL
21 update-desktop-database -q '$(appdir)' || :
22 touch -c '$(icondir)' || :
23 gtk-update-icon-cache -qtf '$(icondir)' || :
24endef
25
26ifeq "" "$(filter-out install,$(or $(MAKECMDGOALS),all))"
27 # Don't run optcheck for "make install"
28 OPTCHECK = :
29else
30 OPTCHECK = SILENT_BUILD='$(MAKE_S)' mk/optcheck.sh
31endif
32
33APPID = io.gitlab.craigbarnes.Showdown
34APPICON = showdown
35VERSION = 0.6
36
37VALAC ?= valac
38RESGEN ?= glib-compile-resources
39INSTALL = install
40INSTALL_DIR = $(INSTALL) -d -m755
41RM = rm -f
42
43VALAPKGS = --pkg gtk+-3.0 --pkg webkit2gtk-4.0 --vapidir src --pkg libmarkdown
44CWARNFLAGS = -Wno-discarded-qualifiers
45
46VALAFLAGS = \
47    --target-glib=2.48 \
48    --gresources=res/resources.xml \
49    $(foreach f, $(CWARNFLAGS) $(DISCOUNT_FLAGS),-X '$(f)') \
50    $(VALAFLAGS_EXTRA)
51
52VALAFILES = \
53    src/showdown.vala \
54    src/window.vala \
55    src/view.vala \
56    build/version.vala
57
58RESOURCES = $(addprefix res/, \
59    window.ui menus.ui help-overlay.ui \
60    template.html error.html \
61    main.css toc.css \
62    showdown.svg \
63)
64
65all: showdown
66
67run: all
68	./showdown README.md
69
70showdown: $(VALAFILES) src/libmarkdown.vapi build/resources.c build/flags.txt
71	$(E) VALAC $@
72	$(Q) $(VALAC) $(VALAFLAGS) $(VALAPKGS) -o $@ $(filter %.vala %.c, $^)
73
74build/resources.c: res/resources.xml $(RESOURCES) | build/
75	$(E) RESGEN $@
76	$(Q) $(RESGEN) --sourcedir res/ --generate-source --target $@ $<
77
78build/version.vala: src/version.vala.in build/version.txt | build/
79	$(E) GEN $@
80	$(Q) printf "$$(cat $<)" "$$(cat build/version.txt)" > $@
81
82build/version.txt: FORCE | build/
83	@$(OPTCHECK) '$(VERSION)' $@
84
85build/flags.txt: FORCE | build/
86	@$(OPTCHECK) '$(VALAC) $(VALAFLAGS) $(VALAPKGS)' $@
87
88build/:
89	@mkdir -p $@
90
91install: all
92	$(INSTALL_DIR) '$(DESTDIR)$(bindir)' '$(DESTDIR)$(appicondir)'
93	$(INSTALL) -m755 showdown '$(DESTDIR)$(bindir)/showdown'
94	$(INSTALL) -m644 res/showdown.svg '$(DESTDIR)$(appicondir)/$(APPICON).svg'
95	desktop-file-install --dir='$(DESTDIR)$(appdir)' \
96	  --set-key=Exec --set-value='$(bindir)/showdown %U' \
97	  --set-icon='$(APPICON)' share/$(APPID).desktop
98	$(if $(DESTDIR),, $(POSTINSTALL))
99
100install-home:
101	@$(MAKE) all install prefix=$(HOME)/.local
102
103uninstall:
104	$(RM) '$(DESTDIR)$(bindir)/showdown'
105	$(RM) '$(DESTDIR)$(appicondir)/showdown.svg'
106	$(RM) '$(DESTDIR)$(appdir)/$(APPID).desktop'
107	$(if $(DESTDIR),, $(POSTINSTALL))
108
109clean:
110	$(RM) -r build/
111	$(RM) showdown src/*.vala.c $(CLEANFILES)
112
113# The tools used in this target require a display connection for some
114# reason, so it shouldn't be used for headless/automated testing.
115check:
116	desktop-file-validate share/$(APPID).desktop
117	$(foreach UI_FILE, $(filter %.ui, $(RESOURCES)), \
118	  NO_AT_BRIDGE=1 gtk-builder-tool validate $(UI_FILE); \
119	)
120
121
122.DEFAULT_GOAL = all
123.PHONY: all run install install-home uninstall clean check FORCE
124.DELETE_ON_ERROR:
125