ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/libs/libselinux/Makefile b/package/libs/libselinux/Makefile
new file mode 100644
index 0000000..f90d499
--- /dev/null
+++ b/package/libs/libselinux/Makefile
@@ -0,0 +1,161 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libselinux
+PKG_VERSION:=3.5
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/SELinuxProject/selinux/releases/download/$(PKG_VERSION)
+PKG_HASH:=9a3a3705ac13a2ccca2de6d652b6356fead10f36fb33115c185c5ccdf29eec19
+
+PKG_LICENSE:=libselinux-1.0
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+PKG_CPE_ID:=cpe:/a:selinuxproject:libselinux
+
+PKG_BUILD_FLAGS:=no-lto
+
+HOST_BUILD_DEPENDS:=libsepol/host musl-fts/host pcre2/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+
+LIBSELINUX_UTILS := \
+	avcstat \
+	compute_av \
+	compute_create \
+	compute_member \
+	compute_relabel \
+	getconlist \
+	getdefaultcon \
+	getenforce \
+	getfilecon \
+	getpidcon \
+	getsebool \
+	getseuser \
+	matchpathcon \
+	policyvers \
+	sefcontext_compile \
+	selabel_digest \
+	selabel_get_digests_all_partial_matches \
+	selabel_lookup \
+	selabel_lookup_best_match \
+	selabel_partial_match \
+	selinux_check_access \
+	selinux_check_securetty_context \
+	selinuxenabled \
+	selinuxexeccon \
+	setenforce \
+	setfilecon \
+	togglesebool \
+	validatetrans
+
+LIBSELINUX_ALTS := \
+	getenforce \
+	getsebool \
+	matchpathcon \
+	selinuxenabled \
+	setenforce
+
+$(eval $(foreach a,$(LIBSELINUX_ALTS),ALTS_$(a):=300:/usr/sbin/$(a):/usr/sbin/libselinux-$(a)$(newline)))
+
+define Package/libselinux/Default
+  TITLE:=Runtime SELinux library
+  URL:=http://selinuxproject.org/page/Main_Page
+endef
+
+define Package/libselinux
+  $(call Package/libselinux/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+libsepol +libpcre2 +USE_MUSL:musl-fts
+endef
+
+define Package/libselinux/description
+	libselinux is the runtime SELinux library that provides
+	interfaces (e.g. library functions for the SELinux kernel
+	APIs like getcon(), other support functions like
+	getseuserbyname()) to SELinux-aware applications. libselinux
+	may use the shared libsepol to manipulate the binary policy
+	if necessary (e.g. to downgrade the policy format to an
+	older version supported by the kernel) when loading policy.
+endef
+
+define GenUtilPkg
+ define Package/$(1)
+   $(call Package/libselinux/Default)
+   TITLE+= $(2) utility
+   SECTION:=utils
+   DEPENDS:=+libselinux
+   CATEGORY:=Utilities
+   SUBMENU:=libselinux tools
+   ALTERNATIVES:=$(ALTS_$(2))
+ endef
+
+ define Package/$(1)/description
+  libselinux version of the $(2) utility.
+ endef
+endef
+
+$(foreach a,$(LIBSELINUX_UTILS),$(eval $(call GenUtilPkg,libselinux-$(a),$(a))))
+
+# Needed to link libselinux utilities, which link against
+# libselinux.so, which indirectly depends on libpcre2.so, installed in
+# $(STAGING_DIR_HOSTPKG).
+HOST_LDFLAGS += -Wl,-rpath="$(STAGING_DIR_HOSTPKG)/lib"
+
+HOST_MAKE_FLAGS += \
+	PREFIX=$(STAGING_DIR_HOSTPKG) \
+	SHLIBDIR=$(STAGING_DIR_HOSTPKG)/lib \
+	FTS_LDLIBS=-lfts
+
+ifeq ($(CONFIG_USE_MUSL),y)
+MAKE_FLAGS += FTS_LDLIBS=-lfts
+TARGET_CFLAGS += -D_LARGEFILE64_SOURCE
+endif
+
+MAKE_FLAGS += \
+	SHLIBDIR=/usr/lib \
+	OS=Linux
+
+define Build/Compile
+	$(call Build/Compile/Default,all)
+endef
+
+define Build/Install
+	$(call Build/Install/Default,install)
+endef
+
+define Build/InstallDev
+	$(INSTALL_DIR) $(1)/usr/include
+	$(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+	$(INSTALL_DIR) $(1)/usr/lib
+	$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
+	$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libselinux.pc $(1)/usr/lib/pkgconfig/
+	$(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/libselinux.pc
+	$(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/libselinux.pc
+endef
+
+define Package/libselinux/install
+	$(INSTALL_DIR) $(1)/usr/lib
+	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libselinux.so.* $(1)/usr/lib/
+endef
+
+define BuildUtil
+  define Package/$(1)/install
+	$(INSTALL_DIR) $$(1)/usr/sbin
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/$(2) $$(1)/usr/sbin/$(if $(ALTS_$(2)),libselinux-$(2),$(2))
+  endef
+
+  $$(eval $$(call BuildPackage,$(1)))
+endef
+
+$(eval $(call HostBuild))
+$(eval $(call BuildPackage,libselinux))
+$(foreach a,$(LIBSELINUX_UTILS),$(eval $(call BuildUtil,libselinux-$(a),$(a))))