#! /bin/bash

if test x"$1" = x"-h" -o x"$1" = x"--help" ; then

echo "Usage: ./configure [options]"
echo ""
echo "available options:"
echo ""
echo "  --help                   print this message"
echo "  --disable-avis-input     disables avisynth input (win32 only)"
echo "  --disable-mp4-output     disables mp4 output (using gpac)"
echo "  --disable-pthread        disables multithreaded encoding"
echo "  --disable-asm            disables assembly optimizations on x86"
echo "  --enable-debug           adds -g, doesn't strip"
echo "  --enable-gprof           adds -pg, doesn't strip"
echo "  --enable-visualize       enables visualization (X11 only)"
echo "  --enable-pic             build position-independent code"
echo "  --enable-shared          build libx264.so"
echo "  --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS"
echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS"
echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS"
echo "  --host=HOST              build programs to run on HOST"
echo ""
exit 1
fi

cc_check() {
    cat > conftest.c << EOF
#include <$1>
int main () { $3 return 0; }
EOF
    $CC conftest.c $CFLAGS $LDFLAGS $2 -o conftest 2>$DEVNULL
    TMP="$?"
    return $TMP
}

as_check() {
    echo "$1" > conftest.asm
    $AS conftest.asm $ASFLAGS $2 -o conftest.o 2>$DEVNULL
    TMP="$?"
    return $TMP
}

rm -f config.h config.mak x264.pc conftest*

prefix='/usr/local'
exec_prefix='${prefix}'
bindir='${exec_prefix}/bin'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
DEVNULL='/dev/null'

avis_input="auto"
mp4_output="auto"
pthread="auto"
asm="yes"
debug="no"
gprof="no"
pic="no"
vis="no"
shared="no"

CC="${CC-gcc}"
CFLAGS="$CFLAGS -Wall -I."
LDFLAGS="$LDFLAGS"
HAVE_GETOPT_LONG=1

AS="yasm"
ASFLAGS=""

EXE=""

# check whether 'echo -n' works as expected, otherwise try printf
if [ "x`echo -n houba`" = xhouba ]
then
  ECHON="echo -n"
elif [ "x`printf houba`" = xhouba ]
then
  ECHON="printf"
else
  echo "Neither 'echo -n' nor 'printf' are working with your shell!"
  exit 1
fi
# for some reason 'echo -n' doesn't work as expected on SunOS when called by
# gmake
if test "$(uname)" = "SunOS"; then
  if [ "x`printf houba`" != xhouba ]; then
    echo "Neither 'echo -n' nor 'printf' are working with your shell!"
    exit 1
  fi
  ECHON="printf"
fi

# parse options

for opt do
    optarg="${opt#*=}"
    case "$opt" in
        --prefix=*)
            prefix="$optarg"
            ;;
        --exec-prefix=*)
            exec_prefix="$optarg"
            ;;
        --bindir=*)
            bindir="$optarg"
            ;;
        --libdir=*)
            libdir="$optarg"
            ;;
        --includedir=*)
            includedir="$optarg"
            ;;
        --enable-asm)
            asm="yes"
            ;;
        --disable-asm)
            asm="no"
            ;;
        --enable-avis-input)
            avis_input="yes"
            ;;
        --disable-avis-input)
            avis_input="no"
            ;;
        --enable-mp4-output)
            mp4_output="yes"
            ;;
        --disable-mp4-output)
            mp4_output="no"
            ;;
        --extra-asflags=*)
            ASFLAGS="$ASFLAGS ${opt#--extra-asflags=}"
            ;;
        --extra-cflags=*)
            CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
            ;;
        --extra-ldflags=*)
            LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}"
            ;;
        --enable-pthread)
            pthread="auto" # can't skip detection, since it differs by OS
            ;;
        --disable-pthread)
            pthread="no"
            ;;
        --enable-debug)
            debug="yes"
            ;;
        --enable-gprof)
            CFLAGS="$CFLAGS -pg"
            LDFLAGS="$LDFLAGS -pg"
            gprof="yes"
            ;;
        --enable-pic)
            pic="yes"
            ;;
        --enable-shared)
            shared="yes"
            ;;
        --enable-visualize)
            LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
            CFLAGS="$CFLAGS -DVISUALIZE=1"
            vis="yes"
            ;;
        --host=*)
            host="${opt#--host=}"
            ;;
        *)
            echo "Unknown option $opt, ignored"
            ;;
    esac
