#! gmake

## AbiSource Applications
## Copyright (C) 1998 AbiSource, Inc.
##
## 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; either version 2
## of the License, or (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  
## 02111-1307, USA.

ABI_ROOT:=$(shell pwd)/..

include $(ABI_ROOT)/src/config/abi_defs.mk

DIRS=		config tools other af text wp 
REQUIRECLEAN=
REQUIREREALCLEAN=		clean_ABI_ clean_ZLIB_ clean_LIBPNG_ clean_LIBWV_ clean_LIBICONV_ clean_POPT_

ifeq ($(ABI_OPT_PEER_EXPAT),1)
REQUIRECLEAN+= clean_EXPAT_
REQUIREREALCLEAN+= realclean_EXPAT_
endif


include $(ABI_ROOT)/src/config/abi_rules.mk

##################################################################
## Targets for cleaning up

abiclean::
	rm -f $(OBJDIR)/*.*

clean:: $(REQUIRECLEAN)
	rm -rf $(OBJDIR)

realclean:: $(REQUIREREALCLEAN)

##################################################################
## Build system library files (strings, dictionaries, example
## documents, default system profile, etc) in a canonical, 
## non-installed layout.

## Set the following to a list of pathnames to be copied to $(CANONDIR)
CANON_TOPLEVELFILES=	$(ABI_ROOT)/COPYING $(ABI_ROOT)/user/wp/readme.txt

## Set the following to a list of directories (probably a subset of DIRS)
## that have work to do.
CANON_SubDirs=		wp

canonical:
	@$(subst xxxx,$(CANONDIR),$(VERIFY_DIRECTORY))
	@for k in $(CANON_TOPLEVELFILES); do			\
		$(ABICOPY) $$k $(CANONDIR);			\
	done
	@for k in $(CANON_SubDirs); do				\
		$(MAKE) ABI_ROOT=$(ABI_ROOT) -C $$k canonical;	\
	done

# each installer requires abidistfiles for necessary but fairly constant files, 
# so we check for those here (TODO : move check somewhere else?)
	@if [ -d $(ABI_ROOT)/../abidistfiles ]; then		\
		echo Found abidistfiles in peer directory;		\
	else							\
		echo ;						\
		echo " - abidistfiles not found";			\
		echo "  'make canonical', 'make install', and 'make distribution' require ";	\
		echo "  the abidistfiles/ package be available as a peer to the abi/ tree.";	\
		echo ;						\
		exit 1;						\
	fi

# copy the various dictionary hash files, only used in non-pspell builds
ifeq ($(ABI_OPT_PSPELL),1)
	echo "Using Pspell build, not installing ispell hash files"
else
	# We currently only ship american.hash
	@$(subst xxxx,$(CANONDIR)/dictionary,$(VERIFY_DIRECTORY))
	@$(ABICOPY) $(ABI_ROOT)/../abidistfiles/dictionary/$(OS_ENDIAN).american.hash $(CANONDIR)/dictionary/american.hash
	@$(ABICOPY) $(ABI_ROOT)/../abidistfiles/dictionary/*.xml $(CANONDIR)/dictionary	
endif

ifeq ($(ABI_NATIVE),unix)
# icons for X window manager use
	@$(subst xxxx,$(CANONDIR)/icons,$(VERIFY_DIRECTORY))
	(cd $(ABI_ROOT)/../abidistfiles/icons; cp abi* $(CANONDIR)/icons)
endif

	@$(subst xxxx,$(CANONDIR)/clipart,$(VERIFY_DIRECTORY))
	@$(ABICOPY) $(ABI_ROOT)/../abidistfiles/clipart/*.png $(CANONDIR)/clipart

	@$(subst xxxx,$(CANONDIR)/templates,$(VERIFY_DIRECTORY))
	@$(ABICOPY) $(ABI_ROOT)/../abidistfiles/templates/*.awt* $(CANONDIR)/templates

##################################################################
## Targets for installs.  There is a generic install method, for
## developers mostly (make install), which just puts things in
## $prefix/AbiSuite and $prefix/bin.  /usr/local is the default
## $prefix value.
##
## Also here are make_<dist> targets for supported distribution
## installations.  Each of these targets passes the appropriate
## targets down to the packaging levels.  These targets are for
## use with automated packaging systems only; real people should
## never need to use these unless they have a good reason.

install_redhat: build canonical
ifeq ($(ABI_NATIVE),unix)
	$(MAKE) -C pkg/$(ABIPKGDIR) install_redhat
else	
	@echo
	@echo Only Unix people do \'make install_redhat\', and even then
	@echo only very rarely.
	@echo
endif

# The generic target
install: build canonical
ifeq ($(ABI_NATIVE),unix)
	@echo
	@echo Using prefix value of [$(prefix)]...
	@echo
	@$(MAKE) prefix=$(prefix) ABI_ROOT=$(ABI_ROOT) -C pkg/$(ABIPKGDIR) install
else
	@echo
	@echo Only Unix people do \'make install\'.
	@echo
endif

##################################################################
## Target for building a distribution package from the compiled
## sources.  Since each platform has it's own quirks, the config
## files in abi/src/config/platforms/*.mk must specify which
## package script to run.  Note, some platform scripts may build
## more than one package (like Linux with .tgz, .deb, .rpm)
##
## I'm not going to set the dependency to the executable here
## because this probably needs to be a separate step anyway and
## it is already set at the /abi level.

ifneq ($(ABIPKGDIR),)
  ifeq ($(ABI_BUILD_VERSION),unnumbered)
    disttools: distribution
    distimpexp: distribution

    distribution:
	@echo 
	@echo Error -- ABI_BUILD_VERSION is not set for this build.
	@echo Error -- Set this variable before building packages
	@echo Error -- for distribution.
	@echo
	@exit 1
  else
    distribution:
	@echo Building distribution packages for $(ABIPKGDIR)...
	@$(MAKE) ABI_ROOT=$(ABI_ROOT) prefix=$(prefix) -C pkg/$(ABIPKGDIR) distribution

    disttools:
	@if [ -d $(ABI_ROOT)/../abiword-plugins ]; then \
		echo Found abiword-plugins in peer directory; \
	else \
		echo ; \
		echo " - abiword_plugins not found"; \
		echo "  'make disttools' requires the abiword-plugins/ package be available as"; \
		echo "  a peer to the abi/ tree."; \
		echo "  You can check it out of cvs by running the following command from the"; \
		echo "  same directory you checked out abi into: "; \
		echo "  cvs -d :pserver:anoncvs:anoncvs@cvs.abisource.com:/cvsroot co abiword-plugins"; \
		exit 1; \
	fi
	@echo Building tools plugins...
	@$(MAKE) ABI_ROOT=$(ABI_ROOT) prefix=$(prefix) -C $(ABI_ROOT)/../abiword-plugins/tools all
	@echo Building distribution tools plugin package for $(ABIPKGDIR)...
	@$(MAKE) ABI_ROOT=$(ABI_ROOT) prefix=$(prefix) -C pkg/$(ABIPKGDIR) disttools

    distimpexp:
	@if [ -d $(ABI_ROOT)/../abiword-plugins ]; then \
		echo Found abiword-plugins in peer directory; \
	else \
		echo ; \
		echo " - abiword_plugins not found"; \
		echo "  'make distimpexp' requires the abiword-plugins/ package be available as"; \
		echo "  a peer to the abi/ tree."; \
		echo "  You can check it out of cvs by running the following command from the"; \
		echo "  same directory you checked out abi into: "; \
		echo "  cvs -d :pserver:anoncvs:anoncvs@cvs.abisource.com:/cvsroot co abiword-plugins"; \
		exit 1; \
	fi
	@echo Building importer/exporter plugins...
	@$(MAKE) ABI_ROOT=$(ABI_ROOT) prefix=$(prefix) -C $(ABI_ROOT)/../abiword-plugins/wp/impexp all
	@echo Building distribution importer/exporter plugin package for $(ABIPKGDIR)...
	@$(MAKE) ABI_ROOT=$(ABI_ROOT) prefix=$(prefix) -C pkg/$(ABIPKGDIR) distimpexp

  endif
else
  disttools: distribution
  distimpexp: distribution
  distribution:
	@echo
	@echo Error -- No package script defined for this platform.
	@echo Error -- Please make sure ABIPKGDIR is set in
	@echo Error -- the proper 'abi/src/config/platforms/*.mk'
	@echo Error -- makefile.
	@echo
	@exit 1
endif

##################################################################
## Targets for cleaning peer libraries. 
##
## Note that all peer libraries need an opportunity to realclean, 
## but any peer library using Makefile.abi doesn't need to clean
## since all outputs were in our OBJDIR tree already.
##
## Thus, for Makefile.abi peers, you'll only see one rule here
## (which gets included in REQUIREREALCLEAN above).  Peers using
## their own autoconf magic have two rules.    

clean_ZLIB_:
	@if [ -d $(ABI_ROOT)/../zlib ]; then		\
		$(MAKE) -C $(ABI_ROOT)/../zlib clean;	\
	fi

clean_LIBPNG_:
	@if [ -d $(ABI_ROOT)/../libpng ]; then		\
		$(MAKE) -f Makefile.abi -C $(ABI_ROOT)/../libpng clean;	\
	fi

clean_PSICONV_:
	@if [ -d $(ABI_ROOT)/../psiconv ]; then		\
		$(MAKE) -C $(ABI_ROOT)/../psiconv clean;	\
	fi

clean_EXPAT_:
ifeq ($(ABI_FE), Win32)
	@if [ -d $(ABI_ROOT)/../expat ]; then		\
		$(MAKE) -f Makefile.abi -C $(ABI_ROOT)/../expat clean;	\
	fi
else
	@if [ -d $(ABI_ROOT)/../expat ]; then		\
		$(MAKE) -f Makefile -C $(ABI_ROOT)/../expat clean;	\
	fi
endif

# we have to make a realclean here so the configure script reruns
# if no makefile exists, it is already clean
clean_LIBWV_:
ifneq ($(OS_NAME),WIN32)
	@if [ -d $(ABI_ROOT)/../wv -a -f $(ABI_ROOT)/../wv/Makefile ]; then		\
		$(MAKE) -C $(ABI_ROOT)/../wv realclean;	\
	fi	
else
	$(MAKE) -fMakefile.abi -C $(ABI_ROOT)/../wv realclean;
endif

# we have to make a distclean here to ensure that the configure script reruns
# if no makefile exists, it is already clean
clean_LIBICONV_:
ifneq ($(OS_NAME),WIN32)
	@if [ -d $(ABI_ROOT)/../libiconv -a -f $(ABI_ROOT)/../libiconv/Makefile ]; then	\
		$(MAKE) -C $(ABI_ROOT)/../libiconv distclean;	\
	fi	
else
	$(MAKE) -fMakefile.abi -C $(ABI_ROOT)/../libiconv clean;
	$(RM) $(ABI_ROOT)/../libiconv/lib/config.h;
	$(RM) $(ABI_ROOT)/../libiconv/libcharset/config.h;
	$(RM) $(ABI_ROOT)/../libiconv/include/iconv.h;
endif

clean_POPT_:
ifeq ($(OS_NAME),WIN32)
	@if [ -d $(ABI_ROOT)/../popt ]; then              \
		$(MAKE) -f Makefile.abi -C $(ABI_ROOT)/../popt clean;     \
		$(RM)	$(ABI_ROOT)/../popt/config.h;	\
	fi
endif

realclean_PSICONV_:
	@if [ -d $(ABI_ROOT)/../psiconv -a -f $(ABI_ROOT)/../psiconv/psiconv/Makefile ]; then	\
		$(MAKE) -C $(ABI_ROOT)/../psiconv distclean;	\
	fi	

realclean_EXPAT_:
ifneq ($(ABI_FE),Win32)
	@if [ -d $(ABI_ROOT)/../expat -a -f $(ABI_ROOT)/../expat/lib/Makefile ]; then	\
		$(MAKE) -C $(ABI_ROOT)/../expat distclean;	\
	fi	
else
	@if [ -d $(ABI_ROOT)/../expat ]; then		\
		$(MAKE) -f Makefile.abi -C $(ABI_ROOT)/../expat clean;	\
		$(RM) $(ABI_ROOT)/../expat/config.h;	\
		$(RM) $(ABI_ROOT)/../expat/lib/config.h;	\
	fi
endif

clean_ABI_:
	rm -rf $(OUTDIR) $(DIST)