## -*- makefile -*- ------------------------------------------------------
##
##   Copyright 2000-2008 H. Peter Anvin - All Rights Reserved
##
##   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, Inc., 53 Temple Place Ste 330,
##   Boston MA 02111-1307, USA; either version 2 of the License, or
##   (at your option) any later version; incorporated herein by reference.
##
## -----------------------------------------------------------------------

#
# This should only be used by the maintainer to generate official binaries
# for release.  Please do not "make official" and distribute the binaries,
# please.
#
.PHONY: official release

# These files are removed when tarballs are generated.
PRIVATE = Makefile.private mk/devel.mk

GIT_DIR ?= .git
ABS_GIT_DIR := $(shell cd '$(GIT_DIR)' 2>/dev/null && pwd)

-include release/Makefile.secret

isolinux.iso: all
	cp isolinux-debug.bin isolinux-test/isolinux/isolinux.bin
	mkisofs -v -r -J \
		-b isolinux/isolinux.bin -c isolinux/boot.cat \
		-no-emul-boot -boot-load-size 4 -boot-info-table \
		-o isolinux.iso isolinux-test

burn: isolinux.iso
	cdrecord -v blank=fast isolinux.iso

official:
	$(MAKE) spotless CC='$(CC) -m32' SRC=$(topdir) OBJ=$(CURDIR)
	$(MAKE) all CC='$(CC) -m32' SRC=$(topdir) OBJ=$(CURDIR)
	$(MAKE) strip CC='$(CC) -m32' SRC=$(topdir) OBJ=$(CURDIR)
	$(MAKE) dist CC='$(CC) -m32' SRC=$(topdir) OBJ=$(CURDIR)

release:
	test -d release
	git tag -a -m syslinux-$(VERSION) -f syslinux-$(VERSION)
	-rm -rf release/syslinux-$(VERSION)
	-rm -f release/syslinux-$(VERSION).*
	mkdir -p release/syslinux-$(VERSION)
	git archive --format=tar syslinux-$(VERSION) | \
		tar -x -f - -C release/syslinux-$(VERSION)
	( cd gnu-efi && git archive --format=tar HEAD ) | \
		tar -x -f - -C release/syslinux-$(VERSION)/gnu-efi
	find release/syslinux-$(VERSION) \
		\( -name '*~' -or -name '#*' -or -name '.git*' \) -type f -print0 | \
		xargs -0rt rm -f
	find release/syslinux-$(VERSION) -name 'tests' -type d -print0 | \
		xargs -0rt rm -rf
	sed -e 's/@@VERSION@@/$(VERSION)/g' -e 's/@@RPMVERSION@@/$(VERSION)/g' \
		< release/syslinux-$(VERSION)/syslinux.spec.in \
		> release/syslinux-$(VERSION)/syslinux.spec
	rm -f release/syslinux-$(VERSION)/syslinux.spec.in
	$(MAKE) -C release/syslinux-$(VERSION) official DATE=`date +%Y-%m-%d`

	cd release/syslinux-$(VERSION) && rm -rf $(PRIVATE)
	cd release && tar cvvf - syslinux-$(VERSION) | \
		gzip -9 > syslinux-$(VERSION).tar.gz
	cd release/syslinux-$(VERSION) && \
		zip -9r ../syslinux-$(VERSION).zip *


PRERELDIR := release/syslinux-$(VERSION)-pre
PRERELNO  := $(shell cat $(PRERELDIR)/.prerel 2>/dev/null || echo 1)
PREREL    := syslinux-$(VERSION)-pre$(PRERELNO)
RPMPREREL := $(shell $(PERL) -e 'printf "%.2f.%d\n", $(VERSION)-0.01, $(PRERELNO);')

prerel:
	test -d release
	git tag -a -m $(PREREL) -f $(PREREL)
	-rm -rf $(PRERELDIR)/$(PREREL)
	-rm -f $(PRERELDIR)/$(PREREL).*
	mkdir -p $(PRERELDIR)/$(PREREL)
	git archive --format=tar $(PREREL) | \
		tar -x -f - -C $(PRERELDIR)/$(PREREL)
	( cd gnu-efi && git archive --format=tar HEAD ) | \
		tar -x -f - -C $(PRERELDIR)/$(PREREL)/gnu-efi
	find $(PRERELDIR)/$(PREREL) \
		\( -name '*~' -or -name '#*' \) -type f -print0 | \
		xargs -0rt rm -f
	find $(PRERELDIR)/$(PREREL) \
		-name 'tests' -type d -print0 | \
		xargs -0rt rm -rf
	sed -e 's/@@VERSION@@/$(VERSION)-pre$(PRERELNO)/g' \
	    -e 's/@@RPMVERSION@@/$(RPMPREREL)/g' \
		< $(PRERELDIR)/$(PREREL)/syslinux.spec.in \
		> $(PRERELDIR)/$(PREREL)/syslinux.spec
	rm -f $(PRERELDIR)/$(PREREL)/syslinux.spec.in
	$(MAKE) -C $(PRERELDIR)/$(PREREL) official DATE=`printf '%s-pre%d          ' $(VERSION) $(PRERELNO) | dd bs=10 count=1 2>/dev/null`
	cd $(PRERELDIR)/$(PREREL) && rm -rf $(PRIVATE)
	cd $(PRERELDIR) && tar cvvf - $(PREREL) | \
		gzip -9 > $(PREREL).tar.gz
	cd $(PRERELDIR)/$(PREREL) && \
		zip -9r ../$(PREREL).zip *
	expr $(PRERELNO) + 1 > $(PRERELDIR)/.prerel

LATEST_PRERELNO := $(shell expr $(PRERELNO) - 1)
LATEST_PREREL   := syslinux-$(VERSION)-pre$(LATEST_PRERELNO)

unprerel:
	echo $(LATEST_PRERELNO) > $(PRERELDIR)/.prerel
	@echo Next release will be $(LATEST_PREREL)
