#
# Copyright (C) 2017 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:=libyang
PKG_VERSION:=2.1.128
PKG_RELEASE:=$(AUTORELEASE)

PKG_SOURCE_VERSION:=2.1.128
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/CESNET/libyang/tar.gz/v$(PKG_SOURCE_VERSION)?

PKG_HASH:=19a5fe2742ccd68cc90bd7b28736d518ebea4241e798fa49a01b5e6f8a79928e

PKG_MAINTAINER:=Jakov Smolic <jakov.smolic@sartura.hr>
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
PKG_CPE_ID:=cpe:/a:cesnet:libyang

CMAKE_INSTALL:=1
CMAKE_BINARY_SUBDIR:=build

HOST_BUILD_DEPENDS:=pcre2/host

# install host build into the workdir staging (a writable volume under the
# docker build system) - the toolchain image's /toolchain/hostpkg is read-only
HOST_BUILD_PREFIX:=$(TOPDIR)/staging_dir/hostpkg

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/cmake.mk

# search our writable host prefix first so the PIC pcre2 from there wins
# over the toolchain image's non-PIC copy
CMAKE_HOST_FIND_ROOT_PATH:=$(HOST_BUILD_PREFIX);$(CMAKE_HOST_FIND_ROOT_PATH)

define Package/libyang
  SECTION:=libs
  CATEGORY:=Libraries
  TITLE:=YANG data modeling language library
  URL:=https://github.com/CESNET/libyang
  DEPENDS:=+libpcre2 +libpthread
endef

define Package/yanglint
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=YANG data modeling language utility
  URL:=https://github.com/CESNET/libyang
  DEPENDS:=+libyang
endef

define Package/libyang/description
 libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
 The library is used e.g. in libnetconf2, Netopeer2 or sysrepo projects.
endef

define Package/libyang/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libyang.so* $(1)/usr/lib/
endef

define Package/yanglint/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/yanglint $(1)/usr/bin/
endef

CMAKE_HOST_OPTIONS += \
	-DCMAKE_BUILD_TYPE:STRING=Release \
	-DENABLE_TESTS:BOOL=OFF

# the stock Host/Configure/Default configures in-source, which libyang
# forbids; configure out-of-source and keep an rpath to the hostpkg libs
# so host tools linked against libyang.so run without LD_LIBRARY_PATH
define Host/Configure
	mkdir -p $(HOST_BUILD_DIR)/build
	(cd $(HOST_BUILD_DIR); \
		CFLAGS="$(HOST_CFLAGS)" \
		CXXFLAGS="$(HOST_CFLAGS)" \
		LDFLAGS="$(HOST_LDFLAGS)" \
		cmake -S $(HOST_BUILD_DIR) -B $(HOST_BUILD_DIR)/build \
			-DCMAKE_C_COMPILER="$(CMAKE_HOST_C_COMPILER)" \
			-DCMAKE_CXX_COMPILER="$(CMAKE_HOST_CXX_COMPILER)" \
			-DCMAKE_FIND_ROOT_PATH="$(CMAKE_HOST_FIND_ROOT_PATH)" \
			-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \
			-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
			-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
			-DCMAKE_INSTALL_PREFIX=$(HOST_BUILD_PREFIX) \
			-DCMAKE_PREFIX_PATH=$(HOST_BUILD_PREFIX) \
			-DCMAKE_INSTALL_LIBDIR=lib \
			-DCMAKE_SKIP_RPATH=FALSE \
			-DCMAKE_INSTALL_RPATH="$(HOST_BUILD_PREFIX)/lib" \
			$(CMAKE_HOST_OPTIONS) \
	)
endef

define Host/Compile
	+$(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR)/build $(HOST_MAKE_FLAGS)
endef

define Host/Install
	$(MAKE) -C $(HOST_BUILD_DIR)/build install
endef

$(eval $(call BuildPackage,libyang))
$(eval $(call BuildPackage,yanglint))
$(eval $(call HostBuild))
