#
# FreeType 2 configuration rules templates for Unix + configure
#


# 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.


ifndef TOP
  TOP := .
endif
TOP := $(shell cd $(TOP); pwd)

DELETE        := @RMF@
DELDIR        := @RMDIR@
SEP           := /
HOSTSEP       := $(SEP)
BUILD         := $(TOP)/builds/cygwin
PLATFORM      := cygwin

# don't use `:=' here since the path stuff will be included after this file
#
FTSYS_SRC = @FTSYS_SRC@

INSTALL         := @INSTALL@
INSTALL_DATA    := @INSTALL_DATA@
INSTALL_PROGRAM := @INSTALL_PROGRAM@
INSTALL_SCRIPT  := @INSTALL_SCRIPT@
MKINSTALLDIRS   := $(BUILD)/mkinstalldirs

DISTCLEAN += $(BUILD)/config.cache    \
             $(BUILD)/config.log      \
             $(BUILD)/config.status   \
             $(BUILD)/cygwin-def.mk   \
             $(BUILD)/cygwin-cc.mk    \
             $(BUILD)/ftconfig.h      \
             $(BUILD)/freetype-config \
             $(LIBTOOL)


# Standard installation variables.
#
prefix       := @prefix@
exec_prefix  := @exec_prefix@
libdir       := @libdir@
bindir       := @bindir@
includedir   := @includedir@

version_info := @version_info@


# The directory where all object files are placed.
#
# This lets you build the library in your own directory with something like
#
#   set TOP=.../path/to/freetype2/top/dir...
#   set OBJ_DIR=.../path/to/obj/dir
#   make -f $TOP/Makefile setup [options]
#   make -f $TOP/Makefile
#
ifndef OBJ_DIR
  OBJ_DIR := $(shell cd $(TOP)/obj; pwd)
endif


# The directory where all library files are placed.
#
# By default, this is the same as $(OBJ_DIR); however, this can be changed
# to suit particular needs.
#
LIB_DIR := $(OBJ_DIR)


# The NO_OUTPUT macro is appended to command lines in order to ignore
# the output of some programs.
#
NO_OUTPUT := 2> /dev/null

# EOF
