#!/bin/sh
#
# $Id$
#

# ---------------------------------------------------------------
# Copyright 2007 Przemyslaw Czerpak (druzus/at/priv.onet.pl),
# See doc/license.txt for licensing terms.
# ---------------------------------------------------------------

if [ -z "$HB_ARCHITECTURE" ]; then
   if [ "$OSTYPE" = "msdosdjgpp" ]; then
      hb_arch="dos"
   else
      hb_arch=`uname -s | tr -d "[-]" | tr '[A-Z]' '[a-z]' 2>/dev/null`
      case "$hb_arch" in
         *windows*|*mingw32*|msys*)   hb_arch="w32" ;;
         *cygwin*)                    hb_arch="cyg" ;;
         *os/2*)                      hb_arch="os2" ;;
         *dos)                        hb_arch="dos" ;;
         *bsd)                        hb_arch="bsd" ;;
         *darwin)                     hb_arch="darwin" ;;
      esac
   fi
   export HB_ARCHITECTURE="$hb_arch"
fi

if [ -z "$HB_CC_NAME" ]; then
   case "$HB_ARCHITECTURE" in
      w32) HB_CC_NAME="mingw" ;;
      dos) HB_CC_NAME="djgpp" ;;
      *)   HB_CC_NAME="gcc" ;;
   esac
   export HB_CC_NAME
fi

if [ -z "$HB_GT_LIB" ]; then
   case "$HB_ARCHITECTURE" in
      w32) HB_GT_LIB="gtwin" ;;
      dos) HB_GT_LIB="gtdos" ;;
      os2) HB_GT_LIB="gtos2" ;;
      *)   HB_GT_LIB="gttrm" ;;
   esac
   export HB_GT_LIB
fi

if [ -z "$HB_GPM_MOUSE" ]; then
   if [ "$HB_ARCHITECTURE" = "linux" ] && \
      ( [ -f /usr/include/gpm.h ] || [ -f /usr/local/include/gpm.h ]); then
      HB_GPM_MOUSE=yes
   else
      HB_GPM_MOUSE=no
   fi
   export HB_GPM_MOUSE
fi

# default lib dir name
HB_LIBDIRNAME="lib"

HB_ARCH64=""
if [ "$HB_ARCHITECTURE" = "linux" ]
then
   HB_CPU=`uname -m`
   case "$HB_CPU" in
      *[_@]64)
         export C_USR="$C_USR -fPIC"
         HB_ARCH64="yes"
         ;;
      *)
         ;;
   esac
fi

[ -z "$CC" ] && CC="gcc"
[ -z "$LD" ] && LD="gcc"

MAKE="make"
CRSLIB="ncurses"
OS_LIBS="-lm"
GT_LIST="TRM"

case "$HB_ARCHITECTURE" in
   w32)  HB_OS="WIN_32"
         GT_LIST="WIN WVT GUI"
         OS_LIBS="-luser32 -lwinspool -lwsock32 -lgdi32"
         ;;
   cyg)  HB_OS="CYGWIN"
         GT_LIST="${GT_LIST} WIN WVT GUI"
         OS_LIBS="-luser32 -lwinspool -lgdi32"
         ;;
   dos)  HB_OS="DOS"
         GT_LIST="DOS"
         ;;
   os2)  HB_OS="OS2"
         GT_LIST="${GT_LIST} OS2"
         ;;
   linux) HB_OS="LINUX"
         [ -d "/usr/lib/lib64" ] && [ "${HB_ARCH64}" = yes ] && HB_LIBDIRNAME="lib64"
         OS_LIBS="$OS_LIBS -ldl"
         ;;
   bsd)  HB_OS="BSD"
         MAKE="gmake"
         ;;
   darwin) HB_OS="DARWIN"
         ;;
   sunos) HB_OS="SUNOS"
         OS_LIBS="$OS_LIBS -lrt"
         CRSLIB="curses"
         ;;
   hpux) HB_OS="HPUX"
         MAKE="gmake"
         OS_LIBS="$OS_LIBS -lrt"
         ;;
   *)    HB_OS=`echo $HB_ARCHITECTURE | tr '[a-z]' '[A-Z]'`
         ;;
esac

