#!/bin/sh
#
# GPAC configure script
#     (c) 2003-2022 Telecom ParisTech
#     Authors: Jean Le Feuvre, Romain Bouqueau, Aurelien David
#
#set -v

#set temporary file name
if test ! -z "$TMPDIR" ; then
    TMPDIR1="${TMPDIR}"
elif test ! -z "$TEMPDIR" ; then
    TMPDIR1="${TEMPDIR}"
else
    TMPDIR1="/tmp"
fi


#remember the ./configure command line
GPAC_CONFIGURATION="$@"

TMPC="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.c"
TMPH="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.h"
TMPCXX="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.cpp"
TMPE="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}"
TMPO="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.o"
TMPS="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.S"
TMPL="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.LOG"

#default parameters
DESTDIR=""
prefix="/usr/local"
mandir=""
cross_prefix=""
targetos=""
dxsdk_path=""
moz_path="local"

cc_orig=$CC
if test "$cc_orig" = "" ; then
cc_orig="gcc"
fi

cxx_orig=$CXX
if test "$cxx_orig" = "" ; then
cxx_orig="g++"
fi

ar="ar"
ranlib="ranlib"
make="make"
strip="strip"
pkg_config="pkg-config"
windres="windres"
readelf="readelf"
install="${INSTALL:=install}"
instflags="${INSTFLAGS:=-p}"
cpu=`uname -m`
debuginfo="no"
sdl_path=""
sdl_local="no"
sdl_static="no"
verbose="no"
xulsdk_path="/usr/lib/xulrunner/sdk/include"
xul_flags=""
libdir="lib"

#GPAC module config
static_modules="no"
lm_lib=""
has_mingw_directx="no"
has_js="no"
has_platinum="no"
has_ft="no"
has_jpeg="no"
has_png="no"
has_xvid="no"
has_mad="no"
has_faad="no"
has_ffmpeg="no"
ffmpeg_vvc="no"
has_amr_nb_fixed="no"
has_amr_nb="no"
has_amr_wb="no"
has_ogg="no"
has_vorbis="no"
has_theora="no"
has_a52="no"
has_pulseaudio="no"
has_oss_audio="no"
has_alsa="no"
has_jack="no"
has_directfb="no"
has_x11="no"
has_x11_shm="no"
has_x11_xv="no"
no_gcc_opt="no"
use_fixed_point="no"
use_memory_tracking="no"
has_opengl="no"
has_tinygl="no"
enable_tinygl="no"
has_ssl="no"
has_ipv6="no"
has_dvb4linux="no"
has_openjpeg="no"
gprof_build="no"
static_build="no"
want_pic="no"
want_gcov="no"
has_joystick="no"
has_hid="no"
has_sock_un="no"
has_lzma="no"
has_nghttp2="no"
enable_joystick="no"
static_bin="no"
disable_core_tools="no"
disable_3d="no"
disable_svg="no"
disable_vrml="no"
disable_x3d="no"
disable_od="no"
disable_bifs="no"
disable_bifs_enc="no"
disable_laser="no"
disable_saf="no"
disable_smgr="no"
disable_seng="no"
disable_qtvr="no"
disable_avi="no"
disable_m2ps="no"
disable_m2ts="no"
disable_m2ts_mux="no"
disable_ogg="no"
disable_parsers="no"
disable_import="no"
disable_export="no"
disable_swf="no"
disable_scene_stats="no"
disable_scene_dump="no"
disable_scene_encode="no"
disable_loader_isoff="no"
disable_loader_bt="no"
disable_loader_xmt="no"
disable_od_dump="no"
disable_od_parse="no"
disable_isom_dump="no"
disable_crypto="no"
disable_mpd="no"
disable_dash="no"
disable_isoff="no"
disable_isoff_write="no"
disable_isoff_frag="no"
disable_isoff_hint="no"
disable_isoff_frag="no"
disable_isoff_hds="no"
disable_streaming="no"
disable_player="no"
disable_scenegraph="no"
disable_dvbx="yes"
disable_vobsub="no"
disable_ttxt="no"
disable_ttml="no"
disable_hevc="no"
disable_route="no"
disable_crypto="no"
disable_log="no"
disable_nvdec="no"
enable_qjs="yes"
enable_qjs_libc="yes"
enable_depth_compositor="no"
enable_sanitizer="no"
has_opensvc="no"
has_openhevc="no"
has_vtb="no"
has_strlcpy="no"
disable_codecs="no"
enable_qjs_stack_check="no"

win32="no"
mingw32="no"
cygwin="no"
linux="no"
freebsd="no"
darwin="no"
sunos="no"
alt_macosx_dir=""
Mac_Applications=""
extralibs="-lm"
bigendian="no"
SHFLAGS=-shared
need_inet_aton="no"
CFLAGS=""
CXXFLAGS=""
GPAC_SH_FLAGS=-lpthread
DYN_LIB_SUFFIX=".so"
X11_PATH="/usr/X11R6"
OSS_CFLAGS=""
OSS_LDFLAGS=""
INSTFLAGS=""
is_64="no"
ffmpeg_extra_ldflags=""
has_st_nsec="no"

logs="config.log"
echo "Logs for GPAC configure $GPAC_CONFIGURATION" > $logs


#configure usage
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    cat << EOF

Usage: configure [options]
Options: [defaults in brackets after descriptions]

GPAC configuration options:
  --help                   print this message
  --prefix=PREFIX          install in PREFIX [$prefix]
  --mandir=DIR             man documentation in DIR [PREFIX/share/man]

  --verbose                enable verbose building [$verbose]
  --source-path=PATH       path of source code [$source_path]
  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
  --target-os=TARGETOS     use TARGETOS for compile tools [$targetos]
  --cc=CC                  use C   compiler CC  [$cc]
  --cxx=CXX                use C++ compiler CXX [$cxx]
  --make=MAKE              use specified make [$make]
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
  --cpu=CPU                force cpu to CPU  [$cpu]
  --sdl-cfg=SDL_PATH       specify path to sdl-config for local install [$sdl_path]
  --enable-sdl-static      use static SDL linking [default=no]
  --X11-path=X11_PATH      specify path for X11 includes and libraries [$X11_PATH]
  --dxsdk-path=DX_PATH     specify directX SDK for MinGW [$dxsdk_path]
  --xulsdk-path=XUL_PATH   specify Mozilla XUL (Gecko) SDK include path [$xulsdk_path]
  --mozdir=MOZ_PATH        specify mozilla main directory path for system install
  --extra-ff-ldflags=ELDFLAGS add ELDFLAGS to FFMPEG LDFLAGS [$ffmpeg_extra_ldflags]

  --enable-debug           produce debug version
  --enable-gprof           enable profiling
  --enable-gcov            enable coverage
  --enable-pic             enable Position Independant Code for shared objects
  --strip                  enable strip
  --std-allocator          uses standard lib memory allocator
  --enable-mem-track       enable tracking of all memory allocated by gpac
  --enable-sanitizer       enable address sanitizer
  --enable-afl             enable instrumentation for American Fuzzy Lop
  --enable-afl-clang       enable instrumentation for American Fuzzy Lop using afl-clang(++)
  --disable-opt            disable GCC optimizations
  --disable-ipv6           disable IPV6 support
  --disable-platinum       disable Platinum UPnP support
  --disable-alsa           disable Alsa audio
  --disable-oss-audio      disable OSS audio
  --enable-jack            enable  Jack audio
  --disable-jack           disable Jack audio
  --enable-pulseaudio      enable  Pulse audio
  --disable-pulseaudio     disable Pulse audio
  --disable-x11            disable X11
  --disable-x11-shm        disable X11 shared memory support
  --disable-x11-xv         disable X11 Xvideo support
  --enable-fixed-point     enable fixed-point math
  --enable-tinygl          enable TinyGL support
  --enable-joystick        enable joystick support
  --disable-ssl            disable OpenSSL support
  --enable-amr-nb-fixed    enable AMR NB fixed-point decoder
  --enable-amr-nb          enable AMR NB library
  --enable-amr-wb          enable AMR WB library
  --enable-amr             enable both AMR NB and WB libraries
  --static-modules         use static modules in libgpac rather than dynamic library modules
  --static-build           link statically against libgpac but still allow dependencies to shared libraries (enable --static-modules)
  --enable-static-bin      old name for --static-build, deprecated
  --static-bin             enable static linking of MP4Box and gpac only (enable --static-build), disable MP4Client and all libraries not linkable statically.
  --static-mp4box          old name for --static-bin, deprecated
  --enable-depth           enables depth handling in the compositor
  --enable-qjs-stack       enables stack depth checking in QuickJS (WILL CRASH in multithreaded modes)

Configuration options for libgpac - all options can be enabled with --enable-optname
  --disable-all            disables all features in libgpac
  --disable-3d             disable 3D rendering
  --disable-svg            disable SVG
  --disable-vrml           disable MPEG-4/VRML/X3D
  --disable-x3d            disable X3D only
  --disable-odf            disable full support of MPEG-4 OD Framework
  --disable-bifs           disable BIFS
  --disable-bifs-enc       disable BIFS coder
  --disable-laser          disable LASeR coder
  --disable-saf            disable SAF container
  --disable-seng           disable scene encoder engine
  --disable-qtvr           disable import of Cubic QTVR files
  --disable-avi            disable AVI
  --disable-ogg            disable OGG
  --disable-m2ps           disable MPEG2 PS
  --disable-m2ts           disable MPEG2 TS
  --disable-m2ts-mux       disable MPEG2 TS Multiplexer
  --disable-dvb4linux      disable dvb4linux support
  --disable-parsers        disable AV parsers
  --disable-import         disable media importers
  --disable-export         disable media exporters
  --disable-swf            disable SWF import
  --disable-scene-stats    disable scene graph statistics
  --disable-scene-dump     disable scene graph dump
  --disable-scene-encode   disable BIFS & LASeR to ISO File Format encoding
  --disable-loader-isoff   disable scene loading from ISO File Format
  --disable-loader-bt      disable scene loading from ISO File Format
  --disable-loader-xmt     disable scene loading from ISO File Format
  --disable-od-dump        disable OD dump
  --disable-isom-dump      disable ISOM dump
  --disable-crypt          disable crypto tools
  --disable-isoff          disable ISO File Format
  --disable-isoff-write    disable ISO File Format edit/write
  --disable-isoff-hint     disable ISO File Format hinting
  --disable-isoff-frag     disable fragments in ISO File Format
  --disable-isoff-hds      disable HDS support in ISO File Format
  --disable-streaming      disable RTP/RTSP/SDP
  --disable-dvbx           disable DVB-specific tools (MPE, FEC, DSM-CC)
  --disable-vobsub         disable VobSub support
  --disable-sman           disable scene manager
  --disable-ttxt           disable TTXT (3GPP / MPEG-4 Timed Text) support
  --disable-player         disable player (terminal and compositor)
  --disable-scenegraph     disable scenegraph, scene parsers and player (terminal and compositor)
  --disable-hevc           disable HEVC support
  --disable-route          disable ROUTE (ATSC3) support
  --disable-crypto         disable crypto support
  --disable-nvdec          disable NVDec support
  --disable-codecs         disable all media decoders and encoders

Extra libraries configuration. You can turn a library off or force using the local version in gpac/extra_lib/
  --use-ft=OPT             force FreeType OPT=[no,local]
  --use-zlib=OPT           force ZLIB OPT=[no,system,local]
  --use-jpeg=OPT           force JPEG OPT=[no,local]
  --use-png=OPT            force PNG OPT=[no,local]
  --use-faad=OPT           force FAAD OPT=[no,local]
  --use-mad=OPT            force MAD OPT=[no,local]
  --use-xvid=OPT           force XVID OPT=[no,local]
  --use-ffmpeg=OPT         force FFMPEG OPT=[no,local]
  --use-ogg=OPT            force OGG OPT=[no,system,local]
  --use-vorbis=OPT         force vorbis OPT=[no,system,local]
  --use-theora=OPT         force theora OPT=[no,system,local]
  --use-openjpeg=OPT       force openjpeg OPT=[no,system,local]
  --use-a52=OPT            force a52 (ac3) OPT=[no,system,local]

NOTE: The object files are built at the place where configure is launched
EOF
exit 1
fi

use_static="no"

for opt do
    case "$opt" in
        --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`
            ;;
        --libdir=*) libdir=`echo $opt | cut -d '=' -f 2`
            ;;
        --mandir=*) mandir=`echo $opt | cut -d '=' -f 2`
            ;;
        --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` && echo "cross-prefix detected: $cross_prefix"
            ;;
        --target-os=*) targetos=`echo $opt | cut -d '=' -f 2` && echo "target-os detected: $targetos"
            ;;
        --cc=*) cc_orig=`echo $opt | cut -d '=' -f 2`
            ;;
        --cxx=*) cxx_orig=`echo $opt | cut -d '=' -f 2`
            ;;
        --cpp=*) cxx_orig=`echo $opt | cut -d '=' -f 2`
            ;;
        --make=*) make=`echo $opt | cut -d '=' -f 2`
            ;;
        --extra-cflags=*) CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
            ;;
        --extra-ldflags=*) LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}"
            ;;
        --extra-ff-ldflags=*) ffmpeg_extra_ldflags=`echo $opt | cut -d '=' -f 2`
            ;;
        --extra-libs=*) extralibs=${opt#--extra-libs=}
            ;;
        --cpu=*) cpu=`echo $opt | cut -d '=' -f 2`
            ;;
        --enable-debug) debuginfo="yes"; no_gcc_opt="yes"
            ;;
        --disable-opt) no_gcc_opt="yes"
            ;;
        --enable-pic) want_pic="yes";
            ;;
        --enable-gcov) want_gcov="yes";
            ;;
        --enable-afl) cc_orig="afl-gcc"; cxx_orig="afl-g++"
            ;;
        --enable-afl-clang) cc_orig="afl-clang"; cxx_orig="afl-clang++"
            ;;
        --verbose) verbose="yes";
            ;;
        --static-bin) use_static="yes"
            ;;
        --static-mp4box) use_static="yes"
            ;;
        --enable-sanitizer) enable_sanitizer="yes"
            ;;
    esac
done


cc="${cc_orig}"
cxx="${cxx_orig}"

