]> git.saurik.com Git - wxWidgets.git/blobdiff - wx-config.in
correct access for virtuals
[wxWidgets.git] / wx-config.in
index eb199d4acbbba78a98bffa1d6eab0781ecb86500..c6fbf60f1c9ef79801a3557806870c790867b772 100755 (executable)
 # Licence:     wxWindows licence
 ############################################################################
 
 # Licence:     wxWindows licence
 ############################################################################
 
+# Extra^2 debug mode, for if things ever get really weird.
+[ -z "$WXDEBUG_X" ] || set -x
 
 
-# Start with some basic stuff, like the ability to die gracefully,
+# We expect a posix shell, so if this is a Bourne shell,
+# and apparently a few still exist, try for bash or ksh.
+
+if [ ~ = '~' ]
+then
+    if (bash -c echo) >/dev/null 2>&1
+    then
+        exec bash "$0" "$@"
+    fi
+    if (ksh -c echo) >/dev/null 2>&1
+    then
+        exec ksh "$0" "$@"
+    fi
+    echo "$0: this script requires bash or ksh"
+    exit 1
+fi
+
+# On with some basic stuff, like the ability to die gracefully,
 # and to tell people what we are about.
 # ------------------------------------------------------------------
 
 # and to tell people what we are about.
 # ------------------------------------------------------------------
 
@@ -28,8 +48,14 @@ decho() { echo "$*" 1>&2; }
 
 # usage _exitcode
 # Outputs a usage message to stderr and exits with _exitcode.
 
 # usage _exitcode
 # Outputs a usage message to stderr and exits with _exitcode.
-# Try to keep this to a single page.  We can add alternate help
-# targets if people want more detail from interactive help.
+# Try to keep this to a single page (ie. < 25 lines).  We can add
+# alternate or interactive help targets if people want more detail.
+#
+# Exit codes are now subject to a more strict interpretation.
+# wx-config should return 0 upon successful operation, 1 if the
+# reqested operation could not be completed successfully, and 2
+# if the requested operation is not supported by this version of
+# wx-config.
 usage()
 {
     cat 1>&2 <<EOF
 usage()
 {
     cat 1>&2 <<EOF
@@ -37,20 +63,22 @@ usage()
  wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--release] [--version-full]
            [--list] [--host=HOST] [--toolkit=TOOLKIT] [--universal[=yes|no]]
            [--unicode[=yes|no]] [--debug[=yes|no]] [--static[=yes|no]]
  wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--release] [--version-full]
            [--list] [--host=HOST] [--toolkit=TOOLKIT] [--universal[=yes|no]]
            [--unicode[=yes|no]] [--debug[=yes|no]] [--static[=yes|no]]
-           [--version[=VERSION]] [--basename] [--cppflags] [--cflags]
-           [--cxxflags] [--rezflags] [--libs] [--cc] [--cxx] [--ld] [LIB ...]
+           [--version[=VERSION]] [--basename] [--cc] [--cppflags] [--cflags]
+           [--cxxflags] [--rescomp] [--libs] [--cxx] [--ld] [--linkdeps]
+           [--utility=UTIL] [LIB ...] 
 
    wx-config returns  information about  the wxWidgets libraries available
    on your system.  It may be used to retrieve the information you require
    to build applications using these libraries.
 
 
    wx-config returns  information about  the wxWidgets libraries available
    on your system.  It may be used to retrieve the information you require
    to build applications using these libraries.
 
-    If alternative builds of wxWidgets exist on the system, you can  use the
-  options: --prefix, --host, --toolkit,  --unicode, --debug, --universal and
-  --version, to select from them.  Use the --list option  to show all builds
-  which  match any  specified criteria.   The unicode, universal,  and debug
-  options take an optional yes or no argument, while host and version accept
-  posix extended regex.  eg. wx-config --unicode=n --debug --host=?.* --list
-  will show all ansi-debug libraries installed, including cross libraries.
+    If alternative builds of wxWidgets exist on the system, you can use the
+  options:  --prefix,  --host,  --toolkit,  --unicode,  --debug,  --static,
+  --version and --universal, to select from them.  Use the --list option to
+  show alternatives available which match specified criteria.   The unicode,
+  debug, and universal options  take an  optional yes or no  argument, while
+  host and version  accept posix extended regex.   The --utility option will
+  return the correct version of UTIL to use with the selected library build.
+  --linkdeps returns only static libraries for your makefile link rule deps.
 
     Optional LIB arguments (comma or space separated) may be used to specify
   the wxWidgets libraries that  you wish  to use.  The magic "std" label may
 
     Optional LIB arguments (comma or space separated) may be used to specify
   the wxWidgets libraries that  you wish  to use.  The magic "std" label may
