# 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-:=
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
