From 4b6fc857bee8a58e011a4526114e13ae78064fc9 Mon Sep 17 00:00:00 2001 From: "Sergey V. Lobanov" Date: Wed, 26 Jan 2022 15:32:00 +0300 Subject: [PATCH] fakeuname: add package This package provides fakeuname host tool to avoid build platform detection for invalid configure/build scripts that are not friendly to cross-platform build. This fake uname tool returns Linux as OS name and target Linux version as OS version. Signed-off-by: Sergey V. Lobanov --- utils/fakeuname/Makefile | 57 +++++++++++++++++++++++++++++++ utils/fakeuname/fakeuname.mk | 1 + utils/fakeuname/src/footer.py.inc | 20 +++++++++++ utils/fakeuname/src/header.py.inc | 13 +++++++ 4 files changed, 91 insertions(+) create mode 100644 utils/fakeuname/Makefile create mode 100644 utils/fakeuname/fakeuname.mk create mode 100644 utils/fakeuname/src/footer.py.inc create mode 100644 utils/fakeuname/src/header.py.inc diff --git a/utils/fakeuname/Makefile b/utils/fakeuname/Makefile new file mode 100644 index 000000000..26419bc2b --- /dev/null +++ b/utils/fakeuname/Makefile @@ -0,0 +1,57 @@ +# Copyright (C) 2022 Sergey V. Lobanov +# +# SPDX-License-Identifier: GPL-2.0-or-later + +include $(TOPDIR)/rules.mk + +PKG_NAME:=fakeuname +PKG_RELEASE:=$(COMMITCOUNT) +PKG_LICENSE:=GPL-2.0-or-later + +PKG_MAINTAINER:=Sergey V. Lobanov + +PKG_HOST_ONLY:=1 + +define Package/fakeuname + SECTION:=utils + CATEGORY:=Utilities + TITLE:=Fake uname host tool for cross-compile purposes + BUILDONLY:=1 +endef + +define Package/fakeuname/description + Fakeuname is a host tool for cross-compile cross-platform builds + if configure or/and build scripts check uname output for target + build and use invalid build flags. This tool should not be used + in normal case if configure/build scripts allow to redefine + required values instead of using uname output +endef + +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk + +define Host/Configure +endef + +define Host/Compile + { \ + cat src/header.py.inc; \ + echo machine = \"$(ARCH)\"; \ + echo kernel_release = \"$(LINUX_UNAME_VERSION)\"; \ + echo kernel_version = \"#0 $(shell date --date=@$(SOURCE_DATE_EPOCH))\"; \ + cat src/footer.py.inc; \ + } > $(HOST_BUILD_DIR)/$(PKG_NAME) +endef + +define Host/Install + $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/lib/$(PKG_NAME) + $(INSTALL_BIN) $(HOST_BUILD_DIR)/$(PKG_NAME) $(STAGING_DIR_HOSTPKG)/lib/$(PKG_NAME)/uname +endef + +define Host/Clean + rm -rf "$(STAGING_DIR_HOSTPKG)/lib/$(PKG_NAME)" +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,fakeuname)) diff --git a/utils/fakeuname/fakeuname.mk b/utils/fakeuname/fakeuname.mk new file mode 100644 index 000000000..b7692b3d0 --- /dev/null +++ b/utils/fakeuname/fakeuname.mk @@ -0,0 +1 @@ +FAKEUNAME_PATH=$(STAGING_DIR_HOSTPKG)/lib/fakeuname diff --git a/utils/fakeuname/src/footer.py.inc b/utils/fakeuname/src/footer.py.inc new file mode 100644 index 000000000..f1e916ea2 --- /dev/null +++ b/utils/fakeuname/src/footer.py.inc @@ -0,0 +1,20 @@ + +args_dict = { + "-a" : "%s %s %s %s %s %s %s %s" % + (kernel_name, nodename, kernel_release, kernel_version, + machine, processor, hardware_platform, operating_system), + "-m" : machine, + "-n" : nodename, + "-r" : kernel_release, + "-s" : kernel_name, + "-p" : processor, + "-v" : kernel_version, + "-i" : hardware_platform, + "-o" : operating_system, +} + +input_args = sys.argv +if len(input_args) == 1: + input_args = ["-s"] + +print(" ".join([args_dict[arg] for arg in input_args if arg in args_dict])) diff --git a/utils/fakeuname/src/header.py.inc b/utils/fakeuname/src/header.py.inc new file mode 100644 index 000000000..e11eba241 --- /dev/null +++ b/utils/fakeuname/src/header.py.inc @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +# Copyright 2022 Sergey V. Lobanov +# +# SPDX-License-Identifier: GPL-2.0-or-later + +import sys + +kernel_name="Linux" +operating_system="GNU/Linux" +nodename="OpenWrt" +processor="unknown" +hardware_platform="unknown" +