1#!/usr/bin/env python3
2
3# Copyright 2015 The Meson development team
4
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8
9#     http://www.apache.org/licenses/LICENSE-2.0
10
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17help_message = """Usage: {} <config.h.meson>
18
19This script reads config.h.meson, looks for header
20checks and writes the corresponding meson declaration.
21
22Copy config.h.in to config.h.meson, replace #undef
23with #mesondefine and run this. We can't do this automatically
24because some configure scripts have #undef statements
25that are unrelated to configure checks.
26"""
27
28import sys
29
30
31# Add stuff here as it is encountered.
32function_data = \
33    {'HAVE_FEENABLEEXCEPT': ('feenableexcept', 'fenv.h'),
34     'HAVE_FECLEAREXCEPT': ('feclearexcept', 'fenv.h'),
35     'HAVE_FEDISABLEEXCEPT': ('fedisableexcept', 'fenv.h'),
36     'HAVE_MMAP': ('mmap', 'sys/mman.h'),
37     'HAVE_GETPAGESIZE': ('getpagesize', 'unistd.h'),
38     'HAVE_GETISAX': ('getisax', 'sys/auxv.h'),
39     'HAVE_GETTIMEOFDAY': ('gettimeofday', 'sys/time.h'),
40     'HAVE_MPROTECT': ('mprotect', 'sys/mman.h'),
41     'HAVE_POSIX_MEMALIGN': ('posix_memalign', 'stdlib.h'),
42     'HAVE_SIGACTION': ('sigaction', 'signal.h'),
43     'HAVE_ALARM': ('alarm', 'unistd.h'),
44     'HAVE_CTIME_R': ('ctime_r', 'time.h'),
45     'HAVE_DRAND48': ('drand48', 'stdlib.h'),
46     'HAVE_FLOCKFILE': ('flockfile', 'stdio.h'),
47     'HAVE_FORK': ('fork', 'unistd.h'),
48     'HAVE_FUNLOCKFILE': ('funlockfile', 'stdio.h'),
49     'HAVE_GETLINE': ('getline', 'stdio.h'),
50     'HAVE_LINK': ('link', 'unistd.h'),
51     'HAVE_RAISE': ('raise', 'signal.h'),
52     'HAVE_STRNDUP': ('strndup', 'string.h'),
53     'HAVE_SCHED_GETAFFINITY': ('sched_getaffinity', 'sched.h'),
54     'HAVE_WAITPID': ('waitpid', 'sys/wait.h'),
55     'HAVE_XRENDERCREATECONICALGRADIENT': ('XRenderCreateConicalGradient', 'xcb/render.h'),
56     'HAVE_XRENDERCREATELINEARGRADIENT': ('XRenderCreateLinearGradient', 'xcb/render.h'),
57     'HAVE_XRENDERCREATERADIALGRADIENT': ('XRenderCreateRadialGradient', 'xcb/render.h'),
58     'HAVE_XRENDERCREATESOLIDFILL': ('XRenderCreateSolidFill', 'xcb/render.h'),
59     'HAVE_DCGETTEXT': ('dcgettext', 'libintl.h'),
60     'HAVE_ENDMNTENT': ('endmntent', 'mntent.h'),
61     'HAVE_ENDSERVENT': ('endservent', 'netdb.h'),
62     'HAVE_EVENTFD': ('eventfd', 'sys/eventfd.h'),
63     'HAVE_FALLOCATE': ('fallocate', 'fcntl.h'),
64     'HAVE_FCHMOD': ('fchmod', 'sys/stat.h'),
65     'HAVE_FCHOWN': ('fchown', 'unistd.h'),
66     'HAVE_FDWALK': ('fdwalk', 'stdlib.h'),
67     'HAVE_FSYNC': ('fsync', 'unistd.h'),
68     'HAVE_GETC_UNLOCKED': ('getc_unlocked', 'stdio.h'),
69     'HAVE_GETFSSTAT': ('getfsstat', 'sys/mount.h'),
70     'HAVE_GETMNTENT_R': ('getmntent_r', 'mntent.h'),
71     'HAVE_GETPROTOBYNAME_R': ('getprotobyname_r', 'netdb.h'),
72     'HAVE_GETRESUID': ('getresuid', 'unistd.h'),
73     'HAVE_GETVFSSTAT': ('getvfsstat', 'sys/statvfs.h'),
74     'HAVE_GMTIME_R': ('gmtime_r', 'time.h'),
75     'HAVE_HASMNTOPT': ('hasmntopt', 'mntent.h'),
76     'HAVE_IF_INDEXTONAME': ('if_indextoname', 'net/if.h'),
77     'HAVE_IF_NAMETOINDEX': ('if_nametoindex', 'net/if.h'),
78     'HAVE_INOTIFY_INIT1': ('inotify_init1', 'sys/inotify.h'),
79     'HAVE_ISSETUGID': ('issetugid', 'unistd.h'),
80     'HAVE_KEVENT': ('kevent', 'sys/event.h'),
81     'HAVE_KQUEUE': ('kqueue', 'sys/event.h'),
82     'HAVE_LCHMOD': ('lchmod', 'sys/stat.h'),
83     'HAVE_LCHOWN': ('lchown', 'unistd.h'),
84     'HAVE_LSTAT': ('lstat', 'sys/stat.h'),
85     'HAVE_MEMCPY': ('memcpy', 'string.h'),
86     'HAVE_MEMALIGN': ('memalign', 'stdlib.h'),
87     'HAVE_MEMMEM': ('memmem', 'string.h'),
88     'HAVE_NEWLOCALE': ('newlocale', 'locale.h'),
89     'HAVE_PIPE2': ('pipe2', 'fcntl.h'),
90     'HAVE_POLL': ('poll', 'poll.h'),
91     'HAVE_PRLIMIT': ('prlimit', 'sys/resource.h'),
92     'HAVE_PTHREAD_ATTR_SETSTACKSIZE': ('pthread_attr_setstacksize', 'pthread.h'),
93     'HAVE_PTHREAD_CONDATTR_SETCLOCK': ('pthread_condattr_setclock', 'pthread.h'),
94     'HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP': ('pthread_cond_timedwait_relative_np', 'pthread.h'),
95     'HAVE_READLINK': ('readlink', 'unistd.h'),
96     'HAVE_RES_INIT': ('res_init', 'resolv.h'),
97     'HAVE_SENDMMSG': ('sendmmsg', 'sys/socket.h'),
98     'HAVE_SOCKET': ('socket', 'sys/socket.h'),
99     'HAVE_GETENV': ('getenv', 'stdlib.h'),
100     'HAVE_SETENV': ('setenv', 'stdlib.h'),
101     'HAVE_PUTENV': ('putenv', 'stdlib.h'),
102     'HAVE_UNSETENV': ('unsetenv', 'stdlib.h'),
103     'HAVE_SETMNTENT': ('setmntent', 'mntent.h'),
104     'HAVE_SNPRINTF': ('snprintf', 'stdio.h'),
105     'HAVE_SPLICE': ('splice', 'fcntl.h'),
106     'HAVE_STATFS': ('statfs', 'mount.h'),
107     'HAVE_STATVFS': ('statvfs', 'sys/statvfs.h'),
108     'HAVE_STPCOPY': ('stpcopy', 'string.h'),
109     'HAVE_STRCASECMP': ('strcasecmp', 'strings.h'),
110     'HAVE_STRLCPY': ('strlcpy', 'string.h'),
111     'HAVE_STRNCASECMP': ('strncasecmp', 'strings.h'),
112     'HAVE_STRSIGNAL': ('strsignal', 'signal.h'),
113     'HAVE_STRTOD_L': ('strtod_l', 'stdlib.h'),
114     'HAVE_STRTOLL_L': ('strtoll_l', 'stdlib.h'),
115     'HAVE_STRTOULL_L': ('strtoull_l', 'stdlib.h'),
116     'HAVE_SYMLINK': ('symlink', 'unistd.h'),
117     'HAVE_SYSCTLBYNAME': ('sysctlbyname', 'sys/sysctl.h'),
118     'HAVE_TIMEGM': ('timegm', 'time.h'),
119     'HAVE_USELOCALE': ('uselocale', 'xlocale.h'),
120     'HAVE_UTIMES': ('utimes', 'sys/time.h'),
121     'HAVE_VALLOC': ('valloc', 'stdlib.h'),
122     'HAVE_VASPRINTF': ('vasprintf', 'stdio.h'),
123     'HAVE_VSNPRINTF': ('vsnprintf', 'stdio.h'),
124     'HAVE_BCOPY': ('bcopy', 'strings.h'),
125     'HAVE_STRERROR': ('strerror', 'string.h'),
126     'HAVE_MEMMOVE': ('memmove', 'string.h'),
127     'HAVE_STRTOIMAX': ('strtoimax', 'inttypes.h'),
128     'HAVE_STRTOLL': ('strtoll', 'stdlib.h'),
129     'HAVE_STRTOQ': ('strtoq', 'stdlib.h'),
130     'HAVE_ACCEPT4': ('accept4', 'sys/socket.h'),
131     'HAVE_CHMOD': ('chmod', 'sys/stat.h'),
132     'HAVE_CHOWN': ('chown', 'unistd.h'),
133     'HAVE_FSTAT': ('fstat', 'sys/stat.h'),
134     'HAVE_GETADDRINFO': ('getaddrinfo', 'netdb.h'),
135     'HAVE_GETGRGID_R': ('getgrgid_r', 'grp.h'),
136     'HAVE_GETGRNAM_R': ('getgrnam_r', 'grp.h'),
137     'HAVE_GETGROUPS': ('getgroups', 'grp.h'),
138     'HAVE_GETOPT_LONG': ('getopt_long', 'getopt.h'),
139     'HAVE_GETPWNAM_R': ('getpwnam', 'pwd.h'),
140     'HAVE_GETPWUID_R': ('getpwuid_r', 'pwd.h'),
141     'HAVE_GETUID': ('getuid', 'unistd.h'),
142     'HAVE_LRINTF': ('lrintf', 'math.h'),
143     'HAVE_DECL_ISNAN': ('isnan', 'math.h'),
144     'HAVE_DECL_ISINF': ('isinf', 'math.h'),
145     'HAVE_ROUND': ('round', 'math.h'),
146     'HAVE_NEARBYINT': ('nearbyint', 'math.h'),
147     'HAVE_RINT': ('rint', 'math.h'),
148     'HAVE_MKFIFO': ('mkfifo', 'sys/stat.h'),
149     'HAVE_MLOCK': ('mlock', 'sys/mman.h'),
150     'HAVE_NANOSLEEP': ('nanosleep', 'time.h'),
151     'HAVE_PIPE': ('pipe', 'unistd.h'),
152     'HAVE_PPOLL': ('ppoll', 'poll.h'),
153     'HAVE_REGEXEC': ('regexec', 'regex.h'),
154     'HAVE_SETEGID': ('setegid', 'unistd.h'),
155     'HAVE_SETEUID': ('seteuid', 'unistd.h'),
156     'HAVE_SETPGID': ('setpgid', 'unistd.h'),
157     'HAVE_SETREGID': ('setregid', 'unistd.h'),
158     'HAVE_SETRESGID': ('setresgid', 'unistd.h'),
159     'HAVE_SETRESUID': ('setresuid', 'unistd.h'),
160     'HAVE_SHM_OPEN': ('shm_open', 'fcntl.h'),
161     'HAVE_SLEEP': ('sleep', 'unistd.h'),
162     'HAVE_STRERROR_R': ('strerror_r', 'string.h'),
163     'HAVE_STRTOF': ('strtof', 'stdlib.h'),
164     'HAVE_SYSCONF': ('sysconf', 'unistd.h'),
165     'HAVE_USLEEP': ('usleep', 'unistd.h'),
166     'HAVE_VFORK': ('vfork', 'unistd.h'),
167     'HAVE_MALLOC': ('malloc', 'stdlib.h'),
168     'HAVE_CALLOC': ('calloc', 'stdlib.h'),
169     'HAVE_REALLOC': ('realloc', 'stdlib.h'),
170     'HAVE_FREE': ('free', 'stdlib.h'),
171     'HAVE_ALLOCA': ('alloca', 'alloca.h'),
172     'HAVE_QSORT': ('qsort', 'stdlib.h'),
173     'HAVE_ABS': ('abs', 'stdlib.h'),
174     'HAVE_MEMSET': ('memset', 'string.h'),
175     'HAVE_MEMCMP': ('memcmp', 'string.h'),
176     'HAVE_STRLEN': ('strlen', 'string.h'),
177     'HAVE_STRLCAT': ('strlcat', 'string.h'),
178     'HAVE_STRDUP': ('strdup', 'string.h'),
179     'HAVE__STRREV': ('_strrev', 'string.h'),
180     'HAVE__STRUPR': ('_strupr', 'string.h'),
181     'HAVE__STRLWR': ('_strlwr', 'string.h'),
182     'HAVE_INDEX': ('index', 'strings.h'),
183     'HAVE_RINDEX': ('rindex', 'strings.h'),
184     'HAVE_STRCHR': ('strchr', 'string.h'),
185     'HAVE_STRRCHR': ('strrchr', 'string.h'),
186     'HAVE_STRSTR': ('strstr', 'string.h'),
187     'HAVE_STRTOL': ('strtol', 'stdlib.h'),
188     'HAVE_STRTOUL': ('strtoul', 'stdlib.h'),
189     'HAVE_STRTOULL': ('strtoull', 'stdlib.h'),
190     'HAVE_STRTOD': ('strtod', 'stdlib.h'),
191     'HAVE_ATOI': ('atoi', 'stdlib.h'),
192     'HAVE_ATOF': ('atof', 'stdlib.h'),
193     'HAVE_STRCMP': ('strcmp', 'string.h'),
194     'HAVE_STRNCMP': ('strncmp', 'string.h'),
195     'HAVE_VSSCANF': ('vsscanf', 'stdio.h'),
196     'HAVE_CHROOT': ('chroot', 'unistd.h'),
197     'HAVE_CLOCK': ('clock', 'time.h'),
198     'HAVE_CLOCK_GETRES': ('clock_getres', 'time.h'),
199     'HAVE_CLOCK_GETTIME': ('clock_gettime', 'time.h'),
200     'HAVE_CLOCK_SETTIME': ('clock_settime', 'time.h'),
201     'HAVE_CONFSTR': ('confstr', 'time.h'),
202     'HAVE_CTERMID': ('ctermid', 'stdio.h'),
203     'HAVE_DIRFD': ('dirfd', 'dirent.h'),
204     'HAVE_DLOPEN': ('dlopen', 'dlfcn.h'),
205     'HAVE_DUP2': ('dup2', 'unistd.h'),
206     'HAVE_DUP3': ('dup3', 'unistd.h'),
207     'HAVE_EPOLL_CREATE1': ('epoll_create1', 'sys/epoll.h'),
208     'HAVE_ERF': ('erf', 'math.h'),
209     'HAVE_ERFC': ('erfc', 'math.h'),
210     'HAVE_EXECV': ('execv', 'unistd.h'),
211     'HAVE_FACCESSAT': ('faccessat', 'unistd.h'),
212     'HAVE_FCHDIR': ('fchdir', 'unistd.h'),
213     'HAVE_FCHMODAT': ('fchmodat', 'sys/stat.h'),
214     'HAVE_FDATASYNC': ('fdatasync', 'unistd.h'),
215     'HAVE_FDOPENDIR': ('fdopendir', 'dirent.h'),
216     'HAVE_FEXECVE': ('fexecve', 'unistd.h'),
217     'HAVE_FLOCK': ('flock', 'sys/file.h'),
218     'HAVE_FORKPTY': ('forkpty', 'pty.h'),
219     'HAVE_FPATHCONF': ('fpathconf', 'unistd.h'),
220     'HAVE_FSTATAT': ('fstatat', 'unistd.h'),
221     'HAVE_FSTATVFS': ('fstatvfs', 'sys/statvfs.h'),
222     'HAVE_FTELLO': ('ftello', 'stdio.h'),
223     'HAVE_FTIME': ('ftime', 'sys/timeb.h'),
224     'HAVE_FTRUNCATE': ('ftruncate', 'unistd.h'),
225     'HAVE_FUTIMENS': ('futimens', 'sys/stat.h'),
226     'HAVE_FUTIMES': ('futimes', 'sys/time.h'),
227     'HAVE_GAI_STRERROR': ('gai_strerror', 'netdb.h'),
228     'HAVE_GETGROUPLIST': ('getgrouplist', 'grp.h'),
229     'HAVE_GETHOSTBYNAME': ('gethostbyname', 'netdb.h'),
230     'HAVE_GETHOSTBYNAME_R': ('gethostbyname_r', 'netdb.h'),
231     'HAVE_GETITIMER': ('getitimer', 'sys/time.h'),
232     'HAVE_GETLOADAVG': ('getloadavg', 'stdlib.h'),
233     'HAVE_GETLOGIN': ('getlogin', 'unistd.h'),
234     'HAVE_GETNAMEINFO': ('getnameinfo', 'netdb.h'),
235     'HAVE_GETPEERNAME': ('getpeername', 'sys/socket.h'),
236     'HAVE_GETPGID': ('getpgid', 'unistd.h'),
237     'HAVE_GETPGRP': ('getpgrp', 'unistd.h'),
238     'HAVE_GETPID': ('getpid', 'unistd.h'),
239     'HAVE_GETPRIORITY': ('getpriority', 'sys/resource.h'),
240     'HAVE_GETPWENT': ('getpwent', 'pwd.h'),
241     'HAVE_GETRANDOM': ('getrandom', 'linux/random.h'),
242     'HAVE_GETRESGID': ('getresgid', 'unistd.h'),
243     'HAVE_GETSID': ('getsid', 'unistd.h'),
244     'HAVE_GETSPENT': ('getspent', 'shadow.h'),
245     'HAVE_GETSPNAM': ('getspnam', 'shadow.h'),
246     'HAVE_GETWD': ('getwd', 'unistd.h'),
247     'HAVE_HSTRERROR': ('hstrerror', 'netdb.h'),
248     'HAVE_HTOLE64': ('htole64', 'endian.h'),
249     'HAVE_IF_NAMEINDEX': ('if_nameindex', 'net/if.h'),
250     'HAVE_INET_ATON': ('inet_aton', 'arpa/inet.h'),
251     'HAVE_INET_PTON': ('inet_pton', 'arpa/inet.h'),
252     'HAVE_INITGROUPS': ('initgroups', 'grp.h'),
253     'HAVE_KILL': ('kill', 'signal.h'),
254     'HAVE_KILLPG': ('killpg', 'signal.h'),
255     'HAVE_LINKAT': ('linkat', 'unistd.h'),
256     'HAVE_LOCKF': ('lockf', 'unistd.h'),
257     'HAVE_LUTIMES': ('lutimes', 'sys/time.h'),
258     'HAVE_MAKEDEV': ('makedev', 'sys/sysmacros.h'),
259     'HAVE_MBRTOWC': ('mbrtowc', 'wchar.h'),
260     'HAVE_MEMRCHR': ('memrchr', 'string.h'),
261     'HAVE_MKDIRAT': ('mkdirat', 'sys/stat.h'),
262     'HAVE_MKFIFOAT': ('mkfifoat', 'sys/stat.h'),
263     'HAVE_MKNOD': ('mknod', 'unistd.h'),
264     'HAVE_MKNODAT': ('mknodat', 'unistd.h'),
265     'HAVE_MKTIME': ('mktime', 'unistd.h'),
266     'HAVE_MKREMAP': ('mkremap', 'sys/mman.h'),
267     'HAVE_NICE': ('nice', 'unistd.h'),
268     'HAVE_OPENAT': ('openat', 'fcntl.h'),
269     'HAVE_OPENPTY': ('openpty', 'pty.h'),
270     'HAVE_PATHCONF': ('pathconf', 'unistd.h'),
271     'HAVE_PAUSE': ('pause', 'unistd.h'),
272     'HAVE_PREAD': ('pread', 'unistd.h'),
273     'HAVE_PTHREAD_KILL': ('pthread_kill', 'signal.h'),
274     'HAVE_PTHREAD_SIGMASK': ('pthread_sigmask', 'signal.h'),
275     'HAVE_PWRITE': ('pwrite', 'unistd.h'),
276     'HAVE_READLINKAT': ('readlinkat', 'unistd.h'),
277     'HAVE_READV': ('readv', 'sys/uio.h'),
278     'HAVE_RENAMEAT': ('renamat', 'stdio.h'),
279     'HAVE_SCHED_GET_PRIORITY_MAX': ('sched_get_priority_max', 'sched.h'),
280     'HAVE_SCHED_RR_GET_INTERVAL': ('sched_rr_get_interval', 'sched.h'),
281     'HAVE_SCHED_SETAFFINITY': ('sched_setaffinity', 'sched.h'),
282     'HAVE_SCHED_SETPARAM': ('sched_setparam', 'sched.h'),
283     'HAVE_SCHED_SETSCHEDULER': ('sched_setscheduler', 'sched.h'),
284     'HAVE_SELECT': ('select', 'sys/select.h'),
285     'HAVE_SEM_GETVALUE': ('sem_getvalue', 'semaphore.h'),
286     'HAVE_SEM_OPEN': ('sem_open', 'semaphore.h'),
287     'HAVE_SEM_TIMEDWAIT': ('sem_timedwait', 'semaphore.h'),
288     'HAVE_SEM_UNLINK': ('sem_unlink', 'semaphore.h'),
289     'HAVE_SENDFILE': ('sendfile', 'sys/sendfile.h'),
290     'HAVE_SETGID': ('setgid', 'unistd.h'),
291     'HAVE_SETGROUPS': ('setgroups', 'grp.h'),
292     'HAVE_SETHOSTNAME': ('sethostname', 'unistd.h'),
293     'HAVE_SETITIMER': ('setitimer', 'sys/time.h'),
294     'HAVE_SETLOCALE': ('setlocale', 'locale.h'),
295     'HAVE_SETPGRP': ('setpgrp', 'unistd.h'),
296     'HAVE_SETPRIORITY': ('setpriority', 'sys/resource.h'),
297     'HAVE_SETREUID': ('setreuid', 'unistd.h'),
298     'HAVE_SETSID': ('setsid', 'unistd.h'),
299     'HAVE_SETUID': ('setuid', 'unistd.h'),
300     'HAVE_SETVBUF': ('setvbuf', 'unistd.h'),
301     'HAVE_SIGALTSTACK': ('sigaltstack', 'signal.h'),
302     'HAVE_SIGINTERRUPT': ('siginterrupt', 'signal.h'),
303     'HAVE_SIGPENDING': ('sigpending', 'signal.h'),
304     'HAVE_SIGRELSE': ('sigrelse', 'signal.h'),
305     'HAVE_SIGTIMEDWAIT': ('sigtimedwait', 'signal.h'),
306     'HAVE_SIGWAIT': ('sigwait', 'signal.h'),
307     'HAVE_SIGWAITINFO': ('sigwaitinfo', 'signal.h'),
308     'HAVE_SOCKETPAIR': ('socketpair', 'sys/socket.h'),
309     'HAVE_STRFTIME': ('strftime', 'time.h'),
310     'HAVE_SYMLINKAT': ('symlinkat', 'unistd.h'),
311     'HAVE_SYNC': ('sync', 'unistd.h'),
312     'HAVE_TCGETPGRP': ('tcgetpgrp', 'unistd.h'),
313     'HAVE_TCSETPGRP': ('tcsetpgrp', 'unistd.h'),
314     'HAVE_TEMPNAM': ('tempnam', 'stdio.h'),
315     'HAVE_TIMES': ('times', 'sys/times.h'),
316     'HAVE_TEMPFILE': ('tempfile', 'stdio.h'),
317     'HAVE_TMPNAM': ('tmpnam', 'stdio.h'),
318     'HAVE_TMPNAM_R': ('tmpnam_r', 'stdio.h'),
319     'HAVE_TRUNCATE': ('truncate', 'unistd.h'),
320     'HAVE_TZNAME': ('tzname', 'time.h'),
321     'HAVE_UNAME': ('uname', 'sys/utsname.h'),
322     'HAVE_UNLINKAT': ('unlinkat', 'unistd.h'),
323     'HAVE_UTIMENSAT': ('utimensat', 'sys/stat.h'),
324     'HAVE_WAIT3': ('wait3', 'sys/wait.h'),
325     'HAVE_WAIT4': ('wait4', 'sys/wait.h'),
326     'HAVE_WAITID': ('waitid', 'sys/wait.h'),
327     'HAVE_WRITEV': ('writev', 'sys/uio.h'),
328     'HAVE_WMEMCMP': ('wmemcmp', 'wchar.h'),
329     'HAVE_ATAN': ('atan', 'math.h'),
330     'HAVE_ATAN2': ('atan2', 'math.h'),
331     'HAVE_ACOS': ('acos', 'math.h'),
332     'HAVE_ACOSH': ('acosh', 'math.h'),
333     'HAVE_ASIN': ('asin', 'math.h'),
334     'HAVE_ASINH': ('asinh', 'math.h'),
335     'HAVE_ATANH': ('atanh', 'math.h'),
336     'HAVE_CEIL': ('ceil', 'math.h'),
337     'HAVE_COPYSIGN': ('copysign', 'math.h'),
338     'HAVE_COS': ('cos', 'math.h'),
339     'HAVE_COSH': ('cosh', 'math.h'),
340     'HAVE_COSF': ('cosf', 'math.h'),
341     'HAVE_EXPM1': ('expm1', 'math.h'),
342     'HAVE_FABS': ('fabs', 'math.h'),
343     'HAVE_FINITE': ('finite', 'math.h'),
344     'HAVE_FLOOR': ('floor', 'math.h'),
345     'HAVE_GAMMA': ('gamma', 'math.h'),
346     'HAVE_HYPOT': ('hypot', 'math.h'),
347     'HAVE_ISINF': ('isinf', 'math.h'),
348     'HAVE_LOG': ('log', 'math.h'),
349     'HAVE_LOG1P': ('log1p', 'math.h'),
350     'HAVE_LOG2': ('log2', 'math.h'),
351     'HAVE_LGAMMA': ('lgamma', 'math.h'),
352     'HAVE_POW': ('pow', 'math.h'),
353     'HAVE_SCALBN': ('scalbn', 'math.h'),
354     'HAVE_SIN': ('sin', 'math.h'),
355     'HAVE_SINF': ('sinf', 'math.h'),
356     'HAVE_SINH': ('sinh', 'math.h'),
357     'HAVE_SQRT': ('sqrt', 'math.h'),
358     'HAVE_TGAMMA': ('tgamma', 'math.h'),
359     'HAVE_FSEEKO': ('fseeko', 'stdio.h'),
360     'HAVE_FSEEKO64': ('fseeko64', 'stdio.h'),
361     'HAVE_SETJMP': ('setjmp', 'setjmp.h'),
362     'HAVE_PTHREAD_SETNAME_NP': ('pthread_setname_np', 'pthread.h'),
363     'HAVE_PTHREAD_SET_NAME_NP': ('pthread_set_name_np', 'pthread.h'),
364     }
365
366headers = []
367functions = []
368sizes = []
369
370if len(sys.argv) != 2:
371    print(help_message.format(sys.argv[0]))
372    sys.exit(0)
373
374with open(sys.argv[1]) as f:
375    for line in f:
376        line = line.strip()
377        arr = line.split()
378
379        # Check for headers.
380        if line.startswith('#mesondefine') and line.endswith('_H'):
381            token = line.split()[1]
382            tarr = token.split('_')[1:-1]
383            tarr = [x.lower() for x in tarr]
384            hname = '/'.join(tarr) + '.h'
385            headers.append((token, hname))
386
387        # Check for functions.
388        try:
389            token = arr[1]
390            if token in function_data:
391                fdata = function_data[token]
392                functions.append([token, fdata[0], fdata[1]])
393            elif token.startswith('HAVE_') and not token.endswith('_H'):
394                functions.append([token])
395        except Exception:
396            pass
397
398        # Check for sizeof tests.
399        if len(arr) != 2:
400            continue
401        elem = arr[1]
402        if elem.startswith('SIZEOF_'):
403            typename = elem.split('_', 1)[1] \
404                .replace('_P', '*') \
405                .replace('_', ' ') \
406                .lower() \
407                .replace('size t', 'size_t')
408            sizes.append((elem, typename))
409
410print('''cc = meson.get_compiler('c')
411cdata = configuration_data()''')
412
413# Convert header checks.
414
415print('check_headers = [')
416for token, hname in headers:
417    print("  ['{}', '{}'],".format(token, hname))
418print(']\n')
419
420print('''foreach h : check_headers
421  if cc.has_header(h.get(1))
422    cdata.set(h.get(0), 1)
423  endif
424endforeach
425''')
426
427# Convert function checks.
428
429print('check_functions = [')
430for tok in functions:
431    if len(tok) == 3:
432        tokstr, fdata0, fdata1 = tok
433        print("  ['{}', '{}', '#include<{}>'],".format(tokstr, fdata0, fdata1))
434    else:
435        print('# check token', tok)
436print(']\n')
437
438print('''foreach f : check_functions
439  if cc.has_function(f.get(1), prefix : f.get(2))
440    cdata.set(f.get(0), 1)
441  endif
442endforeach
443''')
444
445# Convert sizeof checks.
446
447for elem, typename in sizes:
448    print("cdata.set('{}', cc.sizeof('{}'))".format(elem, typename))
449
450print('''
451configure_file(input : 'config.h.meson',
452  output : 'config.h',
453  configuration : cdata)''')
454