################################################################################
#
# system-related variables and macros
#
################################################################################

# This file exists to define variables and macros that pertain to the system
# settings, like rsyncing a directory for skeletons, or the /lib vs. /usr/lib
# symlink handling.
#
# Some variables may be used as conditions in Makefile code, so they must be
# defined properly before they are used; this file is included early, before
# any package is.

# - SYSTEM_USR_SYMLINKS_OR_DIRS
#   create /lib, /bin and /sbin, either as directories or as symlinks to
#   their /usr conterparts
#
# - SYSTEM_RSYNC
#   rsync $(1) to $(2), with proper exclusions and rights
#
# - SYSTEM_LIB_SYMLINK
#   create the appropriate /lib{32,64} symlinks
#
# - SYSTEM_GETTY_PORT
# - SYSTEM_GETTY_BAUDRATE
# - SYSTEM_GETTY_TERM
# - SYSTEM_GETTY_OPTIONS
#   the un-quoted getty setting
#
# - SYSTEM_REMOUNT_ROOT_INITTAB
#   set inittab to remount root read-write or read-only
#

# This function handles the merged or non-merged /usr, and merged or
# non-merged /usr/bin cases
ifeq ($(BR2_ROOTFS_MERGED_USR),y)
ifeq ($(BR2_ROOTFS_MERGED_BIN),y)
define SYSTEM_SBIN_SYMLINKS_OR_DIRS
	ln -snf bin $(1)/usr/sbin
endef
else
define SYSTEM_SBIN_SYMLINKS_OR_DIRS
	$(INSTALL) -d -m 0755 $(1)/usr/sbin
endef
endif
define SYSTEM_USR_SYMLINKS_OR_DIRS
	ln -snf usr/bin $(1)/bin
	ln -snf usr/sbin $(1)/sbin
	ln -snf usr/lib $(1)/lib
	$(SYSTEM_SBIN_SYMLINKS_OR_DIRS)
endef
else
define SYSTEM_USR_SYMLINKS_OR_DIRS
	$(INSTALL) -d -m 0755 $(1)/bin
	$(INSTALL) -d -m 0755 $(1)/sbin
	$(INSTALL) -d -m 0755 $(1)/lib
	$(INSTALL) -d -m 0755 $(1)/usr/sbin
endef
endif

# This function rsyncs the skeleton directory in $(1) to the destination
# in $(2), which should be either $(TARGET_DIR) or $(STAGING_DIR)
define SYSTEM_RSYNC
	rsync -a --ignore-times $(RSYNC_VCS_EXCLUSIONS) \
		--chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
		$(1)/ $(2)/
endef

# Make a symlink lib32->lib or lib64->lib as appropriate.
# MIPS64/n32 requires lib32 even though it's a 64-bit arch. However, since gcc
# 5.1.0 internal compiler paths in sysroot are relative to lib64, so we must
# create both.
# $(1): base dir (either staging or target)
ifeq ($(BR2_MIPS_NABI32),y)
define SYSTEM_LIB_SYMLINK
	ln -snf lib $(1)/lib64
	ln -snf lib $(1)/usr/lib64
	ln -snf lib $(1)/lib32
	ln -snf lib $(1)/usr/lib32
endef
else ifeq ($(BR2_ARCH_IS_64),y)
define SYSTEM_LIB_SYMLINK
	ln -snf lib $(1)/lib64
	ln -snf lib $(1)/usr/lib64
endef
else
define SYSTEM_LIB_SYMLINK
	ln -snf lib $(1)/lib32
	ln -snf lib $(1)/usr/lib32
endef
endif

SYSTEM_GETTY_PORT = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_PORT))
SYSTEM_GETTY_BAUDRATE = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_BAUDRATE))
SYSTEM_GETTY_TERM = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_TERM))
SYSTEM_GETTY_OPTIONS = $(call qstrip,$(BR2_TARGET_GENERIC_GETTY_OPTIONS))

ifeq ($(BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW),y)
# Find commented line, if any, and remove leading '#'s
define SYSTEM_REMOUNT_ROOT_INITTAB
	$(SED) '/^#.*-o remount,rw \/$$/s~^#\+~~' $(TARGET_DIR)/etc/inittab
endef
else
# Find uncommented line, if any, and add a leading '#'
define SYSTEM_REMOUNT_ROOT_INITTAB
	$(SED) '/^[^#].*-o remount,rw \/$$/s~^~#~' $(TARGET_DIR)/etc/inittab
endef
endif

ifeq ($(BR_BUILDING)$(BR2_SYSTEM_DEFAULT_PATH),y"")
$(error BR2_SYSTEM_DEFAULT_PATH can't be empty)
endif