done

if [ "x$host" = x ]; then
    host=`./config.guess`
fi
# normalize a triplet into a quadruplet
host=`./config.sub $host`

# split $host
host_cpu="${host%%-*}"
host="${host#*-}"
host_vendor="${host%%-*}"
host_os="${host#*-}"

case $host_os in
  beos*)
    SYS="BEOS"
    CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
    ;;
  darwin*)
    SYS="MACOSX"
    CFLAGS="$CFLAGS -falign-loops=16"
    LDFLAGS="$LDFLAGS -lm -lmx"
    if [ "$pic" = "no" ]; then
        CFLAGS="$CFLAGS -mdynamic-no-pic"
    fi
    ;;
  freebsd*)
    SYS="FREEBSD"
    LDFLAGS="$LDFLAGS -lm"
    ;;
  kfreebsd*-gnu)
    SYS="FREEBSD"
    CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
    LDFLAGS="$LDFLAGS -lm"
    ;;
  netbsd*)
    SYS="NETBSD"
    LDFLAGS="$LDFLAGS -lm"
    ;;
  openbsd*)
    SYS="OPENBSD"
    CFLAGS="$CFLAGS -I/usr/X11R6/include"
    LDFLAGS="$LDFLAGS -lm"
    ;;
  linux*)
    SYS="LINUX"
    CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
    LDFLAGS="$LDFLAGS -lm"
    ;;
  cygwin*)
    SYS="MINGW"
    CFLAGS="$CFLAGS -mno-cygwin"
    LDFLAGS="$LDFLAGS -mno-cygwin"
    EXE=".exe"
    DEVNULL="NUL"
    ;;
  mingw*)
    SYS="MINGW"
    EXE=".exe"
    DEVNULL="NUL"
    ;;
  sunos*|solaris*)
    SYS="SunOS"
    CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
    LDFLAGS="$LDFLAGS -lm"
    HAVE_GETOPT_LONG=0
    ;;
  *)
    echo "Unknown system $host, edit the configure"
    exit 1
    ;;
esac

case $host_cpu in
  i*86)
    ARCH="X86"
    ASFLAGS="-O2"
    if [ "$SYS" = MACOSX ]; then
      ASFLAGS="$ASFLAGS -f macho -DPREFIX"
    elif [ "$SYS" = MINGW ]; then
      ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
    else
      ASFLAGS="$ASFLAGS -f elf"
    fi
    ;;
  x86_64)
    ARCH="X86_64"
    if [ "$SYS" = MACOSX ];then
      ASFLAGS="-f macho64 -m amd64 -DPIC -DPREFIX"
      CFLAGS="$CFLAGS -arch x86_64"
      LDFLAGS="$LDFLAGS -arch x86_64"
    else
      ASFLAGS="-f elf -m amd64"
    fi
    ;;
  powerpc|powerpc64)
    ARCH="PPC"
    if [ $SYS = MACOSX ]
    then
      ALTIVECFLAGS="$ALTIVECFLAGS -faltivec -fastf -mcpu=G4"
    else
      ALTIVECFLAGS="$ALTIVECFLAGS -maltivec -mabi=altivec"
    fi
    ;;
  sparc)
    if test "$(uname -m)" = "sun4u"; then
      ARCH="UltraSparc"
      CFLAGS="$CFLAGS -mcpu=ultrasparc"
      LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
      as --version > /dev/null 2> /dev/null
      if [ $? == 0 ]; then
        AS="as"
      else
        gas --version > /dev/null 2> /dev/null
        if [ $? == 0 ]; then
          AS="gas"
        else
          AS=""
        fi
      fi
      ASFLAGS="-xarch=v8plusa"
    else
      ARCH="Sparc"
    fi
    ;;
  mips|mipsel|mips64|mips64el)
    ARCH="MIPS"
    ;;
  arm*)
    ARCH="ARM"
    ;;
  s390|s390x)
    ARCH="S390"
    ;;
  parisc|parisc64)
    ARCH="PARISC"
    ;;
  *)
    ARCH="$(echo $host_cpu | tr a-z A-Z)"
    ;;
