# ======================================================================
# $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

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 === #
