aboutsummaryrefslogtreecommitdiff
path: root/Makefile.in
blob: c24948a405a54211e87192050c69e5a2546787dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
#******************************************************************************
#
#   Copyright (C) 1998-2013, International Business Machines
#   Corporation and others.  All Rights Reserved.
#
#******************************************************************************
## Top-level Makefile.in for ICU
## Stephen F. Booth

srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = .

include $(top_builddir)/icudefs.mk

docdir = $(datadir)/doc
docsubdir = $(PACKAGE)$(ICULIBDASHSUFFIX)/html
docfilesdir = doc/html
docfiles = $(docfilesdir)/*.png $(docfilesdir)/*.html $(docfilesdir)/*.css $(docfilesdir)/*.tag 
docsrchdir = $(docfilesdir)/search
docsrchfiles = $(docsrchdir)/*

##

## Build directory information
subdir = .

#AUTOCONF = @AUTOCONF@

## Optional directory setup
@LAYOUT_TRUE@LAYOUT = layout layoutex
@ICUIO_TRUE@ICUIO = io
@EXTRAS_TRUE@EXTRA = extra
@TESTS_TRUE@TEST = test
@SAMPLES_TRUE@SAMPLE = samples
@TOOLS_TRUE@TOOLS = tools

## pkgconfig setup. Always have uc and i18n. Others are optional.
ALL_PKGCONFIG_SUFFIX=uc i18n
@LAYOUT_TRUE@ALL_PKGCONFIG_SUFFIX+= le lx
@ICUIO_TRUE@ALL_PKGCONFIG_SUFFIX+= io

DOXYGEN = @DOXYGEN@
DOCZIP = icu-docs.zip

## Files to remove for 'make clean'
CLEANFILES = *~

ALL_PKGCONFIG_FILES=$(ALL_PKGCONFIG_SUFFIX:%=$(top_builddir)/config/icu-%.pc)

## Files built (autoconfed) and installed
INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config @platform_make_fragment@ $(EXTRA_DATA:%=$(DESTDIR)$(pkglibdir)/%) $(ALL_PKGCONFIG_FILES)

## Files built (autoconfed) but not installed
LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk config/icucross.inc

DOCDIRS = common i18n
SUBDIRS =  stubdata common i18n $(LAYOUT) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST)

SECTION = 1

MANX_FILES = config/icu-config.$(SECTION)

ALL_MAN_FILES = $(MANX_FILES)

## Extra files to install [nothing at present]
EXTRA_DATA =

## List of phony targets
.PHONY : all all-local all-recursive install install-local install-udata install-udata-files install-udata-dlls		\
install-recursive clean clean-local clean-recursive distclean		\
distclean-local distclean-recursive doc dist dist-local dist-recursive	\
check check-local check-recursive clean-recursive-with-twist install-icu \
doc install-doc tests icu4j-data icu4j-data-install update-windows-makefiles xcheck-local xcheck-recursive xperf xcheck xperf-recursive \
check-exhaustive check-exhaustive-local check-exhaustive-recursive releaseDist

## Clear suffix list
.SUFFIXES :

## List of standard targets
all: all-local all-recursive
install: install-recursive install-local
clean: clean-recursive-with-twist clean-local
distclean : distclean-recursive distclean-local
dist: dist-recursive dist-local
check: all check-recursive
check-recursive: all
xcheck: all xcheck-recursive
xperf: all xperf-recursive
check-exhaustive: all check-exhaustive-recursive

pcheck: all tests
	@$(MAKE) -C test pcheck

check-exhaustive-local: check-local

xcheck-recursive: all xcheck-local
	@$(MAKE) -C test xcheck

xperf-recursive: all tests
	@$(MAKE) -C test/perf xperf

$(top_builddir)/config/icuinfo.xml: all
	@$(MAKE) -C tools/icuinfo check

ifeq ($(DOXYGEN),)
doc doc-searchengine:
	@echo you need Doxygen to generate documentation. Doxygen can be found on the Web
	@echo at http://www.doxygen.org/
else
doc: doc/html/index.html

doc-searchengine: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
	sed < Doxyfile -e 's%[^#]*SEARCHENGINE.*%SEARCHENGINE=YES%' | $(DOXYGEN) -
	@echo adding links from non-namespaced class files
	find doc/html -name 'classicu_1_1*' -print | sed -e 's%^\(.*class\)icu_1_1\(.*\)$$%ln & \1\2%' | sh
	@echo Docs created - WARNING, probably contains non-GPL .js files

doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
	$(DOXYGEN)
	@echo adding links from non-namespaced class files
	find doc/html -name 'classicu_1_1*' -print | sed -e 's%^\(.*class\)icu_1_1\(.*\)$$%ln & \1\2%' | sh

Doxyfile: $(srcdir)/Doxyfile.in
	CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

$(DOCZIP): doc
	-$(RMV) $(DOCZIP)
	( cd doc/html ; zip -r ../../$(DOCZIP) * )
endif

LOCAL_SUBDIRS = $(SUBDIRS)
CLEAN_FIRST_SUBDIRS = $(TOOLS)

$(LIBDIR) $(BINDIR):
	-$(MKINSTALLDIRS) $@

## Recursive targets
all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive check-exhaustive-recursive: $(LIBDIR) $(BINDIR)
	@dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \
	  echo "$(MAKE)[$(MAKELEVEL)]: Making \`$$target' in \`$$subdir'"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-local"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  (cd $$subdir && $(MAKE) RECURSIVE=YES $$local_target) || exit; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) "$$target-local" || exit; \
	fi

clean-recursive-with-twist:
	$(MAKE) clean-recursive LOCAL_SUBDIRS='$(CLEAN_FIRST_SUBDIRS) $(filter-out $(CLEAN_FIRST_SUBDIRS),$(LOCAL_SUBDIRS))'

all-local: $(srcdir)/configure $(LOCAL_BUILT_FILES) $(INSTALLED_BUILT_FILES)
ifndef VERBOSE
	@echo "Note: rebuild with \"$(MAKE) VERBOSE=1 $(MAKECMDGOALS)\" to show all compiler parameters."
endif
install-local: install-icu install-manx

install-icu: $(INSTALLED_BUILT_FILES)
	@$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/config
	@$(MKINSTALLDIRS) $(DESTDIR)$(pkglibdir)
	@$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
	@$(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
	$(INSTALL_DATA) @platform_make_fragment@ $(DESTDIR)$(pkgdatadir)/config/@platform_make_fragment_name@
	$(INSTALL_SCRIPT) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(pkgdatadir)/mkinstalldirs
	$(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir)/pkgconfig
	$(INSTALL_DATA) $(ALL_PKGCONFIG_FILES) $(DESTDIR)$(libdir)/pkgconfig/
	$(INSTALL_DATA) $(top_srcdir)/../license.html $(DESTDIR)$(pkgdatadir)/license.html
	$(INSTALL_SCRIPT) $(top_builddir)/config/icu-config $(DESTDIR)$(bindir)/icu-config
	$(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc
	$(INSTALL_DATA) $(top_builddir)/config/pkgdata.inc $(DESTDIR)$(pkglibdir)/pkgdata.inc
#	@echo icuinfo.xml is built after make check.
#	-$(INSTALL_DATA) $(top_builddir)/config/icuinfo.xml $(DESTDIR)$(pkglibdir)/icuinfo.xml
	cd $(DESTDIR)$(pkglibdir)/..; \
	    $(RM) current && ln -s $(VERSION) current; \
	    $(RM) Makefile.inc && ln -s current/Makefile.inc Makefile.inc; \
	    $(RM) pkgdata.inc && ln -s current/pkgdata.inc pkgdata.inc

ifeq ($(DOXYGEN),)
install-doc:
else
install-doc: doc
	$(RM) -r $(DESTDIR)$(docdir)/$(docsubdir)
	$(MKINSTALLDIRS) $(DESTDIR)$(docdir)/$(docsubdir)
	$(INSTALL_DATA) $(docfiles) $(DESTDIR)$(docdir)/$(docsubdir)

endif

$(DESTDIR)$(pkglibdir)/%: $(top_srcdir)/../data/%
	$(INSTALL_DATA) $< $@

# Build the tests, but don't run them.
tests: all
	$(MAKE) -C $(top_builddir)/test

clean-local:
	test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
	-$(RMV) "test-*.xml"
	-$(RMV) "perf-*.xml"
	-$(RMV) $(ALL_PKGCONFIG_FILES) $(top_builddir)/config/icuinfo.xml
	$(RMV) Doxyfile doc $(DOCZIP)

distclean-local: clean-local
	$(RMV) $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config $(top_builddir)/config/icu.pc $(ALL_PKGCONFIG_FILES)
	$(RMV) config.cache config.log config.status $(top_builddir)/config/icucross.mk $(top_builddir)/config/icucross.inc autom4te.cache uconfig.h.prepend
	$(RMV) Makefile config/Makefile icudefs.mk $(LIBDIR) $(BINDIR)
	-$(RMV) dist

check-local: xcheck-local
	-$(RMV) test-local.xml

xcheck-local: $(top_builddir)/config/icu-config $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc
	@echo verifying that icu-config --selfcheck can operate
	@test "passed" = "$(shell $(top_builddir)/config/icu-config --selfcheck 2>&1)" || (echo "FAIL: icu-config could not run properly." ; exit 1)
	@echo verifying that $(MAKE) -f Makefile.inc selfcheck can operate
	@test "passed" = "$(shell $(MAKE) --no-print-directory -f $(top_builddir)/config/Makefile.inc SELFCHECK=1 selfcheck)" || (echo "FAIL: Makefile.inc could not run properly." ; exit 1 )
	@echo "PASS: config selfcheck OK"

#$(srcdir)/configure : $(srcdir)/configure.ac $(top_srcdir)/aclocal.m4
#	cd $(srcdir) && aclocal && $(AUTOCONF)

icudefs.mk: $(srcdir)/icudefs.mk.in  $(top_builddir)/config.status
	cd $(top_builddir) \
		&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

config/icucross.mk: $(top_builddir)/icudefs.mk  $(top_builddir)/Makefile
	@echo rebuilding $@
	@(echo "CROSS_ICU_VERSION=$(VERSION)" ;\
	  echo "TOOLEXEEXT=$(EXEEXT)" \
	   ) > $@
	@(echo 'TOOLBINDIR=$$(cross_buildroot)/bin' ;\
	  echo 'TOOLLIBDIR=$$(cross_buildroot)/lib' ;\
	  echo "INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(TOOLLIBDIR):$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$$$'"$(LDLIBRARYPATH_ENVVAR)" ;\
	  echo "PKGDATA_INVOKE=$(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)"'$$(cross_buildroot)/stubdata:$$(cross_buildroot)/tools/ctestfw:$$(TOOLLIBDIR):$$$$'"$(LDLIBRARYPATH_ENVVAR) " ;\
	  echo ) >> $@

config/icucross.inc: $(top_builddir)/icudefs.mk  $(top_builddir)/Makefile @platform_make_fragment@
	@echo rebuilding $@
	@(grep '^CURR_FULL_DIR' $(top_builddir)/icudefs.mk ; \
	  grep '^CURR_FULL_DIR' @platform_make_fragment@ || echo ""; \
	   ) > $@

config/icu.pc: $(srcdir)/config/icu.pc.in
	cd $(top_builddir) \
	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

config/icu-uc.pc: config/icu.pc Makefile icudefs.mk
	@cat config/icu.pc > $@
	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Common and Data libraries" >> $@
	@echo "Name: $(PACKAGE)-uc" >> $@
	@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" >> $@
	@echo "Libs.private:" '$${baselibs}' >> $@
	@echo $@ updated.

config/icu-i18n.pc: config/icu.pc Makefile icudefs.mk
	@cat config/icu.pc > $@
	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Internationalization library" >> $@
	@echo "Name: $(PACKAGE)-i18n" >> $@
	@echo "Requires: icu-uc" >> $@
	@echo "Libs:" "${ICULIBS_I18N}" >> $@
	@echo $@ updated.

config/icu-io.pc: config/icu.pc Makefile icudefs.mk
	@cat config/icu.pc > $@
	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Stream and I/O Library" >> $@
	@echo "Name: $(PACKAGE)-io" >> $@
	@echo "Requires: icu-i18n" >> $@
	@echo "Libs:" "${ICULIBS_IO}" >> $@
	@echo $@ updated.

config/icu-le.pc: config/icu.pc Makefile icudefs.mk
	@cat config/icu.pc > $@
	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Layout library" >> $@
	@echo "Name: $(PACKAGE)-le" >> $@
	@echo "Requires: icu-uc" >> $@
	@echo "Libs:" "${ICULIBS_LE}" >> $@
	@echo $@ updated.

config/icu-lx.pc: config/icu.pc Makefile icudefs.mk
	@cat config/icu.pc > $@
	@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Paragraph Layout library" >> $@
	@echo "Name: $(PACKAGE)-lx" >> $@
	@echo "Requires: icu-le" >> $@
	@echo "Libs:" "${ICULIBS_LX}" >> $@
	@echo $@ updated.


Makefile: $(srcdir)/Makefile.in icudefs.mk $(top_builddir)/config.status
	cd $(top_builddir) \
		&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

$(top_builddir)/config/Makefile.inc: $(srcdir)/config/Makefile.inc.in  $(top_builddir)/config.status
	cd $(top_builddir) \
		&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

$(top_builddir)/config/pkgdata.inc: icudefs.mk $(top_builddir)/config/pkgdataMakefile
	cd $(top_builddir)/config; \
		$(MAKE) -f pkgdataMakefile

$(top_builddir)/config/pkgdataMakefile:
	cd $(top_builddir) \
		&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

$(top_builddir)/config/icu-config: $(top_builddir)/Makefile $(top_srcdir)/config/icu-config-top $(top_srcdir)/config/icu-config-bottom $(top_builddir)/config/Makefile.inc @platform_make_fragment@ $(top_srcdir)/config/make2sh.sed
	-$(RMV) $@
	$(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@
	chmod u+w $@
	@echo "# Following from @platform_make_fragment@" >> $@
	LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
	LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
	cat $(top_srcdir)/config/icu-config-bottom >> $@
	echo "# Rebuilt on "`date` >> $@
	chmod u-w $@

config.status: $(srcdir)/configure $(srcdir)/common/unicode/uvernum.h
	@echo
	@echo
	@echo "*** config.status has become stale ***"
	@echo "   'configure' and/or 'uvernum.h' have changed, please"
	@echo "  do 'runConfigureICU' (or 'configure') again, as per"
	@echo "  the readme.html."
	@echo
	@echo
	exit 1


install-manx: $(MANX_FILES)
	$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
	$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)

config/%.$(SECTION): $(srcdir)/config/%.$(SECTION).in
	cd $(top_builddir) \
	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

icu4j-data-install icu4j-data: all tests
	@echo ICU4J_ROOT=$(ICU4J_ROOT)
	@$(MAKE) -C test/testdata $@
	@$(MAKE) -C data $@

# For updating Windows makefiles

WINDOWS_UPDATEFILES=$(srcdir)/data/makedata.mak $(shell find $(srcdir) -name '*.vcproj' -o -name '*.vcxproj')

WINDOWS_UPDATEFILES_SED=config/windows-update.sed

update-windows-makefiles: config.status
	@echo Updating Windows Makefiles for ICU $(VERSION)
	CONFIG_FILES=$(WINDOWS_UPDATEFILES_SED) CONFIG_HEADERS= $(SHELL) ./config.status
	@for file in $(WINDOWS_UPDATEFILES); do \
	  echo "Updating $$file"; \
	  mv "$${file}" "$${file}.bak" && \
	  sed -f $(WINDOWS_UPDATEFILES_SED) < "$${file}.bak" > "$${file}" && \
	  rm "$${file}.bak"; \
	done;
	$(RMV) $(WINDOWS_UPDATEFILES_SED)
	@echo Please check over the changes carefully before checking them in.

# For building a source distribution.
distcheck dist-local:
	$(MAKE) -C . -f $(top_srcdir)/config/dist.mk srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" $@

ifeq ($(DESTDIR),)
releaseDist:
	@echo "Please provide DESTDIR when calling the target releaseDist."
else
releaseDist: install
	@echo -n "ICU Version: " > $(DESTDIR)/readme.txt
	@echo `./config/icu-config --noverify --version` >> $(DESTDIR)/readme.txt
	@echo -n "HOST: " >> $(DESTDIR)/readme.txt
	@echo `./config/icu-config --noverify --host` >> $(DESTDIR)/readme.txt
	@echo -n "CC Compiler: " >> $(DESTDIR)/readme.txt
	@echo `./config/icu-config --noverify --cc` >> $(DESTDIR)/readme.txt
	@echo -n "CXX Compiler: " >> $(DESTDIR)/readme.txt
	@echo `./config/icu-config --noverify --cxx` >> $(DESTDIR)/readme.txt
endif

check-installed-icu: install
	@echo "Testing ICU installed in $(prefix)"
	$(INSTALLED_INVOKE) $(bindir)/icuinfo$(EXEEXT)
	$(INSTALLED_INVOKE) $(bindir)/uconv$(EXEEXT) -V
	$(INSTALLED_INVOKE) $(bindir)/genrb$(EXEEXT) -V
	$(INSTALLED_INVOKE) $(bindir)/gencnval$(EXEEXT) -h
	@echo INSTALLED ICU IN "$(prefix)" OK!