|
|
- #
- # Makefile
- #
-
- # Tray icon flag. Possible values:
- # none, tray (for gnome 2.x) , indicator (for gnome 3.x)
- ICON ?= indicator
-
- # Build type. Possible values:
- # debug, release, win
- BUILD_TYPE ?= release
-
- BINNAME = neo_layout_viewer
- BINDIR = bin
-
- # Path prefix for 'make install'
- PREFIX = /usr/local
- APPNAME = NeoLayoutViewer
-
- # Prefix for package name generation
- PACKAGE_NAME = neo-layout-viewer
-
- GIT_COMMIT_VERSION=$(shell git log --oneline --max-count=1 | head --bytes=7)
- ENV_FILE = .build_env
-
- # compiler options for a debug build
- #VALAC_DEBUG_OPTS = -g --save-temps
- VALAC_DEBUG_OPTS = -g
- # compiler options for a release build.
- # Note that some cc-warnings can not resolved. Use '-X -w' to hide them.
- VALAC_RELEASE_OPTS = -X -O2 --disable-assert
-
- # falg required for pbuilder environment and deb-file naming scheme.
- UBUNTU ?= 0
-
- DISTDIR = dist
- TMPDIR = tmp
- ARCHS = amd64 # i386 armhf arm64
- BASETGZ_DIR = /var/cache/pbuilder
-
- ifeq ($(UBUNTU),1)
- # Ubuntu, valac requires universe-component
- MIRROR=http://de.archive.ubuntu.com/ubuntu/
- DIST = bionic
- COMPONENTS = main universe #restricted multiverse
- UBUNTU_SUFFIX = ubuntu1
- else
- # Debian
- DIST = sid
- MIRROR = http://ftp.de.debian.org/debian
- COMPONENTS = main
- UBUNTU_SUFFIX =
- endif
-
- # Debian Packaging version number
- # Pattern: [epoch:]upstream_version[-debian_revision].
- # The absence of a debian_revision is equivalent to a debian_revision of 0.
- RELEASE_VERSION=$(shell sed -n "/^$(PACKAGE_NAME)\s*(\([^()]*\)[)].*/{ s//\1/p; q0 }; q1" debian/changelog || echo -n "undefined" )
- #Token for .orig.tar.gz-files: dpkg-source request upstream tarball without revision substring
- SRC_VERSION=$(shell echo -n "$(RELEASE_VERSION)" | cut -d\- -f 1 -z)
-
-
- #########################################################
-
- # Test build under MingW for Windows
- WIN ?=
-
- ifeq ($(WIN),)
- NL = \n
- BINEXT =
- else
- BUILD_TYPE = win
- BINEXT = .exe
- ICON = tray
- GTK_PREBUILD_ZIP=http://win32builder.gnome.org/gtk+-bundle_3.10.4-20131202_win64.zip
- GEE_XZ=https://ftp.gnome.org/pub/gnome/sources/libgee/0.8/libgee-0.8.8.tar.xz
- PKG_CONFIG_PATH=$(shell pwd)/win/lib/pkgconfig
- #PKG_CONFIG_PATH=${HOME}/software/gtk/gtk+-3.10_win64/lib/pkgconfig
- GCC_WIN = x86_64-w64-mingw32-gcc
- GCC_WIN_FLAGS = -mwindows $(shell PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" pkg-config --cflags --libs gtk+-3.0 gee-$(GEEVERSION))
- VALAC_RELEASE_OPTS += -D _OLD_GTK_STOCK # Old gtk-versions (<3.16) do not define `gtk_label_set_xalign`
- VALAC_DEBUG_OPTS += -D _OLD_GTK_STOCK
- endif
-
-
- #########################################################
-
- EXEC_PREFIX = $(PREFIX)
- DATADIR = $(PREFIX)/share
-
- VALAC = valac -D $(ICON) \
- --Xcc="-lm" --Xcc="-DXK_TECHNICAL" --Xcc="-DXK_PUBLISHING" --Xcc="-DXK_APL"
- VAPIDIR = --vapidir=vapi/
-
- # Source files
- SRC = src/version.vala \
- src/main.vala \
- src/app.vala \
- src/neo-window.vala \
- src/scaling-image.vala \
- src/config-manager.vala
-
- ifeq ($(WIN),)
- VALAC_DEBUG_OPTS += -D _NO_WIN
- VALAC_RELEASE_OPTS += -D _NO_WIN
- SRC += src/key-overlay.vala \
- src/keybinding-manager.vala \
- csrc/keysend.c \
- csrc/checkModifier.c
- endif
-
- # Asset files
- ASSET_FILES=$(wildcard assets/**/*.png)
-
- # Test for valac version, workaround for Arch Linux bug
- ifeq ($(wildcard /usr/include/gee-0.8),)
- # Similar, but for Windows/MingW
- ifeq ($(wildcard /mingw64/include/gee-0.8),)
- GEEVERSION=1.0
- else
- GEEVERSION=0.8
- endif
- else
- GEEVERSION=0.8
- endif
-
- # Packages
- PKGS = --pkg x11 --pkg keysym --pkg gtk+-3.0 --pkg gee-$(GEEVERSION) --pkg gdk-x11-3.0 --pkg posix --pkg gdk-3.0
-
- # Add some args if tray icon is demanded.
- ifeq ($(ICON),tray)
- SRC += src/tray.vala
- endif
- ifeq ($(ICON),indicator)
- SRC += src/indicator.vala
- PKGS += --pkg appindicator3-0.1
- endif
-
-
- .PHONY: debug release install clean last_build_env
- # .FORCE: last_build_env
-
-
- # The target respects BUILD_TYPE and cleaning if it changes
- all: info last_build_env "$(BINDIR)/$(BINNAME)$(BINEXT)"
- @echo "Done"
-
- "$(BINDIR)/$(BINNAME)$(BINEXT)": $(SRC) Makefile "$(BINDIR)"
- make build_$(BUILD_TYPE)
-
- # Remove binary if current env differs from last build env
- # This toggles a rebuild.
- last_build_env:
- @(test "$$(env|sort)" = "$$(test -f $(ENV_FILE) && cat $(ENV_FILE) )" \
- && echo "Same environment as last build.") \
- || (echo "Env has changed. Force build" \
- && make clean \
- && env | sort > "$(ENV_FILE)" \
- )
-
- # Clean release build, similar to 'BUILD_TYPE=release make all'
- release: clean build_release
-
- info:
- @/bin/echo -e " $(NL)"\
- "Buildtype: $(BUILD_TYPE)$(NL)" \
- "Trayicon: $(ICON)$(NL)" \
- "$(NL)" \
- "Notes:$(NL)" \
- " Use 'ICON=... make' to switch type of panel menu.$(NL)" \
- " indicator: For gnome 3.x (default)$(NL)" \
- " tray: For gnome 2.x$(NL)" \
- " none: Disables icon$(NL)$(NL)" \
- " Use 'BUILD_TYPE=[release|debug] make' to switch build type$(NL)$(NL)" \
-
- gen_version:
- @/bin/echo -e "namespace NeoLayoutViewer{$(NL)" \
- "public const string RELEASE_VERSION = \"$(RELEASE_VERSION)\";$(NL)" \
- "public const string GIT_COMMIT_VERSION = \"$(GIT_COMMIT_VERSION)\";$(NL)" \
- "public const string SHARED_ASSETS_PATH = \"$(DATADIR)/$(APPNAME)/assets\";$(NL)" \
- "}" \
- > src/version.vala
-
- src/version.vala: Makefile gen_version
-
- "$(BINDIR)":
- @test -d "$(BINDIR)" || \
- (mkdir -p "$(BINDIR)" && ln -s ../assets "$(BINDIR)/assets")
-
- "$(DISTDIR)":
- @test -d "$(DISTDIR)" || \
- (mkdir -p "$(DISTDIR)")
-
- "$(TMPDIR)":
- @test -d "$(TMPDIR)" || \
- (mkdir -p "$(TMPDIR)")
-
- build_debug: $(SRC) "$(BINDIR)"
- $(VALAC) $(VAPIDIR) $(VALAC_DEBUG_OPTS) $(SRC) -o "$(BINDIR)/$(BINNAME)$(BINEXT)" $(PKGS) $(CC_INCLUDES)
-
- build_release: $(SRC) "$(BINDIR)"
- $(VALAC) $(VAPIDIR) $(VALAC_RELEASE_OPTS) $(SRC) -o "$(BINDIR)/$(BINNAME)$(BINEXT)" $(PKGS) $(CC_INCLUDES)
-
- # Two staged compiling
- build_release2: $(SRC) "$(BINDIR)"
- $(VALAC) --ccode $(VAPIDIR) $(VALAC_RELEASE_OPTS) $(SRC) $(PKGS) $(CC_INCLUDES)
- gcc $(SRC:.vala=.c) $(CC_INCLUDES) -o "$(BINDIR)/$(BINNAME)$(BINEXT)" \
- `pkg-config --cflags --libs gtk+-3.0 gee-$(GEEVERSION)`
-
- man: man/neo_layout_viewer.1.gz
-
- man/%.gz: man/%
- gzip -c "$<" > "$@"
-
- install: man
- test -f "$(BINDIR)/$(BINNAME)$(BINEXT)" || make all
- install -d $(EXEC_PREFIX)/bin
- install -D -m 0755 "$(BINDIR)/$(BINNAME)$(BINEXT)" "$(EXEC_PREFIX)/bin"
- $(foreach ASSET_FILE,$(ASSET_FILES), \
- install -D -m 0644 $(ASSET_FILE) "$(DATADIR)/$(APPNAME)/$(ASSET_FILE)" ; )
- install -d $(PREFIX)/share/man/man1/
- install -t $(PREFIX)/share/man/man1/ man/neo_layout_viewer.1.gz
- install -D -t $(PREFIX)/share/applications/ Keyboard_Layout_Viewer.desktop
-
- uninstall:
- @rm -fv "$(EXEC_PREFIX)/bin/$(BINNAME)$(BINEXT)"
- @test -d "$(DATADIR)/$(APPNAME)/assets" && rm -v -r "$(DATADIR)/$(APPNAME)"
- # Prefixed with test because of dangerous -r-flag...
- @rm -fv $(PREFIX)/share/man/man1/neo_layout_viewer.1.gz
- @rm -v -r $(PREFIX)/share/applications/Keyboard_Layout_Viewer.desktop
-
- # clean all build files, but not dist results.
- clean:
- @rm -v -d -f *~ *.c src/*.c src/*~ "$(BINDIR)"/* "$(BINDIR)" "$(ENV_FILE)"
- @rm -v -d -f -r "$(TMPDIR)"/*
- @rm -v -d -f "$(TMPDIR)"
- @rm -v -f man/*.gz
-
- run:
- "$(BINDIR)/$(BINNAME)$(BINEXT)"
-
- ######################################################
- ## Targets for .*deb build
-
- src-package: "$(DISTDIR)"
- tar czf "$(DISTDIR)"/neo-layout-viewer_$(RELEASE_VERSION)-src.tar.gz \
- --exclude=.git --exclude=.gitignore --exclude=win \
- --exclude=bin --exclude=man/*.gz --exclude=.pc\
- --exclude=dist --exclude=tmp \
- --transform 's,^\./,neo-layout-viewer-$(RELEASE_VERSION)/,' \
- .
-
- dist-package: "$(DISTDIR)" release man
- tar czf "$(DISTDIR)"/neo-layout-viewer_$(RELEASE_VERSION).tgz \
- --transform 's,^$(BINDIR)/,,' \
- --transform 's,^,neo-layout-viewer-$(RELEASE_VERSION)/,' \
- "$(BINDIR)/$(BINNAME)" assets AUTHORS COPYING README.md \
- man/*.gz
-
- deb-packages: "$(TMPDIR)" "$(DISTDIR)" src-package
- cp "$(DISTDIR)"/neo-layout-viewer_$(RELEASE_VERSION)-src.tar.gz "$(TMPDIR)"/neo-layout-viewer_$(SRC_VERSION).orig.tar.gz && \
- cd "$(TMPDIR)" && \
- tar xzf neo-layout-viewer_$(SRC_VERSION).orig.tar.gz && \
- cd neo-layout-viewer-$(RELEASE_VERSION) && \
- for arch in $(ARCHS); do \
- sudo mkdir -p $(BASETGZ_DIR)/$(DIST)-aptcache/ && \
- sudo pbuilder update --override-config --distribution "$(DIST)" --mirror "$(MIRROR)" --components "$(COMPONENTS)" --architecture $$arch --basetgz $(BASETGZ_DIR)/$(DIST)-$$arch-base.tgz --aptcache $(BASETGZ_DIR)/$(DIST)-aptcache/ || \
- sudo pbuilder create --override-config --distribution $(DIST) --mirror $(MIRROR) --components "$(COMPONENTS)" --architecture $$arch --basetgz $(BASETGZ_DIR)/$(DIST)-$$arch-base.tgz --aptcache $(BASETGZ_DIR)/$(DIST)-aptcache/ && \
- DEB_BUILD_OPTIONS="noautodbgsym" pdebuild --buildresult .. --debbuildopts "-i -us -uc -b" -- --override-config --distribution $(DIST) --mirror $(MIRROR) --components "$(COMPONENTS)" --architecture $$arch --basetgz $(BASETGZ_DIR)/$(DIST)-$$arch-base.tgz --aptcache $(BASETGZ_DIR)/$(DIST)-aptcache/ && \
- mv ../neo-layout-viewer_$(RELEASE_VERSION)_$$arch*deb ../../dist/neo-layout-viewer_$(RELEASE_VERSION)$(UBUNTU_SUFFIX)_$$arch.deb ; \
- done
-
- deb-package: "$(TMPDIR)" "$(DISTDIR)" src-package
- cp "$(DISTDIR)"/neo-layout-viewer_$(RELEASE_VERSION)-src.tar.gz "$(TMPDIR)"/neo-layout-viewer_$(SRC_VERSION).orig.tar.gz && \
- cd "$(TMPDIR)" && \
- tar xzf neo-layout-viewer_$(SRC_VERSION).orig.tar.gz && \
- cd neo-layout-viewer-$(RELEASE_VERSION) && \
- DEB_BUILD_OPTIONS="noautodbgsym" pdebuild --buildresult .. --debbuildopts "-i -us -uc -b" && \
- mv ../neo-layout-viewer_$(RELEASE_VERSION)_$(shell dpkg --print-architecture).deb ../../dist/neo-layout-viewer_$(RELEASE_VERSION)$(UBUNTU_SUFFIX)_$(shell dpkg --print-architecture).deb
-
- dist: src-package dist-package deb-packages
-
- ######################################################
- ## Windows stuff
-
- # Building under MingW
- build_win: $(SRC)
- $(VALAC) $(VAPIDIR) $(VALAC_RELEASE_OPTS) $(SRC) -o "$(BINDIR)/$(BINNAME)$(BINEXT)" $(PKGS) $(CC_INCLUDES)
-
- # Cross compiling under Debian/Ubuntu
- build_cross_win: bin/libgtk-3-0.dll
- test "$(WIN)" = "1" || (echo "Call this target with WIN=1" && exit 1)
- echo "Flags: $(GCC_WIN_FLAGS)"
- PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" \
- $(VALAC) --ccode $(VAPIDIR) $(VALAC_RELEASE_OPTS) $(SRC) $(PKGS) $(CC_INCLUDES)
- PKG_CONFIG_PATH="$(PKG_CONFIG_PATH), \
- $(GCC_WIN) $(SRC:.vala=.c) -o "$(BINDIR)/$(BINNAME)$(BINEXT)" $(GCC_WIN_FLAGS)
-
- bin/libgtk-3-0.dll:
- WIN=1 make win_gtk
-
- win_download_gtk:
- test "$(WIN)" = "1" || (echo "Call this target with WIN=1" && exit 1)
- test -d win || mkdir win
- test -f win/$$(basename "$(GTK_PREBUILD_ZIP)") || \
- ( cd win && wget -c "$(GTK_PREBUILD_ZIP), && \
- unzip $$(basename "$(GTK_PREBUILD_ZIP)") )
- cd win && find -name '*.pc' | while read pc; do sed -e "s@^prefix=.*@prefix=$$PWD@" -i "$$pc"; done
-
- win_build_gee:
- test "$(WIN)" = "1" || (echo "Call this target with WIN=1" && exit 1)
- cd win && wget -c "$(GEE_XZ)" && \
- tar xJvf ./libgee-0.8.8.tar.xz > /dev/null
- cd win/libgee-0.8.8 && \
- sed -i -e 's/if test ".cross_compiling" != yes; then/if test 0 != 0; then/' ./configure
- cd win/libgee-0.8.8 && \
- PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) CC=$(GCC_WIN) \
- CC_FLAGS="$(GCC_WIN_FLAGS)" \
- ./configure --build=x86_64 --prefix=$(PKG_CONFIG_PATH)/../.. && \
- make && make install
-
- win_gtk: win_download_gtk win_build_gee
- test "$(WIN)" = "1" || (echo "Call this target with WIN=1" && exit 1)
- cp win/bin/*.dll bin/.
-
- print_version:
- @echo "Source archive: $(PACKAGE_NAME)_$(SRC_VERSION).orig.tar.gz"
- @echo "Deb file: $(PACKAGE_NAME)_$(RELEASE_VERSION)_$(shell dpkg --print-architecture).deb"
-
- # Test to avoid sudo. Unfortunately, dpkg-buildpackage still ask...
- deb-packages_as_user: "$(TMPDIR)" "$(DISTDIR)" src-package
- cp "$(DISTDIR)"/neo-layout-viewer_$(RELEASE_VERSION)-src.tar.gz "$(TMPDIR)"/neo-layout-viewer_$(SRC_VERSION).orig.tar.gz && \
- cd "$(TMPDIR)" && \
- tar xzf neo-layout-viewer_$(SRC_VERSION).orig.tar.gz && \
- cd neo-layout-viewer-$(RELEASE_VERSION) && \
- for arch in $(ARCHS); do \
- mkdir -p $(BASETGZ_DIR)/$(DIST)-aptcache/ && \
- test "$(SKIP_PBUILDER_UPDATE)" = "1" || \
- pbuilder update --override-config --distribution "$(DIST)" --mirror "$(MIRROR)" --components "$(COMPONENTS)" --architecture $$arch --basetgz $(BASETGZ_DIR)/$(DIST)-$$arch-base.tgz --aptcache $(BASETGZ_DIR)/$(DIST)-aptcache/ || \
- pbuilder create --override-config --distribution $(DIST) --mirror $(MIRROR) --components "$(COMPONENTS)" --architecture $$arch --basetgz $(BASETGZ_DIR)/$(DIST)-$$arch-base.tgz --aptcache $(BASETGZ_DIR)/$(DIST)-aptcache/ && \
- DEB_BUILD_OPTIONS="noautodbgsym" pdebuild --buildresult .. --debbuildopts "-i -us -uc -b" -- --override-config --distribution $(DIST) --mirror $(MIRROR) --components "$(COMPONENTS)" --architecture $$arch --basetgz $(BASETGZ_DIR)/$(DIST)-$$arch-base.tgz --aptcache $(BASETGZ_DIR)/$(DIST)-aptcache/ && \
- mv ../neo-layout-viewer_$(RELEASE_VERSION)_$$arch*deb ../../dist/neo-layout-viewer_$(RELEASE_VERSION)$(UBUNTU_SUFFIX)_$$arch.deb ; \
- done
-
-
|