# Makefile for libcharset

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


# Directories used by "make":
srcdir = @srcdir@

# Directories used by "make install":
prefix = @prefix@
local_prefix = /usr/local
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
datadir = @datadir@
libdir = @libdir@
includedir = @includedir@
mandir = @mandir@

# Programs used by "make":
CP = cp
RM = rm -f
@SET_MAKE@

# Programs used by "make install":
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
mkinstalldirs = $(SHELL) @top_srcdir@/build-aux/mkinstalldirs

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

SHELL = /bin/sh

all : include/libcharset.h force
	cd lib && $(MAKE) all

include/libcharset.h :
	if [ ! -d include ] ; then mkdir include ; fi
	$(CP) $(srcdir)/include/libcharset.h.in include/libcharset.h

# Installs the library and include files only. Typically called with only
# $(libdir) and $(includedir) - don't use $(prefix) and $(exec_prefix) here.
install-lib : all force
	cd lib && $(MAKE) install-lib libdir='$(libdir)' includedir='$(includedir)'
	$(mkinstalldirs) $(includedir)
	$(INSTALL_DATA) include/libcharset.h $(includedir)/libcharset.h
	$(INSTALL_DATA) include/localcharset.h.inst $(includedir)/localcharset.h

install : include/libcharset.h include/localcharset.h force
	cd lib && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(mkinstalldirs) $(DESTDIR)$(includedir)
	$(INSTALL_DATA) include/libcharset.h $(DESTDIR)$(includedir)/libcharset.h
	$(INSTALL_DATA) include/localcharset.h.inst $(DESTDIR)$(includedir)/localcharset.h

install-strip : install

installdirs : force
	cd lib && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(mkinstalldirs) $(DESTDIR)$(includedir)

uninstall : force
	cd lib && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(RM) $(DESTDIR)$(includedir)/libcharset.h
	$(RM) $(DESTDIR)$(includedir)/localcharset.h

check : force
	cd lib && $(MAKE) check

mostlyclean : force
	cd lib && $(MAKE) mostlyclean

clean : force
	cd lib && $(MAKE) clean

distclean : force
	cd lib && if test -f Makefile; then $(MAKE) distclean; fi
	$(RM) include/libcharset.h include/localcharset.h include/localcharset.h.inst
	$(RM) config.status config.log config.cache Makefile config.h libtool

maintainer-clean : force
	cd lib && if test -f Makefile; then $(MAKE) maintainer-clean; fi
	$(RM) include/libcharset.h include/localcharset.h include/localcharset.h.inst
	$(RM) config.status config.log config.cache Makefile config.h libtool

# List of source files.
SOURCE_FILES = \
  README DEPENDENCIES INSTALL.windows HACKING INTEGRATE AUTHORS NEWS \
  ChangeLog Makefile.devel configure.ac Makefile.in \
  include/export.h include/libcharset.h.in include/localcharset.h.in \
  tools/README \
  tools/all-charsets tools/all-charsets-X11 tools/all-locales \
  tools/locale_charmap \
  tools/locale_charset.c \
  tools/locale_codeset.c \
  tools/locale_monthnames.c \
  tools/locale_x11encoding.c \
  tools/aix-3.2.5 tools/aix-4.1.5 tools/aix-4.2.0 tools/aix-4.3.2 \
  tools/beos-5 \
  tools/cygwin-1.7.2 \
  tools/darwin-6.8 tools/darwin-7.5 tools/darwin-9.5 \
  tools/freebsd-3.3 \
  tools/glibc-2.1.3 tools/glibc-2.1.90 tools/glibc-2.2 \
  tools/glibc-2.2-XF86-3.3.6 tools/glibc-2.2-XF86-4.0.1f \
  tools/hpux-10.01 tools/hpux-10.20 tools/hpux-11.00 \
  tools/irix-6.5 \
  tools/netbsd-3.0 \
  tools/openbsd-4.1 \
  tools/osf1-4.0a tools/osf1-4.0d tools/osf1-5.1 \
  tools/solaris-2.4 tools/solaris-2.5.1 tools/solaris-2.6 tools/solaris-2.6-cjk tools/solaris-2.7 \
  tools/sunos-4.1.4 \
  tools/win32 \
  INSTALL.djgpp \
  djgpp/config.bat djgpp/config.sed djgpp/config.site \
  djgpp/fnchange.in djgpp/fnchange.lst \
  djgpp/Makefile.maint \
  djgpp/README djgpp/README.in
# List of distributed files imported from other packages.
LIBTOOL_IMPORTED_FILES = \
  build-aux/ltmain.sh \
  m4/libtool.m4 \
  m4/lt~obsolete.m4 \
  m4/ltoptions.m4 \
  m4/ltsugar.m4 \
  m4/ltversion.m4
PARENT_IMPORTED_FILES = \
  INSTALL.generic \
  build-aux/config.guess \
  build-aux/config.libpath \
  build-aux/config.sub \
  build-aux/install-sh \
  build-aux/mkinstalldirs \
  m4/codeset.m4 \
  m4/fcntl-o.m4 \
  m4/glibc21.m4 \
  m4/relocatable-lib.m4 \
  m4/visibility.m4
IMPORTED_FILES = \
  COPYING.LIB \
  $(LIBTOOL_IMPORTED_FILES) $(PARENT_IMPORTED_FILES)
# List of distributed files generated by autotools or Makefile.devel.
GENERATED_FILES = \
  autoconf/aclocal.m4 configure config.h.in \
  include/localcharset.h.build.in
# List of distributed files generated by "make".
DISTRIBUTED_BUILT_FILES =
# List of distributed files.
DISTFILES = $(SOURCE_FILES) $(IMPORTED_FILES) $(GENERATED_FILES) $(DISTRIBUTED_BUILT_FILES)

distdir : $(DISTFILES)
	for file in $(DISTFILES); do \
	  if test -f $$file; then dir='.'; else dir='$(srcdir)'; fi; \
	  destdir=`echo '$(distdir)'/$$file | sed -e 's|//*[^/]*$$||'`; \
	  test -d "$$destdir" || mkdir "$$destdir"; \
	  cp -p "$$dir/$$file" '$(distdir)'/$$file || exit 1; \
	done
	test -d '$(distdir)'/lib || mkdir '$(distdir)'/lib; cd lib && $(MAKE) distdir distdir='$(distdir)'/lib

force :

