############################################################################
# apps/netutils/libcoap/Makefile
#
# 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.
#
############################################################################

include $(APPDIR)/Make.defs

COAP_URL ?= "https://codeload.github.com/obgm/libcoap/zip/refs/tags"

COAP_ZIP = libcoap-$(CONFIG_LIBCOAP_VERSION).zip

COAP_UNPACKNAME = libcoap
UNPACK ?= unzip -q -o

$(COAP_ZIP):
	@echo "Downloading: $(COAP_URL)/v$(CONFIG_LIBCOAP_VERSION)"
	$(Q) curl -o $(COAP_ZIP) -L $(COAP_URL)/v$(CONFIG_LIBCOAP_VERSION)

$(COAP_UNPACKNAME): $(COAP_ZIP)
	@echo "Unpacking: $(COAP_ZIP) -> $(COAP_UNPACKNAME)"
	$(Q) $(UNPACK) $(COAP_ZIP)
	@echo "Unpacking: $(COAP_ZIP) -> $(COAP_UNPACKNAME)"
	$(Q) mv libcoap-$(CONFIG_LIBCOAP_VERSION) $(COAP_UNPACKNAME)
	$(Q) touch $(COAP_UNPACKNAME)

# Download and unpack tarball if no git repo found
ifeq ($(wildcard $(COAP_UNPACKNAME)/.git),)
context:: $(COAP_UNPACKNAME)

distclean::
	$(call DELDIR, $(COAP_UNPACKNAME))
	$(call DELFILE, $(COAP_ZIP))
endif

context:: $(COAP_UNPACKNAME)/include/coap3/coap.h

$(COAP_UNPACKNAME)/include/coap3/coap.h:: $(COAP_UNPACKNAME)
	cd $(COAP_UNPACKNAME) && ./autogen.sh && \
	./configure --disable-doxygen --disable-manpages

CSRCS  += libcoap/src/coap_address.c
CSRCS  += libcoap/src/coap_asn1.c
CSRCS  += libcoap/src/coap_async.c
CSRCS  += libcoap/src/coap_block.c
CSRCS  += libcoap/src/coap_cache.c
CSRCS  += libcoap/src/coap_debug.c
CSRCS  += libcoap/src/coap_dtls.c
CSRCS  += libcoap/src/coap_encode.c
CSRCS  += libcoap/src/coap_event.c
CSRCS  += libcoap/src/coap_hashkey.c
CSRCS  += libcoap/src/coap_gnutls.c
CSRCS  += libcoap/src/coap_io.c
CSRCS  += libcoap/src/coap_layers.c
CSRCS  += libcoap/src/coap_mbedtls.c
CSRCS  += libcoap/src/coap_mem.c
CSRCS  += libcoap/src/coap_net.c
CSRCS  += libcoap/src/coap_netif.c
CSRCS  += libcoap/src/coap_notls.c
CSRCS  += libcoap/src/coap_openssl.c
CSRCS  += libcoap/src/coap_option.c
CSRCS  += libcoap/src/coap_oscore.c
CSRCS  += libcoap/src/coap_pdu.c
CSRCS  += libcoap/src/coap_prng.c
CSRCS  += libcoap/src/coap_resource.c
CSRCS  += libcoap/src/coap_session.c
CSRCS  += libcoap/src/coap_str.c
CSRCS  += libcoap/src/coap_subscribe.c
CSRCS  += libcoap/src/coap_tcp.c
CSRCS  += libcoap/src/coap_time.c
CSRCS  += libcoap/src/coap_tinydtls.c
CSRCS  += libcoap/src/coap_uri.c
CSRCS  += libcoap/src/coap_ws.c
CSRCS  += libcoap/src/oscore/oscore.c
CSRCS  += libcoap/src/oscore/oscore_cbor.c
CSRCS  += libcoap/src/oscore/oscore_context.c
CSRCS  += libcoap/src/oscore/oscore_cose.c
CSRCS  += libcoap/src/oscore/oscore_crypto.c

CFLAGS += ${INCDIR_PREFIX}$(APPDIR)$(DELIM)netutils$(DELIM)libcoap
CFLAGS += -Wno-undef

ifneq ($(CONFIG_NETUTILS_LIBCOAP_EXAMPLE),)
PROGNAME += coap_server coap_client
PRIORITY  = $(CONFIG_NETUTILS_LIBCOAP_EXAMPLE_PRIORITY)
STACKSIZE = $(CONFIG_NETUTILS_LIBCOAP_EXAMPLE_STACKSIZE)
MODULE    = $(CONFIG_NETUTILS_LIBCOAP_EXAMPLE)
MAINSRC   = libcoap/examples/coap-server.c libcoap/examples/coap-client.c
endif

include $(APPDIR)/Application.mk
