]> git.saurik.com Git - wxWidgets.git/blobdiff - wx-config.in
use GetBestSize() and not GetSize() for AsIs() size constraints -- this makes much...
[wxWidgets.git] / wx-config.in
index 52d256d53be0d38feb64f07b9ab7b946a9beafd8..8f0d03d7150d13f1682292a2a07c44f030323d8e 100755 (executable)
@@ -28,8 +28,14 @@ decho() { echo "$*" 1>&2; }
 
 # 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
@@ -37,20 +43,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]]
-           [--version[=VERSION]] [--basename] [--cppflags] [--cflags]
-           [--cxxflags] [--rezflags] [--libs] [--cc] [--cxx] [--ld] [LIB ...]
+           [--version[=VERSION]] [--basename] [--cc] [--cppflags] [--cflags]
+           [--cxxflags] [--rezflags] [--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.
 
-    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
@@ -102,12 +110,13 @@ wxconfig_output_options="prefix exec_prefix                     \
                          cppflags cflags cxxflags               \
                          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.
-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"
@@ -259,7 +268,7 @@ for arg; do
   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
@@ -535,6 +544,48 @@ find_best_delegate()
 }
 
 
+# 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"
+}
+
+# find_legacy_configs
+# Returns a list of configs installed by wx2.4 releases.
+find_legacy_configs()
+{
+    cd "$prefix/bin" 2> /dev/null &&                        \
+        ls wx*-2.4-config 2> /dev/null | grep -v ^wxbase;   \
+        ls wx*-2.4-config 2> /dev/null | grep ^wxbase
+}
+
+# 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 | grep -E $_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.
 # --------------------------------------------------------------
@@ -553,10 +604,11 @@ if [ -n "$output_option_list" ]; then
     _best_delegate=$(find_best_delegate)
 
     if [ "x$WXDEBUG" = "xverbose" ]; then
-        echo " all = $_remains_in_prefix"
-        echo " matching = $_delegates"
-        echo " best = $_best_delegate"
-        echo " this = $this_config"
+        decho
+        decho " all      = $_remains_in_prefix"
+        decho " matching = $_delegates"
+        decho " best     = $_best_delegate"
+        decho " this     = $this_config"
     fi
 
     for d in $_delegates; do
@@ -588,7 +640,14 @@ if [ -n "$output_option_list" ]; then
 
     elif [ -z "$_delegates" ]; then
 
-        cat <<-EOF
+        _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
 
@@ -598,6 +657,8 @@ if [ -n "$output_option_list" ]; then
 
        EOF
 
+        fi
+
     else
         echo " Specification was ambiguous.  Use additional feature options"
         echo " to choose between alternate matches."
@@ -620,6 +681,15 @@ if [ -n "$output_option_list" ]; then
         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
@@ -661,7 +731,39 @@ if ! user_mask_fits "$this_config" ; then
     fi
 
     if [ $_numdelegates -eq 0 ]; then
-        cat 1>&2 <<-EOF
+
+        _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
@@ -673,12 +775,13 @@ if ! user_mask_fits "$this_config" ; then
 
        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:  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.
 
-        exit 1
+            exit 1
+        fi
     fi
 
     if [ $_numdelegates -gt 1 ]; then
@@ -746,10 +849,11 @@ libdir="@libdir@"
 [ -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_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 "$input_option_utility"       ] || echo "${input_option_utility}-@WX_RELEASE@@WX_FLAVOUR@"
 
 
 # The rest are going to need a little more work.
@@ -770,7 +874,6 @@ ldlibs_xml="@EXTRALIBS_XML@"
 ldlibs_odbc="@EXTRALIBS_ODBC@"
 ldlibs_adv="@EXTRALIBS_SDL@"
 
-
 # lib_flags_for _liblist
 # This function returns a list of flags suitable to return with the
 # output of --libs for all of the libraries in _liblist.  You can
@@ -836,6 +939,32 @@ lib_flags_for()
     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
+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.
 # --------------------------------------------------------------
@@ -855,7 +984,8 @@ if is_monolithic; then
 
     # 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@"
+        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
@@ -864,22 +994,18 @@ if is_monolithic; then
 
 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@"
-    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
-            match_field "$i" $wx_libs || wx_libs="$wx_libs $i"
+            wx_libs="$(remove_field $i $wx_libs) $i"
         done
+    elif ! match_field base $wx_libs ; then
+        wx_libs="$wx_libs base"
     fi
 
     using_gui=no
@@ -892,6 +1018,9 @@ else    # MONOLITHIC = 0
         match_field "$i" @CORE_BASE_LIBS@ || using_gui=yes
     done
 
+    if [ "x$this_linkage" = "x-static" ]; then
+        link_deps=$(link_deps_for $wx_libs)
+    fi
     wx_libs="$_guildflags @WXCONFIG_RPATH@ $(lib_flags_for $wx_libs)"
 fi
 
@@ -923,6 +1052,7 @@ _cppflags=$(echo "-I${libdir}/wx/include/@TOOLCHAIN_FULLNAME@" $_include_cppflag
 [ -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_gl_libs"  ] || echo $(lib_flags_for gl)
+[ -z "$output_option_linkdeps" ] || echo $link_deps
 
 if [ -n "$output_option_libs" ]; then