esac

# check requirements

if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" \) ] ; then
    pic="yes"
fi

if [ $ARCH = X86 -o $ARCH = X86_64 ] ; then
    if [ $asm = yes ] ; then
	if as_check "pinsrd xmm0, [esp], 0" ; then
    	    CFLAGS="$CFLAGS -DHAVE_MMX"
	else
    	    VER=`($AS --version || echo no assembler) 2>$DEVNULL | head -n 1`
    	    echo "Found $VER"
    	    echo "Minimum version is yasm-0.6.1"
    	    echo "If you really want to compile without asm, configure with --disable-asm."
    	    exit 1
	fi
    else
	AS=""
    fi
fi

CFLAGS="$CFLAGS -DARCH_$ARCH -DSYS_$SYS"

echo "unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';" > conftest.c
$CC $CFLAGS conftest.c -c -o conftest.o 2>$DEVNULL || die "endian test failed"
if test "$SYS" == "SunOS" ; then
    grep "grep" configure 2>/dev/null  && grep_bin="grep"
    ggrep "grep" configure 2>/dev/null && grep_bin="ggrep" 
    if [ -z $grep_bin ]; then
        echo "Cannot find a version of grep that takes the -q option!"
        exit 1
    fi
    $grep_bin BIGE conftest.o && CFLAGS="$CFLAGS -DWORDS_BIGENDIAN"
else
    grep -q "grep" configure 2>/dev/null  && grep_bin="grep"
    ggrep -q "grep" configure 2>/dev/null && grep_bin="ggrep" 
    if [ -z $grep_bin ]; then
        echo "Cannot find a version of grep that takes the -q option!"
        exit 1
    fi
    $grep_bin -q BIGE conftest.o && CFLAGS="$CFLAGS -DWORDS_BIGENDIAN"
fi


# autodetect options that weren't forced nor disabled

libpthread=""
if test "$pthread" = "auto" ; then
    pthread="no"
    case $SYS in
        BEOS)
            pthread="yes"
            ;;
        MINGW)
            if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
                pthread="yes"
                libpthread="-lpthread"
            elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
                pthread="yes"
                libpthread="-lpthreadGC2"
            elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
                pthread="yes"
                libpthread="-lpthreadGC2 -lwsock32"
                CFLAGS="$CFLAGS -DPTW32_STATIC_LIB"
            fi
            ;;
        *)
            cc_check pthread.h -lpthread && pthread="yes" && libpthread="-lpthread"
            ;;
    esac
fi
if test "$pthread" = "yes" ; then
    CFLAGS="$CFLAGS -DHAVE_PTHREAD"
    LDFLAGS="$LDFLAGS $libpthread"
fi

MP4_LDFLAGS="-lgpac_static"
if [ $SYS = MINGW ]; then
    MP4_LDFLAGS="$MP4_LDFLAGS -lwinmm"
fi
if [ "$mp4_output" = "auto" ] ; then
    mp4_output="no"
    cc_check gpac/isomedia.h "$MP4_LDFLAGS" && mp4_output="yes"
fi
if [ "$mp4_output" = "yes" ] ; then
    echo "#define MP4_OUTPUT" >> config.h
    LDFLAGS="$LDFLAGS $MP4_LDFLAGS"
fi

if [ "$avis_input" = "auto" ] ; then
    if [ $SYS = MINGW ]; then
        avis_input="yes"
    else
        avis_input="no";
    fi
