cmake: Match AC_DEFINE more precisely, respecting [] quoting
authorSimon McVittie <smcv@collabora.com>
Tue, 25 Jul 2017 12:37:52 +0000 (13:37 +0100)
committerSimon McVittie <smcv@collabora.com>
Wed, 7 Feb 2018 07:34:35 +0000 (07:34 +0000)
The regular expression previously used here to select the second
comma-delimited argument won't work when we introduce an argument
containing a comma, which I need to do now. We can address this by
recognising Autoconf's quoting mechanism (which uses square
brackets).

This is not 100% right (it doesn't understand nested square brackets),
but it's good enough in practice.

Signed-off-by: Simon McVittie <smcv@collabora.com>
Acked-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=101354
(cherry picked from commit 83b439f7b4c6a946e0fe9a0287910ba4f6318143)

cmake/modules/MacrosAutotools.cmake
configure.ac

index 8bb83cd..888d5e7 100644 (file)
@@ -108,7 +108,7 @@ macro(autodefine name)
     foreach(line ${_configure_ac})
         if(line MATCHES ".*AC_DEFINE(.*${name}.*).*")
             string (REGEX REPLACE ".*AC_DEFINE(.*).*" "\\1" value ${line})
-            string (REGEX REPLACE ".*,(.*),.*" "\\1" value2 ${value})
+            string (REGEX REPLACE "[^[]*\\[[^]]*\\], *\\[([^]]*)\\],.*" "\\1" value2 ${value})
             string (REPLACE "[" "" value3 ${value2})
             string (REPLACE "]" "" value4 ${value3})
             set(${name} ${value4})
index 132e163..413f658 100644 (file)
@@ -258,6 +258,9 @@ fi
 # default (unless you don't have GLib), because they don't bloat the library
 # or binaries.
 
+dnl Don't do anything too subtle here, because the CMake build system
+dnl parses these lines with regular expressions. If necessary, adjust
+dnl cmake/modules/MacrosAutotools.cmake to compensate.
 AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_40], [Ignore post-2.40 deprecations])
 AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_40], [Prevent post-2.40 APIs])