AC_CHECK_PROG(RUBY_EXECUTABLE, ruby, ruby)

if test -z "RUBY_EXECUTABLE"; then
  DO_NOT_COMPILE="$DO_NOT_COMPILE qtruby"
  BUILD_qtruby=false
else
  RUBY_MAJOR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(MAJOR))"`
  RUBY_MINOR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(MINOR))"`

  RUBY_ARCHDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(archdir))"`
  RUBY_SITEARCHDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(sitearchdir))"`
  RUBY_SITEDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(sitelibdir))"`
  RUBY_LIBDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(libdir))"`
  RUBY_RUBYLIBDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(rubylibdir))"`
  RUBY_LIBRUBYARG=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(LIBRUBYARG_SHARED))"`

  RUBY_SERIES="$RUBY_MAJOR$RUBY_MINOR"
  if test "$RUBY_SERIES" -ge "19"; then
     AC_DEFINE_UNQUOTED(HAVE_RUBY_1_9, 1, [Defines if your system has Ruby 1.9.x])
  fi

  if test `${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.key?(%q(rubyhdrdir))"` = "true"; then
     RUBY_INCLUDEDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(rubyhdrdir))"`
     if test `${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.key?(%q(rubyarchhdrdir))"` = "true"; then
        RUBY_ARCHINCLUDEDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(rubyarchhdrdir))"`
     else
        RUBY_ARCH=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(arch))"`
        RUBY_ARCHINCLUDEDIR=${RUBY_INCLUDEDIR}/${RUBY_ARCH}
     fi
     RUBY_CFLAGS="-I${RUBY_INCLUDEDIR} -I${RUBY_ARCHINCLUDEDIR}"
  else
     RUBY_INCLUDEDIR=`${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG.fetch(%q(archdir))"`
     RUBY_CFLAGS="-I${RUBY_INCLUDEDIR}"
  fi

  # check if Ruby requires explicit specification of C++ standard
  AC_LANG_SAVE
  AC_LANG_CPLUSPLUS
  SAVED_CXXFLAGS="$CXXFLAGS"
  for CXX_STD_TEST in "" 11 14 17; do
    CXXFLAGS="$SAVED_CXXFLAGS"
    if test "x$CXX_STD_TEST" = "x"; then
      AC_MSG_CHECKING([Ruby build with default C++ standard])
      RUBY_CXXFLAGS=""
    else
      AC_MSG_CHECKING([Ruby build with C++$CXX_STD_TEST])
      RUBY_CXXFLAGS="-std=c++$CXX_STD_TEST"
    fi
    CXXFLAGS="$SAVED_CXXFLAGS $RUBY_CFLAGS $RUBY_CXXFLAGS"
    AC_TRY_COMPILE([
        #include <ruby.h>
      ],[ ],
      ruby_cxx_std=yes,
      ruby_cxx_std=no
    )
    if test "x$ruby_cxx_std" = "xyes"; then
      AC_SUBST(RUBY_CXXFLAGS)
      AC_MSG_RESULT(yes)
      break
    else
      AC_MSG_RESULT(no)
    fi
  done
  CXXFLAGS="$SAVED_CXXFLAGS"
  AC_LANG_RESTORE

  # Removes trailing slashes, if any, to avoid fail to install with recent libtool.
  RUBY_ARCHDIR=${RUBY_ARCHDIR%/}
  RUBY_SITEDIR=${RUBY_SITEDIR%/}
  RUBY_LIBDIR=${RUBY_LIBDIR%/}
  RUBY_RUBYLIBDIR=${RUBY_RUBYLIBDIR%/}

  AC_MSG_RESULT([\
                  archdir $RUBY_ARCHDIR,
                  sitearchdir $RUBY_SITEARCHDIR,
                  sitedir $RUBY_SITEDIR,
                  rubylibdir $RUBY_RUBYLIBDIR,
                  libdir $RUBY_LIBDIR,
                  includedir $RUBY_INCLUDEDIR,
                  librubyarg $RUBY_LIBRUBYARG,
                  cflags $RUBY_CFLAGS,
                  cxxflags $RUBY_CXXFLAGS])
  AC_SUBST(RUBY_ARCHDIR)
  AC_SUBST(RUBY_SITEARCHDIR)
  AC_SUBST(RUBY_SITEDIR)
  AC_SUBST(RUBY_RUBYLIBDIR)
  AC_SUBST(RUBY_LIBDIR)
  AC_SUBST(RUBY_INCLUDEDIR)
  AC_SUBST(RUBY_LIBRUBYARG)
  AC_SUBST(RUBY_CFLAGS)
  BUILD_qtruby=true
fi
AM_CONDITIONAL(BUILD_qtruby, $BUILD_qtruby)
