re-added --inplace documentation
[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 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 # return the absolute path prepending builddir to it if needed
147 makeabs()
148 {
149     path=$1
150     # TODO: this only works under Unix and even there it could be
151     #       enhanced to remove ".." and "."
152     if [ `echo $path | sed 's/^\(.\).*/\1/'` != "/" ]; then
153         if [ $path = "." ]; then
154             path=$builddir
155         else
156             path="$builddir/$path"
157         fi
158     fi
159
160     echo $path
161 }
162
163 usage()
164 {
165     cat <<EOF
166 Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--release]
167                  [--basename] [--static] [--libs[=LIBS]] [--gl-libs]
168                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
169                  [--cc] [--cxx] [--ld]
170                  [--inplace]
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.
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, used --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.  (Currently configure
202 must be invoked via a full path name for this to work correctly.)
203
204 EOF
205
206     exit $1
207 }
208
209 cppflags()
210 {
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     #
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.
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
229     if test "${includedir}" != "/usr/include" \
230             -a "${includedir}" != "/usr/include/c++" \
231             -a \( "${GCC_SEARCHES_USR_LOCAL_INCLUDE}" != "yes" \
232                   -o "${includedir}" != "/usr/local/include" \) \
233             -a \( "${cross_compiling}" != "yes" \
234                   -o "${includedir}" != "/usr/${target}/include" \) ;
235     then
236         includes=" -I${includedir}"
237     fi
238
239     includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}$includes"
240
241     # in inplace case we need to also add path to contrib headers -- do it
242     # unconditionally as they might be used and we have no way of knowing if
243     # they really are
244     if test $inplace_flag = yes ; then
245         includes="$includes -I${prefix}/contrib/include"
246     fi
247
248     if test $static_flag = yes ; then
249         echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS}
250     else
251         echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${TOOLCHAIN_DLL_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS}
252     fi
253 }
254
255 if test $# -eq 0; then
256     usage 1 1>&2
257 fi
258
259 while 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
266     --inplace)
267       prefix=`makeabs $srcdir`
268       exec_prefix=`makeabs $builddir`
269       exec_prefix_set=yes
270       inplace_flag=yes
271       update_prefixes
272       ;;
273     --prefix=*)
274       prefix=$optarg
275       if test $exec_prefix_set = no ; then
276         exec_prefix=$optarg
277       fi
278       update_prefixes
279       ;;
280     --prefix)
281       echo $prefix
282       ;;
283     --exec-prefix=*)
284       exec_prefix=$optarg
285       exec_prefix_set=yes
286       update_prefixes
287       ;;
288     --exec-prefix)
289       echo $exec_prefix
290       ;;
291     --version)
292       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
293       ;;
294     --release)
295       echo $release
296       ;;
297     --basename)
298       echo $basename_gui
299       ;;
300     --static)
301       static_flag=yes
302       ;;
303     --cppflags)
304       cppflags
305       ;;
306     --cflags)
307       echo `cppflags` ${CODE_GEN_FLAGS}
308       ;;
309     --cxxflags)
310       echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
311       ;;
312     --ldflags)
313       echo ${LDFLAGS_EXE}
314       ;;
315     --rezflags)
316       echo `eval echo ${MACRESWXCONFIG}`
317       ;;
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 ',' ' '`
328           # always add wxBase, any wxApp needs it:
329           libs_list="$libs_list base"
330       fi
331
332       # include install directory only if it is not default:
333       if test "${libdir}" != "/usr/lib" \
334               -a \( "${cross_compiling}" != "yes" \
335                     -o "${libdir}" != "/usr/${target}/lib" \) ;
336       then
337           libs="-L${libdir}"
338       fi
339
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
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
347               if isinlist $i $CORE_GUI_LIBS $CORE_BASE_LIBS; then
348                   libs_list="" # do nothing
349               else
350                   newlist="$newlist $i"
351               fi
352           done
353           libs_list="$newlist"
354
355           # output link flags:
356           contrib_libs=`output_libs $libs_list`
357           if test $static_flag = yes ; then
358               echo "$libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
359           else
360               echo $libs ${LDFLAGS} ${WXCONFIG_LDFLAGS_GUI} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
361           fi
362       else
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
390           # in multilib mode, link against all sublibraries:
391           wxlibs=`output_libs $libs_list`
392           guildflags=`get_ldflags_gui $libs_list`
393           echo $libs ${LDFLAGS} ${guildflags} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
394       fi
395
396       ;;
397     --gl-libs)
398       output_libs gl
399       ;;
400     --cc)
401       echo $CC
402       ;;
403     --cxx)
404       echo $CXX
405       ;;
406     --ld)
407       echo $LD
408       ;;
409     *)
410       usage 1 1>&2
411       ;;
412   esac
413   shift
414 done
415