gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] 13/21: mhd_find_lib.m4: added new autoconf macro


From: gnunet
Subject: [libmicrohttpd] 13/21: mhd_find_lib.m4: added new autoconf macro
Date: Tue, 14 Mar 2023 19:36:58 +0100

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 60fa305ab8e6f118b171d146b95356fc083a2b44
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Tue Mar 14 20:45:05 2023 +0300

    mhd_find_lib.m4: added new autoconf macro
---
 m4/mhd_find_lib.m4 | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)

diff --git a/m4/mhd_find_lib.m4 b/m4/mhd_find_lib.m4
new file mode 100644
index 00000000..8e6a5e9a
--- /dev/null
+++ b/m4/mhd_find_lib.m4
@@ -0,0 +1,142 @@
+# SYNOPSIS
+#
+#   MHD_FIND_LIB([FUNCTION_NAME],
+#                [INCLUDES=AC_INCLUDES_DEFAULT], [CHECK_CODE],
+#                [LIBS_TO_CHECK],
+#                [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+#                [VAR_TO_PREPEND_LIB=LIBS], [ADDITIONAL_LIBS])
+#
+# DESCRIPTION
+#
+#   This macro checks for presence of specific function by including
+#   specified headers and compiling and linking CHECK_CODE.
+#   This checks both the declaration and the presence in library.
+#   If declaration is not found in headers then libraries are not
+#   checked.
+#   LIBS_TO_CHECK is whitespace-separated list of libraries to check.
+#   The macro first tries to link without any library, and if it fails
+#   the libraries are checked one by one. 
+#   The required library (if any) prepended to VAR_TO_PREPEND_LIB (or
+#   to the LIBS variable if VAR_TO_APPEND_LIB is not specified).
+#   By using definition from provided headers, this macro ensures that
+#   correct calling convention is used for detection.
+#
+#   Example usage:
+#
+#     MHD_FIND_LIB([clock_gettime],
+#                  [[#include <time.h>]],
+#                  [[struct timespec tp;
+#                    if (0 > clock_gettime(CLOCK_REALTIME, &tp)) return 3;]],
+#                  [rt],
+#                  [var_use_gettime='yes'],[var_use_gettime='no'])
+#
+#   Defined cache variable used in the check so if any test will not
+#   work correctly on some platform, a user may simply fix it by giving
+#   cache variable in configure parameters, for example:
+#
+#     ./configure mhd_cv_find_clock_gettime=no
+#
+#   This simplifies building from source on exotic platforms as patching
+#   of configure.ac is not required to change results of tests.
+#
+# LICENSE
+#
+#   Copyright (c) 2023 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_FIND_LIB],[dnl
+AC_PREREQ([2.64])dnl for AS_VAR_IF, m4_ifblank, m4_ifnblank
+m4_newline([[# Expansion of $0 macro starts here]])
+AC_LANG_ASSERT([C])dnl
+m4_ifblank(m4_translit([$1],[()],[  ]), [m4_fatal([First macro argument 
FUNCTION_NAME must not be empty])])dnl
+m4_ifblank([$3], [m4_fatal([Third macro argument CHECK_CODE must not be 
empty])])dnl
+m4_bmatch(m4_normalize([$1]), [\s],dnl
+          [m4_fatal([First macro argument FUNCTION_NAME must not contain 
whitespaces])])dnl
+m4_if(m4_index([$3], m4_normalize(m4_translit([$1],[()],[  ]))), [-1], dnl
+      [m4_fatal([CHECK_CODE parameter (third macro argument) does not contain 
']m4_normalize([$1])[' token])])dnl
+m4_bmatch([$7], [\$], [m4_fatal([$0: Seventh macro argument VAR_TO_PREPEND_LIB 
must not contain '$'])])dnl
+_MHD_FIND_LIB_BODY([$1],[$2],[$3],[$4],[$5],[$6],m4_default_nblank(_mhd_norm_expd([$7]),[LIBS]),[$8])dnl
+])dnl AC_DEFUN MHD_FIND_LIB
+
+# SYNOPSIS
+#
+#   _MHD_FIND_LIB_BODY([1_FUNCTION_NAME],
+#                      [2_INCLUDES=AC_INCLUDES_DEFAULT], [3_CHECK_CODE],
+#                      [4_LIBS_TO_CHECK],
+#                      [5_ACTION-IF-FOUND], [6_ACTION-IF-NOT-FOUND],
+#                      [7_VAR_TO_PREPEND_LIB=LIBS], [8_ADDITIONAL_LIBS])
+
+AC_DEFUN([_MHD_FIND_LIB_BODY],[dnl
+AS_VAR_PUSHDEF([decl_cv_Var],[ac_cv_have_decl_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[
  ])),[[^a-zA-Z0-9]],[_]))dnl
+AS_VAR_PUSHDEF([cv_Var], 
[mhd_cv_find_lib_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[  
])),[[^a-zA-Z0-9]],[_]))dnl
+AS_VAR_SET_IF([cv_Var],[],[AC_CHECK_DECL(_mhd_norm_expd([$1]),[],[],[$2])])
+AC_CACHE_CHECK([for library containing function $1], [cv_Var],
+  [
+    AS_VAR_IF([decl_cv_Var],["yes"],dnl
+      [dnl
+        mhd_find_lib_SAVE_LIBS="$LIBS"
+        m4_if([$7],LIBS,[dnl
+            mhd_find_lib_CHECK_LIBS="_mhd_norm_expd([$8]) $LIBS"
+          ],[dnl
+            mhd_find_lib_CHECK_LIBS="[$]$7 _mhd_norm_expd([$8]) $LIBS"
+          ]
+        )
+        # Reuse the same source file
+        AC_LANG_CONFTEST(
+          [AC_LANG_SOURCE([
+m4_default_nblank([$2],[AC_INCLUDES_DEFAULT])
+
+[int main(void)
+{
+
+  ]$3[
+
+  return 0;
+}
+             ]])
+          ]
+        )
+        for mhd_find_lib_LIB in '' $4
+        do
+          AS_IF([test -z "${mhd_find_lib_LIB}"],
+            [LIBS="${mhd_find_lib_CHECK_LIBS}"],
+            [LIBS="-l${mhd_find_lib_LIB} ${mhd_find_lib_CHECK_LIBS}"]
+          )
+          AC_LINK_IFELSE([],
+            [
+              AS_IF([test -z "${mhd_find_lib_LIB}"],
+                [AS_VAR_SET([cv_Var],["none required"])],
+                [AS_VAR_SET([cv_Var],["-l${mhd_find_lib_LIB}"])]
+              )
+            ]
+          )
+          AS_VAR_SET_IF([cv_Var],[break])
+        done
+        AS_UNSET([mhd_find_lib_LIB])
+        rm -f conftest.$ac_ext
+        LIBS="${mhd_find_lib_SAVE_LIBS}"
+        AS_UNSET([mhd_find_lib_SAVE_LIBS])
+      ]
+    )
+    AS_VAR_SET_IF([cv_Var],[:],[AS_VAR_SET([cv_Var],["no"])])
+  ]
+)
+AS_IF([test "x${cv_Var}" != "xno"],
+[dnl
+  AS_VAR_IF([cv_Var],["none required"],[:],
+    [
+      AS_IF([test -z "[$]$7"],[$7="${cv_Var}"],[$7="${cv_Var} [$]$7"])
+    ]
+  )
+  m4_n([$5])dnl
+],[m4_n([$6])])dnl AS_VAR_SET_IF cv_Var
+AS_VAR_POPDEF([cv_Var])dnl
+AS_VAR_POPDEF([decl_cv_Var])dnl
+m4_newline([[# Expansion of $0 macro ends here]])
+])dnl AC_DEFUN MHD_CHECK_FUNC

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]