case "$cpu" in
    i386|i486|i586|i686|i86pc|BePC)
        cpu="x86"
        ;;
    x86_64|amd64)
        cpu="x86"
        if [ "$linux" = "yes" -o "$darwin" = "yes" ] ; then
            is_64="yes"
        fi
        case `uname -s` in
            SunOS)
                canon_arch=`isainfo -n`
                ;;
            Darwin)
                canon_arch="x86_64"
                ;;
            *)
                canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
                ;;
        esac

        if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
            if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
                cpu="x86_64"
                want_pic="yes"
            is_64="yes"
            fi
        fi
        ;;
    armv4l|arm)
        cpu="armv4l"
        ;;
    alpha)
        cpu="alpha"
        ;;
    ppc64)
        cpu="powerpc"
        ;;
    "Power Macintosh"|ppc)
        cpu="powerpc"
        ;;
    mips)
        cpu="mips"
        ;;
    sh4|sh4a|sh)
        cpu="sh4"
        ;;
    sun4u|sun4v)
        cpu="sparc"
        if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then
            is_64="yes"
            PIC_CFLAGS="-fPIC -DPIC"
            want_pic="yes"
        fi
        ;;
    *)
        cpu="unknown"
        ;;
esac

#checking for CFLAGS
if test -z "$CFLAGS"; then
    CFLAGS=""
fi


cc="${cross_prefix}${cc}"
#for ccache
cc="${cc}"
cxx="${cross_prefix}${cxx}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"
windres="${cross_prefix}${windres}"

if test "$enable_sanitizer" = "yes" ; then
if test "$use_static" = "yes" ; then
echo "Cannot use static bin with sanitizer, disabling static bin"
use_static="no"
fi
fi

if test "$use_static" = "yes" ; then
pkg_config="${pkg_config} --static"
if test "$darwin" != "yes" ; then
  LDFLAGS="-static $LDFLAGS"
fi
else
pkg_config="${pkg_config}"
fi

#check pkg_config
if test "$cross_prefix" = "" ; then
    if ! $pkg_config --version >/dev/null 2>>$logs ; then
        pkg_config="no"
    fi
fi


#find source path
source_path="`echo $0 | sed -e 's#/configure##'`"
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
    source_path="`pwd`"
    source_path_used="no"
    build_path=$source_path
else
    source_path="`cd \"$source_path\"; pwd`"
    build_path="`pwd`"
fi


#OS specific
if test "$targetos" = "" ; then
    targetos=`uname -s`
fi
case $targetos in
    BeOS)
        prefix="/boot/home/config"
        CFLAGS="$CFLAGS -DPIC -fomit-frame-pointer"
        # 3 gcc releases known for BeOS, each with ugly bugs
        gcc_version="$($cc -v 2>>$logs | grep version | cut -d ' ' -f3-)"
        case "$gcc_version" in
            2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
                ;;
            *20010315*) echo "BeBits gcc"
                CFLAGS="$CFLAGS -fno-expensive-optimizations"
                ;;
        esac

        SHFLAGS=-nostart
        #no need for libm, but the inet stuff
        #check for BONE
        if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
            extralibs="-lbind -lsocket"
        else
            need_inet_aton="yes"
            extralibs="-lnet"
        fi
        ;;

    SunOS)
        make="gmake"
        readelf="greadelf"
        LDFLAGS="$LDFLAGS"
        instflags=""
        #check for 64-bit
        cat > $TMPC << EOF
#include <stdio.h>
int main( void ) { return 0; }
EOF
        CFLAGS_NO_LTO=$(echo ${CFLAGS} | sed -e 's/\ -flto[-A-Za-z0-9=]*//g')
        $cc ${CFLAGS_NO_LTO} -o $TMPO $TMPC 2>>$logs && $($readelf -h $TMPO | grep "Class:.*ELF64$" >/dev/null 2>>$logs)
        if test $? -eq 0; then
          is_64="yes"
        fi
        if test "$is_64" = "yes"; then
            if test "$cpu" = "x86_64"; then
                libdir=lib/amd64
            elif test "$cpu" = "sparc"; then
                libdir=lib/sparcv9
            fi
        fi
        sunos="yes"
        need_inet_aton="yes"
        extralibs="$extralibs -lsocket -lnsl"
        ;;

    FreeBSD)
        make="gmake"
        LDFLAGS="$LDFLAGS -export-dynamic"
        CFLAGS="$CFLAGS -pthread"
        GPAC_SH_FLAGS=-pthread
        freebsd="yes"
        ;;

    BSD/OS)
        extralibs="-lpoll -lgnugetopt -lm"
        make="gmake"
        ;;

    Darwin)
        CFLAGS_DIR="-I$prefix/include"
        LDFLAGS="-L$prefix/$libdir"
        if test -d /sw/bin ; then
            alt_macosx_dir="/sw"
            CFLAGS_DIR="-I/sw/include $CFLAGS_DIR"
            LDFLAGS="-L/sw/lib $LDFLAGS"
        elif test -d /opt/local/bin ; then
            alt_macosx_dir="/opt/local"
            CFLAGS_DIR="-I/opt/local/include $CFLAGS_DIR"
            LDFLAGS="-L/opt/local/lib $LDFLAGS"
        fi
        Mac_Applications="/Applications"
        SHFLAGS="-dynamiclib"
        DYN_LIB_SUFFIX=".dylib"
        extralibs=""
        GPAC_SH_FLAGS=""
        strip="strip -x"
        if test "$is_64" = "yes" ; then
            LDFLAGS="$LDFLAGS"
        fi
        darwin="yes"
        gcc_version=`$cc -v 2>>$logs | grep version | cut -d ' ' -f3`
        case "$gcc_version" in
            *2.95*)
                CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer"
                ;;
            3.*)
                CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer -mdynamic-no-pic -fno-common"
                ;;
            4.*)
                CFLAGS="$CFLAGS -pipe -fomit-frame-pointer -fno-common"
                ;;
        esac
        ;;

    MINGW32*|mingw32|MINGW64*|mingw64|msys*|MSYS*)
        mingw32="yes"
        win32="yes"
        want_pic="no"
        #ugly patch for msys2 mingw32/mingw64 where toolchain is not properly setup
        if [ x"$MSYSTEM" = x"MSYS" ] && [ -e /mingw64 ]; then
          extralibs="$extralibs -lws2_32 -lwinmm -limagehlp"
          CFLAGS="$CFLAGS -I/mingw64/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
          LDFLAGS="$LDFLAGS -L/mingw64/lib"
        elif [ x"$MSYSTEM" = x"MSYS" ] && [ -e /mingw32 ]; then
          extralibs="-L/mingw32/lib $extralibs -lws2_32 -lwinmm -limagehlp"
          CFLAGS="$CFLAGS -I/mingw32/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
          LDFLAGS="$LDFLAGS -L/mingw32/lib"
        else
          extralibs="$extralibs -lws2_32 -lwinmm -limagehlp -ldbghelp"
          CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
        fi
		LDFLAGS="$LDFLAGS"
        if test "$cross_prefix" != "" ; then
            GPAC_SH_FLAGS=""
        fi
        ;;

    CYGWIN*|cygwin*)
        extralibs="$extralibs -lws2_32 -lwinmm"
        cygwin="yes"
        win32="yes"
        ;;

    Linux|linux|android)
        LDFLAGS="$LDFLAGS -Wl,--warn-common -Wl,-z,defs"
        linux="yes"
        case "$cpu" in
            sh4)
                CFLAGS="$CFLAGS -isystem \"$prefix/include\""
                ;;
        esac
		cat > $TMPC << EOF
#include <sys/cdefs.h>
#if !defined (__BIONIC__)
#error
#endif
EOF
		if $cc -c $CFLAGS $TMPC 0>/dev/null 2>$TMPL ; then
			#bionic libc (android)
			CFLAGS="$CFLAGS -DPTHREAD_HAS_NO_CANCEL"
			GPAC_SH_FLAGS=""
		fi
		;;

    *) ;;
esac


#defines directory for binaries and libs (ex. for TinyGL)
target_bin_dir=""
if test "$cross_prefix" = "" ; then
    target_bin_dir=`${cc} -v 2>>$logs | sed -n '2p' | awk ' {print $2}'`-${cc_orig}
else
    target_bin_dir=${cross_prefix}${cc_orig}
fi


#if test "$source_path_used" = "yes" ; then
mkdir -p extra_lib
mkdir -p extra_lib/lib
mkdir -p extra_lib/lib/gcc
#fi


#OK check for all local & systems lib
local_inc=$source_path/extra_lib/include
local_lib=$source_path/extra_lib/lib/gcc
execdir=$source_path/bin/gcc


dolog() {
 rv=$?
 if [ $rv -eq 0 ] ; then
 return 0;
 fi

 echo "*** CC/CXX Test Failed (args $@) : ">>$logs
 echo "">>$logs
 cat $TMPL >> $logs
 echo "">>$logs
 echo "Source was: ">>$logs
 cat $TMPC >> $logs
 echo "">>$logs
 echo "">>$logs
 return 1;
}

docc() {
 $cc -o $TMPO $TMPC $@ 0>/dev/null 2>$TMPL
 dolog $@
}


docxx() {
 $cc -o $TMPO $TMPCXX $@ 0>/dev/null 2>$TMPL
 dolog $@
}

#check GCC flags support
cat > $TMPC << EOF
#include <stdio.h>
int main( void ) { return 0; }
EOF
CFLAGS="$CFLAGS -Wall"
if docc -fno-strict-aliasing ; then
    CFLAGS="$CFLAGS -fno-strict-aliasing"
fi
CXXFLAGS="$CFLAGS"
if docc -lz -Wno-pointer-sign ; then
    CFLAGS="$CFLAGS -Wno-pointer-sign"
fi


#GCC opt
if test "$no_gcc_opt" = "no"; then
    CFLAGS="-O3 $CFLAGS"
else
    CFLAGS="-O0 $CFLAGS"
fi


#GCC PIC
if test "$cross_prefix" != "" ; then
    want_pic="no"
fi
if test "$want_pic"  = "yes" ; then
    CFLAGS="$CFLAGS -fPIC -DPIC"
    CXXFLAGS="$CXXFLAGS -fPIC -DPIC"
fi

if test "$want_gcov"  = "yes" ; then
    CFLAGS="$CFLAGS --coverage"
    CXXFLAGS="$CXXFLAGS --coverage"
    LDFLAGS="$LDFLAGS --coverage"
fi

#force use of cflags with cc
cc_naked=$cc
cxx_naked=$cxx
cc="$cc $CFLAGS"
cxx="$cxx $CXXFLAGS"

#look for zlib
cat > $TMPC << EOF
#include <emmintrin.h>
int main( void ) { return 0; }
EOF

if docc -msse2 $LDFLAGS ; then
  CFLAGS="$CFLAGS -msse2"
fi


#look for zlib
cat > $TMPC << EOF
#include <string.h>
#include <stdio.h>
#include <zlib.h>
int main( void ) { if (strcmp(zlibVersion(), ZLIB_VERSION)) { puts("zlib version differs !!!"); return 1; } return 0; }
EOF
has_zlib="no"
if docc -lz $LDFLAGS ; then
  has_zlib="system"
fi
if test "$has_zlib" = "no" ; then
  if docc -I"$local_inc/zlib" -L$local_lib -lz ; then
    has_zlib="local"
  fi
fi

#check dlopen
cat > $TMPC << EOF
#include <dlfcn.h>
int main( void ) { dlopen("foo", 0); return 0; }
EOF

if docc ; then
    dlopen="yes"
elif docc $LDFLAGS -ldl ; then
    GPAC_SH_FLAGS="$GPAC_SH_FLAGS -ldl"
fi



#check st_mtim.tv_nsec
cat > $TMPC << EOF
#include <sys/stat.h>
int main( void ) { struct stat st; st.st_mtim.tv_nsec = 0; return 0; }
EOF

if docc ; then
    has_st_nsec="yes"
fi


#look for platinum support
cat > $TMPCXX << EOF
#include <Platinum.h>
int main( void ) { return 0; }
EOF
if docxx -I$local_inc/platinum $LDFLAGS -L$local_lib -lPlatinum -lPltMediaServer -lPltMediaConnect -lPltMediaRenderer -lNeptune -lZlib -lpthread ; then
  has_platinum="yes"
fi


#look for opensvc support

if test "$darwin" = "yes" ; then
  osvc_cflags="-I/usr/include -I/usr/local/include"
  osvc_ldflags="-L/usr/lib -L/usr/local/lib -lOpenSVCDec"
else
  osvc_cflags=""
  osvc_ldflags="-lOpenSVCDec"
fi

cat > $TMPC << EOF
#include <OpenSVCDecoder/SVCDecoder_ietr_api.h>
int main( void ) { return 0; }
EOF
if docc $osvc_cflags $LDFLAGS $osvc_ldflags ; then
  has_opensvc="yes"
else
osvc_cflags="-idirafter $local_inc"
osvc_ldflags="-lOpenSVCDec"

if docc $osvc_cflags $LDFLAGS -L$local_lib $osvc_ldflags ; then
  has_opensvc="yes"
  osvc_ldflags="-L$local_lib $osvc_ldflags"
fi

fi

#look for openhevc support

if test "$darwin" = "yes" ; then
  ohevc_cflags="-I/usr/include -I/usr/local/include"
  ohevc_ldflags="-L/usr/lib -L/usr/local/lib -lopenhevc -lm -lpthread "
elif test "$cross_prefix" = "" ; then
  ohevc_cflags="-I/usr/include -I/usr/local/include"
  ohevc_ldflags="-L/usr/lib -L/usr/local/lib -lopenhevc -lm -lpthread"
else
  ohevc_cflags="-I${prefix}include"
  ohevc_ldflags="-lopenhevc -lm -lpthread"
fi

cat > $TMPC << EOF
#include <stdio.h>
#include <libopenhevc/openhevc.h>
int main( void ) { oh_init(1, 1); return 0; }
EOF
if docc $ohevc_cflags $ohevc_ldflags $LDFLAGS ; then
  has_openhevc="yes"
else
  ohevc_cflags="-I$local_inc"
  ohevc_ldflags="-lopenhevc -lm -lpthread"
  if docc $ohevc_cflags $ohevc_ldflags $LDFLAGS -L$local_lib ; then
    has_openhevc="yes"
    ohevc_ldflags="-L$local_lib $ohevc_ldflags"
  elif docc $ohevc_cflags $ohevc_ldflags $LDFLAGS -L$execdir ; then
    has_openhevc="yes"
    ohevc_ldflags="-L$execdir $ohevc_ldflags"
  fi
fi

#look for freetype support
cat > $TMPC << EOF
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include FT_OUTLINE_H
int main( void ) { return 0; }
EOF
ft_cflags="-I$prefix/include "
ft_lflags="-L$prefix/$libdir -lfreetype"
if docc $CFLAGS_DIR $ft_cflags $ft_lflags $LDFLAGS ; then
    has_ft="system"
fi

