summary refs log tree commit diff
path: root/noarch/package_api_defaults
diff options
context:
space:
mode:
authorStarfall <us@starfall.systems>2024-01-08 09:40:24 -0600
committerStarfall <us@starfall.systems>2024-01-08 09:40:24 -0600
commita91d41375fc87c958f0b4b2ec09d5bfa2bab9414 (patch)
tree5ecf2d3f5b5962bb2d317ad4ce1fddd88e8b0ed7 /noarch/package_api_defaults
Initial commit HEAD main
Diffstat (limited to 'noarch/package_api_defaults')
-rwxr-xr-xnoarch/package_api_defaults262
1 files changed, 262 insertions, 0 deletions
diff --git a/noarch/package_api_defaults b/noarch/package_api_defaults
new file mode 100755
index 0000000..b535ee3
--- /dev/null
+++ b/noarch/package_api_defaults
@@ -0,0 +1,262 @@
+#
+# This file contains 'package' API defaults.
+#
+# NOTE: Tthis file must "sourced" (not executed).
+#
+# WARNING: This file depends on functions from "run_time_utils" file.
+#
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+#
+# Old API
+#
+# mandatory
+#
+# Use something like:
+#	echo "package's human readable name"
+#
+human_readable_name() {
+	_abort_execution "'human_readable_name()' is mandatory and must be redefined in each 'package'"
+}
+
+#
+# Old API
+#
+# mandatory
+#
+# Use something like:
+#	echo "package_name"
+#
+package_name() {
+	_abort_execution "'package_name()' is mandatory and must be redefined in each 'package'"
+}
+
+#
+# Old API
+#
+# optional
+#
+# Acts as flag to differentiate "common" ("binaries") and "vendor-specific"
+# ("script") packages. Shall be empty for "common" packages (will be installed
+# into "${INSTALL_BASE_DIR}/smfp-common/" directory). Shall be non-empty for
+# "vendor-specific" packages (will be installed into
+# "${INSTALL_BASE_DIR}/${VENDOR}/" directory).
+#
+# Use something like:
+#	echo "-package_suffix"
+#
+package_suffix(){
+	#echo ""
+	return
+}
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+#
+# Existing packages don't fit into new API. For compatibility reasons there are
+# two "init" functions "package_on_load()" and "package_init()".
+#
+# "package_on_load()" - new API. References to environment variables are not
+# permitted. All communication to "external world" must be performed via API
+# functions only.
+#
+# "package_init()" - old API. Various environment variables like "INSTALL_DIR",
+# "VENDOR_LC", "DIST_DIR" are already made available.
+#
+
+#
+# New API
+#
+# It is expected that 'package manager' shall invoke this function prior to any
+# other API function. Thus any package shall redefine this function to perform
+# it's initialization here.
+#
+# optional
+#
+# Default implementation provides new API based on old API.
+#
+# Note: "INSTALL_BASE_DIR" and "VENDOR_LC" are initialized in
+# "environment_init()" at the very beginning.
+#
+package_on_load() {
+	log_message ""
+
+	# define "PACKAGE_NAME" and "PACKAGE_SUFFIX"
+	PACKAGE_NAME=$(package_name)
+	log_variable PACKAGE_NAME
+	PACKAGE_SUFFIX=$(package_suffix)
+	log_variable PACKAGE_SUFFIX
+
+	# define "INSTALL_DIR" for "install_dir()"
+	INSTALL_DIR=$(_install_dir "${PACKAGE_NAME}" "${PACKAGE_SUFFIX}")
+	log_variable INSTALL_DIR
+
+	# define "VERSION" for "version()"
+	# _version_file( PACKAGE_NAME, PACKAGE_SUFFIX ) // ${INSTALL_BASE_DIR}, ${VENDOR_LC}
+	VERSION_FILE=$(_version_file "${PACKAGE_NAME}" "${PACKAGE_SUFFIX}")
+	log_variable VERSION_FILE
+	VERSION=$(_load_version_from_file "${VERSION_FILE}")
+	log_variable VERSION
+
+	# define "DIST_VERSION" for "dist_version()"
+	# _dist_version_file( PACKAGE_NAME, PACKAGE_SUFFIX ) // ${DIST_DIR}
+	DIST_VERSION_FILE=$(_dist_version_file "${PACKAGE_NAME}" "${PACKAGE_SUFFIX}")
+	log_variable DIST_VERSION_FILE
+	DIST_VERSION=$(_load_version_from_file "${DIST_VERSION_FILE}")
+	log_variable DIST_VERSION
+
+	return
+}
+
+#
+# Old API
+#
+package_init() {
+	log_message ""
+	return
+}
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+#
+# optional
+#
+# Default implementation provides new API based on old API (see
+# "package_on_load()" default implementation). New packages must provide
+# alternative implementation.
+#
+# Depends on "package_on_load()"
+#
+install_dir() {
+	if [ -z "${INSTALL_DIR}" ] ; then _abort_execution "'INSTALL_DIR' is undefined" ; fi
+	echo "${INSTALL_DIR}"
+}
+
+#
+# optional
+#
+# Depends on "package_on_load()"
+#
+version() {
+	if [ -z "${VERSION}" ] ; then _abort_execution "'VERSION' is undefined" ; fi
+	echo "${VERSION}"
+}
+
+#
+# optional
+#
+# Depends on "package_on_load()"
+#
+dist_version() {
+	if [ -z "${DIST_VERSION}" ] ; then _abort_execution "'DIST_VERSION' is undefined" ; fi
+	echo "${DIST_VERSION}"
+}
+
+#
+# optional
+#
+# @return:
+#	"true" - if new version is greater than the old one or FORCE_INSTALL=1
+#	"false" - if new version is less than or equal to the old one
+#
+isInstallNecessary() {
+	log_message ""
+
+	log_variable FORCE_INSTALL
+	if [ -n "${FORCE_INSTALL}" ] ; then
+		echo "true"
+		return
+	fi
+
+	local VERSION=$(version)
+	log_variable VERSION
+	if [ -z "${VERSION}" ] ; then _abort_execution "'version()' erroneously returns empty version" ; fi
+
+	local DIST_VERSION=$(dist_version)
+	log_variable DIST_VERSION
+	if [ -z "${DIST_VERSION}" ] ; then _abort_execution "'dist_version()' erroneously returns empty version"; fi
+
+	# Put '1' digit at the beginning to avoid implicit
+	# octal interpretation of numbers starting with 0
+	local VERSION_DIGITS=1$(echo "${VERSION}" | tr -d -c "0-9")
+	log_variable VERSION_DIGITS
+	local DIST_VERSION_DIGITS=1$(echo "${DIST_VERSION}" | tr -d -c "0-9")
+	log_variable DIST_VERSION_DIGITS
+
+	# If current version < dist version, do install
+	if [ $VERSION_DIGITS -lt $DIST_VERSION_DIGITS ] ; then
+		echo "true"
+	else
+		echo "false"
+	fi
+}
+
+report_no_install_reason() {
+	log_message ""
+	return
+}
+
+#
+# ? optional
+#
+dependencies() {
+	log_message ""
+	return
+}
+
+#
+# ? optional
+#
+get_missing_requirements() {
+	log_message ""
+	return
+}
+
+#
+# ? optional
+#
+report_missing_requirements() {
+	if [ "$UNINSTALLMODE" ] ; then
+		return
+	fi
+
+	local MISSING_COMPONENT="$1"
+	if [ -n "${MISSING_COMPONENT}" ] ; then
+		show_nls_message "**** component '\${MISSING_COMPONENT}' is missing"
+		exit 1
+	fi
+}
+
+#
+# optional
+#
+do_install() {
+	log_message "installing '$(package_name)' package"
+	return
+}
+
+#
+# optional
+#
+do_uninstall() {
+	log_message "uninstalling '$(package_name)' package"
+	return
+}
+
+# report end of install
+after_install() {
+	log_message ""
+	return
+}
+
+# report end of uninstall
+after_uninstall() {
+	log_message ""
+	return
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+log_message "EOF"