-include Makefile.pre

TOPDIR := $(shell pwd)
PACKAGE := $(if $(strip $(PACKAGE)), $(firstword $(PACKAGE)), $(shell basename $(TOPDIR)))
SPECNAME := $(if $(strip $(SPECNAME)), $(firstword $(SPECNAME)), $(addsuffix .spec, ${PACKAGE}))
SPECDIR := $(if $(strip $(SPECDIR)), $(firstword $(SPECDIR)), SPECS)
SPEC := $(if $(strip $(SPEC)), $(firstword $(SPEC)), $(addprefix $(SPECDIR)/, $(SPECNAME)))

SOURCEDIR := $(if $(strip $(SOURCEDIR)), $(firstword $(SOURCEDIR)), SOURCES)

TMPDIR := $(if $(strip $(TMPDIR)), $(firstword $(TMPDIR)), TMP)
TMPEXPORTDIR := $(if $(strip $(TMPEXPORTDIR)), $(firstword $(TMPEXPORTDIR)), $(addprefix $(TMPDIR)/, export))

BUILDDIR := $(if $(strip $(BUILDDIR)), $(firstword $(BUILDDIR)), BUILD)
RPMDIR := $(if $(strip $(RPMDIR)), $(firstword $(RPMDIR)), RPM)
SRPMDIR := $(if $(strip $(SRPMDIR)), $(firstword $(SRPMDIR)), SRPM)

# rpm dirs
RPMTOPDIR := $(if $(strip $(RPMTOPDIR)), $(firstword $(RPMTOPDIR)), $(TOPDIR))
RPMTMPDIR := $(if $(strip $(RPMTMPDIR)), $(firstword $(RPMTMPDIR)), $(addprefix $(RPMTOPDIR)/, $(TMPDIR)))
RPMSOURCEDIR := $(if $(strip $(RPMSOURCEDIR)), $(firstword $(RPMSOURCEDIR)), \
	$(addprefix $(RPMTOPDIR)/, $(SOURCEDIR)))
RPMBUILDDIR := $(if $(strip $(RPMBUILDDIR)), $(firstword $(RPMBUILDDIR)), $(addprefix $(RPMTOPDIR)/, $(BUILDDIR)))
RPMRPMDIR := $(if $(strip $(RPMRPMDIR)), $(firstword $(RPMRPMDIR)), $(addprefix $(RPMTOPDIR)/, $(RPMDIR)))
RPMSRPMDIR := $(if $(strip $(RPMSRPMDIR)), $(firstword $(RPMSRPMDIR)), $(addprefix $(RPMTOPDIR)/, $(SRPMDIR)))

.PHONY: all ba bs bp binary source buildreq tarball clean

# all target
all: $(SPEC) tarball
	rpmbuild -ba \
		--define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \
		--define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \
		--define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC)

ba: all

bs: source

bb: binary

bp: $(SPEC) tarball
	rpmbuild -bp \
		--define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \
		--define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \
		--define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC)

binary: $(SPEC) tarball
	rpmbuild -bb \
		--define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \
		--define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \
		--define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC)

source: $(SPEC) tarball
	rpmbuild -bs \
		--define "_topdir $(RPMTOPDIR)" --define "_tmpdir $(RPMTMPDIR)" \
		--define "_sourcedir $(RPMSOURCEDIR)" --define "_builddir $(RPMBUILDDIR)" \
		--define "_rpmdir $(RPMRPMDIR)" --define "_srcrpmdir $(RPMSRPMDIR)" $(SPEC)

buildreq: $(SPEC) tarball
	buildreq --args=" \
		--define \"_topdir $(RPMTOPDIR)\" --define \"_tmpdir $(RPMTMPDIR)\" \
		--define \"_sourcedir $(RPMSOURCEDIR)\" --define \"_builddir $(RPMBUILDDIR)\" \
		--define \"_rpmdir $(RPMRPMDIR)\" --define \"_srcrpmdir $(RPMSRPMDIR)\"" $(SPEC)

SUBDIRS = $(wildcard $(SOURCEDIR) $(BUILDDIR) $(RPMDIR) $(SRPMDIR) $(TMPDIR))
CLEANS = $(foreach name, $(sort $(addsuffix /*, $(SUBDIRS)) $(SUBDIRS) $(wildcard *)), \
		 $(if $(strip $(call get_url, $(name))), , $(name)))
clean:
	rm -Rf $(CLEANS)

ifneq ($(strip $(wildcard $(SPEC))), )
SPECURLSORCES := $(shell rpm -bE $(SPEC) 2>/dev/null | \
	sed -n -e '/^Source[0-9]*\:/{s/^Source[0-9]*:[[:space:]]*//;p}')
SPECSORCES := $(notdir $(SPECURLSORCES))

SPECURLPATCHS := $(shell rpm -bE $(SPEC) 2>/dev/null | \
	sed -n -e '/^Patch[0-9]*\:/{s/^Patch[0-9]*:[[:space:]]*//;p}')
SPECPATCHS := $(notdir $(SPECURLPATCHS))

SOURCE := $(addprefix $(RPMSOURCEDIR)/, $(SPECSORCES) $(SPECPATCHS))

UNCOMPRESSED := $(if $(strip $(UNCOMPRESSED)), $(firstword $(UNCOMPRESSED)), UNCOMPRESSED)

ifneq ($(strip $(wildcard $(UNCOMPRESSED))), )
VERSION := $(shell rpm -q --specfile --qf "%{VERSION}\n" $(SPEC)|head -1)
TARBASENAME := $(addprefix $(PACKAGE)-, $(VERSION))
TAR := $(addprefix $(RPMSOURCEDIR)/, $(addsuffix .tar.bz2, $(TARBASENAME)))

$(TAR):
	- rm -Rf $(TMPEXPORTDIR)
	mkdir -p $(TMPEXPORTDIR)
	svn export $(call  get_url, $(UNCOMPRESSED)) $(addprefix $(TMPEXPORTDIR)/, $(TARBASENAME))
	pushd $(TMPEXPORTDIR);tar cvfj $@ $(TARBASENAME);popd
endif
endif

tarball: $(SOURCE)
	mkdir -p $(TMPEXPORTDIR)

$(SPEC):
	$(error "No spec: $@")

-include Makefile.post
