From 486be1fa4eff29f0eff542349b434fc6ff9a7358 Mon Sep 17 00:00:00 2001 From: Yann Date: Thu, 1 Sep 2016 12:02:23 +0200 Subject: [PATCH] solves #138 : implements a m4 macro to checks version Now their is 2 macros : - PC_PYTHON_CHECK_MODULE_MATCH_VERSION(LIBRARY, VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND) - PC_PYTHON_CHECK_MODULE_VERSION(LIBRARY, MIN-VERSION, MAX-VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND) --- configure.ac | 17 +---- m4/python_pyconfigure.m4 | 70 ++++++++++++++++++- ...tch => python_pyconfigure.m4.patch_bugfix} | 0 3 files changed, 71 insertions(+), 16 deletions(-) rename m4/{python_pyconfigure.m4.patch => python_pyconfigure.m4.patch_bugfix} (100%) diff --git a/configure.ac b/configure.ac index 29c71d4..1e7e240 100644 --- a/configure.ac +++ b/configure.ac @@ -37,30 +37,19 @@ PC_PYTHON_CHECK_MODULE([lxml], , AC_MSG_ERROR([Module lxml not found but mandatory for lodel2])) #Webui deps AC_SUBST([WEBUI], 'True') -PC_PYTHON_CHECK_MODULE([jinja2], , +PC_PYTHON_CHECK_MODULE_VERSION([jinja2], [2.7.3], [], , AC_MSG_WARN([Module jinja2 not found but mandatory for default web interface]) AC_SUBST([WEBUI], 'False')) -PC_PYTHON_CHECK_MODULE([werkzeug], , +PC_PYTHON_CHECK_MODULE_VERSION([werkzeug], [0.9], [], , AC_MSG_WARN([Module werkzeug not found but mandatory for default web interface]) AC_SUBST([WEBUI], 'False')) #Mongo datasource deps AC_SUBST([PYMONGO], 'True') #Can be found in lodel/buildconf.py -PC_PYTHON_CHECK_MODULE([pymongo], , - AC_MSG_WARN([Module pymongo not found. The mongodb datasource will not be able to work]) - AC_SUBST([PYMONGO], 'False')) - -# -#BEIGN -# -PC_PYTHON_CHECK_MODULE_VERSION([pymongo], [2.7.1], , +PC_PYTHON_CHECK_MODULE_VERSION([pymongo], [2.7], [2.8], , AC_MSG_WARN([Module pymongo not found. The mongodb datasource will not be able to work]) AC_SUBST([PYMONGO], 'False') ) -# -# STOPE -# - #Documentation checks AC_SUBST([DOCOK], 'OK') AC_CHECK_PROGS([DOXYGEN], [doxygen]) diff --git a/m4/python_pyconfigure.m4 b/m4/python_pyconfigure.m4 index 242c806..6b19422 100644 --- a/m4/python_pyconfigure.m4 +++ b/m4/python_pyconfigure.m4 @@ -648,11 +648,11 @@ m4_ifnblank([$1], [ AS_IF([test "$[pc_cv_python_func_]pc_python_safe_mod[_$2]" = "no"], [$5], [$4]) ])# PC_PYTHON_CHECK_FUNC -# PC_PYTHON_CHECK_MODULE_VERSION(LIBRARY, VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND) +# PC_PYTHON_CHECK_MODULE_MATCH_VERSION(LIBRARY, VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND) # ------------------------------------------------- # Macro for checking if a Python library with this version is installed # -AC_DEFUN([PC_PYTHON_CHECK_MODULE_VERSION], +AC_DEFUN([PC_PYTHON_CHECK_MODULE_MATCH_VERSION], [AC_REQUIRE([PC_PROG_PYTHON])[]dnl m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_])) AC_CACHE_CHECK([for Python '$1' library version '$2'], @@ -687,3 +687,69 @@ AS_IF([test "x$[pc_cv_python_module_version]pc_python_safe_mod" = "x$2" ], [$4] ]) ])# PC_PYTHON_CHECK_MODULE_VERSION + + +# PC_PYTHON_CHECK_MODULE_VERSION(LIBRARY, MIN-VERSION, MAX-VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND) +# ------------------------------------------------- +# Macro for checking if a Python library with this version is installed +# +AC_DEFUN([PC_PYTHON_CHECK_MODULE_VERSION], +[AC_REQUIRE([PC_PROG_PYTHON])[]dnl +m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_])) +m4_append([pc_python_safe_mod], m4_bpatsubsts($2, [\.], [_])) +m4_append([pc_python_safe_mod], m4_bpatsubsts($3, [\.], [_])) +AC_CACHE_CHECK( + [for Python '$1' library m4_ifnblank([$2],['$2' <= ]) version m4_ifnblank([$3], [<= '$3'])], + [[pc_cv_python_module_version]pc_python_safe_mod], + [AC_LANG_PUSH(Python)[]dnl + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([dnl +import sys +def cmp_vers(v1,v2): + v1 = v1.split('.') + v2 = v2.split('.') + for i in range(max([len](v1), [len](v2))): + v1v = int(v1[[i]] if i < [len](v1) else 0) + v2v = int(v2[[i]] if i < [len](v2) else 0) + if v1v > v2v: + return 1 + if v1v < v2v: + return -1 + return 0 +try: + import $1 +except: + result='not found' +else: + result='yes' + vmin = '$2' + vmax = '$3' + for vers_attr in ('__version__', 'version', 'version_info'): + if hasattr($1, vers_attr): + version = getattr($1, vers_attr) + break + else: + result = 'unknown' + if version not in ('unknonwn', 'no'): + failmsg = "but "+ version + " found" + if [len](vmin) > 0: + if cmp_vers(version, vmin) < 0: + result = failmsg + if [len](vmax) > 0: + if cmp_vers(version, vmax) > 0: + result = failmsg + +sys.stdout.write(result) +], [])], + [[pc_cv_python_module_version]pc_python_safe_mod=`./conftest`], + [AC_MSG_FAILURE([failed to run Python program])]) + AC_LANG_POP(Python)[]dnl + ]) +AS_IF( [test "$[pc_cv_python_module_version]pc_python_safe_mod" = "yes"], + [$4], + [ AS_IF( + [test "x$[pc_cv_python_module_version]pc_python_safe_mod" = 'unknown'], + AC_MSG_WARN([Unable to fetch version of Python module $1])) + [$5] + ]) +])# PC_PYTHON_CHECK_MODULE_VERSION diff --git a/m4/python_pyconfigure.m4.patch b/m4/python_pyconfigure.m4.patch_bugfix similarity index 100% rename from m4/python_pyconfigure.m4.patch rename to m4/python_pyconfigure.m4.patch_bugfix