#!/bin/sh
#
# Copyright 2002, 2003, 2004, 2005 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.
#
#
# Call the `configure' script located in `builds/unix'.
#

rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk

if test "x$GNUMAKE" = x; then
  GNUMAKE=make
fi

if test -z "`$GNUMAKE -v 2>/dev/null | grep GNU`"; then
  if test -z "`$GNUMAKE -v 2>/dev/null | grep makepp`"; then
    echo "GNU make (>= 3.79.1) or makepp (>= 1.19) is required to build FreeType2." >&2
    echo "Please try" >&2
    echo "  \`GNUMAKE=<GNU make command name> $0'." >&2
    echo "or >&2"
    echo "  \`GNUMAKE=\"makepp --norc-substitution\" $0'." >&2
    exit 1
  fi
fi

# Uh, oh.  This is taken from autoconf.  They know what they are doing...

if expr a : '\(a\)' >/dev/null 2>&1; then
  ft_expr=expr
else
  ft_expr=false
fi

ft2_dir=`(dirname "$0") 2>/dev/null ||
$ft_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$0" : 'X\(//\)[^/]' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| \
         .     : '\(.\)' 2>/dev/null ||
echo X"$0" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
         /^X\(\/\/\)$/{ s//\1/; q; }
         /^X\(\/\).*/{ s//\1/; q; }
         s/.*/./; q'`

abs_curr_dir=`pwd`
abs_ft2_dir=`cd "$ft2_dir" && pwd`

# build a dummy Makefile if we are not building in the source tree

if test "$abs_curr_dir" != "$abs_ft2_dir"; then
  mkdir reference
  echo "TOP_DIR   := $abs_ft2_dir"               > Makefile
  echo "OBJ_DIR   := $abs_curr_dir"             >> Makefile
  echo "OBJ_BUILD := \$(OBJ_DIR)"               >> Makefile
  echo "DOC_DIR   := \$(OBJ_DIR)/reference"     >> Makefile
  echo "LIBTOOL   := \$(OBJ_DIR)/libtool"       >> Makefile
  echo "ifndef FT2DEMOS"                        >> Makefile
  echo "  include \$(TOP_DIR)/Makefile"         >> Makefile
  echo "else"                                   >> Makefile
  echo "  TOP_DIR_2 := \$(TOP_DIR)/../ft2demos" >> Makefile
  echo "  PROJECT   := freetype"                >> Makefile
  echo "  CONFIG_MK := \$(OBJ_DIR)/config.mk"   >> Makefile
  echo "  include \$(TOP_DIR_2)/Makefile"       >> Makefile
  echo "endif"                                  >> Makefile
fi

# call make

CFG="$@" $GNUMAKE setup unix

# eof
