# gKeyMapper - Build # Dependencies: g++, pkg-config, msgfmt, libgtk-4-dev # Installation: sudo apt install build-essential gettext libgtk-4-dev CXX ?= g++ CXXFLAGS ?= -std=c++17 -O2 -Wall -Wextra -Wpedantic PKG_CONFIG ?= pkg-config MSGFMT ?= msgfmt GTK_CFLAGS := $(shell $(PKG_CONFIG) --cflags gtk4) GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk4) PACKAGE := gkeymapper TARGET := gkeymapper SRC_DIR := src SOURCES := $(SRC_DIR)/main.cpp PREFIX ?= /usr/local LOCALEDIR := $(PREFIX)/share/locale ASSETS_DIR := $(PREFIX)/share/$(PACKAGE)/assets CXXFLAGS += -DPACKAGE=\"$(PACKAGE)\" -DLOCALEDIR=\"$(LOCALEDIR)\" -DASSETS_DIR=\"$(ASSETS_DIR)\" # Translations PO_FILES := $(wildcard po/*.po) LANGS := $(patsubst po/%.po,%,$(PO_FILES)) MO_FILES := $(patsubst %,locale/%/LC_MESSAGES/$(PACKAGE).mo,$(LANGS)) .PHONY: all clean run install translations all: $(TARGET) translations $(TARGET): $(SOURCES) $(CXX) $(CXXFLAGS) $(GTK_CFLAGS) -o $@ $(SOURCES) $(GTK_LIBS) translations: $(MO_FILES) locale/%/LC_MESSAGES/$(PACKAGE).mo: po/%.po @mkdir -p $(@D) $(MSGFMT) -o $@ $< run: $(TARGET) translations GKEYMAPPER_LOCALEDIR=$(CURDIR)/locale GKEYMAPPER_ASSETS_DIR=$(CURDIR)/assets ./$(TARGET) clean: rm -f $(TARGET) rm -rf locale install: $(TARGET) translations install -d $(DESTDIR)$(PREFIX)/bin install -m 755 $(TARGET) $(DESTDIR)$(PREFIX)/bin/$(TARGET) install -d $(DESTDIR)$(ASSETS_DIR) install -m 644 assets/* $(DESTDIR)$(ASSETS_DIR)/ install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps install -m 644 assets/icon.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/$(PACKAGE).png install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps install -m 644 assets/icon.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/$(PACKAGE).svg -command -v gtk-update-icon-cache >/dev/null && gtk-update-icon-cache -q -t $(DESTDIR)$(PREFIX)/share/icons/hicolor 2>/dev/null || true install -d $(DESTDIR)$(PREFIX)/share/applications install -m 644 data/gkeymapper.desktop $(DESTDIR)$(PREFIX)/share/applications/$(PACKAGE).desktop -command -v update-desktop-database >/dev/null && update-desktop-database $(DESTDIR)$(PREFIX)/share/applications 2>/dev/null || true for lang in $(LANGS); do \ install -d $(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES; \ install -m 644 locale/$$lang/LC_MESSAGES/$(PACKAGE).mo \ $(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done