mhd_check_link_run.m4 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # SYNOPSIS
  2. #
  3. # MHD_CHECK_LINK_RUN(MESSAGE, CACHE_ID, COMMAND_IF_CROSS_COMPILING, INPUT,
  4. # [ACTION_IF_SUCCEED], [ACTION_IF_FAILED])
  5. #
  6. # DESCRIPTION
  7. #
  8. # Improved version of AC_RUN_IFELSE macro.
  9. # Unlike AC_RUN_IFELSE, this macro tries to link the code if cross-compiling.
  10. # Action COMMAND_IF_CROSS_COMPILING is executed only if link is succeed,
  11. # otherwise CACHE_ID variable set to "no".
  12. # COMMAND_IF_CROSS_COMPILING action must set CACHE_ID variable to "yes", "no",
  13. # "assuming yes" or "assuming no".
  14. # ACTION_IF_SUCCEED is executed if result is "yes" or "assuming yes".
  15. # ACTION_IF_FAILED is executed if result is "no" or "assuming no".
  16. #
  17. # Example usage:
  18. #
  19. # MHD_CHECK_LINK_RUN([for valid snprintf()], [mhd_cv_snprintf_valid],
  20. # [mhd_cv_snprintf_valid='assuming no'],
  21. # [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
  22. # [if (4 != snprintf(NULL, 0, "test"))
  23. # return 2;])])
  24. #
  25. #
  26. # LICENSE
  27. #
  28. # Copyright (c) 2022 Karlson2k (Evgeny Grin) <k2k@narod.ru>
  29. #
  30. # Copying and distribution of this file, with or without modification, are
  31. # permitted in any medium without royalty provided the copyright notice
  32. # and this notice are preserved. This file is offered as-is, without any
  33. # warranty.
  34. #serial 3
  35. AC_DEFUN([MHD_CHECK_LINK_RUN],[dnl
  36. m4_ifblank([$1],[m4_fatal([$0: The first macro argument ("MESSAGE") must not be empty])])dnl
  37. m4_ifblank([$2],[m4_fatal([$0: The second macro argument ("CACHE_ID") must not be empty])])dnl
  38. m4_ifblank([$3],[m4_fatal([$0: The third macro argument ("COMMAND_IF_CROSS_COMPILING") ]dnl
  39. [must not be empty])])dnl
  40. m4_ifblank([$4],[m4_fatal([$0: The fourth macro argument ("INPUT") must not be empty])])dnl
  41. m4_bmatch(_mhd_norm_expd([$2]),[\s],dnl
  42. [m4_fatal([$0: The second macro argument ("CACHE_ID") must not contain whitespaces])])dnl
  43. m4_bmatch(_mhd_norm_expd([$3]),[\<]m4_re_escape(_mhd_norm_expd([$2]))[\>],[],dnl
  44. [m4_fatal([$0: The third macro argument ("COMMAND_IF_CROSS_COMPILING") must assign ]dnl
  45. [a value to the cache variable ']_mhd_norm_expd([$2])['])])dnl
  46. m4_pushdef([cacheVar],_mhd_norm_expd([$2]))dnl
  47. AC_CACHE_CHECK([$1],[$2],
  48. [
  49. AC_LANG_CONFTEST([$4])
  50. AS_VAR_IF([cross_compiling],["yes"],
  51. [AC_LINK_IFELSE([],[
  52. $3
  53. ],[cacheVar='no'])dnl AC_LINK_IFELSE
  54. ],dnl
  55. [AC_RUN_IFELSE([],[cacheVar='yes'],[cacheVar='no'],[[# Dummy placeholder]])
  56. ])
  57. rm -f conftest.$ac_ext
  58. ])
  59. m4_ifnblank([$5],[
  60. AS_IF([test "x$cacheVar" = "xyes" || test "x$cacheVar" = "xassuming yes"],[$5])dnl AS_IF
  61. ])dnl m4_ifnblank
  62. m4_ifnblank([$6],[
  63. AS_IF([test "x$cacheVar" = "xno" || test "x$cacheVar" = "xassuming no"],[$6])dnl AS_IF
  64. ])dnl m4_ifnblank
  65. ])dnl AC_DEFUN