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