# # SPDX-License-Identifier: BSD-3-Clause # # Copyright © 2019 Keith Packard # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # # 3. Neither the name of the copyright holder nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # OF THE POSSIBILITY OF SUCH DAMAGE. # subdir('sys') inc_headers = ['stdio.h'] install_headers(inc_headers, install_dir: include_dir) general_srcs_stdio = [ 'clearerr.c', 'fclose.c', 'fdopen.c', 'feof.c', 'ferror.c', 'fflush.c', 'fgetc.c', 'fgetpos.c', 'fgets.c', 'fileno.c', 'findfp.c', 'flags.c', 'flockfile.c', 'fopen.c', 'fprintf.c', 'fputc.c', 'fputs.c', 'fread.c', 'freopen.c', 'fscanf.c', 'fseek.c', 'fseeko.c', 'fsetpos.c', 'ftell.c', 'funlockfile.c', 'fvwrite.c', 'fwalk.c', 'fwrite.c', 'getc.c', 'getchar.c', 'getc_u.c', 'getchar_u.c', 'getdelim.c', 'getline.c', 'gets.c', 'makebuf.c', 'perror.c', 'printf.c', 'putc.c', 'putchar.c', 'putc_u.c', 'putchar_u.c', 'puts.c', 'refill.c', 'remove.c', 'rewind.c', 'rget.c', 'scanf.c', 'sccl.c', 'setbuf.c', 'setbuffer.c', 'setlinebuf.c', 'setvbuf.c', 'sfputs.c', 'sfputws.c', 'sprint.c', 'ssprint.c', 'ssputs.c', 'ssputws.c', 'sswprint.c', 'swprint.c', 'wbufw.c', 'snprintf.c', 'sprintf.c', 'sscanf.c', 'stdio.c', 'tmpfile.c', 'tmpnam.c', 'ungetc.c', 'vdprintf.c', 'vprintf.c', 'vscanf.c', 'vsnprintf.c', 'vsprintf.c', 'vsscanf.c', 'wbuf.c', 'wsetup.c', ] general_int_srcs_stdio = [ 'fiprintf.c', 'fiscanf.c', 'iprintf.c', 'iscanf.c', 'siprintf.c', 'siscanf.c', 'sniprintf.c', 'vdiprintf.c', 'vfprintf.c', 'vfwprintf.c', 'viprintf.c', 'viscanf.c', 'vsiprintf.c', 'vsiscanf.c', 'vsniprintf.c', ] if newlib_nano_formatted_io == false general_srcs_stdio += general_int_srcs_stdio endif elix_2_int_srcs_stdio = [ 'asiprintf.c', 'vasiprintf.c', ] elix_2_srcs_stdio = [ 'asprintf.c', 'fcloseall.c', 'fseeko.c', 'ftello.c', 'getw.c', 'mktemp.c', 'putw.c', 'vasprintf.c', ] if newlib_nano_formatted_io == false elix_2_srcs_stdio += elix_2_int_srcs_stdio endif elix_4_int_srcs_stdio = [ 'asniprintf.c', 'diprintf.c', 'vasniprintf.c', ] elix_4_srcs_stdio = [ 'asnprintf.c', 'clearerr_u.c', 'dprintf.c', 'feof_u.c', 'ferror_u.c', 'fflush_u.c', 'fgetc_u.c', 'fgets_u.c', 'fgetwc.c', 'fgetwc_u.c', 'fgetws.c', 'fgetws_u.c', 'fileno_u.c', 'fmemopen.c', 'fopencookie.c', 'fpurge.c', 'fputc_u.c', 'fputs_u.c', 'fputwc.c', 'fputwc_u.c', 'fputws.c', 'fputws_u.c', 'fread_u.c', 'fsetlocking.c', 'funopen.c', 'fwide.c', 'fwprintf.c', 'fwrite_u.c', 'fwscanf.c', 'getwc.c', 'getwc_u.c', 'getwchar.c', 'getwchar_u.c', 'open_memstream.c', 'putwc.c', 'putwc_u.c', 'putwchar.c', 'putwchar_u.c', 'stdio_ext.c', 'swprintf.c', 'swscanf.c', 'ungetwc.c', 'vasnprintf.c', 'vswprintf.c', 'vswscanf.c', 'vwprintf.c', 'vwscanf.c', 'wprintf.c', 'wscanf.c', ] if newlib_nano_formatted_io == false elix_4_srcs_stdio += elix_4_int_srcs_stdio endif elix_srcs_stdio = [] if newlib_elix_level >= 2 elix_srcs_stdio += elix_2_srcs_stdio endif if newlib_elix_level >= 4 elix_srcs_stdio += elix_4_srcs_stdio endif nano_printf_srcs_stdio = [ 'nano-svfprintf.c', 'nano-svfscanf.c', 'nano-vfprintf.c', 'nano-vfprintf_float.c', 'nano-vfprintf_i.c', 'nano-vfscanf.c', 'nano-vfscanf_float.c', 'nano-vfscanf_i.c', 'svfiwprintf.c', 'svfwprintf.c', 'vfiwprintf.c', 'svfiwscanf.c', 'svfwscanf.c', 'vfiwscanf.c', 'vfwscanf.c', ] std_printf_srcs_stdio = [ 'svfiprintf.c', 'svfprintf.c', 'svfiscanf.c', 'svfscanf.c', 'vfiprintf.c', 'vfscanf.c', 'vfiscanf.c', 'svfiwprintf.c', 'svfwprintf.c', 'vfiwprintf.c', 'svfiwscanf.c', 'svfwscanf.c', 'vfiwscanf.c', 'vfwscanf.c', ] srcs_stdio = general_srcs_stdio if newlib_nano_formatted_io == false srcs_stdio += general_int_srcs_stdio srcs_stdio += std_printf_srcs_stdio else srcs_stdio += nano_printf_srcs_stdio endif srcs_stdio += elix_srcs_stdio hdrs_stdio = [ 'floatio.h', 'fvwrite.h', 'local.h', 'nano-vfprintf_local.h', 'nano-vfscanf_local.h', 'stdio_ext.h', 'stdio.h', 'vfieeefp.h', ] srcs_stdio_use = [] foreach file : srcs_stdio s_file = fs.replace_suffix(file, '.S') if file in srcs_machine message('libc/stdio/' + file + ': machine overrides generic') elif s_file in srcs_machine message('libc/stdio/' + s_file + ': machine overrides generic') else srcs_stdio_use += file endif endforeach src_stdio = files(srcs_stdio_use) if enable_cdefs_tests foreach header : inc_headers test_name = 'check-cdef-' + header test(test_name, validate_cdefs, args: [meson.current_source_dir() / header] + cc.cmd_array() + c_args + inc_args, suite: 'headers') endforeach endif