]> rtime.felk.cvut.cz Git - coffee/buildroot.git/blob - package/busybox/busybox.mk
busybox: bump version to 1.28.2
[coffee/buildroot.git] / package / busybox / busybox.mk
1 ################################################################################
2 #
3 # busybox
4 #
5 ################################################################################
6
7 BUSYBOX_VERSION = 1.28.2
8 BUSYBOX_SITE = http://www.busybox.net/downloads
9 BUSYBOX_SOURCE = busybox-$(BUSYBOX_VERSION).tar.bz2
10 BUSYBOX_LICENSE = GPL-2.0
11 BUSYBOX_LICENSE_FILES = LICENSE
12
13 define BUSYBOX_HELP_CMDS
14         @echo '  busybox-menuconfig     - Run BusyBox menuconfig'
15 endef
16
17 BUSYBOX_CFLAGS = \
18         $(TARGET_CFLAGS)
19
20 BUSYBOX_LDFLAGS = \
21         $(TARGET_LDFLAGS)
22
23 # Link against libtirpc if available so that we can leverage its RPC
24 # support for NFS mounting with BusyBox
25 ifeq ($(BR2_PACKAGE_LIBTIRPC),y)
26 BUSYBOX_DEPENDENCIES += libtirpc host-pkgconf
27 BUSYBOX_CFLAGS += "`$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`"
28 # Don't use LDFLAGS for -ltirpc, because LDFLAGS is used for
29 # the non-final link of modules as well.
30 BUSYBOX_CFLAGS_busybox += "`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`"
31 endif
32
33 BUSYBOX_BUILD_CONFIG = $(BUSYBOX_DIR)/.config
34 # Allows the build system to tweak CFLAGS
35 BUSYBOX_MAKE_ENV = \
36         $(TARGET_MAKE_ENV) \
37         CFLAGS="$(BUSYBOX_CFLAGS)" \
38         CFLAGS_busybox="$(BUSYBOX_CFLAGS_busybox)"
39
40 ifeq ($(BR2_REPRODUCIBLE),y)
41 BUSYBOX_MAKE_ENV += \
42         KCONFIG_NOTIMESTAMP=1
43 endif
44
45 BUSYBOX_MAKE_OPTS = \
46         CC="$(TARGET_CC)" \
47         ARCH=$(KERNEL_ARCH) \
48         PREFIX="$(TARGET_DIR)" \
49         EXTRA_LDFLAGS="$(BUSYBOX_LDFLAGS)" \
50         CROSS_COMPILE="$(TARGET_CROSS)" \
51         CONFIG_PREFIX="$(TARGET_DIR)" \
52         SKIP_STRIP=y
53
54 ifndef BUSYBOX_CONFIG_FILE
55 BUSYBOX_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG))
56 endif
57
58 BUSYBOX_KCONFIG_FILE = $(BUSYBOX_CONFIG_FILE)
59 BUSYBOX_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES))
60 BUSYBOX_KCONFIG_EDITORS = menuconfig xconfig gconfig
61 BUSYBOX_KCONFIG_OPTS = $(BUSYBOX_MAKE_OPTS)
62
63 ifeq ($(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y)
64 define BUSYBOX_PERMISSIONS
65 # Set permissions on all applets with BB_SUID_REQUIRE and BB_SUID_MAYBE.
66 # 12 Applets are pulled from applets.h using grep command :
67 #  grep -r -e "APPLET.*BB_SUID_REQUIRE\|APPLET.*BB_SUID_MAYBE" \
68 #  $(@D)/include/applets.h
69 # These applets are added to the device table and the makedev file
70 # ignores the files with type 'F' ( optional files).
71         /usr/bin/wall                    F 4755 0  0 - - - - -
72         /bin/ping                        F 4755 0  0 - - - - -
73         /bin/ping6                       F 4755 0  0 - - - - -
74         /usr/bin/crontab                 F 4755 0  0 - - - - -
75         /sbin/findfs                     F 4755 0  0 - - - - -
76         /bin/login                       F 4755 0  0 - - - - -
77         /bin/mount                       F 4755 0  0 - - - - -
78         /usr/bin/passwd                  F 4755 0  0 - - - - -
79         /bin/su                          F 4755 0  0 - - - - -
80         /usr/bin/traceroute              F 4755 0  0 - - - - -
81         /usr/bin/traceroute6             F 4755 0  0 - - - - -
82         /usr/bin/vlock                   F 4755 0  0 - - - - -
83 endef
84 else
85 define BUSYBOX_PERMISSIONS
86         /bin/busybox                     f 4755 0  0 - - - - -
87 endef
88 endif
89
90 # If mdev will be used for device creation enable it and copy S10mdev to /etc/init.d
91 ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),y)
92 define BUSYBOX_INSTALL_MDEV_SCRIPT
93         $(INSTALL) -D -m 0755 package/busybox/S10mdev \
94                 $(TARGET_DIR)/etc/init.d/S10mdev
95 endef
96 define BUSYBOX_INSTALL_MDEV_CONF
97         $(INSTALL) -D -m 0644 package/busybox/mdev.conf \
98                 $(TARGET_DIR)/etc/mdev.conf
99 endef
100 define BUSYBOX_SET_MDEV
101         $(call KCONFIG_ENABLE_OPT,CONFIG_MDEV,$(BUSYBOX_BUILD_CONFIG))
102         $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_CONF,$(BUSYBOX_BUILD_CONFIG))
103         $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_EXEC,$(BUSYBOX_BUILD_CONFIG))
104         $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_LOAD_FIRMWARE,$(BUSYBOX_BUILD_CONFIG))
105 endef
106 endif
107
108 # sha passwords need USE_BB_CRYPT_SHA
109 ifeq ($(BR2_TARGET_GENERIC_PASSWD_SHA256)$(BR2_TARGET_GENERIC_PASSWD_SHA512),y)
110 define BUSYBOX_SET_CRYPT_SHA
111         $(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_CRYPT_SHA,$(BUSYBOX_BUILD_CONFIG))
112 endef
113 endif
114
115 ifeq ($(BR2_USE_MMU),y)
116 define BUSYBOX_SET_MMU
117         $(call KCONFIG_DISABLE_OPT,CONFIG_NOMMU,$(BUSYBOX_BUILD_CONFIG))
118 endef
119 else
120 define BUSYBOX_SET_MMU
121         $(call KCONFIG_ENABLE_OPT,CONFIG_NOMMU,$(BUSYBOX_BUILD_CONFIG))
122         $(call KCONFIG_DISABLE_OPT,CONFIG_SWAPON,$(BUSYBOX_BUILD_CONFIG))
123         $(call KCONFIG_DISABLE_OPT,CONFIG_SWAPOFF,$(BUSYBOX_BUILD_CONFIG))
124         $(call KCONFIG_DISABLE_OPT,CONFIG_ASH,$(BUSYBOX_BUILD_CONFIG))
125         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH,$(BUSYBOX_BUILD_CONFIG))
126         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_BASH_COMPAT,$(BUSYBOX_BUILD_CONFIG))
127         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_BRACE_EXPANSION,$(BUSYBOX_BUILD_CONFIG))
128         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_HELP,$(BUSYBOX_BUILD_CONFIG))
129         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_INTERACTIVE,$(BUSYBOX_BUILD_CONFIG))
130         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_SAVEHISTORY,$(BUSYBOX_BUILD_CONFIG))
131         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_JOB,$(BUSYBOX_BUILD_CONFIG))
132         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_TICK,$(BUSYBOX_BUILD_CONFIG))
133         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_IF,$(BUSYBOX_BUILD_CONFIG))
134         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_LOOPS,$(BUSYBOX_BUILD_CONFIG))
135         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_CASE,$(BUSYBOX_BUILD_CONFIG))
136         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_FUNCTIONS,$(BUSYBOX_BUILD_CONFIG))
137         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_LOCAL,$(BUSYBOX_BUILD_CONFIG))
138         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_RANDOM_SUPPORT,$(BUSYBOX_BUILD_CONFIG))
139         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_EXPORT_N,$(BUSYBOX_BUILD_CONFIG))
140         $(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_MODE_X,$(BUSYBOX_BUILD_CONFIG))
141 endef
142 endif
143
144 # If we're using static libs do the same for busybox
145 ifeq ($(BR2_STATIC_LIBS),y)
146 define BUSYBOX_PREFER_STATIC
147         $(call KCONFIG_ENABLE_OPT,CONFIG_STATIC,$(BUSYBOX_BUILD_CONFIG))
148 endef
149 endif
150
151 # Disable shadow passwords support if unsupported by the C library
152 ifeq ($(BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS),)
153 define BUSYBOX_INTERNAL_SHADOW_PASSWORDS
154         $(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_PWD_GRP,$(BUSYBOX_BUILD_CONFIG))
155         $(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_SHADOW,$(BUSYBOX_BUILD_CONFIG))
156 endef
157 endif
158
159 # We also need to use internal shadow password functions when using
160 # the musl C library, since some of them are not yet implemented by
161 # musl.
162 #
163 # Do not use utmp/wmtp support. wmtp support is not available in musl,
164 # and utmp support is not sufficient for Busybox.
165 ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
166 define BUSYBOX_MUSL_TWEAKS
167         $(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_PWD_GRP,$(BUSYBOX_BUILD_CONFIG))
168         $(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_SHADOW,$(BUSYBOX_BUILD_CONFIG))
169         $(call KCONFIG_DISABLE_OPT,CONFIG_FEATURE_UTMP,$(BUSYBOX_BUILD_CONFIG))
170         $(call KCONFIG_DISABLE_OPT,CONFIG_FEATURE_WTMP,$(BUSYBOX_BUILD_CONFIG))
171 endef
172 endif
173
174 define BUSYBOX_INSTALL_UDHCPC_SCRIPT
175         if grep -q CONFIG_UDHCPC=y $(@D)/.config; then \
176                 $(INSTALL) -m 0755 -D package/busybox/udhcpc.script \
177                         $(TARGET_DIR)/usr/share/udhcpc/default.script; \
178                 $(INSTALL) -m 0755 -d \
179                         $(TARGET_DIR)/usr/share/udhcpc/default.script.d; \
180         fi
181 endef
182
183 ifeq ($(BR2_INIT_BUSYBOX),y)
184
185 define BUSYBOX_SET_INIT
186         $(call KCONFIG_ENABLE_OPT,CONFIG_INIT,$(BUSYBOX_BUILD_CONFIG))
187 endef
188
189 ifeq ($(BR2_TARGET_GENERIC_GETTY),y)
190 define BUSYBOX_SET_GETTY
191         $(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(SYSTEM_GETTY_PORT)::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM) #~' \
192                 $(TARGET_DIR)/etc/inittab
193 endef
194 BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_GETTY
195 endif # BR2_TARGET_GENERIC_GETTY
196
197 BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB
198
199 endif # BR2_INIT_BUSYBOX
200
201 ifeq ($(BR2_PACKAGE_BUSYBOX_SELINUX),y)
202 BUSYBOX_DEPENDENCIES += host-pkgconf libselinux libsepol
203 define BUSYBOX_SET_SELINUX
204         $(call KCONFIG_ENABLE_OPT,CONFIG_SELINUX,$(BUSYBOX_BUILD_CONFIG))
205         $(call KCONFIG_ENABLE_OPT,CONFIG_SELINUXENABLED,$(BUSYBOX_BUILD_CONFIG))
206 endef
207 endif
208
209 ifeq ($(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y)
210 define BUSYBOX_SET_INDIVIDUAL_BINARIES
211         $(call KCONFIG_ENABLE_OPT,CONFIG_BUILD_LIBBUSYBOX,$(BUSYBOX_BUILD_CONFIG))
212         $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_INDIVIDUAL,$(BUSYBOX_BUILD_CONFIG))
213 endef
214
215 define BUSYBOX_INSTALL_INDIVIDUAL_BINARIES
216         rm -f $(TARGET_DIR)/bin/busybox
217 endef
218 endif
219
220 define BUSYBOX_INSTALL_LOGGING_SCRIPT
221         if grep -q CONFIG_SYSLOGD=y $(@D)/.config; then \
222                 $(INSTALL) -m 0755 -D package/busybox/S01logging \
223                         $(TARGET_DIR)/etc/init.d/S01logging; \
224         fi
225 endef
226
227 ifeq ($(BR2_INIT_BUSYBOX),y)
228 define BUSYBOX_INSTALL_INITTAB
229         $(INSTALL) -D -m 0644 package/busybox/inittab $(TARGET_DIR)/etc/inittab
230 endef
231 endif
232
233 ifeq ($(BR2_PACKAGE_BUSYBOX_WATCHDOG),y)
234 define BUSYBOX_SET_WATCHDOG
235         $(call KCONFIG_ENABLE_OPT,CONFIG_WATCHDOG,$(BUSYBOX_BUILD_CONFIG))
236 endef
237 define BUSYBOX_INSTALL_WATCHDOG_SCRIPT
238         $(INSTALL) -D -m 0755 package/busybox/S15watchdog \
239                 $(TARGET_DIR)/etc/init.d/S15watchdog
240         $(SED) s/PERIOD/$(call qstrip,$(BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD))/ \
241                 $(TARGET_DIR)/etc/init.d/S15watchdog
242 endef
243 endif
244
245 # PAM support requires thread support in the toolchain
246 ifeq ($(BR2_PACKAGE_LINUX_PAM)$(BR2_TOOLCHAIN_HAS_THREADS),yy)
247 define BUSYBOX_LINUX_PAM
248         $(call KCONFIG_ENABLE_OPT,CONFIG_PAM,$(BUSYBOX_BUILD_CONFIG))
249 endef
250 BUSYBOX_DEPENDENCIES += linux-pam
251 else
252 define BUSYBOX_LINUX_PAM
253         $(call KCONFIG_DISABLE_OPT,CONFIG_PAM,$(BUSYBOX_BUILD_CONFIG))
254 endef
255 endif
256
257 # Telnet support
258 define BUSYBOX_INSTALL_TELNET_SCRIPT
259         if grep -q CONFIG_FEATURE_TELNETD_STANDALONE=y $(@D)/.config; then \
260                 $(INSTALL) -m 0755 -D package/busybox/S50telnet \
261                         $(TARGET_DIR)/etc/init.d/S50telnet ; \
262         fi
263 endef
264
265 # Enable "noclobber" in install.sh, to prevent BusyBox from overwriting any
266 # full-blown versions of apps installed by other packages with sym/hard links.
267 define BUSYBOX_NOCLOBBER_INSTALL
268         $(SED) 's/^noclobber="0"$$/noclobber="1"/' $(@D)/applets/install.sh
269 endef
270
271 define BUSYBOX_KCONFIG_FIXUP_CMDS
272         $(BUSYBOX_SET_MMU)
273         $(BUSYBOX_PREFER_STATIC)
274         $(BUSYBOX_SET_MDEV)
275         $(BUSYBOX_SET_CRYPT_SHA)
276         $(BUSYBOX_LINUX_PAM)
277         $(BUSYBOX_INTERNAL_SHADOW_PASSWORDS)
278         $(BUSYBOX_SET_INIT)
279         $(BUSYBOX_SET_WATCHDOG)
280         $(BUSYBOX_SET_SELINUX)
281         $(BUSYBOX_SET_INDIVIDUAL_BINARIES)
282         $(BUSYBOX_MUSL_TWEAKS)
283 endef
284
285 define BUSYBOX_CONFIGURE_CMDS
286         $(BUSYBOX_NOCLOBBER_INSTALL)
287 endef
288
289 define BUSYBOX_BUILD_CMDS
290         $(BUSYBOX_MAKE_ENV) $(MAKE) $(BUSYBOX_MAKE_OPTS) -C $(@D)
291 endef
292
293 define BUSYBOX_INSTALL_TARGET_CMDS
294         $(BUSYBOX_MAKE_ENV) $(MAKE) $(BUSYBOX_MAKE_OPTS) -C $(@D) install
295         $(BUSYBOX_INSTALL_INITTAB)
296         $(BUSYBOX_INSTALL_UDHCPC_SCRIPT)
297         $(BUSYBOX_INSTALL_MDEV_CONF)
298 endef
299
300 define BUSYBOX_INSTALL_INIT_SYSV
301         $(BUSYBOX_INSTALL_MDEV_SCRIPT)
302         $(BUSYBOX_INSTALL_LOGGING_SCRIPT)
303         $(BUSYBOX_INSTALL_WATCHDOG_SCRIPT)
304         $(BUSYBOX_INSTALL_TELNET_SCRIPT)
305         $(BUSYBOX_INSTALL_INDIVIDUAL_BINARIES)
306 endef
307
308 # Checks to give errors that the user can understand
309 # Must be before we call to kconfig-package
310 ifeq ($(BR2_PACKAGE_BUSYBOX)$(BR_BUILDING),yy)
311 ifeq ($(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG)),)
312 $(error No BusyBox configuration file specified, check your BR2_PACKAGE_BUSYBOX_CONFIG setting)
313 endif
314 endif
315
316 $(eval $(kconfig-package))