nsxiv/Makefile
Arthur Williams 12efa0e3b4 Add ability to bind arbitrary functions.
Before all the predated commands where kept in an array and their
indexes were used in bindings. This meant that users couldn't add their
own functions from the config file. Now key/mouse bindings have been
changed to to store the function ptr (wrapped in a cmd_t struct to also
store the mode) directly instead.

General cleanup done in this commit:
Defined `MODE_ALL` instead of using magic number.

For example, suppose one had bindings like:
{ 0,                   XK_q,             g_quit,                     None },
{ ShitMask,            XK_q,             {quit_err},                 None }
{ ControlMask,         XK_q,             {quit_err, .mode=MODE_IMAGE}, None }

The existing binding `q` has been left unchanged and is defined the same
way. However, the new hypothetical binding `Shift-q` can be used to call
the custom function quit_err in any mode (default). `Ctrl-q` on the
other hand will be called only on image mode.

Closes #50
2021-10-13 06:05:00 +06:00

133 lines
3.4 KiB
Makefile

# nsxiv version
VERSION = 27.1
# PREFIX for install
PREFIX ?= /usr/local
MANPREFIX ?= $(PREFIX)/share/man
EGPREFIX ?= $(PREFIX)/share/doc/nsxiv/examples
# default value for optional dependencies. 1 = enabled, 0 = disabled
OPT_DEP_DEFAULT ?= 1
# autoreload backend: 1 = inotify, 0 = none
HAVE_INOTIFY ?= $(OPT_DEP_DEFAULT)
# optional dependencies, see README for more info
HAVE_LIBFONTS ?= $(OPT_DEP_DEFAULT)
HAVE_LIBGIF ?= $(OPT_DEP_DEFAULT)
HAVE_LIBEXIF ?= $(OPT_DEP_DEFAULT)
HAVE_LIBWEBP ?= $(OPT_DEP_DEFAULT)
# CFLAGS, any optimization flags goes here
CFLAGS ?= -std=c99 -Wall -pedantic
# icons that will be installed via `make icon`
ICONS = 16x16.png 32x32.png 48x48.png 64x64.png 128x128.png
inc_fonts_0 =
inc_fonts_1 = -I/usr/include/freetype2 -I$(PREFIX)/include/freetype2
CPPFLAGS = -D_XOPEN_SOURCE=700 \
-DHAVE_LIBGIF=$(HAVE_LIBGIF) -DHAVE_LIBEXIF=$(HAVE_LIBEXIF) \
-DHAVE_LIBWEBP=$(HAVE_LIBWEBP) -DHAVE_LIBFONTS=$(HAVE_LIBFONTS) \
$(inc_fonts_$(HAVE_LIBFONTS))
lib_fonts_0 =
lib_fonts_1 = -lXft -lfontconfig
lib_exif_0 =
lib_exif_1 = -lexif
lib_gif_0 =
lib_gif_1 = -lgif
lib_webp_0 =
lib_webp_1 = -lwebpdemux -lwebp
autoreload_0 = nop
autoreload_1 = inotify
# using += because certain *BSD distros may need to add additional flags
LDLIBS += -lImlib2 -lX11 \
$(lib_exif_$(HAVE_LIBEXIF)) $(lib_gif_$(HAVE_LIBGIF)) \
$(lib_webp_$(HAVE_LIBWEBP)) $(lib_fonts_$(HAVE_LIBFONTS))
OBJS = autoreload_$(autoreload_$(HAVE_INOTIFY)).o commands.o image.o main.o options.o \
thumbs.o util.o window.o
.PHONY: all clean install uninstall install-all install-icon uninstall-icon install-desktop
.SUFFIXES:
.SUFFIXES: .c .o
all: nsxiv
nsxiv: $(OBJS)
@echo "LINK $@"
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
.c.o:
@echo "CC $@"
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(OBJS): Makefile nsxiv.h config.h
options.o: version.h
window.o: icon/data.h
config.h:
@echo "GEN $@"
cp config.def.h $@
version.h: Makefile .git/index
@echo "GEN $@"
v="$$(git describe 2>/dev/null)"; \
echo "#define VERSION \"$${v:-$(VERSION)}\"" >$@
.git/index:
clean:
rm -f *.o nsxiv version.h
install-all: install install-desktop install-icon
install-desktop:
@echo "INSTALL nsxiv.desktop"
mkdir -p $(DESTDIR)$(PREFIX)/share/applications
cp nsxiv.desktop $(DESTDIR)$(PREFIX)/share/applications
install-icon:
@echo "INSTALL icon"
for f in $(ICONS); do \
dir="$(DESTDIR)$(PREFIX)/share/icons/hicolor/$${f%.png}/apps"; \
mkdir -p "$$dir"; \
cp "icon/$$f" "$$dir/nsxiv.png"; \
chmod 644 "$$dir/nsxiv.png"; \
done
uninstall-icon:
@echo "REMOVE icon"
for f in $(ICONS); do \
dir="$(DESTDIR)$(PREFIX)/share/icons/hicolor/$${f%.png}/apps"; \
rm -f "$$dir/nsxiv.png"; \
done
install: all
@echo "INSTALL bin/nsxiv"
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp nsxiv $(DESTDIR)$(PREFIX)/bin/
chmod 755 $(DESTDIR)$(PREFIX)/bin/nsxiv
@echo "INSTALL nsxiv.1"
mkdir -p $(DESTDIR)$(MANPREFIX)/man1
sed "s!EGPREFIX!$(EGPREFIX)!g; s!PREFIX!$(PREFIX)!g; s!VERSION!$(VERSION)!g" nsxiv.1 \
>$(DESTDIR)$(MANPREFIX)/man1/nsxiv.1
chmod 644 $(DESTDIR)$(MANPREFIX)/man1/nsxiv.1
@echo "INSTALL share/nsxiv/"
mkdir -p $(DESTDIR)$(EGPREFIX)
cp examples/* $(DESTDIR)$(EGPREFIX)
chmod 755 $(DESTDIR)$(EGPREFIX)/*
uninstall: uninstall-icon
@echo "REMOVE bin/nsxiv"
rm -f $(DESTDIR)$(PREFIX)/bin/nsxiv
@echo "REMOVE nsxiv.1"
rm -f $(DESTDIR)$(MANPREFIX)/man1/nsxiv.1
@echo "REMOVE nsxiv.desktop"
rm -f $(DESTDIR)$(PREFIX)/share/applications/nsxiv.desktop
@echo "REMOVE share/nsxiv/"
rm -rf $(DESTDIR)$(EGPREFIX)