xref: /OK3568_Linux_fs/buildroot/package/busybox/busybox.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# busybox
4#
5################################################################################
6
7BUSYBOX_VERSION = 1.36.0
8BUSYBOX_SITE = https://www.busybox.net/downloads
9BUSYBOX_SOURCE = busybox-$(BUSYBOX_VERSION).tar.bz2
10BUSYBOX_LICENSE = GPL-2.0, bzip2-1.0.4
11BUSYBOX_LICENSE_FILES = LICENSE archival/libarchive/bz/LICENSE
12BUSYBOX_CPE_ID_VENDOR = busybox
13
14# 0003-libbb-sockaddr2str-ensure-only-printable-characters-.patch
15# 0004-nslookup-sanitize-all-printed-strings-with-printable.patch
16BUSYBOX_IGNORE_CVES += CVE-2022-28391
17
18BUSYBOX_CFLAGS = \
19	$(TARGET_CFLAGS)
20
21BUSYBOX_LDFLAGS = \
22	$(TARGET_LDFLAGS)
23
24# Packages that provide commands that may also be busybox applets:
25BUSYBOX_DEPENDENCIES = \
26	$(if $(BR2_PACKAGE_ATTR),attr) \
27	$(if $(BR2_PACKAGE_BASH),bash) \
28	$(if $(BR2_PACKAGE_BC),bc) \
29	$(if $(BR2_PACKAGE_BINUTILS),binutils) \
30	$(if $(BR2_PACKAGE_COREUTILS),coreutils) \
31	$(if $(BR2_PACKAGE_CPIO),cpio) \
32	$(if $(BR2_PACKAGE_DCRON),dcron) \
33	$(if $(BR2_PACKAGE_DEBIANUTILS),debianutils) \
34	$(if $(BR2_PACKAGE_DIFFUTILS),diffutils) \
35	$(if $(BR2_PACKAGE_DOS2UNIX),dos2unix) \
36	$(if $(BR2_PACKAGE_DOSFSTOOLS),dosfstools) \
37	$(if $(BR2_PACKAGE_E2FSPROGS),e2fsprogs) \
38	$(if $(BR2_PACKAGE_FBSET),fbset) \
39	$(if $(BR2_PACKAGE_GAWK),gawk) \
40	$(if $(BR2_PACKAGE_GREP),grep) \
41	$(if $(BR2_PACKAGE_GZIP),gzip) \
42	$(if $(BR2_PACKAGE_I2C_TOOLS),i2c-tools) \
43	$(if $(BR2_PACKAGE_IFENSLAVE),ifenslave) \
44	$(if $(BR2_PACKAGE_IFPLUGD),ifplugd) \
45	$(if $(BR2_PACKAGE_IFUPDOWN),ifupdown) \
46	$(if $(BR2_PACKAGE_IPCALC),ipcalc) \
47	$(if $(BR2_PACKAGE_IPROUTE2),iproute2) \
48	$(if $(BR2_PACKAGE_IPUTILS),iputils) \
49	$(if $(BR2_PACKAGE_KMOD),kmod) \
50	$(if $(BR2_PACKAGE_LESS),less) \
51	$(if $(BR2_PACKAGE_LSOF),lsof) \
52	$(if $(BR2_PACKAGE_MTD),mtd) \
53	$(if $(BR2_PACKAGE_NET_TOOLS),net-tools) \
54	$(if $(BR2_PACKAGE_NETCAT),netcat) \
55	$(if $(BR2_PACKAGE_NETCAT_OPENBSD),netcat-openbsd) \
56	$(if $(BR2_PACKAGE_NMAP),nmap) \
57	$(if $(BR2_PACKAGE_NTP),ntp) \
58	$(if $(BR2_PACKAGE_PCIUTILS),pciutils) \
59	$(if $(BR2_PACKAGE_PROCPS_NG),procps-ng) \
60	$(if $(BR2_PACKAGE_PSMISC),psmisc) \
61	$(if $(BR2_PACKAGE_START_STOP_DAEMON),start-stop-daemon) \
62	$(if $(BR2_PACKAGE_SYSKLOGD),sysklogd) \
63	$(if $(BR2_PACKAGE_SYSTEMD),systemd) \
64	$(if $(BR2_PACKAGE_SYSVINIT),sysvinit) \
65	$(if $(BR2_PACKAGE_TAR),tar) \
66	$(if $(BR2_PACKAGE_TFTPD),tftpd) \
67	$(if $(BR2_PACKAGE_TRACEROUTE),traceroute) \
68	$(if $(BR2_PACKAGE_UNZIP),unzip) \
69	$(if $(BR2_PACKAGE_USBUTILS),usbutils) \
70	$(if $(BR2_PACKAGE_UTIL_LINUX),util-linux) \
71	$(if $(BR2_PACKAGE_VIM),vim) \
72	$(if $(BR2_PACKAGE_WATCHDOG),watchdog) \
73	$(if $(BR2_PACKAGE_WGET),wget) \
74	$(if $(BR2_PACKAGE_WHOIS),whois)
75
76# Link against libtirpc if available so that we can leverage its RPC
77# support for NFS mounting with BusyBox
78ifeq ($(BR2_PACKAGE_LIBTIRPC),y)
79ifeq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_BUSYBOX_STATIC),)
80BUSYBOX_DEPENDENCIES += libtirpc host-pkgconf
81BUSYBOX_CFLAGS += "`$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`"
82# Don't use LDFLAGS for -ltirpc, because LDFLAGS is used for
83# the non-final link of modules as well.
84BUSYBOX_CFLAGS_busybox += "`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`"
85endif
86endif
87
88# Allows the build system to tweak CFLAGS
89BUSYBOX_MAKE_ENV = \
90	$(TARGET_MAKE_ENV) \
91	CFLAGS="$(BUSYBOX_CFLAGS)" \
92	CFLAGS_busybox="$(BUSYBOX_CFLAGS_busybox)"
93
94ifeq ($(BR2_REPRODUCIBLE),y)
95BUSYBOX_MAKE_ENV += \
96	KCONFIG_NOTIMESTAMP=1
97endif
98
99BUSYBOX_MAKE_OPTS = \
100	AR="$(TARGET_AR)" \
101	NM="$(TARGET_NM)" \
102	RANLIB="$(TARGET_RANLIB)" \
103	CC="$(TARGET_CC)" \
104	ARCH=$(NORMALIZED_ARCH) \
105	PREFIX="$(TARGET_DIR)" \
106	EXTRA_LDFLAGS="$(BUSYBOX_LDFLAGS)" \
107	CROSS_COMPILE="$(TARGET_CROSS)" \
108	CONFIG_PREFIX="$(TARGET_DIR)" \
109	SKIP_STRIP=y
110
111# specifying BUSYBOX_CONFIG_FILE on the command-line overrides the .config
112# setting.
113# check-package disable Ifdef
114ifndef BUSYBOX_CONFIG_FILE
115BUSYBOX_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG))
116endif
117
118BUSYBOX_KCONFIG_SUPPORTS_DEFCONFIG = NO
119BUSYBOX_KCONFIG_FILE = $(BUSYBOX_CONFIG_FILE)
120BUSYBOX_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES))
121BUSYBOX_KCONFIG_EDITORS = menuconfig xconfig gconfig
122BUSYBOX_KCONFIG_OPTS = $(BUSYBOX_MAKE_OPTS)
123
124ifeq ($(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y)
125define BUSYBOX_PERMISSIONS
126# Set permissions on all applets with BB_SUID_REQUIRE and BB_SUID_MAYBE.
127# 12 Applets are pulled from applets.h using grep command :
128#  grep -r -e "APPLET.*BB_SUID_REQUIRE\|APPLET.*BB_SUID_MAYBE" \
129#  $(@D)/include/applets.h
130# These applets are added to the device table and the makedev file
131# ignores the files with type 'F' ( optional files).
132	/usr/bin/wall 			 F 4755 0  0 - - - - -
133	/bin/ping 			 F 4755 0  0 - - - - -
134	/bin/ping6 			 F 4755 0  0 - - - - -
135	/usr/bin/crontab 		 F 4755 0  0 - - - - -
136	/sbin/findfs 			 F 4755 0  0 - - - - -
137	/bin/login 			 F 4755 0  0 - - - - -
138	/bin/mount 			 F 4755 0  0 - - - - -
139	/usr/bin/passwd 		 F 4755 0  0 - - - - -
140	/bin/su 			 F 4755 0  0 - - - - -
141	/usr/bin/traceroute 		 F 4755 0  0 - - - - -
142	/usr/bin/traceroute6 		 F 4755 0  0 - - - - -
143	/usr/bin/vlock 			 F 4755 0  0 - - - - -
144endef
145else
146define BUSYBOX_PERMISSIONS
147	/bin/busybox                     f 4755 0  0 - - - - -
148endef
149endif
150
151# If mdev will be used for device creation enable it and copy S10mdev to /etc/init.d
152ifeq ($(BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV),y)
153define BUSYBOX_INSTALL_MDEV_SCRIPT
154	$(INSTALL) -D -m 0755 package/busybox/S10mdev \
155		$(TARGET_DIR)/etc/init.d/S10mdev
156endef
157define BUSYBOX_INSTALL_MDEV_CONF
158	$(INSTALL) -D -m 0644 package/busybox/mdev.conf \
159		$(TARGET_DIR)/etc/mdev.conf
160endef
161define BUSYBOX_SET_MDEV
162	$(call KCONFIG_ENABLE_OPT,CONFIG_MDEV)
163	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_CONF)
164	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_EXEC)
165	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_MDEV_LOAD_FIRMWARE)
166endef
167endif
168
169# sha passwords need USE_BB_CRYPT_SHA
170ifeq ($(BR2_TARGET_GENERIC_PASSWD_SHA256)$(BR2_TARGET_GENERIC_PASSWD_SHA512),y)
171define BUSYBOX_SET_CRYPT_SHA
172	$(call KCONFIG_ENABLE_OPT,CONFIG_USE_BB_CRYPT_SHA)
173endef
174endif
175
176ifeq ($(BR2_USE_MMU),y)
177define BUSYBOX_SET_MMU
178	$(call KCONFIG_DISABLE_OPT,CONFIG_NOMMU)
179endef
180else
181define BUSYBOX_SET_MMU
182	$(call KCONFIG_ENABLE_OPT,CONFIG_NOMMU)
183	$(call KCONFIG_DISABLE_OPT,CONFIG_SWAPON)
184	$(call KCONFIG_DISABLE_OPT,CONFIG_SWAPOFF)
185	$(call KCONFIG_DISABLE_OPT,CONFIG_ASH)
186	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH)
187	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_BASH_COMPAT)
188	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_BRACE_EXPANSION)
189	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_HELP)
190	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_INTERACTIVE)
191	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_SAVEHISTORY)
192	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_JOB)
193	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_TICK)
194	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_IF)
195	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_LOOPS)
196	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_CASE)
197	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_FUNCTIONS)
198	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_LOCAL)
199	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_RANDOM_SUPPORT)
200	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_EXPORT_N)
201	$(call KCONFIG_ENABLE_OPT,CONFIG_HUSH_MODE_X)
202endef
203endif
204
205ifneq ($(BR2_STATIC_LIBS)$(BR2_PACKAGE_BUSYBOX_STATIC),)
206define BUSYBOX_SET_STATIC
207	$(call KCONFIG_ENABLE_OPT,CONFIG_STATIC)
208endef
209else
210define BUSYBOX_SET_STATIC
211	$(call KCONFIG_DISABLE_OPT,CONFIG_STATIC)
212endef
213endif
214
215define BUSYBOX_INSTALL_UDHCPC_SCRIPT
216	if grep -q CONFIG_UDHCPC=y $(@D)/.config; then \
217		$(INSTALL) -m 0755 -D package/busybox/udhcpc.script \
218			$(TARGET_DIR)/usr/share/udhcpc/default.script; \
219		$(INSTALL) -m 0755 -d \
220			$(TARGET_DIR)/usr/share/udhcpc/default.script.d; \
221	fi
222endef
223
224define BUSYBOX_INSTALL_ZCIP_SCRIPT
225	if grep -q CONFIG_ZCIP=y $(@D)/.config; then \
226		$(INSTALL) -m 0755 -D $(@D)/examples/zcip.script \
227			$(TARGET_DIR)/usr/share/zcip/default.script; \
228	fi
229endef
230
231ifeq ($(BR2_INIT_BUSYBOX),y)
232
233define BUSYBOX_SET_INIT
234	$(call KCONFIG_ENABLE_OPT,CONFIG_INIT)
235endef
236
237ifeq ($(BR2_TARGET_SERIAL_SHELL_GETTY),y)
238BUSYBOX_SERIAL_SHELL = "$(SYSTEM_GETTY_PORT)::respawn:/sbin/getty -L $(SYSTEM_GETTY_OPTIONS) $(SYSTEM_GETTY_PORT) $(SYSTEM_GETTY_BAUDRATE) $(SYSTEM_GETTY_TERM)"
239else
240ifeq ($(BR2_TARGET_SERIAL_SHELL_SH),y)
241BUSYBOX_SERIAL_SHELL = "::respawn:-/bin/sh"
242else ifeq ($(BR2_TARGET_SERIAL_SHELL_LOGIN),y)
243BUSYBOX_SERIAL_SHELL = "::respawn:-/bin/login"
244else
245BUSYBOX_SERIAL_SHELL =
246endif
247
248BUSYBOX_SERIAL_SHELL += " \# ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100"
249endif # BR2_TARGET_GENERIC_GETTY
250
251define BUSYBOX_SET_GETTY
252	$(SED) '/# GENERIC_SERIAL$$/s~^.*#~$(call qstrip,$(BUSYBOX_SERIAL_SHELL)) #~' \
253		$(TARGET_DIR)/etc/inittab
254endef
255BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_SET_GETTY
256
257BUSYBOX_TARGET_FINALIZE_HOOKS += SYSTEM_REMOUNT_ROOT_INITTAB
258
259endif # BR2_INIT_BUSYBOX
260
261ifeq ($(BR2_PACKAGE_BUSYBOX_SELINUX),y)
262BUSYBOX_DEPENDENCIES += host-pkgconf libselinux libsepol
263define BUSYBOX_SET_SELINUX
264	$(call KCONFIG_ENABLE_OPT,CONFIG_SELINUX)
265	$(call KCONFIG_ENABLE_OPT,CONFIG_SELINUXENABLED)
266endef
267endif
268
269# enable relevant options to allow the Busybox less applet to be used
270# as a systemd pager
271ifeq ($(BR2_PACKAGE_SYSTEMD):$(BR2_PACKAGE_LESS),y:)
272define BUSYBOX_SET_LESS_FLAGS
273	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_DASHCMD)
274	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_RAW)
275	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_TRUNCATE)
276	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_FLAGS)
277	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_LESS_ENV)
278endef
279endif
280
281ifeq ($(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y)
282define BUSYBOX_SET_INDIVIDUAL_BINARIES
283	$(call KCONFIG_ENABLE_OPT,CONFIG_BUILD_LIBBUSYBOX)
284	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_INDIVIDUAL)
285endef
286
287define BUSYBOX_INSTALL_INDIVIDUAL_BINARIES
288	rm -f $(TARGET_DIR)/bin/busybox
289endef
290endif
291
292ifeq ($(BR2_PACKAGE_BUSYBOX_UNICODE),y)
293ifneq ($(qstrip $(BR2_GENERATE_LOCALE)),)
294define BUSYBOX_SET_LOCALE
295	$(call KCONFIG_ENABLE_OPT,CONFIG_UNICODE_USING_LOCALE)
296endef
297else
298define BUSYBOX_SET_LOCALE
299	$(call KCONFIG_DISABLE_OPT,CONFIG_UNICODE_USING_LOCALE)
300	$(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_CHECK_UNICODE_IN_ENV)
301endef
302endif
303
304define BUSYBOX_SET_UNICODE
305	$(call KCONFIG_ENABLE_OPT,CONFIG_LOCALE_SUPPORT)
306	$(call KCONFIG_ENABLE_OPT,CONFIG_UNICODE_SUPPORT)
307	$(call KCONFIG_SET_OPT,CONFIG_LAST_SUPPORTED_WCHAR,0)
308	$(call KCONFIG_ENABLE_OPT,CONFIG_UNICODE_WIDE_WCHARS)
309	$(BUSYBOX_SET_LOCALE)
310endef
311endif
312
313ifeq ($(BR2_PACKAGE_BUSYBOX_UNICODE_BYPASS),y)
314define BUSYBOX_SET_UNICODE_BYPASS
315	$(call KCONFIG_ENABLE_OPT,CONFIG_UNICODE_BYPASS)
316endef
317else
318define BUSYBOX_SET_UNICODE_BYPASS
319	$(call KCONFIG_DISABLE_OPT,CONFIG_UNICODE_BYPASS)
320endef
321endif
322
323# Only install our logging scripts if no other package does it.
324ifeq ($(BR2_PACKAGE_SYSKLOGD)$(BR2_PACKAGE_RSYSLOG)$(BR2_PACKAGE_SYSLOG_NG),)
325define BUSYBOX_INSTALL_LOGGING_SCRIPT
326	if grep -q CONFIG_SYSLOGD=y $(@D)/.config; \
327	then \
328		$(INSTALL) -m 0755 -D package/busybox/S01syslogd \
329			$(TARGET_DIR)/etc/init.d/S01syslogd; \
330	fi; \
331	if grep -q CONFIG_KLOGD=y $(@D)/.config; \
332	then \
333		$(INSTALL) -m 0755 -D package/busybox/S02klogd \
334			$(TARGET_DIR)/etc/init.d/S02klogd; \
335	fi
336endef
337endif
338
339# Only install our sysctl scripts if no other package does it.
340ifeq ($(BR2_PACKAGE_PROCPS_NG),)
341define BUSYBOX_INSTALL_SYSCTL_SCRIPT
342	if grep -q CONFIG_BB_SYSCTL=y $(@D)/.config; \
343	then \
344		$(INSTALL) -m 0755 -D package/busybox/S02sysctl \
345			$(TARGET_DIR)/etc/init.d/S02sysctl ; \
346	fi
347endef
348endif
349
350ifeq ($(BR2_INIT_BUSYBOX),y)
351define BUSYBOX_INSTALL_INITTAB
352	if test ! -e $(TARGET_DIR)/etc/inittab; then \
353		$(INSTALL) -D -m 0644 package/busybox/inittab $(TARGET_DIR)/etc/inittab; \
354	fi
355endef
356endif
357
358ifeq ($(BR2_PACKAGE_BUSYBOX_WATCHDOG),y)
359define BUSYBOX_SET_WATCHDOG
360	$(call KCONFIG_ENABLE_OPT,CONFIG_WATCHDOG)
361endef
362define BUSYBOX_INSTALL_WATCHDOG_SCRIPT
363	$(INSTALL) -D -m 0755 package/busybox/S15watchdog \
364		$(TARGET_DIR)/etc/init.d/S15watchdog
365	$(SED) s/PERIOD/$(call qstrip,$(BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD))/ \
366		$(TARGET_DIR)/etc/init.d/S15watchdog
367endef
368endif
369
370# PAM support requires thread support in the toolchain
371ifeq ($(BR2_PACKAGE_LINUX_PAM)$(BR2_TOOLCHAIN_HAS_THREADS),yy)
372define BUSYBOX_LINUX_PAM
373	$(call KCONFIG_ENABLE_OPT,CONFIG_PAM)
374endef
375BUSYBOX_DEPENDENCIES += linux-pam
376else
377define BUSYBOX_LINUX_PAM
378	$(call KCONFIG_DISABLE_OPT,CONFIG_PAM)
379endef
380endif
381
382# Telnet support
383define BUSYBOX_INSTALL_TELNET_SCRIPT
384	if grep -q CONFIG_FEATURE_TELNETD_STANDALONE=y $(@D)/.config; then \
385		$(INSTALL) -m 0755 -D package/busybox/S50telnet \
386			$(TARGET_DIR)/etc/init.d/S50telnet ; \
387	fi
388endef
389define BUSYBOX_INSTALL_TELNET_SERVICE
390	if grep -q CONFIG_FEATURE_TELNETD_STANDALONE=y $(@D)/.config; then \
391		$(INSTALL) -D -m 0644 package/busybox/telnetd.service \
392			$(TARGET_DIR)/usr/lib/systemd/system/telnetd.service ; \
393	fi
394endef
395
396# Add /bin/{a,hu}sh to /etc/shells otherwise some login tools like dropbear
397# can reject the user connection. See man shells.
398define BUSYBOX_INSTALL_ADD_TO_SHELLS
399	if grep -q CONFIG_ASH=y $(BUSYBOX_DIR)/.config; then \
400		grep -qsE '^/bin/ash$$' $(TARGET_DIR)/etc/shells \
401		|| echo "/bin/ash" >> $(TARGET_DIR)/etc/shells; \
402	fi
403	if grep -q CONFIG_HUSH=y $(BUSYBOX_DIR)/.config; then \
404		grep -qsE '^/bin/hush$$' $(TARGET_DIR)/etc/shells \
405		|| echo "/bin/hush" >> $(TARGET_DIR)/etc/shells; \
406	fi
407endef
408BUSYBOX_TARGET_FINALIZE_HOOKS += BUSYBOX_INSTALL_ADD_TO_SHELLS
409
410define BUSYBOX_KCONFIG_FIXUP_CMDS
411	$(BUSYBOX_SET_MMU)
412	$(BUSYBOX_SET_STATIC)
413	$(BUSYBOX_SET_MDEV)
414	$(BUSYBOX_SET_CRYPT_SHA)
415	$(BUSYBOX_LINUX_PAM)
416	$(BUSYBOX_SET_INIT)
417	$(BUSYBOX_SET_WATCHDOG)
418	$(BUSYBOX_SET_SELINUX)
419	$(BUSYBOX_SET_LESS_FLAGS)
420	$(BUSYBOX_SET_INDIVIDUAL_BINARIES)
421	$(BUSYBOX_SET_UNICODE)
422	$(BUSYBOX_SET_UNICODE_BYPASS)
423endef
424
425define BUSYBOX_BUILD_CMDS
426	$(BUSYBOX_MAKE_ENV) $(MAKE) $(BUSYBOX_MAKE_OPTS) -C $(@D)
427endef
428
429define BUSYBOX_INSTALL_TARGET_CMDS
430	# Use the 'noclobber' install rule, to prevent BusyBox from overwriting
431	# any full-blown versions of apps installed by other packages.
432	$(BUSYBOX_MAKE_ENV) $(MAKE) $(BUSYBOX_MAKE_OPTS) -C $(@D) install-noclobber
433	$(BUSYBOX_INSTALL_INDIVIDUAL_BINARIES)
434	$(BUSYBOX_INSTALL_INITTAB)
435	$(BUSYBOX_INSTALL_UDHCPC_SCRIPT)
436	$(BUSYBOX_INSTALL_ZCIP_SCRIPT)
437	$(BUSYBOX_INSTALL_MDEV_CONF)
438endef
439
440# Install the sysvinit scripts, for the moment, but not those that already
441# have a corresponding one in openrc.
442define BUSYBOX_INSTALL_INIT_OPENRC
443	$(BUSYBOX_INSTALL_MDEV_SCRIPT)
444	$(BUSYBOX_INSTALL_LOGGING_SCRIPT)
445	$(BUSYBOX_INSTALL_WATCHDOG_SCRIPT)
446	$(BUSYBOX_INSTALL_TELNET_SCRIPT)
447endef
448
449define BUSYBOX_INSTALL_INIT_SYSTEMD
450	$(BUSYBOX_INSTALL_TELNET_SERVICE)
451endef
452
453define BUSYBOX_INSTALL_INIT_SYSV
454	$(BUSYBOX_INSTALL_MDEV_SCRIPT)
455	$(BUSYBOX_INSTALL_LOGGING_SCRIPT)
456	$(BUSYBOX_INSTALL_WATCHDOG_SCRIPT)
457	$(BUSYBOX_INSTALL_SYSCTL_SCRIPT)
458	$(BUSYBOX_INSTALL_TELNET_SCRIPT)
459endef
460
461# Checks to give errors that the user can understand
462# Must be before we call to kconfig-package
463ifeq ($(BR2_PACKAGE_BUSYBOX)$(BR_BUILDING),yy)
464ifeq ($(call qstrip,$(BR2_PACKAGE_BUSYBOX_CONFIG)),)
465$(error No BusyBox configuration file specified, check your BR2_PACKAGE_BUSYBOX_CONFIG setting)
466endif
467endif
468
469$(eval $(kconfig-package))
470