# -*- Makefile -*- for libiconv

#### Start of system configuration section. ####

# Flags that can be set on the nmake command line:
#   DLL=1     for compiling a .dll with a stub .lib (default is a static .lib)
#             Note that this works only with MFLAGS=-MD.
#   MFLAGS={-ML|-MT|-MD} for defining the compilation model
#     MFLAGS=-ML (the default)  Single-threaded, statically linked - libc.lib
#     MFLAGS=-MT                Multi-threaded, statically linked  - libcmt.lib
#     MFLAGS=-MD                Multi-threaded, dynamically linked - msvcrt.lib
#   DEBUG=1   for compiling with debugging information
# Note that nmake command line flags are automatically passed to subdirectory
# Makefiles. Therefore we don't need to pass them explicitly to subdirectory
# Makefiles, but the subdirectory Makefiles need to have the same defaults.
!if !defined(DLL)
DLL=0
!endif
!if !defined(DEBUG)
DEBUG=0
!endif
!if !defined(MFLAGS)
!if !$(DLL)
MFLAGS=
!else
MFLAGS=-MD
!endif
!endif

# Directories used by "make install":
prefix = /usr/local
local_prefix = /usr/local
exec_prefix = $(prefix)
libdir = $(exec_prefix)/lib
includedir = $(prefix)/include
mandir = $(prefix)/man

# Programs used by "make":
LN = copy
RM = -del

#### End of system configuration section. ####

SHELL = /bin/sh

all : force
	cd libcharset
	$(MAKE) -f Makefile.msvc all
	cd ..
	$(LN) libcharset\include\libcharset.h lib\libcharset.h
!if !$(DLL)
	$(LN) include\iconv.h.msvc-static include\iconv.h
!else
	$(LN) include\iconv.h.msvc-shared include\iconv.h
!endif
	cd lib
	$(MAKE) -f Makefile.msvc all
	cd ..
	cd src
	$(MAKE) -f Makefile.msvc all
	cd ..
#	cd man
#	$(MAKE) -f Makefile.msvc all
#	cd ..
	cd tests
	$(MAKE) -f Makefile.msvc all
	cd ..

install : force
	cd libcharset; $(MAKE) -r install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	cd lib; $(MAKE) -r install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	cd src; $(MAKE) -r install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	if [ ! -d $(prefix) ] ; then mkdir $(prefix) ; fi
	if [ ! -d $(exec_prefix) ] ; then mkdir $(exec_prefix) ; fi
	if [ ! -d $(includedir) ] ; then mkdir $(includedir) ; fi
	$(INSTALL_DATA) include/iconv.h $(includedir)/iconv.h
	cd man; $(MAKE) -r install prefix='$(prefix)' exec_prefix='$(exec_prefix)' mandir='$(mandir)'

installdirs : force
	cd libcharset; $(MAKE) -r installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	cd lib; $(MAKE) -r installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	cd src; $(MAKE) -r installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	if [ ! -d $(prefix) ] ; then mkdir $(prefix) ; fi
	if [ ! -d $(exec_prefix) ] ; then mkdir $(exec_prefix) ; fi
	if [ ! -d $(includedir) ] ; then mkdir $(includedir) ; fi
	cd man; $(MAKE) -r installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' mandir='$(mandir)'

uninstall : force
	cd libcharset; $(MAKE) -r uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	cd lib; $(MAKE) -r uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	cd src; $(MAKE) -r uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(RM) $(includedir)/iconv.h
	cd man; $(MAKE) -r uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' mandir='$(mandir)'

check : all force
	cd libcharset
	$(MAKE) -f Makefile.msvc check
	cd ..
	cd lib
	$(MAKE) -f Makefile.msvc check
	cd ..
	cd src
	$(MAKE) -f Makefile.msvc check
	cd ..
#	cd man
#	$(MAKE) -f Makefile.msvc check
#	cd ..
	cd tests
	$(MAKE) -f Makefile.msvc check
	cd ..

mostlyclean : force
	cd libcharset
	$(MAKE) -f Makefile.msvc mostlyclean
	cd ..
	$(RM) lib\libcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc mostlyclean
	cd ..
	cd src
	$(MAKE) -f Makefile.msvc mostlyclean
	cd ..
#	cd man
#	$(MAKE) -f Makefile.msvc mostlyclean
#	cd ..
	cd tests
	$(MAKE) -f Makefile.msvc mostlyclean
	cd ..

clean : force
	cd libcharset
	$(MAKE) -f Makefile.msvc clean
	cd ..
	$(RM) lib\libcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc clean
	cd ..
	cd src
	$(MAKE) -f Makefile.msvc clean
	cd ..
#	cd man
#	$(MAKE) -f Makefile.msvc clean
#	cd ..
	cd tests
	$(MAKE) -f Makefile.msvc clean
	cd ..

distclean : force
	cd libcharset
	$(MAKE) -f Makefile.msvc distclean
	cd ..
	$(RM) lib\libcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc distclean
	cd ..
	cd src
	$(MAKE) -f Makefile.msvc distclean
	cd ..
#	cd man
#	$(MAKE) -f Makefile.msvc distclean
#	cd ..
	cd tests
	$(MAKE) -f Makefile.msvc distclean
	cd ..
	$(RM) config.status config.log config.cache Makefile
	$(RM) include\iconv.h

maintainer-clean : force
	cd libcharset
	$(MAKE) -f Makefile.msvc maintainer-clean
	cd ..
	$(RM) lib\libcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc maintainer-clean
	cd ..
	cd src
	$(MAKE) -f Makefile.msvc maintainer-clean
	cd ..
#	cd man
#	$(MAKE) -f Makefile.msvc maintainer-clean
#	cd ..
	cd tests
	$(MAKE) -f Makefile.msvc maintainer-clean
	cd ..
	$(RM) config.status config.log config.cache Makefile
	$(RM) include\iconv.h

force :

