*** empty log message ***
[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 GCC_SEARCHES_USR_LOCAL_INCLUDE="@GCC_SEARCHES_USR_LOCAL_INCLUDE@"
33 CXX="@CXX@"
34 LD="@SHARED_LD@"
35 srcdir="@top_srcdir@"
36 builddir="@top_builddir_wxconfig@"
37 basename_nogui="@WX_LIBRARY_BASENAME_NOGUI@"
38 basename_gui="@WX_LIBRARY_BASENAME_GUI@"
39
40 TOOLCHAIN_NAME="@TOOLCHAIN_NAME@"
41 LDFLAGS="@LDFLAGS@"
42 WXCONFIG_RPATH="@WXCONFIG_RPATH@"
43 DMALLOC_LIBS="@DMALLOC_LIBS@"
44 WXCONFIG_LIBS="@WXCONFIG_LIBS@"
45 WXCONFIG_LIBS_STATIC="@WXCONFIG_LIBS_STATIC@"
46 WXDEBUG_DEFINE="@WXDEBUG_DEFINE@"
47 TOOLCHAIN_DEFS="@TOOLCHAIN_DEFS@"
48 TOOLCHAIN_DLL_DEFS="@TOOLCHAIN_DLL_DEFS@"
49 WXCONFIG_INCLUDE="@WXCONFIG_INCLUDE@"
50 WX_LARGEFILE_FLAGS="@WX_LARGEFILE_FLAGS@"
51 GCC_PRAGMA_FLAGS="@GCC_PRAGMA_FLAGS@"
52 CODE_GEN_FLAGS="@CODE_GEN_FLAGS@"
53 CODE_GEN_FLAGS_CXX="@CODE_GEN_FLAGS_CXX@"
54 LDFLAGS_EXE="@LDFLAGS_EXE@"
55 MACRESWXCONFIG="@MACRESWXCONFIG@"
56 EXTRALIBS_GUI="@EXTRALIBS_GUI@"
57 LIBS="@LIBS@"
58 WXCONFIG_LDFLAGS_GUI="@WXCONFIG_LDFLAGS_GUI@"
59
60
61 # Linker flags for sublibraries:
62
63 CORE_BASE_LIBS="@CORE_BASE_LIBS@"
64 CORE_GUI_LIBS="@CORE_GUI_LIBS@"
65
66 ldlibs_base="@WXCONFIG_EXTRALIBS@"
67 ldlibs_core="@EXTRALIBS_GUI@"
68 ldlibs_xml="@EXTRALIBS_XML@"
69 ldlibs_html="@EXTRALIBS_HTML@"
70 ldlibs_odbc="@EXTRALIBS_ODBC@"
71 ldlibs_adv="@EXTRALIBS_SDL@"
72
73 ldflags_gl="@LDFLAGS_GL@"
74 ldlibs_gl="@OPENGL_LIBS@"
75
76
77
78 # -------------------------------------------------------------------------
79 #                                Script code:
80 # -------------------------------------------------------------------------
81
82 exec_prefix_set=no
83
84 # is $1 among the rest of arguments?
85 isinlist()
86 {
87     value=$1
88     shift
89     isin=no
90     for iii in $* ; do
91         if test $iii = $value ; then isin=yes ; fi
92     done
93     test $isin = yes
94 }
95
96 # output linker commands needed to link against libraries passed as arguments
97 # (does not handle monolithic/multilib):
98 output_libs()
99 {
100     if test "$cross_compiling" = "yes" ; then
101         target_tag="-${target}"
102     fi
103
104     all_libs=""
105     all_ldflags=""
106     wxlibs=""
107
108     for lib in $* ; do
109         eval xlibs=\$ldlibs_$lib
110         eval xflags=\$ldflags_$lib
111         if isinlist $lib $CORE_BASE_LIBS ; then
112             basename=$basename_nogui
113         else
114             basename=$basename_gui
115         fi
116         if test $lib = "base" ; then
117             libname="$basename"
118         else
119             libname="${basename}_${lib}"
120         fi
121
122         all_ldflags="$all_ldflags $xflags"
123         if test $static_flag = yes ; then
124             wxlibs="$wxlibs ${libdir}/lib${libname}-${release}${target_tag}.a"
125             all_libs="$all_libs $xlibs"
126         else
127             wxlibs="$wxlibs -l${libname}-${release}${target_tag}"
128         fi
129     done
130
131     echo $all_ldflags $wxlibs $all_libs
132 }
133
134 # output $(WXCONFIG_LDFLAGS_GUI) if any of libs passed as arguments is GUI
135 # library, nothing otherwise:
136 get_ldflags_gui()
137 {
138     flags_to_ret=""
139     for lib in $* ; do
140         if isinlist $lib $CORE_GUI_LIBS ; then
141             flags_to_ret="$WXCONFIG_LDFLAGS_GUI"
142         fi
143     done
144     echo $flags_to_ret
145 }
146
147 usage()
148 {
149     cat <<EOF
150 Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--inplace]
151                  [--toolkit=TOOLKIT] [--unicode[=yes|no]] [--debug[=yes|no]]
152                  [--universal[=yes|no]] [--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 --libs can take optional argument that contains comma-separated list of
178 wxWidgets libraries to link against. This list can include both core
179 and contrib libraries. Special value "std" stands for all libraries linked
180 in by default.
181
182 --gl-libs option is deprecated, use "--libs gl" instead.
183
184 If there are several different builds of wxWidgets installed in same prefix,
185 you can use --toolkit, --unicode, --debug, --universal and --version options
186 to select one of them. Use --list option to show all available builds that
187 match given criteria.
188
189 EOF
190
191     exit $1
192 }
193
194 cppflags()
195 {
196     # we should never specify -I/usr/include on the compiler command line: this
197     # is at best useless and at worst breaks compilation on the systems where
198     # the system headers are non-ANSI because gcc works around this by storing
199     # the ANSI-fied versions of them in its private directory which is searched
200     # after all the directories on the cmd line.
201     #
202     # the situation is a bit more complicated with -I/usr/local/include:
203     # it shouldn't be specified with some gcc installations which look there
204     # by default anyhow and give warnings (at least 3.1 does) if it is
205     # specified explicitly --
206     # but this -I switch *is* needed for other gcc installation and for
207     # the other compilers.
208     # So I put a suitable test into configure.in and reuse the result here.
209     #
210     # note that we assume that if we use GNU cc we also use GNU c++ and vice
211     # versa, i.e. this won't work (either for --cflags or --cxxflags) if GNU C
212     # compiler and non-GNU C++ compiler are used or vice versa -- we'll fix
213     # this when/if anybody complains about it
214     if test "${includedir}" != "/usr/include" \
215             -a "${includedir}" != "/usr/include/c++" \
216             -a \( "${GCC_SEARCHES_USR_LOCAL_INCLUDE}" != "yes" \
217                   -o "${includedir}" != "/usr/local/include" \) \
218             -a \( "${cross_compiling}" != "yes" \
219                   -o "${includedir}" != "/usr/${target}/include" \) ;
220     then
221         includes=" -I${includedir}"
222     fi
223
224     includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}$includes"
225
226     # in inplace case we need to also add path to contrib headers -- do it
227     # unconditionally as they might be used and we have no way of knowing if
228     # they really are
229     if test $inplace_flag = yes ; then
230         includes="$includes -I${prefix}/contrib/include"
231     fi
232
233     flags="$includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS}"
234     if test $static_flag != yes ; then
235         flags="$flags ${TOOLCHAIN_DLL_DEFS}"
236     fi
237
238     if test $nogui_flag = "yes" ; then
239         flags="$flags -DwxUSE_GUI=0"
240     fi
241
242     echo "$flags${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}"
243 }
244
245 if test $# -eq 0; then
246     usage 1 1>&2
247 fi
248
249
250 # handle libraries list:
251
252 libs_list=""
253
254 for arg in $*; do
255   case "$arg" in
256     -*)
257       ;;
258     *)
259       libs_list="$libs_list `echo "$arg" | tr ',' ' '`"
260       ;;
261   esac
262 done
263       
264 if test "x$libs_list" = "x" ; then
265   if test "$is_monolithic" = "0" ; then
266     # link against all libs if none given explicitly:
267     libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
268   fi
269 else
270   # always add wxBase, any wxApp needs it:
271   libs_list="$libs_list base"
272 fi
273
274 # determine if at least one gui lib was used:
275 nogui_flag="yes"
276 for i in $libs_list; do
277   case $i in
278       base|net)
279         ;;
280       *)
281         nogui_flag="no"
282         ;;
283   esac
284 done
285
286
287 # handle options:
288
289 while test $# -gt 0; do
290   case "$1" in
291   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
292   *) optarg= ;;
293   esac
294
295   case $1 in
296     --inplace)
297       inplace_flag=yes
298       ;;
299     --prefix=*)
300       prefix=$optarg
301       if test $exec_prefix_set = no ; then
302         exec_prefix=$optarg
303       fi
304       update_prefixes
305       ;;
306     --prefix)
307       echo $prefix
308       ;;
309     --exec-prefix=*)
310       exec_prefix=$optarg
311       exec_prefix_set=yes
312       update_prefixes
313       ;;
314     --exec-prefix)
315       echo $exec_prefix
316       ;;
317     --version)
318       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
319       ;;
320     --release)
321       echo $release
322       ;;
323     --basename)
324       echo $basename_gui
325       ;;
326     --static)
327       static_flag=yes
328       ;;
329     --cppflags)
330       cppflags
331       ;;
332     --cflags)
333       echo `cppflags` ${CODE_GEN_FLAGS}
334       ;;
335     --cxxflags)
336       echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
337       ;;
338     --ldflags)
339       echo ${LDFLAGS_EXE}
340       ;;
341     --rezflags)
342       echo `eval echo ${MACRESWXCONFIG}`
343       ;;
344
345     --libs)
346       # include install directory only if it is not default:
347       if test "${libdir}" != "/usr/lib" \
348               -a \( "${cross_compiling}" != "yes" \
349                     -o "${libdir}" != "/usr/${target}/lib" \) ;
350       then
351           libs="-L${libdir}"
352       fi
353
354       # it's simpler to avoid handling "base" itself at all as we add it in the
355       # end to the list of libraries anyhow
356       # in monolithic build, link against the main library:
357       if test "$is_monolithic" = "1" ; then
358           # filter out core libs, leave only contrib in libs_list:
359           newlist=
360           for i in $libs_list ; do
361               if isinlist $i $CORE_GUI_LIBS $CORE_BASE_LIBS; then
362                   libs_list="" # do nothing
363               else
364                   newlist="$newlist $i"
365               fi
366           done
367           libs_list="$newlist"
368
369           # output link flags:
370           contrib_libs=`output_libs $libs_list`
371           if test $static_flag = yes ; then
372               echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
373           else
374               echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
375           fi
376       else
377           # we may need to replace "std" alias with its expansion
378           newlist=
379           hadstd=0
380           for i in $libs_list; do
381               case $i in
382                   std)
383                     hadstd=1
384                     ;;
385
386                   base)
387                     # if we have std, we're going to add base anyhow, avoid
388                     # having it twice in the end
389                     if [ $hadstd = 0 ]; then
390                         newlist="$newlist $i"
391                     fi
392                     ;;
393
394                   *)
395                     newlist="$newlist $i"
396                     ;;
397               esac
398           done
399           libs_list="$newlist"
400           if [ $hadstd = 1 ]; then
401               libs_list="$libs_list $CORE_GUI_LIBS $CORE_BASE_LIBS"
402           fi
403
404           # in multilib mode, link against all sublibraries:
405           wxlibs=`output_libs $libs_list`
406           guildflags=`get_ldflags_gui $libs_list`
407           echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
408       fi
409
410       ;;
411     --gl-libs)
412       output_libs gl
413       ;;
414     --cc)
415       echo $CC
416       ;;
417     --cxx)
418       echo $CXX
419       ;;
420     --ld)
421       echo $LD
422       ;;
423     --help|-h)
424       usage 1 1>&2
425       ;;
426     -*)
427       # unrecognized flag is error
428       usage 1 1>&2
429       ;;
430   esac
431   shift
432 done
433