1############################################################### 2# 3# Licensed to the Apache Software Foundation (ASF) under one 4# or more contributor license agreements. See the NOTICE file 5# distributed with this work for additional information 6# regarding copyright ownership. The ASF licenses this file 7# to you under the Apache License, Version 2.0 (the 8# "License"); you may not use this file except in compliance 9# with the License. You may obtain a copy of the License at 10# 11# http://www.apache.org/licenses/LICENSE-2.0 12# 13# Unless required by applicable law or agreed to in writing, 14# software distributed under the License is distributed on an 15# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16# KIND, either express or implied. See the License for the 17# specific language governing permissions and limitations 18# under the License. 19# 20############################################################### 21 22 23 24# this file describes all the external libraries 25# depending on the configure options these may be taken from the system, 26# or the internal/bundled copy may be built. 27 28# for every external, a function gb_LinkTarget_use__FOO is defined, 29# once for the system case, once for the internal case. 30 31# in the system case, no libraries should be registered, but the target-local 32# variable LIBS should be set to FOO_LIBS, and INCLUDES to FOO_CFLAGS. 33 34 35ifeq ($(SYSTEM_ZLIB),YES) 36 37define gb_LinkTarget__use_zlib 38$(call gb_LinkTarget_add_defs,$(1),\ 39 -DSYSTEM_ZLIB \ 40) 41$(call gb_LinkTarget_add_libs,$(1),-lz) 42endef 43 44else # !SYSTEM_ZLIB 45 46$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \ 47 zlib \ 48)) 49 50define gb_LinkTarget__use_zlib 51$(call gb_LinkTarget_add_linked_static_libs,$(1),\ 52 zlib \ 53) 54endef 55 56endif # SYSTEM_ZLIB 57 58 59ifeq ($(SYSTEM_JPEG),YES) 60 61define gb_LinkTarget__use_jpeg 62$(call gb_LinkTarget_add_libs,$(1),-ljpeg) 63$(call gb_LinkTarget_set_ldflags,$(1),\ 64 $$(filter-out -L/usr/lib/jvm%,$$(T_LDFLAGS)) \ 65) 66ifeq ($(OS),FREEBSD) 67# JDK jpeg library on FreeBSD lives under ${JAVA_HOME}/jre/lib/${ARCH}/ 68$(call gb_LinkTarget_set_ldflags,$(1),\ 69 $$(filter-out -L$$(JAVA_HOME)/jre/lib/%,$$(T_LDFLAGS)) \ 70) 71endif 72endef 73 74else # !SYSTEM_JPEG 75 76$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \ 77 jpeglib \ 78)) 79 80define gb_LinkTarget__use_jpeg 81$(call gb_LinkTarget_add_linked_static_libs,$(1),\ 82 jpeglib \ 83) 84endef 85 86endif # SYSTEM_JPEG 87 88 89ifeq ($(SYSTEM_EXPAT),YES) 90 91define gb_LinkTarget__use_expat 92$(if $(2),,$(error gb_LinkTarget__use_expat needs additional parameter)) 93 94$(call gb_LinkTarget_add_defs,$(1),\ 95 -DSYSTEM_EXPAT \ 96) 97 98$(call gb_LinkTarget_add_libs,$(1),-lexpat) 99endef 100 101else # !SYSTEM_EXPAT 102 103$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \ 104 ascii_expat_xmlparse \ 105 expat_xmlparse \ 106 expat_xmltok \ 107)) 108 109define gb_LinkTarget__use_expat 110$(if $(2),,$(error gb_LinkTarget__use_expat needs additional parameter)) 111 112$(if $(filter-out ascii_expat_xmlparse,$(2)),\ 113 $(call gb_LinkTarget_add_defs,$(1),\ 114 -DXML_UNICODE \ 115)) 116 117$(call gb_LinkTarget_add_linked_static_libs,$(1),\ 118 $(2) \ 119 expat_xmltok \ 120) 121endef 122 123endif # SYSTEM_EXPAT 124 125# now define 2 wrappers that select which internal static library to use... 126define gb_LinkTarget__use_expat_utf8 127$(call gb_LinkTarget__use_expat,$(1),ascii_expat_xmlparse) 128endef 129 130define gb_LinkTarget__use_expat_utf16 131$(call gb_LinkTarget__use_expat,$(1),expat_xmlparse) 132endef 133 134 135ifeq ($(SYSTEM_LIBXML),YES) 136 137define gb_LinkTarget__use_libxml2 138$(call gb_LinkTarget_add_defs,$(1),\ 139 -DSYSTEM_LIBXML \ 140) 141$(call gb_LinkTarget_set_include,$(1),\ 142 $$(INCLUDE) \ 143 $(LIBXML_CFLAGS) \ 144) 145 146# Some system libxml2 builds report -licuuc in their link flags because 147# libxml2 itself was built against ICU. That ICU dependency is already 148# satisfied inside libxml2's own dylib; forwarding -licuuc to consumers 149# makes them link this tree's bundled (OOO-layer) ICU directly, which 150# breaks URE-layer consumers on macOS (see macosx-change-install-names.pl, 151# which has no rule for a URE library depending on an OOO one). 152$(call gb_LinkTarget_add_libs,$(1),$(filter-out -licuuc,$(LIBXML_LIBS))) 153endef 154 155else # !SYSTEM_LIBXML 156 157ifeq ($(OS),MACOSX) 158 159# Bundled libxml2 builds as a static archive on macOS (main/libxml2/makefile.mk), 160# not a dylib, so it can't be a PLAINLIB like the else-branch below. A static 161# archive carries no transitive deps, so its own libxml-2.0.pc's 162# "Libs.private: -lpthread -liconv -lm" must be added explicitly. 163# 164# If the user already has prebuilt static libs under /usr/local/lib, prefer 165# those over the tree's own build (Apple's SDK ships no static libiconv.a, 166# only a .tbd stub for the dylib, so a /usr/local one is additive there). 167gb_libxml2_static_lib := $(if $(wildcard /usr/local/lib/libxml2.a),/usr/local/lib/libxml2.a,$(OUTDIR)/lib/libxml2.a) 168gb_libiconv_static_lib := $(if $(wildcard /usr/local/lib/libiconv.a),/usr/local/lib/libiconv.a,-liconv) 169 170define gb_LinkTarget__use_libxml2 171$(call gb_LinkTarget_add_libs,$(1),\ 172 $(gb_libxml2_static_lib) \ 173 -lpthread $(gb_libiconv_static_lib) -lm \ 174) 175endef 176 177else # !MACOSX 178 179$(eval $(call gb_Helper_register_libraries,PLAINLIBS_URE, \ 180 xml2 \ 181)) 182 183define gb_LinkTarget__use_libxml2 184$(call gb_LinkTarget_add_linked_libs,$(1),\ 185 xml2 \ 186) 187endef 188 189endif # MACOSX 190 191endif # SYSTEM_LIBXML 192 193 194ifeq ($(SYSTEM_LIBXSLT),YES) 195 196define gb_LinkTarget__use_libxslt 197$(call gb_LinkTarget_set_include,$(1),\ 198 $$(INCLUDE) \ 199 $(LIBXSLT_CFLAGS) \ 200) 201$(call gb_LinkTarget_add_libs,$(1),$(LIBXSLT_LIBS)) 202endef 203 204else # !SYSTEM_LIBXSLT 205 206ifeq ($(OS),MACOSX) 207 208# Bundled libxslt/libexslt build as static archives on macOS (see 209# main/libxslt/makefile.mk); link by absolute path, same as libxml2 above. 210# Prefer a prebuilt /usr/local/lib copy when the user already has one. 211gb_libxslt_static_lib := $(if $(wildcard /usr/local/lib/libxslt.a),/usr/local/lib/libxslt.a,$(OUTDIR)/lib/libxslt.a) 212gb_libexslt_static_lib := $(if $(wildcard /usr/local/lib/libexslt.a),/usr/local/lib/libexslt.a,$(OUTDIR)/lib/libexslt.a) 213 214define gb_LinkTarget__use_libxslt 215$(call gb_LinkTarget_add_libs,$(1),\ 216 $(gb_libxslt_static_lib) \ 217 $(gb_libexslt_static_lib) \ 218) 219endef 220 221else # !MACOSX 222 223$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ 224 xslt \ 225)) 226 227define gb_LinkTarget__use_libxslt 228$(call gb_LinkTarget_add_linked_libs,$(1),\ 229 xslt \ 230) 231endef 232 233endif # MACOSX 234 235endif # SYSTEM_LIBXSLT 236 237 238ifeq ($(SYSTEM_REDLAND),YES) 239 240define gb_LinkTarget__use_librdf 241$(call gb_LinkTarget_add_defs,$(1),\ 242 -DSYSTEM_REDLAND \ 243) 244$(call gb_LinkTarget_set_include,$(1),\ 245 $$(INCLUDE) \ 246 $(REDLAND_CFLAGS) \ 247) 248$(call gb_LinkTarget_add_libs,$(1),$(REDLAND_LIBS)) 249endef 250 251else # !SYSTEM_REDLAND 252 253$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ 254 rdf \ 255)) 256 257define gb_LinkTarget__use_librdf 258$(call gb_LinkTarget_add_linked_libs,$(1),\ 259 rdf \ 260) 261endef 262 263endif # SYSTEM_REDLAND 264 265 266ifeq ($(SYSTEM_CAIRO),YES) 267 268# FREETYPE_CLAGS from environment if ENABLE_CAIRO is used 269define gb_LinkTarget__use_cairo 270$(call gb_LinkTarget_set_include,$(1),\ 271 $$(INCLUDE) \ 272 $(FREETYPE_CFLAGS) \ 273 $(CAIRO_CFLAGS) \ 274) 275$(call gb_LinkTarget_add_libs,$(1),$(CAIRO_LIBS)) 276endef 277 278else # !SYSTEM_CAIRO 279 280$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ 281 cairo \ 282)) 283ifneq ($(OS),WNT) 284$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ 285 pixman-1 \ 286)) 287endif # WNT 288 289define gb_LinkTarget__use_cairo 290$(call gb_LinkTarget_set_include,$(1),\ 291 $$(INCLUDE) \ 292 -I$(OUTDIR)/inc/cairo \ 293 $(FREETYPE_CFLAGS) \ 294) 295$(call gb_LinkTarget_add_linked_libs,$(1),\ 296 cairo \ 297) 298ifneq ($(OS),WNT) 299$(call gb_LinkTarget_add_linked_libs,$(1),\ 300 pixman-1 \ 301) 302endif 303endef 304 305endif # SYSTEM_CAIRO 306 307 308ifeq ($(SYSTEM_GRAPHITE),YES) 309 310#check for building with stlport, but graphite was not built with stlport 311define gb_LinkTarget__use_graphite 312ifneq ($(USE_SYSTEM_STL),YES) 313$(call gb_LinkTarget_add_defs,$(1),\ 314 -DADAPT_EXT_STL \ 315) 316endif 317$(call gb_LinkTarget_set_include,$(1),\ 318 $$(INCLUDE) \ 319 $(GRAPHITE_CFLAGS) \ 320) 321$(call gb_LinkTarget_add_libs,$(1),$(GRAPHITE_LIBS)) 322endef 323 324else # !SYSTEM_GRAPHITE 325 326$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \ 327 graphite \ 328)) 329define gb_LinkTarget__use_graphite 330$(call gb_LinkTarget_add_linked_static_libs,$(1),\ 331 graphite \ 332) 333endef 334 335endif # SYSTEM_GRAPHITE 336 337 338ifeq ($(SYSTEM_ICU),YES) 339 340define gb_LinkTarget__use_icudata 341$(call gb_LinkTarget_add_libs,$(1),-licudata) 342endef 343define gb_LinkTarget__use_icui18n 344$(call gb_LinkTarget_add_libs,$(1),-licui18n) 345endef 346define gb_LinkTarget__use_icule 347$(call gb_LinkTarget_add_libs,$(1),-licule) 348endef 349define gb_LinkTarget__use_icuuc 350$(call gb_LinkTarget_add_libs,$(1),-licuuc) 351endef 352 353else # !SYSTEM_ICU 354 355define gb_LinkTarget__use_icudata 356ifeq ($(OS)$(COM),WNTMSC) 357$(call gb_LinkTarget_add_libs,$(1),icudata.lib) 358else ifeq ($(OS)$(COM),WNTGCC) 359$(call gb_LinkTarget_add_libs,$(1),-licudt40) 360else ifeq ($(OS),OS2) 361$(call gb_LinkTarget_add_libs,$(1),-licudt) 362else 363$(call gb_LinkTarget_add_libs,$(1),-licudata) 364endif 365endef 366 367define gb_LinkTarget__use_icui18n 368ifeq ($(OS)$(COM),WNTMSC) 369$(call gb_LinkTarget_add_libs,$(1),icuin.lib) 370else ifeq ($(OS)$(COM),WNTGCC) 371$(call gb_LinkTarget_add_libs,$(1),-licuin40) 372else ifeq ($(OS),OS2) 373$(call gb_LinkTarget_add_libs,$(1),-licuin) 374else 375$(call gb_LinkTarget_add_libs,$(1),-licui18n) 376endif 377endef 378 379define gb_LinkTarget__use_icule 380ifeq ($(OS)$(COM),WNTMSC) 381$(call gb_LinkTarget_add_libs,$(1),icule.lib) 382else ifeq ($(OS)$(COM),WNTGCC) 383$(call gb_LinkTarget_add_libs,$(1),-licule40) 384else 385$(call gb_LinkTarget_add_libs,$(1),-licule) 386endif 387endef 388 389define gb_LinkTarget__use_icuuc 390ifeq ($(OS)$(COM),WNTMSC) 391$(call gb_LinkTarget_add_libs,$(1),icuuc.lib) 392else ifeq ($(OS)$(COM),WNTGCC) 393$(call gb_LinkTarget_add_libs,$(1),-licuuc40) 394else 395$(call gb_LinkTarget_add_libs,$(1),-licuuc) 396endif 397endef 398 399endif # SYSTEM_ICU 400 401 402ifeq ($(SYSTEM_OPENSSL),YES) 403 404define gb_LinkTarget__use_openssl 405$(call gb_LinkTarget_set_include,$(1),\ 406 $$(INCLUDE) \ 407 $(OPENSSL_CFLAGS) \ 408) 409$(call gb_LinkTarget_add_libs,$(1),$(OPENSSL_LIBS)) 410endef 411 412else # !SYSTEM_OPENSSL 413 414$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ 415 crypto \ 416 ssl \ 417)) 418 419define gb_LinkTarget__use_openssl 420$(call gb_LinkTarget_add_linked_libs,$(1),\ 421 crypto \ 422 ssl \ 423) 424ifeq ($(OS),SOLARIS) 425$(call gb_LinkTarget_add_libs,$(1),\ 426 -lnsl \ 427 -lsocket \ 428) 429endif 430ifeq ($(OS),LINUX) 431$(call gb_LinkTarget_add_libs,$(1),\ 432 -lpthread \ 433) 434endif 435endef 436 437endif # SYSTEM_OPENSSL 438 439 440ifeq ($(SYSTEM_CURL),YES) 441 442define gb_LinkTarget__use_curl 443$(call gb_LinkTarget_add_defs,$(1),\ 444 -DSYSTEM_CURL \ 445) 446$(call gb_LinkTarget_set_include,$(1),\ 447 $$(INCLUDE) \ 448 $(CURL_CFLAGS) \ 449) 450$(call gb_LinkTarget_add_libs,$(1),$(CURL_LIBS)) 451endef 452 453else # !SYSTEM_CURL 454 455ifeq ($(OS),MACOSX) 456 457# If the user already has a prebuilt static libcurl.a under /usr/local/lib, 458# prefer that copy over the tree's own (dylib) build. 459gb_curl_static_lib := $(wildcard /usr/local/lib/libcurl.a) 460 461else # !MACOSX 462ifeq ($(OS),WNT) 463$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,libcurl)) 464else 465$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,curl)) 466endif 467endif # MACOSX 468 469define gb_LinkTarget__use_curl 470ifeq ($(OS),MACOSX) 471ifneq ($(gb_curl_static_lib),) 472$(call gb_LinkTarget_add_libs,$(1),$(gb_curl_static_lib)) 473else 474$(call gb_LinkTarget_add_linked_libs,$(1),curl) 475endif 476else 477ifeq ($(OS),WNT) 478$(call gb_LinkTarget_add_linked_libs,$(1),libcurl) 479else 480$(call gb_LinkTarget_add_linked_libs,$(1),curl) 481endif 482endif 483endef 484 485endif # SYSTEM_CURL 486 487 488ifeq ($(SYSTEM_COINMP),YES) 489 490define gb_LinkTarget__use_coinmp 491$(call gb_LinkTarget_add_defs,$(1),\ 492 -DSYSTEM_COINMP \ 493) 494$(call gb_LinkTarget_set_include,$(1),\ 495 $$(INCLUDE) \ 496 $(COINMP_CFLAGS) \ 497) 498$(call gb_LinkTarget_add_libs,$(1),$(COINMP_LIBS)) 499endef 500 501else # !SYSTEM_COINMP 502 503$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,CoinMP)) 504ifneq ($(OS),WNT) 505$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE, \ 506 CoinUtils \ 507 Clp \ 508 Cbc \ 509 Osi \ 510 OsiClp \ 511 Cgl \ 512 CbcSolver \ 513)) 514endif 515 516define gb_LinkTarget__use_coinmp 517$(call gb_LinkTarget_set_include,$(1),\ 518 $$(INCLUDE) \ 519 -I$(OUTDIR)/inc/coinmp \ 520) 521$(call gb_LinkTarget_add_linked_libs,$(1),CoinMP) 522ifneq ($(OS),WNT) 523ifneq ($(OS),OS2) 524$(call gb_LinkTarget_add_linked_libs,$(1),\ 525 CoinUtils \ 526 Clp \ 527 Cbc \ 528 Osi \ 529 OsiClp \ 530 Cgl \ 531 CbcSolver \ 532) 533endif 534endif 535endef 536 537endif # SYSTEM_COINMP 538 539 540ifeq ($(SYSTEM_HYPH),YES) 541 542define gb_LinkTarget__use_hyphen 543$(call gb_LinkTarget_add_defs,$(1),\ 544 -DSYSTEM_HYPH \ 545) 546$(call gb_LinkTarget_add_libs,$(1),$(HYPHEN_LIB)) 547endef 548 549else # !SYSTEM_HYPH 550 551$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \ 552 hyphen \ 553)) 554 555define gb_LinkTarget__use_hyphen 556$(call gb_LinkTarget_add_linked_static_libs,$(1),\ 557 hyphen \ 558) 559endef 560 561endif # SYSTEM_HYPH 562 563 564ifeq ($(SYSTEM_LIBTEXTCAT),YES) 565 566define gb_LinkTarget__use_libtextcat 567$(call gb_LinkTarget_add_libs,$(1),-ltextcat) 568endef 569 570else # !SYSTEM_LIBTEXTCAT 571 572$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ 573 libtextcat \ 574 textcat \ 575)) 576 577define gb_LinkTarget__use_libtextcat 578ifeq ($(OS),WNT) 579$(call gb_LinkTarget_add_linked_libs,$(1),libtextcat) 580else 581$(call gb_LinkTarget_add_linked_libs,$(1),textcat) 582endif 583endef 584 585endif # SYSTEM_LIBTEXTCAT 586 587 588ifeq ($(SYSTEM_MYTHES),YES) 589 590define gb_LinkTarget__use_mythes 591$(call gb_LinkTarget_set_include,$(1),\ 592 $$(INCLUDE) \ 593 $(MYTHES_CFLAGS) \ 594) 595$(call gb_LinkTarget_add_libs,$(1),$(MYTHES_LIBS)) 596endef 597 598else # !SYSTEM_MYTHES 599 600ifeq ($(OS),WNT) 601$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,libmythes)) 602else 603$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,mythes-1.2)) 604endif 605 606define gb_LinkTarget__use_mythes 607ifeq ($(OS),WNT) 608$(call gb_LinkTarget_add_linked_static_libs,$(1),libmythes) 609else 610$(call gb_LinkTarget_add_linked_static_libs,$(1),mythes-1.2) 611endif 612endef 613 614endif # SYSTEM_MYTHES 615 616 617ifeq ($(SYSTEM_HUNSPELL),YES) 618 619define gb_LinkTarget__use_hunspell 620$(call gb_LinkTarget_set_include,$(1),\ 621 $$(INCLUDE) \ 622 $(HUNSPELL_CFLAGS) \ 623) 624$(call gb_LinkTarget_add_libs,$(1),$(HUNSPELL_LIBS)) 625endef 626 627else # !SYSTEM_HUNSPELL 628 629ifeq ($(GUI),WNT) 630$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,libhunspell)) 631else ifeq ($(GUI),OS2) 632$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,hunspell)) 633else 634$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,hunspell-1.3)) 635endif 636 637define gb_LinkTarget__use_hunspell 638$(call gb_LinkTarget_set_include,$(1),\ 639 $$(INCLUDE) \ 640 -I$(OUTDIR)/inc/hunspell \ 641) 642$(call gb_LinkTarget_add_defs,$(1),\ 643 -DHUNSPELL_STATIC 644) 645ifeq ($(GUI),WNT) 646$(call gb_LinkTarget_add_linked_static_libs,$(1),libhunspell) 647else ifeq ($(GUI),OS2) 648$(call gb_LinkTarget_add_linked_static_libs,$(1),hunspell) 649else 650$(call gb_LinkTarget_add_linked_static_libs,$(1),hunspell-1.3) 651endif 652endef 653 654endif # SYSTEM_HUNSPELL 655 656 657 658ifeq ($(SYSTEM_PYTHON),YES) 659 660define gb_LinkTarget__use_python 661$(call gb_LinkTarget_set_include,$(1),\ 662 $$(INCLUDE) \ 663 $(filter -I%,$(PYTHON_CFLAGS)) \ 664) 665$(call gb_LinkTarget_add_defs,$(1),\ 666 $(filter-out -I%,$(PYTHON_CFLAGS)) \ 667) 668$(call gb_LinkTarget_add_libs,$(1),\ 669 $(PYTHON_LIBS) \ 670) 671endef 672 673else # !SYSTEM_PYTHON 674 675include $(SRCDIR)/python/pyversion.mk 676 677define gb_LinkTarget__use_python 678$(call gb_LinkTarget_set_include,$(1),\ 679 $$(INCLUDE) \ 680 -I$(OUTDIR)/inc/python \ 681) 682$(call gb_LinkTarget_add_libs,$(1),$(PYTHONLIB)) 683endef 684 685endif # SYSTEM_PYTHON 686 687# vim: set noet sw=4 ts=4: 688