#
# Copyright (C) 2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=iotivity
PKG_VERSION:=1.0.0
PKG_RELEASE=1

PKG_SOURCE:=${PKG_NAME}-${PKG_VERSION}.tar.gz
PKG_SOURCE_URL:=https://downloads.iotivity.org/${PKG_VERSION}/ \
	http://mirrors.kernel.org/${PKG_NAME}/${PKG_VERSION}/
PKG_MD5SUM:=4bcbabffc1734c664bbdf8fedfa60543
PKG_USE_MIPS16:=0

PKG_MAINTAINER:=Hauke Mehrtens <hauke.mehrtens@lantiq.com>

PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE.md

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/scons.mk


define Package/iotivity
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=@!USE_UCLIBC +libpthread +librt +libuuid
  TITLE:=IoTivity C Library
  URL:=https://www.iotivity.org
endef

define Package/iotivity/description
    IoTivity is a framework for the Internet of Things based on the
    Open Interconnect Consortium Specification.
endef


define Package/iotivity-cpp
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +libpthread +libstdcpp
  TITLE:=IoTivity C++ Library
  URL:=https://www.iotivity.org
endef

define Package/iotivity-cpp/description
    IoTivity is a framework for the Internet of Things based on the
    Open Interconnect Consortium Specification.
endef


define Package/iotivity-things-manager-lib
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-cpp +libstdcpp
  TITLE:=IoTivity things manager lib
  URL:=https://www.iotivity.org
endef

define Package/iotivity-things-manager-lib/description
    IoTivity things-manager lib
endef


define Package/iotivity-oic-middle
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-cpp
  TITLE:=IoTivity OIC Middle
  URL:=https://www.iotivity.org
endef

define Package/iotivity-oic-middle/description
    IoTivity OIC Middle
endef


define Package/iotivity-things-manager
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-cpp +iotivity-things-manager-lib
  TITLE:=IoTivity things manager
  URL:=https://www.iotivity.org
endef

define Package/iotivity-things-manager/description
    IoTivity things manager
endef

define Package/iotivity-resource-container-lib
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-cpp +boost-system +boost-thread +boost-date_time
  TITLE:=IoTivity Resource Container library
  URL:=https://www.iotivity.org
endef

define Package/iotivity-resource-container-sample
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-resource-container-lib
  TITLE:=IoTivity Resource Container sample Application
  URL:=https://www.iotivity.org
endef

define Package/iotivity-resource-container-hue
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-resource-container-lib +libcurl
  TITLE:=IoTivity Resource Container Hue Bundle
  URL:=https://www.iotivity.org
endef

define Package/iotivity-example-garage
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-cpp
  TITLE:=IoTivity Garage example
  URL:=https://www.iotivity.org
endef

define Package/iotivity-example-garage/description
    An IoTivity example application
endef


PKG_TINYCBOR_NAME:=tinycbor
PKG_TINYCBOR_VERSION:=43e3ac9490cf19459ec7b7bd13df3b66810fb62a
PKG_TINYCBOR_SOURCE:=$(PKG_TINYCBOR_NAME)-$(PKG_TINYCBOR_VERSION).tar.bz2
PKG_TINYCBOR_PROTO:=git
PKG_TINYCBOR_SOURCE_URL:=https://github.com/01org/tinycbor.git
PKG_TINYCBOR_SUBDIR:=$(PKG_TINYCBOR_NAME)
#PKG_TINYCBOR_MIRROR_MD5SUM:=?

define Download/iotivity-tinycbor
  FILE:=$(PKG_TINYCBOR_SOURCE)
  URL:=$(PKG_TINYCBOR_SOURCE_URL)
  PROTO:=$(PKG_TINYCBOR_PROTO)
  VERSION:=$(PKG_TINYCBOR_VERSION)
  SUBDIR:=$(PKG_TINYCBOR_SUBDIR)
  #MIRROR_MD5SUM:=$(PKG_TINYCBOR_MIRROR_MD5SUM)
endef
$(eval $(call Download,iotivity-tinycbor))

PKG_SQLITE_NAME:=sqlite
PKG_SQLITE_VERSION:=3081101
PKG_SQLITE_SOURCE:=$(PKG_SQLITE_NAME)-amalgamation-$(PKG_SQLITE_VERSION).zip
PKG_SQLITE_SOURCE_URL:=http://www.sqlite.org/2015/
PKG_SQLITE_SUBDIR:=$(PKG_SQLITE_NAME)
PKG_SQLITE_MD5SUM:=94907e831502e2080b76e281cfa24dde

