File: libbsd-compiler.m4

package info (click to toggle)
libbsd 0.12.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,164 kB
  • sloc: ansic: 11,116; sh: 4,734; makefile: 851; cpp: 581
file content (104 lines) | stat: -rw-r--r-- 3,267 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# Copyright © 2021 Guillem Jover <guillem@hadrons.org>

# LIBBSD_CHECK_COMPILER_FLAG
# --------------------------
AC_DEFUN([LIBBSD_CHECK_COMPILER_FLAG], [
  AS_VAR_PUSHDEF([libbsd_varname_cache], [libbsd_cv_cflags_$1])
  AC_CACHE_CHECK([whether $CC accepts $1], [libbsd_varname_cache], [
    m4_define([libbsd_check_flag], m4_bpatsubst([$1], [^-Wno-], [-W]))
    AS_VAR_COPY([libbsd_save_CFLAGS], [CFLAGS])
    AS_VAR_SET([CFLAGS], ["-Werror libbsd_check_flag"])
    AC_COMPILE_IFELSE([
      AC_LANG_SOURCE([[]])
    ], [
      AS_VAR_SET([libbsd_varname_cache], [yes])
    ], [
      AS_VAR_SET([libbsd_varname_cache], [no])
    ])
    AS_VAR_COPY([CFLAGS], [libbsd_save_CFLAGS])
  ])
  AS_VAR_IF([libbsd_varname_cache], [yes], [
    AS_VAR_APPEND([LIBBSD_COMPILER_FLAGS], [" $1"])
  ])
  AS_VAR_POPDEF([libbsd_varname_cache])
])

# LIBBSD_HAS_GNU_INIT_ARRAY
# -------------------------
AC_DEFUN([LIBBSD_HAS_GNU_INIT_ARRAY], [
  AC_CACHE_CHECK([for GNU .init_array section support],
    [libbsd_cv_gnu_init_array_support], [
    AC_RUN_IFELSE([
      AC_LANG_SOURCE([[
static int rc = 1;
static void init(int argc) { if (argc == 1) rc = 0; }
void (*init_func)(int argc) __attribute__((__section__(".init_array"), __used__)) = init;
int main() { return rc; }
      ]])
    ], [
      libbsd_cv_gnu_init_array_support=yes
    ], [
      libbsd_cv_gnu_init_array_support=no
    ], [
      AC_PREPROC_IFELSE([
        AC_LANG_SOURCE([[
/* Look for a known libc that supports .init_array with the GNU extension
 * to pass main() arguments to the init functions. */
#include <stdlib.h>
#if defined __GLIBC_PREREQ
#  if __GLIBC_PREREQ(2, 4)
/* glibc supports GNU .init_array since 2.4. */
#  else
#    error glibc does not support GNU .init_array
#  endif
#else
/*
 * Basic SysV ABI .init_array support, init functions do not get arguments:
 * - Bionic since its inception.
 * - uClibc since 0.9.29.
 */
#  error unknown whether libc supports GNU .init_array
#endif
        ]])
      ], [
        libbsd_cv_gnu_init_array_support=yes
      ], [
        libbsd_cv_gnu_init_array_support=no
      ])
    ])
  ])
  AM_CONDITIONAL([BUILD_LIBBSD_CTOR],
    [test "$libbsd_cv_gnu_init_array_support" = yes])
])

# LIBBSD_SELECT_API(name, desc)
# -----------------
AC_DEFUN([LIBBSD_SELECT_API], [
  AS_IF([test -z "$AS_TR_SH([api_$1])"], [
    AC_MSG_ERROR([missing API selection for $1])
  ], [test "$AS_TR_SH([api_$1])" = "unknown"], [
    AC_MSG_ERROR([unknown ABI selection for $1])
  ], [test "$AS_TR_SH([api_$1])" = "yes"], [
    AC_DEFINE(AS_TR_CPP([LIBBSD_API_$1]), [1], [Provide API for $2])
  ], [
    AC_DEFINE(AS_TR_CPP([LIBBSD_API_$1]), [0])
  ])
  AM_CONDITIONAL(AS_TR_CPP([API_$1]),
    [test "x$AS_TR_SH([api_$1])" = "xyes"])
])

# LIBBSD_SELECT_ABI(name, desc)
# -----------------
AC_DEFUN([LIBBSD_SELECT_ABI], [
  AS_IF([test -z "$AS_TR_SH([abi_$1])"], [
    AC_MSG_ERROR([missing ABI selection for $1])
  ], [test "$AS_TR_SH([abi_$1])" = "unknown"], [
    AC_MSG_ERROR([unknown ABI selection for $1])
  ], [test "$AS_TR_SH([abi_$1])" = "yes"], [
    AC_DEFINE(AS_TR_CPP([LIBBSD_ABI_$1]), [1], [Provide ABI for $2])
  ], [
    AC_DEFINE(AS_TR_CPP([LIBBSD_ABI_$1]), [0])
  ])
  AM_CONDITIONAL(AS_TR_CPP([ABI_$1]),
    [test "x$AS_TR_SH([abi_$1])" = "xyes"])
])