advanced help
phrase:
attribute:
attribute:
attribute:
order:
per page:
clip:
action:
Results of 1 - 1 of about 725 for Android 12 (1.966 sec.)
android (2801), 12 (27799)
GNU Gnulib
#score: 5143
@digest: cc38fb68fdf1cd3bc96826dd9c20ae97
@id: 376417
@mdate: 2024-01-18T11:52:02Z
@size: 4781920
@type: text/html
content-type: text/html; charset=utf-8
description: GNU Gnulib
distribution: global
generator: makeinfo
keywords: GNU Gnulib
resource-type: document
viewport: width=device-width,initial-scale=1
#keywords: pthread (56772), gnulib (48462), xdr (23398), glibc (22956), 13 (17396), 10 (15272), modules (14673), nis (14486), unlocked (14183), platforms (10293), trace (9977), attr (9687), posix (9014), tested (7902), tool (7838), module (7702), extensions (7316), substitutes (7277), makefile (7088), portability (6395), import (6161), sys (4382), gettext (3919), directory (3628), supported (3346), operator (2967), files (2794), contents (2439), package (2421), source (2340), autoconf (2189), libraries (2155)
GNU Gnulib Next: Brief Overview , Up: (dir) [ Contents ][ Index ] GNU Gnulib This manual is for GNU Gnulib (updated 2024-01-18 11:42:33), which is a library of common routines intended to be shared at the source level. Copyright © 2004–2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. Table of Contents 1 Brief Overview 1.1 Gnulib Basics 1.2 Git Checkout 1.3 Keeping Up-to-date 1.4 Contributing to Gnulib 1.4.1 Gnulib licensing 1.4.2 Indent with spaces not TABs 1.4.3 How to add a new module 1.5 Portability guidelines 1.5.1 C language versions 1.5.2 C99 features assumed by Gnulib 1.5.3 C99 features avoided by Gnulib 1.5.4 Other portability assumptions made by Gnulib 1.6 High Quality 1.6.1 Stable Branches 1.6.2 Writing reliable code 1.7 Join the GNU Project 2 Philosophy 2.1 Benefits of using Gnulib 2.2 Library vs. Reusable Code 2.3 Portability and Application Code 2.4 Target Platforms 2.4.1 Supported Platforms 2.4.2 Formerly Supported Platforms 2.4.3 Unsupported Platforms 2.5 Modules 2.6 Various Kinds of Modules 2.6.1 Support for ISO C or POSIX functions. 2.6.2 Enhancements of ISO C or POSIX functions 2.6.3 Portable general use facilities 2.6.4 Reusable application code 2.6.5 Object oriented classes 2.6.6 Interfaces to external libraries 2.6.7 Build / maintenance infrastructure 2.7 Collaborative Development 2.8 Copyright 2.9 Steady Development 2.10 Openness 3 Invoking gnulib-tool 3.1 Finding modules 3.2 Initial import 3.3 Modified imports 3.4 Simple update 3.5 Changing your sources for use with Gnulib 3.6 Changing your link commands for use with Gnulib 3.7 Finding recommended ISO C and POSIX function substitutes 3.8 Modifying the build rules of a Gnulib import directory 3.9 Building directly from the top-level directory 3.10 Using Gnulib for both a library and a program 3.11 Caveat: gettextize and autopoint users 3.12 Handling Gnulib's own message translations 3.13 Integration with Version Control Systems 3.14 Bundling the unit tests of the Gnulib modules 3.15 Avoiding unnecessary checks and compilations 4 Writing modules 4.1 Source code files 4.2 Header files 4.3 Implementation files 4.4 Specification 4.5 Module description 4.6 Autoconf macros 4.7 Making proper use of AC_LIBOBJ 4.8 Unit test modules 4.9 Incompatible changes 5 Extending Gnulib 6 Miscellaneous Notes 6.1 Out of memory handling 6.2 Obsolete modules 6.3 Extra tests modules 6.4 Modules that modify the way other modules work 6.5 A C++ namespace for gnulib 6.6 License Texinfo sources 6.7 Building gnulib 7 Building the ISO C and POSIX Substitutes 8 ISO C Keyword Substitutes 8.1 alignof and alignas 8.2 bool 8.3 nullptr 8.4 static_assert 9 ISO C and POSIX Header File Substitutes 9.1 aio.h 9.2 arpa/inet.h 9.3 assert.h 9.4 complex.h 9.5 cpio.h 9.6 ctype.h 9.7 dirent.h 9.8 dlfcn.h 9.9 errno.h 9.10 fcntl.h 9.11 fenv.h 9.12 float.h 9.13 fmtmsg.h 9.14 fnmatch.h 9.15 ftw.h 9.16 glob.h 9.17 grp.h 9.18 iconv.h 9.19 inttypes.h 9.20 iso646.h 9.21 langinfo.h 9.22 libgen.h 9.23 limits.h 9.24 locale.h 9.25 math.h 9.26 monetary.h 9.27 mqueue.h 9.28 ndbm.h 9.29 net/if.h 9.30 netdb.h 9.31 netinet/in.h 9.32 netinet/tcp.h 9.33 nl_types.h 9.34 poll.h 9.35 pthread.h 9.36 pwd.h 9.37 regex.h 9.38 sched.h 9.39 search.h 9.40 semaphore.h 9.41 setjmp.h 9.42 signal.h 9.43 spawn.h 9.44 stdalign.h 9.45 stdarg.h 9.46 stdatomic.h 9.47 stdbool.h 9.48 stdckdint.h 9.49 stddef.h 9.50 stdint.h 9.51 stdio.h 9.52 stdlib.h 9.53 stdnoreturn.h 9.54 string.h 9.55 strings.h 9.56 stropts.h 9.57 sys/ipc.h 9.58 sys/mman.h 9.59 sys/msg.h 9.60 sys/resource.h 9.61 sys/select.h 9.62 sys/sem.h 9.63 sys/shm.h 9.64 sys/socket.h 9.65 sys/stat.h 9.66 sys/statvfs.h 9.67 sys/time.h 9.68 sys/timeb.h 9.69 sys/times.h 9.70 sys/types.h 9.71 sys/uio.h 9.72 sys/un.h 9.73 sys/utsname.h 9.74 sys/wait.h 9.75 syslog.h 9.76 tar.h 9.77 termios.h 9.78 tgmath.h 9.79 threads.h 9.80 time.h 9.81 trace.h 9.82 uchar.h 9.83 ucontext.h 9.84 ulimit.h 9.85 unistd.h 9.86 utime.h 9.87 utmpx.h 9.88 wchar.h 9.89 wctype.h 9.90 wordexp.h 10 ISO C and POSIX Function Substitutes 10.1 FD_CLR 10.2 FD_ISSET 10.3 FD_SET 10.4 FD_ZERO 10.5 _Exit 10.6 _exit 10.7 _longjmp 10.8 _setjmp 10.9 _tolower 10.10 _toupper 10.11 a64l 10.12 abort 10.13 abs 10.14 accept 10.15 access 10.16 acos 10.17 acosf 10.18 acosh 10.19 acoshf 10.20 acoshl 10.21 acosl 10.22 aio_cancel 10.23 aio_error 10.24 aio_fsync 10.25 aio_read 10.26 aio_return 10.27 aio_suspend 10.28 aio_write 10.29 alarm 10.30 aligned_alloc 10.31 alphasort 10.32 asctime 10.33 asctime_r 10.34 asin 10.35 asinf 10.36 asinh 10.37 asinhf 10.38 asinhl 10.39 asinl 10.40 assert 10.41 atan 10.42 atan2 10.43 atan2f 10.44 atan2l 10.45 atanf 10.46 atanh 10.47 atanhf 10.48 atanhl 10.49 atanl 10.50 atexit 10.51 atof 10.52 atoi 10.53 atol 10.54 atoll 10.55 basename 10.56 bind 10.57 bsearch 10.58 btowc 10.59 c8rtomb 10.60 c16rtomb 10.61 c32rtomb 10.62 cabs 10.63 cabsf 10.64 cabsl 10.65 cacos 10.66 cacosf 10.67 cacosh 10.68 cacoshf 10.69 cacoshl 10.70 cacosl 10.71 calloc 10.72 call_once 10.73 canonicalize 10.74 canonicalizef 10.75 canonicalizel 10.76 carg 10.77 cargf 10.78 cargl 10.79 casin 10.80 casinf 10.81 casinh 10.82 casinhf 10.83 casinhl 10.84 casinl 10.85 catan 10.86 catanf 10.87 catanh 10.88 catanhf 10.89 catanhl 10.90 catanl 10.91 catclose 10.92 catgets 10.93 catopen 10.94 cbrt 10.95 cbrtf 10.96 cbrtl 10.97 ccos 10.98 ccosf 10.99 ccosh 10.100 ccoshf 10.101 ccoshl 10.102 ccosl 10.103 ceil 10.104 ceilf 10.105 ceill 10.106 cexp 10.107 cexpf 10.108 cexpl 10.109 cfgetispeed 10.110 cfgetospeed 10.111 cfsetispeed 10.112 cfsetospeed 10.113 chdir 10.114 chmod 10.115 chown 10.116 cimag 10.117 cimagf 10.118 cimagl 10.119 clearerr 10.120 clock 10.121 clock_getcpuclockid 10.122 clock_getres 10.123 clock_gettime 10.124 clock_nanosleep 10.125 clock_settime 10.126 clog 10.127 clogf 10.128 clogl 10.129 close 10.130 closedir 10.131 closelog 10.132 cnd_broadcast 10.133 cnd_destroy 10.134 cnd_init 10.135 cnd_signal 10.136 cnd_timedwait 10.137 cnd_wait 10.138 confstr 10.139 conj 10.140 conjf 10.141 conjl 10.142 connect 10.143 copysign 10.144 copysignf 10.145 copysignl 10.146 cos 10.147 cosf 10.148 cosh 10.149 coshf 10.150 coshl 10.151 cosl 10.152 cpow 10.153 cpowf 10.154 cpowl 10.155 cproj 10.156 cprojf 10.157 cprojl 10.158 creal 10.159 crealf 10.160 creall 10.161 creat 10.162 crypt 10.163 csin 10.164 csinf 10.165 csinh 10.166 csinhf 10.167 csinhl 10.168 csinl 10.169 csqrt 10.170 csqrtf 10.171 csqrtl 10.172 ctan 10.173 ctanf 10.174 ctanh 10.175 ctanhf 10.176 ctanhl 10.177 ctanl 10.178 ctermid 10.179 ctime 10.180 ctime_r 10.181 daddl 10.182 daylight 10.183 dbm_clearerr 10.184 dbm_close 10.185 dbm_delete 10.186 dbm_error 10.187 dbm_fetch 10.188 dbm_firstkey 10.189 dbm_nextkey 10.190 dbm_open 10.191 dbm_store 10.192 ddivl 10.193 difftime 10.194 dirfd 10.195 dirname 10.196 div 10.197 dlclose 10.198 dlerror 10.199 dlopen 10.200 dlsym 10.201 dmull 10.202 dprintf 10.203 drand48 10.204 dsubl 10.205 dup 10.206 dup2 10.207 duplocale 10.208 encrypt 10.209 endgrent 10.210 endhostent 10.211 endnetent 10.212 endprotoent 10.213 endpwent 10.214 endservent 10.215 endutxent 10.216 environ 10.217 erand48 10.218 erf 10.219 erfc 10.220 erfcf 10.221 erfcl 10.222 erff 10.223 erfl 10.224 errno 10.225 execl 10.226 execle 10.227 execlp 10.228 execv 10.229 execve 10.230 execvp 10.231 exit 10.232 exp 10.233 exp2 10.234 exp2f 10.235 exp2l 10.236 expf 10.237 expl 10.238 expm1 10.239 expm1f 10.240 expm1l 10.241 fabs 10.242 fabsf 10.243 fabsl 10.244 faccessat 10.245 fadd 10.246 faddl 10.247 fattach 10.248 fchdir 10.249 fchmod 10.250 fchmodat 10.251 fchown 10.252 fchownat 10.253 fclose 10.254 fcntl 10.255 fdatasync 10.256 fdetach 10.257 fdim 10.258 fdimf 10.259 fdiml 10.260 fdiv 10.261 fdivl 10.262 fdopen 10.263 fdopendir 10.264 feclearexcept 10.265 fegetenv 10.266 fegetexceptflag 10.267 fegetmode 10.268 fegetround 10.269 feholdexcept 10.270 feof 10.271 feraiseexcept 10.272 ferror 10.273 fesetenv 10.274 fesetexcept 10.275 fesetexceptflag 10.276 fesetmode 10.277 fesetround 10.278 fetestexcept 10.279 fetestexceptflag 10.280 feupdateenv 10.281 fexecve 10.282 fflush 10.283 ffs 10.284 fgetc 10.285 fgetpos 10.286 fgets 10.287 fgetwc 10.288 fgetws 10.289 fileno 10.290 flockfile 10.291 floor 10.292 floorf 10.293 floorl 10.294 fma 10.295 fmaf 10.296 fmal 10.297 fmax 10.298 fmaxf 10.299 fmaxl 10.300 fmaxmag 10.301 fmaxmagf 10.302 fmaxmagl 10.303 fmemopen 10.304 fmin 10.305 fminf 10.306 fminl 10.307 fminmag 10.308 fminmagf 10.309 fminmagl 10.310 fmod 10.311 fmodf 10.312 fmodl 10.313 fmtmsg 10.314 fmul 10.315 fmull 10.316 fnmatch 10.317 fopen 10.318 fork 10.319 fpathconf 10.320 fpclassify 10.321 fprintf 10.322 fputc 10.323 fputs 10.324 fputwc 10.325 fputws 10.326 fread 10.327 free 10.328 freeaddrinfo 10.329 freelocale 10.330 freopen 10.331 frexp 10.332 frexpf 10.333 frexpl 10.334 fromfp 10.335 fromfpf 10.336 fromfpl 10.337 fromfpx 10.338 fromfpxf 10.339 fromfpxl 10.340 fscanf 10.341 fseek 10.342 fseeko 10.343 fsetpos 10.344 fstat 10.345 fstatat 10.346 fstatvfs 10.347 fsub 10.348 fsubl 10.349 fsync 10.350 ftell 10.351 ftello 10.352 ftok 10.353 ftruncate 10.354 ftrylockfile 10.355 ftw 10.356 funlockfile 10.357 futimens 10.358 fwide 10.359 fwprintf 10.360 fwrite 10.361 fwscanf 10.362 gai_strerror 10.363 getaddrinfo 10.364 getc 10.365 getc_unlocked 10.366 getchar 10.367 getchar_unlocked 10.368 getcwd 10.369 getdate 10.370 getdate_err 10.371 getdelim 10.372 getegid 10.373 getenv 10.374 geteuid 10.375 getgid 10.376 getgrent 10.377 getgrgid 10.378 getgrgid_r 10.379 getgrnam 10.380 getgrnam_r 10.381 getgroups 10.382 gethostent 10.383 gethostid 10.384 gethostname 10.385 getitimer 10.386 getline 10.387 getlogin 10.388 getlogin_r 10.389 getmsg 10.390 getnameinfo 10.391 getnetbyaddr 10.392 getnetbyname 10.393 getnetent 10.394 getopt 10.395 getpayload 10.396 getpayloadf 10.397 getpayloadl 10.398 getpeername 10.399 getpgid 10.400 getpgrp 10.401 getpid 10.402 getpmsg 10.403 getppid 10.404 getpriority 10.405 getprotobyname 10.406 getprotobynumber 10.407 getprotoent 10.408 getpwent 10.409 getpwnam 10.410 getpwnam_r 10.411 getpwuid 10.412 getpwuid_r 10.413 getrlimit 10.414 getrusage 10.415 gets 10.416 getservbyname 10.417 getservbyport 10.418 getservent 10.419 getsid 10.420 getsockname 10.421 getsockopt 10.422 getsubopt 10.423 gettimeofday 10.424 getuid 10.425 getutxent 10.426 getutxid 10.427 getutxline 10.428 getwc 10.429 getwchar 10.430 glob 10.431 globfree 10.432 gmtime 10.433 gmtime_r 10.434 grantpt 10.435 hcreate 10.436 hdestroy 10.437 hsearch 10.438 htonl 10.439 htons 10.440 hypot 10.441 hypotf 10.442 hypotl 10.443 iconv 10.444 iconv_close 10.445 iconv_open 10.446 if_freenameindex 10.447 if_indextoname 10.448 if_nameindex 10.449 if_nametoindex 10.450 ilogb 10.451 ilogbf 10.452 ilogbl 10.453 imaxabs 10.454 imaxdiv 10.455 inet_addr 10.456 inet_ntoa 10.457 inet_ntop 10.458 inet_pton 10.459 initstate 10.460 insque 10.461 ioctl 10.462 isalnum 10.463 isalnum_l 10.464 isalpha 10.465 isalpha_l 10.466 isascii 10.467 isastream 10.468 isatty 10.469 isblank 10.470 isblank_l 10.471 iscntrl 10.472 iscntrl_l 10.473 isdigit 10.474 isdigit_l 10.475 isfinite 10.476 isgraph 10.477 isgraph_l 10.478 isgreater 10.479 isgreaterequal 10.480 isinf 10.481 isless 10.482 islessequal 10.483 islessgreater 10.484 islower 10.485 islower_l 10.486 isnan 10.487 isnormal 10.488 isprint 10.489 isprint_l 10.490 ispunct 10.491 ispunct_l 10.492 isspace 10.493 isspace_l 10.494 isunordered 10.495 isupper 10.496 isupper_l 10.497 iswalnum 10.498 iswalnum_l 10.499 iswalpha 10.500 iswalpha_l 10.501 iswblank 10.502 iswblank_l 10.503 iswcntrl 10.504 iswcntrl_l 10.505 iswctype 10.506 iswctype_l 10.507 iswdigit 10.508 iswdigit_l 10.509 iswgraph 10.510 iswgraph_l 10.511 iswlower 10.512 iswlower_l 10.513 iswprint 10.514 iswprint_l 10.515 iswpunct 10.516 iswpunct_l 10.517 iswspace 10.518 iswspace_l 10.519 iswupper 10.520 iswupper_l 10.521 iswxdigit 10.522 iswxdigit_l 10.523 isxdigit 10.524 isxdigit_l 10.525 j0 10.526 j1 10.527 jn 10.528 jrand48 10.529 kill 10.530 killpg 10.531 l64a 10.532 labs 10.533 lchown 10.534 lcong48 10.535 ldexp 10.536 ldexpf 10.537 ldexpl 10.538 ldiv 10.539 lfind 10.540 lgamma 10.541 lgammaf 10.542 lgammal 10.543 link 10.544 linkat 10.545 lio_listio 10.546 listen 10.547 llabs 10.548 lldiv 10.549 llogb 10.550 llogbf 10.551 llogbl 10.552 llrint 10.553 llrintf 10.554 llrintl 10.555 llround 10.556 llroundf 10.557 llroundl 10.558 localeconv 10.559 localtime 10.560 localtime_r 10.561 lockf 10.562 log 10.563 log10 10.564 log10f 10.565 log10l 10.566 log1p 10.567 log1pf 10.568 log1pl 10.569 log2 10.570 log2f 10.571 log2l 10.572 logb 10.573 logbf 10.574 logbl 10.575 logf 10.576 logl 10.577 longjmp 10.578 lrand48 10.579 lrint 10.580 lrintf 10.581 lrintl 10.582 lround 10.583 lroundf 10.584 lroundl 10.585 lsearch 10.586 lseek 10.587 lstat 10.588 malloc 10.589 mblen 10.590 mbrlen 10.591 mbrtoc8 10.592 mbrtoc16 10.593 mbrtoc32 10.594 mbrtowc 10.595 mbsinit 10.596 mbsnrtowcs 10.597 mbsrtowcs 10.598 mbstowcs 10.599 mbtowc 10.600 memccpy 10.601 memchr 10.602 memcmp 10.603 memcpy 10.604 memmove 10.605 memset 10.606 memset_explicit 10.607 mkdir 10.608 mkdirat 10.609 mkdtemp 10.610 mkfifo 10.611 mkfifoat 10.612 mknod 10.613 mknodat 10.614 mkstemp 10.615 mktime 10.616 mlock 10.617 mlockall 10.618 mmap 10.619 modf 10.620 modff 10.621 modfl 10.622 mprotect 10.623 mq_close 10.624 mq_getattr 10.625 mq_notify 10.626 mq_open 10.627 mq_receive 10.628 mq_send 10.629 mq_setattr 10.630 mq_timedreceive 10.631 mq_timedsend 10.632 mq_unlink 10.633 mrand48 10.634 msgctl 10.635 msgget 10.636 msgrcv 10.637 msgsnd 10.638 msync 10.639 mtx_destroy 10.640 mtx_init 10.641 mtx_lock 10.642 mtx_timedlock 10.643 mtx_trylock 10.644 mtx_unlock 10.645 munlock 10.646 munlockall 10.647 munmap 10.648 nan 10.649 nanf 10.650 nanl 10.651 nanosleep 10.652 nearbyint 10.653 nearbyintf 10.654 nearbyintl 10.655 newlocale 10.656 nextafter 10.657 nextafterf 10.658 nextafterl 10.659 nextdown 10.660 nextdownf 10.661 nextdownl 10.662 nexttoward 10.663 nexttowardf 10.664 nexttowardl 10.665 nextup 10.666 nextupf 10.667 nextupl 10.668 nftw 10.669 nice 10.670 nl_langinfo 10.671 nl_langinfo_l 10.672 nrand48 10.673 ntohl 10.674 ntohs 10.675 open 10.676 openat 10.677 opendir 10.678 openlog 10.679 open_memstream 10.680 open_wmemstream 10.681 optarg 10.682 opterr 10.683 optind 10.684 optopt 10.685 pathconf 10.686 pause 10.687 pclose 10.688 perror 10.689 pipe 10.690 poll 10.691 popen 10.692 posix_fadvise 10.693 posix_fallocate 10.694 posix_madvise 10.695 posix_mem_offset 10.696 posix_memalign 10.697 posix_openpt 10.698 posix_spawn 10.699 posix_spawn_file_actions_addclose 10.700 posix_spawn_file_actions_adddup2 10.701 posix_spawn_file_actions_addopen 10.702 posix_spawn_file_actions_destroy 10.703 posix_spawn_file_actions_init 10.704 posix_spawnattr_destroy 10.705 posix_spawnattr_getflags 10.706 posix_spawnattr_getpgroup 10.707 posix_spawnattr_getschedparam 10.708 posix_spawnattr_getschedpolicy 10.709 posix_spawnattr_getsigdefault 10.710 posix_spawnattr_getsigmask 10.711 posix_spawnattr_init 10.712 posix_spawnattr_setflags 10.713 posix_spawnattr_setpgroup 10.714 posix_spawnattr_setschedparam 10.715 posix_spawnattr_setschedpolicy 10.716 posix_spawnattr_setsigdefault 10.717 posix_spawnattr_setsigmask 10.718 posix_spawnp 10.719 posix_trace_attr_destroy 10.720 posix_trace_attr_getclockres 10.721 posix_trace_attr_getcreatetime 10.722 posix_trace_attr_getgenversion 10.723 posix_trace_attr_getinherited 10.724 posix_trace_attr_getlogfullpolicy 10.725 posix_trace_attr_getlogsize 10.726 posix_trace_attr_getmaxdatasize 10.727 posix_trace_attr_getmaxsystemeventsize 10.728 posix_trace_attr_getmaxusereventsize 10.729 posix_trace_attr_getname 10.730 posix_trace_attr_getstreamfullpolicy 10.731 posix_trace_attr_getstreamsize 10.732 posix_trace_attr_init 10.733 posix_trace_attr_setinherited 10.734 posix_trace_attr_setlogfullpolicy 10.735 posix_trace_attr_setlogsize 10.736 posix_trace_attr_setmaxdatasize 10.737 posix_trace_attr_setname 10.738 posix_trace_attr_setstreamfullpolicy 10.739 posix_trace_attr_setstreamsize 10.740 posix_trace_clear 10.741 posix_trace_close 10.742 posix_trace_create 10.743 posix_trace_create_withlog 10.744 posix_trace_event 10.745 posix_trace_eventid_equal 10.746 posix_trace_eventid_get_name 10.747 posix_trace_eventid_open 10.748 posix_trace_eventset_add 10.749 posix_trace_eventset_del 10.750 posix_trace_eventset_empty 10.751 posix_trace_eventset_fill 10.752 posix_trace_eventset_ismember 10.753 posix_trace_eventtypelist_getnext_id 10.754 posix_trace_eventtypelist_rewind 10.755 posix_trace_flush 10.756 posix_trace_get_attr 10.757 posix_trace_get_filter 10.758 posix_trace_get_status 10.759 posix_trace_getnext_event 10.760 posix_trace_open 10.761 posix_trace_rewind 10.762 posix_trace_set_filter 10.763 posix_trace_shutdown 10.764 posix_trace_start 10.765 posix_trace_stop 10.766 posix_trace_timedgetnext_event 10.767 posix_trace_trid_eventid_open 10.768 posix_trace_trygetnext_event 10.769 posix_typed_mem_get_info 10.770 posix_typed_mem_open 10.771 pow 10.772 powf 10.773 powl 10.774 pread 10.775 printf 10.776 pselect 10.777 psiginfo 10.778 psignal 10.779 pthread_atfork 10.780 pthread_attr_destroy 10.781 pthread_attr_getdetachstate 10.782 pthread_attr_getguardsize 10.783 pthread_attr_getinheritsched 10.784 pthread_attr_getschedparam 10.785 pthread_attr_getschedpolicy 10.786 pthread_attr_getscope 10.787 pthread_attr_getstack 10.788 pthread_attr_getstacksize 10.789 pthread_attr_init 10.790 pthread_attr_setdetachstate 10.791 pthread_attr_setguardsize 10.792 pthread_attr_setinheritsched 10.793 pthread_attr_setschedparam 10.794 pthread_attr_setschedpolicy 10.795 pthread_attr_setscope 10.796 pthread_attr_setstack 10.797 pthread_attr_setstacksize 10.798 pthread_barrier_destroy 10.799 pthread_barrier_init 10.800 pthread_barrier_wait 10.801 pthread_barrierattr_destroy 10.802 pthread_barrierattr_getpshared 10.803 pthread_barrierattr_init 10.804 pthread_barrierattr_setpshared 10.805 pthread_cancel 10.806 pthread_cleanup_pop 10.807 pthread_cleanup_push 10.808 pthread_cond_broadcast 10.809 pthread_cond_destroy 10.810 pthread_cond_init 10.811 pthread_cond_signal 10.812 pthread_cond_timedwait 10.813 pthread_cond_wait 10.814 pthread_condattr_destroy 10.815 pthread_condattr_getclock 10.816 pthread_condattr_getpshared 10.817 pthread_condattr_init 10.818 pthread_condattr_setclock 10.819 pthread_condattr_setpshared 10.820 pthread_create 10.821 pthread_detach 10.822 pthread_equal 10.823 pthread_exit 10.824 pthread_getconcurrency 10.825 pthread_getcpuclockid 10.826 pthread_getschedparam 10.827 pthread_getspecific 10.828 pthread_join 10.829 pthread_key_create 10.830 pthread_key_delete 10.831 pthread_kill 10.832 pthread_mutex_consistent 10.833 pthread_mutex_destroy 10.834 pthread_mutex_getprioceiling 10.835 pthread_mutex_init 10.836 pthread_mutex_lock 10.837 pthread_mutex_setprioceiling 10.838 pthread_mutex_timedlock 10.839 pthread_mutex_trylock 10.840 pthread_mutex_unlock 10.841 pthread_mutexattr_destroy 10.842 pthread_mutexattr_getprioceiling 10.843 pthread_mutexattr_getprotocol 10.844 pthread_mutexattr_getpshared 10.845 pthread_mutexattr_getrobust 10.846 pthread_mutexattr_gettype 10.847 pthread_mutexattr_init 10.848 pthread_mutexattr_setprioceiling 10.849 pthread_mutexattr_setprotocol 10.850 pthread_mutexattr_setpshared 10.851 pthread_mutexattr_setrobust 10.852 pthread_mutexattr_settype 10.853 pthread_once 10.854 pthread_rwlock_destroy 10.855 pthread_rwlock_init 10.856 pthread_rwlock_rdlock 10.857 pthread_rwlock_timedrdlock 10.858 pthread_rwlock_timedwrlock 10.859 pthread_rwlock_tryrdlock 10.860 pthread_rwlock_trywrlock 10.861 pthread_rwlock_unlock 10.862 pthread_rwlock_wrlock 10.863 pthread_rwlockattr_destroy 10.864 pthread_rwlockattr_getpshared 10.865 pthread_rwlockattr_init 10.866 pthread_rwlockattr_setpshared 10.867 pthread_self 10.868 pthread_setcancelstate 10.869 pthread_setcanceltype 10.870 pthread_setconcurrency 10.871 pthread_setschedparam 10.872 pthread_setschedprio 10.873 pthread_setspecific 10.874 pthread_sigmask 10.875 pthread_spin_destroy 10.876 pthread_spin_init 10.877 pthread_spin_lock 10.878 pthread_spin_trylock 10.879 pthread_spin_unlock 10.880 pthread_testcancel 10.881 ptsname 10.882 putc 10.883 putc_unlocked 10.884 putchar 10.885 putchar_unlocked 10.886 putenv 10.887 putmsg 10.888 putpmsg 10.889 puts 10.890 pututxline 10.891 putwc 10.892 putwchar 10.893 pwrite 10.894 qsort 10.895 quick_exit 10.896 raise 10.897 rand 10.898 rand_r 10.899 random 10.900 read 10.901 readdir 10.902 readdir_r 10.903 readlink 10.904 readlinkat 10.905 readv 10.906 realloc 10.907 realpath 10.908 recv 10.909 recvfrom 10.910 recvmsg 10.911 regcomp 10.912 regerror 10.913 regexec 10.914 regfree 10.915 remainder 10.916 remainderf 10.917 remainderl 10.918 remove 10.919 remque 10.920 remquo 10.921 remquof 10.922 remquol 10.923 rename 10.924 renameat 10.925 rewind 10.926 rewinddir 10.927 rint 10.928 rintf 10.929 rintl 10.930 rmdir 10.931 round 10.932 roundeven 10.933 roundevenf 10.934 roundevenl 10.935 roundf 10.936 roundl 10.937 scalbln 10.938 scalblnf 10.939 scalblnl 10.940 scalbn 10.941 scalbnf 10.942 scalbnl 10.943 scandir 10.944 scanf 10.945 sched_get_priority_max 10.946 sched_get_priority_min 10.947 sched_getparam 10.948 sched_getscheduler 10.949 sched_rr_get_interval 10.950 sched_setparam 10.951 sched_setscheduler 10.952 sched_yield 10.953 seed48 10.954 seekdir 10.955 select 10.956 sem_close 10.957 sem_destroy 10.958 sem_getvalue 10.959 sem_init 10.960 sem_open 10.961 sem_post 10.962 sem_timedwait 10.963 sem_trywait 10.964 sem_unlink 10.965 sem_wait 10.966 semctl 10.967 semget 10.968 semop 10.969 send 10.970 sendmsg 10.971 sendto 10.972 setbuf 10.973 setegid 10.974 setenv 10.975 seteuid 10.976 setgid 10.977 setgrent 10.978 sethostent 10.979 setitimer 10.980 setjmp 10.981 setkey 10.982 setlocale 10.983 setlogmask 10.984 setnetent 10.985 setpayload 10.986 setpayloadf 10.987 setpayloadl 10.988 setpayloadsig 10.989 setpayloadsigf 10.990 setpayloadsigl 10.991 setpgid 10.992 setpgrp 10.993 setpriority 10.994 setprotoent 10.995 setpwent 10.996 setregid 10.997 setreuid 10.998 setrlimit 10.999 setservent 10.1000 setsid 10.1001 setsockopt 10.1002 setstate 10.1003 setuid 10.1004 setutxent 10.1005 setvbuf 10.1006 shm_open 10.1007 shm_unlink 10.1008 shmat 10.1009 shmctl 10.1010 shmdt 10.1011 shmget 10.1012 shutdown 10.1013 sigaction 10.1014 sigaddset 10.1015 sigaltstack 10.1016 sigdelset 10.1017 sigemptyset 10.1018 sigfillset 10.1019 sighold 10.1020 sigignore 10.1021 siginterrupt 10.1022 sigismember 10.1023 siglongjmp 10.1024 signal 10.1025 signbit 10.1026 signgam 10.1027 sigpause 10.1028 sigpending 10.1029 sigprocmask 10.1030 sigqueue 10.1031 sigrelse 10.1032 sigset 10.1033 sigsetjmp 10.1034 sigsuspend 10.1035 sigtimedwait 10.1036 sigwait 10.1037 sigwaitinfo 10.1038 sin 10.1039 sinf 10.1040 sinh 10.1041 sinhf 10.1042 sinhl 10.1043 sinl 10.1044 sleep 10.1045 snprintf 10.1046 sockatmark 10.1047 socket 10.1048 socketpair 10.1049 sprintf 10.1050 sqrt 10.1051 sqrtf 10.1052 sqrtl 10.1053 srand 10.1054 srand48 10.1055 srandom 10.1056 sscanf 10.1057 stat 10.1058 statvfs 10.1059 stderr 10.1060 stdin 10.1061 stdout 10.1062 stpcpy 10.1063 stpncpy 10.1064 strcasecmp 10.1065 strcasecmp_l 10.1066 strcat 10.1067 strchr 10.1068 strcmp 10.1069 strcoll 10.1070 strcoll_l 10.1071 strcpy 10.1072 strcspn 10.1073 strdup 10.1074 strerror 10.1075 strerror_l 10.1076 strerror_r 10.1077 strfmon 10.1078 strfmon_l 10.1079 strfromd 10.1080 strfromf 10.1081 strfroml 10.1082 strftime 10.1083 strftime_l 10.1084 strlen 10.1085 strncasecmp 10.1086 strncasecmp_l 10.1087 strncat 10.1088 strncmp 10.1089 strncpy 10.1090 strndup 10.1091 strnlen 10.1092 strpbrk 10.1093 strptime 10.1094 strrchr 10.1095 strsignal 10.1096 strspn 10.1097 strstr 10.1098 strtod 10.1099 strtof 10.1100 strtoimax 10.1101 strtok 10.1102 strtok_r 10.1103 strtol 10.1104 strtold 10.1105 strtoll 10.1106 strtoul 10.1107 strtoull 10.1108 strtoumax 10.1109 strxfrm 10.1110 strxfrm_l 10.1111 swab 10.1112 swprintf 10.1113 swscanf 10.1114 symlink 10.1115 symlinkat 10.1116 sync 10.1117 sysconf 10.1118 syslog 10.1119 system 10.1120 tan 10.1121 tanf 10.1122 tanh 10.1123 tanhf 10.1124 tanhl 10.1125 tanl 10.1126 tcdrain 10.1127 tcflow 10.1128 tcflush 10.1129 tcgetattr 10.1130 tcgetpgrp 10.1131 tcgetsid 10.1132 tcsendbreak 10.1133 tcsetattr 10.1134 tcsetpgrp 10.1135 tdelete 10.1136 telldir 10.1137 tempnam 10.1138 tfind 10.1139 tgamma 10.1140 tgammaf 10.1141 tgammal 10.1142 thrd_create 10.1143 thrd_current 10.1144 thrd_detach 10.1145 thrd_equal 10.1146 thrd_exit 10.1147 thrd_join 10.1148 thrd_sleep 10.1149 thrd_yield 10.1150 time 10.1151 timegm 10.1152 timer_create 10.1153 timer_delete 10.1154 timer_getoverrun 10.1155 timer_gettime 10.1156 timer_settime 10.1157 times 10.1158 timespec_getres 10.1159 timezone 10.1160 tmpfile 10.1161 tmpnam 10.1162 toascii 10.1163 tolower 10.1164 tolower_l 10.1165 totalorder 10.1166 totalorderf 10.1167 totalorderl 10.1168 totalordermag 10.1169 totalordermagf 10.1170 totalordermagl 10.1171 toupper 10.1172 toupper_l 10.1173 towctrans 10.1174 towctrans_l 10.1175 towlower 10.1176 towlower_l 10.1177 towupper 10.1178 towupper_l 10.1179 trunc 10.1180 truncate 10.1181 truncf 10.1182 truncl 10.1183 tsearch 10.1184 tss_create 10.1185 tss_delete 10.1186 tss_get 10.1187 tss_set 10.1188 ttyname 10.1189 ttyname_r 10.1190 twalk 10.1191 tzname 10.1192 tzset 10.1193 ufromfp 10.1194 ufromfpf 10.1195 ufromfpl 10.1196 ufromfpx 10.1197 ufromfpxf 10.1198 ufromfpxl 10.1199 ulimit 10.1200 umask 10.1201 uname 10.1202 ungetc 10.1203 ungetwc 10.1204 unlink 10.1205 unlinkat 10.1206 unlockpt 10.1207 unsetenv 10.1208 uselocale 10.1209 utime 10.1210 utimensat 10.1211 utimes 10.1212 va_arg 10.1213 va_copy 10.1214 va_end 10.1215 va_start 10.1216 vdprintf 10.1217 vfprintf 10.1218 vfscanf 10.1219 vfwprintf 10.1220 vfwscanf 10.1221 vprintf 10.1222 vscanf 10.1223 vsnprintf 10.1224 vsprintf 10.1225 vsscanf 10.1226 vswprintf 10.1227 vswscanf 10.1228 vwprintf 10.1229 vwscanf 10.1230 wait 10.1231 waitid 10.1232 waitpid 10.1233 wcpcpy 10.1234 wcpncpy 10.1235 wcrtomb 10.1236 wcscasecmp 10.1237 wcscasecmp_l 10.1238 wcscat 10.1239 wcschr 10.1240 wcscmp 10.1241 wcscoll 10.1242 wcscoll_l 10.1243 wcscpy 10.1244 wcscspn 10.1245 wcsdup 10.1246 wcsftime 10.1247 wcslen 10.1248 wcsncasecmp 10.1249 wcsncasecmp_l 10.1250 wcsncat 10.1251 wcsncmp 10.1252 wcsncpy 10.1253 wcsnlen 10.1254 wcsnrtombs 10.1255 wcspbrk 10.1256 wcsrchr 10.1257 wcsrtombs 10.1258 wcsspn 10.1259 wcsstr 10.1260 wcstod 10.1261 wcstof 10.1262 wcstoimax 10.1263 wcstok 10.1264 wcstol 10.1265 wcstold 10.1266 wcstoll 10.1267 wcstombs 10.1268 wcstoul 10.1269 wcstoull 10.1270 wcstoumax 10.1271 wcswidth 10.1272 wcsxfrm 10.1273 wcsxfrm_l 10.1274 wctob 10.1275 wctomb 10.1276 wctrans 10.1277 wctrans_l 10.1278 wctype 10.1279 wctype_l 10.1280 wcwidth 10.1281 wmemchr 10.1282 wmemcmp 10.1283 wmemcpy 10.1284 wmemmove 10.1285 wmemset 10.1286 wordexp 10.1287 wordfree 10.1288 wprintf 10.1289 write 10.1290 writev 10.1291 wscanf 10.1292 y0 10.1293 y1 10.1294 yn 11 Past POSIX Function Substitutes 11.1 bcmp 11.2 bcopy 11.3 bsd_signal 11.4 bzero 11.5 ecvt 11.6 fcvt 11.7 ftime 11.8 gcvt 11.9 getcontext 11.10 gethostbyaddr 11.11 gethostbyname 11.12 getwd 11.13 h_errno 11.14 index 11.15 makecontext 11.16 mktemp 11.17 pthread_attr_getstackaddr 11.18 pthread_attr_setstackaddr 11.19 rindex 11.20 scalb 11.21 setcontext 11.22 swapcontext 11.23 ualarm 11.24 usleep 11.25 vfork 11.26 wcswcs 12 Glibc Header File Substitutes 12.1 a.out.h 12.2 aliases.h 12.3 alloca.h 12.4 ar.h 12.5 argp.h 12.6 argz.h 12.7 byteswap.h 12.8 crypt.h 12.9 endian.h 12.10 envz.h 12.11 err.h 12.12 error.h 12.13 execinfo.h 12.14 fpu_control.h 12.15 fstab.h 12.16 fts.h 12.17 getopt.h 12.18 gshadow.h 12.19 ieee754.h 12.20 ifaddrs.h 12.21 libintl.h 12.22 link.h 12.23 malloc.h 12.24 mcheck.h 12.25 mntent.h 12.26 obstack.h 12.27 paths.h 12.28 printf.h 12.29 pty.h 12.30 resolv.h 12.31 shadow.h 12.32 sys/file.h 12.33 sys/ioctl.h 12.34 sys/random.h 12.35 sysexits.h 12.36 ttyent.h 12.37 utmp.h 13 Glibc Function Substitutes 13.1 Glibc Extensions to <aio.h> 13.1.1 aio_init 13.2 Glibc <aliases.h> 13.2.1 endaliasent 13.2.2 getaliasbyname 13.2.3 getaliasbyname_r 13.2.4 getaliasent 13.2.5 getaliasent_r 13.2.6 setaliasent 13.3 Glibc <argp.h> 13.3.1 argp_err_exit_status 13.3.2 argp_error 13.3.3 argp_failure 13.3.4 argp_help 13.3.5 argp_parse 13.3.6 argp_program_bug_address 13.3.7 argp_program_version 13.3.8 argp_program_version_hook 13.3.9 argp_state_help 13.3.10 argp_usage 13.4 Glibc <argz.h> 13.4.1 argz_add 13.4.2 argz_add_sep 13.4.3 argz_append 13.4.4 argz_count 13.4.5 argz_create 13.4.6 argz_create_sep 13.4.7 argz_delete 13.4.8 argz_extract 13.4.9 argz_insert 13.4.10 argz_next 13.4.11 argz_replace 13.4.12 argz_stringify 13.5 Glibc Extensions to <arpa/inet.h> 13.5.1 inet_aton 13.5.2 inet_lnaof 13.5.3 inet_makeaddr 13.5.4 inet_net_ntop 13.5.5 inet_net_pton 13.5.6 inet_netof 13.5.7 inet_network 13.5.8 inet_nsap_addr 13.5.9 inet_nsap_ntoa 13.6 Glibc <byteswap.h> 13.6.1 bswap_16 13.6.2 bswap_32 13.6.3 bswap_64 13.7 Glibc Extensions to <complex.h> 13.7.1 clog10 13.7.2 clog10f 13.7.3 clog10l 13.8 Glibc Extensions to <ctype.h> 13.8.1 isctype 13.9 Glibc Extensions to <dirent.h> 13.9.1 getdirentries 13.9.2 scandirat 13.9.3 versionsort 13.10 Glibc Extensions to <dlfcn.h> 13.10.1 dladdr 13.10.2 dladdr1 13.10.3 dlinfo 13.10.4 dlmopen 13.10.5 dlvsym 13.11 Glibc <envz.h> 13.11.1 envz_add 13.11.2 envz_entry 13.11.3 envz_get 13.11.4 envz_merge 13.11.5 envz_remove 13.11.6 envz_strip 13.12 Glibc <err.h> 13.12.1 err 13.12.2 errx 13.12.3 verr 13.12.4 verrx 13.12.5 vwarn 13.12.6 vwarnx 13.12.7 warn 13.12.8 warnx 13.13 Glibc Extensions to <errno.h> 13.13.1 program_invocation_name 13.13.2 program_invocation_short_name 13.14 Glibc <error.h> 13.14.1 error 13.14.2 error_at_line 13.14.3 error_message_count 13.14.4 error_one_per_line 13.14.5 error_print_progname 13.15 Glibc <execinfo.h> 13.15.1 backtrace 13.15.2 backtrace_symbols 13.15.3 backtrace_symbols_fd 13.16 Glibc Extensions to <fcntl.h> 13.16.1 fallocate 13.16.2 name_to_handle_at 13.16.3 readahead 13.16.4 open_by_handle_at 13.16.5 sync_file_range 13.17 Glibc Extensions to <fenv.h> 13.17.1 fedisableexcept 13.17.2 feenableexcept 13.17.3 fegetexcept 13.18 Glibc Extensions to <fmtmsg.h> 13.18.1 addseverity 13.19 Glibc <fstab.h> 13.19.1 endfsent 13.19.2 getfsent 13.19.3 getfsfile 13.19.4 getfsspec 13.19.5 setfsent 13.20 Glibc <fts.h> 13.20.1 fts_children 13.20.2 fts_close 13.20.3 fts_open 13.20.4 fts_read 13.20.5 fts_set 13.21 Glibc <getopt.h> 13.21.1 getopt_long 13.21.2 getopt_long_only 13.22 Glibc Extensions to <glob.h> 13.22.1 glob_pattern_p 13.23 Glibc Extensions to <gnu/libc-version.h> 13.23.1 gnu_get_libc_release 13.23.2 gnu_get_libc_version 13.24 Glibc Extensions to <grp.h> 13.24.1 fgetgrent 13.24.2 fgetgrent_r 13.24.3 getgrent_r 13.24.4 getgrouplist 13.24.5 initgroups 13.24.6 putgrent 13.24.7 setgroups 13.25 Glibc <gshadow.h> 13.25.1 endsgent 13.25.2 fgetsgent 13.25.3 fgetsgent_r 13.25.4 getsgent 13.25.5 getsgent_r 13.25.6 getsgnam 13.25.7 getsgnam_r 13.25.8 putsgent 13.25.9 setsgent 13.25.10 sgetsgent 13.25.11 sgetsgent_r 13.26 Glibc <ifaddrs.h> 13.26.1 getifaddrs 13.26.2 freeifaddrs 13.27 Glibc <libintl.h> 13.27.1 bind_textdomain_codeset 13.27.2 bindtextdomain 13.27.3 dcgettext 13.27.4 dcngettext 13.27.5 dgettext 13.27.6 dngettext 13.27.7 gettext 13.27.8 ngettext 13.27.9 textdomain 13.28 Glibc <link.h> 13.28.1 dl_iterate_phdr 13.29 Glibc <malloc.h> 13.29.1 mallinfo 13.29.2 mallinfo2 13.29.3 malloc_info 13.29.4 malloc_stats 13.29.5 malloc_trim 13.29.6 malloc_usable_size 13.29.7 mallopt 13.29.8 memalign 13.29.9 pvalloc 13.30 Glibc Extensions to <math.h> 13.30.1 drem 13.30.2 dremf 13.30.3 dreml 13.30.4 exp10 13.30.5 exp10f 13.30.6 exp10l 13.30.7 finite 13.30.8 finitef 13.30.9 finitel 13.30.10 gamma 13.30.11 gammaf 13.30.12 gammal 13.30.13 isinff 13.30.14 isinfl 13.30.15 isnanf 13.30.16 isnanl 13.30.17 j0f 13.30.18 j0l 13.30.19 j1f 13.30.20 j1l 13.30.21 jnf 13.30.22 jnl 13.30.23 lgamma_r 13.30.24 lgammaf_r 13.30.25 lgammal_r 13.30.26 matherr 13.30.27 pow10 13.30.28 pow10f 13.30.29 pow10l 13.30.30 scalbf 13.30.31 scalbl 13.30.32 significand 13.30.33 significandf 13.30.34 significandl 13.30.35 sincos 13.30.36 sincosf 13.30.37 sincosl 13.30.38 y0f 13.30.39 y0l 13.30.40 y1f 13.30.41 y1l 13.30.42 ynf 13.30.43 ynl 13.31 Glibc <mcheck.h> 13.31.1 mcheck 13.31.2 mcheck_check_all 13.31.3 mcheck_pedantic 13.31.4 mprobe 13.31.5 mtrace 13.31.6 muntrace 13.32 Glibc <mntent.h> 13.32.1 addmntent 13.32.2 endmntent 13.32.3 getmntent 13.32.4 getmntent_r 13.32.5 hasmntopt 13.32.6 setmntent 13.33 Glibc Extensions to <netdb.h> 13.33.1 endnetgrent 13.33.2 gethostbyaddr_r 13.33.3 gethostbyname2 13.33.4 gethostbyname2_r 13.33.5 gethostbyname_r 13.33.6 gethostent_r 13.33.7 getnetbyaddr_r 13.33.8 getnetbyname_r 13.33.9 getnetent_r 13.33.10 getnetgrent 13.33.11 getnetgrent_r 13.33.12 getprotobyname_r 13.33.13 getprotobynumber_r 13.33.14 getprotoent_r 13.33.15 getservbyname_r 13.33.16 getservbyport_r 13.33.17 getservent_r 13.33.18 herror 13.33.19 hstrerror 13.33.20 innetgr 13.33.21 rcmd 13.33.22 rcmd_af 13.33.23 rexec 13.33.24 rexec_af 13.33.25 rresvport 13.33.26 rresvport_af 13.33.27 ruserok 13.33.28 ruserok_af 13.33.29 setnetgrent 13.34 Glibc <netinet/ether.h> 13.34.1 ether_aton 13.34.2 ether_aton_r 13.34.3 ether_hostton 13.34.4 ether_line 13.34.5 ether_ntoa 13.34.6 ether_ntoa_r 13.34.7 ether_ntohost 13.35 Glibc Extensions to <netinet/in.h> 13.35.1 bindresvport 13.35.2 getipv4sourcefilter 13.35.3 getsourcefilter 13.35.4 in6addr_any 13.35.5 in6addr_loopback 13.35.6 inet6_option_alloc 13.35.7 inet6_option_append 13.35.8 inet6_option_find 13.35.9 inet6_option_init 13.35.10 inet6_option_next 13.35.11 inet6_option_space 13.35.12 inet6_opt_append 13.35.13 inet6_opt_find 13.35.14 inet6_opt_finish 13.35.15 inet6_opt_get_val 13.35.16 inet6_opt_init 13.35.17 inet6_opt_next 13.35.18 inet6_opt_set_val 13.35.19 inet6_rth_add 13.35.20 inet6_rth_getaddr 13.35.21 inet6_rth_init 13.35.22 inet6_rth_reverse 13.35.23 inet6_rth_segments 13.35.24 inet6_rth_space 13.35.25 setipv4sourcefilter 13.35.26 setsourcefilter 13.36 Glibc <obstack.h> 13.36.1 obstack_alloc_failed_handler 13.36.2 obstack_exit_failure 13.36.3 obstack_free 13.36.4 obstack_printf 13.36.5 obstack_vprintf 13.37 Glibc Extensions to <poll.h> 13.37.1 ppoll 13.38 Glibc <printf.h> 13.38.1 parse_printf_format 13.38.2 printf_size 13.38.3 printf_size_info 13.38.4 register_printf_function 13.38.5 register_printf_modifier 13.38.6 register_printf_specifier 13.38.7 register_printf_type 13.39 Glibc Extensions to <pthread.h> 13.39.1 pthread_attr_getaffinity_np 13.39.2 pthread_attr_setaffinity_np 13.39.3 pthread_attr_getsigmask_np 13.39.4 pthread_attr_setsigmask_np 13.39.5 pthread_clockjoin_np 13.39.6 pthread_cond_clockwait 13.39.7 pthread_getaffinity_np 13.39.8 pthread_getattr_default_np 13.39.9 pthread_getattr_np 13.39.10 pthread_getname_np 13.39.11 pthread_kill_other_threads_np 13.39.12 pthread_mutex_clocklock 13.39.13 pthread_rwlock_clockrdlock 13.39.14 pthread_rwlock_clockwrlock 13.39.15 pthread_rwlockattr_getkind_np 13.39.16 pthread_rwlockattr_setkind_np 13.39.17 pthread_setaffinity_np 13.39.18 pthread_setattr_default_np 13.39.19 pthread_setname_np 13.39.20 pthread_sigqueue 13.39.21 pthread_timedjoin_np 13.39.22 pthread_tryjoin_np 13.40 Glibc <pty.h> 13.40.1 forkpty 13.40.2 openpty 13.41 Glibc Extensions to <pwd.h> 13.41.1 fgetpwent 13.41.2 fgetpwent_r 13.41.3 getpw 13.41.4 getpwent_r 13.41.5 putpwent 13.42 Glibc Extensions to <regex.h> 13.42.1 re_comp 13.42.2 re_compile_fastmap 13.42.3 re_compile_pattern 13.42.4 re_exec 13.42.5 re_match 13.42.6 re_match_2 13.42.7 re_search 13.42.8 re_search_2 13.42.9 re_set_registers 13.42.10 re_set_syntax 13.42.11 re_syntax_options 13.43 Glibc <regexp.h> 13.43.1 advance 13.43.2 loc1 13.43.3 loc2 13.43.4 locs 13.43.5 step 13.44 Glibc <resolv.h> 13.44.1 dn_comp 13.44.2 dn_expand 13.44.3 dn_skipname 13.44.4 res_dnok 13.44.5 res_hnok 13.44.6 res_init 13.44.7 res_mailok 13.44.8 res_mkquery 13.44.9 res_nmkquery 13.44.10 res_nquery 13.44.11 res_nquerydomain 13.44.12 res_nsearch 13.44.13 res_nsend 13.44.14 res_ownok 13.44.15 res_query 13.44.16 res_querydomain 13.44.17 res_search 13.44.18 res_send 13.45 Glibc <rpc/auth.h> 13.45.1 authdes_create 13.45.2 authdes_pk_create 13.45.3 authnone_create 13.45.4 authunix_create 13.45.5 authunix_create_default 13.45.6 getnetname 13.45.7 host2netname 13.45.8 key_decryptsession 13.45.9 key_decryptsession_pk 13.45.10 key_encryptsession 13.45.11 key_encryptsession_pk 13.45.12 key_gendes 13.45.13 key_get_conv 13.45.14 key_secretkey_is_set 13.45.15 key_setsecret 13.45.16 netname2host 13.45.17 netname2user 13.45.18 user2netname 13.45.19 xdr_des_block 13.45.20 xdr_opaque_auth 13.46 Glibc <rpc/auth_des.h> 13.46.1 authdes_getucred 13.46.2 getpublickey 13.46.3 getsecretkey 13.46.4 rtime 13.47 Glibc <rpc/auth_unix.h> 13.47.1 xdr_authunix_parms 13.48 Glibc <rpc/clnt.h> 13.48.1 callrpc 13.48.2 clnt_create 13.48.3 clnt_pcreateerror 13.48.4 clnt_perrno 13.48.5 clnt_perror 13.48.6 clnt_spcreateerror 13.48.7 clnt_sperrno 13.48.8 clnt_sperror 13.48.9 clntraw_create 13.48.10 clnttcp_create 13.48.11 clntudp_bufcreate 13.48.12 clntudp_create 13.48.13 clntunix_create 13.48.14 get_myaddress 13.48.15 getrpcport 13.48.16 rpc_createerr 13.49 Glibc <rpc/key_prot.h> 13.49.1 xdr_cryptkeyarg 13.49.2 xdr_cryptkeyarg2 13.49.3 xdr_cryptkeyres 13.49.4 xdr_getcredres 13.49.5 xdr_key_netstarg 13.49.6 xdr_key_netstres 13.49.7 xdr_keybuf 13.49.8 xdr_keystatus 13.49.9 xdr_netnamestr 13.49.10 xdr_unixcred 13.50 Glibc <rpc/netdb.h> 13.50.1 endrpcent 13.50.2 getrpcbyname 13.50.3 getrpcbyname_r 13.50.4 getrpcbynumber 13.50.5 getrpcbynumber_r 13.50.6 getrpcent 13.50.7 getrpcent_r 13.50.8 setrpcent 13.51 Glibc <rpc/pmap_clnt.h> 13.51.1 clnt_broadcast 13.51.2 pmap_getmaps 13.51.3 pmap_getport 13.51.4 pmap_rmtcall 13.51.5 pmap_set 13.51.6 pmap_unset 13.52 Glibc <rpc/pmap_prot.h> 13.52.1 xdr_pmap 13.52.2 xdr_pmaplist 13.53 Glibc <rpc/pmap_rmt.h> 13.53.1 xdr_rmtcall_args 13.53.2 xdr_rmtcallres 13.54 Glibc <rpc/rpc_msg.h> 13.54.1 xdr_callhdr 13.54.2 xdr_callmsg 13.54.3 xdr_replymsg 13.55 Glibc <rpc/svc.h> 13.55.1 svc_exit 13.55.2 svc_fdset 13.55.3 svc_getreq 13.55.4 svc_getreq_common 13.55.5 svc_getreq_poll 13.55.6 svc_getreqset 13.55.7 svc_max_pollfd 13.55.8 svc_pollfd 13.55.9 svc_register 13.55.10 svc_run 13.55.11 svc_sendreply 13.55.12 svc_unregister 13.55.13 svcerr_auth 13.55.14 svcerr_decode 13.55.15 svcerr_noproc 13.55.16 svcerr_noprog 13.55.17 svcerr_progvers 13.55.18 svcerr_systemerr 13.55.19 svcerr_weakauth 13.55.20 svcraw_create 13.55.21 svctcp_create 13.55.22 svcudp_bufcreate 13.55.23 svcudp_create 13.55.24 svcunix_create 13.55.25 xprt_register 13.55.26 xprt_unregister 13.56 Glibc <rpc/xdr.h> 13.56.1 xdr_array 13.56.2 xdr_bool 13.56.3 xdr_bytes 13.56.4 xdr_char 13.56.5 xdr_double 13.56.6 xdr_enum 13.56.7 xdr_float 13.56.8 xdr_free 13.56.9 xdr_hyper 13.56.10 xdr_int 13.56.11 xdr_int16_t 13.56.12 xdr_int32_t 13.56.13 xdr_int64_t 13.56.14 xdr_int8_t 13.56.15 xdr_long 13.56.16 xdr_longlong_t 13.56.17 xdr_netobj 13.56.18 xdr_opaque 13.56.19 xdr_pointer 13.56.20 xdr_quad_t 13.56.21 xdr_reference 13.56.22 xdr_short 13.56.23 xdr_sizeof 13.56.24 xdr_string 13.56.25 xdr_u_char 13.56.26 xdr_u_hyper 13.56.27 xdr_u_int 13.56.28 xdr_u_long 13.56.29 xdr_u_longlong_t 13.56.30 xdr_u_quad_t 13.56.31 xdr_u_short 13.56.32 xdr_uint16_t 13.56.33 xdr_uint32_t 13.56.34 xdr_uint64_t 13.56.35 xdr_uint8_t 13.56.36 xdr_union 13.56.37 xdr_vector 13.56.38 xdr_void 13.56.39 xdr_wrapstring 13.56.40 xdrmem_create 13.56.41 xdrrec_create 13.56.42 xdrrec_endofrecord 13.56.43 xdrrec_eof 13.56.44 xdrrec_skiprecord 13.56.45 xdrstdio_create 13.57 Glibc <rpcsvc/nislib.h> 13.57.1 nis_add 13.57.2 nis_add_entry 13.57.3 nis_addmember 13.57.4 nis_checkpoint 13.57.5 nis_clone_object 13.57.6 nis_creategroup 13.57.7 nis_destroy_object 13.57.8 nis_destroygroup 13.57.9 nis_dir_cmp 13.57.10 nis_domain_of 13.57.11 nis_domain_of_r 13.57.12 nis_first_entry 13.57.13 nis_freenames 13.57.14 nis_freeresult 13.57.15 nis_freeservlist 13.57.16 nis_freetags 13.57.17 nis_getnames 13.57.18 nis_getservlist 13.57.19 nis_ismember 13.57.20 nis_leaf_of 13.57.21 nis_leaf_of_r 13.57.22 nis_lerror 13.57.23 nis_list 13.57.24 nis_local_directory 13.57.25 nis_local_group 13.57.26 nis_local_host 13.57.27 nis_local_principal 13.57.28 nis_lookup 13.57.29 nis_mkdir 13.57.30 nis_modify 13.57.31 nis_modify_entry 13.57.32 nis_name_of 13.57.33 nis_name_of_r 13.57.34 nis_next_entry 13.57.35 nis_perror 13.57.36 nis_ping 13.57.37 nis_print_directory 13.57.38 nis_print_entry 13.57.39 nis_print_group 13.57.40 nis_print_group_entry 13.57.41 nis_print_link 13.57.42 nis_print_object 13.57.43 nis_print_result 13.57.44 nis_print_rights 13.57.45 nis_print_table 13.57.46 nis_remove 13.57.47 nis_remove_entry 13.57.48 nis_removemember 13.57.49 nis_rmdir 13.57.50 nis_servstate 13.57.51 nis_sperrno 13.57.52 nis_sperror 13.57.53 nis_sperror_r 13.57.54 nis_stats 13.57.55 nis_verifygroup 13.58 Glibc <rpcsvc/nis_callback.h> 13.58.1 xdr_cback_data 13.58.2 xdr_obj_p 13.59 Glibc <rpcsvc/yp.h> 13.59.1 xdr_domainname 13.59.2 xdr_keydat 13.59.3 xdr_valdat 13.59.4 xdr_ypbind_resptype 13.59.5 xdr_ypmap_parms 13.59.6 xdr_ypmaplist 13.59.7 xdr_yppushresp_xfr 13.59.8 xdr_ypreq_key 13.59.9 xdr_ypreq_nokey 13.59.10 xdr_ypreq_xfr 13.59.11 xdr_ypresp_all 13.59.12 xdr_ypresp_key_val 13.59.13 xdr_ypresp_maplist 13.59.14 xdr_ypresp_master 13.59.15 xdr_ypresp_order 13.59.16 xdr_ypresp_val 13.59.17 xdr_ypresp_xfr 13.59.18 xdr_ypstat 13.59.19 xdr_ypxfrstat 13.60 Glibc <rpcsvc/ypclnt.h> 13.60.1 yp_all 13.60.2 yp_bind 13.60.3 yp_first 13.60.4 yp_get_default_domain 13.60.5 yp_master 13.60.6 yp_match 13.60.7 yp_next 13.60.8 yp_order 13.60.9 yp_unbind 13.60.10 ypbinderr_string 13.60.11 yperr_string 13.60.12 ypprot_err 13.61 Glibc Extensions to <sched.h> 13.61.1 clone 13.61.2 getcpu 13.61.3 sched_getaffinity 13.61.4 sched_getcpu 13.61.5 sched_setaffinity 13.61.6 setns 13.62 Glibc Extensions to <search.h> 13.62.1 hcreate_r 13.62.2 hdestroy_r 13.62.3 hsearch_r 13.62.4 tdestroy 13.62.5 twalk_r 13.63 Glibc Extensions to <selinux/selinux.h> 13.63.1 fgetfilecon 13.63.2 getfilecon 13.63.3 lgetfilecon 13.64 Glibc Extensions to <semaphore.h> 13.64.1 sem_clockwait 13.65 Glibc <shadow.h> 13.65.1 endspent 13.65.2 fgetspent 13.65.3 fgetspent_r 13.65.4 getspent 13.65.5 getspent_r 13.65.6 getspnam 13.65.7 getspnam_r 13.65.8 lckpwdf 13.65.9 putspent 13.65.10 setspent 13.65.11 sgetspent 13.65.12 sgetspent_r 13.65.13 ulckpwdf 13.66 Glibc Extensions to <signal.h> 13.66.1 gsignal 13.66.2 sigandset 13.66.3 sigblock 13.66.4 siggetmask 13.66.5 sigisemptyset 13.66.6 sigorset 13.66.7 sigreturn 13.66.8 sigsetmask 13.66.9 sigstack 13.66.10 sigvec 13.66.11 ssignal 13.66.12 sys_siglist 13.66.13 sysv_signal 13.66.14 tgkill 13.67 Glibc Extensions to <spawn.h> 13.67.1 posix_spawn_file_actions_addchdir_np 13.67.2 posix_spawn_file_actions_addclosefrom_np 13.67.3 posix_spawn_file_actions_addfchdir_np 13.68 Glibc Extensions to <stdio.h> 13.68.1 asprintf 13.68.2 cuserid 13.68.3 clearerr_unlocked 13.68.4 fcloseall 13.68.5 feof_unlocked 13.68.6 ferror_unlocked 13.68.7 fflush_unlocked 13.68.8 fgetc_unlocked 13.68.9 fgets_unlocked 13.68.10 fileno_unlocked 13.68.11 fopencookie 13.68.12 fputc_unlocked 13.68.13 fputs_unlocked 13.68.14 fread_unlocked 13.68.15 fwrite_unlocked 13.68.16 getw 13.68.17 putw 13.68.18 renameat2 13.68.19 setbuffer 13.68.20 setlinebuf 13.68.21 sys_errlist 13.68.22 sys_nerr 13.68.23 tmpnam_r 13.68.24 vasprintf 13.69 Glibc Extensions to <stdlib.h> 13.69.1 canonicalize_file_name 13.69.2 cfree 13.69.3 clearenv 13.69.4 drand48_r 13.69.5 ecvt_r 13.69.6 erand48_r 13.69.7 fcvt_r 13.69.8 getloadavg 13.69.9 getpt 13.69.10 initstate_r 13.69.11 jrand48_r 13.69.12 lcong48_r 13.69.13 lrand48_r 13.69.14 mkostemp 13.69.15 mkostemps 13.69.16 mkstemps 13.69.17 mrand48_r 13.69.18 nrand48_r 13.69.19 on_exit 13.69.20 ptsname_r 13.69.21 qecvt 13.69.22 qecvt_r 13.69.23 qfcvt 13.69.24 qfcvt_r 13.69.25 qgcvt 13.69.26 qsort_r 13.69.27 random_r 13.69.28 rpmatch 13.69.29 secure_getenv 13.69.30 seed48_r 13.69.31 setstate_r 13.69.32 srand48_r 13.69.33 srandom_r 13.69.34 strtod_l 13.69.35 strtof_l 13.69.36 strtol_l 13.69.37 strtold_l 13.69.38 strtoll_l 13.69.39 strtoq 13.69.40 strtoul_l 13.69.41 strtoull_l 13.69.42 strtouq 13.69.43 valloc 13.70 Glibc Extensions to <string.h> 13.70.1 explicit_bzero 13.70.2 ffsl 13.70.3 ffsll 13.70.4 memfrob 13.70.5 memmem 13.70.6 mempcpy 13.70.7 memrchr 13.70.8 rawmemchr 13.70.9 sigabbrev_np 13.70.10 sigdescr_np 13.70.11 strcasestr 13.70.12 strchrnul 13.70.13 strerrordesc_np 13.70.14 strerrorname_np 13.70.15 strfry 13.70.16 strsep 13.70.17 strverscmp 13.71 Glibc <sys/auxv.h> 13.71.1 getauxval 13.72 Glibc <sys/capability.h> 13.72.1 capget 13.72.2 capset 13.73 Glibc <sys/epoll.h> 13.73.1 epoll_create 13.73.2 epoll_create1 13.73.3 epoll_ctl 13.73.4 epoll_pwait 13.73.5 epoll_wait 13.74 Glibc <sys/eventfd.h> 13.74.1 eventfd 13.74.2 eventfd_read 13.74.3 eventfd_write 13.75 Glibc <sys/fanotify.h> 13.75.1 fanotify_init 13.75.2 fanotify_mark 13.76 Glibc <sys/file.h> 13.76.1 flock 13.77 Glibc <sys/fsuid.h> 13.77.1 setfsgid 13.77.2 setfsuid 13.78 Glibc <sys/gmon.h> 13.78.1 monstartup 13.79 Glibc <sys/inotify.h> 13.79.1 inotify_add_watch 13.79.2 inotify_init 13.79.3 inotify_init1 13.79.4 inotify_rm_watch 13.80 Glibc <sys/io.h> , <sys/perm.h> 13.80.1 ioperm 13.80.2 iopl 13.81 Glibc <sys/kdaemon.h> 13.81.1 bdflush 13.82 Glibc <sys/klog.h> 13.82.1 klogctl 13.83 Glibc Extensions to <sys/mman.h> 13.83.1 madvise 13.83.2 memfd_create 13.83.3 mincore 13.83.4 mlock2 13.83.5 mremap 13.83.6 pkey_alloc 13.83.7 pkey_free 13.83.8 pkey_get 13.83.9 pkey_mprotect 13.83.10 pkey_set 13.83.11 remap_file_pages 13.84 Glibc <sys/mount.h> 13.84.1 mount 13.84.2 umount 13.84.3 umount2 13.85 Glibc <sys/personality.h> 13.85.1 personality 13.86 Glibc <sys/prctl.h> 13.86.1 prctl 13.87 Glibc <sys/profil.h> 13.87.1 sprofil 13.88 Glibc <sys/ptrace.h> 13.88.1 ptrace 13.89 Glibc <sys/quota.h> 13.89.1 quotactl 13.90 Glibc <sys/random.h> 13.90.1 getentropy 13.90.2 getrandom 13.91 Glibc <sys/reboot.h> 13.91.1 reboot 13.92 Glibc Extensions to <sys/resource.h> 13.92.1 prlimit 13.93 Glibc Extensions to <sys/sem.h> 13.93.1 semtimedop 13.94 Glibc <sys/sendfile.h> 13.94.1 sendfile 13.95 Glibc <sys/signalfd.h> 13.95.1 signalfd 13.96 Glibc <sys/single_threaded.h> 13.96.1 __libc_single_threaded 13.97 Glibc Extensions to <sys/socket.h> 13.97.1 accept4 13.97.2 isfdtype 13.97.3 recvmmsg 13.97.4 sendmmsg 13.98 Glibc Extensions to <sys/stat.h> 13.98.1 getumask 13.98.2 lchmod 13.98.3 statx 13.99 Glibc <sys/statfs.h> 13.99.1 fstatfs 13.99.2 statfs 13.100 Glibc <sys/swap.h> 13.100.1 swapoff 13.100.2 swapon 13.101 Glibc <sys/sysctl.h> 13.101.1 sysctl 13.102 Glibc <sys/sysinfo.h> 13.102.1 get_avphys_pages 13.102.2 get_nprocs 13.102.3 get_nprocs_conf 13.102.4 get_phys_pages 13.102.5 sysinfo 13.103 Glibc <sys/syslog.h> 13.103.1 vsyslog 13.104 Glibc <sys/sysmacros.h> 13.104.1 gnu_dev_major 13.104.2 gnu_dev_makedev 13.104.3 gnu_dev_minor 13.105 Glibc Extensions to <sys/time.h> 13.105.1 adjtime 13.105.2 futimes 13.105.3 futimesat 13.105.4 lutimes 13.105.5 settimeofday 13.106 Glibc <sys/timerfd.h> 13.106.1 timerfd_create 13.106.2 timerfd_gettime 13.106.3 timerfd_settime 13.107 Glibc <sys/timex.h> 13.107.1 adjtimex 13.107.2 ntp_adjtime 13.107.3 ntp_gettime 13.107.4 ntp_gettimex 13.108 Glibc Extensions to <sys/uio.h> 13.108.1 preadv 13.108.2 preadv2 13.108.3 process_vm_readv 13.108.4 process_vm_writev 13.108.5 pwritev 13.108.6 pwritev2 13.109 Glibc <sys/ustat.h> 13.109.1 ustat 13.110 Glibc <sys/vlimit.h> 13.110.1 vlimit 13.111 Glibc Extensions to <sys/wait.h> 13.111.1 wait3 13.111.2 wait4 13.112 Glibc <sys/xattr.h> 13.112.1 fgetxattr 13.112.2 flistxattr 13.112.3 fremovexattr 13.112.4 fsetxattr 13.112.5 getxattr 13.112.6 lgetxattr 13.112.7 listxattr 13.112.8 llistxattr 13.112.9 lremovexattr 13.112.10 lsetxattr 13.112.11 removexattr 13.112.12 setxattr 13.113 Glibc Extensions to <termios.h> 13.113.1 cfmakeraw 13.113.2 cfsetspeed 13.114 Glibc Extensions to <time.h> 13.114.1 clock_adjtime 13.114.2 dysize 13.114.3 getdate_r 13.114.4 stime 13.114.5 strptime_l 13.114.6 timelocal 13.114.7 timespec_get 13.115 Glibc <ttyent.h> 13.115.1 endttyent 13.115.2 getttyent 13.115.3 getttynam 13.115.4 setttyent 13.116 Glibc Extensions to <unistd.h> 13.116.1 _Fork 13.116.2 acct 13.116.3 brk 13.116.4 chroot 13.116.5 closefrom 13.116.6 copy_file_range 13.116.7 daemon 13.116.8 dup3 13.116.9 eaccess 13.116.10 endusershell 13.116.11 euidaccess 13.116.12 execveat 13.116.13 execvpe 13.116.14 get_current_dir_name 13.116.15 getdomainname 13.116.16 getdtablesize 13.116.17 getpagesize 13.116.18 getpass 13.116.19 getresgid 13.116.20 getresuid 13.116.21 gettid 13.116.22 getusershell 13.116.23 group_member 13.116.24 pipe2 13.116.25 profil 13.116.26 revoke 13.116.27 sbrk 13.116.28 setlogin 13.116.29 setdomainname 13.116.30 sethostid 13.116.31 sethostname 13.116.32 setresgid 13.116.33 setresuid 13.116.34 setusershell 13.116.35 syncfs 13.116.36 syscall 13.116.37 ttyslot 13.116.38 vhangup 13.117 Glibc <utmp.h> 13.117.1 endutent 13.117.2 getutent 13.117.3 getutent_r 13.117.4 getutid 13.117.5 getutid_r 13.117.6 getutline 13.117.7 getutline_r 13.117.8 pututline 13.117.9 setutent 13.117.10 updwtmp 13.117.11 utmpname 13.117.12 login 13.117.13 login_tty 13.118 Glibc Extensions to <utmpx.h> 13.118.1 getutmp 13.118.2 getutmpx 13.118.3 updwtmpx 13.118.4 utmpxname 13.119 Glibc Extensions to <wchar.h> 13.119.1 fgetwc_unlocked 13.119.2 fgetws_unlocked 13.119.3 fputwc_unlocked 13.119.4 fputws_unlocked 13.119.5 getwc_unlocked 13.119.6 getwchar_unlocked 13.119.7 putwc_unlocked 13.119.8 putwchar_unlocked 13.119.9 wcschrnul 13.119.10 wcsftime_l 13.119.11 wcstod_l 13.119.12 wcstof_l 13.119.13 wcstol_l 13.119.14 wcstold_l 13.119.15 wcstoll_l 13.119.16 wcstoq 13.119.17 wcstoul_l 13.119.18 wcstoull_l 13.119.19 wcstouq 13.119.20 wmempcpy 14 Native Windows Support 14.1 Libtool and Windows 14.2 Large File Support 14.3 Inode numbers on Windows 14.4 Precise file timestamps on Windows 14.5 Avoiding the year 2038 problem 14.6 Windows sockets 14.6.1 Getaddrinfo and WINVER 14.7 Native Windows Support without MSVC Support 14.8 Visual Studio Compatibility 15 Multithreading 15.1 The three multithreading APIs 15.2 Choosing the right multithreading API 15.3 The POSIX multithreading API 15.4 The ISO C multithreading API 15.5 The Gnulib multithreading API 15.6 Optimizations of multithreaded code 16 Strings and Characters 16.1 Strings 16.1.1 The C string representation 16.1.2 Iterating through strings 16.1.3 Strings with NUL characters 16.1.4 Character and String Functions in C Locale 16.1.4.1 c-ctype 16.1.4.2 c-strcase 16.1.4.3 c-strcaseeq 16.1.4.4 c-strcasestr 16.1.4.5 c-strstr 16.1.4.6 c-strtod 16.1.4.7 c-strtold 16.1.5 Comparison of string APIs 16.2 Characters 16.2.1 The char type 16.2.2 The wchar_t type 16.2.3 The char32_t type 16.2.4 The mbchar_t type 16.2.4.1 Reading multibyte strings 16.2.5 Comparison of character APIs 17 Particular Modules 17.1 alloca 17.2 alloca-opt 17.3 Safe Allocation Macros 17.4 Attributes 17.5 Compile-time Assertions 17.6 Non-returning Functions 17.7 Integer Properties 17.7.1 Arithmetic Type Properties 17.7.2 Integer Bounds 17.7.3 Checking Integer Overflow 17.7.4 Wraparound Arithmetic with Integers 17.7.5 Integer Type Overflow 17.7.6 Integer Range Overflow 17.8 Static inline functions 17.9 Extern inline functions 17.10 Handling closed standard file descriptors 17.11 Handling strings with NUL characters 17.12 Container data types 17.12.1 Ordinary container data types 17.12.2 Specialized container data types 17.13 Recognizing Option Arguments 17.14 Quoting 17.15 progname and getprogname 17.16 gcd: greatest common divisor 17.17 Profiling of program phases 17.18 Library version handling 17.19 Supporting Relocation 17.20 func 17.21 stat-size 18 Regular expressions 18.1 Overview 18.2 Regular Expression Syntax 18.2.1 Syntax Bits 18.2.2 Predefined Syntaxes 18.2.3 Collating Elements vs. Characters 18.2.4 The Backslash Character 18.3 Common Operators 18.3.1 The Match-self Operator ( ordinary character ) 18.3.2 The Match-any-character Operator ( . ) 18.3.3 The Concatenation Operator 18.3.4 Repetition Operators 18.3.4.1 The Match-zero-or-more Operator ( * ) 18.3.4.2 The Match-one-or-more Operator ( + or \+ ) 18.3.4.3 The Match-zero-or-one Operator ( ? or \? ) 18.3.4.4 Interval Operators ( { … } or \{ … \} ) 18.3.5 The Alternation Operator ( | or \| ) 18.3.6 List Operators ( [ … ] and [^ … ] ) 18.3.6.1 Collating Symbol Operators ( [. … .] ) 18.3.6.2 Equivalence Class Operators ( [= … =] ) 18.3.6.3 Character Class Operators ( [: … :] ) 18.3.6.4 The Range Operator ( - ) 18.3.7 Grouping Operators ( ( … ) or \( … \) ) 18.3.8 The Back-reference Operator ( \ digit ) 18.3.9 Anchoring Operators 18.3.9.1 The Match-beginning-of-line Operator ( ^ ) 18.3.9.2 The Match-end-of-line Operator ( $ ) 18.4 GNU Operators 18.4.1 Word Operators 18.4.1.1 The Match-word-boundary Operator ( \b ) 18.4.1.2 The Match-within-word Operator ( \B ) 18.4.1.3 The Match-beginning-of-word Operator ( \< ) 18.4.1.4 The Match-end-of-word Operator ( \> ) 18.4.1.5 The Match-word-constituent Operator ( \w ) 18.4.1.6 The Match-non-word-constituent Operator ( \W ) 18.4.2 Space Operators 18.4.2.1 The Match-space Operator ( \s ) 18.4.2.2 The Match-non-space Operator ( \S ) 18.4.3 Whole-string Operators 18.4.3.1 The Match-beginning-of-string Operator ( \` ) 18.4.3.2 The Match-end-of-string Operator ( \' ) 18.5 What Gets Matched? 18.6 Programming with Regex 18.6.1 GNU Regex Functions 18.6.1.1 GNU Pattern Buffers 18.6.1.2 GNU Regular Expression Compiling 18.6.1.3 GNU Matching 18.6.1.4 GNU Searching 18.6.1.5 Matching and Searching with Split Data 18.6.1.6 Searching with Fastmaps 18.6.1.7 GNU Translate Tables 18.6.1.8 Using Registers 18.6.1.9 Freeing GNU Pattern Buffers 18.6.2 BSD Regex Functions 18.6.2.1 BSD Regular Expression Compiling 18.6.2.2 BSD Searching 18.7 Regular expression syntaxes 18.7.1 ‘ awk ' regular expression syntax 18.7.2 ‘ egrep ' regular expression syntax 18.7.3 ‘ ed ' regular expression syntax 18.7.4 ‘ emacs ' regular expression syntax 18.7.5 ‘ gnu-awk ' regular expression syntax 18.7.6 ‘ grep ' regular expression syntax 18.7.7 ‘ posix-awk ' regular expression syntax 18.7.8 ‘ posix-basic ' regular expression syntax 18.7.9 ‘ posix-egrep ' regular expression syntax 18.7.10 ‘ posix-extended ' regular expression syntax 18.7.11 ‘ posix-minimal-basic ' regular expression syntax 18.7.12 ‘ sed ' regular expression syntax 19 Build Infrastructure Modules 19.1 Searching for Libraries Simple Library Tests Locating Libraries Example of using AC_LIB_LINKFLAGS Dependencies Static vs. shared CPPFLAGS vs. LDFLAGS Bi-arch systems 19.2 Controlling the Exported Symbols of Shared Libraries 19.3 LD Version Scripts 19.4 configmake 19.5 warnings 19.6 manywarnings 19.7 Running self-tests under valgrind 19.7.1 Using valgrind without developer intervention 19.7.2 Valgrind options 19.7.3 Using valgrind at the developer's discretion 19.7.4 How to use Valgrind with shell scripts 19.8 VCS To ChangeLog 20 Build Infrastructure Files 20.1 Recognizing platforms 20.2 Utilities for Makefiles 20.3 Programs for developing in Git checkouts 20.4 Utilities for building documentation 20.5 Utilities for building libraries 20.6 Utilities for running test suites 21 Release Management Files 21.1 Tools for releasing packages with shared libraries 21.2 Tools for uploading release tarballs Appendix A GNU Free Documentation License Index Next: Philosophy , Previous: GNU Gnulib , Up: GNU Gnulib [ Contents ][ Index ] 1 Brief Overview Gnulib is a source code library that provides basic functionality to programs and libraries. Many software packages make use of Gnulib to avoid reinventing the portability wheel. Resources: Gnulib is hosted at Savannah: https://savannah.gnu.org/projects/gnulib . Get the sources through Git from there. The Gnulib home page: https://www.gnu.org/software/gnulib/ . Gnulib Basics Git Checkout Keeping Up-to-date Contributing to Gnulib Portability guidelines High Quality Join the GNU Project Next: Git Checkout , Up: Brief Overview [ Contents ][ Index ] 1.1 Gnulib Basics While portability across operating systems is not one of GNU's primary goals, it has helped introduce many people to the GNU system, and is worthwhile when it can be achieved at a low cost. This collection helps lower that cost. Gnulib is intended to be the canonical source for most of the important “portability” and/or common files for GNU projects. These are files intended to be shared at the source level; Gnulib is not a typical library meant to be installed and linked against. Thus, unlike most projects, Gnulib does not normally generate a source tarball distribution; instead, developers grab modules directly from the source repository. The easiest, and recommended, way to do this is to use the gnulib-tool script. Since there is no installation procedure for Gnulib, gnulib-tool needs to be run directly in the directory that contains the Gnulib source code. You can do this either by specifying the absolute filename of gnulib-tool , or by using a symbolic link from a place inside your PATH to the gnulib-tool file of your preferred Gnulib checkout. For example: $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool Next: Keeping Up-to-date , Previous: Gnulib Basics , Up: Brief Overview [ Contents ][ Index ] 1.2 Git Checkout Gnulib is available for anonymous checkout. In any Bourne-shell the following should work: $ git clone https://git.savannah.gnu.org/git/gnulib.git For a read-write checkout you need to have a login on ‘ savannah.gnu.org ' and be a member of the Gnulib project at https://savannah.gnu.org/projects/gnulib . Then, instead of the URL https://git.savannah.gnu.org/git/gnulib.git , use the URL ‘ ssh:// user @git.savannah.gnu.org/srv/git/gnulib ' where user is your login name on savannah.gnu.org. git resources: Overview: https://en.wikipedia.org/wiki/Git_(software) Homepage: https://git-scm.com/ When you use git annotate or git blame with Gnulib, it's recommended that you use the -w option, in order to ignore massive whitespace changes that happened in 2009. Next: Contributing to Gnulib , Previous: Git Checkout , Up: Brief Overview [ Contents ][ Index ] 1.3 Keeping Up-to-date The best way to work with Gnulib is to check it out of git. To synchronize, you can use git pull . Subscribing to the bug-gnulib@gnu.org mailing list will help you to plan when to update your local copy of Gnulib (which you use to maintain your software) from git. You can review the archives, subscribe, etc., via https://lists.gnu.org/mailman/listinfo/bug-gnulib . Sometimes, using an updated version of Gnulib will require you to use newer versions of GNU Automake or Autoconf. You may find it helpful to join the autotools-announce mailing list to be advised of such changes. Next: Portability guidelines , Previous: Keeping Up-to-date , Up: Brief Overview [ Contents ][ Index ] 1.4 Contributing to Gnulib All software here is copyrighted by the Free Software Foundation—you need to have filled out an assignment form for a project that uses the module for that contribution to be accepted here. If you have a piece of code that you would like to contribute, please email bug-gnulib@gnu.org . Generally we are looking for files that fulfill at least one of the following requirements: If your .c and .h files define functions that are broken or missing on some other system, we should be able to include it. If your functions remove arbitrary limits from existing functions (either under the same name, or as a slightly different name), we should be able to include it. If your functions define completely new but rarely used functionality, you should probably consider packaging it as a separate library. Gnulib licensing Indent with spaces not TABs How to add a new module Next: Indent with spaces not TABs , Up: Contributing to Gnulib [ Contents ][ Index ] 1.4.1 Gnulib licensing Gnulib contains code both under GPL and LGPL. Because several packages that use Gnulib are GPL, the files state they are licensed under GPL. However, to support LGPL projects as well, you may use some of the files under LGPL. The “License:” information in the files under modules/ clarifies the real license that applies to the module source. Keep in mind that if you submit patches to files in Gnulib, you should license them under a compatible license, which means that sometimes the contribution will have to be LGPL, if the original file is available under LGPL via a “License: LGPL” information in the projects' modules/ file. Next: How to add a new module , Previous: Gnulib licensing , Up: Contributing to Gnulib [ Contents ][ Index ] 1.4.2 Indent with spaces not TABs We use space-only indentation in nearly all files. This includes all *.h , *.c , *.y files, except for the regex module. Makefile and ChangeLog files are excluded, since TAB characters are part of their format. In order to tell your editor to produce space-only indentation, you can use these instructions. For Emacs: Add these lines to your Emacs initialization file ( $HOME/.emacs or similar): ;; In Gnulib, indent with spaces everywhere (not TABs). ;; Exceptions: Makefile and ChangeLog modes. (add-hook 'find-file-hook '(lambda () (if (and buffer-file-name (string-match "/gnulib\\>" (buffer-file-name)) (not (string-equal mode-name "Change Log")) (not (string-equal mode-name "Makefile"))) (setq indent-tabs-mode nil)))) For vi (vim): Add these lines to your $HOME/.vimrc file: " Don't use tabs for indentation. Spaces are nicer to work with. set expandtab For Makefile and ChangeLog files, compensate for this by adding this to your $HOME/.vim/after/indent/make.vim file, and similarly for your $HOME/.vim/after/indent/changelog.vim file: " Use tabs for indentation, regardless of the global setting. set noexpandtab For Eclipse: In the “Window|Preferences” dialog (or “Eclipse|Preferences” dialog on Mac OS), Under “General|Editors|Text Editors”, select the “Insert spaces for tabs” checkbox. Under “C/C++|Code Style”, select a code style profile that has the “Indentation|Tab policy” combobox set to “Spaces only”, such as the “GNU [built-in]” policy. If you use the GNU indent program, pass it the option --no-tabs . Previous: Indent with spaces not TABs , Up: Contributing to Gnulib [ Contents ][ Index ] 1.4.3 How to add a new module Add the header files and source files to lib/ . If the module needs configure-time checks, write an Autoconf macro for it in m4/ module .m4 . See m4/README for details. Write a module description modules/ module , based on modules/TEMPLATE . If the module contributes a section to the end-user documentation, put this documentation in doc/ module .texi and add it to the “Files” section of modules/ module . Most modules don't do this; they have only documentation for the programmer (= Gnulib user). Such documentation usually goes into the lib/ source files. It may also go into doc/ ; but don't add it to the module description in this case. Add the module to the list in MODULES.html.sh . You can test that a module builds correctly with: $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN $ cd /tmp/testdir $ ./configure && make Other things: Check the license and copyright year of headers. Check that the source code follows the GNU coding standards; see https://www.gnu.org/prep/standards . Add source files to config/srclist* if they are identical to upstream and should be upgraded in Gnulib whenever the upstream source changes. Include header files in source files to verify the function prototypes. Make sure a replacement function doesn't cause warnings or clashes on systems that have the function. Autoconf functions can use ‘ gl_* ' prefix. The ‘ AC_* ' prefix is for autoconf internal functions. Build files only if they are needed on a platform. Look at the alloca and fnmatch modules for how to achieve this. If for some reason you cannot do this, and you have a .c file that leads to an empty .o file on some platforms (through some big #if around all the code), then ensure that the compilation unit is not empty after preprocessing. One way to do this is to #include <stddef.h> or <stdio.h> before the big #if . Next: High Quality , Previous: Contributing to Gnulib , Up: Brief Overview [ Contents ][ Index ] 1.5 Portability guidelines Gnulib code is intended to be portable to a wide variety of platforms, not just GNU platforms. Gnulib typically attempts to support a platform as long as it is still supported by its provider, even if the platform is not the latest version. See Target Platforms . Many Gnulib modules exist so that applications need not worry about undesirable variability in implementations. For example, an application that uses the malloc module need not worry about malloc (0) returning a null pointer on some Standard C platforms; and glob users need not worry about glob silently omitting symbolic links to nonexistent files on some platforms that do not conform to POSIX. Gnulib code is intended to port without problem to new hosts, e.g., hosts conforming to recent C and POSIX standards. Hence Gnulib code should avoid using constructs that these newer standards no longer require, without first testing for the presence of these constructs. For example, because C11 made variable length arrays optional, Gnulib code should avoid them unless it first uses the vararrays module to check whether they are supported. The following subsections discuss some exceptions and caveats to the general Gnulib portability guidelines. C language versions C99 features assumed by Gnulib C99 features avoided by Gnulib Other portability assumptions made by Gnulib Next: C99 features assumed by Gnulib , Up: Portability guidelines [ Contents ][ Index ] 1.5.1 C language versions Currently Gnulib assumes at least a freestanding C99 compiler, possibly operating with a C library that predates C99; with time this assumption will likely be strengthened to later versions of the C standard. Old platforms currently supported include AIX 6.1, HP-UX 11i v1 and Solaris 10, though these platforms are rarely tested. Gnulib itself is so old that it contains many fixes for obsolete platforms, fixes that may be removed in the future. Because of the freestanding C99 assumption, Gnulib code can include <float.h> , <limits.h> , <stdarg.h> , <stddef.h> , and <stdint.h> unconditionally; <stdbool.h> is also in the C99 freestanding list but is obsolescent as of C23. Gnulib code can also assume the existence of <ctype.h> , <errno.h> , <fcntl.h> , <locale.h> , <signal.h> , <stdio.h> , <stdlib.h> , <string.h> , and <time.h> . Similarly, many modules include <sys/types.h> even though it's not even in C11; that's OK since <sys/types.h> has been around nearly forever. Even if the include files exist, they may not conform to the C standard. However, GCC has a fixincludes script that attempts to fix most conformance problems. Gnulib currently assumes include files largely conform to C99 or better. People still using ancient hosts should use fixincludes or fix their include files manually. Even if the include files conform, the library itself may not. For example, strtod and mktime have some bugs on some platforms. You can work around some of these problems by requiring the relevant modules, e.g., the Gnulib mktime module supplies a working and conforming mktime . Next: C99 features avoided by Gnulib , Previous: C language versions , Up: Portability guidelines [ Contents ][ Index ] 1.5.2 C99 features assumed by Gnulib Although the C99 standard specifies many features, Gnulib code is conservative about using them, partly because Gnulib predates the widespread adoption of C99, and partly because many C99 features are not well-supported in practice. C99 features that are reasonably portable nowadays include: A declaration after a statement, or as the first clause in a for statement. long long int . <stdbool.h> , although Gnulib code no longer uses it directly, preferring plain bool via the stdbool module instead. See stdbool.h . <stdint.h> , assuming the stdint module is used. See stdint.h . Compound literals and designated initializers. Variadic macros. Note: The handling of __VA_ARGS__ in MSVC differs from the one in ISO C 99, see https://stackoverflow.com/questions/5134523/ . But usually this matters only for macros that decompose __VA_ARGS__ . static inline functions. __func__ , assuming the func module is used. See func . The restrict qualifier, assuming AC_REQUIRE([AC_C_RESTRICT]) is used. This qualifier is sometimes implemented via a macro, so C++ code that uses Gnulib should avoid using restrict as an identifier. Flexible array members (however, see the flexmember module). Next: Other portability assumptions made by Gnulib , Previous: C99 features assumed by Gnulib , Up: Portability guidelines [ Contents ][ Index ] 1.5.3 C99 features avoided by Gnulib Gnulib avoids some features even though they are standardized by C99, as they have portability problems in practice. Here is a partial list of avoided C99 features. Many other C99 features are portable only if their corresponding modules are used; Gnulib code that uses such a feature should require the corresponding module. Variable length arrays (VLAs) or variably modified types, without checking whether __STDC_NO_VLA__ is defined. See the vararrays and vla modules. Block-scope variable length arrays, without checking whether either GNULIB_NO_VLA or __STDC_NO_VLA__ is defined. This lets you define GNULIB_NO_VLA to pacify GCC when using its -Wvla-larger-than warnings option, and to avoid large stack usage that may have security implications. GNULIB_NO_VLA does not affect Gnulib's other uses of VLAs and variably modified types, such as array declarations in function prototype scope. Converting to pointers via integer types other than intptr_t or uintptr_t . Although the C standard says that values of these integer types, if they exist, should be convertible to and from intmax_t and uintmax_t without loss of information, on CHERI platforms such conversions result in integers that, if converted back to a pointer, cannot be dereferenced. extern inline functions, without checking whether they are supported. See Extern inline functions . Type-generic math functions. Universal character names in source code. <iso646.h> , since GNU programs need not worry about deficient source-code encodings. Comments beginning with ‘ // '. This is mostly for style reasons. Previous: C99 features avoided by Gnulib , Up: Portability guidelines [ Contents ][ Index ] 1.5.4 Other portability assumptions made by Gnulib Gnulib code makes the following assumptions that go beyond what C and POSIX require: Standard internal types like ptrdiff_t and size_t are no wider than long . The GNU coding standards allow code to make this assumption, POSIX requires implementations to support at least one programming environment where this is true, and such environments are recommended for Gnulib-using applications. When it is easy to port to non-POSIX platforms like MinGW where these types are wider than long , new Gnulib code should do so, e.g., by using ptrdiff_t instead of long . However, it is not always that easy, and no effort has been made to check that all Gnulib modules work on MinGW-like environments. int and unsigned int are at least 32 bits wide. POSIX and the GNU coding standards both require this. Signed integer arithmetic is two's complement. Previously, Gnulib code sometimes also assumed that signed integer arithmetic wraps around, but modern compiler optimizations sometimes do not guarantee this, and Gnulib code with this assumption is now considered to be questionable. See Integer Properties . Although some Gnulib modules contain explicit support for ones' complement and signed magnitude integer representations, which are allowed by C17 and earlier, these modules are the exception rather than the rule. All practical Gnulib targets use two's complement, which is required by C23. There are no “holes” in integer values: all the bits of an integer contribute to its value in the usual way. In particular, an unsigned type and its signed counterpart have the same number of bits when you count the latter's sign bit. (As an exception, Gnulib code is portable to CHERI platforms even though this assumption is false for CHERI.) Objects with all bits zero are treated as zero or as null pointers. For example, memset (A, 0, sizeof A) initializes an array A of pointers to null pointers. The types intptr_t and uintptr_t exist, and pointers can be converted to and from these types without loss of information. Addresses and sizes behave as if objects reside in a flat address space. In particular: If two nonoverlapping objects have sizes S and T represented as ptrdiff_t or size_t values, then S + T cannot overflow. A pointer P points within an object O if and only if (char *) & O <= (char *) P && (char *) P < (char *) (& O + 1) . Arithmetic on a valid pointer is equivalent to the same arithmetic on the pointer converted to uintptr_t , except that offsets are multiplied by the size of the pointed-to objects. For example, if P + I is a valid expression involving a pointer P and an integer I , then (uintptr_t) (P + I) == (uintptr_t) ((uintptr_t) P + I * sizeof *P) . Similar arithmetic can be done with intptr_t , although more care must be taken in case of integer overflow or negative integers. A pointer P has alignment A if and only if (uintptr_t) P % A is zero, and similarly for intptr_t . If an existing object has size S , and if T is sufficiently small (e.g., 8 KiB), then S + T cannot overflow. Overflow in this case would mean that the rest of your program fits into T bytes, which can't happen in realistic flat-address-space hosts. Adding zero to a null pointer does not change the pointer. For example, 0 + (char *) NULL == (char *) NULL . Some system platforms violate these assumptions and are therefore not Gnulib porting targets. See Unsupported Platforms . Next: Join the GNU Project , Previous: Portability guidelines , Up: Brief Overview [ Contents ][ Index ] 1.6 High Quality We develop and maintain a testsuite for Gnulib. The goal is to have a 100% firm interface so that maintainers can feel free to update to the code in git at any time and know that their application will not break. This means that before any change can be committed to the repository, a test suite program must be produced that exposes the bug for regression testing. Stable Branches Writing reliable code Next: Writing reliable code , Up: High Quality [ Contents ][ Index ] 1.6.1 Stable Branches In Gnulib, we don't use topic branches for experimental work. Therefore, occasionally a broken commit may be pushed in Gnulib. It does not happen often, but it does happen. To compensate for this, Gnulib offers “stable branches”. These are branches of the Gnulib code that are maintained over some longer period (a year, for example) and include bug fixes, portability enhancements (to existing as well as to new platforms), updates to config.guess and config.sub . Not included in the stable branches are: new features, such as new modules, optimizations, refactorings, complex or risky changes in general, updates to texinfo.tex , documentation updates. So far, we have five stable branches: stable-202401 A stable branch that starts at the beginning of January 2024. stable-202307 A stable branch that starts at the beginning of July 2023. stable-202301 A stable branch that starts at the beginning of January 2023. It is no longer updated. stable-202207 A stable branch that starts at the beginning of July 2022. It is no longer updated. stable-202201 A stable branch that starts at the beginning of January 2022. It is no longer updated. The two use-cases of stable branches are thus: You want to protect yourself from occasional breakage in Gnulib. When making a bug-fix release of your code, you can incorporate bug fixes in Gnulib, by pulling in the newest commits from the same stable branch that you were already using for the previous release. Previous: Stable Branches , Up: High Quality [ Contents ][ Index ] 1.6.2 Writing reliable code When compiling and testing Gnulib and Gnulib-using programs, certain compiler options can help improve reliability. First of all, make it a habit to use ‘ -Wall ' in all compilation commands. Beyond that, the manywarnings module enables several forms of static checking in GCC and related compilers (see manywarnings ). For dynamic checking, you can run configure with CFLAGS options appropriate for your compiler. For example: ./configure \ CPPFLAGS='-Wall'\ CFLAGS='-g3 -O2'\ ' -D_FORTIFY_SOURCE=2'\ ' -fsanitize=undefined'\ ' -fsanitize-undefined-trap-on-error' Here: -D_FORTIFY_SOURCE=2 enables extra security hardening checks in the GNU C library. -fsanitize=undefined enables GCC's undefined behavior sanitizer ( ubsan ), and -fsanitize-undefined-trap-on-error causes ubsan to abort the program (through an “illegal instruction” signal). This measure stops exploit attempts and also allows you to debug the issue. Without the -fsanitize-undefined-trap-on-error option, -fsanitize=undefined causes messages to be printed, and execution continues after an undefined behavior situation. The message printing causes GCC-like compilers to arrange for the program to dynamically link to libraries it might not otherwise need. With GCC, instead of -fsanitize-undefined-trap-on-error you can use the -static-libubsan option to arrange for two of the extra libraries ( libstdc++ and libubsan ) to be linked statically rather than dynamically, though this typically bloats the executable and the remaining extra libraries are still linked dynamically. It is also good to occasionally run the programs under valgrind (see Running self-tests under valgrind ). Previous: High Quality , Up: Brief Overview [ Contents ][ Index ] 1.7 Join the GNU Project GNU Gnulib is part of the GNU Operating System, developed by the GNU Project. If you are the author of an awesome program and want to join us in writing Free (libre) Software, please consider making it an official GNU program and become a GNU Maintainer. Instructions on how to do this are here . We are looking forward to hacking with you! Don't have a program to contribute? Look at all the other ways to help . And to learn more about Free (libre) Software in general, please read and share this page . Next: Invoking gnulib-tool , Previous: Brief Overview , Up: GNU Gnulib [ Contents ][ Index ] 2 Philosophy Gnulib's design and development philosophy is organized around steady, collaborative, and open development of reusable modules that are suitable for a reasonably wide variety of platforms. Benefits of using Gnulib Library vs. Reusable Code Portability and Application Code Target Platforms Modules Various Kinds of Modules Collaborative Development Copyright Steady Development Openness Next: Library vs. Reusable Code , Up: Philosophy [ Contents ][ Index ] 2.1 Benefits of using Gnulib Gnulib is useful to enhance various aspects of a package: Portability: With Gnulib, a package maintainer can program against the POSIX and GNU libc APIs and nevertheless expect good portability to platforms that don't implement POSIX. Maintainability: When a package uses modules from Gnulib instead of code written specifically for that package, the maintainer has less code to maintain. Security: Gnulib provides functions that are immune against vulnerabilities that plague the uses of the corresponding commonplace functions. For example, asprintf , canonicalize_file_name are not affected by buffer sizing problems that affect sprintf , realpath . openat does not have the race conditions that open has. Etc. Reliability: Gnulib provides functions that combine a call to a system function with a check of the result. Examples are xalloc , xprintf , xstrtod , xgetcwd . Structure: Gnulib offers a way to structure code into modules, typically one include file, one source code file, and one autoconf macro for each functionality. Modularity helps maintainability. Next: Portability and Application Code , Previous: Benefits of using Gnulib , Up: Philosophy [ Contents ][ Index ] 2.2 Library vs. Reusable Code Classical libraries are installed as binary object code. Gnulib is different: It is used as a source code library. Each package that uses Gnulib thus ships with part of the Gnulib source code. The used portion of Gnulib is tailored to the package: A build tool, called gnulib-tool , is provided that copies a tailored subset of Gnulib into the package. Next: Target Platforms , Previous: Library vs. Reusable Code , Up: Philosophy [ Contents ][ Index ] 2.3 Portability and Application Code One of the goals of Gnulib is to make portable programming easy, on the basis of the standards relevant for GNU (and Unix). The objective behind that is to avoid a fragmentation of the user community into disjoint user communities according to the operating system, and instead allow synergies between users on different operating systems. Another goal of Gnulib is to provide application code that can be shared between several applications. Some people wonder: "What? glibc doesn't have a function to copy a file?" Indeed, the scope of a system's libc is to implement the relevant standards (ISO C, POSIX) and to provide access functions to the kernel's system calls, and little more. There is no clear borderline between both areas. For example, Gnulib has a facility for generating the name of backup files. While this task is entirely at the application level—no standard specifies an API for it—the naïve code has some portability problems because on some platforms the length of file name components is limited to 30 characters or so. Gnulib handles that. Similarly, Gnulib has a facility for executing a command in a subprocess. It is at the same time a portability enhancement (it works on GNU, Unix, and Windows, compared to the classical fork / exec idiom which is not portable to Windows), as well as an application aid: it takes care of redirecting stdin and/or stdout if desired, and emits an error message if the subprocess failed. Next: Modules , Previous: Portability and Application Code , Up: Philosophy [ Contents ][ Index ] 2.4 Target Platforms Gnulib supports a number of platforms that we call the “reasonable portability targets”. This class consists of widespread operating systems, for three years after their last availability, or—for proprietary operating systems—as long as the vendor provides commercial support for it. Already existing Gnulib code for older operating systems is usually left in place for longer than these three years. So it comes that programs that use Gnulib run pretty well also on these older operating systems. Some operating systems are not very widespread, but are Free Software and are actively developed. Such platforms are also supported by Gnulib, if that OS's developers community keeps in touch with the Gnulib developers, by providing bug reports, analyses, or patches. For such platforms, Gnulib supports only the versions of the last year or the last few months, depending on the maturity of said OS project, the number of its users, and how often these users upgrade. Niche operating systems are generally unsupported by Gnulib, unless some of their developers or users contribute support to Gnulib. The degree of support Gnulib guarantees for a platform depends on the amount of testing it gets from volunteers. Platforms on which Gnulib is frequently tested are the best supported. Then come platforms with occasional testing, then platforms which are rarely tested. Usually, we fix bugs when they are reported. Except that some rarely tested platforms are also low priority; bug fixes for these platforms can take longer. Supported Platforms Formerly Supported Platforms Unsupported Platforms Next: Formerly Supported Platforms , Up: Target Platforms [ Contents ][ Index ] 2.4.1 Supported Platforms As of 2023, the list of supported platforms is the following: glibc systems. With glibc 2.19 or newer, they are frequently tested. About the kernels: glibc on Linux is frequently tested. glibc on kFreeBSD is rarely tested. musl libc on Linux is occasionally tested. macOS. In versions 12.5, it's occasionally tested. In version 10.5, it's rarely tested. FreeBSD 13.0 or newer is occasionally tested. OpenBSD 7.0 or newer is occasionally tested. NetBSD 9.0 or newer is occasionally tested. AIX 7.1 and 7.2 are occasionally tested. Solaris 10 and 11.4 are occasionally tested. Solaris 9 is rarely tested and low priority. Android is occasionally tested, through the Termux app on Android 11. Cygwin 2.9 is occasionally tested. Cygwin 1.7.x is rarely tested. Native Windows: mingw is occasionally tested. Only the latest version of mingw is tested; older versions are not supported. MSVC 14 (Microsoft Visual Studio 2015 14.0) is occasionally tested. Only “release” builds (compiler option ‘ -MD ') are supported, not “debug” builds (compiler option ‘ -MDd '). Note that some modules are currently unsupported on native Windows: mgetgroups , getugroups , idcache , userspec , openpty , login_tty , forkpty , pt_chown , grantpt , pty , savewd , mkancesdirs , mkdir-p , euidaccess , faccessat . The versions of Windows that are supported are Windows 10 and newer. GNU Hurd 0.9 is rarely tested. IRIX 6.5 is very rarely tested. Minix 3.3.0 is no longer tested. Haiku is no longer tested. uClibc on Linux is no longer tested. QNX is no longer tested. Next: Unsupported Platforms , Previous: Supported Platforms , Up: Target Platforms [ Contents ][ Index ] 2.4.2 Formerly Supported Platforms The following platforms were supported in the past, but are no longer supported: glibc versions 2.1.x and older. Mac OS X 10.4 and older. AIX 6 and older. HP-UX 11.31. IRIX 6.4 and older. OSF/1 5.1. Solaris 8 and older. Interix. BeOS. Gnulib supports these operating systems only in an unvirtualized environment. When you run an OS inside a virtual machine, you have to be aware that the virtual machine can bring in bugs of its own. For example, floating-point operations on Solaris can behave slightly differently in QEMU than on real hardware. And Haiku's bash program misbehaves in VirtualBox 3, whereas it behaves fine in VirtualBox 4. Similarly, running native Windows binaries on GNU/Linux under WINE is rarely tested and low priority: WINE has a set of behaviours and bugs that is slightly different from native Windows. Previous: Formerly Supported Platforms , Up: Target Platforms [ Contents ][ Index ] 2.4.3 Unsupported Platforms Some platforms with C compilers are not supported by Gnulib because the platforms violate Gnulib's C portability assumptions. See Other portability assumptions made by Gnulib . These assumptions are not required by the C or POSIX standards but hold on almost all practical porting targets. If you need to port Gnulib code to a platform where these assumptions are not true, we would appreciate hearing of any fixes. We need fixes that do not increase runtime overhead on standard hosts and that are relatively easy to maintain. These platforms are listed below to illustrate problems that Gnulib and Gnulib-using code would have if it were intended to be portable to all practical POSIX or C platforms. Clang's -fsanitize=undefined option causes the program to crash if it adds zero to a null pointer – behavior that is undefined in strict C, but which yields a null pointer on all practical porting targets and which the Gnulib portability guidelines allow. If you use Clang with -fsanitize=undefined , you can work around the problem by also using ‘ -fno-sanitize=pointer-overflow ', although this may also disable some unrelated and useful pointer checks. Perhaps someday the Clang developers will fix the infelicity. The IBM i's pointers are 128 bits wide and it lacks the two types intptr_t and uintptr_t , which are optional in the C and POSIX standards. However, these two types are required for the XSI extension to POSIX, and many Gnulib modules use them. To work around this compatibility problem, Gnulib-using applications can be run on the IBM i's PASE emulation environment. The IBM i's architecture descends from the System/38 (1978). The Unisys ClearPath Dorado's machine word is 36 bits. Its signed integers use a ones'-complement representation. On these machines, CHAR_BIT == 9 and INT_MIN == -INT_MAX . By default UINT_MAX is 2^{36} - 2 , which does not conform to the C requirement that it be one less than a power of two. Although compiler options can raise UINT_MAX to be 2^{36} - 1 , this can break system code that uses -0 as a flag value. This platform's architecture descends from the UNIVAC 1103 (1953). The Unisys ClearPath Libra's machine word is 48 bits with a 4-bit tag and a 4-bit data extension. Its unsigned int uses the low-order 40 bits of the word, and int uses the low-order 41 bits of the word with a signed-magnitude representation. On these machines, INT_MAX == UINT_MAX , INT_MIN == -INT_MAX , and sizeof (int) == 6 . This platform's architecture descends from the Burroughs B5000 (1961). The following platforms are not supported by Gnulib. The cost of supporting them would exceed the benefit because they are rarely used, or poorly documented, or have been supplanted by other platforms, or diverge too much from POSIX, or some combination of these and other factors. Please don't bother sending us patches for them. Windows 95/98/ME. DJGPP and EMX (the 32-bit operating systems running in DOS). MSDOS (the 16-bit operating system). Windows Mobile, Symbian OS, iOS. Next: Various Kinds of Modules , Previous: Target Platforms , Up: Philosophy [ Contents ][ Index ] 2.5 Modules Gnulib is divided into modules. Every module implements a single facility. Modules can depend on other modules. A module consists of a number of files and a module description. The files are copied by gnulib-tool into the package that will use it, usually verbatim, without changes. Source code files (.h, .c files) reside in the lib/ subdirectory. Autoconf macro files reside in the m4/ subdirectory. Build scripts reside in the build-aux/ subdirectory. The module description contains the list of files; gnulib-tool copies these files. It contains the module's dependencies; gnulib-tool installs them as well. It also contains the autoconf macro invocation (usually a single line or nothing at all); gnulib-tool ensures this is invoked from the package's configure.ac file. And also a Makefile.am snippet; gnulib-tool collects these into a Makefile.am for the tailored Gnulib part. The module description and include file specification are for documentation purposes; they are combined into MODULES.html . The module system serves two purposes: It ensures consistency of the used autoconf macros and Makefile.am rules with the source code. For example, source code which uses the getopt_long function—this is a common way to implement parsing of command line options in a way that complies with the GNU standards—needs the source code ( lib/getopt.c and others), the autoconf macro which detects whether the system's libc already has this function (in m4/getopt.m4 ), and a few Makefile.am lines that create the substitute getopt.h if not. These three pieces belong together. They cannot be used without each other. The module description and gnulib-tool ensure that they are copied altogether into the destination package. It allows for scalability. It is well-known since the inception of the MODULA-2 language around 1978 that dissection into modules with dependencies allows for building large sets of code in a maintainable way. The maintainability comes from the facts that: Every module has a single purpose; you don't worry about other parts of the program while creating, reading or modifying the code of a module. The code you have to read in order to understand a module is limited to the source of the module and the .h files of the modules listed as dependencies. It is for this reason also that we recommend to put the comments describing the functions exported by a module into its .h file. In other words, the module is the elementary unit of code in Gnulib, comparable to a class in object-oriented languages like Java or C#. The module system is the basis of gnulib-tool . When gnulib-tool copies a part of Gnulib into a package, it first compiles a module list, starting with the requested modules and adding all the dependencies, and then collects the files, configure.ac snippets and Makefile.am snippets. Next: Collaborative Development , Previous: Modules , Up: Philosophy [ Contents ][ Index ] 2.6 Various Kinds of Modules There are modules of various kinds in Gnulib. For a complete list of the modules, see in MODULES.html . Support for ISO C or POSIX functions. Enhancements of ISO C or POSIX functions Portable general use facilities Reusable application code Object oriented classes Interfaces to external libraries Build / maintenance infrastructure 2.6.1 Support for ISO C or POSIX functions. When a function is not implemented by a system, the Gnulib module provides an implementation under the same name. Examples are the ‘ snprintf ' and ‘ readlink ' modules. Similarly, when a function is not correctly implemented by a system, Gnulib provides a replacement. For functions, we use the pattern #if !HAVE_WORKING_FOO # define foo rpl_foo #endif and implement the foo function under the name rpl_foo . This renaming is needed to avoid conflicts at compile time (in case the system header files declare foo ) and at link/run time (because the code making use of foo could end up residing in a shared library, and the executable program using this library could be defining foo itself). For header files, such as stdint.h , we provide the substitute only if the system doesn't provide a correct one. The template of this replacement is distributed in a slightly different name, with ‘ .in ' inserted before the ‘ .h ' extension, so that on systems which do provide a correct header file the system's one is used. The modules in this category are supported in C++ mode as well. This means, while the autoconfiguration uses the C compiler, the resulting header files and function substitutes can be used with a matching C++ compiler as well. 2.6.2 Enhancements of ISO C or POSIX functions These are sometimes POSIX functions with GNU extensions also found in glibc—examples: ‘ getopt ', ‘ fnmatch '—and often new APIs—for example, for all functions that allocate memory in one way or the other, we have variants which also include the error checking against the out-of-memory condition. 2.6.3 Portable general use facilities Examples are a module for copying a file—the portability problems relate to the copying of the file's modification time, access rights, and extended attributes—or a module for extracting the tail component of a file name—here the portability to native Windows requires a different API than the classical POSIX basename function. 2.6.4 Reusable application code Examples are an error reporting function, a module that allows output of numbers with K/M/G suffixes, or cryptographic facilities. 2.6.5 Object oriented classes Examples are data structures like ‘ list ', or abstract output stream classes that work around the fact that an application cannot implement an stdio FILE with its logic. Here, while staying in C, we use implementation techniques like tables of function pointers, known from the C++ language or from the Linux kernel. 2.6.6 Interfaces to external libraries Examples are the ‘ iconv ' module, which interfaces to the iconv facility, regardless whether it is contained in libc or in an external libiconv . Or the ‘ readline ' module, which interfaces to the GNU readline library. 2.6.7 Build / maintenance infrastructure An example is the ‘ maintainer-makefile ' module, which provides extra Makefile tags for maintaining a package. Next: Copyright , Previous: Various Kinds of Modules , Up: Philosophy [ Contents ][ Index ] 2.7 Collaborative Development Gnulib is maintained collaboratively. The mailing list is <bug-gnulib at gnu dot org> . Be warned that some people on the list may be very active at some times and unresponsive at other times. Every module has one or more maintainers. While issues are discussed collaboratively on the list, the maintainer of a module nevertheless has a veto right regarding changes in his module. All patches should be posted to the list, regardless whether they are proposed patches or whether they are committed immediately by the maintainer of the particular module. The purpose is not only to inform the other users of the module, but mainly to allow peer review. It is not uncommon that several people contribute comments or spot bugs after a patch was proposed. Conversely, if you are using Gnulib, and a patch is posted that affects one of the modules that your package uses, you have an interest in proofreading the patch. Next: Steady Development , Previous: Collaborative Development , Up: Philosophy [ Contents ][ Index ] 2.8 Copyright Most modules are under the GPL. Some, mostly modules which can reasonably be used in libraries, are under LGPL. Few modules are under other licenses, such as LGPLv2+, unlimited, or public domain. If the module description file says "GPL", it means "GPLv3+" (GPLv3 or newer, at the licensee's choice); if it says "LGPL", it means "LGPLv3+" (LGPLv3 or newer, at the licensee's choice). The source files, more precisely the files in lib/ and build-aux/ , are under a license compatible with the module's license. Most often, they are under the same license. But files can be shared among several modules, and in these cases it can happen that a source file is under a weaker license than noted in the module description – namely under the weakest license among the licenses of the modules that contain the file. Different licenses apply to files in special directories: modules/ Module description files are under this copyright: Copyright © 20XX–20YY Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, in any medium, are permitted without royalty provided the copyright notice and this notice are preserved. m4/ Autoconf macro files are under this copyright: Copyright © 20XX–20YY Free Software Foundation, Inc. This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. tests/ If a license statement is not present in a test module, the test files are under GPL. Even if the corresponding source module is under LGPL, this is not a problem, since compiled tests are not installed by “make install”. doc/ Documentation files are under this copyright: Copyright © 2004–20YY Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is at https://www.gnu.org/licenses/fdl-1.3.en.html . If you want to use some Gnulib modules under LGPL, you can do so by passing the option ‘ --lgpl ' to gnulib-tool . This will ensure that all imported modules can be used under the LGPL license. Similarly, if you want some Gnulib modules under LGPLv2+ (Lesser GPL version 2.1 or newer), you can do so by passing the option ‘ --lgpl=2 ' to gnulib-tool . Keep in mind that when you submit patches to files in Gnulib, you should license them under a compatible license. This means that sometimes the contribution will have to be LGPL, if the original file is available under LGPL. You can find out about it by looking at the license header of the file. Next: Openness , Previous: Copyright , Up: Philosophy [ Contents ][ Index ] 2.9 Steady Development Gnulib modules are continually adapted, to match new practices, to be consistent with newly added modules, or simply as a response to build failure reports. If you are willing to report an occasional regression, we recommend to use the newest version from git always, except in periods of major changes. Most Gnulib users do this. Previous: Steady Development , Up: Philosophy [ Contents ][ Index ] 2.10 Openness Gnulib is open in the sense that we gladly accept contributions if they are generally useful, well engineered, and if the contributors have signed the obligatory papers with the FSF. The module system is open in the sense that a package using Gnulib can locally patch or override files in Gnulib, locally add modules that are treated like Gnulib modules by gnulib-tool . This is achieved by the ‘ --local-dir ' option of gnulib-tool (see Extending Gnulib ). Next: Writing modules , Previous: Philosophy , Up: GNU Gnulib [ Contents ][ Index ] 3 Invoking gnulib-tool The gnulib-tool command is the recommended way to import Gnulib modules. It is possible to borrow Gnulib modules in a package without using gnulib-tool , relying only on the meta-information stored in the modules/* files, but with a growing number of modules this becomes tedious. gnulib-tool simplifies the management of source files, Makefile.am s and configure.ac in packages incorporating Gnulib modules. gnulib-tool is not installed in a standard directory that is contained in the PATH variable. It needs to be run directly in the directory that contains the Gnulib source code. You can do this either by specifying the absolute filename of gnulib-tool , or you can also use a symbolic link from a place inside your PATH to the gnulib-tool file of your preferred and most up-to-date Gnulib checkout, like this: $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool Run ‘ gnulib-tool --help ' for information. To get familiar with gnulib-tool without affecting your sources, you can also try some commands with the option ‘ --dry-run '; then gnulib-tool will only report which actions it would perform in a real run without changing anything. Finding modules Initial import Modified imports Simple update Changing your sources for use with Gnulib Changing your link commands for use with Gnulib Finding recommended ISO C and POSIX function substitutes Modifying the build rules of a Gnulib import directory Building directly from the top-level directory Using Gnulib for both a library and a program Caveat: gettextize and autopoint users Handling Gnulib's own message translations Integration with Version Control Systems Bundling the unit tests of the Gnulib modules Avoiding unnecessary checks and compilations Next: Initial import , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.1 Finding modules There are four ways of finding the names of Gnulib modules that you can use in your package: You have the complete module list, sorted according to categories, in https://www.gnu.org/software/gnulib/MODULES.html . If you are looking for POSIX function replacements that you don't know about yet, follow the procedure described in section Finding recommended ISO C and POSIX function substitutes . If you are looking for a particular POSIX header or function replacement, look in the chapters ISO C and POSIX Header File Substitutes and ISO C and POSIX Function Substitutes . For headers and functions that are provided by Glibc but not standardized by POSIX, look in the chapters Glibc Header File Substitutes and Glibc Function Substitutes . If you have already found the source file in Gnulib and are looking for the module that contains this source file, you can use the command ‘ gnulib-tool --find filename '. Next: Modified imports , Previous: Finding modules , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.2 Initial import Gnulib assumes that your project uses Autoconf. When using Gnulib, you will need to have Autoconf among your build tools. Gnulib also assumes that your project's configure.ac contains the line AC_CONFIG_HEADERS([config.h]) The config.h file gets generated with platform dependent C macro definitions, and the source files include it (see Changing your sources for use with Gnulib ). Unless you use gnulib-tool 's --gnu-make option, Gnulib also assumes that your project uses Automake at least in a subdirectory of your project. While the use of Automake in your project's top level directory is an easy way to fulfil the Makefile conventions of the GNU coding standards, Gnulib does not require it. Invoking ‘ gnulib-tool --import ' will copy source files, create a Makefile.am to build them, generate a file gnulib-comp.m4 with Autoconf M4 macro declarations used by configure.ac , and generate a file gnulib-cache.m4 containing the cached specification of how Gnulib is used. Our example will be a library that uses Autoconf, Automake and Libtool. It calls strdup , and you wish to use gnulib to make the package portable to C99 and C11 (which don't have strdup ). ~/src/libfoo$ gnulib-tool --import strdup Module list with included dependencies: absolute-header extensions strdup string File list: lib/dummy.c lib/strdup.c lib/string.in.h m4/absolute-header.m4 m4/extensions.m4 m4/gnulib-common.m4 m4/strdup.m4 m4/string_h.m4 Creating directory ./lib Creating directory ./m4 Copying file lib/dummy.c Copying file lib/strdup.c Copying file lib/string.in.h Copying file m4/absolute-header.m4 Copying file m4/extensions.m4 Copying file m4/gnulib-common.m4 Copying file m4/gnulib-tool.m4 Copying file m4/strdup.m4 Copying file m4/string_h.m4 Creating lib/Makefile.am Creating m4/gnulib-cache.m4 Creating m4/gnulib-comp.m4 Finished. You may need to add #include directives for the following .h files. #include <string.h> Don't forget to - add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac, - mention "lib" in SUBDIRS in Makefile.am, - mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am, - invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC, - invoke gl_INIT in ./configure.ac. ~/src/libfoo$ By default, the source code is copied into lib/ and the M4 macros in m4/ . You can override these paths by using --source-base=DIRECTORY and --m4-base=DIRECTORY . Some modules also provide other files necessary for building. These files are copied into the directory specified by ‘ AC_CONFIG_AUX_DIR ' in configure.ac or by the --aux-dir=DIRECTORY option. If neither is specified, the current directory is assumed. gnulib-tool can make symbolic links instead of copying the source files. The option to specify for this is ‘ --symlink ', or ‘ -s ' for short. This can be useful to save a few kilobytes of disk space. But it is likely to introduce bugs when gnulib is updated; it is more reliable to use ‘ gnulib-tool --update ' (see below) to update to newer versions of gnulib . Furthermore it requires extra effort to create self-contained tarballs, and it may disturb some mechanism the maintainer applies to the sources. For these reasons, this option is generally discouraged. gnulib-tool will overwrite any preexisting files, in particular Makefile.am . It is also possible to separate the generated Makefile.am content (for building the gnulib library) into a separate file, say gnulib.mk , that can be included by your handwritten Makefile.am , but this is a more advanced use of gnulib-tool . Consequently, it is a good idea to choose directories that are not already used by your projects, to separate gnulib imported files from your own files. This approach is also useful if you want to avoid conflicts between other tools (e.g., gettextize that also copy M4 files into your package. Simon Josefsson successfully uses a source base of gl/ , and a M4 base of gl/m4/ , in several packages. After the ‘ --import ' option on the command line comes the list of Gnulib modules that you want to incorporate in your package. The names of the modules coincide with the filenames in Gnulib's modules/ directory. Some Gnulib modules depend on other Gnulib modules. gnulib-tool will automatically add the needed modules as well; you need not list them explicitly. gnulib-tool will also memorize which dependent modules it has added, so that when someday a dependency is dropped, the implicitly added module is dropped as well (unless you have explicitly requested that module). If you want to cut a dependency, i.e., not add a module although one of your requested modules depends on it, you may use the option ‘ --avoid= module ' to do so. Multiple uses of this option are possible. Of course, you will then need to implement the same interface as the removed module. A few manual steps are required to finish the initial import. gnulib-tool printed a summary of these steps. First, you must ensure Autoconf can find the macro definitions in gnulib-comp.m4 . Use the ACLOCAL_AMFLAGS specifier in your top-level Makefile.am file, as in: ACLOCAL_AMFLAGS = -I m4 You are now ready to call the M4 macros in gnulib-comp.m4 from configure.ac . The macro gl_EARLY must be called as soon as possible after verifying that the C compiler is working. Typically, this is immediately after AC_PROG_CC , as in: ... AC_PROG_CC gl_EARLY ... The core part of the gnulib checks are done by the macro gl_INIT . Place it further down in the file, typically where you normally check for header files or functions. It must come after other checks which may affect the compiler invocation, such as AC_MINIX . For example: ... # For gnulib. gl_INIT ... gl_INIT will in turn call the macros related with the gnulib functions, be it specific gnulib macros, like gl_FUNC_ALLOCA or Autoconf or Automake macros like AC_FUNC_ALLOCA or AM_FUNC_GETLINE . So there is no need to call those macros yourself when you use the corresponding gnulib modules. You must also make sure that the gnulib library is built. Add the Makefile in the gnulib source base directory to AC_CONFIG_FILES , as in: AC_CONFIG_FILES(... lib/Makefile ...) You must also make sure that make will recurse into the gnulib directory. To achieve this, add the gnulib source base directory to a SUBDIRS Makefile.am statement, as in: SUBDIRS = lib or if you, more likely, already have a few entries in SUBDIRS , you can add something like: SUBDIRS += lib Finally, you have to add compiler and linker flags in the appropriate source directories, so that you can make use of the gnulib library. Since some modules (‘ getopt ', for example) may copy files into the build directory, top_builddir/lib is needed as well as top_srcdir/lib . For example: ... AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib ... LDADD = lib/libgnu.a ... Don't forget to #include the various header files. In this example, you would need to make sure that ‘ #include <string.h> ' is evaluated when compiling all source code files, that want to make use of strdup . In the usual case where Autoconf is creating a config.h file, you should include config.h first, before any other include file. That way, for example, if config.h defines ‘ restrict ' to be the empty string on a non-C99 host, or a macro like ‘ _FILE_OFFSET_BITS ' that affects the layout of data structures, the definition is consistent for all include files. Also, on some platforms macros like ‘ _FILE_OFFSET_BITS ' and ‘ _GNU_SOURCE ' may be ineffective, or may have only a limited effect, if defined after the first system header file is included. Finally, note that you cannot use AC_LIBOBJ or AC_REPLACE_FUNCS in your configure.ac and expect the resulting object files to be automatically added to lib/libgnu.a . This is because your AC_LIBOBJ and AC_REPLACE_FUNCS invocations from configure.ac augment a variable @LIBOBJS@ (and/or @LTLIBOBJS@ if using Libtool), whereas lib/libgnu.a is built from the contents of a different variable, usually @gl_LIBOBJS@ (or @gl_LTLIBOBJS@ if using Libtool). Next: Simple update , Previous: Initial import , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.3 Modified imports You can at any moment decide to use Gnulib differently than the last time. There are two ways to change how Gnulib is used. Which one you'll use, depends on where you keep track of options and module names that you pass to gnulib-tool . If you store the options and module names in a file under your own control, such as autogen.sh , bootstrap , bootstrap.conf , or similar, simply invoke gnulib-tool again, with modified options and more or fewer module names. gnulib-tool remembers which modules were used last time. If you want to rely on gnulib-tool 's own memory of the last used options and module names, you can use the commands gnulib-tool --add-import and gnulib-tool --remove-import . So, if you only want to use more Gnulib modules, simply invoke gnulib-tool --add-import new-modules . The list of modules that you pass after ‘ --add-import ' is added to the previous list of modules. Similarly, if you want to use fewer Gnulib modules, simply invoke gnulib-tool --remove-import unneeded-modules . The list of modules that you pass after ‘ --remove-import ' is removed from the previous list of modules. Note that if a module is then still needed as dependency of other modules, it will be used nevertheless. If you want to really not use a module any more, regardless of whether other modules may need it, you need to use the ‘ --avoid ' option. For other changes, such as different choices of ‘ --lib ', ‘ --source-base ' or ‘ --aux-dir ', the normal way is to modify manually the file gnulib-cache.m4 in the M4 macros directory, then launch ‘ gnulib-tool --add-import '. The only change for which this doesn't work is a change of the ‘ --m4-base ' directory. Because, when you pass a different value of ‘ --m4-base ', gnulib-tool will not find the previous gnulib-cache.m4 file any more. A possible solution is to manually copy the gnulib-cache.m4 into the new M4 macro directory. In the gnulib-cache.m4 file, the macros have the following meaning: gl_MODULES The argument is a space separated list of the requested modules, not including dependencies. gl_AVOID The argument is a space separated list of modules that should not be used, even if they occur as dependencies. Corresponds to the ‘ --avoid ' command line argument. gl_SOURCE_BASE The argument is the relative file name of the directory containing the gnulib source files (mostly *.c and *.h files). Corresponds to the ‘ --source-base ' command line argument. gl_M4_BASE The argument is the relative file name of the directory containing the gnulib M4 macros (*.m4 files). Corresponds to the ‘ --m4-base ' command line argument. gl_TESTS_BASE The argument is the relative file name of the directory containing the gnulib unit test files. Corresponds to the ‘ --tests-base ' command line argument. gl_LIB The argument is the name of the library to be created. Corresponds to the ‘ --lib ' command line argument. gl_LGPL The presence of this macro without arguments corresponds to the ‘ --lgpl ' command line argument. The presence of this macro with an argument (whose value must be 2 or 3) corresponds to the ‘ --lgpl= arg ' command line argument. gl_LIBTOOL The presence of this macro corresponds to the ‘ --libtool ' command line argument and to the absence of the ‘ --no-libtool ' command line argument. It takes no arguments. gl_MACRO_PREFIX The argument is the prefix to use for macros in the gnulib-comp.m4 file. Corresponds to the ‘ --macro-prefix ' command line argument. Next: Changing your sources for use with Gnulib , Previous: Modified imports , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.4 Simple update When you want to update to a more recent version of Gnulib, without changing the list of modules or other parameters, a simple call does it: $ gnulib-tool --add-import This will create, update or remove files, as needed. Note: From time to time, changes are made in Gnulib that are not backward compatible. When updating to a more recent Gnulib, you should consult Gnulib's NEWS file to check whether the incompatible changes affect your project. Next: Changing your link commands for use with Gnulib , Previous: Simple update , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.5 Changing your sources for use with Gnulib Gnulib contains some header file overrides. This means that when building on systems with deficient header files in /usr/include/ , it may create files named string.h , stdlib.h , stdint.h or similar in the build directory. In the other source directories of your package you will usually pass ‘ -I ' options to the compiler, so that these Gnulib substitutes are visible and take precedence over the files in /usr/include/ . These Gnulib substitute header files rely on <config.h> being already included. Furthermore <config.h> must be the first include in every compilation unit. This means that to all your source files and likely also to all your tests source files you need to add an ‘ #include <config.h> ' at the top. Which source files are affected? Exactly those whose compilation includes a ‘ -I ' option that refers to the Gnulib library directory. This is annoying, but inevitable: On many systems, <config.h> is used to set system dependent flags (such as _GNU_SOURCE on GNU systems), and these flags have no effect after any system header file has been included. Next: Finding recommended ISO C and POSIX function substitutes , Previous: Changing your sources for use with Gnulib , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.6 Changing your link commands for use with Gnulib When you use Gnulib, you need to augment the set of libraries against which your programs and libraries are linked. This is done by augmenting the Automake variable LDADD (for all programs) or prog _LDADD (for a single program prog ) or library _la_LIBADD (for a single library library .la ). What do you need to add to this Automake variable? The reference to the Gnulib library. In the example of section Initial import , this would be lib/libgnu.a for source in the top-level directory, or ../lib/libgnu.a for source in a sibling directory of lib/ . References to additional libraries, brought in by some of the Gnulib modules that you use (directly or indirectly). The complete list of such libraries is printed when you invoke gnulib-tool . Alternatively, you can retrieve the set of additional libraries required by a specific Gnulib module by running ./gnulib-tool --extract-recursive-link-directive module Beware: By looking into the module description file modules/ module or by running ./gnulib-tool --extract-link-directive module you would miss the link dependencies of indirectly used modules. Next: Modifying the build rules of a Gnulib import directory , Previous: Changing your link commands for use with Gnulib , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.7 Finding recommended ISO C and POSIX function substitutes Gnulib contains a wealth of portability workarounds for ISO C and POSIX functions. They are listed in detail in the chapter ISO C and POSIX Function Substitutes . If you want to know which function substitutes are recommended for your package, you can search your source code for ISO C and POSIX functions that it uses and read the corresponding sections of said documentation chapter. But this is a tedious task. Here is an alternative approach that makes this task easier. Add the Gnulib module ‘ posixcheck ' to the Gnulib imports of your package, as described earlier in this chapter. Do a make distclean if you previously built in the top-level directory. Then regenerate the Autotools-generated parts of the package. On a glibc system, build your package. Pay attention to the compiler warnings. Warnings are generated for uses of ISO C and POSIX functions that have portability problems or other important pitfalls and for which you have not yet imported the corresponding Gnulib module. If you get, say, a warning “warning: call to 'close' declared with attribute warning: close does not portably work on sockets - use gnulib module close for portability”, put ‘ close ' on your list of modules to import. Add the modules you noted to the Gnulib imports of your package. Optionally, you can do the same steps again, and make sure that there are no warnings left except those that you want to intentionally ignore. Finally, remove the Gnulib module ‘ posixcheck ' from the Gnulib imports, and run make distclean . Next: Building directly from the top-level directory , Previous: Finding recommended ISO C and POSIX function substitutes , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.8 Modifying the build rules of a Gnulib import directory In some cases, you may want to set additional compiler options for use within the Gnulib import directory. For example, the ‘ relocatable ' module operates better if you define the C macros ENABLE_COSTLY_RELOCATABLE and INSTALLDIR during its compilation. There are two ways to do so: Use of the gnulib-tool option --makefile-name , and a kitchen-sink module. With the gnulib-tool option --makefile-name , you are telling gnulib-tool to generate an includable Makefile.am portion, rather than a self-contained Makefile.am . For example, when you use --makefile-name=Makefile.gnulib , gnulib-tool will generate Makefile.gnulib , and you will provide a hand-written Makefile.am that includes Makefile.gnulib through a line such as include Makefile.gnulib Before this include, you need to initialize this set of Makefile.am variables: AUTOMAKE_OPTIONS SUBDIRS noinst_HEADERS noinst_LIBRARIES noinst_LTLIBRARIES pkgdata_DATA (only with Automake ≥ 1.11.4) EXTRA_DIST BUILT_SOURCES SUFFIXES MOSTLYCLEANFILES MOSTLYCLEANDIRS CLEANFILES DISTCLEANFILES MAINTAINERCLEANFILES AM_CPPFLAGS AM_CFLAGS AUTOMAKE_OPTIONS should be initialized as described in Changing Automake's Behavior in GNU Automake . The other variables can be initialized to empty. However, you will most likely want to initialize some of them with non-empty values, in order to achieve the desired customization. The other approach, the kitchen-sink module, is more advanced. See chapter Extending Gnulib . Next: Using Gnulib for both a library and a program , Previous: Modifying the build rules of a Gnulib import directory , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.9 Building directly from the top-level directory By default, the Gnulib import directory will contain a generated Makefile.am file. After configuring, this produces a generated Makefile in this directory. As a consequence, the build from the top-level directory will use a recursive make invocation for this directory. Some people prefer a build system where the Makefile in the top-level directory directly builds the artifacts in the subdirectories, without an intermediate make invocation. This is called “non-recursive make” and is supported by Automake. For more details, see https://autotools.io/automake/nonrecursive.html . Gnulib supports this flavour of build system too. To use it, pass two options to gnulib-tool : ‘ --makefile-name ' and ‘ --automake-subdir '. With the gnulib-tool option ‘ --makefile-name ', you are telling gnulib-tool to generate an includable Makefile.am portion in the Gnulib import directory, rather than a self-contained Makefile.am . For example, when you use ‘ --makefile-name=Makefile.gnulib ', gnulib-tool will generate Makefile.gnulib . With the option ‘ --automake-subdir ', you are telling gnulib-tool that you will include the generated file from the Makefile.am in the top-level directory, rather than from a Makefile.am in the same directory. For example, the top-level Makefile.am might contain this directive: include lib/Makefile.gnulib The option ‘ --automake-subdir ' is also supported in combination with ‘ --with-tests ' (see Bundling the unit tests of the Gnulib modules ). Note that in this case, however, the generated unit tests directory will contains a Makefile.am and thus use a recursive make invocation. This is not a problem, since the built artifacts of your package have no dependencies towards the Gnulib unit tests, nor vice versa. Next: Caveat: gettextize and autopoint users , Previous: Building directly from the top-level directory , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.10 Using Gnulib for both a library and a program Your project might build both a library and some accompanying programs in the same source tree. In that case you might want to use different modules for the library than for the programs. Typically the programs might want to make use of getopt-posix or version-etc , while the library wants to stay clear of these modules for technical or licensing reasons. Let's assume that your project contains a lib directory where the source of the library resides and a src directory for the sources of the programs as follows. . |-- configure.ac |-- lib | |-- foo.c | `-- Makefile.am |-- Makefile.am `-- src |-- bar.c `-- Makefile.am You can now add two instances of Gnulib to your project in separate source trees: ~/src/libfoo$ gnulib-tool --import --lib=libgnu --source-base=gnulib \ --m4-base=gnulib/m4 --macro-prefix=gl strndup ~/src/libfoo$ gnulib-tool --import --lib=libgnutools \ --source-base=src/gnulib --m4-base=src/gnulib/m4 \ --macro-prefix=gl_tools getopt-gnu The first one will import the module strndup in gnulib and the second one will import getopt-gnu in src/gnulib and you will end up with the following source tree (many files omitted in the interest of brevity): . |-- configure.ac |-- gnulib | |-- m4 | |-- strndup.c |-- lib | |-- foo.c | `-- Makefile.am |-- Makefile.am `-- src |-- bar.c |-- gnulib | |-- getopt.c | |-- getopt.in.h | |-- m4 `-- Makefile.am As discussed in Bundling the unit tests of the Gnulib modules , you may not use ‘ --with-tests ' for this project since the configure.ac is shared. Integration with your code is basically the same as outlined in Initial import with the one exception that you have to add both the macro gl_EARLY and the macro gl_tools_EARLY to your configure.ac (and of course also both macros gl_INIT and gl_tools_INIT ). Obviously the name of the second macro is dependent on the value of the --macro-prefix option in your gnulib-tool invocation. ... AC_PROG_CC gl_EARLY gl_tools_EARLY ... # For gnulib. gl_INIT gl_tools_INIT ... Also as outlined in Initial import you will have to add compiler and linker flags. For the library you might have to add something along the line of the following to your Makefile.am : ... AM_CPPFLAGS = -I$(top_srcdir)/gnulib -I$(top_builddir)/gnulib ... libfoo_la_LIBADD = $(top_builddir)/gnulib/libgnu.la ... Correspondingly for the programs you will have to add something like this: ... AM_CPPFLAGS = -I$(top_srcdir)/src/gnulib -I$(top_builddir)/src/gnulib ... LDADD = $(top_builddir)/src/gnulib/libgnutools.la ... The name of the library that you have pass in the linker option depends on the --lib option in gnulib-tool invocation. Next: Handling Gnulib's own message translations , Previous: Using Gnulib for both a library and a program , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.11 Caveat: gettextize and autopoint users The programs gettextize and autopoint , part of GNU gettext , import or update the internationalization infrastructure. Some of this infrastructure, namely ca. 20 Autoconf macro files and the config.rpath file, is also contained in Gnulib and may be imported by gnulib-tool . The use of gettextize or autopoint will therefore overwrite some of the files that gnulib-tool has imported, and vice versa. Avoiding to use gettextize (manually, as package maintainer) or autopoint (as part of a script like autoreconf or autogen.sh ) is not the solution: These programs also import the infrastructure in the po/ and optionally in the intl/ directory. The copies of the conflicting files in Gnulib are more up-to-date than the copies brought in by gettextize and autopoint . When a new gettext release is made, the copies of the files in Gnulib will be updated immediately. The choice of which version of gettext to require depends on the needs of your package. For a package that wants to comply to GNU Coding Standards, the steps are: When you run gettextize , always use the gettextize from the matching GNU gettext release. For the most recent Gnulib checkout, this is the newest release found on https://ftp.gnu.org/gnu/gettext/ . For an older Gnulib snapshot, it is the release that was the most recent release at the time the Gnulib snapshot was taken. After running gettextize , invoke gnulib-tool and import the gettext module. Also, copy the latest version of gnulib's build-aux/po/Makefile.in.in to your po/ directory (this is done for you if you use gnulib's autogen.sh script). If you get an error message like *** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version ... but the Autoconf macros are from gettext version ... , it means that a new GNU gettext release was made, and its Autoconf macros were integrated into Gnulib and now mismatch the po/ infrastructure. In this case, fetch and install the new GNU gettext release and run gettextize followed by gnulib-tool . On the other hand, if your package is not as concerned with compliance to the latest standards, but instead favors development on stable environments, the steps are: Determine the oldest version of gettext that you intend to support during development (at this time, gnulib recommends going no older than version 0.17). Run autopoint (not gettextize ) to copy infrastructure into place (newer versions of gettext will install the older infrastructure that you requested). Invoke gnulib-tool , and import the gettext-h module. Regardless of which approach you used to get the infrastructure in place, the following steps must then be used to preserve that infrastructure (gnulib's autogen.sh script follows these rules): When a script of yours run autopoint , invoke gnulib-tool afterwards. When you invoke autoreconf after gnulib-tool , make sure to not invoke autopoint a second time, by setting the AUTOPOINT environment variable, like this: $ env AUTOPOINT=true autoreconf --install Next: Integration with Version Control Systems , Previous: Caveat: gettextize and autopoint users , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.12 Handling Gnulib's own message translations Gnulib provides some functions that emit translatable messages using GNU gettext . The ‘ gnulib ' domain at the Translation Project collects translations of these messages, which you should incorporate into your own programs. There are two basic ways to achieve this. The first, and older, method is to list all the source files you use from Gnulib in your own po/POTFILES.in file. This will cause all the relevant translatable strings to be included in your POT file. When you send this POT file to the Translation Project, translators will normally fill in the translations of the Gnulib strings from their “translation memory”, and send you back updated PO files. However, this process is error-prone: you might forget to list some source files, or the translator might not be using a translation memory and provide a different translation than another translator, or the translation might not be kept in sync between Gnulib and your package. It is also slow and causes substantial extra work, because a human translator must be in the loop for each language and you will need to incorporate their work on request. For these reasons, a new method was designed and is now recommended. If you pass the --po-base= directory and --po-domain= domain options to gnulib-tool , then gnulib-tool will create a separate directory with its own POTFILES.in , and fetch current translations directly from the Translation Project (using rsync or wget , whichever is available). The POT file in this directory will be called domain -gnulib.pot , depending on the domain you gave to the --po-domain option (typically the same as the package name). This causes these translations to reside in a separate message domain, so that they do not clash either with the translations for the main part of your package nor with those of other packages on the system that use possibly different versions of Gnulib. When you use these options, the functions in Gnulib are built in such a way that they will always use this domain regardless of the default domain set by textdomain . In order to use this method, you must—in each program that might use Gnulib code—add an extra line to the part of the program that initializes locale-dependent behavior. Where you would normally write something like: setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); you should add an additional bindtextdomain call to inform gettext of where the MO files for the extra message domain may be found: bindtextdomain (PACKAGE "-gnulib", LOCALEDIR); (This example assumes that the domain that you specified to gnulib-tool is the same as the value of the PACKAGE preprocessor macro.) Since you do not change the textdomain call, the default message domain for your program remains the same and your own use of gettext functions will not be affected. Next: Bundling the unit tests of the Gnulib modules , Previous: Handling Gnulib's own message translations , Up: Invoking gnulib-tool [ Contents ][ Index ] 3.13 Integration with Version Control Systems If a project stores its source files in a version control system (VCS), such as CVS, Subversion, or Git, one needs to decide which files to commit. In principle, all files created by gnulib-tool , except gnulib-cache.m4 , can be treated like generated source files, like for example a parser.c file generated from parser.y . Alternatively, ...
http://www.gnu.org/savannah-checkouts/gnu/gnulib/manual/gnulib.html - [detail] - [similar]
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 213332 documents and 1081104 words.