skeleton.mk 5.24 KB
Newer Older
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
1
2
3
4
5
6
7
8
9
10
11
################################################################################
#
# skeleton
#
################################################################################

# 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_ADD_TOOLCHAIN_DEPENDENCY = NO
12
SKELETON_ADD_SKELETON_DEPENDENCY = NO
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
13

14
15
16
# The skeleton also handles the merged /usr case in the sysroot
SKELETON_INSTALL_STAGING = YES

Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
17
ifeq ($(BR2_ROOTFS_SKELETON_CUSTOM),y)
18

19
SKELETON_PATH = $(call qstrip,$(BR2_ROOTFS_SKELETON_CUSTOM_PATH))
20

21
22
23
24
25
26
ifeq ($(BR_BUILDING),y)
ifeq ($(SKELETON_PATH),)
$(error No path specified for the custom skeleton)
endif
endif

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
ifeq ($(BR2_ROOTFS_MERGED_USR),y)

# Ensure the user has prepared a merged /usr.
#
# 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_LIB_INODE = $(shell stat -c '%i' $(SKELETON_PATH)/lib/.)
SKELETON_BIN_INODE = $(shell stat -c '%i' $(SKELETON_PATH)/bin/.)
SKELETON_SBIN_INODE = $(shell stat -c '%i' $(SKELETON_PATH)/sbin/.)
SKELETON_USR_LIB_INODE = $(shell stat -c '%i' $(SKELETON_PATH)/usr/lib/.)
SKELETON_USR_BIN_INODE = $(shell stat -c '%i' $(SKELETON_PATH)/usr/bin/.)
SKELETON_USR_SBIN_INODE = $(shell stat -c '%i' $(SKELETON_PATH)/usr/sbin/.)

ifneq ($(SKELETON_LIB_INODE),$(SKELETON_USR_LIB_INODE))
SKELETON_CUSTOM_NOT_MERGED_USR += /lib
endif
ifneq ($(SKELETON_BIN_INODE),$(SKELETON_USR_BIN_INODE))
SKELETON_CUSTOM_NOT_MERGED_USR += /bin
endif
ifneq ($(SKELETON_SBIN_INODE),$(SKELETON_USR_SBIN_INODE))
SKELETON_CUSTOM_NOT_MERGED_USR += /sbin
endif

ifneq ($(SKELETON_CUSTOM_NOT_MERGED_USR),)
55
$(error The custom skeleton in $(SKELETON_PATH) is not \
56
57
58
59
60
61
	using a merged /usr for the following directories: \
	$(SKELETON_CUSTOM_NOT_MERGED_USR))
endif

endif # merged /usr

62
63
else # ! custom skeleton

Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
64
65
SKELETON_PATH = system/skeleton

66
67
endif # ! custom skeleton

Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
68
define SKELETON_INSTALL_TARGET_CMDS
69
70
71
	$(call SYSTEM_RSYNC,$(SKELETON_PATH),$(TARGET_DIR))
	$(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(TARGET_DIR))
	$(call SYSTEM_LIB_SYMLINK,$(TARGET_DIR))
72
73
	$(INSTALL) -m 0644 support/misc/target-dir-warning.txt \
		$(TARGET_DIR_WARNING_FILE)
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
74
75
endef

76
77
78
79
80
81
82
83
84
# For the staging dir, we don't really care about /bin and /sbin.
# But for consistency with the target dir, and to simplify the code,
# we still handle them for the merged or non-merged /usr cases.
# Since the toolchain is not yet available, the staging is not yet
# populated, so we need to create the directories in /usr
define SKELETON_INSTALL_STAGING_CMDS
	$(INSTALL) -d -m 0755 $(STAGING_DIR)/usr/lib
	$(INSTALL) -d -m 0755 $(STAGING_DIR)/usr/bin
	$(INSTALL) -d -m 0755 $(STAGING_DIR)/usr/sbin
85
86
	$(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(STAGING_DIR))
	$(call SYSTEM_LIB_SYMLINK,$(STAGING_DIR))
87
88
endef

