###############################################################
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#  
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#  
###############################################################



# this file describes all the external libraries
# depending on the configure options these may be taken from the system,
# or the internal/bundled copy may be built.

# for every external, a function gb_LinkTarget_use__FOO is defined,
# once for the system case, once for the internal case.

# in the system case, no libraries should be registered, but the target-local
# variable LIBS should be set to FOO_LIBS, and INCLUDES to FOO_CFLAGS.


ifeq ($(SYSTEM_ZLIB),YES)

define gb_LinkTarget__use_zlib
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_ZLIB \
)
$(call gb_LinkTarget_add_libs,$(1),-lz)
endef

else # !SYSTEM_ZLIB

$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
	zlib \
))

define gb_LinkTarget__use_zlib
$(call gb_LinkTarget_add_linked_static_libs,$(1),\
	zlib \
)
endef

endif # SYSTEM_ZLIB


ifeq ($(SYSTEM_JPEG),YES)

define gb_LinkTarget__use_jpeg
$(call gb_LinkTarget_add_libs,$(1),-ljpeg)
$(call gb_LinkTarget_set_ldflags,$(1),\
	$$(filter-out -L/usr/lib/jvm%,$$(T_LDFLAGS)) \
)
ifeq ($(OS),FREEBSD)
# JDK jpeg library on FreeBSD lives under ${JAVA_HOME}/jre/lib/${ARCH}/
$(call gb_LinkTarget_set_ldflags,$(1),\
	$$(filter-out -L$$(JAVA_HOME)/jre/lib/%,$$(T_LDFLAGS)) \
)
endif
endef

else # !SYSTEM_JPEG

$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
	jpeglib \
))

define gb_LinkTarget__use_jpeg
$(call gb_LinkTarget_add_linked_static_libs,$(1),\
	jpeglib \
)
endef

endif # SYSTEM_JPEG


ifeq ($(SYSTEM_EXPAT),YES)

define gb_LinkTarget__use_expat
$(if $(2),,$(error gb_LinkTarget__use_expat needs additional parameter))

$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_EXPAT \
)

$(call gb_LinkTarget_add_libs,$(1),-lexpat)
endef

else # !SYSTEM_EXPAT

$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
	ascii_expat_xmlparse \
	expat_xmlparse \
	expat_xmltok \
))

define gb_LinkTarget__use_expat
$(if $(2),,$(error gb_LinkTarget__use_expat needs additional parameter))

$(if $(filter-out ascii_expat_xmlparse,$(2)),\
	$(call gb_LinkTarget_add_defs,$(1),\
		-DXML_UNICODE \
))

$(call gb_LinkTarget_add_linked_static_libs,$(1),\
	$(2) \
	expat_xmltok \
)
endef

endif # SYSTEM_EXPAT

# now define 2 wrappers that select which internal static library to use...
define gb_LinkTarget__use_expat_utf8
$(call gb_LinkTarget__use_expat,$(1),ascii_expat_xmlparse)
endef

define gb_LinkTarget__use_expat_utf16
$(call gb_LinkTarget__use_expat,$(1),expat_xmlparse)
endef


ifeq ($(SYSTEM_LIBXML),YES)

define gb_LinkTarget__use_libxml2
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_LIBXML \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(LIBXML_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(LIBXML_LIBS))
endef

else # !SYSTEM_LIBXML

$(eval $(call gb_Helper_register_libraries,PLAINLIBS_URE, \
	xml2 \
))

define gb_LinkTarget__use_libxml2
$(call gb_LinkTarget_add_linked_libs,$(1),\
	xml2 \
)
endef

endif # SYSTEM_LIBXML


ifeq ($(SYSTEM_LIBXSLT),YES)

define gb_LinkTarget__use_libxslt
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(LIBXSLT_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(LIBXSLT_LIBS))
endef

else # !SYSTEM_LIBXSLT

$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \
	xslt \
))

define gb_LinkTarget__use_libxslt
$(call gb_LinkTarget_add_linked_libs,$(1),\
	xslt \
)
endef

endif # SYSTEM_LIBXSLT


ifeq ($(SYSTEM_REDLAND),YES)

