Fix: configure.ac: silently accepting invalid Python configuration
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Thu, 27 Feb 2020 22:08:28 +0000 (17:08 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 2 Mar 2020 19:56:58 +0000 (14:56 -0500)
Currently, if the user builds and installs the project with:
  ./configure --enable-python-plugins
  make
  make install

They won't be able to do the `import bt2` necessary to start defining
their BT2 plugin. To write a Python plugin , the user needs to use the
Python bindings as well.

The user gets this:
  >>> import bt2
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  ModuleNotFoundError: No module named 'bt2'

As suggested by Simon Marchi, I implemented the following truth table
for the Python-related configure options (--enable-python-bindings and
 --enable-python-plugins):

  plugins | bindings
  --------+---------
  missing | missing  -> both disabled
  missing | enable   -> plugins disabled, bindings enabled
  missing | disable  -> both disabled
  enable  | missing  -> both enabled
  enable  | enable   -> both enabled
  enable  | disable  -> error
  disable | missing  -> both disabled
  disable | enable   -> plugins disabled, bindings enabled
  disable | disable  -> both disabled

This makes sure the user doesn't get into an invalid configuration _and_
offers the sane default of enabling the bindings (if they were omitted)
when plugins are enabled explicitly.

Fixes #1240

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I3b94d8911568290239add616f8e794ad73e278db
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3152
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
configure.ac

index 02f4b7cac461baf851e47bc088ea0f9e187a8e7f..9a12d642d9c222c3a24fadc56bd7f98b4dc66a3d 100644 (file)
@@ -361,8 +361,9 @@ AS_IF([test "x$BABELTRACE_DEBUG_MODE" = x1], [
 # Python bindings
 # Disabled by default
 AC_ARG_ENABLE([python-bindings],
-  [AC_HELP_STRING([--enable-python-bindings], [build the Python bindings])]
-  dnl AC_ARG_ENABLE will fill enable_python_bindings with the user choice
+  [AC_HELP_STRING([--enable-python-bindings], [build the Python bindings])],
+  [], dnl AC_ARG_ENABLE will fill enable_python_bindings with the user choice
+  [enable_python_bindings=unspecified]
 )
 
 # Python plugins
@@ -446,6 +447,29 @@ AS_IF([test "x$enable_debug_info" = xyes],
 
 AC_SUBST([ENABLE_DEBUG_INFO_VAL])
 
+# Check for conflicting Python related features user choices.
+AS_IF([test "x$enable_python_plugins" = xyes],
+  [
+    AS_IF([test "x$enable_python_bindings" = xunspecified],
+      [
+        # --enable-python-plugins was provided but --enable-python-bindings was
+        # omitted. Turn the Python bindings ON anyway because it's needed to
+        # use the Python plugins.
+        enable_python_bindings=yes
+      ],
+      [
+        AS_IF([test "x$enable_python_bindings" = xno],
+          [
+            # --enable-python-plugins _and_ --disable-python-bindings were
+            # used. This is invalid because Python plugins need the Python
+            # bindings to be useful.
+            AC_MSG_ERROR(--enable-python-bindings must be used to support Python plugins)
+          ]
+        )
+      ]
+    )
+  ]
+)
 
 # Check for conflicting optional features user choices
 
This page took 0.027729 seconds and 4 git commands to generate.