#!/bin/sh

# -------------------------------------------------------------------------
#                              Configured settings:
# -------------------------------------------------------------------------

# Version and build type information:

WX_MAJOR_VERSION_NUMBER="@WX_MAJOR_VERSION_NUMBER@"
WX_MINOR_VERSION_NUMBER="@WX_MINOR_VERSION_NUMBER@"
WX_RELEASE_NUMBER="@WX_RELEASE_NUMBER@"
release="@WX_MAJOR_VERSION_NUMBER@.@WX_MINOR_VERSION_NUMBER@"
is_monolithic="@MONOLITHIC@"
cross_compiling="@cross_compiling@"
target="@host_alias@"
static_flag="@STATIC_FLAG@"


# Misc configuration variables:

update_prefixes()
{
    includedir="@includedir@"
    libdir="@libdir@"
}
prefix="@prefix@"
exec_prefix="@exec_prefix@"
update_prefixes

CC="@CC@"
GCC="@GCC@"
GCC_SEARCHES_USR_LOCAL_INCLUDE="@GCC_SEARCHES_USR_LOCAL_INCLUDE@"
CXX="@CXX@"
LD="@SHARED_LD@"
srcdir="@top_srcdir@"
builddir="@top_builddir_wxconfig@"
basename_nogui="@WX_LIBRARY_BASENAME_NOGUI@"
basename_gui="@WX_LIBRARY_BASENAME_GUI@"

TOOLCHAIN_NAME="@TOOLCHAIN_NAME@"
LDFLAGS="@LDFLAGS@"
WXCONFIG_RPATH="@WXCONFIG_RPATH@"
DMALLOC_LIBS="@DMALLOC_LIBS@"
WXCONFIG_LIBS="@WXCONFIG_LIBS@"
WXCONFIG_LIBS_STATIC="@WXCONFIG_LIBS_STATIC@"
WXDEBUG_DEFINE="@WXDEBUG_DEFINE@"
TOOLCHAIN_DEFS="@TOOLCHAIN_DEFS@"
TOOLCHAIN_DLL_DEFS="@TOOLCHAIN_DLL_DEFS@"
WXCONFIG_INCLUDE="@WXCONFIG_INCLUDE@"
WX_LARGEFILE_FLAGS="@WX_LARGEFILE_FLAGS@"
CODE_GEN_FLAGS="@CODE_GEN_FLAGS@"
CODE_GEN_FLAGS_CXX="@CODE_GEN_FLAGS_CXX@"
LDFLAGS_EXE="@LDFLAGS_EXE@"
MACRESWXCONFIG="@MACRESWXCONFIG@"
EXTRALIBS_GUI="@EXTRALIBS_GUI@"
LIBS="@LIBS@"
WXCONFIG_LDFLAGS_GUI="@WXCONFIG_LDFLAGS_GUI@"


# Linker flags for sublibraries:

CORE_BASE_LIBS="@CORE_BASE_LIBS@"
CORE_GUI_LIBS="@CORE_GUI_LIBS@"

ldlibs_base="@WXCONFIG_EXTRALIBS@"
ldlibs_core="@EXTRALIBS_GUI@"
ldlibs_xml="@EXTRALIBS_XML@"
ldlibs_html="@EXTRALIBS_HTML@"
ldlibs_odbc="@EXTRALIBS_ODBC@"
ldlibs_adv="@EXTRALIBS_SDL@"

ldflags_gl="@LDFLAGS_GL@"
ldlibs_gl="@OPENGL_LIBS@"



# -------------------------------------------------------------------------
#                                Script code:
# -------------------------------------------------------------------------

exec_prefix_set=no

# is $1 among the rest of arguments?
isinlist()
{
    value=$1
    shift
    isin=no
    for iii in $* ; do
        if test $iii = $value ; then isin=yes ; fi
    done
    test $isin = yes
}

# output linker commands needed to link against libraries passed as arguments
# (does not handle monolithic/multilib):
output_libs()
{
    if test "$cross_compiling" = "yes" ; then
        target_tag="-${target}"
    fi

    all_libs=""
    all_ldflags=""
    wxlibs=""

    for lib in $* ; do
        eval xlibs=\$ldlibs_$lib
        eval xflags=\$ldflags_$lib
        if isinlist $lib $CORE_BASE_LIBS ; then
            basename=$basename_nogui
        else
            basename=$basename_gui
        fi
        if test $lib = "base" ; then
            libname="$basename"
        else
            libname="${basename}_${lib}"
        fi

        all_ldflags="$all_ldflags $xflags"
        if test $static_flag = yes ; then
            wxlibs="$wxlibs ${libdir}/lib${libname}-${release}${target_tag}.a"
            all_libs="$all_libs $xlibs"
        else
            wxlibs="$wxlibs -l${libname}-${release}${target_tag}"
        fi
    done

    echo $all_ldflags $wxlibs $all_libs
}

# output $(WXCONFIG_LDFLAGS_GUI) if any of libs passed as arguments is GUI
# library, nothing otherwise:
get_ldflags_gui()
{
    flags_to_ret=""
    for lib in $* ; do
        if isinlist $lib $CORE_GUI_LIBS ; then
            flags_to_ret="$WXCONFIG_LDFLAGS_GUI"
        fi
    done
    echo $flags_to_ret
}

# return the absolute path prepending builddir to it if needed
makeabs()
{
    path=$1
    # TODO: this only works under Unix and even there it could be
    #       enhanced to remove ".." and "."
    if [ `echo $path | sed 's/^\(.\).*/\1/'` != "/" ]; then
        if [ $path = "." ]; then
            path=$builddir
        else
            path="$builddir/$path"
        fi
    fi

    echo $path
}

