-# Copyright (C) 1996 Free Software Foundation, Inc.
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
# The GNU C Library 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
-# Library General Public License for more details.
+# Lesser General Public License for more details.
-# You should have received a copy of the GNU Library General Public
-# License along with the GNU C Library; see the file COPYING.LIB. If
-# not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
#
# Makefile for name service switch.
#
subdir := nss
-distribute := nsswitch.h XXX-lookup.c getXXbyYY.c getXXbyYY_r.c \
- getXXent.c getXXent_r.c
+include ../Makeconfig
+
+headers := nss.h
# This is the trivial part which goes into libc itself.
-routines = nsswitch $(addsuffix -lookup,$(databases))
+routines = nsswitch getnssent getnssent_r digits_dots \
+ $(addsuffix -lookup,$(databases))
# These are the databases that go through nss dispatch.
-databases = proto service hosts network grp pwd rpc ethers
+# Caution: if you add a database here, you must add its real name
+# in databases.def, too.
+databases = proto service hosts network grp pwd rpc ethers \
+ spwd netgrp key alias sgrp
+
+others := getent makedb
+install-bin := getent makedb
+makedb-modules = xmalloc hash-string
+extra-objs += $(makedb-modules:=.o)
+
+tests = test-netdb tst-nss-test1 test-digits-dots
+xtests = bug-erange
# Specify rules for the nss_* modules. We have some services.
-services := files dns db
+services := files db
extra-libs = $(services:%=libnss_%)
# These libraries will be built in the `others' pass rather than
# The sources are found in the appropriate subdir.
subdir-dirs = $(services:%=nss_%)
-vpath %.c $(subdir-dirs)
-
+vpath %.c $(subdir-dirs) ../locale/programs ../intl
-libnss_files-routines := $(addprefix files-,$(databases))
-distribute += files-XXX.c files-parse.c
-libnss_dns-routines := dns-host dns-network
+libnss_files-routines := $(addprefix files-,$(databases)) \
+ files-initgroups files-have_o_cloexec files-init
-libnss_db-routines := $(addprefix db-,$(filter-out hosts network,\
- $(databases)))
-distribute += db-XXX.c
+libnss_db-dbs := $(addprefix db-,\
+ $(filter-out hosts network key alias,\
+ $(databases))) \
+ db-initgroups
+libnss_db-routines := $(libnss_db-dbs) db-open db-init hash-string
+generated += $(filter-out db-alias.c db-netgrp.c, \
+ $(addsuffix .c,$(libnss_db-dbs)))
-libnss_files-inhibit-o = $(filter-out .so,$(object-suffixes))
-libnss_dns-inhibit-o = $(filter-out .so,$(object-suffixes))
-libnss_db-inhibit-o = $(filter-out .so,$(object-suffixes))
+install-others += $(inst_vardbdir)/Makefile
+# Build static module into libc if requested
+libnss_files-inhibit-o = $(filter-out .os,$(object-suffixes))
+libnss_db-inhibit-o = $(filter-out .os,$(object-suffixes))
+ifeq ($(build-static-nss),yes)
+routines += $(libnss_files-routines)
+static-only-routines += $(libnss_files-routines)
+tests-static = tst-nss-static
+tests += $(tests-static)
+endif
include ../Rules
+ifeq (yes,$(have-selinux))
+LDLIBS-makedb := -lselinux
+endif
-$(objpfx)libnss_dns.so: $(firstword $(objdir) $(..)resolv)/libresolv.so
+libnss-libc = $(common-objpfx)linkobj/libc.so
+# Target-specific variable setting to link objects using deprecated
+# RPC interfaces with the version of libc.so that makes them available
+# for new links:
+$(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc)
-$(objpfx)libnss_db.so: $(firstword $(objdir) $(..)db)/libdb.so \
- $(objpfx)libnss_files.so
+$(objpfx)libnss_db.so: $(objpfx)libnss_files.so
-$(libnss_db-routines:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
+$(libnss_db-dbs:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
@rm -f $@.new
(echo '#define EXTERN_PARSER';\
echo '#define GENERIC "../nss_db/db-XXX.c"';\
- echo '#include <$<>') > $@.new
+ echo '#include "$<"') > $@.new
mv -f $@.new $@
-# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
-# This ensures they will load libc.so for needed symbols if loaded by
-# a statically-linked program that hasn't already loaded it.
-$(services:%=$(objpfx)libnss_%.so): $(common-objpfx)libc.so
+
+$(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o)
+
+$(inst_vardbdir)/Makefile: db-Makefile $(+force)
+ $(do-install)
+
+libof-nss_test1 = extramodules
+$(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps)
+ $(build-module)
+ifdef libnss_test1.so-version
+$(objpfx)/libnss_test1.so$(libnss_test1.so-version): $(objpfx)/libnss_test1.so
+ $(make-link)
+endif
+$(objpfx)tst-nss-test1.out: $(objpfx)/libnss_test1.so$(libnss_test1.so-version)