# 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
# 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 : config.h force
!if !$(DLL)
	$(LN) include\libcharset.h.in include\libcharset.h
!else
	$(LN) include\libcharset.h.msvc-shared include\libcharset.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) -r install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(MKINSTALLDIRS) $(includedir)
	$(INSTALL_DATA) include/libcharset.h $(includedir)/libcharset.h

installdirs : force
	cd lib; $(MAKE) -r installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(MKINSTALLDIRS) $(includedir)

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

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

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

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

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

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

force :