usage()
{
    cat <<EOF
Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--release]
                 [--basename] [--static] [--libs[=LIBS]] [--gl-libs]
                 [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
                 [--cc] [--cxx] [--ld]

wx-config returns configuration information about the installed
version of wxWidgets. It may be used to query its version and
installation directories and also retrieve the C and C++ compilers
and linker which were used for its building and the corresponding
flags.

Ordinarily it should be installed to the appropriate system location
along with the headers and library files, but it is also possible to
use it to enable builds with an uninstalled wxWidgets version for
package building and bleeding edge developers.  To do so, use it like
this:

\${wx_builddir}/wx-config --prefix=\${wx_srcdir} --exec-prefix=\${wx_builddir}

Note that any other options supplied must come *after* the prefix
specification for it to take effect.

--static must come before --cppflags, --cflags, --cxxflags,
--libs and --gl-libs.

--libs can take optional argument that contains comma-separated list of
wxWidgets libraries to link against. This list can include both core
and contrib libraries.

--gl-libs option is deprecated, used --libs=gl instead.

EOF

    exit $1
}

cppflags()
{
    # we should never specify -I/usr/include on the compiler command line: this
    # is at best useless and at worst breaks compilation on the systems where
    # the system headers are non-ANSI because gcc works around this by storing
    # the ANSI-fied versions of them in its private directory which is searched
    # after all the directories on the cmd line.
    #
    # the situation is a bit more complicated with -I/usr/local/include:
    # it shouldn't be specified with some gcc installations which look there
    # by default anyhow and give warnings (at least 3.1 does) if it is
    # specified explicitly --
    # but this -I switch *is* needed for other gcc installation and for
    # the other compilers.
    # So I put a suitable test into configure.in and reuse the result here.
    #
    # note that we assume that if we use GNU cc we also use GNU c++ and vice
    # versa, i.e. this won't work (either for --cflags or --cxxflags) if GNU C
    # compiler and non-GNU C++ compiler are used or vice versa -- we'll fix
    # this when/if anybody complains about it
    if test "${includedir}" != "/usr/include" \
            -a "${includedir}" != "/usr/include/c++" \
            -a \( "${GCC_SEARCHES_USR_LOCAL_INCLUDE}" != "yes" \
                  -o "${includedir}" != "/usr/local/include" \) \
            -a \( "${cross_compiling}" != "yes" \
                  -o "${includedir}" != "/usr/${target}/include" \) ;
    then
        includes=" -I${includedir}"
    fi

    includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}$includes"

    if test $static_flag = yes ; then
        echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS}
    else
        echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${TOOLCHAIN_DLL_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS}
    fi
}

if test $# -eq 0; then
    usage 1 1>&2
fi

while test $# -gt 0; do
  case "$1" in
  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  case $1 in
    --inplace)
      prefix=`makeabs $srcdir`
      exec_prefix=`makeabs $builddir`
      exec_prefix_set=yes
      update_prefixes
      ;;
    --prefix=*)
      prefix=$optarg
      if test $exec_prefix_set = no ; then
        exec_prefix=$optarg
      fi
      update_prefixes
      ;;
    --prefix)
      echo $prefix
      ;;
    --exec-prefix=*)
      exec_prefix=$optarg
      exec_prefix_set=yes
      update_prefixes
      ;;
    --exec-prefix)
      echo $exec_prefix
      ;;
    --version)
      echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
      ;;
    --release)
      echo $release
      ;;
    --basename)
      echo $basename_gui
      ;;
    --static)
      static_flag=yes
      ;;
    --cppflags)
      cppflags
      ;;
    --cflags)
      echo `cppflags` ${CODE_GEN_FLAGS}
      ;;
    --cxxflags)
      echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
      ;;
    --ldflags)
      echo ${LDFLAGS_EXE}
      ;;
    --rezflags)
      echo `eval echo ${MACRESWXCONFIG}`
      ;;

    --libs*)
      # find if the argument was --libs=list,of,libs or --libs:
      if test "x$optarg" = "x" ; then
          if test "$is_monolithic" = "0" ; then
              # link against all libs if none given explicitly:
              libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
          fi
      else
          libs_list=`echo "$optarg" | tr ',' ' '`
          # always add wxBase, any wxApp needs it:
          libs_list="$libs_list base"
      fi

      # include install directory only if it is not default:
      if test "${libdir}" != "/usr/lib" \
              -a \( "${cross_compiling}" != "yes" \
                    -o "${libdir}" != "/usr/${target}/lib" \) ;
      then
          libs="-L${libdir}"
      fi

      # in monolithic build, link against the main library:
      if test "$is_monolithic" = "1" ; then
          # filter out core libs, leave only contrib in libs_list:
          newlist=
          for i in $libs_list ; do
              if isinlist $i $CORE_BASE_LIBS $CORE_GUI_LIBS ; then
                  libs_list="" # do nothing
              else
                  newlist="$newlist $i"
              fi
          done
          libs_list="$newlist"

          # output link flags:
          contrib_libs=`output_libs $libs_list`
          if test $static_flag = yes ; then
              echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
          else
              echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
          fi
      else
          # in multilib mode, link against all sublibraries:
          wxlibs=`output_libs $libs_list`
          guildflags=`get_ldflags_gui $libs_list`
          echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
      fi

      ;;
    --gl-libs)
      output_libs gl
      ;;
    --cc)
      echo $CC
      ;;
    --cxx)
      echo $CXX
      ;;
    --ld)
      echo $LD
      ;;
    *)
      usage 1 1>&2
      ;;
  esac
  shift
done