# $Id: dev.mk,v 2.11 2005/07/07 06:26:06 ehood Exp $
##-----------------------------------------------------------------------##
##  Development makefile.
##-----------------------------------------------------------------------##

.PHONY: release code-check version-check \
	release-prep installation-doc pod2man relnotes autodoc \
	bugs clean clean_local distclean create-bundles test-release

TOP     = $(shell pwd)
SUBDIRS = \
	  lib \
	  # End SUBDIRS

include $(TOP)/etc/variables.mk

##-----------------------------------------------------------------------##

ifeq ($(_RELEASE_VERSION),)
  _RELEASE_VERSION = $(shell date -u +"%Y%m%d")
endif
RPM_VERSION	= $(subst -,,$(subst snap,,$(_RELEASE_VERSION)))
RPM_RELEASE	= 1

TAR_EXCLUDE	= $(TOP)/etc/tar-exclude
DIST_DIR	= $(TOP)/dist

ifeq ($(INSTALL_ME),)
  INSTALL_ME	= $(PROJECTS_RELEASES)/install.me/latest/install.me
endif

VERSION_NAME	= MHonArc-$(_RELEASE_VERSION)
EPM_LIST_FILE	= $(TOP)/etc/mhonarc.list
RPM_SPEC_FILE	= $(TOP)/etc/MHonArc.spec

PRGS		= mhonarc mha-dbrecover mha-dbedit mha-decode
PERL_FILES	= \
		  Makefile.PL \
		  $(PRGS) \
		  # End PERL_FILES

##-----------------------------------------------------------------------##


default: code-check

# Perform a release
release: version-check code-check create-bundles

# Do a release without doing a version check
release-dev: code-check create-bundles

# Create all bundles
create-bundles: bundle-init tar-bundles rpm-bundle tar-nodoc-bundles

