# Makefile for busybox
#
# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
#
# Licensed under the GPL v2, see the file LICENSE in this tarball.

UTILLINUX_AR:=util-linux.a
ifndef $(UTILLINUX_DIR)
UTILLINUX_DIR:=$(top_builddir)/util-linux/
endif
srcdir=$(top_srcdir)/util-linux

UTILLINUX-y:=
UTILLINUX-$(CONFIG_DMESG)         +=dmesg.o
UTILLINUX-$(CONFIG_FBSET)         +=fbset.o
UTILLINUX-$(CONFIG_FDFLUSH)       +=fdflush.o
UTILLINUX-$(CONFIG_FDFORMAT)      +=fdformat.o
UTILLINUX-$(CONFIG_FDISK)         +=fdisk.o
UTILLINUX-$(CONFIG_FREERAMDISK)   +=freeramdisk.o
UTILLINUX-$(CONFIG_FSCK_MINIX)    +=fsck_minix.o
UTILLINUX-$(CONFIG_GETOPT)        +=getopt.o
UTILLINUX-$(CONFIG_HEXDUMP)       +=hexdump.o
UTILLINUX-$(CONFIG_HWCLOCK)       +=hwclock.o
UTILLINUX-$(CONFIG_IPCRM)         +=ipcrm.o
UTILLINUX-$(CONFIG_IPCS)          +=ipcs.o
UTILLINUX-$(CONFIG_LOSETUP)       +=losetup.o
UTILLINUX-$(CONFIG_MDEV)          +=mdev.o
UTILLINUX-$(CONFIG_MKFS_MINIX)    +=mkfs_minix.o
UTILLINUX-$(CONFIG_MKSWAP)        +=mkswap.o
UTILLINUX-$(CONFIG_MORE)          +=more.o
UTILLINUX-$(CONFIG_MOUNT)         +=mount.o
UTILLINUX-$(CONFIG_FEATURE_MOUNT_NFS)	+=nfsmount.o
UTILLINUX-$(CONFIG_PIVOT_ROOT)    +=pivot_root.o
UTILLINUX-$(CONFIG_RDATE)         +=rdate.o
UTILLINUX-$(CONFIG_READPROFILE)   +=readprofile.o
UTILLINUX-$(CONFIG_SETARCH)       +=setarch.o
UTILLINUX-$(CONFIG_SWAPONOFF)     +=swaponoff.o
UTILLINUX-$(CONFIG_SWITCH_ROOT)   +=switch_root.o
UTILLINUX-$(CONFIG_UMOUNT)        +=umount.o


libraries-y+=$(UTILLINUX_DIR)$(UTILLINUX_AR)

UTILLINUX_SRC-y:=$(patsubst %.o,$(srcdir)/%.c,$(UTILLINUX-y))
UTILLINUX_SRC-a:=$(wildcard $(srcdir)/*.c)
APPLET_SRC-y+=$(UTILLINUX_SRC-y)
APPLET_SRC-a+=$(UTILLINUX_SRC-a)

$(UTILLINUX_DIR)$(UTILLINUX_AR): $(patsubst %,$(UTILLINUX_DIR)%, $(UTILLINUX-y))
	$(do_ar)

$(UTILLINUX_DIR)%.o: $(srcdir)/%.c
	$(compile.c)

ifneq ($(strip $(CONFIG_LFS)),y)
ifeq ($(strip $(FDISK_SUPPORT_LARGE_DISKS)),y)

$(UTILLINUX_DIR)fdisk.o: $(srcdir)/fdisk.c
	$(CC) $(CFLAGS) \
		-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 \
		$(EXTRA_CFLAGS) -c -o $@ $<

endif
endif
