diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 281 |
1 files changed, 218 insertions, 63 deletions
@@ -1,50 +1,158 @@ # # Makefile for a Video Disk Recorder plugin # +# Compliant with: VDR >= 1.7.34 (new Makefile style) but also VDR 1.4.x, VDR 1.6.x, up to VDR 1.7.33 ('old style Makefiles') +# # $Id$ + # The official name of this plugin. -# This name will be used in the '-P...' option of VDR to load the plugin. -# By default the main source file also carries this name. -# -PLUGIN = graphlcd -# define this if you built graphlcd-base with freetype: -HAVE_FREETYPE2 = 1 +PLUGIN = graphlcd ### The version number of this plugin (taken from the main source file): VERSION = $(shell grep 'static const char \*VERSION *=' plugin.c | awk '{ print $$6 }' | sed -e 's/[";]//g') -### The C++ compiler and options: +### The directory environment: -CXX ?= g++ -CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses +# Use package data if installed...otherwise assume we're under the VDR source directory: +PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc)) +LIBDIR = $(call PKGCFG,libdir) +LOCDIR = $(call PKGCFG,locdir) +PLGCFG = $(call PKGCFG,plgcfg) +# +TMPDIR ?= /tmp + +### The compiler options: + +export CFLAGS = $(call PKGCFG,cflags) +export CXXFLAGS = $(call PKGCFG,cxxflags) + +### The version number of VDR's plugin API: + +APIVERSION = $(call PKGCFG,apiversion) + + +# FLAG_PKGCFG: is pkg-config existing for vdr? +# 'auto' : via pkg-config vdr, +# 'absolute': via pkg-config $(VDRDIR)/vdr.pc, +# 'relative': via pkg-config ../../../vdr.pc, +# 'no' : compiling w/o pkg-config +FLAG_PKGCFG=no +ifneq ($(VDRDIR),) + ifeq ($(shell pkg-config --exists $(VDRDIR)/vdr.pc && echo yes),yes) + FLAG_PKGCFG=absolute + endif +else + ifeq ($(shell pkg-config --exists vdr && echo yes),yes) + FLAG_PKGCFG=auto + else + ifeq ($(shell pkg-config --exists ../../../vdr.pc && echo yes),yes) + FLAG_PKGCFG=relative + endif + endif +endif -### The directory environment: +ifeq ($(strip $(APIVERSION)),) + # APIVERSION is empty? either pkg-config was not successful or vdr is too old: + # assume in-vdr-tree compilation: set VDRDIR Makefile-wide + VDRDIR ?= ../../.. + APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | cut -d'"' -f2) +endif + +# still no APIVERSION? bail out +ifeq ($(APIVERSION),) + $(error no APIVERSION found, bailing out ...) +endif -VDRDIR = ../../.. -LIBDIR = ../../lib -TMPDIR = /tmp +# get numeric VDR version number for numeric comparisons (eg: 1.7.47 -> 10747) +APIVERSNUM = $(shell printf "%2d%02d%02d" $(subst ., ,$(APIVERSION))) -export INSTALLPREFIX = /usr -export INSTALLDOCDIR = $(INSTALLPREFIX)/share/doc +# non-Makefile-wide VDRDIR only for internal use +ifeq ($(VDRDIR),) + TEMP_VDRDIR = ../../.. +else + TEMP_VDRDIR = $(VDRDIR) +endif -### Make sure that necessary options are included: +# post 1.7.33 vdr? +FLAG_NEWSTYLE=false +$(shell [ $(APIVERSNUM) -gt 10733 ] && FLAG_NEWSTYLE=true) + +# do some adaptions and defaults for old vdr versions +ifeq ($(FLAG_NEWSTYLE),false) + CXXFLAGS += $(call PKGCFG,plugincflags) + # ensure -fPIC + ifeq ($(findstring -fPIC,$(CXXFLAGS)),) + CXXFLAGS += -fPIC + endif + export CXXFLAGS + + ifeq ($(LOCDIR),) + LOCDIR = $(call PKGCFG,localedir) + ifeq ($(LOCDIR),) + LOCDIR = $(TEMP_VDRDIR)/locale + endif + endif + # avoid relative locale path + ifeq ($(LOCDIR),./locale) + LOCDIR = $(TEMP_VDRDIR)/locale + endif + + ifeq ($(PLGCFG),) + PLGCFG = $(TEMP_VDRDIR)/Make.config + endif + + # fallbacks + ifeq ($(LIBDIR),) + LIBDIR = $(TEMP_VDRDIR)/PLUGINS/lib + endif +endif +-include $(PLGCFG) --include $(VDRDIR)/Make.global +# some paranoia security checks +ifeq ($(LIBDIR),) + $(error LIBDIR not set, bailing out ...) +endif +ifeq ($(shell [ $(APIVERSNUM) -ge 10500 ] && echo yes),yes) + ifeq ($(LOCDIR),) + $(error LOCDIR not set, bailing out ...) + endif +endif + ### Allow user defined options to overwrite defaults: --include $(VDRDIR)/Make.config +# make sure to have a correct RESDIR +MYRESDIR = $(call PKGCFG,resdir) +ifeq ($(MYRESDIR),) + MYRESDIR = /usr/share/vdr +endif +RESDIR := $(MYRESDIR)/plugins/$(PLUGIN) -### The version number of VDR (taken from VDR's "config.h"): -VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g') -APIVERSION = $(shell grep 'define APIVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g') -ifeq ($(strip $(APIVERSION)),) - APIVERSION = $(VDRVERSION) -endif +# define this if you built graphlcd-base with freetype: +HAVE_FREETYPE2 ?= 1 + +# define this if femon-plugin <= 1.7.7 is used AND which has already been patched (see README) +# either define this setting here or in $VDRDIR/Make.config or in $VDRDIR/Make.global +HAVE_VALID_FEMON ?= 0 + +# define the path to the graphlcd.conf file. if not defined, path = "/etc/graphlcd.conf" +#PLUGIN_GRAPHLCDCONF = "$(CONFDIR)/plugins/$(PLUGIN)/graphlcd.conf" + +# defines if installing of TTF should be omitted (default is to install) +SKIP_INSTALL_TTF ?= 0 + +# defines if installing of documentation should be omitted (default is to install) +SKIP_INSTALL_DOC ?= 0 + +# if no prefix defined: use a default one +PREFIX ?= /usr + +# if we install the documentation ourselves, do it here: +export INSTALLDOCDIR = $(PREFIX)/share/doc/vdr-$(PLUGIN)-$(VERSION) ### The name of the distribution archive: @@ -52,95 +160,142 @@ endif ARCHIVE = $(PLUGIN)-$(VERSION) PACKAGE = vdr-$(ARCHIVE) +### The name of the shared object file: + +SOFILE = libvdr-$(PLUGIN).so ### Includes and Defines (add further entries here): -INCLUDES += -I./graphlcd-base/ -I$(VDRDIR)/include -I$(INSTALLPREFIX)/include +#include $(VDRDIR)/include if vdr is not installed via package-systems or the like +ifneq ($(FLAG_PKGCFG),auto) + INCLUDES += -I$(TEMP_VDRDIR)/include +endif +INCLUDES += -I./graphlcd-base/ -I$(PREFIX)/include -DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"' +DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"' -ifdef HAVE_FREETYPE2 - INCLUDES += -I$(INSTALLPREFIX)/include/freetype2 +ifneq ($(HAVE_FREETYPE2), 0) + INCLUDES += $(shell pkg-config --cflags freetype2 || echo "-I$(PREFIX)/include/freetype2") DEFINES += -DHAVE_FREETYPE2 endif +# if a valid and/or fixed femon-plugin is available +ifneq ($(HAVE_VALID_FEMON), 0) + DEFINES += -DGRAPHLCD_SERVICE_FEMON_VALID +endif + +# if a graphlcd.conf different than the default one in /etc is provided +ifdef PLUGIN_GRAPHLCDCONF + DEFINES += -DPLUGIN_GRAPHLCDCONF='${PLUGIN_GRAPHLCDCONF}' +endif + +# if we add TTF to additional install targets +ifeq ($(SKIP_INSTALL_TTF), 0) + INS_TARGET_TTF = ttf-fonts +endif + +# if we add documentations to additional install targets +ifeq ($(SKIP_INSTALL_DOC), 0) + INS_TARGET_DOCS = docs +endif + ### The object files (add further files here): -OBJS = display.o layout.o logo.o logolist.o menu.o plugin.o setup.o state.o strfct.o widgets.o +OBJS = alias.o common.o display.o menu.o plugin.o setup.o skinconfig.o state.o strfct.o service.o extdata.o -### The main target: -TARGETS = libvdr-$(PLUGIN).so -ifneq ($(shell grep -l 'Phrases' $(VDRDIR)/i18n.c),$(VDRDIR)/i18n.c) -TARGETS += i18n +# internationalisation: check if new style (> vdr 1.4.x) or fall back to 1.4.x +ifeq ($(shell [ $(APIVERSNUM) -ge 10500 ] && echo yes),yes) + I18NTARGET = i18n +else + OBJS += i18n.o endif +### The main target: -all: $(TARGETS) +all: $(SOFILE) $(I18NTARGET) ### Implicit rules: %.o: %.c - $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $< - + $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $< -# Dependencies: +### Dependencies: -MAKEDEP = g++ -MM -MG +MAKEDEP = $(CXX) -MM -MG DEPFILE = .dependencies $(DEPFILE): Makefile - @$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@ + @$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@ -include $(DEPFILE) - ### Internationalization (I18N): PODIR = po -LOCALEDIR = $(VDRDIR)/locale I18Npo = $(wildcard $(PODIR)/*.po) I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file)))) -I18Ndirs = $(notdir $(foreach file, $(I18Npo), $(basename $(file)))) +I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file)))))) I18Npot = $(PODIR)/$(PLUGIN).pot - %.mo: %.po msgfmt -c -o $@ $< $(I18Npot): $(wildcard *.c) - xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<nobody@domain.com>' -o $@ $^ + xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^` -$(I18Npo): $(I18Npot) - msgmerge -U --no-wrap --no-location --backup=none -q $@ $< +%.po: $(I18Npot) + msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $< @touch $@ -i18n: $(I18Nmo) - @mkdir -p $(LOCALEDIR) - for i in $(I18Ndirs); do\ - mkdir -p $(LOCALEDIR)/$$i/LC_MESSAGES;\ - cp $(PODIR)/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/vdr-$(PLUGIN).mo;\ - done +$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo + install -D -m644 $< $@ + +.PHONY: i18n +i18n: $(I18Nmo) $(I18Npot) + +install-i18n: $(I18Nmsgs) ### Targets: -libvdr-$(PLUGIN).so: $(OBJS) - $(CXX) $(CXXFLAGS) -L$(INSTALLPREFIX)/lib -L./graphlcd-base/glcddrivers/ -L./graphlcd-base/glcdgraphics/ -shared $(OBJS) -lglcddrivers -lglcdgraphics -lstdc++ -o $@ - @cp $@ $(LIBDIR)/$@.$(APIVERSION) +$(SOFILE): $(OBJS) + $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -lglcddrivers -lglcdgraphics -lglcdskin -lstdc++ -o $@ + +install-lib: $(SOFILE) + install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION) -dist: clean +install: install-lib install-i18n resources $(INS_TARGET_TTF) $(INS_TARGET_DOCS) + +docs: + @install -d $(DESTDIR)$(INSTALLDOCDIR) + @install -m 644 COPYING $(DESTDIR)$(INSTALLDOCDIR) + @install -m 644 README $(DESTDIR)$(INSTALLDOCDIR) + @install -m 644 HISTORY $(DESTDIR)$(INSTALLDOCDIR) + +ttf-fonts: + @install -d $(DESTDIR)$(RESDIR)/fonts + @install -m 644 $(PLUGIN)/fonts/*.ttf $(DESTDIR)$(RESDIR)/fonts + +resources: + @install -d $(DESTDIR)$(RESDIR)/fonts + @install -m 644 $(PLUGIN)/channels.alias $(DESTDIR)$(RESDIR) + @cp -a $(PLUGIN)/logos $(DESTDIR)$(RESDIR) + @cp -a $(PLUGIN)/skins $(DESTDIR)$(RESDIR) + @install -m 644 $(PLUGIN)/fonts/*.fnt $(DESTDIR)$(RESDIR)/fonts + +dist: $(I18Npo) clean @-rm -rf $(TMPDIR)/$(ARCHIVE) @mkdir $(TMPDIR)/$(ARCHIVE) @cp -a * $(TMPDIR)/$(ARCHIVE) - @tar czf $(PACKAGE).tgz --exclude .svn --exclude .git --exclude *.cbp --exclude *.layout -C $(TMPDIR) $(ARCHIVE) + @tar czf $(PACKAGE).tgz --exclude .git --exclude *.cbp --exclude *.layout -C $(TMPDIR) $(ARCHIVE) @-rm -rf $(TMPDIR)/$(ARCHIVE) @echo Distribution package created as $(PACKAGE).tgz clean: @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot - @-rm -f *.o $(DEPFILE) *.so *.tgz core* *~ - -install: all - @install -d $(INSTALLDOCDIR)/$(PLUGIN) - @install -m 644 README $(INSTALLDOCDIR)/$(PLUGIN) + @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ uninstall: - @rm -rf $(INSTALLDOCDIR)/$(PLUGIN) + @-rm -rf $(DESTDIR)$(INSTALLDOCDIR) + @-rm -rf $(DESTDIR)$(RESDIR) + @-rm -f $(DESTDIR)$(LOCDIR)/*/LC_MESSAGES/vdr-$(PLUGIN).mo + @-rm -f $(DESTDIR)$(LIBDIR)/$(SOFILE).$(APIVERSION) + |