[go: up one dir, main page]

aboutsummaryrefslogblamecommitdiffstats
path: root/string/Makefile
blob: 8f31fa49e621c0351a2ce26ca2f8ca9c0eb53f3f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
                                                        


                                                                    


                                                                    



                                                                      
                                                 
 
                                                                  
                                                   
                                  





                                                   

                     














                            
 





















































                   

           






















                
 
















                                                                  








































                               
               




                    
                











                        
                     
              
               
                
               
                








                  
 











                            
                                                                   



                      




                                         
 
                                                                  

                             


                            

     



                                         
                
 






                                     
                                                                 







                                                                               
 
                                   

                                          

                                         
                                        
 








                                                             
                             
                                                             

                        

                                                     
                                                     
                                                   





                                             

                                                      
                                                 
                                          
                                         
 
     
# Copyright (C) 1991-2024 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 \
  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 += \
  explicit_bzero \
  memcpy \
  memmove \
  mempcpy \
  memset \
  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-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-strpbrk \
  test-strrchr \
  test-strspn \
  test-strstr \
  testcopy \
  tester \
  tst-bswap \
  tst-cmp \
  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 \
# 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 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-inl-tester.c += -fno-builtin
CFLAGS-noinl-tester.c += -fno-builtin
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-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

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

CFLAGS-argz-next.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-basename.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-ffs.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-memmem.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-memchr.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-mempcpy.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-stpcpy.c += $(config-cflags-wno-ignored-attributes)
CFLAGS-strnlen.c += $(config-cflags-wno-ignored-attributes)

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