| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- # Copyright (C) 1991-2026 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 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
- # Lesser General Public License for more details.
- # You should have received a copy of the GNU Lesser General Public
- # License along with the GNU C Library; if not, see
- # <https://www.gnu.org/licenses/>.
- #
- # Sub-makefile for string portion of library.
- #
- subdir := string
- include ../Makeconfig
- headers := \
- argz.h \
- bits/byteswap.h \
- bits/endian.h \
- bits/endianness.h \
- bits/string_fortified.h \
- bits/strings_fortified.h \
- bits/uintn-identity.h \
- byteswap.h \
- endian.h \
- envz.h \
- memory.h \
- string.h \
- strings.h \
- # headers
- routines := \
- _strerror \
- argz-addsep \
- argz-append \
- argz-count \
- argz-create \
- argz-ctsep \
- argz-delete \
- argz-extract \
- argz-insert \
- argz-next \
- argz-replace \
- argz-stringify \
- basename \
- bcopy \
- bzero \
- envz \
- explicit_bzero \
- ffs \
- ffsll \
- memccpy \
- memchr \
- memcmp \
- memcmpeq \
- memcpy \
- memfrob \
- memmem \
- memmove \
- mempcpy \
- memrchr \
- memset \
- memset_explicit \
- rawmemchr \
- sigabbrev_np \
- sigdescr_np \
- stpcpy \
- stpncpy \
- strcasecmp \
- strcasecmp_l \
- strcasestr \
- strcat \
- strchr \
- strchrnul \
- strcmp \
- strcoll \
- strcoll_l \
- strcpy \
- strcspn \
- strdup \
- strerror \
- strerror_l \
- strerrordesc_np \
- strerrorname_np \
- strfry \
- string-inlines \
- strlcat \
- strlcpy \
- strlen \
- strncase \
- strncase_l \
- strncat \
- strncmp \
- strncpy \
- strndup \
- strnlen \
- strpbrk \
- strrchr \
- strsep \
- strsignal \
- strspn \
- strstr \
- strtok \
- strtok_r \
- strverscmp \
- strxfrm \
- strxfrm_l \
- swab \
- wordcopy \
- xpg-strerror \
- # routines
- # Exclude fortified routines from being built with _FORTIFY_SOURCE
- routines_no_fortify += \
- bzero \
- explicit_bzero \
- memcpy \
- memmove \
- mempcpy \
- memset \
- memset_explicit \
- stpcpy \
- stpncpy \
- strcat \
- strcpy \
- strlcat \
- strlcpy \
- strncat \
- strncpy \
- # routines_no_fortify
- tests := \
- bug-envz1 \
- bug-strcoll1 \
- bug-strcoll2 \
- bug-strncat1 \
- bug-strpbrk1 \
- bug-strspn1 \
- bug-strtok1 \
- inl-tester \
- noinl-tester \
- stratcliff \
- test-bcopy \
- test-bzero \
- test-endian-file-scope \
- test-endian-sign-conversion \
- test-endian-types \
- test-explicit_bzero \
- test-ffs \
- test-memccpy \
- test-memchr \
- test-memcmp \
- test-memcmpeq \
- test-memcpy \
- test-memcpy-large \
- test-memmem \
- test-memmove \
- test-mempcpy \
- test-memrchr \
- test-memset \
- test-memset_explicit \
- test-rawmemchr \
- test-sig_np \
- test-stpcpy \
- test-stpncpy \
- test-strcasecmp \
- test-strcasestr \
- test-strcat \
- test-strchr \
- test-strchrnul \
- test-strcmp \
- test-strcpy \
- test-strcspn \
- test-strdup \
- test-strlen \
- test-strncasecmp \
- test-strncat \
- test-strncmp \
- test-strncpy \
- test-strndup \
- test-strnlen \
- test-strnlen-nonarray \
- test-strpbrk \
- test-strrchr \
- test-strspn \
- test-strstr \
- testcopy \
- tester \
- tst-bswap \
- tst-cmp \
- tst-const \
- tst-endian \
- tst-inlcall \
- tst-memmove-overflow \
- tst-strerror-fail \
- tst-strfry \
- tst-strlcat \
- tst-strlcat2 \
- tst-strlcpy \
- tst-strlcpy2 \
- tst-strlen \
- tst-strtok \
- tst-strtok_r \
- tst-strxfrm \
- tst-strxfrm2 \
- tst-svc \
- tst-svc2 \
- tst-xbzero-opt \
- tst-xmemset-opt \
- # tests
- tests-static-internal := \
- test-memswap \
- # tests-static-internal
- tests-internal := \
- $(tests-static-internal) \
- # tests-internal
- tests-static := \
- $(tests-static-internal) \
- # tests-static
- # Both tests require the .mo translation files generated by msgfmt.
- tests-translation := \
- tst-strerror \
- tst-strsignal \
- # tests-translation
- tests-container += $(tests-translation)
- ifeq ($(MSGFMT),:)
- tests-unsupported += $(tests-translation)
- endif
- # This test allocates a lot of memory and can run for a long time.
- xtests += tst-strcoll-overflow
- # This test runs for a long time.
- xtests += test-strncmp-nonarray
- # This test needs libdl.
- ifeq (yes,$(build-shared))
- tests += test-strerror-errno
- endif
- ifeq ($(run-built-tests),yes)
- tests-special += $(objpfx)tst-svc-cmp.out
- endif
- include ../Rules
- CFLAGS-tester.c += $(test-config-cflags-wno-fortify-source)
- CFLAGS-inl-tester.c += -fno-builtin \
- $(test-config-cflags-wno-fortify-source)
- CFLAGS-noinl-tester.c += -fno-builtin \
- $(test-config-cflags-wno-fortify-source)
- CFLAGS-tst-strlen.c += -fno-builtin
- CFLAGS-stratcliff.c += -fno-builtin
- CFLAGS-test-ffs.c += -fno-builtin
- CFLAGS-tst-inlcall.c += -fno-builtin
- CFLAGS-tst-xbzero-opt.c += -O3
- CFLAGS-tst-xmemset-opt.c += -O3
- CFLAGS-test-endian-sign-conversion.c += -Werror -Wsign-conversion
- # BZ 21006: Resolve all functions but at least explicit_bzero at startup.
- # Otherwise the test fails on s390x as the memcpy in prepare_test_buffer is
- # done by loading r4 / r5 with the test_pattern and using store multiple
- # instruction to store r4 / r5 to buf. If explicit_bzero would be resolved in
- # setup_explicit_clear, r4 / r5 would be stored to stack by _dl_runtime_resolve
- # and the call to memmem in count_test_patterns will find a hit of the
- # test_pattern on the stack.
- LDFLAGS-tst-xbzero-opt = -z now
- LDFLAGS-tst-xmemset-opt = -z now
- # Called during TLS initialization.
- CFLAGS-memcpy.c += $(no-stack-protector)
- CFLAGS-wordcopy.c += $(no-stack-protector)
- # Called during static initialization
- CFLAGS-strncmp.c += $(no-stack-protector)
- CFLAGS-memset.c += $(no-stack-protector)
- ifeq ($(run-built-tests),yes)
- $(objpfx)tst-svc-cmp.out: tst-svc.expect $(objpfx)tst-svc.out
- cmp $^ > $@; \
- $(evaluate-test)
- LOCALES := de_DE.UTF-8 en_US.ISO-8859-1 en_US.UTF-8 \
- tr_TR.ISO-8859-9 tr_TR.UTF-8 cs_CZ.UTF-8 \
- da_DK.ISO-8859-1 en_GB.UTF-8 pt_BR.UTF-8
- include ../gen-locales.mk
- $(objpfx)test-strcasecmp.out: $(gen-locales)
- $(objpfx)test-strncasecmp.out: $(gen-locales)
- $(objpfx)tst-strxfrm.out: $(gen-locales)
- $(objpfx)tst-strxfrm2.out: $(gen-locales)
- # bug-strcoll2 needs cs_CZ.UTF-8 and da_DK.ISO-8859-1.
- $(objpfx)bug-strcoll2.out: $(gen-locales)
- $(objpfx)tst-strcoll-overflow.out: $(gen-locales)
- $(objpfx)tst-strsignal.out: $(gen-locales)
- $(objpfx)tst-strerror.out: $(gen-locales)
- endif
|