don't output -DwxUSE_GUI=0 in monolithic build, setup.h will take care of setting...
[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 WX_SUBRELEASE_NUMBER="@WX_SUBRELEASE_NUMBER@"
13 release="@WX_MAJOR_VERSION_NUMBER@.@WX_MINOR_VERSION_NUMBER@"
14 is_monolithic="@MONOLITHIC@"
15 cross_compiling="@cross_compiling@"
16 target="@host_alias@"
17 static_flag="@STATIC_FLAG@"
18 inplace_flag="no"
19
20 # Misc configuration variables:
21
22 update_prefixes()
23 {
24     includedir="@includedir@"
25     libdir="@libdir@"
26 }
27 prefix="@prefix@"
28 exec_prefix="@exec_prefix@"
29 update_prefixes
30
31 CC="@CC@"
32 GCC="@GCC@"
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]] [--host=HOST]
153                  [--version[=VERSION]] [--version-full] [--release]
154                  [--list] [--basename] [--static] [--libs] [--gl-libs]
155                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
156                  [--cc] [--cxx] [--ld] [LIBRARIES]
157
158 wx-config returns configuration information about the installed
159 version of wxWidgets. It may be used to query its version and
160 installation directories and also retrieve the C and C++ compilers
161 and linker which were used for its building and the corresponding
162 flags.
163
164 Ordinarily it should be installed to the appropriate system location
165 along with the headers and library files, but it is also possible to
166 use it to enable builds with an uninstalled wxWidgets version for
167 package building and bleeding edge developers.  To do so, use it like
168 this:
169
170 \${wx_builddir}/wx-config --inplace
171
172 Note that any other options supplied must come *after* --inplace
173 for it to take effect.
174
175 --static must come before --cppflags, --cflags, --cxxflags,
176 --libs and --gl-libs and --libs must come before the other ones.
177
178 wx-config can take optional argument that contains comma- or space-separated
179 list of wxWidgets libraries to compile and link against. This list can
180 include both core and contrib libraries. Special value "std" stands for all
181 libraries linked in by default. Examples: "wx-config --libs core,base"
182 or "wx-config --cxxflags core,base".
183
184 --gl-libs option is deprecated, use "--libs gl" instead.
185
186 If there are several different builds of wxWidgets installed in same prefix,
187 you can use --host, --toolkit, --unicode, --debug, --universal and --version
188 options to select one of them. Use --list option to show all available builds
189 that match given criteria.
190
191 EOF
192
193     exit $1
194 }
195
196 cppflags()
197 {
198     includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}"
199
200     # in inplace case we need to also add path to contrib headers -- do it
201     # unconditionally as they might be used and we have no way of knowing if
202     # they really are
203     if test $inplace_flag = yes ; then
204         includes="$includes -I${prefix}/include -I${prefix}/contrib/include"
205     else
206         includes="$includes -I${includedir}/wx-${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}"
207     fi
208
209     flags="$includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS}"
210     if test $static_flag != yes ; then
211         flags="$flags ${TOOLCHAIN_DLL_DEFS}"
212     fi
213
214     if test $nogui_flag = "yes" ; then
215         flags="$flags -DwxUSE_GUI=0"
216     fi
217
218     echo "$flags ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}"
219 }
220
221 if test $# -eq 0; then
222     usage 1 1>&2
223 fi
224
225
226 # handle libraries list:
227
228 libs_list=""
229
230 for arg in $*; do
231   case "$arg" in
232     -*)
233       ;;
234     *)
235       libs_list="$libs_list `echo "$arg" | tr ',' ' '`"
236       ;;
237   esac
238 done
239       
240 if test "x$libs_list" = "x" ; then
241   if test "$is_monolithic" = "0" ; then
242     # link against all libs if none given explicitly:
243     libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
244   fi
245 else
246   # always add wxBase, any wxApp needs it:
247   libs_list="$libs_list base"
248 fi
249
250 # determine if at least one gui lib was used:
251 if test "$is_monolithic" = "0" ; then
252   nogui_flag="yes"
253   for i in $libs_list; do
254     case $i in
255         base|net)
256           ;;
257         *)
258           nogui_flag="no"
259           ;;
260     esac
261   done
262 else
263   nogui_flag="no"
264 fi
265
266
267 # handle options:
268
269 while test $# -gt 0; do
270   case "$1" in
271   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
272   *) optarg= ;;
273   esac
274
275   case $1 in
276     --inplace)
277       inplace_flag=yes
278       ;;
279     --prefix=*)
280       prefix=$optarg
281       if test $exec_prefix_set = no ; then
282         exec_prefix=$optarg
283       fi
284       update_prefixes
285       ;;
286     --prefix)
287       echo $prefix
288       ;;
289     --exec-prefix=*)
290       exec_prefix=$optarg
291       exec_prefix_set=yes
292       update_prefixes
293       ;;
294     --exec-prefix)
295       echo $exec_prefix
296       ;;
297     --version)
298       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
299       ;;
300     --version-full)
301       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}.${WX_SUBRELEASE_NUMBER}
302       ;;
303     --release)
304       echo $release
305       ;;
306     --basename)
307       echo $basename_gui
308       ;;
309     --static)
310       static_flag=yes
311       ;;
312     --cppflags)
313       cppflags
314       ;;
315     --cflags)
316       echo `cppflags` ${CODE_GEN_FLAGS}
317       ;;
318     --cxxflags)
319       echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
320       ;;
321     --ldflags)
322       echo ${LDFLAGS_EXE}
323       ;;
324     --rezflags)
325       echo `eval echo ${MACRESWXCONFIG}`
326       ;;
327
328     --libs)
329       # include install directory only if it is not default:
330       if test "${libdir}" != "/usr/lib" \
331               -a \( "${cross_compiling}" != "yes" \
332                     -o "${libdir}" != "/usr/${target}/lib" \) ;
333       then
334           libs="-L${libdir}"
335       fi
336
337       # it's simpler to avoid handling "base" itself at all as we add it in the
338       # end to the list of libraries anyhow
339       # in monolithic build, link against the main library:
340       if test "$is_monolithic" = "1" ; then
341           # filter out core libs, leave only contrib in libs_list:
342           newlist=
343           for i in $libs_list ; do
344               if isinlist $i $CORE_GUI_LIBS $CORE_BASE_LIBS; then
345                   libs_list="" # do nothing
346               else
347                   newlist="$newlist $i"
348               fi
349           done
350           libs_list="$newlist"
351
352           # output link flags:
353           contrib_libs=`output_libs $libs_list`
354           if test $static_flag = yes ; then
355               echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
356           else
357               echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
358           fi
359       else
360           # we may need to replace "std" alias with its expansion
361           newlist=
362           hadstd=0
363           for i in $libs_list; do
364               case $i in
365                   std)
366                     hadstd=1
367                     ;;
368
369                   base)
370                     # if we have std, we're going to add base anyhow, avoid
371                     # having it twice in the end
372                     if [ $hadstd = 0 ]; then
373                         newlist="$newlist $i"
374                     fi
375                     ;;
376
377                   *)
378                     newlist="$newlist $i"
379                     ;;
380               esac
381           done
382           libs_list="$newlist"
383           if [ $hadstd = 1 ]; then
384               libs_list="$libs_list $CORE_GUI_LIBS $CORE_BASE_LIBS"
385           fi
386
387           # in multilib mode, link against all sublibraries:
388           wxlibs=`output_libs $libs_list`
389           guildflags=`get_ldflags_gui $libs_list`
390           echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
391       fi
392
393       ;;
394     --gl-libs)
395       output_libs gl
396       ;;
397     --cc)
398       echo $CC
399       ;;
400     --cxx)
401       echo $CXX
402       ;;
403     --ld)
404       echo $LD
405       ;;
406     --help|-h)
407       usage 1 1>&2
408       ;;
409     -*)
410       # unrecognized flag is error
411       usage 1 1>&2
412       ;;
413   esac
414   shift
415 done
416