@@ -66,6 +94,9 @@ EOF
 [ $# -gt 0 ] || usage 1
 
 
 [ $# -gt 0 ] || usage 1
 
 
+# Contentious tools determined by configure.
+EGREP="@EGREP@"
+
 
 # For the people who know what they want, or think they do:
 # Divide the valid arguments into functional groups for later examination,
 
 # For the people who know what they want, or think they do:
 # Divide the valid arguments into functional groups for later examination,
@@ -95,25 +126,27 @@ EOF
 wxconfig_schema="host toolkit widgetset chartype debugtype flavour version linkage"
 
 # Options that are expected to generate some output.
 wxconfig_schema="host toolkit widgetset chartype debugtype flavour version linkage"
 
 # Options that are expected to generate some output.
-wxconfig_output_options="prefix exec_prefix                     \
-                         list                                   \
-                         release version version_full           \
-                         basename                               \
-                         cppflags cflags cxxflags               \
-                         rezflags                               \
-                         libs                                   \
-                         cc cxx ld                              \
+wxconfig_output_options="prefix exec_prefix
+                         list
+                         release version version_full
+                         basename
+                         cppflags cflags cxxflags
+                         rescomp
+                         rezflags
+                         libs
+                         linkdeps
+                         cc cxx ld
                          gl_libs"
 
 # Options that permit the user to supply hints that may affect the output.
 # These options all accept arbitrary values, to interpret as they please.
                          gl_libs"
 
 # Options that permit the user to supply hints that may affect the output.
 # These options all accept arbitrary values, to interpret as they please.
-wxconfig_input_options="prefix exec_prefix $wxconfig_schema" 
+wxconfig_input_options="prefix exec_prefix utility $wxconfig_schema"
 
 # Input options that accept only a yes or no argument.
 wxconfig_yesno_options="universal unicode debug static"
 
 # Boolean options that do something or not.
 
 # Input options that accept only a yes or no argument.
 wxconfig_yesno_options="universal unicode debug static"
 
 # Boolean options that do something or not.
-wxconfig_flag_options="$wxconfig_yesno_options inplace"
+wxconfig_flag_options="$wxconfig_yesno_options selected_config no_rpath inplace"
 
 
 
 
 
 
@@ -125,7 +158,7 @@ wxconfig_flag_options="$wxconfig_yesno_options inplace"
 option_name()
 {
     _option_name_temp=${1%%=*}
 option_name()
 {
     _option_name_temp=${1%%=*}
-    echo "${_option_name_temp#--}" | tr '-' '_'
+    echo ${_option_name_temp#--} | tr '-' '_'
 }
 
 # option_value _string
 }
 
 # option_value _string
@@ -154,11 +187,15 @@ remove_field()
     _remf_value="$1"
     _remf_list=''
     shift
     _remf_value="$1"
     _remf_list=''
     shift
-    for _remf_item; do
-        [ "x$_remf_item" = "x$_remf_value" ] ||                        \
-            _remf_list="${_remf_list:+$_remf_list }$_remf_item"
-    done
-    echo "$_remf_list"
+    if [ -n "$_remf_value" ]; then
+        for _remf_item; do
+            [ "x$_remf_item" = "x$_remf_value" ] ||
+                _remf_list="${_remf_list:+$_remf_list }$_remf_item"
+        done
+        echo "$_remf_list"
+    else
+        echo $*
+    fi
 }
 
 # validate_arg _domain _set _name _value
 }
 
 # validate_arg _domain _set _name _value
@@ -194,16 +231,17 @@ validate_arg()
 # in any case.
 check_yesno_option()
 {
 # in any case.
 check_yesno_option()
 {
-    eval "case \${yesno_option_$1-\${flag_option_$1-unset}} in              \
-            unset)                          ;;                              \
-            y*|Y*)  input_option_$2=\"$3\"  ;;                              \
-            n*|N*)  input_option_$2=\"$4\"  ;;                              \
-            *)                                                              \
-                decho;                                                      \
-                decho \" *** Error: Invalid request '--$1=\$yesno_option_$1'\"; \
-                decho \" Valid arguments for --$1 are: [ yes, no ]\";       \
-                decho;                                                      \
-                exit 1                      ;;                              \
+    eval "case \${yesno_option_$1-\${flag_option_$1-unset}} in
+            unset)                          ;;
+            y*|Y*)  input_option_$2=\"$3\"  ;;
+            n*|N*)  input_option_$2=\"$4\"  ;;
+            *)
+                decho
+                decho \" *** Error: Invalid request '--$1=\$yesno_option_$1'\"
+                decho \" Valid arguments for --$1 are: [ yes, no ]\"
+                decho
+                exit 1
+                ;;
          esac"
 }
 
          esac"
 }
 
@@ -231,8 +269,8 @@ for arg; do
     --*=*)
         _name=$(option_name $arg)
         _value=$(option_value $arg)
     --*=*)
         _name=$(option_name $arg)
         _value=$(option_value $arg)
-        if validate_arg wxconfig input "$_name" "$_value"       \
-        || validate_arg wxconfig yesno "$_name" "$_value";      \
+        if validate_arg wxconfig input "$_name" "$_value" ||
+           validate_arg wxconfig yesno "$_name" "$_value"
         then
             continue
         fi
         then
             continue
         fi
@@ -240,8 +278,8 @@ for arg; do
 
     --*)
         _name=$(option_name $arg)
 
     --*)
         _name=$(option_name $arg)
-        if validate_arg wxconfig flag   "$_name" yes            \
-        || validate_arg wxconfig output "$_name" yes;
+        if validate_arg wxconfig flag   "$_name" yes ||
+           validate_arg wxconfig output "$_name" yes
         then
             continue
         fi
         then
             continue
         fi
@@ -255,7 +293,7 @@ for arg; do
   esac
   decho "  *** Error: Unrecognised option: '$arg'"
   decho "Use wx-config --help for information on command line options."
   esac
   decho "  *** Error: Unrecognised option: '$arg'"
   decho "Use wx-config --help for information on command line options."
-  exit 1
+  exit 2
 done
 
 # validate_arg only checks and decomposes form.  Sanity check the yes/no
 done
 
 # validate_arg only checks and decomposes form.  Sanity check the yes/no
@@ -308,6 +346,9 @@ get_mask()
     eval echo "\${$1_host}\${$1_toolkit}\${$1_widgetset}-\${$1_chartype}-\${$1_debugtype}\${$1_linkage}-\${$1_version}\${$1_flavour}"
 }
 
     eval echo "\${$1_host}\${$1_toolkit}\${$1_widgetset}-\${$1_chartype}-\${$1_debugtype}\${$1_linkage}-\${$1_version}\${$1_flavour}"
 }
 
