# Makefile for busybox
#
# Copyright (C) 1999-2002 Erik Andersen <andersee@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA



LIBBB_AR:=libbb.a
ifndef $(LIBBB_DIR)
LIBBB_DIR:=$(TOPDIR)libbb/
endif

LIBBB_SRC:= \
	arith.c bb_asprintf.c ask_confirmation.c change_identity.c chomp.c \
	compare_string_array.c concat_path_file.c copy_file.c \
	copy_file_chunk.c copyfd.c correct_password.c create_icmp_socket.c \
	create_icmp6_socket.c device_open.c dirname.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_console.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 \
	interface.c isdirectory.c kernel_version.c last_char_is.c libc5.c \
	llist_add_to.c login.c loop.c make_directory.c mode_string.c \
	module_syscalls.c mtab.c mtab_file.c my_getgrgid.c my_getgrnam.c \
	my_getpwnam.c my_getpwnamegid.c my_getpwuid.c obscure.c parse_mode.c \
	parse_number.c perror_msg.c perror_msg_and_die.c print_file.c \
	process_escape_sequence.c procps.c pwd2spwd.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 \
	setup_environment.c simplify_path.c syscalls.c syslog_msg_with_name.c \
	time_string.c trim.c u_signal_names.c vdprintf.c verror_msg.c \
	vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xfuncs.c \
	xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c 
	

LIBBB_OBJS=$(patsubst %.c,$(LIBBB_DIR)%.o, $(LIBBB_SRC))

LIBBB_MSRC:=$(LIBBB_DIR)messages.c
LIBBB_MOBJ:=full_version.o name_too_long.o omitting_directory.o not_a_directory.o \
	memory_exhausted.o invalid_date.o invalid_option.o io_error.o dash_dash_help.o \
	write_error.o too_few_args.o name_longer_than_foo.o unknown.o can_not_create_raw_socket.o \
	shadow_file.o passwd_file.o group_file.o gshadow_file.o nologin_file.o securetty_file.o \
	motd_file.o
LIBBB_MOBJS=$(patsubst %,$(LIBBB_DIR)%, $(LIBBB_MOBJ))

libraries-y+=$(LIBBB_DIR)$(LIBBB_AR)

$(LIBBB_DIR)$(LIBBB_AR): $(LIBBB_OBJS) $(LIBBB_MOBJS) 
	$(AR) -ro $@ $(LIBBB_OBJS) $(LIBBB_MOBJS)

$(LIBBB_MOBJS): $(LIBBB_MSRC)
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -DL_$(notdir $*) -c $< -o $@

$(LIBBB_DIR)loop.o: $(LIBBB_DIR)loop.h

$(LIBBB_DIR)loop.h: $(LIBBB_DIR)mk_loop_h.sh
	@ $(SHELL) $< > $@


