Skip to content

Commit 199bc82

Browse files
earlchew-awsmarkusicu
authored andcommitted
ICU-22610 Use Requires.private and Libs.private
To prevent overlinking when publishing shared libraries, specify internal dependencies using Requires.private and Libs.private. Use Libs.private in icu-uc.pc for libicudata.so, and Requires.private in icu-i18n.pc, icu-io.pc, and icu-lx.pc, so that ICU internal dependencies will not be bound into clients. The resulting *.pc files will produce the following output for icu-i18n and icu-lx, provided pkgconf has commit 78d53ea0 (2.2.0 or later) which de-duplicates multiple -L options: commit 78d53ea012dfbaf397bf8e6907efac5b51abac56 Author: Kai Pastor <dg0yt@darc.de> Date: Fri Feb 23 15:18:08 2024 +0100 Revise serials, traversal, flattening ./configure --enable-shared ... # # icu-i18n # % pkgconf --libs icu-i18n -L/opt/local/lib -licui18n % pkgconf --libs --static icu-i18n -L/opt/local/lib -licui18n -licuuc -licudata -lpthread -lm # # icu-lx # % pkgconf --libs icu-lx -L/opt/local/lib -liculx % pkgconf --libs --static icu-lx -L/opt/local/lib -liculx -L/usr/lib/x86_64-linux-gnu -licu-le-hb -lharfbuzz -lm -licuuc -licudata -lpthread -lm ./configure --disable-shared --enable-static ... # # icu-i18n # % pkgconf --libs icu-i18n -L/opt/local/lib -licui18n -licuuc -licudata -lpthread -lm % pkgconf --libs --static icu-i18n -L/opt/local/lib -licui18n -licuuc -licudata -lpthread -lm # # icu-lx # % pkgconf --libs icu-lx -L/opt/local/lib -liculx -L/usr/lib/x86_64-linux-gnu -licu-le-hb % pkgconf --libs --static icu-lx -L/opt/local/lib -liculx -L/usr/lib/x86_64-linux-gnu -licu-le-hb -lharfbuzz -licuuc -licudata -lpthread -lm
1 parent 2f348f4 commit 199bc82

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

icu4c/source/Makefile.in

+25-5
Original file line numberDiff line numberDiff line change
@@ -275,24 +275,36 @@ config/icu-uc.pc: config/icu.pc Makefile icudefs.mk
275275
@cat config/icu.pc > $@
276276
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Common and Data libraries" >> $@
277277
@echo "Name: $(PACKAGE)-uc" >> $@
278-
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" >> $@
279-
@echo "Libs.private:" '$${baselibs}' >> $@
278+
ifeq ($(ENABLE_SHARED),)
279+
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" "${ICULIBS_DT}" '$${baselibs}' >> $@
280+
else
281+
@echo "Libs:" '-L$${libdir}' "${ICULIBS_UC}" >> $@
282+
@echo "Libs.private:" "${ICULIBS_DT}" '$${baselibs}' >> $@
283+
endif
280284
@echo $@ updated.
281285

282286
config/icu-i18n.pc: config/icu.pc Makefile icudefs.mk
283287
@cat config/icu.pc > $@
284288
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Internationalization library" >> $@
285289
@echo "Name: $(PACKAGE)-i18n" >> $@
290+
ifeq ($(ENABLE_SHARED),)
286291
@echo "Requires: icu-uc" >> $@
287-
@echo "Libs:" "${ICULIBS_I18N}" >> $@
292+
else
293+
@echo "Requires.private: icu-uc" >> $@
294+
endif
295+
@echo "Libs:" '-L$${libdir}' "${ICULIBS_I18N}" >> $@
288296
@echo $@ updated.
289297

290298
config/icu-io.pc: config/icu.pc Makefile icudefs.mk
291299
@cat config/icu.pc > $@
292300
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Stream and I/O Library" >> $@
293301
@echo "Name: $(PACKAGE)-io" >> $@
302+
ifeq ($(ENABLE_SHARED),)
294303
@echo "Requires: icu-i18n" >> $@
295-
@echo "Libs:" "${ICULIBS_IO}" >> $@
304+
else
305+
@echo "Requires.private: icu-i18n" >> $@
306+
endif
307+
@echo "Libs:" '-L$${libdir}' "${ICULIBS_IO}" >> $@
296308
@echo $@ updated.
297309

298310
ICULEHB_LIBS=@ICULEHB_LIBS@
@@ -306,12 +318,20 @@ config/icu-lx.pc: config/icu.pc Makefile icudefs.mk
306318
@cat config/icu.pc > $@
307319
@echo "Description: $(PACKAGE_ICU_DESCRIPTION): Paragraph Layout library $(USING_HB)" >> $@
308320
@echo "Name: $(PACKAGE)-lx" >> $@
321+
ifeq ($(ENABLE_SHARED),)
309322
ifneq ($(ICULEHB_LIBS),)
310323
@echo "Requires: icu-le-hb icu-uc" >> $@
311324
else
312325
@echo "Requires: icu-le" >> $@
313326
endif
314-
@echo "Libs:" "${ICULIBS_LX}" >> $@
327+
else
328+
ifneq ($(ICULEHB_LIBS),)
329+
@echo "Requires.private: icu-le-hb icu-uc" >> $@
330+
else
331+
@echo "Requires.private: icu-le" >> $@
332+
endif
333+
endif
334+
@echo "Libs:" '-L$${libdir}' "${ICULIBS_LX}" >> $@
315335
@echo $@ updated.
316336

317337

0 commit comments

Comments
 (0)