# Makefile for busybox
#
# Copyright (C) 1999-2002 by 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
#

LIBUNARCHIVE_AR:=libunarchive.a
ifndef $(LIBUNARCHIVE_DIR)
LIBUNARCHIVE_DIR:=$(TOPDIR)archival/libunarchive/
endif

LIBUNARCHIVE-y:= \
\
	data_skip.o \
	data_extract_all.o \
	data_extract_to_stdout.o \
	data_extract_to_buffer.o \
\
	filter_accept_all.o \
	filter_accept_list.o \
	filter_accept_reject_list.o \
\
	get_header_ar.o \
	get_header_tar.o \
	get_header_tar_gz.o \
\
	header_skip.o \
	header_list.o \
	header_verbose_list.o \
\
	archive_xread.o \
	archive_xread_all.o \
	archive_xread_all_eof.o \
	archive_xread_char.o \
\
	seek_by_char.o \
	seek_by_jump.o \
\
	archive_copy_file.o \
\
	add_to_list.o \
	check_header_gzip.o \
	check_trailer_gzip.o \
	data_align.o \
	decompress_bunzip2.o \
	find_list_entry.o \
	init_handle.o \
	uncompress.o \
	unpack_ar_archive.o \
	unzip.o

LIBUNARCHIVE-$(CONFIG_DPKG) += 
LIBUNARCHIVE-$(CONFIG_DPKG_DEB) += 
LIBUNARCHIVE-$(CONFIG_AR) += 
LIBUNARCHIVE-$(CONFIG_CPIO) += 
LIBUNARCHIVE-$(CONFIG_GUNZIP) += 
LIBUNARCHIVE-$(CONFIG_RPM2CPIO) += 
LIBUNARCHIVE-$(CONFIG_TAR) += 
LIBUNARCHIVE-$(CONFIG_UNZIP) += 

libraries-y+=$(LIBUNARCHIVE_DIR)$(LIBUNARCHIVE_AR)

$(LIBUNARCHIVE_DIR)$(LIBUNARCHIVE_AR): $(patsubst %,$(LIBUNARCHIVE_DIR)%, $(LIBUNARCHIVE-y))
	$(AR) -ro $@ $(patsubst %,$(LIBUNARCHIVE_DIR)%, $(LIBUNARCHIVE-y))

