1## -*-sh-*-
2## BEGIN of icu-config-bottom.
3## Copyright (C) 2016 and later: Unicode, Inc. and others.
4## License & terms of use: http://www.unicode.org/copyright.html
5## Copyright (c) 2002-2013, International Business Machines Corporation and
6## others. All Rights Reserved.
7
8ICUUC_FILE="${libdir}/${ICULIBS_COMMON_LIB_NAME}"
9ICUUC_FILE_A="${libdir}/${ICULIBS_COMMON_LIB_NAME_A}"
10
11#  echo ENABLE RPATH $ENABLE_RPATH and RPATHLDFLAGS=${RPATH_LDFLAGS}
12if [ "x$PKGDATA_MODE" = "x" ]; then
13    PKGDATA_MODE=dll
14fi
15
16}
17
18## The actual code of icu-config goes here.
19
20ME=`basename "$0"`
21
22allflags()
23{
24    echo "  --noverify             Don't verify that ICU is actually installed."
25    echo "  --bindir               Print binary directory path (bin)"
26    echo "  --cc                   Print C compiler used [CC]"
27    echo "  --cflags               Print C compiler flags [CFLAGS]"
28    echo "  --cflags-dynamic       Print additional C flags for"
29    echo "                             building shared libraries."
30    echo "  --cppflags             Print C Preprocessor flags [CPPFLAGS]"
31    echo "  --cppflags-dynamic     Print additional C Preprocessor flags for"
32    echo "                             building shared libraries."
33    echo "  --cppflags-searchpath  Print only -I include directives  (-Iinclude)"
34    echo "  --cxx                  Print C++ compiler used [CXX]"
35    echo "  --cxxflags             Print C++ compiler flags [CXXFLAGS]"
36    echo "  --cxxflags-dynamic     Print additional C++ flags for"
37    echo "                             building shared libraries."
38    echo "  --detect-prefix        Attempt to detect prefix based on PATH"
39    echo "  --exec-prefix          Print prefix for executables (/bin)"
40    echo "  --exists               Return with 0 status if ICU exists else fail"
41    echo "  --help, -?, --usage    Print this message"
42    echo "  --icudata              Print shortname of ICU data file (icudt21l)"
43    echo "  --icudata-install-dir  Print path to install data to - use as --install option to pkgdata(1)"
44    echo "  --icudata-mode         Print default ICU pkgdata mode (dll) - use as --mode option to pkgdata(1)."
45    echo "  --icudatadir           Print path to packaged archive data. Can set as [ICU_DATA]"
46    echo "  --invoke               Print commands to invoke an ICU program"
47    echo "  --invoke=<prog>        Print commands to invoke an ICU program named <prog> (ex: genrb)"
48    echo "  --ldflags              Print -L search path and -l libraries to link with ICU [LDFLAGS].  This is for the data, uc (common), and i18n libraries only.  "
49    echo "  --ldflags-libsonly     Same as --ldflags, but only the -l directives"
50    echo "  --ldflags-searchpath   Print only -L (search path) directive"
51    echo "  --ldflags-system       Print only system libs ICU links with (-lpthread, -lm)"
52    echo "  --ldflags-icuio        Print ICU icuio link directive. Use in addition to --ldflags "
53    echo "  --ldflags-obsolete     Print ICU obsolete link directive. Use in addition to --ldflags. (requires icuapps/obsolete to be built and installed.) "
54    echo "  --mandir               Print manpage (man) path"
55    echo "  --prefix               Print PREFIX to icu install (/usr/local)"
56    echo "  --prefix=XXX           Set prefix to XXX for remainder of command"
57    echo "  --sbindir              Print system binary path (sbin) "
58    echo "  --shared-datadir       Print shared data (share) path. This is NOT the ICU data dir."
59    echo "  --shlib-c              Print the command to compile and build C shared libraries with ICU"
60    echo "  --shlib-cc             Print the command to compile and build C++ shared libraries with ICU"
61    echo "  --sysconfdir           Print system config (etc) path"
62    echo "  --unicode-version      Print version of Unicode data used in ICU ($UNICODE_VERSION)"
63    echo "  --version              Print ICU version ($VERSION)"
64    echo "  --incfile              Print path to Makefile.inc"
65    echo "  --incpkgdatafile       Print path to pkgdata.inc (for -O option of pkgdata)"
66    echo "  --install              Print path to install-sh"
67    echo "  --mkinstalldirs        Print path to mkinstalldirs"
68}
69
70## Print the normal usage message
71shortusage()
72{
73    echo "usage: ${ME} " `allflags | cut -c-25 | sed -e 's%.*%[ & ]%'`
74}
75
76
77usage()
78{
79    echo "${ME}: icu-config: ICU configuration helper script"
80    echo
81    echo "The most commonly used options will be --cflags, --cxxflags, --cppflags, and --ldflags."
82    echo 'Example (in make):   CPFLAGS=$(shell icu-config --cppflags)'
83    echo '                     LDFLAGS=$(shell icu-config --ldflags)'
84    echo "                     (etc).."
85    echo
86    echo "Usage:"
87    allflags
88
89    echo
90    echo " [Brackets] show MAKE variable equivalents,  (parenthesis) show example output"
91    echo
92    echo "Copyright (c) 2002-2013, International Business Machines Corporation and others. All Rights Reserved."
93    echo
94    echo "NOTE: Please consider using the pkg-config (.pc) files instead of icu-config."
95    echo " See: <http://userguide.icu-project.org/howtouseicu#TOC-pkg-config> "
96}
97
98## Check the sanity of current variables
99sanity()
100{
101    if [ ! -f "${ICUUC_FILE}" -a ! -f "${ICUUC_FILE_A}" ] && [ ${IGNORE_ICUUC_FILE_CHECK} = "no" ] && [ ${SANITY} = "sane" ];
102    then
103	echo "### $ME: Can't find ${ICUUC_FILE} - ICU prefix is wrong."  1>&2
104	echo "###      Try the --prefix= option " 1>&2
105	echo "###      or --detect-prefix" 1>&2
106        echo "###      (If you want to disable this check, use  the --noverify option)" 1>&2
107	echo "### $ME: Exitting." 1>&2
108	exit 2
109    fi
110}
111
112## Main starts here.
113
114if [ $# -lt 1 ]; then
115    shortusage
116    exit 1
117fi
118
119# For certain options (e.g. --detect-prefix) don't check for icuuc library file.
120
121IGNORE_ICUUC_FILE_CHECK="no";
122
123SANITY="sane"
124
125case "$1" in
126--noverify)
127    SANITY="nosanity"
128    shift
129    ;;
130esac
131
132case "$1" in
133*prefix*)
134    IGNORE_ICUUC_FILE_CHECK="yes"
135    ;;
136esac
137
138# Load our variables from autoconf
139# ALWAYS load twice because of dependencies
140loaddefs
141loaddefs
142
143if [ $# -gt 0 -a $1 = "--selfcheck" ];
144then
145	echo "passed"
146	exit
147	# EXIT for self check
148fi
149
150sanity
151
152while [ $# -gt 0 ];
153do
154    arg="$1"
155    var=`echo $arg | sed -e 's/^[^=]*=//'`
156#    echo "### processing $arg" 1>&2
157    case "$arg" in
158
159        # undocumented.
160        --debug)
161	    set -x
162	    ;;
163
164        --noverify)
165            echo "### $ME: Error: --noverify must be the first argument." 1>&2
166            exit 1
167            ;;
168
169    --so)
170        echo $SO
171        ;;
172
173	--bindir)
174	    echo $bindir
175	    ;;
176
177	--libdir)
178	    echo $libdir
179	    ;;
180
181	--exists)
182	    sanity
183	    ;;
184
185	--sbindir)
186	    echo $sbindir
187	    ;;
188
189	--mkinstalldirs)
190	    echo ${MKINSTALLDIRS}
191	    ;;
192
193	--install)
194	    echo ${INSTALL}
195	    ;;
196
197	--invoke=*)
198	    QUOT="\""
199            CMD="${var}"
200
201            # If it's not a locally executable command (1st choice) then
202            # search for it in the ICU directories.
203            if [ ! -x ${CMD} ]; then
204                if [ -x ${bindir}/${var} ]; then
205                    CMD="${bindir}/${var}"
206                fi
207                if [ -x ${sbindir}/${var} ]; then
208                    CMD="${sbindir}/${var}"
209                fi
210            fi
211
212	    echo "env ${QUOT}${LDLIBRARYPATH_ENVVAR}=${libdir}:"'${'"${LDLIBRARYPATH_ENVVAR}"'}'${QUOT} ${CMD}
213	    ;;
214
215	--invoke)
216	    QUOT="\""
217	    echo "env ${QUOT}${LDLIBRARYPATH_ENVVAR}=${libdir}:"'${'"${LDLIBRARYPATH_ENVVAR}"'}'${QUOT}
218	    ;;
219
220	--cflags)
221	    echo $ECHO_N "${CFLAGS} ${ECHO_C}"
222	    ;;
223
224	--cc)
225	    echo $ECHO_N "${CC} ${ECHO_C}"
226	    ;;
227
228	--cxx)
229	    echo $ECHO_N "${CXX} ${ECHO_C}"
230	    ;;
231
232	--cxxflags)
233	    echo $ECHO_N "${CXXFLAGS} ${ECHO_C}"
234	    ;;
235
236	--cppflags)
237	    # Don't echo the -I. - it's unneeded.
238	    echo $ECHO_N "${CPPFLAGS} ${ECHO_C}" | sed -e 's/-I. //'
239	    ;;
240
241	--cppflags-searchpath)
242	    echo $ECHO_N "-I${prefix}/include ${ECHO_C}"
243	    ;;
244
245	--cppflags-dynamic)
246	    echo $ECHO_N "${SHAREDLIBCPPFLAGS} ${ECHO_C}"
247	    ;;
248
249	--cxxflags-dynamic)
250	    echo $ECHO_N "${SHAREDLIBCXXFLAGS} ${ECHO_C}"
251	    ;;
252
253	--cflags-dynamic)
254	    echo $ECHO_N "${SHAREDLIBCFLAGS} ${ECHO_C}"
255	    ;;
256
257	--ldflags-system)
258	    echo $ECHO_N "${LIBS} ${ECHO_C}"
259	    ;;
260
261	--ldflags)
262	    echo $ECHO_N "${LDFLAGS} ${ICULIBS} ${ECHO_C}"
263# $RPATH_LDFLAGS
264	    ;;
265
266	--ldflags-libsonly)
267	    echo $ECHO_N "${ICULIBS_I18N} ${ICULIBS_COMMON} ${ICULIBS_DATA} ${ECHO_C}"
268	    ;;
269
270	--ldflags-icuio)
271	    echo $ECHO_N " ${ICULIBS_ICUIO} ${ECHO_C}"
272	    ;;
273
274	--ldflags-obsolete)
275	    echo $ECHO_N "${ICULIBS_OBSOLETE} ${ECHO_C}"
276	    ;;
277
278	--ldflags-toolutil)
279	    echo $ECHO_N " ${ICULIBS_TOOLUTIL} ${ECHO_C}"
280	    ;;
281
282	--ldflags-layout)
283            echo ${ME}: ERROR: the old layout engine has been removed. use HarfBuzz.
284            exit 1
285	    ;;
286
287	--ldflags-searchpath)
288	    echo $ECHO_N "-L${libdir} ${ECHO_C}"
289	    ;;
290
291	--detect-prefix)
292	    HERE=`echo $0 | sed -e "s/$ME//g"`
293	    if [ -f "${HERE}/../lib/${ICULIBS_COMMON_LIB_NAME}" -o -f  "${HERE}/../lib/${ICULIBS_COMMON_LIB_NAME_A}"  ]; then
294		prefix="${HERE}/.."
295		echo "## Using --prefix=${prefix}" 1>&2
296	    fi
297	    loaddefs
298	    loaddefs
299	    ;;
300
301	--exec-prefix)
302	    echo $exec_prefix
303	    ;;
304
305	--prefix)
306	    echo $prefix
307	    ;;
308
309	--prefix=*)
310	    prefix=$var
311	    loaddefs
312	    loaddefs
313	    ;;
314
315	--sysconfdir)
316	    echo $sysconfdir
317	    ;;
318
319	--mandir)
320	    echo $mandir
321	    ;;
322
323	--shared-datadir)
324	    echo $ECHO_N "${datadir} ${ECHO_C}"
325	    ;;
326
327        --incfile)
328	    echo $ECHO_N "${pkglibdir}/Makefile.inc ${ECHO_C}"
329	    ;;
330
331	--incpkgdatafile)
332	    echo $ECHO_N "${pkglibdir}/pkgdata.inc ${ECHO_C}"
333	    ;;
334
335	--icudata)
336	    echo $ECHO_N "${ICUDATA_NAME} ${ECHO_C}"
337	    ;;
338
339	--icudata-mode)
340	    echo $ECHO_N "${PKGDATA_MODE} ${ECHO_C}"
341	    ;;
342
343	--icudata-install-dir)
344        echo $ECHO_N "${ICUPKGDATA_DIR} ${ECHO_C}"
345	    ;;
346
347	--icudatadir)
348	    echo $ECHO_N "${ICUDATA_DIR} ${ECHO_C}"
349	    ;;
350
351	--shlib-c)
352	    echo $ECHO_N "${SHLIB_c} ${ECHO_C}"
353	    ;;
354
355	--shlib-cc)
356	    echo $ECHO_N "${SHLIB_cc} ${ECHO_C}"
357	    ;;
358
359	--version)
360	    echo $ECHO_N $VERSION
361	    ;;
362
363	--unicode-version)
364	    echo $ECHO_N $UNICODE_VERSION
365	    ;;
366
367	--host)
368	    echo $host
369	    exit 0
370	    ;;
371
372	--help)
373	    usage
374	    exit 0
375	    ;;
376
377	--usage)
378	    usage
379	    exit 0
380	    ;;
381
382#	--enable-rpath=*)
383#	    ENABLE_RPATH=$var
384#	    loaddefs
385#	    ;;
386
387	-?)
388	    usage
389	    exit 0
390	    ;;
391
392        *)
393	    echo ${ME}: ERROR Unknown Option $arg 1>&2
394            echo 1>&2
395            shortusage 1>&2
396	    echo "### $ME: Exitting." 1>&2
397            exit 1;
398            ;;
399    esac
400    shift
401
402    # Reset the ignore icuuc file check flag
403    if [ $IGNORE_ICUUC_FILE_CHECK = "yes" ]; then
404        IGNORE_ICUUC_FILE_CHECK="no"
405        sanity
406    fi
407done
408echo
409# Check once before we quit (will check last used prefix)
410sanity
411## END of icu-config-bottom
412
413exit 0
414