#
# FreeType 2 installation instructions for Unix-like systems
#


# Copyright 1996-2000 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
# indicate that you have read the license and understand and accept it
# fully.


# Unix installation and deinstallation targets.

install: $(PROJECT_LIBRARY)
	$(MKINSTALLDIRS) $(libdir)                       \
                         $(includedir)/freetype/config   \
                         $(includedir)/freetype/internal \
                         $(includedir)/freetype/cache
	$(LIBTOOL) --mode=install $(INSTALL) $(PROJECT_LIBRARY) $(libdir)
	-for P in $(PUBLIC_H) ; do                     \
          $(INSTALL_DATA) $$P $(includedir)/freetype ; \
        done
	-for P in $(BASE_H) ; do                                \
          $(INSTALL_DATA) $$P $(includedir)/freetype/internal ; \
        done
	-for P in $(CONFIG_H) ; do                            \
          $(INSTALL_DATA) $$P $(includedir)/freetype/config ; \
        done
	-for P in $(BASE_H) ; do                                \
          $(INSTALL_DATA) $$P $(includedir)/freetype/cache ; \
        done

uninstall:
	-$(LIBTOOL) --mode=uninstall $(RM) $(libdir)/$(PROJECT_LIBRARY).$A
	-$(DELETE) $(includedir)/freetype/cache/*
	-$(DELDIR) $(includedir)/freetype/cache
	-$(DELETE) $(includedir)/freetype/config/*
	-$(DELDIR) $(includedir)/freetype/config
	-$(DELETE) $(includedir)/freetype/internal/*
	-$(DELDIR) $(includedir)/freetype/internal
	-$(DELETE) $(includedir)/freetype/*
	-$(DELDIR) $(includedir)/freetype


# Unix cleaning and distclean rules.
#
clean_project_cygwin:
	-$(DELETE) $(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)
	-$(DELETE) $(patsubst %.$O,%.$(SO),$(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)) \
                   $(CLEAN)

distclean_project_cygwin: clean_project_cygwin
	-$(DELETE) $(PROJECT_LIBRARY)
	-$(DELETE) $(OBJ_DIR)/.libs/*
	-$(DELDIR) $(OBJ_DIR)/.libs
	-$(DELETE) *.orig *~ core *.core $(DISTCLEAN)

# EOF