+# Returns true if this script is for a cross compiled config.
+is_cross()  { [ "x@cross_compiling@" = "xyes" ]; }
+
 
 # Determine the base directories we require.
 prefix=${input_option_prefix-${this_prefix:-@prefix@}}
 
 # Determine the base directories we require.
 prefix=${input_option_prefix-${this_prefix:-@prefix@}}
@@ -316,7 +357,7 @@ wxconfdir="@libdir@/wx/config"
 
 installed_configs=$( cd "$wxconfdir" 2> /dev/null && ls | grep -v "^inplace-" )
 
 
 installed_configs=$( cd "$wxconfdir" 2> /dev/null && ls | grep -v "^inplace-" )
 
-target="@host_alias@"
+is_cross && target="@host_alias@"
 
 # Define a pseudo-hash to contain the specification of this wx-config
 # instance and its associated library.
 
 # Define a pseudo-hash to contain the specification of this wx-config
 # instance and its associated library.
@@ -327,7 +368,7 @@ this_chartype="@WX_CHARTYPE@"
 this_debugtype="@WX_DEBUGTYPE@"
 this_flavour="@WX_FLAVOUR@"
 this_version="@WX_RELEASE@"
 this_debugtype="@WX_DEBUGTYPE@"
 this_flavour="@WX_FLAVOUR@"
 this_version="@WX_RELEASE@"
-this_linkage=$( [ @SHARED@ -eq 1 ] || echo '-static' )
+this_linkage=$( [ "x@SHARED@" = "x1" ] || echo '-static' )
 
 this_config=$(get_mask this)
 
 
 this_config=$(get_mask this)
 
@@ -371,87 +412,8 @@ fi
 
 
 
 
 
 
-# The only action we can perform authoritatively prior to delegation
-# is to list all the possible delegates.
-# --------------------------------------------------------------
-
-# find_eligible_delegates _mask
-# Outputs all the config files installed which match the
-# (extended regex) _mask passed as an argument.
-find_eligible_delegates() { echo "$installed_configs" | grep -E "$1" 2> /dev/null; }
-
-# user_mask_fits _config
-# Returns true if the string _config satisfies the user specified mask.
-user_mask_fits()          { echo "$1" | grep -E "$configmask" > /dev/null 2>&1; }
-
-
-# Next chance for another satisfied customer then
-#
-# If we want to get really polished here we can do plural checking,
-# but we should probably leave that until the day we gettextise it.
-# If we have cpu cycles to spare for glitz, we could run the
-# find_best_delegate function over the list and mark the one that
-# would be used by default if no further disambiguation was to occur.
-# FIXME:  This is probably useful to do in any case, but lets not
-# tangle them up until things settle down again.
-if [ -n "$output_option_list" ]; then
-
-    _delegates="$(find_eligible_delegates $configmask)"
-
-    if user_mask_fits "$this_config" ; then
-
-        echo
-        echo "  This config ($this_config) will be used for output."
-
-        if match_field "$this_config" $_delegates ; then
-            _delegates=$(remove_field $this_config $_delegates)
-        else
-            echo "    though it is not installed in:"
-            echo "    $wxconfdir"
-        fi
-
-        if [ -n "$_delegates" ]; then
-            echo
-            echo "  You can select from the following alternates by explicitly"
-            echo "  specifying additional features to wx-config:"
-        fi
-
-    elif [ -z "$_delegates" ]; then
-
-        cat <<-EOF
-
-         No config found to match:
-            $configmask
-         in $wxconfdir
-
-             This config is: $this_config
-
-         Please install the desired library build, or use --list
-         without any feature specifiers to see the available configs
-         for this host.  wx-config --list --host=?.* will list all
-         installed configs including cross builds for other hosts.
-
-       EOF
-        exit 1
-
-    else
-        echo
-        echo "  The following installed configurations match your specification:"
-    fi
-
-    echo
-    for i in $_delegates; do echo "    $i"; done
-    [ -z "$_delegates" ] || echo
-
-    exit
-fi
-
-
-
-
-
-# From here, we now need to figure out a delegation target.
-# --------------------------------------------------------------
+# From here on, we'll need to be able to figure out a delegation target.
+# -----------------------------------------------------------------------
 
 # The rules for delegation are:
 #
 
 # The rules for delegation are:
 #
@@ -492,6 +454,15 @@ fi
 # But first, more sugar to keep what follows clear and legible.
 # --------------------------------------------------------------
 
 # But first, more sugar to keep what follows clear and legible.
 # --------------------------------------------------------------
 