if test "$has_ft" = "no" ; then
    ft_cflags="`pkg-config --cflags freetype2 2>>$logs`"
    ft_lflags="`pkg-config --libs freetype2 2>>$logs`"
    if docc $ft_cflags $ft_lflags $LDFLAGS ; then
        has_ft="system"
    fi
fi

if test "$has_ft" = "no" ; then
    ft_cflags="-I$local_inc/freetype"
    ft_lflags="-L$local_lib -lfreetype"
    if docc $ft_cflags $ft_lflags $LDFLAGS ; then
        has_ft="local"
    fi
fi
#end freetype test


#look for OpenSSL support
cat > $TMPC << EOF
#include <openssl/ssl.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/rand.h>
int main( void ) { return 0; }
EOF

if test "$mingw32" = "yes" ; then
    LINK_SSL="-lssl -lcrypto"
elif test "$win32" = "yes" ; then
    LINK_SSL="-lssleay32 -leay32"
else
    LINK_SSL="-lssl -lcrypto"
fi

if docc $CFLAGS_DIR $LINK_SSL $LDFLAGS ; then
    has_ssl="yes"
fi


#look for atomic.h
cat > $TMPC << EOF
#include <pthread.h>
#include <stdatomic.h>
int main( void ) { return 0; }
EOF

has_atomic="no"
if docc $CFLAGS_DIR $LDFLAGS ; then
    has_atomic="yes"
else
    CFLAGS="$CFLAGS -DGPAC_NO_STDATOMIC"
fi


cat > $TMPC << EOF
#include <stdint.h>
int main(void) {
    int i4 = 4;
    __int64_t i8 = 8;
    __sync_add_and_fetch(&i4, 12);
    __sync_add_and_fetch(&i8, 12);
}
EOF
has_builtinatomic="no"
if docc ; then
    has_builtinatomic="yes"
else
cat > $TMPC << EOF
#include <stdint.h>
int main(void) {
    int i4 = 4;
    __int64_t i8 = 8;
    __atomic_add_fetch(&i4, 12, __ATOMIC_SEQ_CST);
    __atomic_add_fetch(&i8, 12, __ATOMIC_SEQ_CST);
}
EOF
    if docc -latomic ; then
        CFLAGS="$CFLAGS -DGPAC_NEED_LIBATOMIC"
        LDFLAGS="$LDFLAGS -latomic"
    fi
fi

#look for JPEG support
cat > $TMPC << EOF
#include <stdio.h>
#include <jpeglib.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -ljpeg ; then
	has_jpeg="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_jpeg" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -ljpeg 2>>$logs ; then
                has_jpeg="system"
            fi
        elif test "`which $prefix/bin/jpeg-config 2>>$logs`" != ""; then
            jpeg_cflags="`$prefix/bin/jpeg-config --cflags`"
            jpeg_lflags="`$prefix/bin/jpeg-config --libs`"
            if docc $jpeg_cflags $jpeg_lflags $LDFLAGS ; then
                has_jpeg="system"
            fi
        else
            jpeg_cflags="-I$prefix/include"
            jpeg_lflags="-L$prefix/$libdir -ljpeg"
            if docc $jpeg_cflags $jpeg_lflags $LDFLAGS ; then
                has_jpeg="system"
            fi
        fi
    fi
fi
if test "$has_jpeg" = "no" ; then
    jpeg_cflags="-I$local_inc/jpeg"
    jpeg_lflags="-L$local_lib -ljpeg"
    if docc $jpeg_cflags $jpeg_lflags $LDFLAGS ; then
        has_jpeg="local"
    fi
fi



#look for OpenJPEG support

if test "$cross_prefix" = "" -a "$pkg_config" != "no"; then
  if $pkg_config --exists libopenjp2 ; then
    has_openjpeg="system"
    openjpeg_cflags=`$pkg_config --cflags libopenjp2`
    openjpeg_ldflags=`$pkg_config --libs libopenjp2`
  elif $pkg_config --exists libopenjpeg ; then
    has_openjpeg="system"
    openjpeg_cflags=`$pkg_config --cflags libopenjpeg`
    openjpeg_ldflags=`$pkg_config --libs libopenjpeg`
  fi
fi

if test "$has_openjpeg" = "no" ; then
cat > $TMPC << EOF
#include <stdio.h>
#include <openjpeg.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -lopenjpeg ; then
    has_openjpeg="system"
    openjpeg_ldflags="-lopenjpeg"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_openjpeg" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lopenjpeg 2>>$logs ; then
                has_openjpeg="system"
		openjpeg_ldflags="-lopenjpeg"
            fi
        fi
    fi
fi

if test "$has_openjpeg" = "no" ; then
    if docc -I$local_inc/openjpeg -L$local_lib -lopenjpeg $LDFLAGS ; then
        has_openjpeg="local"
	openjpeg_ldflags="-lopenjpeg"
    fi
fi

fi


#look for PNG support
cat > $TMPC << EOF
#include <png.h>
int main( void ) { return 0; }
EOF

png_cflags="-I$prefix/include"
png_lflags="-L$prefix/$libdir -lpng -lz"
if docc $png_cflags $png_lflags $LDFLAGS ; then
    has_png="system"
elif docc $LDFLAGS -lpng -lz ; then
    has_png="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_png" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lpng 2>>$logs ; then
                has_png="system"
            fi
        fi
    fi
fi
if test "$has_png" = "no" ; then
    if docc -I$local_inc/png -L$local_lib -lpng $LDFLAGS ; then
        has_png="local"
    fi
fi



#look for MAD support
cat > $TMPC << EOF
#include <mad.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -lmad ; then
    has_mad="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_mad" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lmad 2>>$logs ; then
                has_mad="system"
            fi
        fi
    fi
fi
if test "$has_mad" = "no" ; then
    if docc -I$local_inc -L$local_lib -lmad $LDFLAGS ; then
        has_mad="local"
    fi
fi


#look for A52DEC support
cat > $TMPC << EOF
#include <inttypes.h>
#define uint32_t unsigned int
#define uint8_t unsigned char
#include <a52dec/mm_accel.h>
#include <a52dec/a52.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -la52 ; then
    has_a52="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_a52" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -la52 2>>$logs ; then
                has_a52="system"
            fi
        fi
    fi
fi
if test "$has_a52" = "no" ; then
    if docc -I$local_inc -L$local_lib -la52 $LDFLAGS ; then
        has_a52="local"
    fi
fi


#look for XVID support
cat > $TMPC << EOF
#include <xvid.h>
int main( void ) { return 0; }
EOF

if docc -I$prefix/include -L$prefix/$libdir $LDFLAGS -lxvidcore -lpthread ; then
    has_xvid="system"
elif docc $LDFLAGS -lxvidcore -lpthread ; then
    has_xvid="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_xvid" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lxvidcore -lpthread 2>>$logs ; then
                has_xvid="system"
            fi
        fi
    fi
fi
if test "$has_xvid" = "no" ; then
    if docc -I$local_inc -L$local_lib -lxvidcore -lpthread  $LDFLAGS ; then
        has_xvid="local"
    fi
fi


#look for FAAD support
cat > $TMPC << EOF
#include <faad.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -lfaad -lm ; then
    has_faad="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_faad" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lfaad 2>>$logs ; then
                has_faad="system"
            fi
        fi
    fi
fi
if test "$has_faad" = "no" ; then
    if docc -I$local_inc -L$local_lib -lfaad -lm $LDFLAGS ; then
        has_faad="local"
    fi
fi


#look for FFMPEG support

ffmpeg_cflags=""
ffmpeg_lflags="-lz -lavcodec -lavformat -lavutil -lavdevice -lswscale -lswresample -lavfilter $ffmpeg_extra_ldflags"

if test "$cross_prefix" = "" -a "$pkg_config" != "no"; then
  if $pkg_config --exists libavcodec libavformat libswscale libavdevice libavutil libswresample libavfilter ; then
    ffmpeg_cflags=`$pkg_config --cflags libavcodec libavformat libavutil libavdevice libswscale libswresample libavfilter`
    ffmpeg_lflags=`$pkg_config --libs libavcodec libavformat libavutil libavdevice libswscale libswresample libavfilter`
    has_ffmpeg="system"
  fi
fi

cat > $TMPC << EOF
#include <libavcodec/avcodec.h>
int main(void) {
    return 0;
}
EOF

if docc $ffmpeg_cflags $ffmpeg_lflags $LDFLAGS ; then
    old_ffmpeg_inc="no"
else
    old_ffmpeg_inc="yes"

# this is immediatly overwritten below??
cat > $TMPC << EOF
#include <ffmpeg/avcodec.h>
#include <stdio.h>
int main(void) {
    AVFrame *f1, *f2;
    printf("ID %d", AV_CODEC_ID_H264);
    f2 = av_frame_clone(f1);
    return 0;
}
EOF

fi

cat > $TMPC << EOF
#include <libavcodec/avcodec.h>
#include <stdio.h>
int main(void) {
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 25, 0 )
    printf("ID %d", AV_CODEC_ID_H264);
#else
    printf("ID %d", CODEC_ID_H264);
#endif
    return 0;
}
EOF

if docc -I$prefix/include -L$prefix/$libdir $ffmpeg_lflags $LDFLAGS ; then
    has_ffmpeg="system"
    ffmpeg_cflags="-I$prefix/include"
    ffmpeg_lflags="-L$prefix/$libdir $ffmpeg_lflags"
elif docc $ffmpeg_lflags $LDFLAGS ; then
    has_ffmpeg="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_ffmpeg" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $ffmpeg_lflags $LDFLAGS 2>>$logs ; then
                has_ffmpeg="system"
                ffmpeg_cflags="-I$alt_macosx_dir/include"
                ffmpeg_lflags="-L$alt_macosx_dir/lib $ffmpeg_lflags"
            fi
        fi
    fi
fi
if test "$has_ffmpeg" = "no" ; then
    if docc -I$local_inc -L$local_lib $ffmpeg_lflags  $LDFLAGS ; then
        has_ffmpeg="local"
        ffmpeg_cflags="-I$local_inc"
        ffmpeg_lflags="-L$local_lib $ffmpeg_lflags"
    fi
fi


#now that cflags has been correctly set, retest
cat > $TMPC << EOF
#include <libavcodec/avcodec.h>
int main(void) {
    return 0;
}
EOF

if docc $ffmpeg_cflags $ffmpeg_lflags $LDFLAGS ; then
    old_ffmpeg_inc="no"
else
    old_ffmpeg_inc="yes"
fi


cat > $TMPC << EOF
#include <libavutil/frame.h>
#include <libavcodec/avcodec.h>
#include <stdio.h>
int main(void) {
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 25, 0 )
    printf("ID %d", AV_CODEC_ID_H264);
#else
    printf("ID %d", CODEC_ID_H264);
#endif
    return 0;
}
EOF
if docc $ffmpeg_cflags $ffmpeg_lflags ; then
    is_libav="no"
else

cat > $TMPC << EOF
#include <libavcodec/avcodec.h>
int main(void) {
    printf("ID %d", CODEC_ID_H264);
    return 0;
}
EOF

    if docc $ffmpeg_cflags $ffmpeg_lflags ; then
        is_libav="yes"
    else
        is_libav="new"
    fi
fi

#detect libswresample for dashcast only
cat > $TMPC << EOF
#include "libswresample/swresample.h"
int main(void) {
    SwrContext *aresampler = swr_alloc();
    free(aresampler);
    return 0;
}
EOF

if docc $ffmpeg_cflags $ffmpeg_lflags_dashcast -lswresample ; then
    has_libswresample="yes"
    ffmpeg_lflags_dashcast="$ffmpeg_lflags_dashcast -lswresample"
else
    has_libswresample="no"
fi


#detect vvc support in ffmpegf
cat > $TMPC << EOF
#include <libavcodec/avcodec.h>
int main(void) {
    AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_VVC);
    return 0;
}
EOF

if docc $ffmpeg_cflags $ffmpeg_lflags ; then
    ffmpeg_vvc="yes"
fi

#look for FREENECT support
freenect_flags=""
freenect_ld="-lfreenect"
has_freenect="no"
if test "$pkg_config" != "no"; then
  if $pkg_config --exists libfreenect ; then
    freenect_flags=`$pkg_config --cflags libfreenect`
    freenect_libs=`$pkg_config --libs libfreenect`
    has_freenect="system"
    freenect_flags="-DFREENECT_FLAT_HEADERS $freenect_flags"
  fi
fi

if test "$has_freenect" = "no"; then

cat > $TMPC << EOF
#include <libfreenect/libfreenect.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -lfreenect ; then
    has_freenect="system"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_freenect" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lfreenect 2>>$logs ; then
                has_freenect="system"
                freenect_flags=-I$alt_macosx_dir/include
                freenect_ld=-L$alt_macosx_dir/lib -lfreenect
            fi
        fi
    fi
fi
if test "$has_freenect" = "no" ; then
    if docc -I$local_inc/freenect -L$local_lib -lfreenect ; then
        has_freenect="local"
        freenect_flags=-I$local_inc/freenect
        freenect_ld=-L$local_lib -lfreenect
    fi
fi

fi


#look for vorbis support
cat > $TMPC << EOF
#include <vorbis/codec.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -lvorbis ; then
    has_vorbis="system"
elif test "$alt_macosx_dir" != "" ; then
    if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lvorbis 2>>$logs ; then
        has_vorbis="system"
    fi
elif docc -I$local_inc -L$local_lib -lvorbis -lm ; then
    has_vorbis="local"
fi



#look for theora support
cat > $TMPC << EOF
#include <theora/theora.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -ltheora ; then
    has_theora="system"
elif test "$alt_macosx_dir" != "" ; then
    if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -ltheora -logg 2>>$logs ; then
        has_theora="system"
    fi
elif docc -I$local_inc -L$local_lib -ltheora -logg -lm ; then
    has_theora="local"
fi



#look for OGG support
cat > $TMPC << EOF
#include <ogg/ogg.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -logg ; then
    has_ogg="system"
elif test "$alt_macosx_dir" != "" ; then
    if docc -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -logg 2>>$logs ; then
        has_ogg="system"
    fi
elif docc -I$local_inc -L$local_lib -logg -lm ; then
    has_ogg="local"
else
    has_vorbis=no
    has_theora=no
fi


#look for VideoToolBox support

if test "$darwin" = "yes" ; then
vtb_ldflags="-framework CoreFoundation -framework CoreVideo -framework CoreMedia -framework VideoToolBox"
	cat > $TMPC << EOF
#include <VideoToolbox/VideoToolbox.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS $vtb_ldflags ; then
    has_vtb="yes"
fi

fi



#look for OSS support
if test "$darwin" = "yes" ; then

    cat > $TMPC << EOF
