mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-29 13:16:00 +01:00
03c02bbc97
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
279 lines
8.7 KiB
Makefile
279 lines
8.7 KiB
Makefile
# See LICENSE file for license and copyright information
|
|
|
|
include config.mk
|
|
include colors.mk
|
|
include common.mk
|
|
|
|
# source files
|
|
OSOURCE = $(sort $(wildcard ${PROJECT}/*.c) \
|
|
${PROJECT}/resources.c)
|
|
SOURCE_FILTER =
|
|
|
|
ifneq (${WITH_SQLITE},0)
|
|
CPPFLAGS += -DWITH_SQLITE
|
|
else
|
|
SOURCE_FILTER += ${PROJECT}/database-sqlite.c
|
|
endif
|
|
|
|
ifneq ($(WITH_MAGIC),0)
|
|
CPPFLAGS += -DWITH_MAGIC
|
|
endif
|
|
|
|
ifneq ($(WITH_SYNCTEX),0)
|
|
CPPFLAGS += -DWITH_SYNCTEX
|
|
endif
|
|
|
|
ifneq ($(wildcard ${VALGRIND_SUPPRESSION_FILE}),)
|
|
VALGRIND_ARGUMENTS += --suppressions=${VALGRIND_SUPPRESSION_FILE}
|
|
endif
|
|
|
|
ifeq (,$(findstring -DZATHURA_PLUGINDIR,${CPPFLAGS}))
|
|
CPPFLAGS += -DZATHURA_PLUGINDIR=\"${PLUGINDIR}\"
|
|
endif
|
|
ifeq (,$(findstring -DGETTEXT_PACKAGE,${CPPFLAGS}))
|
|
CPPFLAGS += -DGETTEXT_PACKAGE=\"${PROJECT}\"
|
|
endif
|
|
ifeq (,$(findstring -DLOCALEDIR,${CPPFLAGS}))
|
|
CPPFLAGS += -DLOCALEDIR=\"${LOCALEDIR}\"
|
|
endif
|
|
|
|
SOURCE = $(filter-out $(SOURCE_FILTER),$(OSOURCE))
|
|
OBJECTS = $(addprefix ${BUILDDIR_RELEASE}/,${SOURCE:.c=.o})
|
|
OBJECTS_DEBUG = $(addprefix ${BUILDDIR_DEBUG}/,${SOURCE:.c=.o})
|
|
OBJECTS_GCOV = $(addprefix ${BUILDDIR_GCOV}/,${SOURCE:.c=.o})
|
|
HEADERINST = $(addprefix ${PROJECT}/,version.h document.h macros.h page.h types.h plugin-api.h links.h)
|
|
|
|
all: options ${PROJECT} po build-manpages
|
|
|
|
# pkg-config based version checks
|
|
.version-checks/%: config.mk
|
|
$(QUIET)test $($(*)_VERSION_CHECK) -eq 0 || \
|
|
${PKG_CONFIG} --atleast-version $($(*)_MIN_VERSION) $($(*)_PKG_CONFIG_NAME) || ( \
|
|
echo "The minimum required version of $(*) is $($(*)_MIN_VERSION)" && \
|
|
false \
|
|
)
|
|
@mkdir -p .version-checks
|
|
$(QUIET)touch $@
|
|
|
|
options:
|
|
@echo ${PROJECT} build options:
|
|
@echo "CFLAGS = ${CFLAGS}"
|
|
@echo "LIBS = ${LIBS}"
|
|
@echo "DFLAGS = ${DFLAGS}"
|
|
@echo "CC = ${CC}"
|
|
|
|
# generated files
|
|
|
|
${PROJECT}/version.h: ${PROJECT}/version.h.in config.mk
|
|
$(QUIET)sed -e 's/ZVMAJOR/${ZATHURA_VERSION_MAJOR}/' \
|
|
-e 's/ZVMINOR/${ZATHURA_VERSION_MINOR}/' \
|
|
-e 's/ZVREV/${ZATHURA_VERSION_REV}/' \
|
|
-e 's/ZVAPI/${ZATHURA_API_VERSION}/' \
|
|
-e 's/ZVABI/${ZATHURA_ABI_VERSION}/' ${PROJECT}/version.h.in > ${PROJECT}/version.h.tmp
|
|
$(QUIET)mv ${PROJECT}/version.h.tmp ${PROJECT}/version.h
|
|
|
|
${PROJECT}/resources.%: data/zathura.gresource.xml config.mk
|
|
$(call colorecho,GEN,$@)
|
|
@mkdir -p ${DEPENDDIR}/$(dir $@)
|
|
$(QUIET)$(GLIB_COMPILE_RESOURCES) --generate --c-name=zathura_resources --internal \
|
|
--dependency-file=$(DEPENDDIR)/$@.dep \
|
|
--sourcedir=data --target=$@ data/zathura.gresource.xml
|
|
|
|
# common dependencies
|
|
|
|
${OBJECTS} ${OBJECTS_DEBUG} ${OBJECTS_GCOV}: config.mk \
|
|
.version-checks/GIRARA \
|
|
.version-checks/GLIB \
|
|
.version-checks/GTK \
|
|
${PROJECT}/version.h \
|
|
${PROJECT}/resources.h
|
|
|
|
# rlease build
|
|
|
|
${BUILDDIR_RELEASE}/%.o: %.c
|
|
$(call colorecho,CC,$<)
|
|
@mkdir -p ${DEPENDDIR}/$(dir $@)
|
|
@mkdir -p $(dir $(abspath $@))
|
|
$(QUIET)${CC} -c ${CPPFLAGS} ${CFLAGS} -o $@ $< -MMD -MF ${DEPENDDIR}/$@.dep
|
|
|
|
${BUILDDIR_RELEASE}/${BINDIR}/${PROJECT}: ${OBJECTS}
|
|
$(call colorecho,CC,$@)
|
|
@mkdir -p ${BUILDDIR_RELEASE}/${BINDIR}
|
|
$(QUIET)${CC} ${SFLAGS} ${LDFLAGS} \
|
|
-o ${BUILDDIR_RELEASE}/${BINDIR}/${PROJECT} ${OBJECTS} ${LIBS}
|
|
|
|
${PROJECT}: ${BUILDDIR_RELEASE}/${BINDIR}/${PROJECT}
|
|
|
|
release: ${PROJECT}
|
|
|
|
run: release
|
|
$(QUIET)./${BUILDDIR_RELEASE}/${BINDIR}/${PROJECT}
|
|
|
|
# debug build
|
|
|
|
${BUILDDIR_DEBUG}/%.o: %.c
|
|
$(call colorecho,CC,$<)
|
|
@mkdir -p ${DEPENDDIR}/$(dir $@)
|
|
@mkdir -p $(dir $(abspath $@))
|
|
$(QUIET)${CC} -c ${CPPFLAGS} ${CFLAGS} ${DFLAGS} \
|
|
-o $@ $< -MMD -MF ${DEPENDDIR}/$@.dep
|
|
|
|
${BUILDDIR_DEBUG}/${BINDIR}/${PROJECT}: ${OBJECTS_DEBUG}
|
|
$(call colorecho,CC,$@)
|
|
@mkdir -p ${BUILDDIR_DEBUG}/${BINDIR}
|
|
$(QUIET)${CC} ${LDFLAGS} \
|
|
-o ${BUILDDIR_DEBUG}/${BINDIR}/${PROJECT} ${OBJECTS_DEBUG} ${LIBS}
|
|
|
|
debug: ${BUILDDIR_DEBUG}/${BINDIR}/${PROJECT}
|
|
|
|
run-debug: debug
|
|
$(QUIET)./${BUILDDIR_DEBUG}/${BINDIR}/${PROJECT}
|
|
|
|
# gcov build
|
|
|
|
${BUILDDIR_GCOV}/%.o: %.c
|
|
$(call colorecho,CC,$<)
|
|
@mkdir -p ${DEPENDDIR}/$(dir $@)
|
|
@mkdir -p $(dir $(abspath $@))
|
|
$(QUIET)${CC} -c ${CPPFLAGS} ${CFLAGS} ${GCOV_CFLAGS} \
|
|
-o $@ $< -MMD -MF ${DEPENDDIR}/$@.dep
|
|
|
|
${BUILDDIR_GCOV}/${BINDIR}/${PROJECT}: ${OBJECTS_GCOV}
|
|
$(call colorecho,CC,$@)
|
|
@mkdir -p ${BUILDDIR_GCOV}/${BINDIR}
|
|
$(QUIET)${CC} ${LDFLAGS} ${GCOV_CFLAGS} ${GCOV_LDFLAGS} \
|
|
-o ${BUILDDIR_GCOV}/${BINDIR}/${PROJECT} ${OBJECTS_GCOV} ${LIBS}
|
|
|
|
gcov: options ${BUILDDIR_GCOV}/${BINDIR}/${PROJECT}
|
|
$(QUIET)${MAKE} -C tests run-gcov
|
|
$(call colorecho,LCOV,"Analyse data")
|
|
$(QUIET)${LCOV_EXEC} ${LCOV_FLAGS}
|
|
$(call colorecho,LCOV,"Generate report")
|
|
$(QUIET)${GENHTML_EXEC} ${GENHTML_FLAGS}
|
|
|
|
run-gcov: ${BUILDDIR_GCOV}/${BINDIR}/${PROJECT}
|
|
$(QUIET)./${BUILDDIR_GCOV}/${BINDIR}/${PROJECT}
|
|
|
|
# clean
|
|
|
|
clean:
|
|
$(QUIET)rm -rf \
|
|
${BUILDDIR} \
|
|
${DEPENDDIR} \
|
|
${TARFILE} \
|
|
${TARDIR} \
|
|
${PROJECT}.pc \
|
|
${PROJECT}/version.h \
|
|
${PROJECT}/version.h.tmp \
|
|
${PROJECT}/resources.c \
|
|
${PROJECT}/resources.h \
|
|
$(PROJECT).info \
|
|
gcov \
|
|
.version-checks
|
|
$(QUIET)$(MAKE) -C tests clean
|
|
$(QUIET)$(MAKE) -C po clean
|
|
$(QUIET)$(MAKE) -C doc clean
|
|
|
|
${PROJECT}.pc: ${PROJECT}.pc.in config.mk
|
|
$(QUIET)echo project=${PROJECT} > ${PROJECT}.pc
|
|
$(QUIET)echo version=${VERSION} >> ${PROJECT}.pc
|
|
$(QUIET)echo apiversion=${ZATHURA_API_VERSION} >> ${PROJECT}.pc
|
|
$(QUIET)echo abiversion=${ZATHURA_ABI_VERSION} >> ${PROJECT}.pc
|
|
$(QUIET)echo includedir=${INCLUDEDIR} >> ${PROJECT}.pc
|
|
$(QUIET)echo plugindir=${PLUGINDIR} >> ${PROJECT}.pc
|
|
$(QUIET)echo GTK_VERSION=3 >> ${PROJECT}.pc
|
|
$(QUIET)cat ${PROJECT}.pc.in >> ${PROJECT}.pc
|
|
|
|
valgrind: debug
|
|
$(QUIET)G_SLICE=always-malloc G_DEBUG=gc-friendly ${VALGRIND} ${VALGRIND_ARGUMENTS} \
|
|
${BUILDDIR_DEBUG}/${BINDIR}/${PROJECT}
|
|
|
|
gdb: debug
|
|
$(QUIET)cgdb ${BUILDDIR_DEBUG}/${BINDIR}/${PROJECT}
|
|
|
|
test: ${OBJECTS}
|
|
$(QUIET)$(MAKE) -C tests run
|
|
|
|
dist: clean build-manpages
|
|
$(QUIET)tar -czf $(TARFILE) --exclude=.gitignore \
|
|
--transform 's,^,zathura-$(VERSION)/,' \
|
|
`git ls-files` \
|
|
doc/_build/$(PROJECT).1 doc/_build/$(PROJECT)rc.5
|
|
|
|
doc:
|
|
$(QUIET)$(MAKE) -C doc
|
|
|
|
po:
|
|
$(QUIET)${MAKE} -C po
|
|
|
|
update-po:
|
|
$(QUIET)${MAKE} -C po update-po
|
|
|
|
build-manpages:
|
|
$(QUIET)${MAKE} -C doc man
|
|
|
|
install-manpages: build-manpages
|
|
$(call colorecho,INSTALL,"man pages")
|
|
$(QUIET)mkdir -m 755 -p ${DESTDIR}${MANPREFIX}/man1 ${DESTDIR}${MANPREFIX}/man5
|
|
ifneq "$(wildcard doc/_build/${PROJECT}.1)" ""
|
|
$(QUIET)install -m 644 doc/_build/${PROJECT}.1 ${DESTDIR}${MANPREFIX}/man1
|
|
endif
|
|
ifneq "$(wildcard doc/_build/${PROJECT}rc.5)" ""
|
|
$(QUIET)install -m 644 doc/_build/${PROJECT}rc.5 ${DESTDIR}${MANPREFIX}/man5
|
|
endif
|
|
|
|
install-headers: ${PROJECT}.pc
|
|
$(call colorecho,INSTALL,"header files")
|
|
$(QUIET)mkdir -m 755 -p ${DESTDIR}${INCLUDEDIR}/${PROJECT}
|
|
$(QUIET)install -m 644 ${HEADERINST} ${DESTDIR}${INCLUDEDIR}/${PROJECT}
|
|
|
|
$(call colorecho,INSTALL,"pkgconfig file")
|
|
$(QUIET)mkdir -m 755 -p ${DESTDIR}${LIBDIR}/pkgconfig
|
|
$(QUIET)install -m 644 ${PROJECT}.pc ${DESTDIR}${LIBDIR}/pkgconfig
|
|
|
|
install-dbus:
|
|
$(call colorecho,INSTALL,"D-Bus interface definitions")
|
|
$(QUIET)mkdir -m 755 -p $(DESTDIR)$(DBUSINTERFACEDIR)
|
|
$(QUIET)install -m 644 data/org.pwmt.zathura.xml $(DESTDIR)$(DBUSINTERFACEDIR)
|
|
|
|
install-appdata:
|
|
$(call colorecho,INSTALL,"AppData file")
|
|
$(QUIET)mkdir -m 755 -p $(DESTDIR)$(APPDATAPREFIX)
|
|
$(QUIET)install -m 644 data/$(PROJECT).appdata.xml $(DESTDIR)$(APPDATAPREFIX)
|
|
|
|
install: all install-headers install-manpages install-dbus install-appdata
|
|
$(call colorecho,INSTALL,"executeable file")
|
|
$(QUIET)mkdir -m 755 -p ${DESTDIR}${PREFIX}/bin
|
|
$(QUIET)install -m 755 ${BUILDDIR_RELEASE}/${BINDIR}/${PROJECT} ${DESTDIR}${PREFIX}/bin
|
|
$(QUIET)mkdir -m 755 -p ${DESTDIR}${DESKTOPPREFIX}
|
|
$(call colorecho,INSTALL,"desktop file")
|
|
$(QUIET)install -m 644 ${PROJECT}.desktop ${DESTDIR}${DESKTOPPREFIX}
|
|
$(MAKE) -C po install
|
|
|
|
uninstall-headers:
|
|
$(call colorecho,UNINSTALL,"header files")
|
|
$(QUIET)rm -rf ${DESTDIR}${INCLUDEDIR}/${PROJECT}
|
|
$(call colorecho,UNINSTALL,"pkgconfig file")
|
|
$(QUIET)rm -f ${DESTDIR}${LIBDIR}/pkgconfig/${PROJECT}.pc
|
|
|
|
uninstall: uninstall-headers
|
|
$(ECHO) removing executable file
|
|
$(call colorecho,UNINSTALL,"executeable")
|
|
$(QUIET)rm -f ${DESTDIR}${PREFIX}/bin/${PROJECT}
|
|
$(call colorecho,UNINSTALL,"man pages")
|
|
$(QUIET)rm -f ${DESTDIR}${MANPREFIX}/man1/${PROJECT}.1
|
|
$(QUIET)rm -f ${DESTDIR}${MANPREFIX}/man5/${PROJECT}rc.5
|
|
$(call colorecho,UNINSTALL,"desktop file")
|
|
$(QUIET)rm -f ${DESTDIR}${DESKTOPPREFIX}/${PROJECT}.desktop
|
|
$(call colorecho,UNINSTALL,"D-Bus interface definitions")
|
|
$(QUIET)rm -f $(DESTDIR)$(DBUSINTERFACEDIR)/org.pwmt.zathura.xml
|
|
$(call colorecho,UNINSTALL,"AppData file")
|
|
$(QUIET)rm -f $(DESTDIR)$(APPDATAPREFIX)/$(PROJECT).appdata.xml
|
|
$(MAKE) -C po uninstall
|
|
|
|
DEPENDS = ${DEPENDDIRS:^=${DEPENDDIR}/}$(addprefix ${DEPENDDIR}/,${OBJECTS:.o=.o.dep})
|
|
-include ${DEPENDS}
|
|
|
|
.PHONY: all options clean doc debug valgrind gdb dist doc install uninstall \
|
|
test po install-headers uninstall-headers update-po install-manpages \
|
|
build-manpages install-dbus
|