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 78 79 80 81 82 83 84
|
package = pegsolitaire
version = 0.3
appid = com.github.jnumm.pegsolitaire
src = $(wildcard src/*.c)
obj = $(src:.c=.o)
pofiles = $(wildcard po/*.po)
mofiles = $(pofiles:.po=.mo)
INSTALL ?= install
INSTALL_PROGRAM ?= $(INSTALL)
INSTALL_DATA ?= $(INSTALL) -m644
PKG_CONFIG ?= pkg-config
prefix ?= /usr/local
bindir ?= $(prefix)/bin
mandir ?= $(prefix)/share/man
localedir ?= $(prefix)/share/locale
desktopdir ?= $(prefix)/share/applications
appdatadir ?= $(prefix)/share/metainfo
svgicondir ?= $(prefix)/share/icons/hicolor/scalable/apps
helpdir ?= $(prefix)/share/gnome/help/$(package)/C
deps = gtk+-3.0 gmodule-2.0 librsvg-2.0
# Flags that are more or less required to build
pkg_CPPFLAGS = -I. -DPACKAGE='"$(package)"' -DVERSION='"$(version)"' \
-DLOCALEDIR='"$(localedir)"' -DENABLE_NLS
pkg_CFLAGS = -Wall -Wextra -Wpedantic -Wmissing-prototypes -Wstrict-prototypes \
-Wunused-macros -Wshadow -Wdouble-promotion -Wno-overlength-strings \
-fvisibility=hidden $(shell $(PKG_CONFIG) --cflags $(deps))
pkg_LDLIBS = -Wl,--as-needed $(shell $(PKG_CONFIG) --libs $(deps)) -lm
# Non-essential default flags
CFLAGS ?= -O2 -g
.PHONY: all clean install update-po
all: pegsolitaire $(mofiles) $(appid).desktop $(appid).appdata.xml
%.o: %.c data.h
$(CC) $(pkg_CPPFLAGS) $(CPPFLAGS) $(pkg_CFLAGS) $(CFLAGS) -o $@ -c $<
pegsolitaire: $(obj)
$(CC) $(pkg_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(pkg_LDLIBS) $(LDLIBS)
# Embedding the required data files in the executable.
data.h: data/pegsolitaire.glade data/hole.svg data/peg.svg
./generate-data-header $^ > $@
$(appid).desktop: data/$(appid).desktop.in po/LINGUAS
msgfmt -c --desktop --template $< -o $@ -d po
$(appid).appdata.xml: data/$(appid).appdata.xml.in po/LINGUAS
msgfmt -c --xml --template $< -o $@ -d po
po/LINGUAS:
echo $(notdir $(basename $(pofiles))) > $@
%.mo: %.po
msgfmt -c -o $@ $<
# The first -k disables all default keywords, because we don't want the
# value for Icon in the desktop file to be translated.
pegsolitaire.pot:
xgettext -o $@ -f po/POTFILES.in \
-k -k_ -kN_ -kName -kGenericName -kComment -kKeywords \
--add-comments=TRANSLATORS: \
--package-name=$(package) --package-version=$(version) \
--msgid-bugs-address=https://github.com/jnumm/pegsolitaire/issues
update-po: $(addsuffix -update,$(pofiles))
%.po-update: pegsolitaire.pot
msgmerge --update $*.po $<
clean:
rm -f pegsolitaire $(obj) data.h $(appid).desktop $(appid).appdata.xml \
$(mofiles) pegsolitaire.pot po/LINGUAS
install: all $(addsuffix -install,$(mofiles))
mkdir -p $(DESTDIR)$(bindir) $(DESTDIR)$(desktopdir) \
$(DESTDIR)$(appdatadir) $(DESTDIR)$(svgicondir) \
$(DESTDIR)$(mandir)/man6 $(DESTDIR)$(helpdir)
$(INSTALL_PROGRAM) pegsolitaire $(DESTDIR)$(bindir)
$(INSTALL_DATA) $(appid).desktop $(DESTDIR)$(desktopdir)
$(INSTALL_DATA) $(appid).appdata.xml $(DESTDIR)$(appdatadir)
$(INSTALL_DATA) data/pegsolitaire.svg $(DESTDIR)$(svgicondir)
$(INSTALL_DATA) data/pegsolitaire.6 $(DESTDIR)$(mandir)/man6
$(INSTALL_DATA) help/* $(DESTDIR)$(helpdir)
%.mo-install: %.mo
mkdir -p $(DESTDIR)$(localedir)/$(notdir $*)/LC_MESSAGES
$(INSTALL_DATA) $< $(DESTDIR)$(localedir)/$(notdir $*)/LC_MESSAGES/$(package).mo
|