fix the situation when one of sublibraries is not built
[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
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 CXX="@CXX@"
33 LD="@SHARED_LD@"
34 srcdir="@top_srcdir@"
35 builddir="@top_builddir_wxconfig@"
36 basename_nogui="@WX_LIBRARY_BASENAME_NOGUI@"
37 basename_gui="@WX_LIBRARY_BASENAME_GUI@"
38
39 TOOLCHAIN_NAME="@TOOLCHAIN_NAME@"
40 LDFLAGS="@LDFLAGS@"
41 WXCONFIG_RPATH="@WXCONFIG_RPATH@"
42 DMALLOC_LIBS="@DMALLOC_LIBS@"
43 WXCONFIG_LIBS="@WXCONFIG_LIBS@"
44 WXCONFIG_LIBS_STATIC="@WXCONFIG_LIBS_STATIC@"
45 WXDEBUG_DEFINE="@WXDEBUG_DEFINE@"
46 TOOLCHAIN_DEFS="@TOOLCHAIN_DEFS@"
47 TOOLCHAIN_DLL_DEFS="@TOOLCHAIN_DLL_DEFS@"
48 WXCONFIG_INCLUDE="@WXCONFIG_INCLUDE@"
49 WX_LARGEFILE_FLAGS="@WX_LARGEFILE_FLAGS@"
50 CODE_GEN_FLAGS="@CODE_GEN_FLAGS@"
51 CODE_GEN_FLAGS_CXX="@CODE_GEN_FLAGS_CXX@"
52 LDFLAGS_EXE="@LDFLAGS_EXE@"
53 MACRESWXCONFIG="@MACRESWXCONFIG@"
54 EXTRALIBS_GUI="@EXTRALIBS_GUI@"
55 LIBS="@LIBS@"
56
57
58 # Linker flags for sublibraries:
59
60 CORE_BASE_LIBS="@CORE_BASE_LIBS@"
61 CORE_GUI_LIBS="@CORE_GUI_LIBS@"
62
63 ldlibs_base="@WXCONFIG_EXTRALIBS@"
64 ldlibs_core="@EXTRALIBS_GUI@"
65 ldlibs_xml="@EXTRALIBS_XML@"
66 ldlibs_odbc="@EXTRALIBS_ODBC@"
67
68 ldflags_gl="@LDFLAGS_GL@"
69 ldlibs_gl="@OPENGL_LIBS@"
70
71
72
73 # -------------------------------------------------------------------------
74 #                                Script code:
75 # -------------------------------------------------------------------------
76
77 exec_prefix_set=no
78
79 # is $1 among the rest of arguments?
80 isinlist()
81 {
82     value=$1
83     shift
84     isin=no
85     for iii in $* ; do
86         if test $iii = $value ; then isin=yes ; fi
87     done
88     test $isin = yes
89 }
90
91 # output linker commands needed to link against libraries passed as arguments
92 # (does not handle monolithic/multilib):
93 output_libs()
94 {
95     if test "$cross_compiling" = "yes" ; then
96         target_tag="-${target}"
97     fi
98
99     all_libs=""
100     all_ldflags=""
101     wxlibs=""
102
103     for lib in $* ; do
104         eval xlibs=\$ldlibs_$lib
105         eval xflags=\$ldflags_$lib
106         if isinlist $lib $CORE_BASE_LIBS ; then
107             basename=$basename_nogui
108         else
109             basename=$basename_gui
110         fi
111         if test $lib = "base" ; then
112             libname="$basename"
113         else
114             libname="${basename}_${lib}"
115         fi
116
117         all_ldflags="$all_ldflags $xflags"
118         if test $static_flag = yes ; then
119             wxlibs="$wxlibs ${libdir}/lib${libname}-${release}${target_tag}.a"
120             all_libs="$all_libs $xlibs"
121         else
122             wxlibs="$wxlibs -l${libname}-${release}${target_tag}"
123         fi
124     done
125
126     echo $all_ldflags $wxlibs $all_libs
127 }
128
129 # return the absolute path prepending builddir to it if needed
130 makeabs()
131 {
132     path=$1
133     # TODO: this only works under Unix and even there it could be
134     #       enhanced to remove ".." and "."
135     if [ `echo $path | sed 's/^\(.\).*/\1/'` != "/" ]; then
136         if [ $path = "." ]; then
137             path=$builddir
138         else
139             path="$builddir/$path"
140         fi
141     fi
142
143     echo $path
144 }
145
146 usage()
147 {
148     cat <<EOF
149 Usage: wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--release]
150                  [--basename] [--static] [--libs[=LIBS]] [--gl-libs]
151                  [--cppflags] [--cflags] [--cxxflags] [--ldflags] [--rezflags]
152                  [--cc] [--cxx] [--ld]
153
154 wx-config returns configuration information about the installed
155 version of wxWindows. It may be used to query its version and
156 installation directories and also retrieve the C and C++ compilers
157 and linker which were used for its building and the corresponding
158 flags.
159
160 Ordinarily it should be installed to the appropriate system location
161 along with the headers and library files, but it is also possible to
162 use it to enable builds with an uninstalled wxWindows version for
163 package building and bleeding edge developers.  To do so, use it like
164 this:
165
166 \${wx_builddir}/wx-config --prefix=\${wx_srcdir} --exec-prefix=\${wx_builddir}
167
168 Note that any other options supplied must come *after* the prefix
169 specification for it to take effect.
170
171 --static must come before --libs and --gl-libs.
172
173 --libs can take optional argument that contains comma-separated list of
174 wxWindows libraries to link against. This list can include both core
175 and contrib libraries.
176
177 --gl-libs option is deprecated, used --libs=gl instead.
178
179 EOF
180
181     exit $1
182 }
183
184 cppflags()
185 {
186     # we should never specify -I/usr/include on the compiler command line: this
187     # is at best useless and at worst breaks compilation on the systems where
188     # the system headers are non-ANSI because gcc works around this by storing
189     # the ANSI-fied versions of them in its private directory which is searched
190     # after all the directories on the cmd line.
191     #
192     # the situation is a bit more complicated with -I/usr/local/include: again,
193     # it shouldn't be specified with gcc which looks there by default anyhow
194     # and gives warnings (at least 3.1 does) if it is specified explicitly --
195     # but this -I switch *is* needed for the other compilers
196     #
197     # note that we assume that if we use GNU cc we also use GNU c++ and vice
198     # versa, i.e. this won't work (either for --cflags or --cxxflags) if GNU C
199     # compiler and non-GNU C++ compiler are used or vice versa -- we'll fix
200     # this when/if anybody complains about it
201     if test "${includedir}" != "/usr/include" \
202             -a "${includedir}" != "/usr/include/c++" \
203             -a \( "${GCC}" != "yes" \
204                   -o "${includedir}" != "/usr/local/include" \) \
205             -a \( "${cross_compiling}" != "yes" \
206                   -o "${includedir}" != "/usr/${target}/include" \) ;
207     then
208         includes=" -I${includedir}"
209     fi
210
211     includes="-I${libdir}/wx/include/${TOOLCHAIN_NAME}$includes"
212
213     if test $static_flag = yes ; then
214         echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS}
215     else
216         echo $includes ${WXDEBUG_DEFINE} ${TOOLCHAIN_DEFS} ${TOOLCHAIN_DLL_DEFS} ${WXCONFIG_INCLUDE} ${WX_LARGEFILE_FLAGS}
217     fi
218 }
219
220 if test $# -eq 0; then
221     usage 1 1>&2
222 fi
223
224 while test $# -gt 0; do
225   case "$1" in
226   -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
227   *) optarg= ;;
228   esac
229
230   case $1 in
231     --inplace)
232       prefix=`makeabs $srcdir`
233       exec_prefix=`makeabs $builddir`
234       exec_prefix_set=yes
235       update_prefixes
236       ;;
237     --prefix=*)
238       prefix=$optarg
239       if test $exec_prefix_set = no ; then
240         exec_prefix=$optarg
241       fi
242       update_prefixes
243       ;;
244     --prefix)
245       echo $prefix
246       ;;
247     --exec-prefix=*)
248       exec_prefix=$optarg
249       exec_prefix_set=yes
250       update_prefixes
251       ;;
252     --exec-prefix)
253       echo $exec_prefix
254       ;;
255     --version)
256       echo ${WX_MAJOR_VERSION_NUMBER}.${WX_MINOR_VERSION_NUMBER}.${WX_RELEASE_NUMBER}
257       ;;
258     --release)
259       echo $release
260       ;;
261     --basename)
262       echo $basename_gui
263       ;;
264     --static)
265       static_flag=yes
266       ;;
267     --cppflags)
268       cppflags
269       ;;
270     --cflags)
271       echo `cppflags` ${CODE_GEN_FLAGS}
272       ;;
273     --cxxflags)
274       echo `cppflags` ${CODE_GEN_FLAGS} ${CODE_GEN_FLAGS_CXX}
275       ;;
276     --ldflags)
277       echo ${LDFLAGS_EXE}
278       ;;
279     --rezflags)
280       echo ${MACRESWXCONFIG}
281       ;;
282
283     --libs*)
284       # find if the argument was --libs=list,of,libs or --libs:
285       if test "x$optarg" = "x" ; then
286           if test "$is_monolithic" = "0" ; then
287               # link against all libs if none given explicitly:
288               libs_list="$CORE_GUI_LIBS $CORE_BASE_LIBS"
289           fi
290       else
291           libs_list=`echo "$optarg" | tr ',' ' '`
292           # always add wxBase, any wxApp needs it:
293           libs_list="$libs_list base"
294       fi
295
296       # include install directory only if it is not default:
297       if test "${libdir}" != "/usr/lib" \
298               -a \( "${cross_compiling}" != "yes" \
299                     -o "${libdir}" != "/usr/${target}/lib" \) ;
300       then
301           libs="-L${libdir}"
302       fi
303
304       # in monolithic build, link against the main library:
305       if test "$is_monolithic" = "1" ; then
306           # filter out core libs, leave only contrib in libs_list:
307           newlist=
308           for i in $libs_list ; do
309               if isinlist $i $CORE_BASE_LIBS $CORE_GUI_LIBS ; then
310                   libs_list="" # do nothing
311               else
312                   newlist="$newlist $i"
313               fi
314           done
315           libs_list="$newlist"
316
317           # output link flags:
318           contrib_libs=`output_libs $libs_list`
319           if test $static_flag = yes ; then
320               echo "$libs ${LDFLAGS} ${WXCONFIG_RPATH} $contrib_libs ${libdir}/${WXCONFIG_LIBS_STATIC} ${EXTRALIBS_GUI} ${LIBS} ${DMALLOC_LIBS}"
321           else
322               echo $libs ${LDFLAGS} ${WXCONFIG_RPATH} $contrib_libs ${WXCONFIG_LIBS} ${DMALLOC_LIBS}
323           fi
324       else
325           # in multilib mode, link against all sublibraries:
326           wxlibs=`output_libs $libs_list`
327           echo $libs ${LDFLAGS} ${WXCONFIG_RPATH} $wxlibs ${DMALLOC_LIBS}
328       fi
329
330       ;;
331     --gl-libs)
332       output_libs gl
333       ;;
334     --cc)
335       echo $CC
336       ;;
337     --cxx)
338       echo $CXX
339       ;;
340     --ld)
341       echo $LD
342       ;;
343     *)
344       usage 1 1>&2
345       ;;
346   esac
347   shift
348 done
349