# Makefile for busybox
#
# Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.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_list_reassign.o \
	filter_accept_reject_list.o \
\
	get_header_ar.o \
	get_header_cpio.o \
	get_header_tar.o \
	get_header_tar_bz2.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 \
\
	check_header_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))