+# find_eligible_delegates _mask
+# Outputs all the config files installed which match the
+# (extended regex) _mask passed as an argument.
+find_eligible_delegates() { echo "$installed_configs" | $EGREP "$1" 2> /dev/null; }
+
+# user_mask_fits _config
+# Returns true if the string _config satisfies the user specified mask.
+user_mask_fits()          { echo "$1" | $EGREP "$configmask" > /dev/null 2>&1; }
+
 # count_fields _word
 # Returns the number of IFS split fields in _word
 count_fields()      { return $#; }
 # count_fields _word
 # Returns the number of IFS split fields in _word
 count_fields()      { return $#; }
@@ -565,9 +536,9 @@ do_find_best_delegate()
 
             [ "x$WXDEBUG" != "xfindprogress" ] || printf "." 1>&2
 
 
             [ "x$WXDEBUG" != "xfindprogress" ] || printf "." 1>&2
 
-            [ $_still_eligible -gt 1 ] && [ $# -gt 1 ] &&       \
-            do_find_best_delegate $(remove_field $i $*)
-           );
+            [ $_still_eligible -gt 1 ] && [ $# -gt 1 ] &&
+                do_find_best_delegate $(remove_field $i $*)
+           )
         then
 
             return
         then
 
             return
@@ -594,18 +565,173 @@ do_find_best_delegate()
 find_best_delegate()
 {
     for _fbdi in $wxconfig_schema; do
 find_best_delegate()
 {
     for _fbdi in $wxconfig_schema; do
-        is_set input_option_$_fbdi ||                                       \
+        is_set input_option_$_fbdi ||
             _unbound_options="${_unbound_options:+$_unbound_options }$_fbdi"
     done
     do_find_best_delegate $_unbound_options
 }
 
 
             _unbound_options="${_unbound_options:+$_unbound_options }$_fbdi"
     done
     do_find_best_delegate $_unbound_options
 }
 
 
+# Legacy wx-config helpers.
+# -------------------------
+
+# get_legacy_mask
+# Returns a mask in the format used by wx2.4.
+get_legacy_mask()
+{
+    [ $# -gt 0 ] || set m
+    eval [ "x\${$1_chartype}" != "xunicode" ] || _unicode_flag=u
+    eval [ "x\${$1_debugtype}" != "xdebug" ] || _debug_flag=d
+    eval echo "wx\${$1_toolkit}${_unicode_flag}${_debug_flag}-\${$1_version}\${$1_host}-config"
+}
 
 
-# And finally some cereal to sprinkle it all on.
+# find_legacy_configs
+# Returns a list of configs installed by wx2.4 releases.
+find_legacy_configs()
+{
+  (
+    cd "$prefix/bin" &&
+      {
+        ls wx*-2.4-config | grep -v ^wxbase
+        ls wx*-2.4-config | grep ^wxbase
+      }
+  ) 2> /dev/null
+}
+
+# find_best_legacy_config
+# Returns the best legacy config for a given specification.
+# This assumes no matching new style config has been found.
+find_best_legacy_config()
+{
+    _legacy_configs=$(find_legacy_configs)
+    if [ -n "$_legacy_configs" ]; then
+        _legacy_mask=$(get_legacy_mask)
+        for d in $_legacy_configs; do
+            if echo $d | $EGREP $_legacy_mask > /dev/null 2>&1 ; then
+                echo "$d"
+                return
+            fi
+        done
+    fi
+    false
+}
+
+
+
+# The only action we can perform authoritatively prior to delegation
+# is to list all the possible delegates.
+# --------------------------------------------------------------
+
+config_spec="$0 $*"
+[ -z "$WXDEBUG" ] || config_spec=$configmask
+
+# Next chance for another satisfied customer then
+#
+# If we want to get really polished here we can do plural checking,
+# but we should probably leave that until the day we gettextise it.
+if [ -n "$output_option_list" ]; then
+
+    _remains_in_prefix=$installed_configs
+    _delegates=$(find_eligible_delegates $configmask)
+    _best_delegate=$(find_best_delegate)
+
+    if [ "x$WXDEBUG" = "xverbose" ]; then
+        decho
+        decho " all      = $_remains_in_prefix"
+        decho " matching = $_delegates"
+        decho " best     = $_best_delegate"
+        decho " this     = $this_config"
+    fi
+
+    for d in $_delegates; do
+        _remains_in_prefix=$(remove_field $d $_remains_in_prefix)
+    done
+
+    echo
+    echo "    Default config is $this_config"
+    echo
+
+    if user_mask_fits "$this_config" ; then
+
+        echo "  Default config ${this_exec_prefix+in $this_exec_prefix }will be used for output"
+
+        if match_field "$this_config" $_delegates ; then
+            _delegates=$(remove_field $this_config $_delegates)
+        else
+            echo "  though it is not installed in: $prefix"
+            if [ -n "$_best_delegate" ] && [ "x$_best_delegate" != "x$this_config" ]; then
+                echo
+                echo "  Best alternate in $prefix:"
+                echo "    $_best_delegate"
+            fi
+        fi
+
+    elif [ -n "$_best_delegate" ]; then
+
+        echo "  Specification best match: $_best_delegate"
+
+    elif [ -z "$_delegates" ]; then
+
+        _last_chance=$(find_best_legacy_config)
+        if [ -n "$_last_chance" ]; then
+
+            echo "  Specification matches legacy config: $_last_chance"
+
+        else
+        
+            cat <<-EOF
+         No config found to match: $config_spec
+         in $wxconfdir
+
+         Please install the desired library build, or specify a different
+         prefix where it may be found.  If the library is not installed
+         you may call its wx-config directly by specifying its full path.
+
+       EOF
+
+        fi
+
+    else
+        echo " Specification was ambiguous.  Use additional feature options"
+        echo " to choose between alternate matches."
+    fi
+
+    _delegates=$(remove_field "$_best_delegate" $_delegates)
+
+    if [ -n "$_delegates" ]; then
+        echo
+        echo "  Alternate matches:"
+        for d in $_delegates; do
+            echo "    $d"
+        done
+    fi
+    if [ -n "$_remains_in_prefix" ]; then
+        echo
+        echo "  Also available in $prefix:"
+        for d in $_remains_in_prefix; do
+            echo "    $d"
+        done
+    fi
+
+    _legacy_configs=$(find_legacy_configs)
+    if [ -n "$_legacy_configs" ]; then
+        echo
+        echo "  Legacy configs available in $prefix:"
+        for d in $_legacy_configs; do
+            echo "    ${d%-config}"
+        done
+    fi
+
+    echo
+    exit
+fi
+
+
+
+# ... so if that wasn't what they wanted, then we need to know for
+# certain, can this config satisfy the user specification?
 # --------------------------------------------------------------
 
 # --------------------------------------------------------------
 
-# No more messing around, can this config satisfy the user specification?
 if ! user_mask_fits "$this_config" ; then
 
     # No?  Then lets see if it knows anybody who can.
 if ! user_mask_fits "$this_config" ; then
 
     # No?  Then lets see if it knows anybody who can.
@@ -619,7 +745,7 @@ if ! user_mask_fits "$this_config" ; then
         decho
         decho " to: $0"
         decho " ($this_config) cannot satisfy:"
         decho
         decho " to: $0"
         decho " ($this_config) cannot satisfy:"
-        decho " $configmask"
+        decho " $config_spec"
         decho " Someone has been terribly careless."
         decho
         exit 1
         decho " Someone has been terribly careless."
         decho
         exit 1
@@ -637,21 +763,56 @@ if ! user_mask_fits "$this_config" ; then
     fi
 
     if [ $_numdelegates -eq 0 ]; then
     fi
 
     if [ $_numdelegates -eq 0 ]; then
-        cat 1>&2 <<-EOF
 
 
-         No config found to match: $configmask
-         in $wxconfdir
-         Please install the desired library build, or use --list
-         without any feature specifiers to see all available configs.
+        _last_chance=$(find_best_legacy_config)
+        if [ -n "$_last_chance" ]; then
+
+            for arg; do
+                case "$arg" in
+                    --prefix*|--exec-prefix*|               \
+                    --version|--release|--basename|         \
+                    --static|--libs|--gl_libs|              \
+                    --cppflags|--cflags|--cxxflags|         \
+                    --cc|--cxx|--ld|                        \
+                    --rezflags|--inplace)
+                        _legacy_args="$_legacy_args $arg"
+                        ;;
+                    
+                    --static|--static=y*|--static=Y*)
+                        _legacy_args="$_legacy_args --static"
+                        ;;
+                esac
+            done
+
+            if [ -n "$WXDEBUG" ]; then
+                decho "  found a suitable legacy delegate: $_last_chance"
+                decho "--> $prefix/bin/$_last_chance $_legacy_args"
+            fi
+
+            export WXCONFIG_DELEGATED=yes
+            $prefix/bin/$_last_chance $_legacy_args
+            exit
+
+        else
+
+            cat 1>&2 <<-EOF
+
+         Warning: No config found to match: $config_spec
+                  in $wxconfdir
+         If you require this configuration, please install the desired
+         library build.  If this is part of an automated configuration
+         test and no other errors occur, you may safely ignore it.
+         You may use wx-config --list to see all configs available in
+         the default prefix.
 
        EOF
 
 
        EOF
 
-        # PIPEDREAM:  This will probably give Vadim an aneurysm if I
-        # mention it out of context, but from here we are actually
-        # just a teensy step from simply building the missing config
-        # for the user on the fly if this is an in tree wx-config.
+            # PIPEDREAM: from here we are actually just a teensy step
+            # from simply building the missing config for the user
+            # on the fly if this is an in tree wx-config.
 
 
-        exit 1
+            exit 1
+        fi
     fi
 
     if [ $_numdelegates -gt 1 ]; then
     fi
 
     if [ $_numdelegates -gt 1 ]; then
@@ -673,7 +834,8 @@ if ! user_mask_fits "$this_config" ; then
         fi
 
         decho
         fi
 
         decho
-        decho " Specification was ambiguous."
+        decho " *** Error: Specification is ambiguous"
+        decho "            as $config_spec"
         decho " Use additional feature options to choose between:"
         for i in $(find_eligible_delegates "$configmask"); do
             decho "  $i"
         decho " Use additional feature options to choose between:"
         for i in $(find_eligible_delegates "$configmask"); do
             decho "  $i"
@@ -695,50 +857,105 @@ fi
 
 
 
 
 
 
-
-
 # If we are still here, then from now on we are responsible for
 # all the user's needs.  Time to rustle up some output for them.
 # --------------------------------------------------------------
 
 [ -z "$WXDEBUG" ] || decho "  using this config"
 
 # If we are still here, then from now on we are responsible for
 # all the user's needs.  Time to rustle up some output for them.
 # --------------------------------------------------------------
 
 [ -z "$WXDEBUG" ] || decho "  using this config"
 
-if [ -n "$flag_option_inplace" ]; then
-    # If the user supplied a prefix, then the in tree config did not
-    # delegate out to anything in the user supplied prefix so reset
-    # the prefixes back to provide the correct compile options for
-    # this uninstalled wx build.
-    prefix=$this_prefix
-    exec_prefix=$this_exec_prefix
-fi
+# If the user supplied a prefix, and the in tree config did not
+# delegate out to anything in that prefix, then reset the build
+# tree prefix to provide the correct output for using this
+# uninstalled wx build.  Or put more simply:
+prefix=${this_prefix-$prefix}
+exec_prefix=${this_exec_prefix-$exec_prefix}
 
 includedir="@includedir@"
 libdir="@libdir@"
 
 includedir="@includedir@"
 libdir="@libdir@"
+bindir="@bindir@"
 
 # Trivial queries we can answer now.
 
 # Trivial queries we can answer now.
-[ -z "$output_option_prefix"       ] || echo $prefix
-[ -z "$output_option_exec_prefix"  ] || echo $exec_prefix
-[ -z "$output_option_release"      ] || echo "@WX_RELEASE@"
-[ -z "$output_option_version"      ] || echo "@WX_VERSION@"
-[ -z "$output_option_version_full" ] || echo "@WX_SUBVERSION@"
-[ -z "$output_option_basename"     ] || echo "@WX_LIBRARY_BASENAME_GUI@"
-[ -z "$output_option_rezflags"     ] || echo $(eval echo @MACRESWXCONFIG@)
-[ -z "$output_option_cc"           ] || echo "@CC@"
-[ -z "$output_option_cxx"          ] || echo "@CXX@"
-[ -z "$output_option_ld"           ] || echo "@EXE_LINKER@"
+[ -z "$output_option_prefix"        ] || echo $prefix
+[ -z "$output_option_exec_prefix"   ] || echo $exec_prefix
+[ -z "$output_option_release"       ] || echo "@WX_RELEASE@"
+[ -z "$output_option_version"       ] || echo "@WX_VERSION@"
+[ -z "$output_option_version_full"  ] || echo "@WX_SUBVERSION@"
+[ -z "$output_option_basename"      ] || echo "@WX_LIBRARY_BASENAME_GUI@"
+[ -z "$output_option_cc"            ] || echo "@CC@"
+[ -z "$output_option_cxx"           ] || echo "@CXX@"
+[ -z "$output_option_ld"            ] || echo "@EXE_LINKER@"
+[ -z "$flag_option_selected_config" ] || echo "$this_config"
+
+
+# --rezflags is deprecated and disabled (2005/11/29)
+if [ -n "$output_option_rezflags" ]; then
+    echo "@true"
+    decho "Warning: --rezflags, along with Mac OS classic resource building" \
+          "is deprecated.  You should remove this from your Makefile and" \
+         "build .app bundles instead."
+fi
 
 
 # The rest are going to need a little more work.
 # --------------------------------------------------------------
 
 
 
 # The rest are going to need a little more work.
 # --------------------------------------------------------------
 
-is_cross()      { [ "x@cross_compiling@" = "xyes" ]; }
-is_monolithic() { [ @MONOLITHIC@ -eq 1 ]; }
+is_monolithic() { [ "x@MONOLITHIC@" = "x1" ]; }
+is_static()     { [ -n "$this_linkage" ]; }
+is_installed()  { [ -z "$this_prefix" ]; }
+
+
+# Is the user after a support utility?
+# If this is a cross build, we need to find and return a suitable
+# native utility for the job, so we search:
+#
+#   1. local build dir (for native uninstalled builds only).
+#   2. (optional) user supplied prefix.
+#   3. configured install prefix.
+#   4. environment $PATH.
+#
+# and if such a thing still cannot be found, exit signalling an error.
+if [ -n "$input_option_utility" ]; then
+
+    # This is dumb, in tree binaries should be in a standard location
+    # like the libs, but work with what we've got for now.
+    is_cross || _util="$exec_prefix/utils/$input_option_utility/$input_option_utility"
+
+    if ! is_installed && [ -x "$_util" ]; then
+        is_static || _preload="eval LD_LIBRARY_PATH=$exec_prefix/lib"
+        echo $_preload $_util
+        exit
+    fi
+
+    IFS=':'
+    _user_prefix=${input_option_exec_prefix:-$input_option_prefix}
+
+    for _util in "${input_option_utility}-@WX_RELEASE@@WX_FLAVOUR@" \
+                 "${input_option_utility}-@WX_RELEASE@"             \
+                 "${input_option_utility}"
+    do
+        for p in ${_user_prefix:+$_user_prefix/bin} $bindir $PATH; do
 
 
+            [ -z "$WXDEBUG" ] || decho "  checking for: '$p/$_util'"
+
+            if [ -x "$p/$_util" ]; then
+                echo "$p/$_util"
+                exit
+            fi
+
+        done
+    done
+    exit 1
+
+fi
+
+
+# Still here?  Then get the options together for building an app.
+# ----------------------------------------------------------------
 
 # Additional configuration for individual library components.
 ldflags_gl="@LDFLAGS_GL@"
 
 
 # Additional configuration for individual library components.
 ldflags_gl="@LDFLAGS_GL@"
 
-ldlibs_base="@WXCONFIG_EXTRALIBS@"
+ldlibs_base="@WXCONFIG_LIBS@"
 ldlibs_core="@EXTRALIBS_GUI@"
 ldlibs_gl="@OPENGL_LIBS@"
 ldlibs_html="@EXTRALIBS_HTML@"
 ldlibs_core="@EXTRALIBS_GUI@"
 ldlibs_gl="@OPENGL_LIBS@"
 ldlibs_html="@EXTRALIBS_HTML@"
@@ -760,7 +977,7 @@ lib_flags_for()
     _all_libs=''
     _wxlibs=''
 
     _all_libs=''
     _wxlibs=''
 
-    ! is_cross || _target="-${target}"
+    is_cross && _target="-${target}"
 
     for lib; do
 
 
     for lib; do
 
@@ -792,10 +1009,24 @@ lib_flags_for()
         [ $lib = base ] || _libname="${_libname}_$lib"
         _libname="${_libname}-@WX_RELEASE@$_target"
 
         [ $lib = base ] || _libname="${_libname}_$lib"
         _libname="${_libname}-@WX_RELEASE@$_target"
 
-        if [ "x$this_linkage" = "x-static" ]; then
+        if is_static; then
             _wxlibs="$_wxlibs ${libdir}/lib${_libname}.a"
             for f in $(eval echo \"\$ldlibs_$lib\"); do
             _wxlibs="$_wxlibs ${libdir}/lib${_libname}.a"
             for f in $(eval echo \"\$ldlibs_$lib\"); do
-                _all_libs="$(remove_field $f $_all_libs) $f"
+
+                # Only propagate duplicate -libraries to their latest
+                # possible position.  Do not eliminate any other
+                # duplicates that might occur.  They should be fixed
+                # in configure long before they get here.
+                # This started as a workaround for Mac -framework,
+                # but it seems like a better policy in general, which
+                # will let the more heinous bugs in configure shake out.
+                # We should maybe filter *.a here too, but not unless
+                # we have to.
+                case "$f" in
+                  -l*)  _all_libs="$(remove_field $f $_all_libs) $f"    ;;
+                    *)  _all_libs="$_all_libs $f"                       ;;
+                esac
+
             done
         else
             _wxlibs="$_wxlibs -l${_libname}"
             done
         else
             _wxlibs="$_wxlibs -l${_libname}"
@@ -812,6 +1043,36 @@ lib_flags_for()
     echo $_all_ldflags $_wxlibs $_all_libs
 }
 
     echo $_all_ldflags $_wxlibs $_all_libs
 }
 
