X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8dabd665bd2ee0f8729c3aa03f95264e022c084b..3f4a2351e4c677c88c18ea812b609477adee7380:/wx-config.in diff --git a/wx-config.in b/wx-config.in index c87dcf9069..cf3a6b9dc5 100755 --- a/wx-config.in +++ b/wx-config.in @@ -17,8 +17,11 @@ # 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, + +# On with some basic stuff, like the ability to die gracefully, # and to tell people what we are about. # ------------------------------------------------------------------ @@ -43,9 +46,9 @@ 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 ...] - [--utility=UTIL] + [--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 @@ -58,6 +61,7 @@ usage() 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 @@ -73,6 +77,9 @@ EOF [ $# -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, @@ -102,14 +109,16 @@ EOF 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. @@ -120,7 +129,7 @@ wxconfig_input_options="prefix exec_prefix utility $wxconfig_schema" 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" @@ -131,15 +140,14 @@ wxconfig_flag_options="$wxconfig_yesno_options inplace" # Returns NAME if _string is of the form: --NAME[=...] option_name() { - _option_name_temp=${1%%=*} - echo "${_option_name_temp#--}" | tr '-' '_' + echo "$1" | sed 's/^--//;s/=.*//' | tr '-' '_' } # option_value _string # Returns FOO if _string is of the form: --option=FOO option_value() { - echo "${1#*=}" + echo "$1" | sed 's/^[^=]*=//' } # match_field _value _list @@ -148,7 +156,7 @@ match_field() { _match_field_match="$1" shift - for _match_field_i; do + for _match_field_i do [ "x$_match_field_i" != "x$_match_field_match" ] || return 0 done false @@ -162,8 +170,8 @@ remove_field() _remf_list='' shift if [ -n "$_remf_value" ]; then - for _remf_item; do - [ "x$_remf_item" = "x$_remf_value" ] || \ + for _remf_item do + [ "x$_remf_item" = "x$_remf_value" ] || _remf_list="${_remf_list:+$_remf_list }$_remf_item" done echo "$_remf_list" @@ -189,7 +197,7 @@ remove_field() # with the one liners you see on the page below. validate_arg() { - if match_field "$3" $(eval echo \"\$$1_$2_options\"); then + if match_field "$3" `eval echo \"\\\$$1_$2_options\"`; then eval "$2_options=\"\${$2_options:+\$$2_options }$3\"" eval "$2_option_$3=\"$4\"" return @@ -205,16 +213,17 @@ validate_arg() # 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" } @@ -233,26 +242,26 @@ check_yesno_option() # at this point, otherwise, it's time to just shut up and listen for # a moment. -for arg; do +for arg do case "$arg" in --help|-h) usage ;; --*=*) - _name=$(option_name $arg) - _value=$(option_value $arg) - if validate_arg wxconfig input "$_name" "$_value" \ - || validate_arg wxconfig yesno "$_name" "$_value"; \ + _name=`option_name $arg` + _value=`option_value $arg` + if validate_arg wxconfig input "$_name" "$_value" || + validate_arg wxconfig yesno "$_name" "$_value" then continue fi ;; --*) - _name=$(option_name $arg) - if validate_arg wxconfig flag "$_name" yes \ - || validate_arg wxconfig output "$_name" yes; + _name=`option_name $arg` + if validate_arg wxconfig flag "$_name" yes || + validate_arg wxconfig output "$_name" yes then continue fi @@ -285,19 +294,19 @@ if [ -n "$WXDEBUG" ]; then decho " input parameters = $input_parameters" decho " input options = $input_options" for i in $input_options; do - decho " $i = $(eval echo \"\$input_option_$i\")" + decho " $i = `eval echo \"\\\$input_option_$i\"`" done decho " yes/no options = $yesno_options" for y in $yesno_options; do - decho " $y = $(eval echo \"\$yesno_option_$y\")" + decho " $y = `eval echo \"\\\$yesno_option_$y\"`" done decho " flag options = $flag_options" for f in $flag_options; do - decho " $f = $(eval echo \"\$flag_option_$f\")" + decho " $f = `eval echo \"\\\$flag_option_$f\"`" done decho " output options = $output_options" for o in $output_options; do - decho " $o = $(eval echo \"\$output_option_$o\")" + decho " $o = `eval echo \"\\\$output_option_$o\"`" done fi @@ -319,15 +328,18 @@ get_mask() 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@}} exec_prefix=${input_option_exec_prefix-${input_option_prefix-${this_exec_prefix:-@exec_prefix@}}} 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. @@ -338,23 +350,23 @@ this_chartype="@WX_CHARTYPE@" 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` # Extract the user specification from the options parsed. -m_host=${input_option_host:+${input_option_host}-?} +m_host=${input_option_host:+"${input_option_host}-?"} m_host=${m_host:-${input_option_host-$this_host}} -m_toolkit=${input_option_toolkit:-[^-]+} -m_widgetset=${input_option_widgetset-(univ)?} -m_chartype=${input_option_chartype:-(unicode|ansi)} -m_debugtype=${input_option_debugtype:-(debug|release)} +m_toolkit=${input_option_toolkit:-'[^-]+'} +m_widgetset=${input_option_widgetset-'(univ)?'} +m_chartype=${input_option_chartype:-'(unicode|ansi)'} +m_debugtype=${input_option_debugtype:-'(debug|release)'} m_flavour=${input_option_flavour:+-$input_option_flavour} -m_flavour=${m_flavour:-${input_option_flavour-(-[^-]+)?}} -m_version=${input_option_version:-[0-9]+\.[0-9]+} -m_linkage=${input_option_linkage-(-static)?} +m_flavour=${m_flavour:-${input_option_flavour-'(-[^-]+)?'}} +m_version=${input_option_version:-'[0-9]+\.[0-9]+'} +m_linkage=${input_option_linkage-'(-static)?'} -configmask="^$(get_mask)$" +configmask="^`get_mask`$" # Dump the user specification in debug mode. @@ -427,11 +439,11 @@ fi # 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; } +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" | grep -E "$configmask" > /dev/null 2>&1; } +user_mask_fits() { echo "$1" | $EGREP "$configmask" > /dev/null 2>&1; } # count_fields _word # Returns the number of IFS split fields in _word @@ -439,11 +451,15 @@ count_fields() { return $#; } # count_delegates _mask # Return the number of eligible config files that match _mask -count_delegates() { count_fields $(find_eligible_delegates $1); } +count_delegates() { count_fields `find_eligible_delegates $1`; } # is_set _variablename # Returns true if $_variablename is initialised. -is_set() { [ "x$(eval echo \"\${$1-unset}\")" != "xunset" ]; } +is_set() { [ "x`eval echo \"\\\${$1-unset}\"`" != "xunset" ]; } + +# not _cmd _args... +# true iff _cmd is false +not() { if "$@"; then false; else true; fi; } # do_find_best_delegate _unbound-options # The real worker part of find_best_delegate below. Recurses though all @@ -476,22 +492,22 @@ do_find_best_delegate() decho " $_fbd_indent---> unbound options: $*" fi - for i; do + for i do if [ "x$WXDEBUG" = "xverbose" ]; then - decho " ${_fbd_indent}binding '$i' with '$(remove_field $i $*)' still free" + decho " ${_fbd_indent}binding '$i' with '`remove_field $i $*`' still free" [ -z "$_pruned" ] || decho " ${_fbd_indent} --- pruned: $_pruned ---" fi if ( eval m_$i=\$this_$i - _mask="^$(get_mask)$" + _mask="^`get_mask`$" if [ "x$WXDEBUG" = "xverbose" ]; then decho " ${_fbd_indent} checking: $_mask" count_delegates "$_mask" decho " $_fbd_indent $? eligible delegates" - for d in $(find_eligible_delegates "$_mask"); do + for d in `find_eligible_delegates "$_mask"`; do decho " ${_fbd_indent} $d" done fi @@ -500,15 +516,15 @@ do_find_best_delegate() _still_eligible=$? if [ $_still_eligible -eq 1 ]; then - echo $(find_eligible_delegates "$_mask") + echo `find_eligible_delegates "$_mask"` return fi [ "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 @@ -519,7 +535,7 @@ do_find_best_delegate() decho " ${_fbd_indent}pruning: $i" _pruned="${_pruned:+$_pruned }$i" fi - set $(remove_field $i $*) + set `remove_field $i $*` fi @@ -535,7 +551,7 @@ do_find_best_delegate() 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 @@ -559,9 +575,13 @@ get_legacy_mask() # 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 + ( + 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 @@ -569,11 +589,11 @@ find_legacy_configs() # This assumes no matching new style config has been found. find_best_legacy_config() { - _legacy_configs=$(find_legacy_configs) + _legacy_configs=`find_legacy_configs` if [ -n "$_legacy_configs" ]; then - _legacy_mask=$(get_legacy_mask) + _legacy_mask=`get_legacy_mask` for d in $_legacy_configs; do - if echo $d | grep -E $_legacy_mask > /dev/null 2>&1 ; then + if echo $d | $EGREP $_legacy_mask > /dev/null 2>&1 ; then echo "$d" return fi @@ -598,8 +618,8 @@ config_spec="$0 $*" if [ -n "$output_option_list" ]; then _remains_in_prefix=$installed_configs - _delegates=$(find_eligible_delegates $configmask) - _best_delegate=$(find_best_delegate) + _delegates=`find_eligible_delegates $configmask` + _best_delegate=`find_best_delegate` if [ "x$WXDEBUG" = "xverbose" ]; then decho @@ -610,7 +630,7 @@ if [ -n "$output_option_list" ]; then fi for d in $_delegates; do - _remains_in_prefix=$(remove_field $d $_remains_in_prefix) + _remains_in_prefix=`remove_field $d $_remains_in_prefix` done echo @@ -622,7 +642,7 @@ if [ -n "$output_option_list" ]; 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) + _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 @@ -638,7 +658,7 @@ if [ -n "$output_option_list" ]; then elif [ -z "$_delegates" ]; then - _last_chance=$(find_best_legacy_config) + _last_chance=`find_best_legacy_config` if [ -n "$_last_chance" ]; then echo " Specification matches legacy config: $_last_chance" @@ -662,7 +682,7 @@ if [ -n "$output_option_list" ]; then echo " to choose between alternate matches." fi - _delegates=$(remove_field "$_best_delegate" $_delegates) + _delegates=`remove_field "$_best_delegate" $_delegates` if [ -n "$_delegates" ]; then echo @@ -679,12 +699,12 @@ if [ -n "$output_option_list" ]; then done fi - _legacy_configs=$(find_legacy_configs) + _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}" + echo " $d" | sed 's/-config$//' done fi @@ -698,7 +718,7 @@ fi # certain, can this config satisfy the user specification? # -------------------------------------------------------------- -if ! user_mask_fits "$this_config" ; then +if not user_mask_fits "$this_config" ; then # No? Then lets see if it knows anybody who can. # But first, just be sure someone hasn't typo'd us into a loop. @@ -723,17 +743,17 @@ if ! user_mask_fits "$this_config" ; then if [ -n "$WXDEBUG" ]; then decho " must delegate to an alternate config" decho " potential delegates ($_numdelegates):" - for i in $(find_eligible_delegates "$configmask"); do + for i in `find_eligible_delegates "$configmask"`; do decho " $i" done fi if [ $_numdelegates -eq 0 ]; then - _last_chance=$(find_best_legacy_config) + _last_chance=`find_best_legacy_config` if [ -n "$_last_chance" ]; then - for arg; do + for arg do case "$arg" in --prefix*|--exec-prefix*| \ --version|--release|--basename| \ @@ -773,10 +793,9 @@ 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: 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 fi @@ -786,7 +805,7 @@ if ! user_mask_fits "$this_config" ; then [ -z "$WXDEBUG" ] || decho " must prune the list of eligible delegates" - best_delegate=$(find_best_delegate) + best_delegate=`find_best_delegate` if [ -n "$best_delegate" ]; then @@ -804,7 +823,7 @@ if ! user_mask_fits "$this_config" ; then 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 + for i in `find_eligible_delegates "$configmask"`; do decho " $i" done decho @@ -814,11 +833,11 @@ if ! user_mask_fits "$this_config" ; then if [ -n "$WXDEBUG" ]; then decho " using the only suitable delegate" - decho "--> $wxconfdir/$(find_eligible_delegates $configmask) $*" + decho "--> $wxconfdir/`find_eligible_delegates $configmask` $*" fi export WXCONFIG_DELEGATED=yes - $wxconfdir/$(find_eligible_delegates $configmask) $* + $wxconfdir/`find_eligible_delegates $configmask` $* exit fi @@ -839,32 +858,90 @@ exec_prefix=${this_exec_prefix-$exec_prefix} includedir="@includedir@" libdir="@libdir@" +bindir="@bindir@" # 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 "$input_option_utility" ] || echo "${input_option_utility}-@WX_RELEASE@@WX_FLAVOUR@" +[ -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. # -------------------------------------------------------------- -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 not 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@" -ldlibs_base="@WXCONFIG_EXTRALIBS@" +ldlibs_base="@WXCONFIG_LIBS@" ldlibs_core="@EXTRALIBS_GUI@" ldlibs_gl="@OPENGL_LIBS@" ldlibs_html="@EXTRALIBS_HTML@" @@ -886,9 +963,9 @@ lib_flags_for() _all_libs='' _wxlibs='' - ! is_cross || _target="-${target}" + is_cross && _target="-${target}" - for lib; do + for lib do # We evidently can't trust people not to duplicate things in # configure, or to keep them in any sort of sane order overall, @@ -906,7 +983,7 @@ lib_flags_for() # for sloppy work elsewhere though and @GUI_TK_LIBRARY should # be fixed. - for f in $(eval echo \"\$ldflags_$lib\"); do + for f in `eval echo \"\\\$ldflags_$lib\"`; do match_field "$f" $_all_ldflags || _all_ldflags="$_all_ldflags $f" done @@ -918,10 +995,24 @@ lib_flags_for() [ $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 - _all_libs="$(remove_field $f $_all_libs) $f" + for f in `eval echo \"\\\$ldlibs_$lib\"`; do + + # 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}" @@ -938,11 +1029,41 @@ 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 - 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. # -------------------------------------------------------------- -wx_libs=$(echo "$input_parameters" | tr ',' ' ') +wx_libs=`echo "$input_parameters" | tr ',' ' '` [ -z "$WXDEBUG" ] || decho " user supplied libs: '$wx_libs'" @@ -950,14 +1071,15 @@ if is_monolithic; then # Core libs are already built into the blob. for i in std @CORE_GUI_LIBS@ @CORE_BASE_LIBS@; do - wx_libs=$(remove_field $i $wx_libs) + 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 - 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 $ldlibs_base" else wx_libs="$wx_libs -lwx_@TOOLCHAIN_NAME@" fi @@ -972,11 +1094,11 @@ else # MONOLITHIC = 0 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) + wx_libs=`remove_field std $wx_libs` for i in @CORE_GUI_LIBS@ @CORE_BASE_LIBS@; do - wx_libs="$(remove_field $i $wx_libs) $i" + wx_libs="`remove_field $i $wx_libs` $i" done - elif ! match_field base $wx_libs ; then + elif not match_field base $wx_libs ; then wx_libs="$wx_libs base" fi @@ -990,7 +1112,10 @@ else # MONOLITHIC = 0 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 @@ -1005,32 +1130,99 @@ fi # Endgame. Nothing left to discover now. # -------------------------------------------------------------- -[ -n "$this_linkage" ] || _static_cppflags="@TOOLCHAIN_DLL_DEFS@" [ "$using_gui" = "yes" ] || _gui_cppflags="-DwxUSE_GUI=0" -if [ -n "$this_prefix" ]; then - _include_cppflags="-I${includedir} -I${prefix}/contrib/include" -else +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 "@WXDEBUG_DEFINE@" "@TOOLCHAIN_DEFS@" $_static_cppflags $_gui_cppflags "@WXCONFIG_INCLUDE@" "@WX_LARGEFILE_FLAGS@" "@GCC_PRAGMA_FLAGS@") +_cppflags=`echo "-I${libdir}/wx/include/@TOOLCHAIN_FULLNAME@" $_include_cppflags "@WXCONFIG_CPPFLAGS@" $_gui_cppflags` # 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_gl_libs" ] || echo $(lib_flags_for gl) +[ -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_linkdeps" ] || echo $link_deps 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@" $_rpath $wx_libs "@DMALLOC_LIBS@" +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 - echo $_ldflags "@LDFLAGS@" $wx_libs "@DMALLOC_LIBS@" fi +# +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + # And so that's it, we're done. Have a nice build. exit 0