Blame m4/compilelinkrun.m4

Packit 0d464f
dnl
Packit 0d464f
dnl
Packit 0d464f
dnl compilelinkrun.m4 - used to check whether a required package is properly 
Packit 0d464f
dnl installed.  Compiles, links and runs a c++ test program that uses the 
Packit 0d464f
dnl package to verify that the package is properly installed
Packit 0d464f
dnl
Packit 0d464f
dnl Expected arguments:
Packit 0d464f
dnl $1: the name of the package we are testing, e.g. "OpenEXR"
Packit 0d464f
dnl     used for informational messages, warnings & errors
Packit 0d464f
dnl
Packit 0d464f
dnl $2: the argument passed to configure specifying how to disable this test
Packit 0d464f
dnl     for example:
Packit 0d464f
dnl     $3 = "openexrtest" and 
Packit 0d464f
dnl     "configure --disable-openexrtest" will skip the test
Packit 0d464f
dnl
Packit 0d464f
dnl $3: CXXFLAGS used by the test
Packit 0d464f
dnl
Packit 0d464f
dnl $4: LDFLAGS used by the test
Packit 0d464f
dnl
Packit 0d464f
dnl $5: include section of sourcecode for a c++ test program
Packit 0d464f
dnl $6: body section of sourcecode for a c++ test program
Packit 0d464f
dnl The test program should make use of a library that is supposed to 
Packit 0d464f
dnl be tested.
Packit 0d464f
dnl
Packit 0d464f
dnl $7: the action to be perfomed if the test succeeds 
Packit 0d464f
dnl     (e.g. AC_MSG_RESULT("OpenEXR test program succeeded"))
Packit 0d464f
dnl
Packit 0d464f
dnl $8   the action to be perfomed if the test fails
Packit 0d464f
dnl     (e.g. AC_MSG_ERROR("OpenEXR test program failed"))
Packit 0d464f
dnl
Packit 0d464f
Packit 0d464f
AC_DEFUN([AM_COMPILELINKRUN],
Packit 0d464f
[
Packit 0d464f
Packit 0d464f
dnl create some local m4 "variables" so that we don't have to use numbers
Packit 0d464f
define([arg_pkg_name],$1)
Packit 0d464f
define([arg_disable],$2)
Packit 0d464f
define([arg_cxxflags],$3)
Packit 0d464f
define([arg_ldflags],$4)
Packit 0d464f
define([arg_libs],$5)
Packit 0d464f
define([arg_include_source],$6)
Packit 0d464f
define([arg_body_source],$7)
Packit 0d464f
define([arg_do_yes],$8)
Packit 0d464f
define([arg_do_no],$9)
Packit 0d464f
Packit 0d464f
Packit 0d464f
dnl check arguments
Packit 0d464f
AC_ARG_ENABLE(arg_disable, [  --disable-arg_disable  Do not try to compile and run a test arg_pkg_name program],, enable_programtest=yes)
Packit 0d464f
Packit 0d464f
Packit 0d464f
dnl
Packit 0d464f
dnl if the test hasn't been disabled, then compile, link and run test program
Packit 0d464f
dnl
Packit 0d464f
  if test "x$enable_programtest" = "xyes" ; then
Packit 0d464f
Packit 0d464f
    dnl basic preliminary checks
Packit 0d464f
    AC_MSG_CHECKING(for arg_pkg_name)
Packit 0d464f
    test_runs="yes"
Packit 0d464f
Packit 0d464f
    dnl save settings and setup c++ before we start
Packit 0d464f
    ac_save_CXXFLAGS="$CXXFLAGS"
Packit 0d464f
    ac_save_LDFLAGS="$LDFLAGS"
Packit 0d464f
    ac_save_LIBS="$LIBS"
Packit 0d464f
    CXXFLAGS="$CXXFLAGS arg_cxxflags"
Packit 0d464f
    LDFLAGS="$LDFLAGS arg_ldflags"
Packit 0d464f
    LIBS="$LIBS arg_libs"
Packit 0d464f
    AC_REQUIRE_CPP()
Packit 0d464f
    AC_LANG_PUSH([C++])
Packit 0d464f
    rm -f conf.testprogram
Packit 0d464f
Packit 0d464f
    dnl
Packit 0d464f
    dnl first try a complete test - compile, link run
Packit 0d464f
    dnl
Packit 0d464f
    AC_RUN_IFELSE([AC_LANG_PROGRAM(arg_include_source,
Packit 0d464f
                  arg_body_source; [[system("touch conf.testprogram"); ]])],
Packit 0d464f
                  test_runs=yes,
Packit 0d464f
                  test_runs=no,
Packit 0d464f
                  [echo $ac_n "cross compiling; assumed OK... $ac_c"])
Packit 0d464f
Packit 0d464f
    if test "x$test_runs" = "xyes"  || test -f conf.testprogram ; then
Packit 0d464f
       AC_MSG_RESULT(yes)
Packit 0d464f
       ifelse([arg_do_yes], , :, [arg_do_yes])     
Packit 0d464f
    else
Packit 0d464f
       AC_MSG_RESULT(no)
Packit 0d464f
       echo "*** Could not run the arg_pkg_name test program, checking why..."
Packit 0d464f
Packit 0d464f
       test_compiles="yes"
Packit 0d464f
       test_links="yes"
Packit 0d464f
Packit 0d464f
       dnl
Packit 0d464f
       dnl if the program did not run, attempt to compile only
Packit 0d464f
       dnl
Packit 0d464f
Packit 0d464f
       AC_COMPILE_IFELSE([AC_LANG_PROGRAM(arg_include_source,
Packit 0d464f
                                          arg_body_source ; )],
Packit 0d464f
                      test_compiles=yes,
Packit 0d464f
                      test_compiles=no)
Packit 0d464f
Packit 0d464f
       if test "x$test_compiles" = "xno" ; then
Packit 0d464f
          echo "*** The test program could not be compiled.  Is arg_pkg_name installed?"
Packit 0d464f
          echo "*** Check that the cflags (below) includes the arg_pkg_name include directory"
Packit 0d464f
Packit 0d464f
       else
Packit 0d464f
          dnl
Packit 0d464f
          dnl if the program did compile, try linking
Packit 0d464f
          dnl
Packit 0d464f
          AC_LINK_IFELSE([AC_LANG_PROGRAM(arg_include_source,
Packit 0d464f
                                          arg_body_source ; )],
Packit 0d464f
                         test_links=yes,
Packit 0d464f
                         test_links=no)
Packit 0d464f
Packit 0d464f
          if test "x$test_links" = "xyes"; then
Packit 0d464f
              echo "*** The test program compiled and staticly linked, but did not run. This "
Packit 0d464f
              echo "*** usually means that the run-time linker is not finding arg_pkg_name or finding"
Packit 0d464f
              echo "*** the wrong version of arg_pkg_name."
Packit 0d464f
              echo "***"
Packit 0d464f
              echo "*** If the linker is not finding arg_pkg_name, you'll need to set your"
Packit 0d464f
              echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
Packit 0d464f
              echo "*** to the installed location  Also, make sure you have run ldconfig if that"
Packit 0d464f
              echo "*** is required on your system."
Packit 0d464f
          else
Packit 0d464f
              echo "*** The arg_pkg_name test program could be compiled, but could not be dynamically."
Packit 0d464f
              echo "*** or statically linked."
Packit 0d464f
              echo "***"
Packit 0d464f
              echo "*** Make sure the LDFLAGS points to the location of the arg_pkg_name library."
Packit 0d464f
              echo "*** (e.g. -L/usr/local/lib)."
Packit 0d464f
              echo "*** If the run-time linker is not finding arg_pkg_name, you'll need to set your"
Packit 0d464f
              echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
Packit 0d464f
              echo "*** to the installed location  Also, make sure you have run ldconfig if that"
Packit 0d464f
              echo "*** is required on your system."
Packit 0d464f
          fi
Packit 0d464f
       fi
Packit 0d464f
Packit 0d464f
       dnl
Packit 0d464f
       dnl The test failed for some reason. Print out more info, 
Packit 0d464f
       dnl unset flags  and signal an error.
Packit 0d464f
       dnl
Packit 0d464f
       echo "***"
Packit 0d464f
       echo "*** Flags used by the test:"
Packit 0d464f
       echo "***     cflags: $CXXFLAGS "
Packit 0d464f
       echo "***     ldflags: $LDFLAGS"
Packit 0d464f
       echo "***"
Packit 0d464f
       echo "*** You can also run configure with --disable-arg_disable to skip this test."
Packit 0d464f
Packit 0d464f
       ifelse([arg_do_no], , :, [arg_do_no])
Packit 0d464f
    fi
Packit 0d464f
Packit 0d464f
    AC_LANG_POP([C++])
Packit 0d464f
    CXXFLAGS="$ac_save_CXXFLAGS"
Packit 0d464f
    LDFLAGS="$ac_save_LDFLAGS"
Packit 0d464f
    LIBS="$ac_save_LIBS"
Packit 0d464f
        
Packit 0d464f
    dnl
Packit 0d464f
    dnl clean up
Packit 0d464f
    dnl
Packit 0d464f
    rm -f conf.testprogram
Packit 0d464f
  fi
Packit 0d464f
Packit 0d464f
Packit 0d464f
dnl clean up local "variables"
Packit 0d464f
undefine([arg_pkg_name])
Packit 0d464f
undefine([arg_disable])
Packit 0d464f
undefine([arg_cxxflags])
Packit 0d464f
undefine([arg_ldflags])
Packit 0d464f
undefine([arg_libs])
Packit 0d464f
undefine([arg_include_source])
Packit 0d464f
undefine([arg_body_source])
Packit 0d464f
undefine([arg_do_yes])
Packit 0d464f
undefine([arg_do_no])
Packit 0d464f
Packit 0d464f
])