]> git.saurik.com Git - wxWidgets.git/blame - wx-config.in
show stderr in popen() test; show how to deal with piping big amounts of data to...
[wxWidgets.git] / wx-config.in
CommitLineData
9a98a854
VZ
1#!/bin/sh
2
33380099
VS
3# -------------------------------------------------------------------------
4# Configured settings:
5# -------------------------------------------------------------------------
6
7# Version and build type information:
8
9WX_MAJOR_VERSION_NUMBER="@WX_MAJOR_VERSION_NUMBER@"
10WX_MINOR_VERSION_NUMBER="@WX_MINOR_VERSION_NUMBER@"
11WX_RELEASE_NUMBER="@WX_RELEASE_NUMBER@"
12release="@WX_MAJOR_VERSION_NUMBER@.@WX_MINOR_VERSION_NUMBER@"
13is_monolithic="@MONOLITHIC@"
14cross_compiling="@cross_compiling@"
15target="@host_alias@"
16static_flag="@STATIC_FLAG@"
127e9080 17inplace_flag="no"
33380099
VS
18
19# Misc configuration variables:
20
0154f61a
VS
21update_prefixes()
22{
23 includedir="@includedir@"
24 libdir="@libdir@"
25}
33380099
VS
26prefix="@prefix@"
27exec_prefix="@exec_prefix@"
0154f61a
VS
28update_prefixes
29
6ce73557 30CC="@CC@"
2b5f62a0 31GCC="@GCC@"
31414f4c 32GCC_SEARCHES_USR_LOCAL_INCLUDE="@GCC_SEARCHES_USR_LOCAL_INCLUDE@"
6ce73557
VZ
33CXX="@CXX@"
34LD="@SHARED_LD@"
33380099
VS
35srcdir="@top_srcdir@"
36builddir="@top_builddir_wxconfig@"
37basename_nogui="@WX_LIBRARY_BASENAME_NOGUI@"
38basename_gui="@WX_LIBRARY_BASENAME_GUI@"
39
40TOOLCHAIN_NAME="@TOOLCHAIN_NAME@"
41LDFLAGS="@LDFLAGS@"
42WXCONFIG_RPATH="@WXCONFIG_RPATH@"
43DMALLOC_LIBS="@DMALLOC_LIBS@"
44WXCONFIG_LIBS="@WXCONFIG_LIBS@"
45WXCONFIG_LIBS_STATIC="@WXCONFIG_LIBS_STATIC@"
46WXDEBUG_DEFINE="@WXDEBUG_DEFINE@"
47TOOLCHAIN_DEFS="@TOOLCHAIN_DEFS@"
48TOOLCHAIN_DLL_DEFS="@TOOLCHAIN_DLL_DEFS@"
49WXCONFIG_INCLUDE="@WXCONFIG_INCLUDE@"
50WX_LARGEFILE_FLAGS="@WX_LARGEFILE_FLAGS@"
74b84332 51GCC_PRAGMA_FLAGS="@GCC_PRAGMA_FLAGS@"
33380099
VS
52CODE_GEN_FLAGS="@CODE_GEN_FLAGS@"
53CODE_GEN_FLAGS_CXX="@CODE_GEN_FLAGS_CXX@"
54LDFLAGS_EXE="@LDFLAGS_EXE@"
55MACRESWXCONFIG="@MACRESWXCONFIG@"
56EXTRALIBS_GUI="@EXTRALIBS_GUI@"
57LIBS="@LIBS@"
ffef10f6 58WXCONFIG_LDFLAGS_GUI="@WXCONFIG_LDFLAGS_GUI@"
cf615ebb
VS
59
60
61# Linker flags for sublibraries:
33380099 62
edd891e2
VS
63CORE_BASE_LIBS="@CORE_BASE_LIBS@"
64CORE_GUI_LIBS="@CORE_GUI_LIBS@"
cf615ebb 65
67c13b6c 66ldlibs_base="@WXCONFIG_EXTRALIBS@"
cf615ebb
VS
67ldlibs_core="@EXTRALIBS_GUI@"
68ldlibs_xml="@EXTRALIBS_XML@"
3527f29c 69ldlibs_html="@EXTRALIBS_HTML@"
bb41dcbe 70ldlibs_odbc="@EXTRALIBS_ODBC@"
f93ca9fd 71ldlibs_adv="@EXTRALIBS_SDL@"
cf615ebb
VS
72
73ldflags_gl="@LDFLAGS_GL@"
74ldlibs_gl="@OPENGL_LIBS@"
75
76
33380099
VS
77
78# -------------------------------------------------------------------------
79# Script code:
80# -------------------------------------------------------------------------
81
82exec_prefix_set=no
83
cf615ebb
VS
84# is $1 among the rest of arguments?
85isinlist()
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):
98output_libs()
99{
67c13b6c
VS
100 if test "$cross_compiling" = "yes" ; then
101 target_tag="-${target}"
102 fi
103
cf615ebb
VS
104 all_libs=""
105 all_ldflags=""
106 wxlibs=""
67c13b6c 107
cf615ebb
VS
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
fef23dd4
VS
116 if test $lib = "base" ; then
117 libname="$basename"
118 else
119 libname="${basename}_${lib}"
120 fi
cf615ebb
VS
121
122 all_ldflags="$all_ldflags $xflags"
123 if test $static_flag = yes ; then
33380099 124 wxlibs="$wxlibs ${libdir}/lib${libname}-${release}${target_tag}.a"
cf615ebb
VS
125 all_libs="$all_libs $xlibs"
126 else
67c13b6c 127 wxlibs="$wxlibs -l${libname}-${release}${target_tag}"
cf615ebb
VS
128 fi
129 done
130
131 echo $all_ldflags $wxlibs $all_libs
132}
9a98a854 133
ffef10f6
VS
134# output $(WXCONFIG_LDFLAGS_GUI) if any of libs passed as arguments is GUI
135# library, nothing otherwise:
136get_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
52c71b80
VZ
147# return the absolute path prepending builddir to it if needed
148makeabs()
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
75f4be8a
VZ
164usage()
165{
166 cat <<EOF
2f42e5b6 167Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--release]
cf615ebb 168 [--basename] [--static] [--libs[=LIBS]] [--gl-libs]
40f7145c 169 [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
75f4be8a 170 [--cc] [--cxx] [--ld]
16327fd8 171 [--inplace]
75f4be8a
VZ
172
173wx-config returns configuration information about the installed
b63b07a8 174version of wxWidgets. It may be used to query its version and
75f4be8a
VZ
175installation directories and also retrieve the C and C++ compilers
176and linker which were used for its building and the corresponding
177flags.
2b5f62a0 178
82a649b6
RL
179Ordinarily it should be installed to the appropriate system location
180along with the headers and library files, but it is also possible to
b63b07a8 181use it to enable builds with an uninstalled wxWidgets version for
82a649b6
RL
182package building and bleeding edge developers. To do so, use it like
183this:
184
dc5e3b9e 185\${wx_builddir}/wx-config --prefix=\${wx_srcdir} --exec-prefix=\${wx_builddir}
82a649b6
RL
186
187Note that any other options supplied must come *after* the prefix
188specification for it to take effect.
189
efe6c06f
VS
190--static must come before --cppflags, --cflags, --cxxflags,
191--libs and --gl-libs.
cf615ebb
VS
192
193--libs can take optional argument that contains comma-separated list of
b63b07a8 194wxWidgets libraries to link against. This list can include both core
1d8864ac
VZ
195and contrib libraries. Special value "std" stands for all libraries linked
196in by default.
cf615ebb 197
67c13b6c
VS
198--gl-libs option is deprecated, used --libs=gl instead.
199
16327fd8
VS
200The --inplace flag allows wx-config to be used from the wxWindows
201build directory and output flags to use the uninstalled version of
cadfae2b 202the headers and libs in the build directory.
16327fd8 203
75f4be8a
VZ
204EOF
205
206 exit $1
207}
208
209cppflags()
210{
2b5f62a0
VZ
211 # we should never specify -I/usr/include on the compiler command line: this
212 # is at best useless and at worst breaks compilation on the systems where
213 # the system headers are non-ANSI because gcc works around this by storing
214 # the ANSI-fied versions of them in its private directory which is searched
215 # after all the directories on the cmd line.
216 #
31414f4c
SN
217 # the situation is a bit more complicated with -I/usr/local/include:
218 # it shouldn't be specified with some gcc installations which look there
219 # by default anyhow and give warnings (at least 3.1 does) if it is
220 # specified explicitly --
221 # but this -I switch *is* needed for other gcc installation and for
222 # the other compilers.
223 # So I put a suitable test into configure.in and reuse the result here.
2b5f62a0
VZ
224 #
225 # note that we assume that if we use GNU cc we also use GNU c++ and vice
226 # versa, i.e. this won't work (either for --cflags or --cxxflags) if GNU C
227 # compiler and non-GNU C++ compiler are used or vice versa -- we'll fix
228 # this when/if anybody complains about it
33380099
VS
229 if test "${includedir}" != "/usr/include" \
230 -a "${includedir}" != "/usr/include/c++" \
31414f4c 231 -a \( "${GCC_SEARCHES_USR_LOCAL_INCLUDE}" != "yes" \
33380099 232 -o "${includedir}" != "/usr/local/include" \) \
77e13408 233 -a \( "${cross_compiling}" != "yes" \
33380099 234 -o "${includedir}" != "/usr/${target}/include" \) ;
3a922bb4 235 then
33380099 236 includes=" -I${includedir}"
75f4be8a 237 fi
00c81359 238
33380099 239 includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}$includes"
00c81359 240
127e9080 241 # in inplace case we need to also add path to contrib headers -- do it
bc79eb4f 242 # unconditionally as they might be used and we have no way of knowing if
127e9080
VZ
243 # they really are
244 if test $inplace_flag = yes ; then
245 includes="$includes -I${prefix}/contrib/include"
246 fi
247
00c81359 248 if test $static_flag = yes ; then
74b84332 249 echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}
00c81359 250 else
74b84332 251 echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${TOOLCHAIN_DLL_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS} ${GCC_PRAGMA_FLAGS}
00c81359 252 fi
75f4be8a 253}
9a98a854
VZ
254
255if test $# -eq 0; then
3a922bb4 256 usage 1 1>&2
9a98a854
VZ
257fi
258
259while test $# -gt 0; do
260 case "$1" in
261 -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
262 *) optarg= ;;
263 esac
264
265 case $1 in
52c71b80
VZ
266 --inplace)
267 prefix=`makeabs $srcdir`
268 exec_prefix=`makeabs $builddir`
269 exec_prefix_set=yes
127e9080 270 inplace_flag=yes
0154f61a 271 update_prefixes
52c71b80 272 ;;
9a98a854
VZ
273 --prefix=*)
274 prefix=$optarg
275 if test $exec_prefix_set = no ; then
276 exec_prefix=$optarg
277 fi
0154f61a 278 update_prefixes
9a98a854
VZ
279 ;;
280 --prefix)
281 echo $prefix
282 ;;
283 --exec-prefix=*)
284 exec_prefix=$optarg
285 exec_prefix_set=yes
0154f61a 286 update_prefixes
9a98a854
VZ
287 ;;
288 --exec-prefix)
289 echo $exec_prefix
290 ;;
291 --version)
33380099 292 echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
9a98a854 293 ;;
2f42e5b6 294 --release)
cf615ebb 295 echo $release
2f42e5b6
VS
296 ;;
297 --basename)
9171d4b4 298 echo $basename_gui
2f42e5b6 299 ;;
3d63bc3a
RL
300 --static)
301 static_flag=yes
302 ;;
75f4be8a
VZ
303 --cppflags)
304 cppflags
305 ;;
9a98a854 306 --cflags)
33380099 307 echo `cppflags` ${CODE_GEN_FLAGS}
75f4be8a
VZ
308 ;;
309 --cxxflags)
33380099 310 echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
9a98a854 311 ;;
40f7145c 312 --ldflags)
33380099 313 echo ${LDFLAGS_EXE}
40f7145c 314 ;;
2baaf735 315 --rezflags)
09d3439c 316 echo `eval echo ${MACRESWXCONFIG}`
2baaf735 317 ;;
cf615ebb
VS
318
319 --libs*)
320 # find if the argument was --libs=list,of,libs or --libs:
321 if test "x$optarg" = "x" ; then
322 if test "$is_monolithic" = "0" ; then
323 # link against all libs if none given explicitly:
324 libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
325 fi
326 else
327 libs_list=`echo "$optarg" | tr ',' ' '`
67c13b6c
VS
328 # always add wxBase, any wxApp needs it:
329 libs_list="$libs_list base"
cf615ebb
VS
330 fi
331
332 # include install directory only if it is not default:
33380099 333 if test "${libdir}" != "/usr/lib" \
77e13408 334 -a \( "${cross_compiling}" != "yes" \
33380099 335 -o "${libdir}" != "/usr/${target}/lib" \) ;
3a922bb4 336 then
33380099 337 libs="-L${libdir}"
9a98a854 338 fi
3d63bc3a 339
1d8864ac
VZ
340 # it's simpler to avoid handling "bae" itself at all as we add it in the
341 # end to the list of libraries anyhow
cf615ebb
VS
342 # in monolithic build, link against the main library:
343 if test "$is_monolithic" = "1" ; then
344 # filter out core libs, leave only contrib in libs_list:
345 newlist=
346 for i in $libs_list ; do
1d8864ac 347 if isinlist $i $CORE_GUI_LIBS $CORE_BASE_LIBS; then
cf615ebb
VS
348 libs_list="" # do nothing
349 else
350 newlist="$newlist $i"
351 fi
352 done
353 libs_list="$newlist"
9171d4b4 354
cf615ebb
VS
355 # output link flags:
356 contrib_libs=`output_libs $libs_list`
357 if test $static_flag = yes ; then
ffef10f6 358 echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
cf615ebb 359 else
ffef10f6 360 echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
cf615ebb 361 fi
3d63bc3a 362 else
1d8864ac
VZ
363 # we may need to replace "std" alias with its expansion
364 newlist=
365 hadstd=0
366 for i in $libs_list; do
367 case $i in
368 std)
369 hadstd=1
370 ;;
371
372 base)
373 # if we have std, we're going to add base anyhow, avoid
374 # having it twice in the end
375 if [ $hadstd = 0 ]; then
376 newlist="$newlist $i";
377 fi
378 ;;
379
380 *)
381 newlist="$newlist $i"
382 ;;
383 esac
384 done
385 libs_list="$newlist"
386 if [ $hadstd = 1 ]; then
387 libs_list="$libs_list $CORE_GUI_LIBS $CORE_BASE_LIBS"
388 fi
389
cf615ebb
VS
390 # in multilib mode, link against all sublibraries:
391 wxlibs=`output_libs $libs_list`
ffef10f6
VS
392 guildflags=`get_ldflags_gui $libs_list`
393 echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
3d63bc3a
RL
394 fi
395
3a922bb4
RL
396 ;;
397 --gl-libs)
cf615ebb 398 output_libs gl
9a98a854 399 ;;
6ce73557
VZ
400 --cc)
401 echo $CC
402 ;;
403 --cxx)
404 echo $CXX
405 ;;
406 --ld)
407 echo $LD
408 ;;
9a98a854 409 *)
75f4be8a 410 usage 1 1>&2
9a98a854
VZ
411 ;;
412 esac
413 shift
414done
415