# 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_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_SWAPONOFF)     +=swaponoff.o
UTILLINUX-$(CONFIG_UMOUNT)        +=umount.o

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

$(UTILLINUX_DIR)$(UTILLINUX_AR): $(patsubst %,$(UTILLINUX_DIR)%, $(UTILLINUX-y))
	$(AR) $(ARFLAGS) $@ $(patsubst %,$(UTILLINUX_DIR)%, $(UTILLINUX-y))

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

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