+# this is the strict subset of the above function which returns only the
+# (static) libraries themselves: this is used for linkdeps output which should
+# output the list of libraries the main program should depend on
+#
+# of course, this duplication is bad but I'll leave to somebody else the care
+# of refactoring this as I don't see any way to do it - VZ.
+
+# This (and the other cruft to support it) should be removed with
+# reference to the FIXME above when configure stops piping us a slurry
+# of options that need to be decomposed again for most practical uses - RL.
+link_deps_for()
+{
+    _wxlibs=''
+
+    is_cross && _target="-${target}"
+
+    for lib; do
+        if match_field "$lib" @CORE_BASE_LIBS@ ; then
+            _libname="@WX_LIBRARY_BASENAME_NOGUI@"
+        else
+            _libname="@WX_LIBRARY_BASENAME_GUI@"
+        fi
+        [ $lib = base ] || _libname="${_libname}_$lib"
+        _libname="${_libname}-@WX_RELEASE@$_target"
+
+        _wxlibs="$_wxlibs ${libdir}/lib${_libname}.a"
+    done
+
+    echo $_wxlibs
+}
 
 # Sanity check the list of libs the user provided us, if any.
 # --------------------------------------------------------------
 
 # Sanity check the list of libs the user provided us, if any.
 # --------------------------------------------------------------
