Index: libbb/Makefile.in =================================================================== --- libbb/Makefile.in (revision 11808) +++ libbb/Makefile.in (working copy) @@ -4,42 +4,119 @@ # # Licensed under the GPL v2, see the file LICENSE in this tarball. -LIBBB_AR:=libbb.a ifndef $(LIBBB_DIR) -LIBBB_DIR:=$(top_builddir)/libbb/ +LIBBB_DIR:=$(top_builddir)/libbb endif srcdir=$(top_srcdir)/libbb +LIBBB_AR:=$(LIBBB_DIR)/libbb.a +libraries-y+=$(LIBBB_AR) + +LIBBB-multi-obj:=$(subst .a,-multi.o,$(LIBBB_AR)) + LIBBB_SRC-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 \ - correct_password.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 \ - hash_fd.c herror_msg.c herror_msg_and_die.c \ - human_readable.c inet_common.c inode_hash.c interface.c isdirectory.c \ - kernel_version.c last_char_is.c login.c loop.c \ - make_directory.c mode_string.c mtab.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 pw_encrypt.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 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 + ask_confirmation.c \ + bb_askpass.c \ + bb_asprintf.c \ + bb_echo.c \ + change_identity.c \ + chomp.c \ + compare_string_array.c \ + concat_path_file.c \ + concat_subpath_file.c \ + copyfd.c \ + copy_file.c \ + correct_password.c \ + create_icmp6_socket.c \ + create_icmp_socket.c \ + default_error_retval.c \ + device_open.c \ + dump.c \ + error_msg_and_die.c \ + error_msg.c \ + fclose_nonstdin.c \ + fflush_stdout_and_exit.c \ + fgets_str.c \ + find_mount_point.c \ + find_pid_by_name.c \ + find_root_device.c \ + full_read.c \ + full_write.c \ + get_console.c \ + get_last_path_component.c \ + get_line_from_file.c \ + getopt_ulflags.c \ + get_terminal_width_height.c \ + hash_fd.c \ + herror_msg_and_die.c \ + herror_msg.c \ + human_readable.c \ + inet_common.c \ + inode_hash.c \ + interface.c \ + isdirectory.c \ + kernel_version.c \ + last_char_is.c \ + login.c \ + loop.c \ + make_directory.c \ + mode_string.c \ + mtab.c \ + mtab_file.c \ + obscure.c \ + parse_mode.c \ + parse_number.c \ + perror_msg_and_die.c \ + perror_msg.c \ + perror_nomsg_and_die.c \ + perror_nomsg.c \ + print_file.c \ + process_escape_sequence.c \ + procps.c \ + pw_encrypt.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_strncpy.c \ + safe_write.c \ + setup_environment.c \ + simplify_path.c \ + skip_whitespace.c \ + speed_table.c \ + trim.c \ + u_signal_names.c \ + vdprintf.c \ + verror_msg.c \ + vfork_daemon_rexec.c \ + vherror_msg.c \ + vperror_msg.c \ + warn_ignoring_args.c \ + wfopen.c \ + wfopen_input.c \ + xconnect.c \ + xgetcwd.c \ + xgethostbyname2.c \ + xgethostbyname.c \ + xgetlarg.c \ + xreadlink.c \ + xregcomp.c \ +#above line left blank intentionally + +# conditionally compiled objects: LIBBB_SRC-$(CONFIG_FEATURE_SHADOWPASSWDS)+= pwd2spwd.c -LIBBB_OBJS=$(patsubst %.c,$(LIBBB_DIR)%.o, $(LIBBB_SRC-y)) +# all 1:1 objects +#LIBBB_OBJS:=$(patsubst %.c,$(LIBBB_DIR)/%.o, $(LIBBB_SRC-y)) +LIBBB_SRC:=$(patsubst %,$(srcdir)/%,$(LIBBB_SRC-y)) + +# 1:N objects LIBBB_MSRC0:=$(srcdir)/messages.c LIBBB_MOBJ0:=full_version.o \ memory_exhausted.o invalid_date.o io_error.o \ @@ -48,65 +125,60 @@ shadow_file.o passwd_file.o group_file.o gshadow_file.o nologin_file.o \ securetty_file.o motd_file.o \ msg_standard_input.o msg_standard_output.o shell_file.o +$(LIBBB_MOBJ0):$(LIBBB_MSRC0) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ LIBBB_MSRC1:=$(srcdir)/xfuncs.c LIBBB_MOBJ1:=xmalloc.o xrealloc.o xcalloc.o xstrdup.o xstrndup.o \ xfopen.o xopen.o xread.o xread_all.o xread_char.o \ xferror.o xferror_stdout.o xfflush_stdout.o strlen.o +$(LIBBB_MOBJ1):$(LIBBB_MSRC1) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ LIBBB_MSRC2:=$(srcdir)/printf.c LIBBB_MOBJ2:=bb_vfprintf.o bb_vprintf.o bb_fprintf.o bb_printf.o +$(LIBBB_MOBJ2):$(LIBBB_MSRC2) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ LIBBB_MSRC3:=$(srcdir)/xgetularg.c LIBBB_MOBJ3:=xgetularg_bnd_sfx.o xgetlarg_bnd_sfx.o getlarg10_sfx.o \ xgetularg_bnd.o xgetularg10_bnd.o xgetularg10.o +$(LIBBB_MOBJ3):$(LIBBB_MSRC3) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ LIBBB_MSRC4:=$(srcdir)/safe_strtol.c LIBBB_MOBJ4:=safe_strtoi.o safe_strtod.o safe_strtol.o safe_strtoul.o +$(LIBBB_MOBJ4):$(LIBBB_MSRC4) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ LIBBB_MSRC5:=$(srcdir)/bb_pwd.c LIBBB_MOBJ5:=bb_xgetpwnam.o bb_xgetgrnam.o bb_getgrgid.o bb_getpwuid.o \ bb_getug.o get_ug_id.o +$(LIBBB_MOBJ5):$(LIBBB_MSRC5) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ LIBBB_MSRC6:=$(srcdir)/llist.c LIBBB_MOBJ6:=llist_add_to.o llist_add_to_end.o llist_free_one.o llist_free.o +$(LIBBB_MOBJ6):$(LIBBB_MSRC6) + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -o $@ -c $^ -LIBBB_MOBJS0=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ0)) -LIBBB_MOBJS1=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ1)) -LIBBB_MOBJS2=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ2)) -LIBBB_MOBJS3=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ3)) -LIBBB_MOBJS4=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ4)) -LIBBB_MOBJS5=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ5)) -LIBBB_MOBJS6=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ6)) -libraries-y+=$(LIBBB_DIR)$(LIBBB_AR) +# We need the names of the object files built from MSRC for the L_ defines +LIBBB-ALL-MOBJ:= $(LIBBB_MOBJ0) $(LIBBB_MOBJ1) $(LIBBB_MOBJ2) $(LIBBB_MOBJ3) $(LIBBB_MOBJ4) $(LIBBB_MOBJ5) $(LIBBB_MOBJ6) -$(LIBBB_DIR)$(LIBBB_AR): $(LIBBB_OBJS) $(LIBBB_MOBJS0) $(LIBBB_MOBJS1) \ - $(LIBBB_MOBJS2) $(LIBBB_MOBJS3) $(LIBBB_MOBJS4) $(LIBBB_MOBJS5) \ - $(LIBBB_MOBJS6) - $(AR) $(ARFLAGS) $(@) $(LIBBB_OBJS) $(^) +LIBBB-ALL-MSRC:=$(LIBBB_MSRC0) $(LIBBB_MSRC1) $(LIBBB_MSRC2) $(LIBBB_MSRC3) $(LIBBB_MSRC4) $(LIBBB_MSRC5) $(LIBBB_MSRC6) -$(LIBBB_DIR)%.o: $(srcdir)/%.c - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $< +# all defines needed for 1:N objects +all-defs:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(LIBBB-ALL-MOBJ)))) -$(LIBBB_MOBJS0): $(LIBBB_MSRC0) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ +# These prerequisites should be generated so that only the actually used obj +# get built. XXX: Until then we hardcode them to list all.. +$(LIBBB-multi-obj): $(LIBBB_SRC) $(LIBBB-ALL-MSRC) -$(LIBBB_MOBJS1): $(LIBBB_MSRC1) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ +# Generic Rule to build the multi object out of the prerequisites +$(LIBBB-multi-obj): + $(CC) $(CFLAGS) -combine -pipe $(EXTRA_CFLAGS) -o $(@) $(all-defs) -c $(^) -$(LIBBB_MOBJS2): $(LIBBB_MSRC2) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ +$(LIBBB_AR): $(LIBBB-multi-obj) + $(AR) $(ARFLAGS) $(@) $(^) -$(LIBBB_MOBJS3): $(LIBBB_MSRC3) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ - -$(LIBBB_MOBJS4): $(LIBBB_MSRC4) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ - -$(LIBBB_MOBJS5): $(LIBBB_MSRC5) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ - -$(LIBBB_MOBJS6): $(LIBBB_MSRC6) - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@ - Index: README =================================================================== --- README (revision 11808) +++ README (working copy) @@ -8,9 +8,9 @@ options that are included provide the expected functionality and behave very much like their GNU counterparts. -BusyBox has been written with size-optimization and limited resources in mind. +BusyBox has been written with size-optimisation and limited resources in mind. It is also extremely modular so you can easily include or exclude commands (or -features) at compile time. This makes it easy to customize your embedded +features) at compile time. This makes it easy to customise your embedded systems. To create a working system, just add /dev, /etc, and a Linux kernel. BusyBox provides a fairly complete POSIX environment for any small or embedded system. @@ -59,7 +59,7 @@ If you find bugs, please submit a detailed bug report to the BusyBox mailing list at busybox@mail.busybox.net. A well-written bug report should include a -transcript of a shell session that demonstrates the bad behavior and enables +transcript of a shell session that demonstrates the bad behaviour and enables anyone else to duplicate the bug on their own machine. The following is such an example: