aboutsummaryrefslogtreecommitdiff
path: root/m4/mhd_check_add_cc_cflag.m4
blob: 0d110e8c8fc7a3ca52189b317beffbdf309b8c5e (plain) (blame)
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
# SYNOPSIS
#
#   MHD_CHECK_ADD_CC_CFLAG([FLAG-TO-TEST], [VARIABLE-TO-EXTEND],
#                          [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED])
#
# DESCRIPTION
#
#   This macro checks whether the specific compiler flag is supported.
#   The check is performing by appending FLAG-TO-TEST to the value of
#   VARIABLE-TO-EXTEND (CFLAGS if not specified), then prepending result to
#   CFLAGS (unless VARIABLE-TO-EXTEND is CFLAGS), and then performing compile
#   and link test. If test succeed without warnings, then the flag is added to
#   VARIABLE-TO-EXTEND. Otherwise, if compile and link without test flag cannot
#   be done without any warning, the flag is considered to be unsuppoted.
#
#   Example usage:
#
#     MHD_CHECK_ADD_CC_CFLAG([-Wshadow], [additional_CFLAGS])
#
#
# LICENSE
#
#   Copyright (c) 2022 Karlson2k (Evgeny Grin) <k2k@narod.ru>
#
#   Copying and distribution of this file, with or without modification, are
#   permitted in any medium without royalty provided the copyright notice
#   and this notice are preserved. This file is offered as-is, without any
#   warranty.

#serial 1

AC_DEFUN([MHD_CHECK_ADD_CC_CFLAG],[dnl
_MHD_CHECK_ADD_CC_XFLAG([$1],[$2],[$3],[$4],[[CFLAGS]])dnl
])


# SYNOPSIS
#
#   _MHD_CHECK_ADD_CC_XFLAG([FLAG-TO-TEST], [VARIABLE-TO-EXTEND],
#                           [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED],
#                           [CFLAGS|LDFLAGS])
#
AC_DEFUN([_MHD_CHECK_ADD_CC_XFLAG],[dnl
  AC_PREREQ([2.64])dnl for AS_VAR_IF, m4_ifnblank, m4_default
  AC_LANG_ASSERT([C])dnl
  m4_ifblank([$1], [m4_fatal([First macro argument must not be empty])])dnl
  m4_bmatch(_mhd_norm_expd([$1]), [\s],dnl
            [m4_fatal([First macro argument must not contain whitespaces])])dnl
  m4_bmatch(_mhd_norm_expd([$2]), [\s],dnl
            [m4_fatal([Second macro argument must not contain whitespaces])])dnl
  m4_bmatch([$1], [\$], [m4_fatal([$0: First macro argument must not contain '$'])])dnl
  m4_bmatch([$2], [\$], [m4_fatal([$0: Second macro argument must not contain '$'])])dnl
  m4_bmatch(_mhd_norm_expd([$5]), [^\(CFLAGS\|LDFLAGS\)$],[],dnl
   [m4_fatal([$0: Fifth macro argument must be either 'CFLAGS' or 'LDFLAGS; ']_mhd_norm_expd([$5])[' is not supported])])dnl
  m4_ifnblank([$2],
    [_MHD_CHECK_CC_XFLAG([$1], [$2],
      [MHD_APPEND_FLAG_TO_VAR(_mhd_norm_expd([$2]),_mhd_norm_expd([$1]))
       $3],[$4],[$5])],
    [_MHD_CHECK_CC_XFLAG([$1],_mhd_norm_expd([$5]),
      [MHD_APPEND_FLAG_TO_VAR(_mhd_norm_expd([$5]),_mhd_norm_expd([$1]))
       $3],[$4],[$5])]
  )
])