# $Revision: 1.8 $
#
# This is TkPGP installation/uninstallation makefile.
# 'tkpgp' is a script, so there is no build targets.
#
# History:
# 09-Nov-99 Added KDE files.
# 10-Nov-99 Moved PGP-lock.icon to real X11 directory (!symlinked).
#           KDE directories are now being always created if they don't exist.
#           The .spec file and MD5 hashes are now autogenerated
#           by this Makefile.
# 02-Dec-99 Added file AUTHORS and moved tkpgp.spec from $(DOCFILES).
#           Replaced more hardcoded items with variables.
# 05-Dec-99 Added tkpgp.1 man page.

AWK	= awk
CP	= cp
ECHO    = echo
INSTALL	= install
MD5SUM  = md5sum
RM	= rm

# I do not really use release number. This is fixed to 1.
PACKAGE        = tkpgp
RELEASE_NUMBER = 1
RPM_GROUP      = "X11/Applications"
TKPGP_NAME     = TkPGP
TKPGP_COMMENT  = "PGP/GnuPG GUI Shell"

# General-purpose directories
SRCDIR      = $(PACKAGE)
BINDIR		= /usr/local/bin
DOCDIR		= /usr/doc/$(TKPGP_NAME)
XBITMAPDIR	= /usr/X11R6/include/X11/bitmaps
BUILDROOT	= /usr/src/redhat
MANDIR          = /usr/man/man1

# GNOME, KDE directories
GNOMEDESKTOPDIR = /usr/share/gnome/apps
GNOMEPIXMAPDIR  = /usr/share/pixmaps
KDEDESKTOPDIR   = /usr/share/applnk
KDEDIR_ICON     = /usr/share/icons

SOURCE          = $(PACKAGE)
EXECUTABLE	= $(SOURCE)
BITMAPS		= PGP-lock.icon
KDEFILES_ICON   = PGP-lock-32.xpm
PIXMAPS		= PGP-lock.xpm
MANPAGE         = $(EXECUTABLE).1
DOCFILES	= AUTHORS CHANGES INSTALL README TODO Makefile

# These are synthetic files (generated by this Makefile)
DESKTOPFILE     = $(PACKAGE).desktop
SPECFILE        = $(PACKAGE).spec
MD5FILE         = $(PACKAGE).md5
KDEFILES_KDELNK = $(PACKAGE).kdelnk

# Here we specify where in the system menu TkPGP should appear
GNOMEMENU       = Applications
KDEMENU         = Applications

# Following macros should not need changes.

GNOMEDESKTOPMENUDIR = $(GNOMEDESKTOPDIR)/$(GNOMEMENU)
KDEDIR_KDELNK = $(KDEDESKTOPDIR)/$(KDEMENU)
SRCTARFILE  = $(PACKAGE)-$(VERSION).tar
SRCTGZFILE  = $(PACKAGE)-$(VERSION).tgz

# This automatically retrieves the version number (RCS, CVS)
# from the source file (we have only one) and forms the
# release number. This should change if I have more than one
# source file. In fact, I do - but let's assume that document
# files and such do not change on their own...

