]> git.saurik.com Git - wxWidgets.git/blobdiff - wx-config.in
Added wxQuantize
[wxWidgets.git] / wx-config.in
index 0da7bf134460d20c76036c48f6a44e5b3aaf332b..3fff29f90ec92b58b5c4084f5a8322cdcc9b7fcb 100755 (executable)
 #!/bin/sh
 
 #!/bin/sh
 
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
+# -------------------------------------------------------------------------
+#                              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@"
+WX_SUBRELEASE_NUMBER="@WX_SUBRELEASE_NUMBER@"
+release="@WX_MAJOR_VERSION_NUMBER@.@WX_MINOR_VERSION_NUMBER@"
+is_monolithic="@MONOLITHIC@"
+cross_compiling="@cross_compiling@"
+target="@host_alias@"
+static_flag="@STATIC_FLAG@"
+inplace_flag="no"
+
+# Misc configuration variables:
+
+update_prefixes()
+{
+    includedir="@includedir@"
+    libdir="@libdir@"
+}
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+update_prefixes
+
 CC="@CC@"
 GCC="@GCC@"
 CXX="@CXX@"
 LD="@SHARED_LD@"
 CC="@CC@"
 GCC="@GCC@"
 CXX="@CXX@"
 LD="@SHARED_LD@"
-cross_compiling=@cross_compiling@
-target=@host_alias@
-static_flag=@STATIC_FLAG@
+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@"
+GCC_PRAGMA_FLAGS="@GCC_PRAGMA_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
+}
 
 usage()
 {
     cat <<EOF
 
 usage()
 {
     cat <<EOF
-Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--static]
-                 [--libs] [--gl-libs]
+Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--inplace]
+                 [--toolkit=TOOLKIT] [--unicode[=yes|no]] [--debug[=yes|no]]
+                 [--universal[=yes|no]] [--host=HOST]
+                 [--version[=VERSION]] [--version-full] [--release]
+                 [--list] [--basename] [--static] [--libs] [--gl-libs]
                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
-                 [--cc] [--cxx] [--ld]
+                 [--cc] [--cxx] [--ld] [LIBRARIES]
 
 wx-config returns configuration information about the installed
 
 wx-config returns configuration information about the installed
-version of wxWindows. It may be used to query its version and
+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
 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 wxWindows version for
+use it to enable builds with an uninstalled wxWidgets version for
 package building and bleeding edge developers.  To do so, use it like
 this:
 
 package building and bleeding edge developers.  To do so, use it like
 this:
 
-${wx_builddir}/wx-config --prefix=${wx_srcdir} --exec-prefix=${wx_builddir}
+\${wx_builddir}/wx-config --inplace
+
+Note that any other options supplied must come *after* --inplace
+for it to take effect.
+
+--static must come before --cppflags, --cflags, --cxxflags,
+--libs and --gl-libs and --libs must come before the other ones.
+
+wx-config can take optional argument that contains comma- or space-separated
+list of wxWidgets libraries to compile and link against. This list can
+include both core and contrib libraries. Special value "std" stands for all
+libraries linked in by default. Examples: "wx-config --libs core,base"
+or "wx-config --cxxflags core,base".
 
 
-Note that any other options supplied must come *after* the prefix
-specification for it to take effect.
+--gl-libs option is deprecated, use "--libs gl" instead.
+
+If there are several different builds of wxWidgets installed in same prefix,
+you can use --host, --toolkit, --unicode, --debug, --universal and --version
+options to select one of them. Use --list option to show all available builds
+that match given criteria.
 
 EOF
 
 
 EOF
 
@@ -43,44 +195,73 @@ EOF
 
 cppflags()
 {
 
 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: again,
-    # it shouldn't be specified with gcc which looks there by default anyhow
-    # and gives warnings (at least 3.1 does) if it is specified explicitly --
-    # but this -I switch *is* needed for the other compilers
-    #
-    # 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}" != "yes" \
-                  -o "@includedir@" != "/usr/local/include" \) \
-            -a \( "${cross_compiling}" != "yes" \
-                  -o "@includedir@" != "/usr/${target}/include" \) ;
-    then
-        includes=" -I@includedir@"
+    includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}"
+
+    # in inplace case we need to also add path to contrib headers -- do it
+    # unconditionally as they might be used and we have no way of knowing if
+    # they really are
+    if test $inplace_flag = yes ; then
+        includes="$includes -I${prefix}/include -I${prefix}/contrib/include"
+    else
+        includes="$includes -I${includedir}/wx-${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}"
     fi
 
     fi
 
-    includes="-I@libdir@/wx/include/@TOOLCHAIN_NAME@$includes"
+    flags="$includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS}"
+    if test $static_flag != yes ; then
+        flags="$flags ${TOOLCHAIN_DLL_DEFS}"
+    fi
 
 
-    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@
+    if test $nogui_flag = "yes" ; then
+        flags="$flags -DwxUSE_GUI=0"
     fi
     fi
+
+    echo "$flags${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}"
 }
 
 if test $# -eq 0; then
     usage 1 1>&2
 fi
 
 }
 
 if test $# -eq 0; then
     usage 1 1>&2
 fi
 
+
+# handle libraries list:
+
+libs_list=""
+
+for arg in $*; do
+  case "$arg" in
+    -*)
+      ;;
+    *)
+      libs_list="$libs_list `echo "$arg" | tr ',' ' '`"
+      ;;
+  esac
+done
+      
+if test "x$libs_list" = "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
+  # always add wxBase, any wxApp needs it:
+  libs_list="$libs_list base"
+fi
+
+# determine if at least one gui lib was used:
+nogui_flag="yes"
+for i in $libs_list; do
+  case $i in
+      base|net)
+        ;;
+      *)
+        nogui_flag="no"
+        ;;
+  esac
+done
+
+
+# handle options:
+
 while test $# -gt 0; do
   case "$1" in
   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
 while test $# -gt 0; do
   case "$1" in
   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
