bin/gbuild-to-ide |   21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

New commits:
commit f8be1b73847514bb8e2054dc6d8a62e00682ab78
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Mon Oct 16 14:39:42 2023 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Mon Oct 16 18:29:23 2023 +0200

    qtcreator: Specify C++ std version using CONFIG qmake var
    
    Extract the C++ standard version to use that is specified
    by a `-std=<version>` or `-std:<version>` compiler flag,
    and set that via "CONFIG += <version>" in the .pro files
    used by Qt Creator.
    
    This makes the Clang Code Model use the correct mode
    and no longer complain about `char8_t` after the
    switch to C++20 in my Windows development setup
    in Qt Creator:
    
    > accessibletabbarpagelist.hxx:22:10: In included file: use of undeclared 
identifier 'char8_t'
    > stringutils.hxx:252:31: error occurred here
    
    The previous way of specifying this via
    `QMAKE_CXXFLAGS` as introduced in
    
        commit 92c03d9bf644b0f10de52ce0da09f97056e46247
        Author: Michael Weghorn <m.wegh...@posteo.de>
        Date:   Fri Jun 7 21:44:03 2019 +0200
    
            qtcreator: Take over '-std=...' from CXXFLAGS
    
    appears to not (no longer?) work at least with Qt Creator 11.0.3
    on Windows.
    
    On the contrary however, setting only `CONFIG` and
    not `QMAKE_CXXFLAGS` causes the exact same problem
    in my Linux setup.
    
    Therefore, set both qmake variables.
    
    Note that there is a specific set of accepted values
    for the the `CONFIG` variable in .pro files [1],
    but at least "c++20" and "c++latest" are accepted
    and have the expected meaning, so that should be
    fine for now.
    
    [1] https://doc.qt.io/qt-6/qmake-variable-reference.html#config
    
    Change-Id: Idc75b74300c7bdd0f6193fcfc1758b536728b887
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158053
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide
index b56cff8585ea..f428f451e990 100755
--- a/bin/gbuild-to-ide
+++ b/bin/gbuild-to-ide
@@ -1718,11 +1718,11 @@ class 
QtCreatorIntegrationGenerator(IdeIntegrationGenerator):
                 if path:
                     headers_list.append(lopath(path))
 
-            cxxflags_list = []
+            cxxstdversionflag = ''
             for cxxflag in lib.cxxflags:
                 # extract flag for C++ standard version
                 if cxxflag.startswith('-std'):
-                    cxxflags_list.append(cxxflag)
+                    cxxstdversionflag = cxxflag
 
             # List all include paths
             for hdir in (lib.include + lib.include_sys):
@@ -1749,14 +1749,14 @@ class 
QtCreatorIntegrationGenerator(IdeIntegrationGenerator):
             if lib_folder in self.data_libs:
                 self.data_libs[lib_folder]['sources'] |= set(sources_list)
                 self.data_libs[lib_folder]['headers'] |= set(headers_list)
-                self.data_libs[lib_folder]['cxxflags'] |= set(cxxflags_list)
+                self.data_libs[lib_folder]['cxxstdversionflag'] = 
cxxstdversionflag
                 self.data_libs[lib_folder]['includepath'] |= 
set(includepath_list)
                 self.data_libs[lib_folder]['defines'] |= set(defines_list)
             else:
                 self.data_libs[lib_folder] = {
                     'sources': set(sources_list),
                     'headers': set(headers_list),
-                    'cxxflags': set(cxxflags_list),
+                    'cxxstdversionflag': cxxstdversionflag,
                     'includepath': set(includepath_list),
                     'defines': set(defines_list),
                     'loc': lib.location,
@@ -1779,7 +1779,7 @@ class 
QtCreatorIntegrationGenerator(IdeIntegrationGenerator):
         for lib_folder in subdirs_list:
             sources_list = sorted(self.data_libs[lib_folder]['sources'])
             headers_list = sorted(self.data_libs[lib_folder]['headers'])
-            cxxflags_list = sorted(self.data_libs[lib_folder]['cxxflags'])
+            cxxstdversionflag = self.data_libs[lib_folder]['cxxstdversionflag']
             includepath_list = 
sorted(self.data_libs[lib_folder]['includepath'])
             defines_list = sorted(self.data_libs[lib_folder]['defines'])
             lib_loc = self.data_libs[lib_folder]['loc']
@@ -1787,16 +1787,18 @@ class 
QtCreatorIntegrationGenerator(IdeIntegrationGenerator):
 
             sources = " \\\n".join(sources_list)
             headers = " \\\n".join(headers_list)
-            cxxflags = " \\\n".join(cxxflags_list)
             includepath = " \\\n".join(includepath_list)
             defines = " \\\n".join(defines_list)
+            # strip '-std=' or '-std:' prefix
+            assert(isinstance(cxxstdversionflag, str) and 
cxxstdversionflag.startswith('-std'))
+            cxxstdversion = cxxstdversionflag[5:]
 
             # create .pro file
             subdirs_meta_pro.append(lib_name)
             qt_pro_file = os.path.join(self.base_folder, lib_name, lib_name + 
'.pro')
             try:
-                content = QtCreatorIntegrationGenerator.pro_template % 
{'sources': sources, 'headers': headers,
-                                                                        
'cxxflags': cxxflags, 'includepath': includepath, 'defines': defines}
+                content = QtCreatorIntegrationGenerator.pro_template % 
{'sources': sources, 'headers': headers, 'cxxstdversionflag': cxxstdversionflag,
+                                                                        
'cxxstdversion': cxxstdversion, 'includepath': includepath, 'defines': defines}
                 with open(qt_pro_file, mode) as fpro:
                     fpro.write(content)
                 self._log("created %s\n" % qt_pro_file)
@@ -1857,8 +1859,9 @@ class 
QtCreatorIntegrationGenerator(IdeIntegrationGenerator):
 CONFIG += console
 CONFIG -= app_bundle
 CONFIG -= qt
+CONFIG += %(cxxstdversion)s
 
-QMAKE_CXXFLAGS += %(cxxflags)s
+QMAKE_CXXFLAGS += %(cxxstdversionflag)s
 
 INCLUDEPATH += %(includepath)s
 

Reply via email to