documentation fixes
[wxWidgets.git] / wx-config.in
1 #!/bin/sh
2
3 # -------------------------------------------------------------------------
4 #                              Configured settings:
5 # -------------------------------------------------------------------------
6
7 # Version and build type information:
8
9 WX_MAJOR_VERSION_NUMBER="@WX_MAJOR_VERSION_NUMBER@"
10 WX_MINOR_VERSION_NUMBER="@WX_MINOR_VERSION_NUMBER@"
11 WX_RELEASE_NUMBER="@WX_RELEASE_NUMBER@"
12 release="@WX_MAJOR_VERSION_NUMBER@.@WX_MINOR_VERSION_NUMBER@"
13 is_monolithic="@MONOLITHIC@"
14 cross_compiling="@cross_compiling@"
15 target="@host_alias@"
16 static_flag="@STATIC_FLAG@"
17 inplace_flag="no"
18
19 # Misc configuration variables:
20
21 update_prefixes()
22 {
23     includedir="@includedir@"
24     libdir="@libdir@"
25 }
26 prefix="@prefix@"
27 exec_prefix="@exec_prefix@"
28 update_prefixes
29
30 CC="@CC@"
31 GCC="@GCC@"
32 CXX="@CXX@"
33 LD="@SHARED_LD@"
34 srcdir="@top_srcdir@"
35 builddir="@top_builddir_wxconfig@"
36 basename_nogui="@WX_LIBRARY_BASENAME_NOGUI@"
37 basename_gui="@WX_LIBRARY_BASENAME_GUI@"
38
39 TOOLCHAIN_NAME="@TOOLCHAIN_NAME@"
40 LDFLAGS="@LDFLAGS@"
41 WXCONFIG_RPATH="@WXCONFIG_RPATH@"
42 DMALLOC_LIBS="@DMALLOC_LIBS@"
43 WXCONFIG_LIBS="@WXCONFIG_LIBS@"
44 WXCONFIG_LIBS_STATIC="@WXCONFIG_LIBS_STATIC@"
45 WXDEBUG_DEFINE="@WXDEBUG_DEFINE@"
46 TOOLCHAIN_DEFS="@TOOLCHAIN_DEFS@"
47 TOOLCHAIN_DLL_DEFS="@TOOLCHAIN_DLL_DEFS@"
48 WXCONFIG_INCLUDE="@WXCONFIG_INCLUDE@"
49 WX_LARGEFILE_FLAGS="@WX_LARGEFILE_FLAGS@"
50 GCC_PRAGMA_FLAGS="@GCC_PRAGMA_FLAGS@"
51 CODE_GEN_FLAGS="@CODE_GEN_FLAGS@"
52 CODE_GEN_FLAGS_CXX="@CODE_GEN_FLAGS_CXX@"
53 LDFLAGS_EXE="@LDFLAGS_EXE@"
54 MACRESWXCONFIG="@MACRESWXCONFIG@"
55 EXTRALIBS_GUI="@EXTRALIBS_GUI@"
56 LIBS="@LIBS@"
57 WXCONFIG_LDFLAGS_GUI="@WXCONFIG_LDFLAGS_GUI@"
58
59
60 # Linker flags for sublibraries:
61
62 CORE_BASE_LIBS="@CORE_BASE_LIBS@"
63 CORE_GUI_LIBS="@CORE_GUI_LIBS@"
64
65 ldlibs_base="@WXCONFIG_EXTRALIBS@"
66 ldlibs_core="@EXTRALIBS_GUI@"
67 ldlibs_xml="@EXTRALIBS_XML@"
68 ldlibs_html="@EXTRALIBS_HTML@"
69 ldlibs_odbc="@EXTRALIBS_ODBC@"
70 ldlibs_adv="@EXTRALIBS_SDL@"
71
72 ldflags_gl="@LDFLAGS_GL@"
73 ldlibs_gl="@OPENGL_LIBS@"
74
75
76
77 # -------------------------------------------------------------------------
78 #                                Script code:
79 # -------------------------------------------------------------------------
80
81 exec_prefix_set=no
82
83 # is $1 among the rest of arguments?
84 isinlist()
85 {
86     value=$1
87     shift
88     isin=no
89     for iii in $* ; do
90         if test $iii = $value ; then isin=yes ; fi
91     done
92     test $isin = yes
93 }
94
95 # output linker commands needed to link against libraries passed as arguments
96 # (does not handle monolithic/multilib):
97 output_libs()
98 {
99     if test "$cross_compiling" = "yes" ; then
100         target_tag="-${target}"
101     fi
102
103     all_libs=""
104     all_ldflags=""
105     wxlibs=""
106
107     for lib in $* ; do
108         eval xlibs=\$ldlibs_$lib
109         eval xflags=\$ldflags_$lib
110         if isinlist $lib $CORE_BASE_LIBS ; then
111             basename=$basename_nogui
112         else
113             basename=$basename_gui
114         fi
115         if test $lib = "base" ; then
116             libname="$basename"
117         else
118             libname="${basename}_${lib}"
119         fi
120
121         all_ldflags="$all_ldflags $xflags"
122         if test $static_flag = yes ; then
123             wxlibs="$wxlibs ${libdir}/lib${libname}-${release}${target_tag}.a"
124             all_libs="$all_libs $xlibs"
125         else
126             wxlibs="$wxlibs -l${libname}-${release}${target_tag}"
127         fi
128     done
129
130     echo $all_ldflags $wxlibs $all_libs
131 }
132
133 # output $(WXCONFIG_LDFLAGS_GUI) if any of libs passed as arguments is GUI
134 # library, nothing otherwise:
135 get_ldflags_gui()
136 {
137     flags_to_ret=""
138     for lib in $* ; do
139         if isinlist $lib $CORE_GUI_LIBS ; then
140             flags_to_ret="$WXCONFIG_LDFLAGS_GUI"
141         fi
142     done
143     echo $flags_to_ret
144 }
145
146 usage()
147 {
148     cat <<EOF
149 Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--inplace]
150                  [--toolkit=TOOLKIT] [--unicode[=yes|no]] [--debug[=yes|no]]
151                  [--universal[=yes|no]] [--host=HOST]
152                  [--version[=VERSION]] [--release]
153                  [--list] [--basename] [--static] [--libs] [--gl-libs]
154                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
155                  [--cc] [--cxx] [--ld] [LIBRARIES]
156
157 wx-config returns configuration information about the installed
158 version of wxWidgets. It may be used to query its version and
159 installation directories and also retrieve the C and C++ compilers
160 and linker which were used for its building and the corresponding
161 flags.
162
163 Ordinarily it should be installed to the appropriate system location
164 along with the headers and library files, but it is also possible to
165 use it to enable builds with an uninstalled wxWidgets version for
166 package building and bleeding edge developers.  To do so, use it like
167 this:
168
169 \${wx_builddir}/wx-config --inplace
170
171 Note that any other options supplied must come *after* --inplace
172 for it to take effect.
173
174 --static must come before --cppflags, --cflags, --cxxflags,
175 --libs and --gl-libs and --libs must come before the other ones.
176
177 wx-config can take optional argument that contains comma- or space-separated
178 list of wxWidgets libraries to compile and link against. This list can
179 include both core and contrib libraries. Special value "std" stands for all
180 libraries linked in by default. Examples: "wx-config --libs core,base"
181 or "wx-config --cxxflags core,base".
182
183 --gl-libs option is deprecated, use "--libs gl" instead.
184
185 If there are several different builds of wxWidgets installed in same prefix,
186 you can use --host, --toolkit, --unicode, --debug, --universal and --version
187 options to select one of them. Use --list option to show all available builds
188 that match given criteria.
189
190 EOF
191
192     exit $1
193 }
194
195 cppflags()
196 {
197     includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}"
198
199     # in inplace case we need to also add path to contrib headers -- do it
200     # unconditionally as they might be used and we have no way of knowing if
201     # they really are
202     if test $inplace_flag = yes ; then
203         includes="$includes -I${prefix}/include -I${prefix}/contrib/include"
204     else
205         includes="$includes -I${includedir}/wx-${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}"
206     fi
207
208     flags="$includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS}"
209     if test $static_flag != yes ; then
210         flags="$flags ${TOOLCHAIN_DLL_DEFS}"
211     fi
212
213     if test $nogui_flag = "yes" ; then
214         flags="$flags -DwxUSE_GUI=0"
215     fi
216
217     echo "$flags${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}"
218 }
219
220 if test $# -eq 0; then
221     usage 1 1>&2
222 fi
223
224
225 # handle libraries list:
226
227 libs_list=""
228
229 for arg in $*; do
230   case "$arg" in
231     -*)
232       ;;
233     *)
234       libs_list="$libs_list `echo "$arg" | tr ',' ' '`"
235       ;;
236   esac
237 done
238       
239 if test "x$libs_list" = "x" ; then
240   if test "$is_monolithic" = "0" ; then
241     # link against all libs if none given explicitly:
242     libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
243   fi
244 else
245   # always add wxBase, any wxApp needs it:
246   libs_list="$libs_list base"
247 fi
248
249 # determine if at least one gui lib was used:
250 nogui_flag="yes"
251 for i in $libs_list; do
252   case $i in
253       base|net)
254         ;;
255       *)
256         nogui_flag="no"
257         ;;
258   esac
259 done
260
261
262 # handle options:
263
264 while test $# -gt 0; do
265   case "$1" in
266   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
267   *) optarg= ;;
268   esac
269
270   case $1 in
271     --inplace)
272       inplace_flag=yes
273       ;;
274     --prefix=*)
275       prefix=$optarg
276       if test $exec_prefix_set = no ; then
277         exec_prefix=$optarg
278       fi
279       update_prefixes
280       ;;
281     --prefix)
282       echo $prefix
283       ;;
284     --exec-prefix=*)
285       exec_prefix=$optarg
286       exec_prefix_set=yes
287       update_prefixes
288       ;;
289     --exec-prefix)
290       echo $exec_prefix
291       ;;
292     --version)
293       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
294       ;;
295     --release)
296       echo $release
297       ;;
298     --basename)
299       echo $basename_gui
300       ;;
301     --static)
302       static_flag=yes
303       ;;
304     --cppflags)
305       cppflags
306       ;;
307     --cflags)
308       echo `cppflags` ${CODE_GEN_FLAGS}
309       ;;
310     --cxxflags)
311       echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
312       ;;
313     --ldflags)
314       echo ${LDFLAGS_EXE}
315       ;;
316     --rezflags)
317       echo `eval echo ${MACRESWXCONFIG}`
318       ;;
319
320     --libs)
321       # include install directory only if it is not default:
322       if test "${libdir}" != "/usr/lib" \
323               -a \( "${cross_compiling}" != "yes" \
324                     -o "${libdir}" != "/usr/${target}/lib" \) ;
325       then
326           libs="-L${libdir}"
327       fi
328
329       # it's simpler to avoid handling "base" itself at all as we add it in the
330       # end to the list of libraries anyhow
331       # in monolithic build, link against the main library:
332       if test "$is_monolithic" = "1" ; then
333           # filter out core libs, leave only contrib in libs_list:
334           newlist=
335           for i in $libs_list ; do
336               if isinlist $i $CORE_GUI_LIBS $CORE_BASE_LIBS; then
337                   libs_list="" # do nothing
338               else
339                   newlist="$newlist $i"
340               fi
341           done
342           libs_list="$newlist"
343
344           # output link flags:
345           contrib_libs=`output_libs $libs_list`
346           if test $static_flag = yes ; then
347               echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
348           else
349               echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
350           fi
351       else
352           # we may need to replace "std" alias with its expansion
353           newlist=
354           hadstd=0
355           for i in $libs_list; do
356               case $i in
357                   std)
358                     hadstd=1
359                     ;;
360
361                   base)
362                     # if we have std, we're going to add base anyhow, avoid
363                     # having it twice in the end
364                     if [ $hadstd = 0 ]; then
365                         newlist="$newlist $i"
366                     fi
367                     ;;
368
369                   *)
370                     newlist="$newlist $i"
371                     ;;
372               esac
373           done
374           libs_list="$newlist"
375           if [ $hadstd = 1 ]; then
376               libs_list="$libs_list $CORE_GUI_LIBS $CORE_BASE_LIBS"
377           fi
378
379           # in multilib mode, link against all sublibraries:
380           wxlibs=`output_libs $libs_list`
381           guildflags=`get_ldflags_gui $libs_list`
382           echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
383       fi
384
385       ;;
386     --gl-libs)
387       output_libs gl
388       ;;
389     --cc)
390       echo $CC
391       ;;
392     --cxx)
393       echo $CXX
394       ;;
395     --ld)
396       echo $LD
397       ;;
398     --help|-h)
399       usage 1 1>&2
400       ;;
401     -*)
402       # unrecognized flag is error
403       usage 1 1>&2
404       ;;
405   esac
406   shift
407 done
408