summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile281
1 files changed, 218 insertions, 63 deletions
diff --git a/Makefile b/Makefile
index 1c69325..f0321e8 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
+