#
# 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:=0.9.1
PKG_RELEASE:=1

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://gerrit.iotivity.org/gerrit/iotivity
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=0.9.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_MD5SUM:=
PKG_USE_MIPS16:=0

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

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

PKG_BUILD_DEPENDS:= +boost +libexpat

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


define Package/iotivity
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:= +libpthread +librt +libstdcpp +libuuid
  TITLE:=IoTivity 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-things-manager-lib
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity
  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-plugin-manager-lib
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +libexpat
  TITLE:=IoTivity plugin manager lib
  URL:=https://www.iotivity.org
endef

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


define Package/iotivity-mqttclient
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity +iotivity-plugin-manager-lib +boost +boost-system
  TITLE:=IoTivity mqtt Client
  URL:=https://www.iotivity.org
endef

define Package/iotivity-mqttclient/description
    IoTivity mqtt Client
endef


define Package/iotivity-oic-middle
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity
  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-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-example-garage
  SECTION:=net
  CATEGORY:=Network
  DEPENDS:=iotivity
  TITLE:=IoTivity Garage example
  URL:=https://www.iotivity.org
endef

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


PKG_CEREAL_NAME:=cereal
PKG_CEREAL_VERSION:=7121e91e6ab8c3e6a6516d9d9c3e6804e6f65245
PKG_CEREAL_SOURCE:=$(PKG_CEREAL_NAME)-$(PKG_CEREAL_VERSION).tar.bz2
PKG_CEREAL_PROTO:=git
PKG_CEREAL_SOURCE_URL:=https://github.com/USCiLab/cereal.git
PKG_CEREAL_SUBDIR:=$(PKG_CEREAL_NAME)
#PKG_CEREAL_MIRROR_MD5SUM:=?

define Download/iotivity-cereal
  FILE:=$(PKG_CEREAL_SOURCE)
  URL:=$(PKG_CEREAL_SOURCE_URL)
  PROTO:=$(PKG_CEREAL_PROTO)
  VERSION:=$(PKG_CEREAL_VERSION)
  SUBDIR:=$(PKG_CEREAL_SUBDIR)
  #MIRROR_MD5SUM:=$(PKG_CEREAL_MIRROR_MD5SUM)
endef
$(eval $(call Download,iotivity-cereal))


SCONS_OPTIONS += \
	TARGET_OS=linux \
	TARGET_TRANSPORT=ALL \
	TARGET_ARCH=$(ARCH) \
	STAGING_DIR=$(STAGING_DIR) \
	mqttclient examples samples libTGMSDK ConServerApp ConClientApp BootstrapServerApp

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

define Build/Prepare
	$(call Build/Prepare/Default)
	$(TAR) -C $(PKG_BUILD_DIR)/extlibs/cereal -xjf $(DL_DIR)/$(PKG_CEREAL_SOURCE)
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/liboc.so $(1)/usr/lib/liboc.so
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/liboc_logger.so $(1)/usr/lib/liboc_logger.so
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/liboctbstack.so $(1)/usr/lib/liboctbstack.so
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/libTGMSDKLibrary.so
endef

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

define Package/iotivity-mqttclient/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/protocol-plugin/sample-app/linux/mqtt/mqttclient $(1)/usr/bin/mqttclient
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/OICMiddle
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/bootstrapserver
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/things-manager/sampleapp/linux/configuration/con-server $(1)/usr/bin/con-server
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/service/things-manager/sampleapp/linux/configuration/con-client $(1)/usr/bin/con-client
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/garageclient
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/out/linux/$(ARCH)/release/resource/examples/garageserver $(1)/usr/bin/garageserver
endef


$(eval $(call BuildPackage,iotivity))
$(eval $(call BuildPackage,iotivity-things-manager-lib))
$(eval $(call BuildPackage,iotivity-plugin-manager-lib))
$(eval $(call BuildPackage,iotivity-mqttclient))
$(eval $(call BuildPackage,iotivity-oic-middle))
$(eval $(call BuildPackage,iotivity-things-manager))
$(eval $(call BuildPackage,iotivity-example-garage))