define gb_LinkTarget__use_librdf
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_REDLAND \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(REDLAND_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(REDLAND_LIBS))
endef

else # !SYSTEM_REDLAND

$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \
	rdf \
))

define gb_LinkTarget__use_librdf
$(call gb_LinkTarget_add_linked_libs,$(1),\
	rdf \
)
endef

endif # SYSTEM_REDLAND


ifeq ($(SYSTEM_CAIRO),YES)

# FREETYPE_CLAGS from environment if ENABLE_CAIRO is used
define gb_LinkTarget__use_cairo
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(FREETYPE_CFLAGS) \
	$(CAIRO_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(CAIRO_LIBS))
endef

else # !SYSTEM_CAIRO

$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \
	cairo \
))
ifneq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \
	pixman-1 \
))
endif # WNT

define gb_LinkTarget__use_cairo
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	-I$(OUTDIR)/inc/cairo \
	$(FREETYPE_CFLAGS) \
)
$(call gb_LinkTarget_add_linked_libs,$(1),\
	cairo \
)
ifneq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),\
	pixman-1 \
)
endif
endef

endif # SYSTEM_CAIRO


ifeq ($(SYSTEM_GRAPHITE),YES)

#check for building with stlport, but graphite was not built with stlport
define gb_LinkTarget__use_graphite
ifneq ($(USE_SYSTEM_STL),YES)
$(call gb_LinkTarget_add_defs,$(1),\
	-DADAPT_EXT_STL \
)
endif
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(GRAPHITE_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(GRAPHITE_LIBS))
endef

else # !SYSTEM_GRAPHITE

$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
	graphite \
))
define gb_LinkTarget__use_graphite
$(call gb_LinkTarget_add_linked_static_libs,$(1),\
	graphite \
)
endef

endif # SYSTEM_GRAPHITE


ifeq ($(SYSTEM_ICU),YES)

define gb_LinkTarget__use_icudata
$(call gb_LinkTarget_add_libs,$(1),-licudata)
endef
define gb_LinkTarget__use_icui18n
$(call gb_LinkTarget_add_libs,$(1),-licui18n)
endef
define gb_LinkTarget__use_icule
$(call gb_LinkTarget_add_libs,$(1),-licule)
endef
define gb_LinkTarget__use_icuuc
$(call gb_LinkTarget_add_libs,$(1),-licuuc)
endef

else # !SYSTEM_ICU

define gb_LinkTarget__use_icudata
ifeq ($(OS)$(COM),WNTMSC)
$(call gb_LinkTarget_add_libs,$(1),icudata.lib)
else ifeq ($(OS)$(COM),WNTGCC)
$(call gb_LinkTarget_add_libs,$(1),-licudt40)
else ifeq ($(OS),OS2)
$(call gb_LinkTarget_add_libs,$(1),-licudt)
else
$(call gb_LinkTarget_add_libs,$(1),-licudata)
endif
endef

define gb_LinkTarget__use_icui18n
ifeq ($(OS)$(COM),WNTMSC)
$(call gb_LinkTarget_add_libs,$(1),icuin.lib)
else ifeq ($(OS)$(COM),WNTGCC)
$(call gb_LinkTarget_add_libs,$(1),-licuin40)
else ifeq ($(OS),OS2)
$(call gb_LinkTarget_add_libs,$(1),-licuin)
else
$(call gb_LinkTarget_add_libs,$(1),-licui18n)
endif
endef

define gb_LinkTarget__use_icule
ifeq ($(OS)$(COM),WNTMSC)
$(call gb_LinkTarget_add_libs,$(1),icule.lib)
else ifeq ($(OS)$(COM),WNTGCC)
$(call gb_LinkTarget_add_libs,$(1),-licule40)
else
$(call gb_LinkTarget_add_libs,$(1),-licule)
endif
endef

define gb_LinkTarget__use_icuuc
ifeq ($(OS)$(COM),WNTMSC)
$(call gb_LinkTarget_add_libs,$(1),icuuc.lib)
else ifeq ($(OS)$(COM),WNTGCC)
$(call gb_LinkTarget_add_libs,$(1),-licuuc40)
else
$(call gb_LinkTarget_add_libs,$(1),-licuuc)
endif
endef