#include <soundcard.h>
int main( void ) { return 0; }
EOF

    if docc -DLIBOSS_INTERNAL -I$alt_macosx_dir/include/ -I$alt_macosx_dir/include/liboss -L$alt_macosx_dir/lib -loss $LDFLAGS 2>>$logs ; then
        has_oss_audio="yes"
        OSS_CFLAGS="-DLIBOSS_INTERNAL -I$alt_macosx_dir/include/ -I$alt_macosx_dir/include/liboss"
        OSS_LDFLAGS="-L$alt_macosx_dir/lib -loss"
    fi

else

    cat > $TMPC << EOF
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/soundcard.h>
int main( void ) { return 0; }
EOF

    if docc ; then
        has_oss_audio="yes"
    else
        cat > $TMPC << EOF
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <soundcard.h>
int main( void ) { return 0; }
EOF

        if docc $LDFLAGS ; then
            has_oss_audio="yes"
        fi
    fi

fi

#look for IPv6
cat > $TMPC << EOF
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main( void ) {
struct sockaddr_storage saddr;
struct ipv6_mreq mreq6;
getaddrinfo(0,0,0,0);
getnameinfo(0,0,0,0,0,0,0);
memset(&saddr, 0, sizeof(saddr));
memset(&mreq6, 0, sizeof(mreq6));
IN6_IS_ADDR_MULTICAST( (struct in6_addr *) 0);
return 0;
}
EOF

if docc $LDFLAGS $extralibs ; then
    has_ipv6="yes"
fi



#look for DVB4linux
cat > $TMPC << EOF
#include <linux/dvb/dmx.h>
#include <linux/dvb/frontend.h>
int main( void ) {
}
EOF

if docc $LDFLAGS ; then
    has_dvb4linux="yes"
fi


#look for alsa
cat > $TMPC << EOF
#include <alsa/asoundlib.h>
int main( void ) {
return 0;
}
EOF

if docc $LDFLAGS ; then
    has_alsa="yes"
fi



#look for pulseaudio
cat > $TMPC << EOF
#include <pulse/pulseaudio.h>
int main( void ) {
return 0;
}
EOF

if docc $LDFLAGS ; then
    has_pulseaudio="yes"
fi



#look for jack
cat > $TMPC << EOF
#include <jack/jack.h>
int main( void ) {
return 0;
}
EOF
if docc $LDFLAGS ; then
    has_jack="yes"
fi



#look for directfb support
cat > $TMPC << EOF
#include <directfb.h>
int main( void ) { return 0; }
EOF
directfb_inc="/usr/include/directfb"
directfb_lib="-ldirectfb -lfusion -ldirect"
if docc -I$directfb_inc -L$directfb_lib $LDFLAGS ; then
    has_directfb="yes"
fi



#look for X11 shared memory support
cat > $TMPC << EOF
#include <X11/Xlib.h>
int main( void ) { return 0; }
EOF

if docc -I$X11_PATH/include -L$X11_PATH/lib $LDFLAGS ; then
    has_x11="yes"

    #look for X11 shared memory support
    cat > $TMPC << EOF
#include <X11/Xlib.h>
#include <X11/extensions/XShm.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main( void ) { return 0; }
EOF

    if docc -I$X11_PATH/include -L$X11_PATH/lib $LDFLAGS ; then
        has_x11_shm="yes"
    fi

    #look for XVideo support
    cat > $TMPC << EOF
#include <X11/Xlib.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/Xvlib.h>
int main( void ) { return 0; }
EOF

    if docc -I$X11_PATH/include -L$X11_PATH/lib $LDFLAGS ; then
        has_x11_xv="yes"
    fi

fi


#look for hid support
cat > $TMPC << EOF
#include <hidapi/hidapi.h>
int main( void ) { hid_init(); hid_exit(); return 0; }
EOF

if docc -lhidapi-hidraw $LDFLAGS ; then
    hid_lib="-lhidapi-hidraw"
    has_hid="yes"
fi

#look for sys/un.h support
cat > $TMPC << EOF
#include <sys/un.h>
int main( void ) { struct sockaddr_un serv_add; return 0; }
EOF

if docc $LDFLAGS ; then
    has_sock_un="yes"
fi


#look for lzma support
cat > $TMPC << EOF
#include <lzma.h>
int main( void ) { lzma_options_lzma opt_lzma2; lzma_lzma_preset(&opt_lzma2, 9); return 0; }
EOF

if docc $CFLAGS_DIR -llzma $LDFLAGS ; then
  has_lzma="yes"
fi

#look for strlcpy support
cat > $TMPC << EOF
#include <string.h>
int main( void ) {
    char dest[1];
    strlcpy(dest, "1", 1);
    return 0;
}
EOF

if docc $LDFLAGS ; then
    has_strlcpy="yes"
fi


#look for nghttp2 support

if test "$cross_prefix" = "" -a "$pkg_config" != "no"; then
  if $pkg_config --exists libnghttp2 ; then
    has_nghttp2="system"
    nghttp2_cflags=`$pkg_config --cflags libnghttp2`
    nghttp2_ldflags=`$pkg_config --libs libnghttp2`
  fi
fi

if test "$has_nghttp2" = "no" ; then
cat > $TMPC << EOF
#include <stdio.h>
#include <nghttp2/nghttp2.h>
int main( void ) { return 0; }
EOF

if docc $LDFLAGS -lnghttp2 ; then
    has_nghttp2="system"
    nghttp2_ldflags="-lnghttp2"
fi
if test "$cross_prefix" = "" ; then
    if test "$has_nghttp2" = "no" ; then
        if test "$alt_macosx_dir" != "" ; then
            if cc -o $TMPO $TMPC -I$alt_macosx_dir/include -L$alt_macosx_dir/lib $LDFLAGS -lnghttp2 2>>$logs ; then
                has_nghttp2="system"
                nghttp2_ldflags="-lnghttp2"
            fi
        fi
    fi
fi

if test "$has_nghttp2" = "no" ; then
    if docc -I$local_inc -L$local_lib -lnghttp2  $LDFLAGS ; then
        has_nghttp2="local"
        nghttp2_ldflags="-lnghttp2"
    fi
fi

fi


#overwrite detection with manual settings
for opt do
    case "$opt" in
        --static-modules) static_modules="yes"
            ;;
        --sdl-cfg=*) sdl_path=`echo $opt | cut -d '=' -f 2`; sdl_local="yes"
            ;;
        --enable-sdl-static=*) sdl_static="yes"
            ;;
        --enable-jack) has_jack="yes"
            ;;
        --X11-path=*) X11_PATH=`echo $opt | cut -d '=' -f 2`
            ;;
        --dxsdk-path=*) dxsdk_path=`echo $opt | cut -d '=' -f 2`
            ;;
        --xulsdk-path=*) xulsdk_path=`echo $opt | cut -d '=' -f 2`
            ;;
        --mozdir=*) moz_path=`echo $opt | cut -d '=' -f 2`
            ;;
        --enable-amr-nb-fixed) has_amr_nb_fixed="yes"
            ;;
        --disable-pulseaudio) has_pulseaudio="no"
            ;;
        --enable-amr-nb) has_amr_nb="yes"
            ;;
        --enable-amr-wb) has_amr_wb="yes"
            ;;
        --enable-amr) has_amr_wb="yes"; has_amr_nb="yes"
            ;;
        --disable-oggvorbis) has_oggvorbis="no"
            ;;
        --disable-jack) has_jack="no"
            ;;
        --disable-alsa) has_alsa="no"
            ;;
        --enable-gprof) gprof_build="yes";
            ;;
        --static-build) static_build="yes";
            ;;
        --enable-static-bin)
            echo "$opt deprecated, use --static-build instead"
            static_build="yes";
            ;;
        --disable-ipv6) has_ipv6="no"
            ;;
        --disable-platinum) has_platinum="no"
            ;;
        --disable-oss-audio) has_oss_audio="no"
            ;;
        --disable-x11) has_x11="no"
            ;;
        --disable-x11-shm) has_x11_shm="no"
            ;;
        --disable-x11-xv) has_x11_xv="no"
            ;;
        --enable-fixed-point) use_fixed_point="yes"
            ;;
        --strip) INSTFLAGS="-s $INSTFLAGS"
            ;;
        --enable-mem-track) use_memory_tracking="yes"
            ;;
        --enable-tinygl) enable_tinygl="yes"
            ;;
        --disable-ssl) has_ssl="no"
            ;;
        --disable-lzma) has_lzma="no"
            ;;
        --enable-depth) enable_depth_compositor="yes"
            ;;
        --enable-qjs-stack) enable_qjs_stack_check="yes"
            ;;
        --static-bin) static_bin="yes"
            ;;
        --static-mp4box)
            echo "$opt deprecated, use --static-bin instead"
            static_bin="yes"
            ;;
        --use-faad=*) has_faad=${opt#--use-faad=}
            ;;
        --use-js=*) has_js=${opt#--use-js=}
            ;;
        --use-ft=*) has_ft=${opt#--use-ft=}
            ;;
        --use-mad=*) has_mad=${opt#--use-mad=}
            ;;
        --use-a52=*) has_a52=${opt#--use-a52=}
            ;;
        --use-xvid=*) has_xvid=${opt#--use-xvid=}
            ;;
        --use-jpeg=*) has_jpeg=${opt#--use-jpeg=}
            ;;
        --use-ffmpeg=*) has_ffmpeg=${opt#--use-ffmpeg=}
            ;;
        --use-freenect=*) has_freenect=${opt#--use-freenect=}
            ;;
        --use-png=*) tmp_has_png=${opt#--use-png=}
            if test "$tmp_has_png" = "system" ; then
                if test "$has_png"  != "system" ; then
                    if test "$cross_prefix" != "" ; then
                        echo
                        echo "WARNING: PNG has been forced to system, but we are cross-compiling, it will have to be on target"
                        echo
                    else
                        echo
                        echo "WARNING!! : PNG has been forced to system even though it hasn't been found in this host"
                        echo
                    fi
                fi
            fi
            has_png=$tmp_has_png
            ;;
        --use-zlib=*) tmp_has_zlib=${opt#--use-zlib=}
            if test "$tmp_has_zlib" = "system" ; then
                if test "$has_zlib"  != "system" ; then
                    if test "$cross_prefix" != "" ; then
                        echo
                        echo "WARNING: ZLIB has been forced to system, but we are cross-compiling, it will have to be on target"
                        echo
                    else
                        echo
                        echo "WARNING!! : ZLIB has been forced to system even though it hasn't been found in this host"
                        echo
                    fi
                fi
                has_zlib=$tmp_has_zlib
            elif test "$tmp_has_zlib" = "no" ; then
                echo
                echo "WARNING!! : you have forced not to use ZLIB. This will disable some core functionalities of GPAC."
                echo
                has_zlib="force-no"
            elif test "$tmp_has_zlib" = "local" ; then
                echo
                echo "WARNING!! : zlib is forced to be local without check - make sure it is avaliable in $local_lib"
                echo
                has_zlib="local"
            fi
            ;;
        --use-ogg=*) has_ogg=${opt#--use-ogg=}
            ;;
        --use-vorbis=*) has_vorbis=${opt#--use-vorbis=}
            ;;
        --use-theora=*) has_theora=${opt#--use-theora=}
            ;;
        --use-openjpeg=*) has_openjpeg=${opt#--use-openjpeg=}
            ;;
        --enable-joystick) enable_joystick="yes"
            ;;
        --enable-pulseaudio) has_pulseaudio="yes"
            ;;
        --disable-all) has_pulseaudio="no"; has_alsa="no"; disable_core_tools="yes"; disable_3d="yes"; disable_svg="yes"; disable_vrml="yes"; disable_od="yes"; disable_bifs="yes"; disable_bifs_enc="yes"; disable_laser="yes"; disable_seng="yes"; disable_qtvr="yes";  disable_avi="yes"; disable_ogg="yes"; disable_m2ps="yes"; disable_m2ts="yes"; disable_m2ts_mux="yes"; disable_parsers="yes"; disable_import="yes"; disable_export="yes"; disable_swf="yes"; disable_scene_stats="yes"; disable_scene_dump="yes"; disable_scene_encode="yes"; disable_loader_isoff="yes"; disable_log="yes"; disable_od_dump="yes"; disable_od_parse="yes"; disable_isom_dump="yes"; disable_crypto="yes"; disable_isoff="yes"; disable_isoff_write="yes"; disable_isoff_hint="yes"; disable_isoff_frag="yes"; disable_streaming="yes"; disable_x3d="yes"; disable_loader_bt="yes"; disable_loader_xmt="yes"; has_dvb4linux="no"; disable_player="yes"; disable_vobsub="yes"; disable_scenegraph="yes"; disable_dvbx="yes"; disable_ttxt="yes"; disable_vtt="yes"; disable_ttml="yes"; disable_saf="yes"; disable_smgr="yes"; disable_mpd="yes"; disable_dash="yes"; disable_isoff_hds="yes"; disable_hevc="yes" ; disable_nvdec="yes" ; disable_route="yes" ; enable_qjs="no"
            ;;
        --isomedia-only) has_pulseaudio="no"; has_alsa="no"; disable_core_tools="yes"; disable_3d="yes"; disable_svg="yes"; disable_vrml="yes"; disable_od="yes"; disable_bifs="yes"; disable_bifs_enc="yes"; disable_laser="yes"; disable_seng="yes"; disable_qtvr="yes";  disable_avi="yes"; disable_ogg="yes"; disable_m2ps="yes"; disable_m2ts="yes"; disable_m2ts_mux="yes"; disable_parsers="yes"; disable_import="yes"; disable_export="yes"; disable_swf="yes"; disable_scene_stats="yes"; disable_scene_dump="yes"; disable_scene_encode="yes"; disable_loader_isoff="yes"; disable_od_dump="yes"; disable_od_parse="yes"; disable_isom_dump="yes"; disable_crypto="yes"; disable_streaming="yes"; disable_x3d="yes"; disable_loader_bt="yes"; disable_loader_xmt="yes"; has_dvb4linux="no"; disable_player="yes"; disable_vobsub="yes"; disable_scenegraph="yes"; disable_dvbx="yes"; disable_ttxt="yes"; disable_saf="yes"; disable_smgr="yes"; disable_mpd="yes"; disable_dash="yes"; disable_hevc="no"; disable_isoff="no"; disable_isoff_hds="no"; disable_isoff_write="no"; disable_isoff_hint="no"; disable_isoff_frag="no" ; disable_route="yes" ; disable_nvdec="yes" ; enable_qjs="no"
            ;;
        --disable-3d) disable_3d="yes"
            ;;
        --enable-3d) disable_3d="no"
            ;;
        --disable-svg) disable_svg="yes"
            ;;
        --enable-svg) disable_svg="no"
            ;;
        --disable-vrml) disable_vrml="yes"
            ;;
        --enable-vrml) disable_vrml="no"
            ;;
        --disable-x3d) disable_x3d="yes"
            ;;
        --enable-x3d) disable_x3d="no"
            ;;
        --disable-odf) disable_od="yes"
            ;;
        --enable-odf) disable_od="no"
            ;;
        --disable-bifs) disable_bifs="yes"
            ;;
        --enable-bifs) disable_bifs="no"
            ;;
        --disable-bifs-enc) disable_bifs_enc="yes"
            ;;
        --enable-bifs-enc) disable_bifs_enc="no"
            ;;
        --disable-laser) disable_laser="yes"
            ;;
        --enable-laser) disable_laser="no"
            ;;
        --disable-seng) disable_seng="yes"
            ;;
        --enable-seng) disable_seng="no"
            ;;
        --disable-qtvr) disable_qtvr="yes"
            ;;
        --enable-qtvr) disable_qtvr="no"
            ;;
        --disable-avi) disable_avi="yes"
            ;;
        --enable-avi) disable_avi="no"
            ;;
        --disable-ogg) disable_ogg="yes"
            ;;
        --enable-ogg) disable_ogg="no"
            ;;
        --disable-m2ps) disable_m2ps="yes"
            ;;
        --enable-m2ps) disable_m2ps="no"
            ;;
        --disable-m2ts) disable_m2ts="yes"
            ;;
        --enable-m2ts) disable_m2ts="no"
            ;;
        --disable-m2ts-mux) disable_m2ts_mux="yes"
            ;;
        --enable-m2ts-mux) disable_m2ts_mux="no"
            ;;
        --disable-dvb4linux) has_dvb4linux="no"
            ;;
        --disable-parsers) disable_parsers="yes"
            ;;
        --enable-parsers) disable_parsers="no"
            ;;
        --disable-import) disable_import="yes"
            ;;
        --enable-import) disable_import="no"
            ;;
        --disable-export) disable_export="yes"
            ;;
        --enable-export) disable_export="no"
            ;;
        --disable-swf) disable_swf="yes"
            ;;
        --enable-swf) disable_swf="no"
            ;;
        --disable-scene-stats) disable_scene_stats="yes"
            ;;
        --enable-scene-stats) disable_scene_stats="no"
            ;;
        --disable-scene-dump) disable_scene_dump="yes"
            ;;
        --enable-scene-dump) disable_scene_dump="no"
            ;;
        --disable-scene-encode) disable_scene_encode="yes"
            ;;
        --enable-scene-encode) disable_scene_encode="no"
            ;;
        --disable-loader-isoff) disable_loader_isoff="yes"
            ;;
        --enable-loader-isoff) disable_loader_isoff="no"
            ;;
        --disable-loader-bt) disable_loader_bt="yes"
            ;;
        --enable-loader-bt) disable_loader_bt="no"
            ;;
        --disable-loader-xmt) disable_loader_xmt="yes"
            ;;
        --enable-loader-xmt) disable_loader_xmt="no"
            ;;
        --disable-od-dump) disable_od_dump="yes"
            ;;
        --enable-od-dump) disable_od_dump="no"
            ;;
        --disable-od-parse) disable_od_parse="yes"
            ;;
        --enable-od-parse) disable_od_parse="no"
            ;;
        --disable-isom-dump) disable_isom_dump="yes"
            ;;
        --enable-isom-dump) disable_isom_dump="no"
            ;;
        --disable-crypto) disable_crypto="yes"
            ;;
        --enable-crypto) disable_crypto="no"
            ;;
        --disable-isoff) disable_isoff="yes"
            ;;
        --enable-isoff) disable_isoff="no"
            ;;
        --disable-isoff-write) disable_isoff_write="yes"
            ;;
        --enable-isoff-write) disable_isoff_write="no"
            ;;
        --disable-isoff-hint) disable_isoff_hint="yes"
            ;;
        --enable-isoff-hint) disable_isoff_hint="no"
            ;;
        --disable-isoff-frag) disable_isoff_frag="yes"
            ;;
        --enable-isoff-frag) disable_isoff_frag="no"
            ;;
        --disable-isoff-hds) disable_isoff_hds="yes"
            ;;
        --enable-isoff-hds) disable_isoff_hds="no"
            ;;
        --disable-streaming) disable_streaming="yes"
            ;;
        --enable-streaming) disable_streaming="no"
            ;;
        --disable-player) disable_player="yes"
            ;;
        --enable-player) disable_player="no"
            ;;
        --disable-scenegraph) disable_scenegraph="yes"
            ;;
        --enable-scenegraph) disable_scenegraph="no"
            ;;
        --disable-dvbx) disable_dvbx="yes"
            ;;
        --enable-dvbx) disable_dvbx="no"
            ;;
        --disable-vobsub) disable_vobsub="yes"
            ;;
        --enable-vobsub) disable_vobsub="no"
            ;;
        --disable-ttxt) disable_ttxt="yes"
            ;;
        --enable-ttxt) disable_ttxt="no"
            ;;
        --disable-ttml) disable_ttml="yes"
            ;;
        --enable-vtt) disable_vtt="no"
            ;;
        --disable-vtt) disable_vtt="yes"
            ;;
        --enable-ttml) disable_ttml="no"
            ;;
        --disable-saf) disable_saf="yes"
            ;;
        --enable-saf) disable_saf="no"
            ;;
        --disable-smgr) disable_smgr="yes"
            ;;
        --enable-smgr) disable_smgr="no"
            ;;
        --disable-mpd) disable_mpd="yes"
            ;;
        --enable-mpd) disable_mpd="no"
            ;;
        --disable-dash) disable_dash="yes"
            ;;
        --enable-dash) disable_dash="no"
            ;;
        --disable-core) disable_core_tools="yes"
            ;;
        --enable-core) disable_core_tools="no"
            ;;
        --disable-hevc) disable_hevc="yes"
            ;;
        --enable-hevc) disable_hevc="no"
            ;;
        --disable-route) disable_route="yes"
            ;;
        --enable-route) disable_route="no"
            ;;
        --disable-qjs) enable_qjs="no"
            ;;
        --enable-qjs) enable_qjs="yes"
            ;;
        --disable-qjs-libc) enable_qjs_libc="no"
            ;;
        --enable-qjs-libc) enable_qjs_libc="yes"
            ;;
        --disable-log) disable_log="yes"
            ;;
        --enable-log) disable_log="no"
            ;;
        --disable-nvdec) disable_nvdec="yes"
            ;;
        --disable-codecs) disable_codecs="yes"
            ;;
    esac