@@ -823,15 +1084,16 @@ wx_libs=$(echo "$input_parameters" | tr ',' ' ')
 if is_monolithic; then
 
     # Core libs are already built into the blob.
 if is_monolithic; then
 
     # Core libs are already built into the blob.
-    for i in @CORE_GUI_LIBS@ @CORE_BASE_LIBS@; do
+    for i in std @CORE_GUI_LIBS@ @CORE_BASE_LIBS@; do
         wx_libs=$(remove_field $i $wx_libs)
     done
 
         wx_libs=$(remove_field $i $wx_libs)
     done
 
-    wx_libs="@WXCONFIG_LDFLAGS_GUI@ @WXCONFIG_RPATH@ $(lib_flags_for $wx_libs)"
+    wx_libs="@WXCONFIG_LDFLAGS_GUI@ $(lib_flags_for $wx_libs)"
 
     # We still need the core lib deps for a static build though
 
     # We still need the core lib deps for a static build though
-    if [ "x$this_linkage" = "x-static" ]; then
-        wx_libs="$wx_libs ${libdir}/libwx_@TOOLCHAIN_NAME@.a $ldlibs_core @LIBS@"
+    if is_static; then
+        link_deps="${libdir}/libwx_@TOOLCHAIN_NAME@.a" 
+        wx_libs="$wx_libs $link_deps $ldlibs_core @LIBS@"
     else
         wx_libs="$wx_libs -lwx_@TOOLCHAIN_NAME@"
     fi
     else
         wx_libs="$wx_libs -lwx_@TOOLCHAIN_NAME@"
     fi
