include $(TOPDIR)/rules.mk
ifeq ($(CONFIG_NETGEAR_SATELLITE),y)
include $(INCLUDE_DIR)/kernel.mk
endif

TARGET_CFLAGS += -fpie
PKG_NAME:=ntgr_configd
PKG_RELEASE:=1

ifeq ($(CONFIG_NETGEAR_SATELLITE),y)
include $(INCLUDE_DIR)/local-development.mk
ifeq ($(DUMP)$(PKG_VERSION),)
PKG_REV:=
PKG_VERSION:=
endif
endif

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/ntgr_configd
  SECTION:=NETGEAR
  CATEGORY:=NETGEAR Proprietary software
  TITLE:= NETGEAR configuration daemon
ifeq ($(CONFIG_NETGEAR_SATELLITE),y)
  DEPENDS:=+librpc +ntgr_nvram +libuci +libubox +ntgr_wrapper_debug +kmod-qca-wifi-unified-profile +qca-wifison-ext-lib +libubus +d2 +libopenssl +libcrypto +libcurl +ntgr_pot +libpcap
  USERID:=admin=1:admin=1
else
  DEPENDS:=+librpc +ntgr_nvram +libuci +libubox +ntgr_wrapper_debug +kmod-qca-wifi-unified-profile +rpcd +libubox +libubus +d2 +libopenssl +libcrypto +libcurl +libpcap
endif
endef

define Package/ntgr_configd/description
  NETGEAR configuration daemon to apply/retrive configuration, to get status
  and statistics
endef

define Build/Prepare
	echo $(PKG_BUILD_DIR) $(PWD)
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
	$(LN) $(STAGING_DIR)/ntgr_utils/debug.c $(PKG_BUILD_DIR)/debug.c
	$(LN) $(STAGING_DIR)/ntgr_utils/debug.h $(PKG_BUILD_DIR)/debug.h
	$(LN) $(STAGING_DIR)/usr/include/nvram/ntgr_nvram_params.h $(PKG_BUILD_DIR)/ntgr_nvram_params.h
endef

define Build/Configure
endef

EXTRA_CFLAGS:=$(TARGET_CFLAGS) -Wall

EXTRA_LDFLAGS:=$(TARGET_LDFLAGS) -lrpc -lpthread -luci -lubox -lnvram -lm -ld2lib -lntgrnvram -lntgrwifinvram -lubus
ifeq ($(CONFIG_NETGEAR_SATELLITE),y)
EXTRA_LDFLAGS+= -lqca_wifison_ext -lcurl -lcrypto -lpot -lpcap -lnl-3 -lnl-genl-3
DEVICE:=SATELLITE
endif

define Build/Compile
	$(MAKE) -C $(PKG_BUILD_DIR) \
		CC="$(TARGET_CC) " \
		CFLAGS="$(strip $(EXTRA_CFLAGS))" \
		LDFLAGS="$(strip $(EXTRA_LDFLAGS))"\
		DEVICE="$(DEVICE)"
endef

INSTALL_IPK_HEADERS=ntgr_nvram_wireless_api.h

define Package/ntgr_configd/install
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_DIR) $(1)/usr/lib
ifeq ($(CONFIG_NETGEAR_SATELLITE),y)
	$(INSTALL_DIR) $(1)/etc/ssl/certs/
	$(INSTALL_BIN) ./files/ca-certificates.crt $(1)/etc/ssl/certs/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/configd_time $(1)/usr/sbin
	$(INSTALL_BIN) ./files/update_nvram_fw_upgrade_time $(1)/etc/init.d/
	$(INSTALL_BIN) ./files/get_remote_iface $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ntgr_uci2nvram $(1)/usr/sbin
else
	$(INSTALL_DIR) $(1)/usr/lib/rpcd/
	$(INSTALL_DIR) $(1)/usr/libexec/rpcd/
	$(INSTALL_BIN) ./files/satellite $(1)/usr/libexec/rpcd/
	$(INSTALL_BIN) ./files/securebootstatus $(1)/usr/libexec/rpcd/
	$(INSTALL_DIR) $(1)/usr/lib/rpcd
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ntgr_wlparam.so $(1)/usr/lib/rpcd
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ntgr_stats.so $(1)/usr/lib/rpcd/
endif
	$(INSTALL_DIR) $(1)/usr/include/nvram
	$(INSTALL_DIR) $(1)/etc/config
	$(CP) ./files/nvram_wifi_def $(1)/etc/config/nvram_wifi
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/configd $(1)/usr/sbin
	$(INSTALL_BIN) ./files/init_configd $(1)/etc/init.d/
	$(INSTALL_BIN) ./files/ntgr_wifi_restart $(1)/usr/sbin/
	$(INSTALL_BIN) ./files/calculate_group_hash.sh $(1)/usr/sbin/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ntgr_nvram2uci $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/ntgr_nvram_wifi $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/libntgrwifinvram.so $(1)/usr/lib
	$(if $(INSTALL_IPK_HEADERS),$(CP) $(foreach header,$(INSTALL_IPK_HEADERS),$(PKG_BUILD_DIR)/$(header)) $(1)/usr/include/nvram)
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include/nvram
	$(if $(INSTALL_IPK_HEADERS),$(CP) $(foreach header,$(INSTALL_IPK_HEADERS),$(PKG_BUILD_DIR)/$(header)) $(1)/usr/include/nvram)
endef
$(eval $(call BuildPackage,ntgr_configd))
