Browse Source

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)
Yann Weber 7 years ago
parent
commit
486be1fa4e
3 changed files with 71 additions and 16 deletions
  1. 3
    14
      configure.ac
  2. 68
    2
      m4/python_pyconfigure.m4
  3. 0
    0
      m4/python_pyconfigure.m4.patch_bugfix

+ 3
- 14
configure.ac View File

@@ -37,30 +37,19 @@ PC_PYTHON_CHECK_MODULE([lxml], ,
37 37
 	AC_MSG_ERROR([Module lxml not found but mandatory for lodel2]))
38 38
 #Webui deps
39 39
 AC_SUBST([WEBUI], 'True')
40
-PC_PYTHON_CHECK_MODULE([jinja2], ,
40
+PC_PYTHON_CHECK_MODULE_VERSION([jinja2], [2.7.3], [], ,
41 41
 	AC_MSG_WARN([Module jinja2 not found but mandatory for default web interface])
42 42
 	AC_SUBST([WEBUI], 'False'))
43
-PC_PYTHON_CHECK_MODULE([werkzeug], ,
43
+PC_PYTHON_CHECK_MODULE_VERSION([werkzeug], [0.9], [], , 
44 44
 	AC_MSG_WARN([Module werkzeug not found but mandatory for default web interface])
45 45
 	AC_SUBST([WEBUI], 'False'))
46 46
 #Mongo datasource deps
47 47
 AC_SUBST([PYMONGO], 'True') #Can be found in lodel/buildconf.py
48
-PC_PYTHON_CHECK_MODULE([pymongo], ,
49
-	AC_MSG_WARN([Module pymongo not found. The mongodb datasource will not be able to work])
50
-	AC_SUBST([PYMONGO], 'False'))
51
-
52
-#
53
-#BEIGN
54
-#
55
-PC_PYTHON_CHECK_MODULE_VERSION([pymongo], [2.7.1], ,
48
+PC_PYTHON_CHECK_MODULE_VERSION([pymongo], [2.7], [2.8], ,
56 49
 	AC_MSG_WARN([Module pymongo not found. The mongodb datasource will not be able to work])
57 50
 	AC_SUBST([PYMONGO], 'False')
58 51
 )
59 52
 
60
-#
61
-# STOPE
62
-#
63
-
64 53
 #Documentation checks
65 54
 AC_SUBST([DOCOK], 'OK')
66 55
 AC_CHECK_PROGS([DOXYGEN], [doxygen])

+ 68
- 2
m4/python_pyconfigure.m4 View File

@@ -648,11 +648,11 @@ m4_ifnblank([$1], [
648 648
 AS_IF([test "$[pc_cv_python_func_]pc_python_safe_mod[_$2]" = "no"], [$5], [$4])
649 649
 ])# PC_PYTHON_CHECK_FUNC
650 650
 
651
-# PC_PYTHON_CHECK_MODULE_VERSION(LIBRARY, VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND)
651
+# PC_PYTHON_CHECK_MODULE_MATCH_VERSION(LIBRARY, VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND)
652 652
 # -------------------------------------------------
653 653
 # Macro for checking if a Python library with this version is installed
654 654
 #
655
-AC_DEFUN([PC_PYTHON_CHECK_MODULE_VERSION],
655
+AC_DEFUN([PC_PYTHON_CHECK_MODULE_MATCH_VERSION],
656 656
 [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
657 657
 m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
658 658
 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" ],
687 687
 		[$4]
688 688
 	])
689 689
 ])# PC_PYTHON_CHECK_MODULE_VERSION
690
+
691
+
692
+# PC_PYTHON_CHECK_MODULE_VERSION(LIBRARY, MIN-VERSION, MAX-VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND)
693
+# -------------------------------------------------
694
+# Macro for checking if a Python library with this version is installed
695
+#
696
+AC_DEFUN([PC_PYTHON_CHECK_MODULE_VERSION],
697
+[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
698
+m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
699
+m4_append([pc_python_safe_mod], m4_bpatsubsts($2, [\.], [_]))
700
+m4_append([pc_python_safe_mod], m4_bpatsubsts($3, [\.], [_]))
701
+AC_CACHE_CHECK(
702
+    [for Python '$1' library m4_ifnblank([$2],['$2' <= ]) version m4_ifnblank([$3], [<= '$3'])],
703
+    [[pc_cv_python_module_version]pc_python_safe_mod],
704
+    [AC_LANG_PUSH(Python)[]dnl
705
+     AC_LINK_IFELSE(
706
+	[AC_LANG_PROGRAM([dnl
707
+import sys
708
+def cmp_vers(v1,v2):
709
+    v1 = v1.split('.')
710
+    v2 = v2.split('.')
711
+    for i in range(max([len](v1), [len](v2))):
712
+        v1v = int(v1[[i]] if i < [len](v1) else 0)
713
+        v2v = int(v2[[i]] if i < [len](v2) else 0)
714
+        if v1v > v2v:
715
+            return 1
716
+        if v1v < v2v:
717
+            return -1
718
+    return 0
719
+try:
720
+    import $1
721
+except:
722
+    result='not found'
723
+else:
724
+    result='yes'
725
+    vmin = '$2'
726
+    vmax = '$3'
727
+    for vers_attr in ('__version__', 'version', 'version_info'):
728
+        if hasattr($1, vers_attr):
729
+            version = getattr($1, vers_attr)
730
+            break
731
+    else:
732
+        result = 'unknown'
733
+    if version not in ('unknonwn', 'no'):
734
+        failmsg = "but "+ version + " found"
735
+        if [len](vmin) > 0:
736
+            if cmp_vers(version, vmin) < 0:
737
+                result = failmsg
738
+        if [len](vmax) > 0:
739
+            if cmp_vers(version, vmax) > 0:
740
+                result = failmsg
741
+
742
+sys.stdout.write(result)
743
+], [])], 
744
+	[[pc_cv_python_module_version]pc_python_safe_mod=`./conftest`],
745
+	[AC_MSG_FAILURE([failed to run Python program])])
746
+	AC_LANG_POP(Python)[]dnl
747
+	])
748
+AS_IF(	[test "$[pc_cv_python_module_version]pc_python_safe_mod" = "yes"],
749
+	[$4],
750
+	[	AS_IF(
751
+			[test "x$[pc_cv_python_module_version]pc_python_safe_mod" = 'unknown'],
752
+			AC_MSG_WARN([Unable to fetch version of Python module $1]))
753
+		[$5]
754
+	])
755
+])# PC_PYTHON_CHECK_MODULE_VERSION

m4/python_pyconfigure.m4.patch → m4/python_pyconfigure.m4.patch_bugfix View File


Loading…
Cancel
Save