@@ -840,22 +1102,18 @@ if is_monolithic; then
 
 else    # MONOLITHIC = 0
 
 
 else    # MONOLITHIC = 0
 
-    # Import everything by default, and base if it was omitted.
+    # Import everything by default, expand std if specified, or add base if omitted.
     if [ -z "$wx_libs" ]; then
         wx_libs="@CORE_GUI_LIBS@ @CORE_BASE_LIBS@"
     if [ -z "$wx_libs" ]; then
         wx_libs="@CORE_GUI_LIBS@ @CORE_BASE_LIBS@"
-    elif ! match_field base $wx_libs ; then
-        wx_libs="$wx_libs base"
-    fi
-
-    # Expand the magic library 'std' to the default set.
-    # Only add those not already specified to future-proof
-    # against changes to std which would otherwise break
-    # people's builds.
-    if match_field std $wx_libs; then
+    elif match_field std $wx_libs; then
+        # Bubble any libs that were already specified to the end
+        # of the list and ensure static linking order is retained.
         wx_libs=$(remove_field std $wx_libs)
         for i in @CORE_GUI_LIBS@ @CORE_BASE_LIBS@; do
         wx_libs=$(remove_field std $wx_libs)
         for i in @CORE_GUI_LIBS@ @CORE_BASE_LIBS@; do
-            match_field "$i" $wx_libs || wx_libs="$wx_libs $i"
+            wx_libs="$(remove_field $i $wx_libs) $i"
         done
         done
+    elif ! match_field base $wx_libs ; then
+        wx_libs="$wx_libs base"
     fi
 
     using_gui=no
     fi
 
     using_gui=no
@@ -868,7 +1126,10 @@ else    # MONOLITHIC = 0
         match_field "$i" @CORE_BASE_LIBS@ || using_gui=yes
     done
 
         match_field "$i" @CORE_BASE_LIBS@ || using_gui=yes
     done
 
-    wx_libs="$_guildflags @WXCONFIG_RPATH@ $(lib_flags_for $wx_libs)"
+    if is_static; then
+        link_deps=$(link_deps_for $wx_libs)
+    fi
+    wx_libs="$_guildflags $(lib_flags_for $wx_libs)"
 fi
 
 
 fi
 
 
@@ -883,47 +1144,99 @@ fi
 # Endgame.  Nothing left to discover now.
 # --------------------------------------------------------------
 
 # Endgame.  Nothing left to discover now.
 # --------------------------------------------------------------
 
