![Yann E. MORIN](/assets/img/avatar_default.png)
This partially reverts commitcf6d321e9d
. The underlying reason for doing the checks is to ensure that a merged-usr setting is properly enforced, even for custom skeletons. Before that patch, a custom skeleton where both /bin and /usr/bin were missing was accepted; but then the first package that intalled something in /bin would create it as a directory, thus breaking the merged-usr situation. Ditto sbin and lib, of course.cf6d321
was created to detect that situation, and the fix was to require that both directories do exist in the custom skeleton, so that we new the check for consistency were OK, in all cases. However, that broke existing skeletons which where missing both directories, and some people are shinning about it... The crux of the problem is that Buildroot should be responsible for creating the directories or the symliks when they are missing, and only fail if the existing ones are incorrect, but not impose the burden on the user. A situation where the problem arises is when a skeleton is shared between various builds, some using a merged-usr while other do not. We fix that by reverting the offending changes change, back to the previous behaviour. We keep the stderr redirection in stat calls, and the variable renaming. A proper fix to create the missing directories can be added later. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Arnout Vandecappelle <arnout@mind.be> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
82 lines
3.2 KiB
Makefile
82 lines
3.2 KiB
Makefile
################################################################################
|
|
#
|
|
# skeleton-custom
|
|
#
|
|
################################################################################
|
|
|
|
# The skeleton can't depend on the toolchain, since all packages depends on the
|
|
# skeleton and the toolchain is a target package, as is skeleton.
|
|
# Hence, skeleton would depends on the toolchain and the toolchain would depend
|
|
# on skeleton.
|
|
SKELETON_CUSTOM_ADD_TOOLCHAIN_DEPENDENCY = NO
|
|
SKELETON_CUSTOM_ADD_SKELETON_DEPENDENCY = NO
|
|
|
|
SKELETON_CUSTOM_PROVIDES = skeleton
|
|
|
|
SKELETON_CUSTOM_INSTALL_STAGING = YES
|
|
|
|
SKELETON_CUSTOM_PATH = $(call qstrip,$(BR2_ROOTFS_SKELETON_CUSTOM_PATH))
|
|
|
|
ifeq ($(BR2_PACKAGE_SKELETON_CUSTOM)$(BR_BUILDING),yy)
|
|
ifeq ($(SKELETON_CUSTOM_PATH),)
|
|
$(error No path specified for the custom skeleton)
|
|
endif
|
|
endif
|
|
|
|
# Extract the inode numbers for all of those directories. In case any is
|
|
# a symlink, we want to get the inode of the pointed-to directory, so we
|
|
# append '/.' to be sure we get the target directory. Since the symlinks
|
|
# can be anyway (/bin -> /usr/bin or /usr/bin -> /bin), we do that for
|
|
# all of them.
|
|
#
|
|
SKELETON_CUSTOM_LIB_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/lib/. 2>/dev/null)
|
|
SKELETON_CUSTOM_BIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/bin/. 2>/dev/null)
|
|
SKELETON_CUSTOM_SBIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/sbin/. 2>/dev/null)
|
|
SKELETON_CUSTOM_USR_LIB_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/usr/lib/. 2>/dev/null)
|
|
SKELETON_CUSTOM_USR_BIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/usr/bin/. 2>/dev/null)
|
|
SKELETON_CUSTOM_USR_SBIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/usr/sbin/. 2>/dev/null)
|
|
|
|
# For a merged /usr, ensure that /lib, /bin and /sbin and their /usr
|
|
# counterparts are appropriately setup as symlinks ones to the others.
|
|
ifeq ($(BR2_ROOTFS_MERGED_USR),y)
|
|
|
|
ifneq ($(SKELETON_CUSTOM_LIB_INODE),$(SKELETON_CUSTOM_USR_LIB_INODE))
|
|
SKELETON_CUSTOM_NOT_MERGED_USR_DIRS += /lib
|
|
endif
|
|
ifneq ($(SKELETON_CUSTOM_BIN_INODE),$(SKELETON_CUSTOM_USR_BIN_INODE))
|
|
SKELETON_CUSTOM_NOT_MERGED_USR_DIRS += /bin
|
|
endif
|
|
ifneq ($(SKELETON_CUSTOM_SBIN_INODE),$(SKELETON_CUSTOM_USR_SBIN_INODE))
|
|
SKELETON_CUSTOM_NOT_MERGED_USR_DIRS += /sbin
|
|
endif
|
|
|
|
endif # merged /usr
|
|
|
|
ifeq ($(BR2_PACKAGE_SKELETON_CUSTOM)$(BR_BUILDING),yy)
|
|
ifneq ($(SKELETON_CUSTOM_NOT_MERGED_USR_DIRS),)
|
|
$(error The custom skeleton in $(SKELETON_CUSTOM_PATH) is not \
|
|
using a merged /usr for the following directories: \
|
|
$(SKELETON_CUSTOM_NOT_MERGED_USR_DIRS))
|
|
endif
|
|
endif
|
|
|
|
# The target-dir-warning file and the lib{32,64} symlinks are the only
|
|
# things we customise in the custom skeleton.
|
|
define SKELETON_CUSTOM_INSTALL_TARGET_CMDS
|
|
$(call SYSTEM_RSYNC,$(SKELETON_CUSTOM_PATH),$(TARGET_DIR))
|
|
$(call SYSTEM_LIB_SYMLINK,$(TARGET_DIR))
|
|
$(INSTALL) -m 0644 support/misc/target-dir-warning.txt \
|
|
$(TARGET_DIR_WARNING_FILE)
|
|
endef
|
|
|
|
# For the staging dir, we don't really care what we install, but we
|
|
# need the /lib and /usr/lib appropriately setup. Since we ensure,
|
|
# above, that they are correct in the skeleton, we can simply copy the
|
|
# skeleton to staging.
|
|
define SKELETON_CUSTOM_INSTALL_STAGING_CMDS
|
|
$(call SYSTEM_RSYNC,$(SKELETON_CUSTOM_PATH),$(STAGING_DIR))
|
|
$(call SYSTEM_LIB_SYMLINK,$(STAGING_DIR))
|
|
endef
|
|
|
|
$(eval $(generic-package))
|