1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# Makefile for busybox
#
# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
#
# Licensed under the GPL v2, see the file LICENSE in this tarball.
srcdir:=$(top_srcdir)/libbb
objdir:=$(top_builddir)/libbb
LIBBB-n:=
LIBBB-y:= \
bb_asprintf.c ask_confirmation.c change_identity.c chomp.c \
compare_string_array.c concat_path_file.c copy_file.c copyfd.c \
create_icmp_socket.c create_icmp6_socket.c \
device_open.c dump.c error_msg.c error_msg_and_die.c find_mount_point.c \
find_pid_by_name.c find_root_device.c fgets_str.c full_read.c \
full_write.c get_last_path_component.c get_line_from_file.c \
herror_msg.c herror_msg_and_die.c \
human_readable.c inet_common.c inode_hash.c isdirectory.c \
kernel_version.c last_char_is.c login.c loop.c \
make_directory.c md5.c mode_string.c mtab_file.c \
obscure.c parse_mode.c parse_number.c perror_msg.c \
perror_msg_and_die.c print_file.c get_console.c \
process_escape_sequence.c procps.c qmodule.c \
read_package_field.c recursive_action.c remove_file.c \
restricted_shell.c run_parts.c run_shell.c safe_read.c safe_write.c \
safe_strncpy.c setup_environment.c sha1.c simplify_path.c \
trim.c u_signal_names.c vdprintf.c verror_msg.c \
vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c \
xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \
warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \
bb_echo.c bb_do_delay.c
# conditionally compiled objects:
LIBBB-$(CONFIG_FEATURE_SHADOWPASSWDS)+=pwd2spwd.c
LIBBB-$(CONFIG_FEATURE_MTAB_SUPPORT)+= mtab.c
LIBBB-$(CONFIG_PASSWD)+= pw_encrypt.c
LIBBB-$(CONFIG_SULOGIN)+= pw_encrypt.c
LIBBB-$(CONFIG_FEATURE_HTTPD_AUTH_MD5)+= pw_encrypt.c
LIBBB-$(CONFIG_VLOCK)+= correct_password.c
LIBBB-$(CONFIG_SU)+= correct_password.c
LIBBB-$(CONFIG_LOGIN)+= correct_password.c
LIBBB-y:=$(patsubst %,$(srcdir)/%,$(LIBBB-y))
# 1:N objects
LIBBB_MSRC0:=$(srcdir)/messages.c
LIBBB_M0:=full_version \
memory_exhausted invalid_date io_error \
read_error write_error name_longer_than_foo unknown \
can_not_create_raw_socket perm_denied_are_you_root \
shadow_file passwd_file group_file gshadow_file nologin_file \
securetty_file motd_file \
msg_standard_input msg_standard_output shell_file \
bb_dev_null bb_common_bufsiz1
LIBBB_MOBJ0:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M0))
$(LIBBB_MOBJ0):$(LIBBB_MSRC0)
LIBBB_MSRC1:=$(srcdir)/xfuncs.c
LIBBB_M1:=xmalloc xrealloc xcalloc xstrdup xstrndup \
xfopen xopen xread xread_all xread_char \
xferror xferror_stdout xfflush_stdout strlen
LIBBB_MOBJ1:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M1))
$(LIBBB_MOBJ1):$(LIBBB_MSRC1)
LIBBB_MSRC2:=$(srcdir)/printf.c
LIBBB_M2:=bb_vfprintf bb_vprintf bb_fprintf bb_printf
LIBBB_MOBJ2:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M2))
$(LIBBB_MOBJ2):$(LIBBB_MSRC2)
LIBBB_MSRC3:=$(srcdir)/xgetularg.c
LIBBB_M3:=xgetularg_bnd_sfx xgetlarg_bnd_sfx getlarg10_sfx \
xgetularg_bnd xgetularg10_bnd xgetularg10
LIBBB_MOBJ3:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M3))
$(LIBBB_MOBJ3):$(LIBBB_MSRC3)
LIBBB_MSRC4:=$(srcdir)/safe_strtol.c
LIBBB_M4:=safe_strtoi safe_strtod safe_strtol safe_strtoul
LIBBB_MOBJ4:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M4))
$(LIBBB_MOBJ4):$(LIBBB_MSRC4)
LIBBB_MSRC5:=$(srcdir)/bb_pwd.c
LIBBB_M5:=bb_xgetpwnam bb_xgetgrnam bb_getgrgid bb_getpwuid \
bb_getug get_ug_id
LIBBB_MOBJ5:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M5))
$(LIBBB_MOBJ5):$(LIBBB_MSRC5)
LIBBB_MSRC6:=$(srcdir)/llist.c
LIBBB_M6:=llist_add_to llist_add_to_end llist_free_one llist_free
LIBBB_MOBJ6:=$(patsubst %,$(objdir)/%$(om),$(LIBBB_M6))
$(LIBBB_MOBJ6):$(LIBBB_MSRC6)
# We need the names of the object files built from MSRC for the L_ defines
LIBBB_ALL_MDEFS:=$(LIBBB_M0) $(LIBBB_M1) $(LIBBB_M2) $(LIBBB_M3) $(LIBBB_M4) $(LIBBB_M5) $(LIBBB_M6)
# All multi objects
libbb_MOBJ$(os):=$(LIBBB_MOBJ0) $(LIBBB_MOBJ1) $(LIBBB_MOBJ2) $(LIBBB_MOBJ3) $(LIBBB_MOBJ4) $(LIBBB_MOBJ5) $(LIBBB_MOBJ6)
LIBBB_ALL_MSRC:=$(LIBBB_MSRC0) $(LIBBB_MSRC1) $(LIBBB_MSRC2) $(LIBBB_MSRC3) \
$(LIBBB_MSRC4) $(LIBBB_MSRC5) $(LIBBB_MSRC6)
LIBBB-y:=$(sort $(LIBBB-y))
needcrypt-y:=
ifneq ($(findstring $(srcdir)/pw_encrypt.c,$(LIBBB-y)),)
needcrypt-y:=y
endif
ifneq ($(findstring $(srcdir)/correct_password.c,$(LIBBB-y)),)
needcrypt-y:=y
endif
ifeq ($(CONFIG_FEATURE_FULL_LIBBUSYBOX),y)
needcrypt-y:=y
endif
ifeq ($(needcrypt-y),y)
LIBRARIES := -lcrypt $(filter-out -lcrypt,$(LIBRARIES))
endif
# all 1:1 objects
libbb_OBJ$(os):=$(patsubst $(srcdir)/%.c,$(objdir)/%$(os),$(LIBBB-y))
LIBBB_SRC-y:=$(sort $(LIBBB-y) $(LIBBB_ALL_MSRC))
LIBBB_SRC-a:=$(wildcard $(srcdir)/*.c)
LIBRARY_SRC-y+=$(LIBBB_SRC-y)
LIBRARY_SRC-a+=$(LIBBB_SRC-a)
# all defines needed for 1:N objects
LIBBB_DEFINE-y:=$(patsubst %,-DL_%,$(LIBBB_ALL_MDEFS))
LIBRARY_DEFINE-y+=$(LIBBB_DEFINE-y)
LIBRARY_DEFINE-a+=$(LIBBB_DEFINE-y)
ifeq ($(om),.osm)
# XXX FIXME:
# also create a pattern for the non-shared case
$(LIBBB_MOBJ0:.osm=.om): $(LIBBB_MSRC0)
$(LIBBB_MOBJ1:.osm=.om): $(LIBBB_MSRC1)
$(LIBBB_MOBJ2:.osm=.om): $(LIBBB_MSRC2)
$(LIBBB_MOBJ3:.osm=.om): $(LIBBB_MSRC3)
$(LIBBB_MOBJ4:.osm=.om): $(LIBBB_MSRC4)
$(LIBBB_MOBJ5:.osm=.om): $(LIBBB_MSRC5)
$(LIBBB_MOBJ6:.osm=.om): $(LIBBB_MSRC6)
endif
$(libbb_OBJ.os): $(objdir)/%.os: $(srcdir)/%.c
$(libbb_OBJ.o): $(objdir)/%.o: $(srcdir)/%.c
$(objdir)/libbb.a: $(libbb_OBJ$(os)) $(libbb_MOBJ$(os))
libraries-y:=$(libraries-y) $(objdir)/libbb.a
|