-# cppflags
-# This function exists for no other reason than to make conditional
-# something that we may not use on several occasions.  It outputs
-# the basic cppflags determined from information gleaned above.
-# Nothing below here will change what it outputs, only whether it
-# does or not.
-cppflags()
-{
-    _cppflags="-I${libdir}/wx/include/@TOOLCHAIN_FULLNAME@"
+[ "$using_gui" = "yes" ] || _gui_cppflags="-DwxUSE_GUI=0"
 
 
-    if [ -n "$flag_option_inplace" ]; then
-        # Bring in all the headers as if the whole tree had been installed.
-        _cppflags="$_cppflags -I$includedir -I${prefix}/contrib/include"
-    else
-        _cppflags="$_cppflags -I${includedir}/wx-@WX_RELEASE@@WX_FLAVOUR@"
-    fi
-
-    _cppflags="$_cppflags @WXDEBUG_DEFINE@ @TOOLCHAIN_DEFS@"
-
-    [ -n "$this_linkage"   ] || _cppflags="$_cppflags @TOOLCHAIN_DLL_DEFS@"
-    [ "$using_gui" = "yes" ] || _cppflags="$_cppflags -DwxUSE_GUI=0"
-
-    echo $_cppflags "@WXCONFIG_INCLUDE@" "@WX_LARGEFILE_FLAGS@" "@GCC_PRAGMA_FLAGS@"
-}
+if is_installed; then
+    _include_cppflags="-I${includedir}/wx-@WX_RELEASE@@WX_FLAVOUR@"
+else
+    _include_cppflags="-I${includedir} -I${prefix}/contrib/include"
+fi
 
 
+_cppflags=$(echo "-I${libdir}/wx/include/@TOOLCHAIN_FULLNAME@" $_include_cppflags "@WXCONFIG_CPPFLAGS@" $_gui_cppflags)  
 
 # now without further ado, we can answer these too.
 
 # now without further ado, we can answer these too.
-[ -z "$output_option_cppflags" ] || echo $(cppflags)
-[ -z "$output_option_cflags"   ] || echo $(cppflags) "@CODE_GEN_FLAGS@"
-[ -z "$output_option_cxxflags" ] || echo $(cppflags) "@CODE_GEN_FLAGS@" "@CODE_GEN_FLAGS_CXX@"
+[ -z "$output_option_cppflags" ] || echo $_cppflags
+[ -z "$output_option_cflags"   ] || echo $_cppflags "@WXCONFIG_CFLAGS@"
+[ -z "$output_option_cxxflags" ] || echo $_cppflags "@WXCONFIG_CXXFLAGS@"
 [ -z "$output_option_gl_libs"  ] || echo $(lib_flags_for gl)
 [ -z "$output_option_gl_libs"  ] || echo $(lib_flags_for gl)
+[ -z "$output_option_linkdeps" ] || echo $link_deps
 
 if [ -n "$output_option_libs" ]; then
 
 
 if [ -n "$output_option_libs" ]; then
 
-    is_cross && [ "x$libdir" = "x/usr/${target}/lib" ]                      \
-    || [ "x$libdir" = "x/usr/lib" ]                                         \
-    || _ldflags="-L$libdir"
+    is_cross                                    &&
+        [ "x$libdir" = "x/usr/${target}/lib" ]  ||
+        [ "x$libdir" = "x/usr/lib" ]            ||
+        _ldflags="-L$libdir"
+
+    is_installed || [ -n "$flag_option_no_rpath" ] || _rpath="@WXCONFIG_RPATH@"
 
 
-    echo $_ldflags "@LDFLAGS@" $wx_libs "@DMALLOC_LIBS@"
+    echo $_ldflags "@LDFLAGS@" $_rpath $wx_libs "@DMALLOC_LIBS@"
 fi
 
 fi
 
+
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+#
+# Beyond here reside only machine or tool specific workarounds
+# that require knowlege not obtainable prior to this comment.
+#
+# Please.  Avoid addding things here, wx-config should avoid
+# hard coding tool specific details.  Do not use things here
+# as an example of other things that should be here,  These
+# shouldn't be here either.  This is a place of last resort
+# for interim workarounds.  I can but stress as strongly as
+# the censor will allow, there are only bad examples of things
+# that belong at this level of abstraction to follow.  It is
+# a limbo for glitches awaiting the Next Design Repair.  Ok.
+#
+# With that firmly in mind, our debut dilemma is:
+
+# Resource compilers.  An elusive term that covers some pretty
+# dissimilar concepts on various platforms.  The good news is,
+# each platform has only one definition of 'resource', compiled
+# or not, and so we can abstract that neatly to return a platform
+# specific invocation of the appropriate tool.  The bad news is,
+# windres (at least) requires knowledge of the wx header files
+# location(s) that cannot be predicted reliably before the call to
+# wx-config is made.  Currently for all known resource compilers,
+# we can simply return a command and some salient configuration
+# options in response to a request for --rescomp.  So here we
+# top up the options for any tools that may require information
+# that was only just determined in the last few machine cycles,
+# then output the necessary incantation for the platform.
+#
+# Most things should already be constant by the time configure
+# has run.  Do not add anything here that is already known there.
+
+if [ -n "$output_option_rescomp" ]; then
+
+    case "@RESCOMP@" in
+      *windres|wrc)
+        # Note that with late model windres, we could just insert
+       # _include_cppflags here, but use the old notation for now
+       # as it is more universally accepted.
+        if is_installed; then
+            echo "@RESCOMP@ --include-dir" \
+                           "${includedir}/wx-@WX_RELEASE@@WX_FLAVOUR@" \
+                           "@WXCONFIG_RESFLAGS@"
+        else
+            echo "@RESCOMP@ --include-dir ${includedir}" \
+                           "--include-dir ${prefix}/contrib/include" \
+                          "@WXCONFIG_RESFLAGS@"
+        fi
+        ;;
+
+      # neither rez not emxbind have any specific needs from
+      # us, so just output what was determined by configure.
+      *)
+        echo @RESCOMP@ @WXCONFIG_RESFLAGS@
+        ;;
+    esac
+
+fi
+
+#
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
 # And so that's it, we're done.  Have a nice build.
 
 exit 0
 # And so that's it, we're done.  Have a nice build.
 
 exit 0