endif # SYSTEM_ICU


ifeq ($(SYSTEM_OPENSSL),YES)

define gb_LinkTarget__use_openssl
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(OPENSSL_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(OPENSSL_LIBS))
endef

else # !SYSTEM_OPENSSL

ifeq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \
	crypto \
	ssl \
))
else
$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
	crypto \
	ssl \
))
endif

define gb_LinkTarget__use_openssl
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),\
	crypto \
	ssl \
)
else
$(call gb_LinkTarget_add_linked_static_libs,$(1),\
	crypto \
	ssl \
)
ifeq ($(OS),SOLARIS)
$(call gb_LinkTarget_add_libs,$(1),\
	-lnsl \
	-lsocket \
)
endif
endif
endef

endif # SYSTEM_OPENSSL


ifeq ($(SYSTEM_APR),YES)

define gb_LinkTarget__use_apr
$(call gb_LinkTarget_add_defs,$(1),\
		-DSYSTEM_APR \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(APR_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(APR_LIBS))
endef

else # !SYSTEM_APR

ifeq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,libapr-1))
else
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,apr-1))
endif

define gb_LinkTarget__use_apr
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	-I$(OUTDIR)/inc/apr \
)
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),libapr-1)
else
$(call gb_LinkTarget_add_linked_libs,$(1),apr-1)
endif
endef

endif # SYSTEM_APR


ifeq ($(SYSTEM_APR_UTIL),YES)

define gb_LinkTarget__use_apr_util
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_APR_UTIL \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(APR_UTIL_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(APR_UTIL_LIBS))
endef

else # !SYSTEM_APR_UTIL

# on Windows apr-util is registered by ext_libraries/Repository.mk
ifneq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO,aprutil-1))
endif

define gb_LinkTarget__use_apr_util
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	-I$(OUTDIR)/inc/apr-util \
)
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),apr-util)
else
$(call gb_LinkTarget_add_linked_libs,$(1),aprutil-1)
endif
endef

endif # SYSTEM_APR_UTIL


ifeq ($(SYSTEM_SERF),YES)

define gb_LinkTarget__use_serf
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_SERF \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(SERF_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(SERF_LIBS))
endef

else # !SYSTEM_SERF

# on Windows serf is registered by ext_libraries/Repository.mk
ifneq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO,serf-1))
endif

define gb_LinkTarget__use_serf
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	-I$(OUTDIR)/inc/serf \
)
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),serf)
else
$(call gb_LinkTarget_add_linked_libs,$(1),serf-1)
endif
endef

endif # SYSTEM_SERF


ifeq ($(SYSTEM_CURL),YES)

define gb_LinkTarget__use_curl
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_CURL \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(CURL_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(CURL_LIBS))
endef

else # !SYSTEM_CURL

ifeq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,libcurl))
else
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,curl))
endif

define gb_LinkTarget__use_curl
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),libcurl)
else
$(call gb_LinkTarget_add_linked_libs,$(1),curl)
endif
endef

endif # SYSTEM_CURL


ifeq ($(SYSTEM_COINMP),YES)

define gb_LinkTarget__use_coinmp
$(call gb_LinkTarget_add_defs,$(1),\
	-DSYSTEM_COINMP \
)
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(COINMP_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(COINMP_LIBS))
endef

else # !SYSTEM_COINMP

$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE,CoinMP))
ifneq ($(OS),WNT)
$(eval $(call gb_Helper_register_libraries,PLAINLIBS_NONE, \
	CoinUtils \
	Clp \
	Cbc \
	Osi \
	OsiClp \
	Cgl \
	CbcSolver \
))
endif

define gb_LinkTarget__use_coinmp
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	-I$(OUTDIR)/inc/coinmp \
)
$(call gb_LinkTarget_add_linked_libs,$(1),CoinMP)
ifneq ($(OS),WNT)
ifneq ($(OS),OS2)
$(call gb_LinkTarget_add_linked_libs,$(1),\
	CoinUtils \
	Clp \
	Cbc \
	Osi \
	OsiClp \
	Cgl \
	CbcSolver \
)
endif
endif
endef