done

#always force static modules when static build is used, we cannot have one exe with libgpac_static using a module with libgpac dynamic, this would cause bugs with gf_sys_init()
if test "$static_build" = "yes"; then
static_modules="yes"
fi


if test "$disable_core_tools" = "no"; then
  if test "$has_zlib" = "no" ; then
    echo "error: zlib not found on system or in local libs"
    exit 1
  fi
  if test "$has_zlib" = "force-no" ; then
    # can't have libpng without zlib
    has_png="no"
    # can't have freetype without libpng
    has_ft="no"
  fi
  if test "$dlopen" = "no"; then
    if test "$win32" = "no"; then
      echo "error: dlopen not found on system"
      exit 1
    fi
  fi
else
GPAC_SH_FLAGS=""
has_ssl="no"
fi

#look for OpenGL support or for TinyGL support
LINK3D=""
INCL3D=""
DarwinGL="no"

if test "$darwin" = "yes" ; then
    cat > $TMPC << EOF
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
int main( void ) { glEnable(GL_NORMALIZE); return 0; }
EOF

else
    cat > $TMPC << EOF
#include <GL/gl.h>
#include <GL/glu.h>
int main( void ) { glEnable(GL_NORMALIZE); return 0; }
EOF

fi

if test "$disable_3d" = "no" ; then
    if test "$win32" = "yes" ; then
        if test "$cygwin" = "yes" ; then
            LINK3D="-lw32api/opengl32 -lw32api/glu32"
        else
            LINK3D="-lopengl32 -lglu32"
        fi
    elif test "$darwin" = "yes" ; then
        LINK3D="-framework OpenGL -framework GLUT"
        DarwinGL="yes"
    else
        LINK3D="-lGL -lGLU -lX11"
    fi
    if docc $LINK3D $LDFLAGS ; then
        has_opengl="yes"
    elif docc -I$X11_PATH/include -L$X11_PATH/lib $LDFLAGS ; then
        has_opengl="yes"
        INCL3D="-I$X11_PATH/include"
        LINK3D="-L$X11_PATH/lib $LINK3D"
    fi
    if test "$has_opengl" = "no" ; then
        LINK3D=""
    fi
fi

cat > $TMPC << EOF
#include <GL/gl.h>
int main( void ) { int a ; a = TINYGL ; return 0;}
EOF

if test "$enable_tinygl" = "yes"  ;then
    if docc $LDFLAGS -lTinyGL ; then
        has_tinygl="yes"
        has_opengl="yes"
        LINK3D="-lTinyGL"
    fi
fi


#look for joystick support
cat > $TMPC << EOF
#include <linux/joystick.h>
int main( void ) { return 0; }
EOF
if test "$enable_joystick" = "yes"  ;then
    if docc $LDFLAGS  ; then
        has_joystick="yes"
    fi
fi



#look for DX support
dx_path="system"
has_mingw_directx="no"
if test "$win32" = "yes" ; then

    cat > $TMPC << EOF
#include <ddraw.h>
int main( void ) { return 0; }
EOF

    if docc $LDFLAGS ; then
        has_mingw_directx="yes"
    else
        dx_path="$dxsdk_path"
        if docc -I$dxsdk_path/include -L$dxsdk_path/lib -lddraw ; then
            has_mingw_directx="yes"
        fi
    fi

fi

#look for SDL support
sdl_too_old=no
has_sdl=no

sdl_config="sdl2-config"
if test "$sdl_local" = "yes"; then
    sdl_config="$sdl_path/sdl2-config"
    sdl_static="yes"
fi


#if test "$cross_prefix" = "" ; then
    if type $sdl_config >/dev/null 2>>$logs; then

        cat > $TMPC << EOF
#include <SDL.h>
#undef main
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF

        if test "$sdl_static" = "yes"; then
            sdl_lib_flags=`$sdl_config --static-libs`
        else
            sdl_lib_flags=`$sdl_config --libs`
        fi
        sdl_cflags=`$sdl_config --cflags`

        if docc $sdl_cflags $LDFLAGS $sdl_lib_flags ; then
            _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'`
            if test "$_sdlversion" -lt 121 ; then
                sdl_too_old=yes
            else
                has_sdl=yes
            fi
        fi
    fi
#fi

if test "$has_sdl" = "no" ; then

  sdl_config="sdl-config"
  if test "$sdl_local" = "yes"; then
    sdl_config="$sdl_path/sdl-config"
    sdl_static="yes"
  fi

  if test "$cross_prefix" = "" ; then
    if type $sdl_config >/dev/null 2>>$logs; then

        cat > $TMPC << EOF
#include <SDL.h>
#undef main
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF

        if test "$sdl_static" = "yes"; then
            sdl_lib_flags=`$sdl_config --static-libs`
        else
            sdl_lib_flags=`$sdl_config --libs`
        fi
        sdl_cflags=`$sdl_config --cflags`

        if docc $sdl_cflags $LDFLAGS $sdl_lib_flags ; then
            _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'`
            if test "$_sdlversion" -lt 121 ; then
                sdl_too_old=yes
            else
                has_sdl=yes
            fi
        fi
    fi
  fi
fi
#end SDL check

#look at endianess
if test -z "$cross_prefix" ; then

# big/little endian test
cat > $TMPC << EOF
#include <inttypes.h>
int main(int argc, char ** argv){
volatile uint32_t i=0x01234567;
return (*((uint8_t*)(&i))) == 0x67;
}
EOF

    if docc $LDFLAGS 2>>$logs ; then
        $TMPO && bigendian="yes"
    else
        echo big/little endian test failed
    fi

else

    # if cross compiling, cannot launch a program, so make a static guess
    if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then
        bigendian="yes"
    fi

fi

if test "$debuginfo" = "no"; then
    CFLAGS="$CFLAGS -DNDEBUG"
fi

#man dir
if test x"$mandir" = x""; then
    mandir="share/man"
fi


if test "$disable_codecs" = "yes"; then
    has_jpeg="no"
    has_png="no"
    has_mad="no"
    has_a52="no"
    has_mad="no"
    has_faad="no"
    has_xvid="no"
    has_opensvc="no"
    has_openjpeg="no"
    has_ffmpeg="no"
    has_ogg="no"
    has_theora="no"
    has_vorbis="no"
    has_openhevc="no"
fi

if test "$static_bin" = "yes"; then
    static_modules="yes"
    static_build="yes"
    #we cannot use openssl vanilla since it is usually built with DSO and requires dlopen
    has_ssl="no"
    #we cannot use ipv6 due to getaddrinfo not being present
    has_ipv6="no"

#    has_js="no"
#    has_ft="no"
#    has_jpeg="no"
#    has_png="no"
#    has_mad="no"
#    has_a52="no"
#    has_mad="no"
#    has_faad="no"
#    has_xvid="no"
#    has_opensvc="no"

    #we cannot use openjpeg to produce a static bin, no static lib on most distributions
    has_openjpeg="no"

    #we cannot use FFMPEG to produce a static bin, no static lib on most distributions. This could be done by building a local statoc only ffmpeg
if test "$has_ffmpeg" = "system" ; then
    has_ffmpeg="no"
fi

    #we cannot use ogg/theora/vorbis to produce a static bin, no static lib on most distributions, issues with lm acosf_finite, log_finite, ...
    has_ogg="no"
    has_theora="no"
    has_vorbis="no"
    #we cannot use openhevc to produce a static bin, dependencies to avcodec/avformat. We need a static ffmpeg build with openhevc support
    has_openhevc="no"
    has_freenect="no"
    has_platinum="no"
    has_lzma="no"
    has_vtb="no"

#we cannot use openGL nor audio/video output to produce a static bin
    has_opengl="no"
    has_sdl="no"
    has_oss_audio="no"
    has_alsa="no"
    has_jack="no"
    has_pulseaudio="no"
    has_directfb="no"
    has_x11="no"
    has_dvb4linux="no"
    has_mingw_directx="no"

fi

if test "$cpu" = "sh4"; then
    viren_dir="`ls \"$source_path/modules\" | grep viren_out`"
    if test "$viren_dir" = "viren_out"; then
        enable_depth_compositor="yes"
    fi