# Initialization steps for creating bundles
bundle-init:
	@$(RM) -rf $(DIST_DIR)
	-@$(MKDIR) -p $(DIST_DIR)/$(VERSION_NAME)
	@echo "Copying files to $(DIST_DIR)..."
	$(TAR) -c -X $(TAR_EXCLUDE) -f - . | \
	    (cd $(DIST_DIR)/$(VERSION_NAME) && $(TAR) xfp -)
	$(CP) $(INSTALL_ME) $(DIST_DIR)/$(VERSION_NAME)
	(cd $(DIST_DIR)/$(VERSION_NAME) && $(MAKE) -f dev.mk release-prep)
	@$(RM) -rf $(DIST_DIR)/$(VERSION_NAME)/dev.mk \
		   $(DIST_DIR)/$(VERSION_NAME)/etc \
		   $(DIST_DIR)/$(VERSION_NAME)/doc/*.gml \
		   `$(FIND) $(DIST_DIR)/$(VERSION_NAME) -name 'CVS'` \
		   `$(FIND) $(DIST_DIR)/$(VERSION_NAME) -name '_helper'` \
		   `$(FIND) $(DIST_DIR)/$(VERSION_NAME) -name 'Makefile'`
	perl -n -p -e 's/%{version}/$(_RELEASE_VERSION)/g;' \
	    etc/META.yml.spec > \
	    $(DIST_DIR)/$(VERSION_NAME)/META.yml

rpm-bundle:
	@if [ "$(_SNAP_MODE)" != "1" ]; then \
	  echo "Creating rpm..."; \
	  $(RM) -rf  $(DIST_DIR)/rpmbuild; \
	  $(MKDIR) -p $(DIST_DIR)/rpmbuild/BUILD \
		      $(DIST_DIR)/rpmbuild/SOURCES\
		      $(DIST_DIR)/rpmbuild/SPECS\
		      $(DIST_DIR)/rpmbuild/SRPMS\
		      $(DIST_DIR)/rpmbuild/RPMS\
		      $(DIST_DIR)/rpmbuild/RPMS/noarch \
		      $(DIST_DIR)/rpmbuild/buildroot; \
	  \
	  $(CP) $(RPM_SPEC_FILE) $(DIST_DIR)/rpmbuild/SPECS; \
	  (cd $(DIST_DIR)/rpmbuild/SOURCES && \
	    $(LN) -s ../../$(VERSION_NAME).tar.gz); \
	  (cd $(DIST_DIR)/rpmbuild/SOURCES && \
	    $(LN) -s ../../../logo/mhonarc32x32.xpm); \
	  \
	  (cd $(DIST_DIR)/rpmbuild && \
	    $(RPMBUILD) --define='_topdir $(DIST_DIR)/rpmbuild' \
			--define='version $(RPM_VERSION)' \
			--define='release $(RPM_RELEASE)' \
			--buildroot $(DIST_DIR)/rpmbuild/buildroot \
			-ba SPECS/MHonArc.spec); \
	  $(MV) $(DIST_DIR)/rpmbuild/RPMS/noarch/*.rpm $(DIST_DIR); \
	  $(MV) $(DIST_DIR)/rpmbuild/SRPMS/*.rpm $(DIST_DIR); \
	  $(RM) -rf $(DIST_DIR)/rpmbuild; \
	fi

tar-bundles:
	@(echo "Creating tar bundles..." && \
	  cd $(DIST_DIR) && \
	  $(TAR) -cf $(VERSION_NAME).tar $(VERSION_NAME) && \
	  echo "  ...bz2..." && \
	  $(BZIP2) -k $(VERSION_NAME).tar && \
	  echo "  ...gz..." && \
	  $(GZIP) $(VERSION_NAME).tar)
	@(echo "Creating zip bundle..." && \
	  cd $(DIST_DIR) && \
	  $(ZIP) -r $(VERSION_NAME).zip $(VERSION_NAME))

tar-nodoc-bundles:
	$(MV) $(DIST_DIR)/$(VERSION_NAME) $(DIST_DIR)/$(VERSION_NAME)-nodoc
	@$(RM) -rf $(DIST_DIR)/$(VERSION_NAME)-nodoc/doc
	@$(PERL) -i -n -e 'print  unless /^doc:/;' \
		 $(DIST_DIR)/$(VERSION_NAME)-nodoc/FILELIST
	@(echo "Creating no-doc tar bundles..." && \
	  cd $(DIST_DIR) && \
	  $(TAR) -cf $(VERSION_NAME)-nodoc.tar $(VERSION_NAME)-nodoc && \
	  echo "  ...bz2..." && \
	  $(BZIP2) -k $(VERSION_NAME)-nodoc.tar && \
	  echo "  ...gz..." && \
	  $(GZIP) $(VERSION_NAME)-nodoc.tar)
	@(echo "Creating no-doc zip bundle..." && \
	  cd $(DIST_DIR) && \
	  $(ZIP) -r $(VERSION_NAME)-nodoc.zip $(VERSION_NAME)-nodoc)

version-check:
	@if [ "$(_SNAP_MODE)" != "1" ]; then \
	  PERL5LIB=$(TOP)/lib \
	    $(PERL) etc/version-check.pl "$(_RELEASE_VERSION)" \
		    lib/mhamain.pl; \
	fi

code-check: make_subdirs perl_syntax

release-prep: autodoc relnotes bugs installation-doc

installation-doc:
	$(W3M) doc/install.html -cols 76 > INSTALL

pod2man:
	-@$(MKDIR) man
	@for i in $(PRGS) ; \
	    do( \
		echo "Manifying $$i ..."; \
		pod2man --center="MHonArc Documentation" \
		        --release="MHonArc v2.6" $$i > man/$$i.1; \
	    ); \
	done

relnotes:
	$(W3M) doc/relnotes.html -cols 76 > RELNOTES

autodoc: pod2man
	$(MAKE) -C doc
	$(MAKE) -C doc/faq

bugs:
	$(W3M) doc/app-bugs.html -cols 76 > BUGS


clean: clean_subdirs clean_local

clean_local:
	$(RM) -rf $(DIST_DIR) Makefile

distclean: distclean_subdirs clean_local

##-----------------------------------------------------------------------##

include $(TOP)/etc/rules.mk
