stdlib: Remove use of mergesort on qsort (BZ 21719)
[glibc.git] / nss / Makefile
blob213b68720ba3862d0223ab09e6af37229390ed8f
1 # Copyright (C) 1996-2023 Free Software Foundation, Inc.
2 # This file is part of the GNU C Library.
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.
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.
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/>.
19 # Makefile for name service switch.
21 subdir := nss
23 include ../Makeconfig
25 headers := \
26 aliases.h \
27 grp.h \
28 gshadow.h \
29 nss.h \
30 pwd.h \
31 shadow.h \
32 # headers
34 # This is the trivial part which goes into libc itself.
35 routines = \
36 $(addsuffix -lookup,$(databases)) \
37 compat-lookup \
38 digits_dots \
39 getnssent \
40 getnssent_r \
41 nss_action \
42 nss_action_parse \
43 nss_database \
44 nss_fgetent_r \
45 nss_files_data \
46 nss_files_fopen \
47 nss_files_functions \
48 nss_hash \
49 nss_module \
50 nss_parse_line_result \
51 nss_readline \
52 nsswitch \
53 rewrite_field \
54 valid_field \
55 valid_list_field \
56 # routines
58 # alias routines:
59 routines += \
60 getaliasent \
61 getaliasent_r \
62 getaliasname \
63 getaliasname_r \
64 # routines
66 ifeq ($(have-thread-library),yes)
67 CFLAGS-getaliasent_r.c += -fexceptions
68 CFLAGS-getaliasent.c += -fexceptions
69 endif
71 # ethers routines:
72 routines += \
73 ether_hton \
74 ether_ntoh \
75 # routines
77 # grp routines:
78 routines += \
79 fgetgrent \
80 fgetgrent_r \
81 getgrent \
82 getgrent_r \
83 getgrgid \
84 getgrgid_r \
85 getgrnam \
86 getgrnam_r \
87 grp-merge \
88 initgroups \
89 putgrent \
90 # routines
92 ifeq ($(have-thread-library),yes)
93 CFLAGS-fgetgrent.c += -fexceptions
94 CFLAGS-fgetgrent_r.c += -fexceptions $(libio-mtsafe)
95 CFLAGS-getgrent.c += -fexceptions
96 CFLAGS-getgrent_r.c += -fexceptions
97 CFLAGS-getgrgid.c += -fexceptions
98 CFLAGS-getgrgid_r.c += -fexceptions
99 CFLAGS-getgrnam.c += -fexceptions
100 CFLAGS-getgrnam_r.c += -fexceptions
101 CFLAGS-initgroups.c += -fexceptions
102 CFLAGS-putgrent.c += -fexceptions $(libio-mtsafe)
103 endif
105 # gshadow routines:
106 routines += \
107 fgetsgent \
108 fgetsgent_r \
109 getsgent \
110 getsgent_r \
111 getsgnam \
112 getsgnam_r \
113 putsgent \
114 sgetsgent \
115 sgetsgent_r \
116 # routines
118 ifeq ($(have-thread-library),yes)
119 CFLAGS-getsgent_r.c += -fexceptions
120 CFLAGS-getsgent.c += -fexceptions
121 CFLAGS-fgetsgent.c += -fexceptions
122 CFLAGS-fgetsgent_r.c += -fexceptions $(libio-mtsafe)
123 CFLAGS-putsgent.c += -fexceptions $(libio-mtsafe)
124 CFLAGS-getsgnam.c += -fexceptions
125 CFLAGS-getsgnam_r.c += -fexceptions
126 endif
128 # hosts routines:
129 routines += \
130 getaddrinfo \
131 gethstbyad \
132 gethstbyad_r \
133 gethstbynm \
134 gethstbynm2 \
135 gethstbynm2_r \
136 gethstbynm_r \
137 gethstent \
138 gethstent_r \
139 getnameinfo \
140 # routines
142 ifeq ($(have-thread-library),yes)
143 CFLAGS-getaddrinfo.c += -fexceptions
144 CFLAGS-gethstbyad.c += -fexceptions
145 CFLAGS-gethstbyad_r.c += -fexceptions
146 CFLAGS-gethstbynm.c += -fexceptions
147 CFLAGS-gethstbynm_r.c += -fexceptions
148 CFLAGS-gethstbynm2.c += -fexceptions
149 CFLAGS-gethstbynm2_r.c += -fexceptions
150 CFLAGS-gethstent.c += -fexceptions
151 CFLAGS-gethstent_r.c += -fexceptions
152 endif
154 # netgroup routines:
155 routines += \
156 getnetgrent \
157 getnetgrent_r \
158 # routines
160 ifeq ($(have-thread-library),yes)
161 CFLAGS-getnetgrent.c += -fexceptions
162 CFLAGS-getnetgrent_r.c += -fexceptions
163 endif
165 # networks routines:
166 routines += \
167 getnetbyad \
168 getnetbyad_r \
169 getnetbynm \
170 getnetbynm_r \
171 getnetent \
172 getnetent_r \
173 # routines
175 ifeq ($(have-thread-library),yes)
176 CFLAGS-getnetbyad.c += -fexceptions
177 CFLAGS-getnetbyad_r.c += -fexceptions
178 CFLAGS-getnetbynm.c += -fexceptions
179 CFLAGS-getnetbynm_r.c += -fexceptions
180 CFLAGS-getnetent.c += -fexceptions
181 CFLAGS-getnetent_r.c += -fexceptions
182 endif
184 # protocols routines:
185 routines += \
186 getproto \
187 getproto_r \
188 getprtent \
189 getprtent_r \
190 getprtname \
191 getprtname_r \
192 # routines
194 ifeq ($(have-thread-library),yes)
195 CFLAGS-getprtent_r.c += -fexceptions
196 CFLAGS-getprtent.c += -fexceptions
197 endif
199 # pwd routines:
200 routines += \
201 fgetpwent \
202 fgetpwent_r \
203 getpw \
204 getpwent \
205 getpwent_r \
206 getpwnam \
207 getpwnam_r \
208 getpwuid \
209 getpwuid_r \
210 putpwent \
211 # routines
213 ifeq ($(have-thread-library),yes)
214 CFLAGS-fgetpwent_r.c += $(libio-mtsafe)
215 CFLAGS-getpw.c += -fexceptions
216 CFLAGS-getpwent.c += -fexceptions
217 CFLAGS-getpwent_r.c += -fexceptions
218 endif
220 # rpc routines:
221 routines += \
222 getrpcbyname \
223 getrpcbyname_r \
224 getrpcbynumber \
225 getrpcbynumber_r \
226 getrpcent \
227 getrpcent_r \
228 # routines
230 ifeq ($(have-thread-library),yes)
231 CFLAGS-getrpcent_r.c += -fexceptions
232 CFLAGS-getrpcent.c += -fexceptions
233 endif
235 # services routines:
236 routines += \
237 getservent \
238 getservent_r \
239 getsrvbynm \
240 getsrvbynm_r \
241 getsrvbypt \
242 getsrvbypt_r \
243 # routines
245 ifeq ($(have-thread-library),yes)
246 CFLAGS-getservent_r.c += -fexceptions
247 CFLAGS-getservent.c += -fexceptions
248 endif
250 # shadow routines
251 routines += \
252 fgetspent \
253 fgetspent_r \
254 getspent \
255 getspent_r \
256 getspnam \
257 getspnam_r \
258 lckpwdf \
259 putspent \
260 sgetspent \
261 sgetspent_r \
262 # routines
264 ifeq ($(have-thread-library),yes)
265 CFLAGS-getspent_r.c += -fexceptions
266 CFLAGS-getspent.c += -fexceptions
267 CFLAGS-fgetspent.c += -fexceptions
268 CFLAGS-fgetspent_r.c += -fexceptions $(libio-mtsafe)
269 CFLAGS-putspent.c += -fexceptions $(libio-mtsafe)
270 CFLAGS-getspnam.c += -fexceptions
271 CFLAGS-getspnam_r.c += -fexceptions
272 endif
274 # These are the databases that go through nss dispatch.
275 # Caution: if you add a database here, you must add its real name
276 # in databases.def, too.
277 databases = \
278 alias \
279 ethers \
280 grp \
281 hosts \
282 netgrp \
283 network \
284 proto \
285 pwd \
286 service \
287 sgrp \
288 spwd \
289 # databases
291 ifneq (,$(filter sunrpc,$(subdirs)))
292 databases += key rpc
293 have-sunrpc := 1
294 else
295 have-sunrpc := 0
296 endif
297 CPPFLAGS-getent.c = -DHAVE_SUNRPC=$(have-sunrpc)
299 others := getent makedb
300 install-bin := getent makedb
301 makedb-modules = xmalloc hash-string
302 others-extras = $(makedb-modules)
303 extra-objs += $(makedb-modules:=.o)
305 tests-static = tst-field
307 tests-internal := \
308 tst-field \
309 tst-rfc3484 \
310 tst-rfc3484-2 \
311 tst-rfc3484-3 \
312 # tests-internal
314 tests := \
315 bug17079 \
316 test-digits-dots \
317 test-netdb \
318 test-rpcent \
319 testgrp \
320 tst-fgetsgent_r \
321 tst-getaddrinfo \
322 tst-getaddrinfo2 \
323 tst-getaddrinfo3 \
324 tst-gethnm \
325 tst-getpw \
326 tst-gshadow \
327 tst-nss-getpwent \
328 tst-nss-hash \
329 tst-nss-test1 \
330 tst-nss-test2 \
331 tst-nss-test4 \
332 tst-nss-test5 \
333 tst-nss-test_errno \
334 tst-putgrent \
335 tst-putpwent \
336 tst-putsgent \
337 tst-putspent \
338 tst-sgetsgent \
339 tst-shadow \
340 # tests
342 xtests := \
343 bug-erange \
344 tst-getaddrinfo4 \
345 tst-getaddrinfo5 \
346 # xtests
348 tests-container := \
349 tst-initgroups1 \
350 tst-initgroups2 \
351 tst-nss-compat1 \
352 tst-nss-db-endgrent \
353 tst-nss-db-endpwent \
354 tst-nss-files-hosts-long \
355 tst-nss-files-hosts-v4mapped \
356 tst-nss-gai-actions \
357 tst-nss-gai-hv2-canonname \
358 tst-nss-test3 \
359 tst-reload1 \
360 tst-reload2 \
361 # tests-container
363 ifeq (yes,$(build-shared))
364 # Tests which need libdl
365 tests += tst-nss-files-hosts-erange
366 tests += tst-nss-files-hosts-multi
367 tests += tst-nss-files-hosts-getent
368 tests += tst-nss-files-alias-leak
369 tests += tst-nss-files-alias-truncated
370 # tst_fgetgrent currently only works with shared libraries
371 test-srcs := tst_fgetgrent
372 ifeq ($(run-built-tests),yes)
373 tests-special += $(objpfx)tst_fgetgrent.out
374 $(objpfx)tst_fgetgrent.out: tst_fgetgrent.sh $(objpfx)tst_fgetgrent
375 $(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \
376 $(evaluate-test)
377 endif
378 endif
380 # If we have a thread library then we can test cancellation against
381 # some routines like getpwuid_r.
382 ifeq (yes,$(have-thread-library))
383 tests += tst-cancel-getpwuid_r
384 endif
386 # Specify rules for the nss_* modules. We have some services.
387 services := files db compat
389 extra-libs = $(services:%=libnss_%)
390 # These libraries will be built in the `others' pass rather than
391 # the `lib' pass, because they depend on libc.so being built already.
392 extra-libs-others = $(extra-libs)
394 # The sources are found in the appropriate subdir.
395 subdir-dirs = $(services:%=nss_%)
396 vpath %.c $(subdir-dirs) ../locale/programs ../intl
399 routines += \
400 $(addprefix files-, $(filter-out key, $(databases))) \
401 files-init \
402 files-initgroups \
403 # routines
405 # Build only an empty shared libnss_files.
406 libnss_files-inhibit-o = $(filter-out .os,$(object-suffixes))
408 # Pretend that libnss_files.so is a linker script, so that the symbolic link
409 # is not installed.
410 install-lib-ldscripts = libnss_files.so
411 $(inst_libdir)/libnss_files.so:
413 libnss_db-dbs := $(addprefix db-,\
414 $(filter-out hosts network key alias,\
415 $(databases))) \
416 db-initgroups
417 libnss_db-routines := $(libnss_db-dbs) db-open db-init hash-string
418 generated += $(filter-out db-alias.c db-netgrp.c, \
419 $(addsuffix .c,$(libnss_db-dbs)))
421 libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups) \
422 nisdomain
424 install-others += $(inst_vardbdir)/Makefile
426 # Build static module into libc if requested
427 libnss_db-inhibit-o = $(filter-out .os,$(object-suffixes))
428 libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes))
429 ifeq ($(build-static-nss),yes)
430 tests-static += tst-nss-static
431 endif
432 extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os \
433 nss_test_gai_hv2_canonname.os
435 ifeq ($(run-built-tests),yes)
436 ifneq (no,$(PERL))
437 tests-special += $(objpfx)mtrace-tst-nss-gai-hv2-canonname.out
438 endif
439 endif
441 generated += mtrace-tst-nss-gai-hv2-canonname.out \
442 tst-nss-gai-hv2-canonname.mtrace
444 include ../Rules
446 ifeq (yes,$(have-selinux))
447 LDLIBS-makedb := -lselinux
448 endif
450 libnss-libc = $(common-objpfx)linkobj/libc.so
451 # Target-specific variable setting to link objects using deprecated
452 # RPC interfaces with the version of libc.so that makes them available
453 # for new links:
454 $(services:%=$(objpfx)libnss_%.so): libc-for-link = $(libnss-libc)
456 $(libnss_db-dbs:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
457 @rm -f $@.new
458 (echo '#define EXTERN_PARSER';\
459 echo '#define GENERIC "../nss_db/db-XXX.c"';\
460 echo '#include "$<"') > $@.new
461 mv -f $@.new $@
464 $(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o)
466 $(inst_vardbdir)/Makefile: db-Makefile $(+force)
467 $(do-install)
469 libnss_test1.so-no-z-defs = 1
470 libnss_test2.so-no-z-defs = 1
472 rtld-tests-LDFLAGS += -Wl,--dynamic-list=nss_test.ver
474 libof-nss_test1 = extramodules
475 libof-nss_test2 = extramodules
476 libof-nss_test_errno = extramodules
477 libof-nss_test_gai_hv2_canonname = extramodules
478 $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps)
479 $(build-module)
480 $(objpfx)/libnss_test2.so: $(objpfx)nss_test2.os $(link-libc-deps)
481 $(build-module)
482 $(objpfx)/libnss_test_errno.so: $(objpfx)nss_test_errno.os $(link-libc-deps)
483 $(build-module)
484 $(objpfx)/libnss_test_gai_hv2_canonname.so: \
485 $(objpfx)nss_test_gai_hv2_canonname.os $(link-libc-deps)
486 $(build-module)
487 $(objpfx)nss_test2.os : nss_test1.c
488 # Use the nss_files suffix for these objects as well.
489 $(objpfx)/libnss_test1.so$(libnss_files.so-version): $(objpfx)/libnss_test1.so
490 $(make-link)
491 $(objpfx)/libnss_test2.so$(libnss_files.so-version): $(objpfx)/libnss_test2.so
492 $(make-link)
493 $(objpfx)/libnss_test_errno.so$(libnss_files.so-version): \
494 $(objpfx)/libnss_test_errno.so
495 $(make-link)
496 $(objpfx)/libnss_test_gai_hv2_canonname.so$(libnss_files.so-version): \
497 $(objpfx)/libnss_test_gai_hv2_canonname.so
498 $(make-link)
499 $(patsubst %,$(objpfx)%.out,$(tests) $(tests-container)) : \
500 $(objpfx)/libnss_test1.so$(libnss_files.so-version) \
501 $(objpfx)/libnss_test2.so$(libnss_files.so-version) \
502 $(objpfx)/libnss_test_errno.so$(libnss_files.so-version) \
503 $(objpfx)/libnss_test_gai_hv2_canonname.so$(libnss_files.so-version)
505 ifeq (yes,$(have-thread-library))
506 $(objpfx)tst-cancel-getpwuid_r: $(shared-thread-library)
507 endif
509 $(objpfx)tst-nss-files-alias-leak.out: $(objpfx)/libnss_files.so
510 $(objpfx)tst-nss-files-alias-truncated.out: $(objpfx)/libnss_files.so
512 tst-nss-gai-hv2-canonname-ENV = \
513 MALLOC_TRACE=$(objpfx)tst-nss-gai-hv2-canonname.mtrace \
514 LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so
515 $(objpfx)mtrace-tst-nss-gai-hv2-canonname.out: \
516 $(objpfx)tst-nss-gai-hv2-canonname.out
517 { test -r $(objpfx)tst-nss-gai-hv2-canonname.mtrace \
518 || ( echo "tst-nss-gai-hv2-canonname.mtrace does not exist"; exit 77; ) \
519 && $(common-objpfx)malloc/mtrace \
520 $(objpfx)tst-nss-gai-hv2-canonname.mtrace; } > $@; \
521 $(evaluate-test)
523 # Disable DT_RUNPATH on NSS tests so that the glibc internal NSS
524 # functions can load testing NSS modules via DT_RPATH.
525 LDFLAGS-tst-nss-test1 = -Wl,--disable-new-dtags
526 LDFLAGS-tst-nss-test2 = -Wl,--disable-new-dtags
527 LDFLAGS-tst-nss-test3 = -Wl,--disable-new-dtags
528 LDFLAGS-tst-nss-test4 = -Wl,--disable-new-dtags
529 LDFLAGS-tst-nss-test5 = -Wl,--disable-new-dtags
530 LDFLAGS-tst-nss-test_errno = -Wl,--disable-new-dtags
531 LDFLAGS-tst-nss-test_gai_hv2_canonname = -Wl,--disable-new-dtags