fi

if test "$has_lzma" = "yes"; then
  GPAC_SH_FLAGS="$GPAC_SH_FLAGS -llzma"
  if test "$win32" = "yes"; then
   extralibs="$extralibs -llzma"
  fi
fi


if test "$disable_player" = "yes" ; then
    disable_scenegraph="yes"
fi

if test "$disable_scenegraph" = "yes" ; then
    disable_3d="yes"
    disable_svg="yes"
    disable_vrml="yes"
    disable_x3d="yes"
    disable_bifs="yes"
    disable_bifs_enc="yes"
    disable_laser="yes"
    disable_seng="yes"
    disable_qtvr="yes"
    disable_swf="yes"
    disable_scene_stats="yes"
    disable_scene_dump="yes"
    disable_scene_encode="yes"
    disable_loader_isoff="yes"
    disable_loader_bt="yes"
    disable_loader_xmt="yes"
    disable_streaming="yes"
    disable_player="yes"
    disable_smgr="yes"
    disable_nvdec="yes"
    has_js="no"
fi

if test "$disable_mpd" = "yes"; then
    disable_dash="yes"
fi

if test "$disable_od_parse" = "yes" ; then
    disable_loader_isoff="yes"
    disable_loader_bt="yes"
    disable_loader_xmt="yes"
fi

if test "$disable_parsers" = "yes" ; then
    has_jpeg="no"
    has_png="no"
fi

#prepare for config.h writing
TMPH="${TMPDIR1}/gpac-conf-${RANDOM}-$$-${RANDOM}.h"
echo "/* Automatically generated by configure */" > $TMPH
echo "#ifndef GF_CONFIG_H" >> $TMPH
echo "#define GF_CONFIG_H" >> $TMPH
echo "#define GPAC_CONFIGURATION \"$GPAC_CONFIGURATION\"" >> $TMPH

version="`grep '#define GPAC_VERSION ' \"$source_path/include/gpac/version.h\" | cut -d '"' -f 2`"
version_major=`grep '#define GPAC_VERSION_MAJOR ' $source_path/include/gpac/version.h | sed 's/[^0-9]*//g'`
version_minor=`grep '#define GPAC_VERSION_MINOR ' $source_path/include/gpac/version.h | sed 's/[^0-9]*//g'`
version_micro=`grep '#define GPAC_VERSION_MICRO ' $source_path/include/gpac/version.h | sed 's/[^0-9]*//g'`
soname_version="${version_major}.${version_minor}.${version_micro}"

#check revision.h
cd $source_path
. ./check_revision.sh
cd $build_path

echo ""
echo "** System Configuration"
echo "Install prefix: $prefix"
echo "Source path: $source_path"
echo "C   compiler: $cc_naked"
echo "C++ compiler: $cxx_naked"
echo "make: $make"
echo "CPU: $cpu"
echo "Big Endian: $bigendian"
if test $cpu = "mips"; then
    echo "MMI enabled: $mmi"
fi
echo ""
echo "** GPAC $version rev$revision Core Configuration **"
if test "$static_bin" = "yes" ; then
    echo "Static binaries enabled"
    echo "#define GPAC_STATIC_BUILD" >> $TMPH
elif test "$static_build" = "yes" ; then
    echo "Static build enabled"
    echo "#define GPAC_STATIC_BUILD" >> $TMPH
else
    echo "Static Modules: $static_modules"
fi
echo "debug version: $debuginfo"
echo "GProf enabled: $gprof_build"
echo "Memory tracking enabled: $use_memory_tracking"
echo "Sanitizer enabled: $enable_sanitizer"
echo "Fixed-Point Version: $use_fixed_point"
echo "IPV6 Support: $has_ipv6"
echo "QuickJS Support: $enable_qjs (qjslibc $enable_qjs_libc)"

if test "$disable_player" = "yes" ; then
    echo "Player disabled"
    echo "#define GPAC_DISABLE_PLAYER" >> $TMPH
    disable_laser="yes"
fi

if test "$has_st_nsec" = "yes" ; then
    echo "#define GPAC_HAS_MTIM_NSEC" >> $TMPH
fi


if test "$disable_smgr" = "yes" ; then
disable_seng="yes"
disable_qtvr="yes"
disable_swf="yes"
disable_scene_stats="yes"
disable_scene_dump="yes"
disable_scene_encode="yes"
disable_loader_isoff="yes"
disable_loader_bt="yes"
disable_loader_xmt="yes"
disable_svg="yes"
    echo "Scene Manager disabled"
    echo "#define GPAC_DISABLE_SMGR" >> $TMPH
fi
if test "$disable_core_tools" = "yes" ; then
    echo "Core tools disabled"
    echo "#define GPAC_DISABLE_CORE_TOOLS" >> $TMPH
fi
if test "$disable_svg" = "yes" ; then
    echo "SVG disabled"
    echo "#define GPAC_DISABLE_SVG" >> $TMPH
    disable_laser="yes"
fi
if test "$disable_vrml" = "yes" ; then
    echo "MPEG-4/VRML/X3D disabled"
    echo "#define GPAC_DISABLE_VRML" >> $TMPH
fi
if test "$disable_x3d" = "yes" ; then
    echo "X3D disabled"
    echo "#define GPAC_DISABLE_X3D" >> $TMPH
fi
if test "$disable_od" = "yes" ; then
    echo "OD Full support disabled"
    echo "#define GPAC_MINIMAL_ODF" >> $TMPH
fi
if test "$disable_od_parse" = "yes" ; then
    echo "OD Parsing disabled"
    echo "#define GPAC_DISABLE_OD_PARSE" >> $TMPH
fi
if test "$disable_bifs" = "yes" ; then
    echo "BIFS coder disabled"
    echo "#define GPAC_DISABLE_BIFS" >> $TMPH
fi
if test "$disable_bifs_enc" = "yes" ; then
    echo "BIFS encoder disabled"
    echo "#define GPAC_DISABLE_BIFS_ENC" >> $TMPH
fi
if test "$disable_laser" = "yes" ; then
    echo "LASeR coder disabled"
    echo "#define GPAC_DISABLE_LASER" >> $TMPH
fi
if test "$disable_saf" = "yes" ; then
    echo "SAF container disabled"
    echo "#define GPAC_DISABLE_SAF" >> $TMPH
fi
if test "$disable_seng" = "yes" ; then
    echo "Scene encoder engine disabled"
    echo "#define GPAC_DISABLE_SENG" >> $TMPH
fi
if test "$disable_qtvr" = "yes" ; then
    echo "Cubic QTVR import disabled"
    echo "#define GPAC_DISABLE_QTVR" >> $TMPH
fi
if test "$disable_avi" = "yes" ; then
    echo "AVI disabled"
    echo "#define GPAC_DISABLE_AVILIB" >> $TMPH
fi
if test "$disable_ogg" = "yes" ; then
    echo "OGG disabled"
    echo "#define GPAC_DISABLE_OGG" >> $TMPH
fi
if test "$disable_m2ps" = "yes" ; then
    echo "MPEG-2 PS disabled"
    echo "#define GPAC_DISABLE_MPEG2PS" >> $TMPH
fi
if test "$disable_m2ts" = "yes" ; then
    echo "MPEG-2 TS disabled"
    echo "#define GPAC_DISABLE_MPEG2TS" >> $TMPH
fi
if test "$disable_m2ts_mux" = "yes" ; then
    echo "MPEG-2 TS Multiplexer disabled"
    echo "#define GPAC_DISABLE_MPEG2TS_MUX" >> $TMPH
fi
if test "$disable_parsers" = "yes" ; then
    echo "AV Parsers disabled"
    echo "#define GPAC_DISABLE_AV_PARSERS" >> $TMPH
fi
if test "$disable_import" = "yes" ; then
    echo "Media importers disabled"
    echo "#define GPAC_DISABLE_MEDIA_IMPORT" >> $TMPH
fi
if test "$disable_export" = "yes" ; then
    echo "Media exporters disabled"
    echo "#define GPAC_DISABLE_MEDIA_EXPORT" >> $TMPH
fi
if test "$disable_swf" = "yes" ; then
    echo "SWF import disabled"
    echo "#define GPAC_DISABLE_SWF_IMPORT" >> $TMPH
fi
if test "$disable_scenegraph" = "yes" ; then
    echo "Scene Graph disabled"
    echo "#define GPAC_DISABLE_SCENEGRAPH" >> $TMPH
fi
if test "$disable_scene_stats" = "yes" ; then
    echo "Scene statistics disabled"
    echo "#define GPAC_DISABLE_SCENE_STATS" >> $TMPH
fi
if test "$disable_scene_dump" = "yes" ; then
    echo "Scene dump disabled"
    echo "#define GPAC_DISABLE_SCENE_DUMP" >> $TMPH
fi
if test "$disable_scene_encode" = "yes" ; then
    echo "Scene encoder to ISO FF disabled"
    echo "#define GPAC_DISABLE_SCENE_ENCODER" >> $TMPH
fi
if test "$disable_loader_isoff" = "yes" ; then
    echo "Scene loader from ISO FF disabled"
    echo "#define GPAC_DISABLE_LOADER_ISOM" >> $TMPH
fi
if test "$disable_loader_bt" = "yes" ; then
    echo "BT/WRL Scene loader disabled"
    echo "#define GPAC_DISABLE_LOADER_BT" >> $TMPH
fi
if test "$disable_loader_xmt" = "yes" ; then
    echo "XMT/X3D Scene loader disabled"
    echo "#define GPAC_DISABLE_LOADER_XMT" >> $TMPH
fi
if test "$disable_od_dump" = "yes" ; then
    echo "OD dump disabled"
    echo "#define GPAC_DISABLE_OD_DUMP" >> $TMPH
fi
if test "$disable_isom_dump" = "yes" ; then
    echo "ISOM dump disabled"
    echo "#define GPAC_DISABLE_ISOM_DUMP" >> $TMPH
fi
if test "$disable_crypto" = "yes" ; then
    echo "Crypto tools disabled"
    echo "#define GPAC_DISABLE_CRYPTO" >> $TMPH
fi
if test "$disable_isoff" = "yes" ; then
    echo "ISO File Format disabled"
    echo "#define GPAC_DISABLE_ISOM" >> $TMPH
fi
if test "$disable_isoff_write" = "yes" ; then
    echo "ISO File Format write disabled"
    echo "#define GPAC_DISABLE_ISOM_WRITE" >> $TMPH
fi
if test "$disable_isoff_hint" = "yes" ; then
    echo "ISO File Format hinting disabled"
    echo "#define GPAC_DISABLE_ISOM_HINTING" >> $TMPH
fi
if test "$disable_isoff_frag" = "yes" ; then
    echo "ISO File Format fragments disabled"
    echo "#define GPAC_DISABLE_ISOM_FRAGMENTS" >> $TMPH
fi
if test "$disable_isoff_hds" = "yes" ; then
    echo "ISO File Format Adobe HDS disabled"
    echo "#define GPAC_DISABLE_ISOM_ADOBE" >> $TMPH
fi

if test "$disable_streaming" = "yes" ; then
    echo "RTP/RTSP/SDP streaming disabled"
    echo "#define GPAC_DISABLE_STREAMING" >> $TMPH
fi
if test "$disable_dvbx" = "no" ; then
    echo "DVB MPE and DSM-CC disabled"
    echo "#define GPAC_ENABLE_MPE" >> $TMPH
    echo "#define GPAC_ENABLE_DSMCC" >> $TMPH
fi
if test "$disable_vobsub" = "yes" ; then
    echo "VobSub disabled"
    echo "#define GPAC_DISABLE_VOBSUB" >> $TMPH
fi
if test "$disable_ttxt" = "yes" ; then
    echo "3GPP/Apple TimedText disabled"
    echo "#define GPAC_DISABLE_TTXT" >> $TMPH
fi

if test "$disable_ttml" = "yes" ; then
    echo "TTML TimedText disabled"
    echo "#define GPAC_DISABLE_TTML" >> $TMPH
fi

if test "$disable_vtt" = "yes" ; then
    echo "WebVTT disabled"
    echo "#define GPAC_DISABLE_VTT" >> $TMPH
fi

if test "$enable_depth_compositor" = "yes" ; then
    echo "Depth Compositor enabled"
    echo "#define GF_SR_USE_DEPTH" >> $TMPH
fi

if test "$enable_qjs_stack_check" = "yes" ; then
    echo "#define GPAC_QJS_STACK_CHECK" >> $TMPH
fi

if test "$disable_mpd" = "yes" ; then
    echo "HLS and DASH Manifest Disabled"
    echo "#define GPAC_DISABLE_MPD" >> $TMPH
fi

if test "$disable_dash" = "yes" ; then
    echo "Adaptive HTTP Streaming Client disabled"
    echo "#define GPAC_DISABLE_DASH_CLIENT" >> $TMPH
fi

if test "$disable_hevc" = "yes" ; then
    echo "HEVC Support disabled"
    echo "#define GPAC_DISABLE_HEVC" >> $TMPH
fi

if test "$disable_route" = "yes" ; then
    echo "ROUTE Support disabled"
    echo "#define GPAC_DISABLE_ROUTE" >> $TMPH
fi

if test "$disable_crypto" = "yes" ; then
    echo "CRYPTO Support disabled"
    echo "#define GPAC_DISABLE_CRYPTO" >> $TMPH
fi

if test "$disable_log" = "yes" ; then
    echo "Logging disabled"
    echo "#define GPAC_DISABLE_LOG" >> $TMPH
fi

echo ""

echo "** Detected libraries **"
echo "zlib: $has_zlib"
echo "OpenGL support: $has_opengl"
echo "TinyGL support: $has_tinygl"
echo "OpenSSL support: $has_ssl"

if test "$win32" != "yes" ; then
    echo "OSS Audio: $has_oss_audio"
    echo "ALSA Audio: $has_alsa"
    echo "Jack Audio: $has_jack"
    echo "Pulse Audio: $has_pulseaudio"
    echo "DirectFB: $has_directfb"

    if test "$has_x11" != "no" ; then
        echo "X11 Shared Memory support: $has_x11_shm (path: $X11_PATH)"
        echo "X11 XVideo support: $has_x11_xv"
    fi
fi
echo "SDL: $has_sdl"
if test "$sdl_too_old" = "yes" ; then
    echo "SDL Version too old - please upgrade for SDL support"
fi

if test "$win32" = "yes" ; then
    echo "DirectX: $has_mingw_directx"
fi
if test "$linux" = "yes" ; then
    echo "DVB for Linux: $has_dvb4linux"
fi

