# 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.

LOGINUTILS_AR:=loginutils.a
ifndef LOGINUTILS_DIR
LOGINUTILS_DIR:=$(top_builddir)/loginutils/
endif
srcdir=$(top_srcdir)/loginutils

LOGINUTILS-y:=
LOGINUTILS-$(CONFIG_ADDGROUP)	+= addgroup.o
LOGINUTILS-$(CONFIG_ADDUSER)	+= adduser.o
LOGINUTILS-$(CONFIG_GETTY)	+= getty.o
LOGINUTILS-$(CONFIG_LOGIN)	+= login.o
LOGINUTILS-$(CONFIG_PASSWD)	+= passwd.o
LOGINUTILS-$(CONFIG_SU)		+= su.o
LOGINUTILS-$(CONFIG_SULOGIN)	+= sulogin.o
LOGINUTILS-$(CONFIG_VLOCK)	+= vlock.o
LOGINUTILS-$(CONFIG_DELUSER)	+= deluser.o
LOGINUTILS-$(CONFIG_DELGROUP)	+= delgroup.o

ifneq ($(strip $(LOGINUTILS-y)),)
libraries-y+=$(LOGINUTILS_DIR)$(LOGINUTILS_AR)
endif

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

needcrypt-y:=
needcrypt-$(CONFIG_LOGIN)	:= y
needcrypt-$(CONFIG_PASSWD)	:= y
needcrypt-$(CONFIG_SU)		:= y
needcrypt-$(CONFIG_SULOGIN)	:= y
needcrypt-$(CONFIG_VLOCK)	:= y


ifeq ($(needcrypt-y),y)
  LIBRARIES := -lcrypt $(filter-out -lcrypt,$(LIBRARIES))
endif

$(LOGINUTILS_DIR)$(LOGINUTILS_AR): $(patsubst %,$(LOGINUTILS_DIR)%, $(LOGINUTILS-y))
	$(do_ar)

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