#GTSLN=""
#GTCRS=""
#GTXWC=""
for dir in /usr /usr/local /sw /opt/local
do
   if [ "$GTSLN" != yes ]; then
       if [ "$GTSLN" != no ]; then
          if [ -f $dir/include/slang.h ]; then
             [ $dir = /usr ] || C_USR="$C_USR -I$dir/include"
             GTSLN=yes
          elif [ -f $dir/include/slang/slang.h ]; then
             C_USR="$C_USR -I$dir/include/slang"
             GTSLN=yes
          fi
       fi
   fi
   if [ "$GTCRS" != yes ]; then
      if [ "$GTCRS" != no ]; then
          if [ -f ${dir}/include/curses.h ]; then
             [ $dir = /usr ] || C_USR="$C_USR -I$dir/include"
             GTCRS=yes
          elif [ -f ${dir}/include/${CRSLIB}/curses.h ]; then
             C_USR="$C_USR -I$dir/include/${CRSLIB}"
             GTCRS=yes
          fi
      fi
   fi
   if [ "$GTXWC" != yes ]; then
       if [ "$GTXWC" != no ]; then
          if [ -f ${dir}/include/X11/Xlib.h ] && \
             [ -f ${dir}/include/X11/Xcms.h ] && \
             [ -f ${dir}/include/X11/Xutil.h ] && \
             [ -f ${dir}/include/X11/keysym.h ]; then
             [ $dir = /usr ] || C_USR="$C_USR -I$dir/include"
             GTXWC=yes
          fi
       fi
   fi
done

[ "${HB_WITHOUT_GTSLN}" != "yes" ] || GTSLN=""
if [ "$HB_COMMERCE" = yes ]; then
   export HB_GPM_MOUSE=no
   GTSLN=""
fi

if [ "$GTCRS" = "yes" ]; then
   GT_LIST="$GT_LIST CRS"
   OS_LIBS="$OS_LIBS -l${CRSLIB}"
fi
if [ "$GTSLN" = "yes" ]; then
   GT_LIST="$GT_LIST SLN"
   OS_LIBS="$OS_LIBS -lslang"
fi
if [ "$GTXWC" = "yes" ]; then
   GT_LIST="$GT_LIST XWC"
   OS_LIBS="$OS_LIBS -lX11 -L/usr/X11R6/$HB_LIBDIRNAME"
fi

for n in $GT_LIST
do
   GT_TEMP="$GT_TEMP \$(GT${n}_LIB)"
   GT_OBJS="$GT_OBJS \$(GT${n}_LIB_OBJS)"
done
GT_LIST=$GT_TEMP

export C_USR="$C_USR -DHB_OS_$HB_OS"
export HB_OS_LIBS="$HB_OS_LIBS $OS_LIBS"
export HB_GT_LIST="$HB_GT_LIST $GT_LIST"
export HB_GT_OBJS="$HB_GT_OBJS $GT_OBJS"
export CC LD

mkdir -p obj/$HB_CC_NAME lib/$HB_CC_NAME bin/$HB_CC_NAME

# Convert common.mak (for BCC/VC) to common.cf (GCC)

# Revert Cygwin architecture to w32.
# After all it's under Windows OS.
#if [ "$HB_ARCHITECTURE" == "cyg" ]
#then
#   export HB_ARCHITECTURE=w32
#fi

sed -e 's/;/ /g'             \
    -e 's!\\\(.\)!/\1!g'     \
    -e 's/^!if "\($([A-Za-z0-9_]*)\)" != "\(.*\)"/ifneq (\1,\2)/g'      \
    -e 's/^!if "\($([A-Za-z0-9_]*)\)" == "\(.*\)"/ifeq (\1,\2)/g'       \
    -e 's/^!ifdef /ifdef /g'                                            \
    -e 's/^!ifndef /ifndef /g'                                          \
    -e 's/^!else/else/g'                                                \
    -e 's/^!endif/endif/g'                                              \
    -e 's/^!include/include/g'                                          \
    -e 's/^HB_BUILD_TARGETS \=/HB_BUILD_TARGETS \:\=/g'                 \
    common.mak > common.cf

$MAKE -r -f make_gcc.mak $*
rm -f common.cf