echo "FreeType: $has_ft"
echo "JPEG: $has_jpeg"
echo "OpenJPEG: $has_openjpeg"
echo "PNG: $has_png"
echo "MAD: $has_mad"
echo "FAAD: $has_faad"
echo "XVID: $has_xvid"
echo "FFMPEG: $has_ffmpeg"
if test "$has_ffmpeg" != "no" ; then
if test "$ffmpeg_vvc" = "yes" ; then
echo "FFMPG VVC Support: $ffmpeg_vvc"
fi
fi
echo "LZMA: $has_lzma"
echo "Xiph OGG: $has_ogg"
echo "Platinum UPnP: $has_platinum"

if test "$has_ogg" = "no"; then
    has_ogg="no"
else
    echo "Xiph Vorbis: $has_vorbis"
    echo "Xiph Theora: $has_theora"
fi
echo "A52 (AC3): $has_a52"
echo "OpenSVCDecoder: $has_opensvc"
echo "OpenHEVCDecoder: $has_openhevc"
echo "Freenect: $has_freenect"
echo "nghttp2: $has_nghttp2"


if test "$has_amr_nb_fixed" = "yes" ; then
    echo ""
    echo "*** AMR NB FIXED-POINT NOTICE ***"
    echo "Make sure you have downloaded TS26.073 from:"
    echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-*.zip"
    echo "or through gpac_extra_libs and extracted src to modules/amr_dec/amr_nb"
    echo "without overwriting typedefs.h file"
    echo ""
fi

if test "$has_amr_nb" = "yes" ; then
    echo ""
    echo "*** AMR NB NOTICE ***"
    echo "Make sure you have downloaded TS26.104 from:"
    echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-*.zip"
    echo "or through gpac_extra_libs and extracted src to modules/amr_float_dec/amr_nb_ft"
    echo "without overwriting typedefs.h file"
    echo ""
fi


if test "$has_amr_wb" = "yes" ; then
    echo ""
    echo "*** AMR WB NOTICE ***"
    echo "Make sure you have downloaded TS26.204 from:"
    echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-*.zip"
    echo "or through gpac_extra_libs and extracted src to modules/amr_float_dec/amr_wb_ft"
    echo "without overwriting typedefs.h file"
    echo ""
fi

echo ""

#needs gmon for win32 gprof
if test "$gprof_build" = "yes"; then
    if test "$win32" = "yes"; then
        extralibs="$extralibs -lgmon"
    fi
fi

#we add no deprecate by default on osx (due to opengl ...)
if test "$darwin" = "yes" ; then
    CFLAGS="$CFLAGS_DIR $CFLAGS -Wno-deprecated -Wno-deprecated-declarations"
else
    CFLAGS="$CFLAGS -Wno-deprecated -Wno-deprecated-declarations -Wno-int-in-bool-context"
fi


if test "$enable_sanitizer" = "yes" ; then
    CFLAGS="$CFLAGS -fsanitize=address,undefined -fno-sanitize-recover -g -fno-omit-frame-pointer -DASAN_ENABLED"
    LDFLAGS="$LDFLAGS -fsanitize=address,undefined -ldl"
fi


ldir=`pwd`
CFLAGS="$CFLAGS -DGPAC_HAVE_CONFIG_H -I\"$ldir\""
if test "$win32" = "no" ; then
    CFLAGS="$CFLAGS -fvisibility=\"hidden\""
fi
CXXFLAGS="$CXXFLAGS"


echo "Creating config.mak"
echo "# Automatically generated by configure - do not modify" > config.mak

echo "GPAC_CONFIGURATION=$GPAC_CONFIGURATION" >> config.mak

echo "prefix=$prefix" >> config.mak
echo "DESTDIR=$DESTDIR" >> config.mak
echo "moddir=gpac" >> config.mak
echo "tinygl_target_bin_dir=$target_bin_dir" >> config.mak
echo "MAKE=$make" >> config.mak

if test "$verbose" = "yes" ; then
echo "CC=$cc_naked" >> config.mak
echo "AR=$ar" >> config.mak
echo "RANLIB=$ranlib" >> config.mak
echo "STRIP=$strip" >> config.mak
echo "WINDRES=$windres" >> config.mak
else
echo "CC=@$cc_naked" >> config.mak
echo "AR=@$ar" >> config.mak
echo "RANLIB=@$ranlib" >> config.mak
echo "STRIP=@$strip" >> config.mak
echo "WINDRES=$windres" >> config.mak
fi
echo "INSTALL=$install" >> config.mak
echo "LIBTOOL=@libtool" >> config.mak

echo "INSTFLAGS=$instflags" >> config.mak
echo "OPTFLAGS=$CFLAGS" >> config.mak
echo "CXXFLAGS=$CXXFLAGS" >> config.mak
echo "LDFLAGS=$LDFLAGS" >> config.mak
echo "SHFLAGS=$SHFLAGS" >> config.mak

