# -*- Makefile -*- for libcharset

#### 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
#   PREFIX=Some\Directory   Base directory for installation
# 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
!if !defined(PREFIX)
PREFIX = c:\usr
!endif

# Directories used by "make install":
prefix = $(PREFIX)
exec_prefix = $(prefix)
bindir = $(exec_prefix)\bin
libdir = $(exec_prefix)\lib
includedir = $(prefix)\include

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

# Programs used by "make install":
INSTALL = copy
INSTALL_PROGRAM = copy
INSTALL_DATA = copy

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

SHELL = /bin/sh

all : config.h force
!if !$(DLL)
	$(LN) include\libcharset.h.in include\libcharset.h
	$(LN) include\localcharset.h.in include\localcharset.h
!else
	$(LN) include\libcharset.h.msvc-shared include\libcharset.h
	$(LN) include\localcharset.h.msvc-shared include\localcharset.h
!endif
	cd lib
	$(MAKE) -f Makefile.msvc all
	cd ..

config.h : config.h.msvc
	-$(RM) config.h
	$(LN) config.h.msvc config.h

install : force
	cd lib
	$(MAKE) -f Makefile.msvc install
	cd ..
	-mkdir $(prefix)
	-mkdir $(includedir)
	$(INSTALL_DATA) include\libcharset.h $(includedir)\libcharset.h
	$(INSTALL_DATA) include\localcharset.h $(includedir)\localcharset.h

installdirs : force
	cd lib
	$(MAKE) -f Makefile.msvc installdirs
	cd ..
	-mkdir $(prefix)
	-mkdir $(includedir)

uninstall : force
	cd lib
	$(MAKE) -f Makefile.msvc uninstall
	cd ..
	$(RM) $(includedir)\libcharset.h
	$(RM) $(includedir)\localcharset.h

check : all force
	cd lib
	$(MAKE) -f Makefile.msvc check
	cd ..

mostlyclean : force
	$(RM) config.h
	$(RM) include\libcharset.h
	$(RM) include\localcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc mostlyclean
	cd ..

clean : force
	$(RM) config.h
	$(RM) include\libcharset.h
	$(RM) include\localcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc clean
	cd ..

distclean : force
	$(RM) config.h
	$(RM) include\libcharset.h
	$(RM) include\localcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc distclean
	cd ..

maintainer-clean : force
	$(RM) config.h
	$(RM) include\libcharset.h
	$(RM) include\localcharset.h
	cd lib
	$(MAKE) -f Makefile.msvc maintainer-clean
	cd ..

force :

