]> git.ipfire.org Git - thirdparty/glibc.git/blob - nss/Makefile
757446f80a16edccb679c5f27bf5b71c0c8ffb4f
[thirdparty/glibc.git] / nss / Makefile
1 # Copyright (C) 1996-2021 Free Software Foundation, Inc.
2 # This file is part of the GNU C Library.
3
4 # The GNU C Library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8
9 # The GNU C Library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
13
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with the GNU C Library; if not, see
16 # <https://www.gnu.org/licenses/>.
17
18 #
19 # Makefile for name service switch.
20 #
21 subdir := nss
22
23 include ../Makeconfig
24
25 headers := nss.h
26
27 # This is the trivial part which goes into libc itself.
28 routines = nsswitch getnssent getnssent_r digits_dots \
29 valid_field valid_list_field rewrite_field \
30 $(addsuffix -lookup,$(databases)) \
31 compat-lookup nss_hash nss_files_fopen \
32 nss_readline nss_parse_line_result \
33 nss_fgetent_r nss_module nss_action \
34 nss_action_parse nss_database nss_files_data \
35 nss_files_functions
36
37 # These are the databases that go through nss dispatch.
38 # Caution: if you add a database here, you must add its real name
39 # in databases.def, too.
40 databases = proto service hosts network grp pwd ethers \
41 spwd netgrp alias sgrp
42
43 ifneq (,$(filter sunrpc,$(subdirs)))
44 databases += key rpc
45 have-sunrpc := 1
46 else
47 have-sunrpc := 0
48 endif
49 CPPFLAGS-getent.c = -DHAVE_SUNRPC=$(have-sunrpc)
50
51 others := getent makedb
52 install-bin := getent makedb
53 makedb-modules = xmalloc hash-string
54 others-extras = $(makedb-modules)
55 extra-objs += $(makedb-modules:=.o)
56
57 tests-static = tst-field
58 tests-internal = tst-field
59 tests = test-netdb test-digits-dots tst-nss-getpwent bug17079 \
60 tst-nss-test1 \
61 tst-nss-test2 \
62 tst-nss-test4 \
63 tst-nss-test5
64 xtests = bug-erange
65
66 tests-container = \
67 tst-nss-compat1 \
68 tst-nss-test3 \
69 tst-nss-files-hosts-long \
70 tst-nss-db-endpwent \
71 tst-nss-db-endgrent \
72 tst-reload1 tst-reload2
73
74 # Tests which need libdl
75 ifeq (yes,$(build-shared))
76 tests += tst-nss-files-hosts-erange
77 tests += tst-nss-files-hosts-multi
78 tests += tst-nss-files-hosts-getent
79 tests += tst-nss-files-alias-leak
80 tests += tst-nss-files-alias-truncated
81 endif
82
83 # If we have a thread library then we can test cancellation against
84 # some routines like getpwuid_r.
85 ifeq (yes,$(have-thread-library))
86 tests += tst-cancel-getpwuid_r
87 endif
88
89 # Specify rules for the nss_* modules. We have some services.
90 services := files db compat
91
92 extra-libs = $(services:%=libnss_%)
93 # These libraries will be built in the `others' pass rather than
94 # the `lib' pass, because they depend on libc.so being built already.
95 extra-libs-others = $(extra-libs)
96
97 # The sources are found in the appropriate subdir.
98 subdir-dirs = $(services:%=nss_%)
99 vpath %.c $(subdir-dirs) ../locale/programs ../intl
100
101
102 routines += \
103 $(addprefix files-, $(filter-out key, $(databases))) \
104 files-init \
105 files-initgroups \
106 # routines
107
108 # Build only an empty shared libnss_files.
109 libnss_files-inhibit-o = $(filter-out .os,$(object-suffixes))
110
111 # Pretend that libnss_files.so is a linker script, so that the symbolic link
112 # is not installed.
113 install-lib-ldscripts = libnss_files.so
114 $(inst_libdir)/libnss_files.so:
115
116 libnss_db-dbs := $(addprefix db-,\
117 $(filter-out hosts network key alias,\
118 $(databases))) \
119 db-initgroups
120 libnss_db-routines := $(libnss_db-dbs) db-open db-init hash-string
121 generated += $(filter-out db-alias.c db-netgrp.c, \
122 $(addsuffix .c,$(libnss_db-dbs)))
123
124 libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups) \
125 nisdomain
126
127 install-others += $(inst_vardbdir)/Makefile
128
129 # Build static module into libc if requested
130 libnss_db-inhibit-o = $(filter-out .os,$(object-suffixes))
131 libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes))
132 ifeq ($(build-static-nss),yes)
133 tests-static += tst-nss-static
134 endif
135 extra-test-objs += nss_test1.os nss_test2.os
136
137 include ../Rules
138
139 ifeq (yes,$(have-selinux))
140 LDLIBS-makedb := -lselinux
141 endif
142
143 libnss-libc = $(common-objpfx)linkobj/libc.so
144 # Target-specific variable setting to link objects using deprecated
145 # RPC interfaces with the version of libc.so that makes them available
146 # for new links:
147 $(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc)
148
149 $(libnss_db-dbs:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
150 @rm -f $@.new
151 (echo '#define EXTERN_PARSER';\
152 echo '#define GENERIC "../nss_db/db-XXX.c"';\
153 echo '#include "$<"') > $@.new
154 mv -f $@.new $@
155
156
157 $(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o)
158
159 $(inst_vardbdir)/Makefile: db-Makefile $(+force)
160 $(do-install)
161
162 libnss_test1.so-no-z-defs = 1
163 libnss_test2.so-no-z-defs = 1
164
165 rtld-tests-LDFLAGS += -Wl,--dynamic-list=nss_test.ver
166
167 libof-nss_test1 = extramodules
168 libof-nss_test2 = extramodules
169 $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps)
170 $(build-module)
171 $(objpfx)/libnss_test2.so: $(objpfx)nss_test2.os $(link-libc-deps)
172 $(build-module)
173 $(objpfx)nss_test2.os : nss_test1.c
174 ifdef libnss_test1.so-version
175 $(objpfx)/libnss_test1.so$(libnss_test1.so-version): $(objpfx)/libnss_test1.so
176 $(make-link)
177 endif
178 ifdef libnss_test2.so-version
179 $(objpfx)/libnss_test2.so$(libnss_test2.so-version): $(objpfx)/libnss_test2.so
180 $(make-link)
181 endif
182 $(patsubst %,$(objpfx)%.out,$(tests) $(tests-container)) : \
183 $(objpfx)/libnss_test1.so$(libnss_test1.so-version) \
184 $(objpfx)/libnss_test2.so$(libnss_test2.so-version)
185
186 ifeq (yes,$(have-thread-library))
187 $(objpfx)tst-cancel-getpwuid_r: $(shared-thread-library)
188 endif
189
190 $(objpfx)tst-nss-files-alias-leak.out: $(objpfx)/libnss_files.so
191 $(objpfx)tst-nss-files-alias-truncated.out: $(objpfx)/libnss_files.so
192
193 # Disable DT_RUNPATH on NSS tests so that the glibc internal NSS
194 # functions can load testing NSS modules via DT_RPATH.
195 LDFLAGS-tst-nss-test1 = -Wl,--disable-new-dtags
196 LDFLAGS-tst-nss-test2 = -Wl,--disable-new-dtags
197 LDFLAGS-tst-nss-test3 = -Wl,--disable-new-dtags
198 LDFLAGS-tst-nss-test4 = -Wl,--disable-new-dtags
199 LDFLAGS-tst-nss-test5 = -Wl,--disable-new-dtags