pf="$prefix/"
lib_dir=${libdir#"$pf"}
echo "lib_dir=$lib_dir" >> config.mak

pf="$prefix/"
man_dir=${mandir#"$pf"}
echo "man_dir=$man_dir" >> config.mak


echo "STATIC_MODULES=$static_modules" >> config.mak

#for cross-compilation
if test "$cross_prefix" != "" ; then
    echo "CROSS_COMPILING=yes" >> config.mak
fi

if test "$cpu" = "x86" ; then
    echo "TARGET_ARCH_X86=yes" >> config.mak
elif test "$cpu" = "armv4l" ; then
    echo "TARGET_ARCH_ARMV4L=yes" >> config.mak
elif test "$cpu" = "alpha" ; then
    echo "TARGET_ARCH_ALPHA=yes" >> config.mak
elif test "$cpu" = "sparc64" ; then
    echo "TARGET_ARCH_SPARC64=yes" >> config.mak
elif test "$cpu" = "powerpc" ; then
    echo "TARGET_ARCH_POWERPC=yes" >> config.mak
elif test "$cpu" = "mips" ; then
    echo "TARGET_ARCH_MIPS=yes" >> config.mak
fi


if test "$bigendian" = "yes" ; then
    echo "IS_BIGENDIAN=yes" >> config.mak
    echo "#define GPAC_BIG_ENDIAN" >> $TMPH
fi
echo "EXTRALIBS=$extralibs" >> config.mak
echo "VERSION=$version" >>config.mak
echo "VERSION_MAJOR=$version_major" >>config.mak
echo "VERSION_SONAME=$soname_version" >>config.mak

if test "$use_fixed_point" = "yes"; then
    echo "#define GPAC_FIXED_POINT" >> $TMPH
fi

if test "$use_memory_tracking" = "yes"; then
    echo "#define GPAC_MEMORY_TRACKING" >> $TMPH
    if test "$cygwin" = "yes" ; then
		echo "#define GPAC_MEMORY_TRACKING_DISABLE_STACKTRACE" >> $TMPH
    fi
fi


if test "$win32" = "yes" ; then
    echo "CONFIG_WIN32=yes" >> config.mak
    echo "CONFIG_OS=CONFIG_WIN32" >> config.mak
    echo "#define GPAC_CONFIG_WIN32" >> $TMPH
    if test "$cygwin" = "yes" ; then
        echo "#define ftello64 ftell" >> $TMPH
        echo "#define fseeko64 fseek" >> $TMPH
    fi
    if test "$mingw32" = "yes" ; then

# -municode test
cat > $TMPC << EOF
#include <inttypes.h>
int wmain(int argc, char ** argv){
return 0;
}
EOF

      if docc -municode ; then
        echo "UNICODEFLAGS=-municode" >> config.mak
        echo "HAS_WMAIN=yes" >> config.mak
      else
        echo "UNICODEFLAGS=" >> config.mak
        if docc ; then
          echo "HAS_WMAIN=yes" >> config.mak
        else
          echo "HAS_WMAIN=no" >> config.mak
        fi
      fi
    fi
elif test "$linux" = "yes" ; then
    echo "CONFIG_LINUX=yes" >> config.mak
    echo "CONFIG_OS=CONFIG_LINUX" >> config.mak
    echo "#define GPAC_CONFIG_LINUX" >> $TMPH
elif test "$freebsd" = "yes" ; then
    echo "CONFIG_FREEBSD=yes" >> config.mak
    echo "CONFIG_OS=CONFIG_FREEBSD" >> config.mak
    echo "#define GPAC_CONFIG_FREEBSD" >> $TMPH
elif test "$darwin" = "yes" ; then
    echo "CONFIG_DARWIN=yes" >> config.mak
    echo "CONFIG_OS=CONFIG_DARWIN" >> config.mak
    echo "#define GPAC_CONFIG_DARWIN" >> $TMPH
    if test "$DarwinGL" = "yes" ; then
        echo "#define CONFIG_DARWIN_GL" >> $TMPH
    fi
    echo "mac_apps=$Mac_Applications" >> config.mak
elif test "$sunos" = "yes" ; then
    echo "CONFIG_SUNOS=yes" >> config.mak
    echo "CONFIG_OS=CONFIG_SUNOS" >> config.mak
    echo "#define GPAC_CONFIG_SUNOS" >> $TMPH
else
    echo "CONFIG_OS=CONFIG_GEN" >> config.mak
    echo "#define GPAC_CONFIG_GENERIC" >> $TMPH
fi

if test "$win32" = "no" ; then
    echo "GPAC_SH_FLAGS=$GPAC_SH_FLAGS" >> config.mak
    echo "EXE_SUFFIX=" >> config.mak
    echo "DYN_LIB_SUFFIX=$DYN_LIB_SUFFIX" >> config.mak
else
    echo "EXE_SUFFIX=.exe" >> config.mak
    echo "DYN_LIB_SUFFIX=.dll" >> config.mak
fi


echo "INSTFLAGS=$INSTFLAGS" >> config.mak

echo "CONFIG_JS=$enable_qjs" >> config.mak
if test "$enable_qjs" = "yes" ; then
echo "#define GPAC_HAS_QJS" >> $TMPH
if test "$enable_qjs_libc" = "no" ; then
echo "#define GPAC_DISABLE_QJS_LIBC" >> $TMPH
fi

fi

if test "$has_zlib" = "no" -o "$has_zlib" = "force-no" ; then
    echo "#define GPAC_DISABLE_ZLIB" >> $TMPH
    echo "CONFIG_ZLIB=no" >> config.mak
else
    echo "CONFIG_ZLIB=$has_zlib" >> config.mak
fi
echo "CONFIG_FT=$has_ft" >> config.mak

echo "CONFIG_JPEG=$has_jpeg" >> config.mak
if test "$has_jpeg" != "no" ; then
    echo "#define GPAC_HAS_JPEG" >> $TMPH
    echo "jpeg_cflags=$jpeg_cflags" >> config.mak
    echo "jpeg_lflags=$jpeg_lflags" >> config.mak
fi

echo "CONFIG_PNG=$has_png" >> config.mak
if test "$has_png" != "no" ; then
    echo "#define GPAC_HAS_PNG" >> $TMPH
fi

echo "CONFIG_VTB=$has_vtb" >> config.mak
if test "$has_vtb" != "no" ; then
    echo "#define GPAC_HAS_VTB" >> $TMPH
    echo "vtb_ldflags=$vtb_ldflags" >> config.mak
fi

echo "CONFIG_STRLCPY=$has_strlcpy" >> config.mak
if test "$has_strlcpy" != "no" ; then
    echo "#define GPAC_HAS_STRLCPY" >> $TMPH
fi

if test "$has_sock_un" != "no" ; then
    echo "#define GPAC_HAS_SOCK_UN" >> $TMPH
fi

echo "CONFIG_LZMA=$has_lzma" >> config.mak
if test "$has_lzma" = "yes"; then
echo "#define GPAC_HAS_LZMA" >> $TMPH
fi

echo "CONFIG_JP2=$has_openjpeg" >> config.mak
if test "$has_openjpeg" != "no" ; then
    echo "JP2_CFLAGS=$openjpeg_cflags" >> config.mak
    echo "JP2_LDFLAGS=$openjpeg_ldflags" >> config.mak
    echo "#define GPAC_HAS_JP2" >> $TMPH
fi
echo "CONFIG_FAAD=$has_faad" >> config.mak
if test "$has_faad" != "no" ; then
    echo "#define GPAC_HAS_FAAD" >> $TMPH
fi
echo "CONFIG_MAD=$has_mad" >> config.mak
if test "$has_mad" != "no" ; then
    echo "#define GPAC_HAS_MAD" >> $TMPH
fi
echo "CONFIG_XVID=$has_xvid" >> config.mak
if test "$has_xvid" != "no" ; then
    echo "#define GPAC_HAS_XVID" >> $TMPH
fi
echo "CONFIG_OGG=$has_ogg" >> config.mak
echo "CONFIG_VORBIS=$has_vorbis" >> config.mak
if test "$has_vorbis" != "no" ; then
    echo "#define GPAC_HAS_VORBIS" >> $TMPH
fi
echo "CONFIG_THEORA=$has_theora" >> config.mak
if test "$has_theora" != "no" ; then
    echo "#define GPAC_HAS_THEORA" >> $TMPH
fi
echo "CONFIG_FFMPEG=$has_ffmpeg" >> config.mak
if test "$has_ffmpeg" = "no"; then
echo "DISABLE_DASHCAST=yes" >> config.mak
else
    echo "ffmpeg_cflags=$ffmpeg_cflags" >> config.mak
    echo "ffmpeg_lflags=$ffmpeg_lflags" >> config.mak
    echo "CONFIG_LIBAV=$is_libav" >> config.mak
    echo "CONFIG_LIBSWRESAMPLE=$has_libswresample" >> config.mak
    echo "#define GPAC_HAS_FFMPEG" >> $TMPH
    if test "$ffmpeg_vvc" = "yes"; then
      echo "#define FFMPEG_ENABLE_VVC" >> $TMPH
    fi
fi
echo "CONFIG_FFMPEG_OLD=$old_ffmpeg_inc" >> config.mak

echo "CONFIG_OSS_AUDIO=$has_oss_audio" >> config.mak
echo "CONFIG_ALSA=$has_alsa" >> config.mak
echo "CONFIG_JACK=$has_jack" >> config.mak
echo "CONFIG_A52=$has_a52" >> config.mak
if test "$has_a52" != "no" ; then
    echo "#define GPAC_HAS_LIBA52" >> $TMPH
fi
echo "CONFIG_PULSEAUDIO=$has_pulseaudio" >> config.mak
echo "CONFIG_FREENECT=$has_freenect" >> config.mak
if test "$has_freenect" != "no"
then
    echo "FREENECT_CFLAGS=$freenect_flags" >> config.mak
    echo "FREENECT_LDLAGS=$freenect_ld" >> config.mak
fi

if test "$want_gcov"  = "yes" ; then
    echo "#define GPAC_ENABLE_COVERAGE" >> $TMPH
fi

echo "CONFIG_NGHTTP2=$has_nghttp2" >> config.mak
if test "$has_nghttp2" != "no" ; then
    echo "NGHTTP2_CFLAGS=$nghttp2_cflags" >> config.mak
    echo "NGHTTP2_LDFLAGS=$nghttp2_ldflags" >> config.mak
    echo "#define GPAC_HAS_HTTP2" >> $TMPH
fi


echo "DISABLE_PLAYER=$disable_player" >> config.mak
echo "DISABLE_STREAMING=$disable_streaming" >> config.mak
echo "DISABLE_SVG=$disable_svg" >> config.mak
echo "DISABLE_LASER=$disable_laser" >> config.mak
echo "DISABLE_SAF=$disable_saf" >> config.mak
echo "DISABLE_BIFS=$disable_bifs" >> config.mak
echo "DISABLE_SENG=$disable_seng" >> config.mak
echo "DISABLE_LOADER_ISOFF=$disable_loader_isoff" >> config.mak
echo "DISABLE_LOADER_BT=$disable_loader_bt" >> config.mak
echo "DISABLE_LOADER_XMT=$disable_loader_xmt" >> config.mak
echo "DISABLE_LOADER_QTVR=$disable_qtvr" >> config.mak
echo "DISABLE_LOADER_SWF=$disable_swf" >> config.mak
echo "DISABLE_SCENE_STATS=$disable_scene_stats" >> config.mak
echo "DISABLE_SCENE_DUMP=$disable_scene_dump" >> config.mak
echo "DISABLE_SCENE_ENCODE=$disable_scene_encode" >> config.mak
echo "DISABLE_SCENEGRAPH=$disable_scenegraph" >> config.mak
echo "DISABLE_CRYPTO=$disable_crypto" >> config.mak
echo "DISABLE_DVBX=$disable_dvbx" >> config.mak
echo "DISABLE_AVILIB=$disable_avi" >> config.mak
echo "DISABLE_M2PS=$disable_m2ps" >> config.mak
echo "DISABLE_OGG=$disable_ogg" >> config.mak
echo "DISABLE_ISOFF=$disable_isoff" >> config.mak
echo "DISABLE_ISOFF_HINT=$disable_isoff_hint" >> config.mak
echo "DISABLE_VOBSUB=$disable_vobsub" >> config.mak
echo "DISABLE_TTXT=$disable_ttxt" >> config.mak
echo "DISABLE_TTML=$disable_ttml" >> config.mak
echo "DISABLE_SMGR=$disable_smgr" >> config.mak
echo "DISABLE_AV_PARSERS=$disable_parsers" >> config.mak
echo "DISABLE_MEDIA_IMPORT=$disable_import" >> config.mak
echo "DISABLE_MEDIA_EXPORT=$disable_export" >> config.mak
echo "DISABLE_MPD=$disable_mpd" >> config.mak
echo "DISABLE_DASH_CLIENT=$disable_dash" >> config.mak
echo "DISABLE_CORE_TOOLS=$disable_core_tools" >> config.mak
echo "DISABLE_OD_DUMP=$disable_od_dump" >> config.mak
echo "DISABLE_OD_PARSE=$disable_od_parse" >> config.mak
echo "MINIMAL_OD=$disable_od" >> config.mak
echo "DISABLE_ISOM_ADOBE=$disable_isoff_hds" >> config.mak
echo "DISABLE_VRML=$disable_vrml" >> config.mak
echo "DISABLE_ROUTE=$disable_route" >> config.mak
echo "DISABLE_CRYPTO=$disable_crypto" >> config.mak

if test "$disable_parsers" = "yes" ; then
    disable_m2ts_mux="yes"
fi
echo "DISABLE_M2TS_MUX=$disable_m2ts_mux" >> config.mak
echo "DISABLE_M2TS=$disable_m2ts" >> config.mak


echo "GPAC_USE_TINYGL=$has_tinygl" >> config.mak
echo "OGL_INCLS=$INCL3D" >> config.mak

echo "HAS_OPENGL=$has_opengl" >> config.mak

if test "$has_opengl" = "yes" ; then
    echo "OGL_LIBS=$LINK3D" >> config.mak
else
    echo "#define GPAC_DISABLE_3D" >> $TMPH
fi

if test "$has_tinygl" = "yes" ; then
    echo "#define GPAC_USE_TINYGL" >> $TMPH
fi

if test "$disable_nvdec" = "yes" ; then
    echo "#define GPAC_DISABLE_NVDEC" >> $TMPH
fi

echo "ENABLE_JOYSTICK=$has_joystick" >> config.mak

echo "HAS_OPENSSL=$has_ssl" >> config.mak
if test "$has_ssl" = "yes" ; then
    echo "SSL_LIBS=$LINK_SSL" >> config.mak
    echo "#define GPAC_HAS_SSL" >> $TMPH
fi

echo "CONFIG_SDL=$has_sdl" >> config.mak
if test "$has_sdl" = "yes" ; then
    echo "SDL_CFLAGS=$sdl_cflags" >> config.mak
    echo "SDL_LIBS=$sdl_lib_flags" >> config.mak
fi
if test "$has_ft" = "no" ; then
    has_ft="no"
else
    echo "FT_CFLAGS=$ft_cflags" >> config.mak
    echo "FT_LIBS=$ft_lflags" >> config.mak
fi
echo "CONFIG_AMR_NB=$has_amr_nb_fixed" >> config.mak
echo "CONFIG_AMR_NB_FT=$has_amr_nb" >> config.mak
echo "CONFIG_AMR_WB_FT=$has_amr_wb" >> config.mak
echo "DEBUGBUILD=$debuginfo" >> config.mak
echo "GPROFBUILD=$gprof_build" >> config.mak
echo "STATIC_BINARY=$static_bin" >> config.mak
echo "STATICBUILD=$static_build" >> config.mak

echo "CONFIG_IPV6=$has_ipv6" >> config.mak
if test "$has_ipv6" = "yes" ; then
    echo "#define GPAC_HAS_IPV6" >> $TMPH
fi

if test "$is_64" = "yes" ; then
    echo "#define GPAC_64_BITS" >> $TMPH
fi

if test "$win32" = "yes" ; then
    echo "CONFIG_DIRECTX=$has_mingw_directx" >> config.mak
    if test "$has_mingw_directx" = "yes" ; then
        echo "DX_PATH=$dx_path" >> config.mak
    fi
fi

echo "CONFIG_PLATINUM=$has_platinum" >> config.mak

echo "CONFIG_OPENSVC=$has_opensvc" >> config.mak
if test "$has_opensvc" = "yes" ; then
    echo "OSVC_CFLAGS=$osvc_cflags" >> config.mak
    echo "OSVC_LDFLAGS=$osvc_ldflags" >> config.mak
    echo "#define GPAC_HAS_OPENSVC" >> $TMPH
fi

echo "CONFIG_OPENHEVC=$has_openhevc" >> config.mak
if test "$has_openhevc" = "yes" ; then
    echo "OHEVC_CFLAGS=$ohevc_cflags" >> config.mak
    echo "OHEVC_LDFLAGS=$ohevc_ldflags" >> config.mak
    echo "#define GPAC_HAS_OPENHEVC" >> $TMPH


if test "$static_modules" = "yes" ; then
    echo "#define GPAC_OPENHEVC_STATIC" >> $TMPH
fi

fi

echo "MOZILLA_DIR=$moz_path" >> config.mak

echo "LINUX_DVB=$has_dvb4linux" >> config.mak
if test "$has_dvb4linux" = "yes"; then
    echo "#define GPAC_HAS_LINUX_DVB" >> $TMPH
fi

if test "$has_oss_audio" != "no"; then
    echo "OSS_INC_TYPE=$has_oss_audio" >> config.mak
    echo "OSS_CFLAGS=$OSS_CFLAGS" >> config.mak
    echo "OSS_LDFLAGS=$OSS_LDFLAGS" >> config.mak
fi

echo "CONFIG_DIRECTFB=$has_directfb" >> config.mak
echo "DIRECTFB_INC_PATH=$directfb_inc" >> config.mak
echo "DIRECTFB_LIB=$directfb_lib" >> config.mak

echo "CONFIG_X11=$has_x11" >> config.mak

if test "$has_x11_shm" = "yes"; then
    echo "USE_X11_SHM=$has_x11_shm" >> config.mak
fi
if test "$has_x11_xv" = "yes"; then
    echo "USE_X11_XV=$has_x11_xv" >> config.mak
fi

echo "CONFIG_HID=$has_hid" >> config.mak
echo "HID_LDFLAGS=$hid_lib" >> config.mak



if test "$is_64" = "yes"; then
#not on OSX ...
if test "$darwin" = "yes"; then
    echo "X11_LIB_PATH=$X11_PATH/lib" >> config.mak
else
    echo "X11_LIB_PATH=$X11_PATH/lib64" >> config.mak
fi
else
    echo "X11_LIB_PATH=$X11_PATH/lib" >> config.mak
fi
echo "X11_INC_PATH=$X11_PATH/include" >> config.mak

GPAC_ENST_INC=no
GPAC_ENST=no
enst_dir="`ls \"$source_path/src/\" | grep enst`"
if test "$enst_dir" = "enst"; then
    echo "GPAC Proprietary Extensions enabled"
    GPAC_ENST_INC=yes
    #we need libiconv for eit & co
    cat > $TMPC << EOF
#include <iconv.h>
int main( void ) {
return 0;
}
EOF

    if docc -L$local_lib -liconv ; then
        GPAC_ENST=yes
        echo "LIBGPAC_ENST=`cd src; ls enst/*.c | sed -e 's/\.c/.o/' | tr -s '\r\n' ' ' ; cd ..`" >> config.mak
    else
        echo "Couldn't find libiconv - disabling GPAC ENST extensions"
        GPAC_ENST="no"
    fi
fi
echo "GPAC_ENST=$GPAC_ENST" >> config.mak
echo "GPAC_ENST_INC=$GPAC_ENST" >> config.mak



#build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then

    echo "Creating compilation tree image"
    SRC_DIRS="src src/utils src/isomedia src/ietf src/odf src/bifs src/scenegraph src/filter_core src/filters src/terminal src/crypto src/media_tools src/scene_manager src/compositor src/laser src/evg src/quickjs src/jsmods"

    APP_DIRS="applications/gpac applications/mp4box applications/mp4client"

    for dir in $SRC_DIRS ; do
        mkdir -p "$dir"
    done
    ln -sf "$source_path/Makefile" Makefile
    ln -sf "$source_path/static.mak" static.mak
    ln -sf "$source_path/src/Makefile" src/Makefile

    mkdir -p applications
    ln -sf "$source_path/applications/Makefile" applications/Makefile
    mkdir -p applications/testapps

    for dir in $APP_DIRS ; do
        mkdir -p "$dir"
        ln -sf "$source_path/$dir/Makefile" "$dir/Makefile"
    done


    cur_dir="`pwd`"
    cd "$source_path/"
    MOD_DIRS="`ls -d modules/*/`"
    cd "$cur_dir"

    mkdir -p modules
    ln -sf "$source_path/modules/Makefile" modules/Makefile

    for dir in $MOD_DIRS ; do
        if [ -f "$source_path/$dir/Makefile" ]; then
            mkdir -p "$dir"
            ln -sf "$source_path/$dir/Makefile" "$dir/Makefile"
        fi
    done
    if test "$has_mingw_directx" = "yes"; then
        ln -sf "$source_path/modules/dx_hw/hand.cur" modules/dx_hw/hand.cur
        ln -sf "$source_path/modules/dx_hw/collide.cur" modules/dx_hw/collide.cur
    fi

    cd "$cur_dir"

    echo "SRC_LOCAL_PATH=no" >> config.mak
else
    echo "SRC_LOCAL_PATH=yes" >> config.mak
fi

echo "SRC_PATH=$source_path" >> config.mak
echo "BUILD_PATH=$build_path" >> config.mak
echo "LOCAL_INC_PATH=$local_inc" >> config.mak


echo "#endif" >> $TMPH


#do not overwrite config.h if unchanged to avoid superfluous rebuilds.
if ! cmp -s $TMPH config.h ; then
    rm -f config.h
    mv -f $TMPH config.h
else
    echo "config.h is unchanged"
fi

echo "Check config.log for detection failures"

rm -f $TMPO $TMPC $TMPE $TMPS $TMPCXX $TMPH


if [ ! -d "./bin" ] ; then
    mkdir ./bin
fi
if [ ! -d "./bin/gcc" ] ; then
    mkdir ./bin/gcc
fi
if [ ! -d "./bin/gcc/temp" ] ; then
    mkdir ./bin/gcc/temp
fi


echo '%.opic : %.c' >> config.mak
if test "$verbose" = "no" ; then
echo '	@echo "  CC $<"' >> config.mak
fi
echo '	$(CC) $(CFLAGS) $(PIC_CFLAGS) -c $< -o $@' >> config.mak

echo '%.o : %.c' >> config.mak
if test "$verbose" = "no" ; then
echo '	@echo "  CC $<"' >> config.mak
fi
echo '	$(CC) $(CFLAGS) -c -o $@ $<' >> config.mak

echo '%.o: %.cpp' >> config.mak
if test "$verbose" = "no" ; then
echo '	@echo "  CC $<"' >> config.mak
fi
echo '	$(CXX) $(CFLAGS) -c -o $@ $<' >> config.mak

echo '%.o: %.rc' >> config.mak
if test "$verbose" = "no" ; then
echo '	@echo "  RC $<"' >> config.mak
fi
echo '	$(WINDRES) $< -o $@ ' >> config.mak


#pkg-config
generate_pkgconfig () {
	echo "prefix=$prefix"
	echo "exec_prefix=\${prefix}"
	echo "libdir=\${exec_prefix}/$libdir"
	echo "includedir=\${exec_prefix}/include"
	echo ""
	echo "Name: gpac"
	echo "Description: GPAC Multimedia Framework"
	echo "URL: http://gpac.io"
	echo "Version:$version"
	echo "Cflags: -I\${prefix}/include"
	echo "Libs: -L\${libdir} -lgpac"
}

generate_pkgconfig > gpac.pc


if test "$static_bin" = "yes"; then
 if test "$darwin" = "yes" ; then
  echo "\nWarning: static binaries on OSX cannot remove all dependendencies to system libraries\n"
 elif test "$win32" = "yes" ; then
  echo "\nWarning: static binaries on Win32 cannot remove all dependendencies to system libraries\n"
 fi
fi



echo "Done - type 'make help' for make info, 'make' to build"