89
90
91
92
# The TARGET_FINALIZE_HOOKS must be sourced only if the users choose to use the
# default skeleton.
ifeq ($(BR2_ROOTFS_SKELETON_DEFAULT),y)

Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
93
94
95
96
97
98
99
SKELETON_TARGET_GENERIC_HOSTNAME = $(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME))
SKELETON_TARGET_GENERIC_ISSUE = $(call qstrip,$(BR2_TARGET_GENERIC_ISSUE))
SKELETON_TARGET_GENERIC_ROOT_PASSWD = $(call qstrip,$(BR2_TARGET_GENERIC_ROOT_PASSWD))
SKELETON_TARGET_GENERIC_PASSWD_METHOD = $(call qstrip,$(BR2_TARGET_GENERIC_PASSWD_METHOD))
SKELETON_TARGET_GENERIC_BIN_SH = $(call qstrip,$(BR2_SYSTEM_BIN_SH))

ifneq ($(SKELETON_TARGET_GENERIC_HOSTNAME),)
100
define SKELETON_SET_HOSTNAME
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
101
102
103
104
105
	mkdir -p $(TARGET_DIR)/etc
	echo "$(SKELETON_TARGET_GENERIC_HOSTNAME)" > $(TARGET_DIR)/etc/hostname
	$(SED) '$$a \127.0.1.1\t$(SKELETON_TARGET_GENERIC_HOSTNAME)' \
		-e '/^127.0.1.1/d' $(TARGET_DIR)/etc/hosts
endef
106
TARGET_FINALIZE_HOOKS += SKELETON_SET_HOSTNAME
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
107
108
109
endif

ifneq ($(SKELETON_TARGET_GENERIC_ISSUE),)
110
define SKELETON_SET_ISSUE
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
111
112
113
	mkdir -p $(TARGET_DIR)/etc
	echo "$(SKELETON_TARGET_GENERIC_ISSUE)" > $(TARGET_DIR)/etc/issue
endef
114
TARGET_FINALIZE_HOOKS += SKELETON_SET_ISSUE
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
115
116
117
118
endif

ifeq ($(BR2_TARGET_ENABLE_ROOT_LOGIN),y)
ifeq ($(SKELETON_TARGET_GENERIC_ROOT_PASSWD),)
119
SKELETON_ROOT_PASSWORD =
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
120
else ifneq ($(filter $$1$$% $$5$$% $$6$$%,$(SKELETON_TARGET_GENERIC_ROOT_PASSWD)),)
121
SKELETON_ROOT_PASSWORD = '$(SKELETON_TARGET_GENERIC_ROOT_PASSWD)'
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
122
123
124
else
# This variable will only be evaluated in the finalize stage, so we can
# be sure that host-mkpasswd will have already been built by that time.
125
SKELETON_ROOT_PASSWORD = "`$(MKPASSWD) -m "$(SKELETON_TARGET_GENERIC_PASSWD_METHOD)" "$(SKELETON_TARGET_GENERIC_ROOT_PASSWD)"`"
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
126
127
endif
else # !BR2_TARGET_ENABLE_ROOT_LOGIN
128
SKELETON_ROOT_PASSWORD = "*"
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
129
130
endif

131
132
define SKELETON_SET_ROOT_PASSWD
	$(SED) s,^root:[^:]*:,root:$(SKELETON_ROOT_PASSWORD):, $(TARGET_DIR)/etc/shadow
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
133
endef
134
TARGET_FINALIZE_HOOKS += SKELETON_SET_ROOT_PASSWD
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
135
136

ifeq ($(BR2_SYSTEM_BIN_SH_NONE),y)
137
define SKELETON_BIN_SH
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
138
139
140
	rm -f $(TARGET_DIR)/bin/sh
endef
else
141
ifneq ($(SKELETON_TARGET_GENERIC_BIN_SH),)
142
define SKELETON_BIN_SH
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
143
144
145
	ln -sf $(SKELETON_TARGET_GENERIC_BIN_SH) $(TARGET_DIR)/bin/sh
endef
endif
146
endif
147
TARGET_FINALIZE_HOOKS += SKELETON_BIN_SH
Maxime Hadjinlian's avatar
Maxime Hadjinlian committed
148
149
150
151

endif # BR2_ROOTFS_SKELETON_DEFAULT

$(eval $(generic-package))