# 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_all_prefix.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 \
\
	add_to_list.o \
	check_header_gzip.o \
	check_trailer_gzip.o \
	copy_file_chunk_fd.o \
	data_align.o \
	find_list_entry.o \
	init_handle.o \
	seek_sub_file.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))

