#
#    Copyright (c) 2014-2017 Nest Labs, Inc.
#    All rights reserved.
#
#    Licensed 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.
#

#
#    Description:
#      This file is the GNU automake header for the Nest InetLayer
#      library sources.
#
#      These sources are shared by other SDK makefiles and consequently
#      must be anchored relative to the top build directory.
#

nl_InetLayer_sources                                       = \
    @top_builddir@/src/inet/EndPointBasis.cpp                \
    @top_builddir@/src/inet/IPAddress-StringFuncts.cpp       \
    @top_builddir@/src/inet/IPAddress.cpp                    \
    @top_builddir@/src/inet/IPPrefix.cpp                     \
    @top_builddir@/src/inet/InetInterface.cpp                \
    @top_builddir@/src/inet/InetLayer.cpp                    \
    @top_builddir@/src/inet/InetLayerBasis.cpp               \
    @top_builddir@/src/inet/InetTimer.cpp                    \
    @top_builddir@/src/inet/InetUtils.cpp                    \
    @top_builddir@/src/inet/InetFaultInjection.cpp           \
    $(NULL)

if INET_WANT_ENDPOINT_DNS
nl_InetLayer_sources += @top_builddir@/src/inet/DNSResolver.cpp
endif # INET_WANT_ENDPOINT_DNS

if INET_WANT_ENDPOINT_RAW
nl_InetLayer_sources += @top_builddir@/src/inet/RawEndPoint.cpp
endif # INET_WANT_ENDPOINT_RAW

if INET_WANT_ENDPOINT_TCP
nl_InetLayer_sources += @top_builddir@/src/inet/TCPEndPoint.cpp
endif # INET_WANT_ENDPOINT_TCP

if INET_WANT_ENDPOINT_UDP
nl_InetLayer_sources += @top_builddir@/src/inet/UDPEndPoint.cpp
endif # INET_WANT_ENDPOINT_UDP

if INET_WANT_ENDPOINT_TUN
nl_InetLayer_sources += @top_builddir@/src/inet/TunEndPoint.cpp
endif # INET_WANT_ENDPOINT_TUN

if WEAVE_SYSTEM_CONFIG_USE_SOCKETS
if INET_CONFIG_ENABLE_ASYNC_DNS_SOCKETS
nl_InetLayer_sources += @top_builddir@/src/inet/AsyncDNSResolverSockets.cpp
endif # INET_CONFIG_ENABLE_ASYNC_DNS_SOCKETS
endif # WEAVE_SYSTEM_CONFIG_USE_SOCKETS

if WEAVE_WITH_ANDROID
# Some Android platforms (bionic) don't have the
# getifaddrs(3)/freeifaddrs(3) interfaces. This Android library
# provides an inline compatibility implementation.

android_platform_libcore_dir                               = \
    $(top_srcdir)/third_party/android/platform-libcore/android-platform-libcore

nl_InetLayer_CPPFLAGS                                      = \
    -I$(android_platform_libcore_dir)/luni/src/main/native   \
    -I$(android_platform_libcore_dir)/include                \
    $(NULL)
endif # WEAVE_WITH_ANDROID
