# 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 = @SHELL@

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

# 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.inst $(includedir)/libcharset.h
# Here, use the include file that contains LIBCHARSET_DLL_EXPORTED annotations.
	$(INSTALL_DATA) include/localcharset.h $(includedir)/localcharset.h

install : all force
	cd lib && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
	$(mkinstalldirs) $(DESTDIR)$(includedir)
	$(INSTALL_DATA) include/libcharset.h.inst $(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/libcharset.h.inst 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/libcharset.h.inst 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
# 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/libtool-reloc \
  build-aux/mkinstalldirs \
  m4/codeset.m4 \
  m4/fcntl-o.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/libcharset.h.build.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 :