@@ -88,11 +269,15 @@ while test $# -gt 0; do
   esac
 
   case $1 in
   esac
 
   case $1 in
+    --inplace)
+      inplace_flag=yes
+      ;;
     --prefix=*)
       prefix=$optarg
       if test $exec_prefix_set = no ; then
         exec_prefix=$optarg
       fi
     --prefix=*)
       prefix=$optarg
       if test $exec_prefix_set = no ; then
         exec_prefix=$optarg
       fi
+      update_prefixes
       ;;
     --prefix)
       echo $prefix
       ;;
     --prefix)
       echo $prefix
@@ -100,12 +285,22 @@ while test $# -gt 0; do
     --exec-prefix=*)
       exec_prefix=$optarg
       exec_prefix_set=yes
     --exec-prefix=*)
       exec_prefix=$optarg
       exec_prefix_set=yes
+      update_prefixes
       ;;
     --exec-prefix)
       echo $exec_prefix
       ;;
     --version)
       ;;
     --exec-prefix)
       echo $exec_prefix
       ;;
     --version)
-      echo @WX_MAJOR_VERSION_NUMBER@.@WX_MINOR_VERSION_NUMBER@.@WX_RELEASE_NUMBER@
+      echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
+      ;;
+    --version-full)
+      echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}.${WX_SUBRELEASE_NUMBER}
+      ;;
+    --release)
+      echo $release
+      ;;
+    --basename)
+      echo $basename_gui
       ;;
     --static)
       static_flag=yes
       ;;
     --static)
       static_flag=yes
@@ -114,39 +309,86 @@ while test $# -gt 0; do
       cppflags
       ;;
     --cflags)
       cppflags
       ;;
     --cflags)
-      echo `cppflags` @CODE_GEN_FLAGS@
+      echo `cppflags` ${CODE_GEN_FLAGS}
       ;;
     --cxxflags)
       ;;
     --cxxflags)
-      echo `cppflags` @CODE_GEN_FLAGS@ @CODE_GEN_FLAGS_CXX@
+      echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
       ;;
     --ldflags)
       ;;
     --ldflags)
-      echo @LDFLAGS_EXE@
+      echo ${LDFLAGS_EXE}
       ;;
     --rezflags)
       ;;
     --rezflags)
-      echo @LIBWXMACRESWXCONFIG@
+      echo `eval echo ${MACRESWXCONFIG}`
       ;;
       ;;
+
     --libs)
     --libs)
-      if test "@libdir@" != "/usr/lib" \
+      # include install directory only if it is not default:
+      if test "${libdir}" != "/usr/lib" \
               -a \( "${cross_compiling}" != "yes" \
               -a \( "${cross_compiling}" != "yes" \
-                    -o "@libdir@" != "/usr/${target}/lib" \) ;
+                    -o "${libdir}" != "/usr/${target}/lib" \) ;
       then
       then
-          libs="-L@libdir@"
+          libs="-L${libdir}"
       fi
 
       fi
 
-      if test $static_flag = yes ; then
-          echo "$libs @LDFLAGS@ @WXCONFIG_RPATH@ @libdir@/@WXCONFIG_LIBS_STATIC@ @LIBS@ @DMALLOC_LIBS@"
+      # it's simpler to avoid handling "base" itself at all as we add it in the
+      # end to the list of libraries anyhow
+      # 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_GUI_LIBS $CORE_BASE_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
       else
-          echo $libs @LDFLAGS@ @WXCONFIG_RPATH@ @WXCONFIG_LIBS@ @DMALLOC_LIBS@
+          # we may need to replace "std" alias with its expansion
+          newlist=
+          hadstd=0
+          for i in $libs_list; do
+              case $i in
+                  std)
+                    hadstd=1
+                    ;;
+
+                  base)
+                    # if we have std, we're going to add base anyhow, avoid
+                    # having it twice in the end
+                    if [ $hadstd = 0 ]; then
+                        newlist="$newlist $i"
+                    fi
+                    ;;
+
+                  *)
+                    newlist="$newlist $i"
+                    ;;
+              esac
+          done
+          libs_list="$newlist"
+          if [ $hadstd = 1 ]; then
+              libs_list="$libs_list $CORE_GUI_LIBS $CORE_BASE_LIBS"
+          fi
+
+          # 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)
       fi
 
       ;;
     --gl-libs)
-      if test $static_flag = yes -a "x" != "x@WXCONFIG_LIBS_STATIC_GL@" ; then
-          gllibs="@libdir@/@WXCONFIG_LIBS_STATIC_GL@"
-      else
-          gllibs="@WXCONFIG_LIBS_GL@"
-      fi
-      echo @LDFLAGS_GL@ $gllibs
+      output_libs gl
       ;;
     --cc)
       echo $CC
       ;;
     --cc)
       echo $CC
@@ -157,7 +399,11 @@ while test $# -gt 0; do
     --ld)
       echo $LD
       ;;
     --ld)
       echo $LD
       ;;
-    *)
+    --help|-h)
+      usage 1 1>&2
+      ;;
+    -*)
+      # unrecognized flag is error
       usage 1 1>&2
       ;;
   esac
       usage 1 1>&2
       ;;
   esac