fi
if [ "$avis_input" = "yes" ] ; then
    echo "#define AVIS_INPUT" >> config.h
    LDFLAGS="$LDFLAGS -lvfw32"
fi

if [ "$pic" = "yes" ] ; then
    CFLAGS="$CFLAGS -fPIC"
    ASFLAGS="$ASFLAGS -DPIC"
    # resolve textrels in the x86 asm
    cc_check stdio.h -Wl,-Bsymbolic && LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
fi

if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
    CFLAGS="$CFLAGS -s -fomit-frame-pointer"
    LDFLAGS="$LDFLAGS -s"
fi

if [ "$debug" = "yes" ]; then
    CFLAGS="-g $CFLAGS"
else
    CFLAGS="-O4 -ffast-math $CFLAGS"
fi

if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
    echo "#define fseek fseeko" >> config.h
    echo "#define ftell ftello" >> config.h
elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
    echo "#define fseek fseeko64" >> config.h
    echo "#define ftell ftello64" >> config.h
fi

rm -f conftest*

# generate config files

cat > config.mak << EOF
prefix=$prefix
exec_prefix=$exec_prefix
bindir=$bindir
libdir=$libdir
includedir=$includedir
ARCH=$ARCH
SYS=$SYS
CC=$CC
CFLAGS=$CFLAGS
ALTIVECFLAGS=$ALTIVECFLAGS
LDFLAGS=$LDFLAGS
AS=$AS
ASFLAGS=$ASFLAGS
EXE=$EXE
VIS=$vis
HAVE_GETOPT_LONG=$HAVE_GETOPT_LONG
DEVNULL=$DEVNULL
ECHON=$ECHON
EOF

$ECHON 'CONFIGURE_ARGS=' >> config.mak
for A in "$@" ; do
    $ECHON " '$A'" >> config.mak
done
echo '' >> config.mak

if [ "$shared" = "yes" ]; then
    API=$(grep '#define X264_BUILD' < x264.h | cut -f 3 -d ' ')
    if [ "$SYS" = "MINGW" ]; then
        echo "SONAME=libx264-$API.dll" >> config.mak
        echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
        echo 'SOFLAGS=-Wl,--out-implib,$(IMPLIBNAME) -Wl,--enable-auto-image-base' >> config.mak
    elif [ "$SYS" = "MACOSX" ]; then
        echo "SOSUFFIX=dylib" >> config.mak
        echo "SONAME=libx264.$API.dylib" >> config.mak
        echo 'SOFLAGS=-dynamiclib -Wl,-single_module -Wl,-read_only_relocs,suppress -install_name $(DESTDIR)$(libdir)/$(SONAME)' >> config.mak
    else
        echo "SOSUFFIX=so" >> config.mak
        echo "SONAME=libx264.so.$API" >> config.mak
        echo 'SOFLAGS=-Wl,-soname,$(SONAME)' >> config.mak
    fi
    echo 'default: $(SONAME)' >> config.mak
fi

# Don't use version.sh (which makes use of git), instead define macros for config.h directly
#./version.sh
echo '#define X264_VERSION " r1047M f773bf0"' >> config.h
echo '#define X264_POINTVER "0.65.1047M f773bf0"' >> config.h

pclibs="-L$libdir -lx264 $libpthread"

cat > x264.pc << EOF
prefix=$prefix
exec_prefix=$exec_prefix
libdir=$libdir
includedir=$includedir

Name: x264
Description: H.264 (MPEG4 AVC) encoder library
Version: $(grep POINTVER < config.h | sed -e 's/.* "//; s/".*//')
Libs: $pclibs
Cflags: -I$includedir
EOF


echo "Platform:   $ARCH"
echo "System:     $SYS"
echo "asm:        $asm"
echo "avis input: $avis_input"
echo "mp4 output: $mp4_output"
echo "pthread:    $pthread"
echo "debug:      $debug"
echo "gprof:      $gprof"
echo "PIC:        $pic"
echo "shared:     $shared"
echo "visualize:  $vis"
echo
echo "You can run 'make' or 'make fprofiled' now."

