Конечно. Основная идея состоит в том, чтобы превратить его в выражения, которые скрипт оболочки может оценить / что-то, что вы можете запустить из `configure. Ниже приведены три разных подхода.
Первый - это несколько базовых c тестов для g++
, которые мы имели в пакете RQuantLib configure.a c в течение многих лет (да, это много лет, которые мы проверяли на g++-3.*
...). Основным содержанием здесь является сравнение подстановочных знаков .
AC_PROG_CXX
if test "${GXX}" = yes; then
gxx_version=`${CXX} -v 2>&1 | grep "^.*g.. version" | \\
sed -e 's/^.*g.. version *//'`
case ${gxx_version} in
1.*|2.*)
AC_MSG_WARN([Only g++ version 3.0 or greater can be used with RQuantib.])
AC_MSG_ERROR([Please use a different compiler.])
;;
4.6.*|4.7.*|4.8.*|4.9.*|5.*|6.*|7.*|8.*|9.*|10.*)
gxx_newer_than_45="-fpermissive"
;;
esac
fi
Вот еще одна версия из RProtoBuf , где мы собираем что-то, чтобы версия всплывала как истинная / ложное выражение:
## also check for minimum version
AC_MSG_CHECKING([if ProtoBuf version >= 2.2.0])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <google/protobuf/stubs/common.h>
int main() {
if (GOOGLE_PROTOBUF_VERSION >= 2001000) {
exit (0);
} else {
exit(1);
}
}
]])],
[pb_version_ok=yes],
[pb_version_ok=no],
[pb_version_ok=yes])
if test x"${pb_version_ok}" == x"no"; then
AC_MSG_ERROR([Need ProtoBuf version >= 2.2.0])
else
AC_MSG_RESULT([yes])
fi
И я думаю, что я сделал что-то совсем недавно, где я сделал его package_version
объектом в R, чтобы можно было сравнивать --- вот это из RcppRedis - это снова возвращается к настройке как true / false.
## look for (optional !!) MsgPack headers
## RcppMsgPack on CRAN fits the bill -- but is a soft dependency
AC_MSG_CHECKING([for RcppMsgPack])
## Check if R has RcppMsgPack
$("${R_HOME}/bin/Rscript" --vanilla -e 'hasPkg <- "RcppMsgPack" %in% rownames(installed.packages()); q(save="no", status=if (hasPkg) packageVersion("RcppMsgPack") >= "0.2.0" else FALSE)')
if test x"$?" == x"1"; then
AC_MSG_RESULT([yes])
msgpackincdir=$("${R_HOME}/bin/Rscript" --vanilla -e 'cat(system.file("include", package="RcppMsgPack"))')
msgpack_cxxflags="-I${msgpackincdir} -DHAVE_MSGPACK"
AC_MSG_NOTICE([Found RcppMsgPack, using '${msgpack_cxxflags}'])
else
AC_MSG_RESULT([no])
AC_MSG_NOTICE([Install (optional) RcppMsgPack (>= 0.2.0) from CRAN via 'install.packages("RcppMsgPack")'])
fi
Надеюсь, это даст вам некоторые идеи.