# ======================================================================
# $Source$
# $Revision$
# $Date$
# $Author$
# $Name$
# $State$
# ======================================================================

# Makefile for generating rpm package files (.rpm) for net-snmp.

# GNU 'make'-specific features are used in this makefile.
# Other makes may or may not work with it.
# See http://www.gnu.org/manual/make/index.html for details.

SHELL = /bin/sh

# Define the RPM package name
NAME = net-snmp

# Define the default RPM release number. Set by Version-Munge.pl
VERSION = 5.7.3.pre5

VERSION_TAG=`echo Ext-$(VERSION) | sed 's/\./-/g;'`

WITH_PERL=1
EMBED_PERL=1

# Define the RPM architecture, i.e., 'ppc', 'i386', etc.
ARCH = `uname -i`

# Directory structure expected by 'rpm' program
RPM_BASE := $(PWD)/rpm

RPM_TREE := \
    $(RPM_BASE)/BUILD \
    $(RPM_BASE)/RPMS \
    $(RPM_BASE)/SOURCES \
    $(RPM_BASE)/SPECS \
    $(RPM_BASE)/SRPMS

.PHONY:	all clean rpm_files binary_rpm source_rpm all_rpm

all:	all_rpm_files

# Delete all generated files.
clean:
	rm -rf $(RPM_BASE)

# --------------------------------------------------------------------
# Macros and rules for updating net-snmp-x.x.x.tar.gz.
# 'rpm' expects a compressed archive (.tar.gz) of the source directory
# to exist (in the rpm/SOURCES directory) before it is run.
# --------------------------------------------------------------------
CVSROOT = :pserver:anonymous@net-snmp.cvs.sourceforge.net:/cvsroot/net-snmp

PKG_VER := $(NAME)-$(VERSION)

GZIP_TAR := $(RPM_BASE)/SOURCES/$(PKG_VER).tar.gz

gzip_tar:	$(GZIP_TAR)

$(GZIP_TAR):
	@echo "Creating a compressed archive of the package's source files..."
	(cd $(RPM_BASE)/SOURCES; \
	cvs -d$(CVSROOT) login; \
	cvs -z3 -d$(CVSROOT) export -r$(VERSION_TAG) $(NAME); \
	mv $(NAME) $(PKG_VER); \
	tar cf $(PKG_VER).tar $(PKG_VER); \
	gzip $(PKG_VER).tar)
	@echo "A compressed archive of the package's source-file tree has been created."

# --------------------------------------------------------------------
# Macros and rules for updating the binary and source RPM package files.
# --------------------------------------------------------------------
# Redefine '%_topdir' to allow an RPM package file to be built anywhere,
# instead of in the /usr/src/redhat directory tree.
#
# Don't want 'rpmbuild' to strip your executable programs?
# Then add this line:
#   --define='_os_install_post /usr/lib/rpm/brp-compress' \
# to the RPM_OPTS macro definition.  This will eliminate the 
# stripping of binaries, but still retain the compression of
# manual pages.
#
ifeq ($(WITH_PERL),0)
PERLOPTS = --without perl_modules
endif
ifeq ($(EMBED_PERL),0)
PERLOPTS += --without embedded_perl
endif

RPM_OPTS := \
    --define='_topdir $(RPM_BASE)' \
    --define='_includedir /usr/include/net-snmp' \
    --target $(ARCH) $(PERLOPTS)

SPEC_FILE  := $(NAME).spec
RPM_SPEC   := $(RPM_BASE)/SPECS/$(SPEC_FILE)

BINARY_RPM := $(RPM_BASE)/RPMS/$(ARCH)/$(PKG_VER)-$(RELEASE).$(ARCH).rpm
SOURCE_RPM := $(RPM_BASE)/SRPMS/$(PKG_VER)-$(RELEASE).src.rpm

rpm_files:	$(GZIP_TAR) all_rpm_files
binary_rpm:	$(BINARY_RPM)
source_rpm:	$(SOURCE_RPM)
rpm_tree: $(RPM_TREE)

all_rpm_files:	$(RPM_TREE) $(RPM_SPEC)
	(cd $(RPM_BASE)/SPECS; \
	rpmbuild -ba $(RPM_OPTS) $(SPEC_FILE))

$(BINARY_RPM):	$(RPM_TREE) $(RPM_SPEC)
	(cd $(RPM_BASE)/SPECS; \
	rpmbuild -bb $(RPM_OPTS) $(SPEC_FILE))

$(SOURCE_RPM):	$(RPM_TREE) $(RPM_SPEC)
	(cd $(RPM_BASE)/SPECS; \
	rpmbuild -bs $(RPM_OPTS) $(SPEC_FILE))

$(RPM_SPEC):	$(RPM_BASE)/SPECS $(SPEC_FILE)
	cp $(SPEC_FILE) $@

$(RPM_TREE):
	mkdir -p $@

$(SPEC_FILE):
	@echo "ERROR: missing '$(SPEC_FILE)' in the current directory"
	@exit 1

FORCE:

# === End of Makefile === #
