modified arguments syntax to be wx-config [options] [libraries list]
[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 # return the absolute path prepending builddir to it if needed
148 makeabs()
149 {
150     path=$1
151     # TODO: this only works under Unix and even there it could be
152     #       enhanced to remove ".." and "."
153     if [ `echo $path | sed 's/^\(.\).*/\1/'` != "/" ]; then
154         if [ $path = "." ]; then
155             path=$builddir
156         else
157             path="$builddir/$path"
158         fi
159     fi
160
161     echo $path
162 }
163
164 usage()
165 {
166     cat <<EOF
167 Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--release]
168                  [--basename] [--static] [--libs] [--gl-libs]
169                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
170                  [--cc] [--cxx] [--ld] [--inplace] [LIBRARIES]
171
172 wx-config returns configuration information about the installed
173 version of wxWidgets. It may be used to query its version and
174 installation directories and also retrieve the C and C++ compilers
175 and linker which were used for its building and the corresponding
176 flags.
177
178 Ordinarily it should be installed to the appropriate system location
179 along with the headers and library files, but it is also possible to
180 use it to enable builds with an uninstalled wxWidgets version for
181 package building and bleeding edge developers.  To do so, use it like
182 this:
183
184 \${wx_builddir}/wx-config --prefix=\${wx_srcdir} --exec-prefix=\${wx_builddir}
185
186 Note that any other options supplied must come *after* the prefix
187 specification for it to take effect.
188
189 --static must come before --cppflags, --cflags, --cxxflags,
190 --libs and --gl-libs and --libs must come before the other ones.
191
192 --libs can take optional argument that contains comma-separated list of
193 wxWidgets libraries to link against. This list can include both core
194 and contrib libraries. Special value "std" stands for all libraries linked
195 in by default.
196
197 --gl-libs option is deprecated, use "--libs gl" instead.
198
199 The --inplace flag allows wx-config to be used from the wxWindows
200 build directory and output flags to use the uninstalled version of
201 the headers and libs in the build directory.
202
203 EOF
204
205     exit $1
206 }
207
208 cppflags()
209 {
210     # we should never specify -I/usr/include on the compiler command line: this
211     # is at best useless and at worst breaks compilation on the systems where
212     # the system headers are non-ANSI because gcc works around this by storing
213     # the ANSI-fied versions of them in its private directory which is searched
214     # after all the directories on the cmd line.
215     #
216     # the situation is a bit more complicated with -I/usr/local/include:
217     # it shouldn't be specified with some gcc installations which look there
218     # by default anyhow and give warnings (at least 3.1 does) if it is
219     # specified explicitly --
220     # but this -I switch *is* needed for other gcc installation and for
221     # the other compilers.
222     # So I put a suitable test into configure.in and reuse the result here.
223     #
224     # note that we assume that if we use GNU cc we also use GNU c++ and vice
225     # versa, i.e. this won't work (either for --cflags or --cxxflags) if GNU C
226     # compiler and non-GNU C++ compiler are used or vice versa -- we'll fix
227     # this when/if anybody complains about it
228     if test "${includedir}" != "/usr/include" \
229             -a "${includedir}" != "/usr/include/c++" \
230             -a \( "${GCC_SEARCHES_USR_LOCAL_INCLUDE}" != "yes" \
231                   -o "${includedir}" != "/usr/local/include" \) \
232             -a \( "${cross_compiling}" != "yes" \
233                   -o "${includedir}" != "/usr/${target}/include" \) ;
234     then
235         includes=" -I${includedir}"
236     fi
237
238     includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}$includes"
239
240     # in inplace case we need to also add path to contrib headers -- do it
241     # unconditionally as they might be used and we have no way of knowing if
242     # they really are
243     if test $inplace_flag = yes ; then
244         includes="$includes -I${prefix}/contrib/include"
245     fi
246
247     flags="$includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS}"
248     if test $static_flag != yes ; then
249         flags="$flags ${TOOLCHAIN_DLL_DEFS}"
250     fi
251
252     if test $nogui_flag = "yes" ; then
253         flags="$flags -DwxUSE_GUI=0"
254     fi
255
256     echo "$flags${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}"
257 }
258
259 if test $# -eq 0; then
260     usage 1 1>&2
261 fi
262
263
264 # handle libraries list:
265
266 libs_list=""
267
268 for arg in $*; do
269   case "$arg" in
270     -*)
271       ;;
272     *)
273       libs_list="$libs_list `echo "$arg" | tr ',' ' '`"
274       ;;
275   esac
276 done
277       
278 if test "x$libs_list" = "x" ; then
279   if test "$is_monolithic" = "0" ; then
280     # link against all libs if none given explicitly:
281     libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
282   fi
283 else
284   # always add wxBase, any wxApp needs it:
285   libs_list="$libs_list base"
286 fi
287
288 # determine if at least one gui lib was used:
289 nogui_flag="yes"
290 for i in $libs_list; do
291   case $i in
292       base|net)
293         ;;
294       *)
295         nogui_flag="no"
296         ;;
297   esac
298 done
299
300
301 # handle options:
302
303 while test $# -gt 0; do
304   case "$1" in
305   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
306   *) optarg= ;;
307   esac
308
309   case $1 in
310     --inplace)
311       prefix=`makeabs $srcdir`
312       exec_prefix=`makeabs $builddir`
313       exec_prefix_set=yes
314       inplace_flag=yes
315       update_prefixes
316       ;;
317     --prefix=*)
318       prefix=$optarg
319       if test $exec_prefix_set = no ; then
320         exec_prefix=$optarg
321       fi
322       update_prefixes
323       ;;
324     --prefix)
325       echo $prefix
326       ;;
327     --exec-prefix=*)
328       exec_prefix=$optarg
329       exec_prefix_set=yes
330       update_prefixes
331       ;;
332     --exec-prefix)
333       echo $exec_prefix
334       ;;
335     --version)
336       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
337       ;;
338     --release)
339       echo $release
340       ;;
341     --basename)
342       echo $basename_gui
343       ;;
344     --static)
345       static_flag=yes
346       ;;
347     --cppflags)
348       cppflags
349       ;;
350     --cflags)
351       echo `cppflags` ${CODE_GEN_FLAGS}
352       ;;
353     --cxxflags)
354       echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
355       ;;
356     --ldflags)
357       echo ${LDFLAGS_EXE}
358       ;;
359     --rezflags)
360       echo `eval echo ${MACRESWXCONFIG}`
361       ;;
362
363     --libs)
364       # include install directory only if it is not default:
365       if test "${libdir}" != "/usr/lib" \
366               -a \( "${cross_compiling}" != "yes" \
367                     -o "${libdir}" != "/usr/${target}/lib" \) ;
368       then
369           libs="-L${libdir}"
370       fi
371
372       # it's simpler to avoid handling "base" itself at all as we add it in the
373       # end to the list of libraries anyhow
374       # in monolithic build, link against the main library:
375       if test "$is_monolithic" = "1" ; then
376           # filter out core libs, leave only contrib in libs_list:
377           newlist=
378           for i in $libs_list ; do
379               if isinlist $i $CORE_GUI_LIBS $CORE_BASE_LIBS; then
380                   libs_list="" # do nothing
381               else
382                   newlist="$newlist $i"
383               fi
384           done
385           libs_list="$newlist"
386
387           # output link flags:
388           contrib_libs=`output_libs $libs_list`
389           if test $static_flag = yes ; then
390               echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
391           else
392               echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
393           fi
394       else
395           # we may need to replace "std" alias with its expansion
396           newlist=
397           hadstd=0
398           for i in $libs_list; do
399               case $i in
400                   std)
401                     hadstd=1
402                     ;;
403
404                   base)
405                     # if we have std, we're going to add base anyhow, avoid
406                     # having it twice in the end
407                     if [ $hadstd = 0 ]; then
408                         newlist="$newlist $i"
409                     fi
410                     ;;
411
412                   *)
413                     newlist="$newlist $i"
414                     ;;
415               esac
416           done
417           libs_list="$newlist"
418           if [ $hadstd = 1 ]; then
419               libs_list="$libs_list $CORE_GUI_LIBS $CORE_BASE_LIBS"
420           fi
421
422           # in multilib mode, link against all sublibraries:
423           wxlibs=`output_libs $libs_list`
424           guildflags=`get_ldflags_gui $libs_list`
425           echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
426       fi
427
428       ;;
429     --gl-libs)
430       output_libs gl
431       ;;
432     --cc)
433       echo $CC
434       ;;
435     --cxx)
436       echo $CXX
437       ;;
438     --ld)
439       echo $LD
440       ;;
441     --help|-h)
442       usage 1 1>&2
443       ;;
444   esac
445   shift
446 done
447