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