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

E2FSPROGS_AR:=e2fsprogs.a
ifndef $(E2FSPROGS_DIR)
E2FSPROGS_DIR:=$(top_builddir)/e2fsprogs/
endif
srcdir=$(top_srcdir)/e2fsprogs

E2FSPROGS_CFLAGS := -I$(E2FSPROGS_DIR) -include $(E2FSPROGS_DIR)e2fsbb.h

E2P_SRC     := fgetsetflags.c fgetsetversion.c pf.c iod.c
E2P_SRCS    := $(patsubst %,e2p/%, $(E2P_SRC))
E2P_OBJS    := $(patsubst %.c,%.o, $(E2P_SRCS))

E2FSPROGS-:=
E2FSPROGS-$(CONFIG_CHATTR)      += chattr.o $(E2P_OBJS)
E2FSPROGS-$(CONFIG_LSATTR)      += lsattr.o $(E2P_OBJS)

libraries-y+=$(E2FSPROGS_DIR)$(E2FSPROGS_AR)


$(E2FSPROGS_DIR)$(E2FSPROGS_AR): $(patsubst %,$(E2FSPROGS_DIR)%, $(E2FSPROGS-y))
	$(AR) -ro $@ $(patsubst %,$(E2FSPROGS_DIR)%, $(E2FSPROGS-y))

$(E2FSPROGS_DIR)%.o: $(srcdir)/%.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(E2FSPROGS_CFLAGS) -c -o $@ $<
