#
# A Makefile
# Copyright (C) 2007  Jeffrey Grembecki
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#

PKGNAME = dvdspanky
PROGRAMS = dvdspanky 
dvdspanky_OBJS = obj/dvdspanky.o obj/vstr.o obj/forkit.o
dvdspanky_LIBS = $(INCLIBS)

SHELL=/bin/sh
CC=gcc
CXX=g++
FILES=configure src dvdspanky.1 pkgbuild.in Makefile CHANGELOG COPYING README TODO VERSION

VERSION=$(shell cat VERSION 2> /dev/null)
ifeq ($(VERSION),)
	VERSION=CVS $(shell cat CVS/Entries | sed -nr 's/^.*CHANGELOG.*\/([^/]*)\/\//\1/p')
endif
ifeq ($(PKGREL),)
	PKGREL=1
endif

$(shell echo "#ifndef __CONFIG_H" > config.h)
$(shell echo "#define __CONFIG_H" >> config.h)
$(shell echo "#define VERSION \"$(VERSION)\"" >> config.h)
$(shell echo "#endif" >> config.h)

define object_template
$(1): $(2) $(3)
	@echo CC $(1)
	@$$(CC) $$(FLAGS) $(2) -o $(1)
endef

define program_template
$(1): $$($(1)_OBJS)
	@echo CC $(1)
	@$$(CC) $$($(1)_OBJS) -o $(1) $$($(1)_LIBS)
endef

ifdef DEBUG
	FLAGS=-g -Wall -c $(INCCFLAGS)
	CC=gcc
else
	ifdef CFLAGS
		FLAGS=-Wall -c $(INCCFLAGS) $(CFLAGS)
	else
		FLAGS=-O2 -Wall -c $(INCCFLAGS)
	endif
endif

.PHONY: all

all: $(PROGRAMS) dvdspanky.1.gz

$(foreach prog,$(PROGRAMS),$(eval $(call program_template,$(prog))))

$(if $(wildcard make.in),$(eval include make.in),$(error run ./configure))

clean:
	@rm -f dvdspanky.1.gz obj/*.o $(PROGRAMS)

dvdspanky.1.gz: dvdspanky.1
	@echo GZ dvdspanky.1.gz
	@gzip -c dvdspanky.1 > dvdspanky.1.gz

dist:
	@rm -rf $(PKGNAME)-$(VERSION)
	@mkdir -p distrib
	@mkdir -p $(PKGNAME)-$(VERSION)/distrib
	@mkdir -p $(PKGNAME)-$(VERSION)/obj
	@cp -r $(FILES) $(PKGNAME)-$(VERSION)/
	@rm -rf $(PKGNAME)-$(VERSION)/src/CVS $(PKGNAME)-$(VERSION)/CVS
	@echo TZ distrib/$(PKGNAME)-$(VERSION).tar.gz
	@fakeroot tar -zcf distrib/$(PKGNAME)-$(VERSION).tar.gz $(PKGNAME)-$(VERSION)/*
	@rm -rf $(PKGNAME)-$(VERSION)
	@echo M5 distrib/$(PKGNAME)-$(VERSION).md5
	@md5sum distrib/$(PKGNAME)-$(VERSION).tar.gz > distrib/$(PKGNAME)-$(VERSION).md5
	@cat pkgbuild.in | sed -r 's/^pkgver=.*/pkgver=$(VERSION)/' | sed -r "s/^md5sums=.*/md5sums=('$$(md5sum distrib/$(PKGNAME)-$(VERSION).tar.gz | sed -nr 's/^([^ ]*).*/\1/pg')')/" | sed -r 's/^pkgrel=.*/pkgrel=$(PKGVER)/' > PKGBUILD
	@echo TZ distrib/$(PKGNAME)-$(VERSION)-pkgbuild.tar.gz
	@fakeroot tar -zcf distrib/$(PKGNAME)-$(VERSION)-pkgbuild.tar.gz PKGBUILD
	@rm -f PKGBUILD

distclean:
	@rm -rf tmp-distclean
	@mkdir tmp-distclean
	@rm -rf distrib/*
	@mv $(FILES) tmp-distclean
	@ls | grep -v 'tmp-distclean' | xargs rm -rf
	@mv tmp-distclean/* ./
	@mkdir distrib
	@mkdir obj
	@rmdir tmp-distclean

install: dvdspanky dvdspanky.1.gz
	@install -m 755 dvdspanky -D $(DESTDIR)/$(PREFIX)/bin/dvdspanky
	@install -m 644 dvdspanky.1.gz -D $(DESTDIR)/$(PREFIX)/man/man1/dvdspanky.1.gz