define Download/iotivity-sqlite
  FILE:=$(PKG_SQLITE_SOURCE)
  URL:=$(PKG_SQLITE_SOURCE_URL)
  VERSION:=$(PKG_SQLITE_VERSION)
  SUBDIR:=$(PKG_SQLITE_SUBDIR)
  MD5SUM:=$(PKG_SQLITE_MD5SUM)
endef
$(eval $(call Download,iotivity-sqlite))


SCONS_OPTIONS += \
	TARGET_OS=linux \
	TARGET_TRANSPORT=IP \
	TARGET_ARCH=$(ARCH) \
	STAGING_DIR=$(STAGING_DIR) \
	LOGGING=true \
	SECURED=1 \
	$(if $(CONFIG_PACKAGE_iotivity),liboctbstack) \
	$(if $(CONFIG_PACKAGE_iotivity-cpp),liboc) \
	$(if $(CONFIG_PACKAGE_iotivity-things-manager-lib),libTGMSDK) \
	$(if $(CONFIG_PACKAGE_iotivity-oic-middle),samples) \
	$(if $(CONFIG_PACKAGE_iotivity-things-manager),ConServerApp ConClientApp BootstrapServerApp) \
	$(if $(CONFIG_PACKAGE_iotivity-resource-container-lib),libResContainer) \
	$(if $(CONFIG_PACKAGE_iotivity-resource-container-sample),containersample) \
	$(if $(CONFIG_PACKAGE_iotivity-resource-container-hue),libHueBundle) \
	$(if $(CONFIG_PACKAGE_iotivity-example-garage),examples) \


ifneq ($(findstring c,$(OPENWRT_VERBOSE)),)
  SCONS_OPTIONS += VERBOSE=true
endif

define Build/Prepare
	$(call Build/Prepare/Default)
	$(TAR) -C $(PKG_BUILD_DIR)/extlibs/tinycbor/ -xjf $(DL_DIR)/$(PKG_TINYCBOR_SOURCE)
	unzip -d $(PKG_BUILD_DIR)/extlibs/sqlite3/ $(DL_DIR)/$(PKG_SQLITE_SOURCE)
	mv $(PKG_BUILD_DIR)/extlibs/sqlite3/$(PKG_SQLITE_NAME)-amalgamation-$(PKG_SQLITE_VERSION)/sqlite3.h $(PKG_BUILD_DIR)/extlibs/sqlite3/
	mv $(PKG_BUILD_DIR)/extlibs/sqlite3/$(PKG_SQLITE_NAME)-amalgamation-$(PKG_SQLITE_VERSION)/sqlite3.c $(PKG_BUILD_DIR)/extlibs/sqlite3/
endef


define Build/Configure
	(cd $(PKG_BUILD_DIR); \
		$(SCONS_VARS) \
		scons \
			$(SCONS_OPTIONS) \
	)
endef


define Package/iotivity/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/liboctbstack.so $(1)/usr/lib/
endef

define Package/iotivity-cpp/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/liboc.so $(1)/usr/lib/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/liboc_logger.so $(1)/usr/lib/
endef

define Package/iotivity-things-manager-lib/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/libTGMSDKLibrary.so $(1)/usr/lib/
endef

define Package/iotivity-oic-middle/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/examples/OICMiddle/OICMiddle $(1)/usr/bin/
endef

define Package/iotivity-things-manager/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/things-manager/sampleapp/linux/configuration/bootstrapserver $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/things-manager/sampleapp/linux/configuration/con-server $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/things-manager/sampleapp/linux/configuration/con-client $(1)/usr/bin/
endef

define Package/iotivity-resource-container-lib/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/librcs_common.so $(1)/usr/lib/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/librcs_client.so $(1)/usr/lib/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/librcs_server.so $(1)/usr/lib/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/librcs_container.so $(1)/usr/lib/
endef

define Package/iotivity-resource-container-sample/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/resource-container/ContainerSample  $(1)/usr/bin/
endef

define Package/iotivity-resource-container-hue/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/libHueBundle.so $(1)/usr/lib/
endef

define Package/iotivity-example-garage/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/resource/examples/garageclient $(1)/usr/bin/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/resource/examples/garageserver $(1)/usr/bin/
endef


$(eval $(call BuildPackage,iotivity))
$(eval $(call BuildPackage,iotivity-cpp))
$(eval $(call BuildPackage,iotivity-things-manager-lib))
$(eval $(call BuildPackage,iotivity-oic-middle))
$(eval $(call BuildPackage,iotivity-things-manager))
$(eval $(call BuildPackage,iotivity-resource-container-lib))
$(eval $(call BuildPackage,iotivity-resource-container-sample))
$(eval $(call BuildPackage,iotivity-resource-container-hue))
$(eval $(call BuildPackage,iotivity-example-garage))