AWK_CMD = /Revision:/ {gsub(\"[^0-9]\",\"_\",\$$4); print \$$4}
VERSION	= $(shell $(AWK) -- "$(AWK_CMD)" $(SOURCE))

AWK_CMD_DOTTED = /Revision:/ {print \$$4}
VERSION_DOTTED = $(shell $(AWK) -- "$(AWK_CMD_DOTTED)" $(SOURCE))

# The dotted name will be produced by RPM tool.
RPMFILE_DOTTED = $(PACKAGE)-$(VERSION_DOTTED)-$(RELEASE_NUMBER).noarch.rpm

# We rename this file because some systems hate multiple-dotted names...
RPMFILE_UNDERSCORED = $(PACKAGE)-$(VERSION)-$(RELEASE_NUMBER)_noarch.rpm

#
# SOURCEFILES are those that go into tarball. We generally put everything
# static there, plus we add the .spec file that we just generated (hopefully)
# because this file is needed to build RPM package from tarball.
#
SOURCEFILES =                   \
            $(EXECUTABLE)       \
            $(BITMAPS)          \
            $(DESKTOPFILE)      \
            $(DOCFILES)         \
            $(MANPAGE)          \
            $(PIXMAPS)          \
            $(KDEFILES_KDELNK)  \
            $(KDEFILES_ICON)	\
            $(SPECFILE)

#
# SYNTHFILES are files that are generated during make and can be deleted.
# We generate .spec file and output archives if maintainer targets are
# invoked. We also create GNOME and KDE desktop link files. All these
# files will be deleted by 'clean' target.
#
SYNTHFILES =                    \
            $(DESKTOPFILE)      \
            $(KDEFILES_KDELNK)  \
            $(SPECFILE)         \
            $(RPMFILE_DOTTED)   \
            $(RPMFILE_UNDERSCORED) \
            $(MD5FILE)          \
            $(SRCTGZFILE)

default:
	@$(ECHO) "Usage:"
	@$(ECHO) "make install   -- to install (as superuser)"
	@$(ECHO) "make uninstall -- to uninstall (as superuser)"
	@$(ECHO)
	@$(ECHO) "--- Special targets for maintainer ---"
	@$(ECHO) "make clean     -- to clean the tree"
	@$(ECHO) "make dist      -- to build the generic tar.gz archive"
	@$(ECHO) "make rpm       -- to build RedHat RPM package (superuser)"

clean:
	$(RM) -f $(SYNTHFILES)

install:
	$(INSTALL) -d $(DOCDIR)
	$(INSTALL) -d $(MANDIR)
	$(INSTALL) -d $(GNOMEDESKTOPDIR)
	$(INSTALL) -d $(GNOMEPIXMAPDIR)
	$(INSTALL) -d $(XBITMAPDIR)
	$(INSTALL) -d $(KDEDIR_KDELNK)
	$(INSTALL) -d $(KDEDIR_ICON)
	$(INSTALL) --mode 0644 $(DOCFILES) $(DOCDIR)
	$(INSTALL) --mode 0644 $(MANPAGE) $(MANDIR)
	$(INSTALL) --mode 0644 $(DESKTOPFILE) $(GNOMEDESKTOPMENUDIR)
	$(INSTALL) --mode 0644 $(PIXMAPS) $(GNOMEPIXMAPDIR)
	$(INSTALL) --mode 0755 $(EXECUTABLE) $(BINDIR)
	$(INSTALL) --mode 0644 $(BITMAPS) $(XBITMAPDIR)
	$(INSTALL) --mode 0644 $(KDEFILES_KDELNK) $(KDEDIR_KDELNK)
	$(INSTALL) --mode 0644 $(KDEFILES_ICON) $(KDEDIR_ICON)
	@$(ECHO)
	@$(ECHO) "$(TKPGP_NAME) has been successfully installed"
	@$(ECHO) "-------------------------------------"
	@$(ECHO)
	@$(ECHO) "You can run $(TKPGP_NAME) from command line as"
	@$(ECHO) "$(addprefix $(BINDIR)/,$(EXECUTABLE))"
	@$(ECHO) "or (recommended) start it using GNOME or KDE."
	@$(ECHO) "$(TKPGP_NAME) is installed in following submenus:"
	@$(ECHO) "GNOME: \"$(GNOMEMENU)\" submenu"
	@$(ECHO) "KDE:   \"$(KDEMENU)\" submenu"
	@$(ECHO)
	@$(ECHO) "To uninstall $(TKPGP_NAME) use following command:"
	@$(ECHO) "make -f $(DOCDIR)/Makefile uninstall"
	@$(ECHO)

uninstall:
	$(RM) -rf $(DOCDIR)
	$(RM) -f $(MANDIR)/$(MANPAGE)
	$(RM) -f $(GNOMEDESKTOPMENUDIR)/$(DESKTOPFILE)
	$(RM) -f $(addprefix $(GNOMEPIXMAPDIR)/,$(PIXMAPS))
	$(RM) -f $(addprefix $(BINDIR)/,$(EXECUTABLE))
	$(RM) -f $(addprefix $(KDEDIR_KDELNK)/,$(KDEFILES_KDELNK))
	$(RM) -f $(addprefix $(KDEDIR_ICON)/,$(KDEFILES_ICON))
	@$(ECHO)
	@$(ECHO) "$(TKPGP_NAME) has been successfully uninstalled"
	@$(ECHO) "---------------------------------------"
	@$(ECHO)
	@$(ECHO) "Files .$(PACKAGE) were NOT removed from user directories"
	@$(ECHO) "because they hold personalized settings. They will"
	@$(ECHO) "be preserved during upgrades. If this bothers you,"
	@$(ECHO) "simply delete .$(PACKAGE) files, though they do not"
	@$(ECHO) "contain any sensitive information."
	@$(ECHO)

#--------------------------------------
# These targets are for maintenance only
#--------------------------------------

# You do not need to explicitly make this target. It will be made for 'dist'.
$(SPECFILE):
	@$(ECHO) "Building $(SPECFILE) ..."
	@$(ECHO) "# This is file autogenerated by Makefile, do not edit!" > $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "Summary: $(TKPGP_NAME) - The Tcl/Tk GUI shell for PGP, GnuPG (UNIX)" >> $(SPECFILE)
	@$(ECHO) "# The Summary: line should be expanded to about here -----^" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "Name: $(PACKAGE)" >> $(SPECFILE)
	@$(ECHO) "Version: $(VERSION_DOTTED)" >> $(SPECFILE)
	@$(ECHO) "Release: $(RELEASE_NUMBER)" >> $(SPECFILE)
	@$(ECHO) "Group: $(RPM_GROUP)" >> $(SPECFILE)
	@$(ECHO) "Copyright: GPL" >> $(SPECFILE)
	@$(ECHO) "Source: $(SRCTGZFILE)" >> $(SPECFILE)
	@$(ECHO) "#BuildRoot: ./" >> $(SPECFILE)
	@$(ECHO) "# Following are optional fields" >> $(SPECFILE)
	@$(ECHO) "URL: http://www.geocities.com/tftp" >> $(SPECFILE)
	@$(ECHO) "#Distribution: Red Hat Contrib-Net" >> $(SPECFILE)
	@$(ECHO) "#Patch: $(PACKAGE).patch" >> $(SPECFILE)
	@$(ECHO) "#Prefix: /usr" >> $(SPECFILE)
	@$(ECHO) "BuildArchitectures: noarch" >> $(SPECFILE)
	@$(ECHO) "Requires:  tcl tk" >> $(SPECFILE)
	@$(ECHO) "#Obsoletes:" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "%description" >> $(SPECFILE)
	@$(ECHO) "$(TKPGP_NAME) is a Tcl/Tk GUI shell for PGP, GnuPG." >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "%prep" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "#%setup -n $(PACKAGE)" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "#%patch" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "#%build" >> $(SPECFILE)
	@$(ECHO) "echo "No building is required for $(TKPGP_NAME)"" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "%install" >> $(SPECFILE)
	@$(ECHO) "echo "Maintainer should install $(TKPGP_NAME) manually before building RPM."" >> $(SPECFILE)
	@$(ECHO) "#make install" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "%files" >> $(SPECFILE)
	@$(ECHO) "$(DOCDIR)/AUTHORS" >> $(SPECFILE)
	@$(ECHO) "$(DOCDIR)/CHANGES" >> $(SPECFILE)
	@$(ECHO) "$(DOCDIR)/INSTALL" >> $(SPECFILE)
	@$(ECHO) "$(DOCDIR)/README" >> $(SPECFILE)
	@$(ECHO) "$(DOCDIR)/TODO" >> $(SPECFILE)
	@$(ECHO) "$(DOCDIR)/Makefile" >> $(SPECFILE)
	@$(ECHO) "$(BINDIR)/$(EXECUTABLE)" >> $(SPECFILE)
	@$(ECHO) "$(GNOMEPIXMAPDIR)/$(PIXMAPS)" >> $(SPECFILE)
	@$(ECHO) "$(XBITMAPDIR)/$(BITMAPS)" >> $(SPECFILE)
	@$(ECHO) "$(GNOMEDESKTOPDIR)/$(GNOMEMENU)/$(DESKTOPFILE)" >> $(SPECFILE)
	@$(ECHO) "$(KDEDIR_ICON)/$(KDEFILES_ICON)" >> $(SPECFILE)
	@$(ECHO) "$(KDEDIR_KDELNK)/$(KDEFILES_KDELNK)" >> $(SPECFILE)
	@$(ECHO) >> $(SPECFILE)
	@$(ECHO) "%doc $(MANDIR)/$(MANPAGE)" >> $(SPECFILE)

# This target builds KDE desktop file (kdelnk)
$(KDEFILES_KDELNK):
	@$(ECHO) "Building $(KDEFILES_KDELNK) ..."
	@$(ECHO) "# KDE Config File" > $(KDEFILES_KDELNK)
	@$(ECHO) "# This file is generated by $(TKPGP_NAME) Makefile" >> $(KDEFILES_KDELNK)
	@$(ECHO) "[KDE Desktop Entry]" >> $(KDEFILES_KDELNK)
	@$(ECHO) "Name=$(TKPGP_NAME)" >> $(KDEFILES_KDELNK)
	@$(ECHO) "Comment=$(TKPGP_COMMENT)" >> $(KDEFILES_KDELNK)
	@$(ECHO) "Exec=$(BINDIR)/$(EXECUTABLE)" >> $(KDEFILES_KDELNK)
	@$(ECHO) "Icon=$(KDEFILES_ICON)" >> $(KDEFILES_KDELNK)
	@$(ECHO) "Terminal=0" >> $(KDEFILES_KDELNK)
	@$(ECHO) "Type=Application" >> $(KDEFILES_KDELNK)
	@$(ECHO) "BinaryPattern=$(PACKAGE);" >> $(KDEFILES_KDELNK)

# This target builds GNOME desktop file.
$(DESKTOPFILE):
	@$(ECHO) "Building $(DESKTOPFILE) ..."
	@$(ECHO) "# GNOME Config File" > $(DESKTOPFILE)
	@$(ECHO) "# This file is generated by $(TKPGP_NAME) Makefile" >> $(DESKTOPFILE)
	@$(ECHO) "[Desktop Entry]" >> $(DESKTOPFILE)
	@$(ECHO) "Name=$(TKPGP_NAME)" >> $(DESKTOPFILE)
	@$(ECHO) "Comment=$(TKPGP_COMMENT)" >> $(DESKTOPFILE)
	@$(ECHO) "Exec=$(BINDIR)/$(EXECUTABLE)" >> $(DESKTOPFILE)
	@$(ECHO) "Icon=$(PIXMAPS)" >> $(DESKTOPFILE)
	@$(ECHO) "Terminal=0" >> $(DESKTOPFILE)
	@$(ECHO) "Type=Application" >> $(DESKTOPFILE)

# This target builds a generic tarball.
dist: $(SOURCEFILES)
	@$(ECHO) "Building the source distribution package..."
	tar cvf $(SRCTARFILE) -C .. $(addprefix $(SRCDIR)/,$(SOURCEFILES))
	gzip --to-stdout $(SRCTARFILE) > $(SRCTGZFILE)
	$(RM) $(SRCTARFILE)
	$(MD5SUM) $(SRCTGZFILE) > $(MD5FILE)

# This target builds both generic tarball and RPM package.
rpm: dist
	@$(ECHO) "Building RedHat RPM package..."
	$(CP) -f $(SRCTGZFILE) $(BUILDROOT)/SOURCES
	$(MAKE) install
	rpm -ta $(BUILDROOT)/SOURCES/$(SRCTGZFILE)
	$(MAKE) uninstall
	$(CP) -f $(BUILDROOT)/RPMS/noarch/$(RPMFILE_DOTTED) $(RPMFILE_UNDERSCORED)
	$(MD5SUM) $(SRCTGZFILE) $(RPMFILE_UNDERSCORED) > $(MD5FILE)