endif # SYSTEM_COINMP


ifeq ($(SYSTEM_HYPH),YES)

define gb_LinkTarget__use_hyphen
$(call gb_LinkTarget_add_defs,$(1),\
		-DSYSTEM_HYPH \
)
$(call gb_LinkTarget_add_libs,$(1),$(HYPHEN_LIB))
endef

else # !SYSTEM_HYPH

$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \
		hyphen \
))

define gb_LinkTarget__use_hyphen
$(call gb_LinkTarget_add_linked_static_libs,$(1),\
		hyphen \
)
endef

endif # SYSTEM_HYPH


ifeq ($(SYSTEM_LIBTEXTCAT),YES)

define gb_LinkTarget__use_libtextcat
$(call gb_LinkTarget_add_libs,$(1),-ltextcat)
endef

else # !SYSTEM_LIBTEXTCAT

$(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \
	libtextcat \
	textcat \
))

define gb_LinkTarget__use_libtextcat
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_libs,$(1),libtextcat)
else
$(call gb_LinkTarget_add_linked_libs,$(1),textcat)
endif
endef

endif # SYSTEM_LIBTEXTCAT


ifeq ($(SYSTEM_MYTHES),YES)

define gb_LinkTarget__use_mythes
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	$(MYTHES_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(MYTHES_LIBS))
endef

else # !SYSTEM_MYTHES

ifeq ($(OS),WNT)
$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,libmythes))
else
$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,mythes-1.2))
endif

define gb_LinkTarget__use_mythes
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_linked_static_libs,$(1),libmythes)
else
$(call gb_LinkTarget_add_linked_static_libs,$(1),mythes-1.2)
endif
endef

endif # SYSTEM_MYTHES


ifeq ($(SYSTEM_HUNSPELL),YES)

define gb_LinkTarget__use_hunspell
$(call gb_LinkTarget_set_include,$(1),\
		$$(INCLUDE) \
		$(HUNSPELL_CFLAGS) \
)
$(call gb_LinkTarget_add_libs,$(1),$(HUNSPELL_LIBS))
endef

else # !SYSTEM_HUNSPELL

ifeq ($(GUI),WNT)
$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,libhunspell))
else ifeq ($(GUI),OS2)
$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,hunspell))
else
$(eval $(call gb_Helper_register_static_libraries,PLAINLIBS,hunspell-1.3))
endif

define gb_LinkTarget__use_hunspell
$(call gb_LinkTarget_set_include,$(1),\
	$$(INCLUDE) \
	-I$(OUTDIR)/inc/hunspell \
)
$(call gb_LinkTarget_add_defs,$(1),\
	-DHUNSPELL_STATIC
)
ifeq ($(GUI),WNT)
$(call gb_LinkTarget_add_linked_static_libs,$(1),libhunspell)
else ifeq ($(GUI),OS2)
$(call gb_LinkTarget_add_linked_static_libs,$(1),hunspell)
else
$(call gb_LinkTarget_add_linked_static_libs,$(1),hunspell-1.3)
endif
endef

endif # SYSTEM_HUNSPELL



ifeq ($(SYSTEM_PYTHON),YES)

define gb_LinkTarget__use_python
$(call gb_LinkTarget_set_include,$(1),\
        $$(INCLUDE) \
        $(filter -I%,$(PYTHON_CFLAGS)) \
)
$(call gb_LinkTarget_add_defs,$(1),\
        $(filter-out -I%,$(PYTHON_CFLAGS)) \
)
$(call gb_LinkTarget_add_libs,$(1),\
        $(PYTHON_LIBS) \
)
endef

else # !SYSTEM_PYTHON

include $(SRCDIR)/python/pyversion.mk

define gb_LinkTarget__use_python
$(call gb_LinkTarget_set_include,$(1),\
        $$(INCLUDE) \
        -I$(OUTDIR)/inc/python \
)
$(call gb_LinkTarget_add_libs,$(1),$(PYTHONLIB))
endef

endif # SYSTEM_PYTHON

# vim: set noet sw=4 ts=4:
