[Libreoffice-commits] core.git: bin/gbuild-to-ide

Peter Foley pefoley2 at pefoley.com
Wed Oct 8 08:17:55 PDT 2014


 bin/gbuild-to-ide |   35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

New commits:
commit 79141e2ce2cac45634d48d13cf07f5d3fad171a6
Author: Peter Foley <pefoley2 at pefoley.com>
Date:   Fri Oct 3 13:50:27 2014 -0400

    gbuild-to-ide improvments
    
    Use gperf instead of ls to find binpath, so that vs2012/3 can be tested
    on non-Windows systems.
    Output the vcxproj and vcxproj.filters files with indentation and
    formatting.
    Make some minor changes to improve pep8 compliance.
    
    Change-Id: Ie8ac11ecf75ad170f0756f803c45356685792e5c
    Reviewed-on: https://gerrit.libreoffice.org/11797
    Tested-by: David Ostrovsky <david at ostrovsky.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide
index dae2313..34ae1fb 100755
--- a/bin/gbuild-to-ide
+++ b/bin/gbuild-to-ide
@@ -17,6 +17,7 @@ import sys
 import uuid
 import json
 import xml.etree.ElementTree as ET
+import xml.dom.minidom as minidom
 
 
 class GbuildParserState:
@@ -86,7 +87,7 @@ class GbuildParser:
     srcdirpattern = re.compile('^SRCDIR = (.*)')
     builddirpattern = re.compile('^BUILDDIR = (.*)')
     instdirpattern = re.compile('^INSTDIR = (.*)')
-    binpathpattern = re.compile('^LS = (.*)ls(.exe)?')
+    binpathpattern = re.compile('^GPERF = (.*)gperf(.exe)?')
     libnamespattern = re.compile('^gb_Library_ILIBFILENAMES := (.*)')
     exenamepattern = re.compile('^gb_Executable_FILENAMES_FOR_BUILD := (.*)')
     rulepattern = re.compile('^(.+?):( .*)?$')
@@ -214,6 +215,7 @@ class GbuildParser:
                 state = GbuildParserState()
         return self
 
+
 class IdeIntegrationGenerator:
 
     def __init__(self, gbuildparser, ide):
@@ -417,7 +419,6 @@ VersionControl=kdevgit
 
     def write_includepaths(self, path):
         includedirfile = open(os.path.join(path, '.kdev_include_paths'), 'w')
-        fullpath = '%s/%s' % (self.gbuildparser.srcdir, path)
         include = set()
         for target in self.target_by_path[path]:
             include |= set(target.include)
@@ -658,12 +659,12 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
         for target in set(self.gbuildparser.libs) | set(self.gbuildparser.exes):
             if target.is_empty():
                 continue
-            if not target.location in self.target_by_location:
+            if target.location not in self.target_by_location:
                 self.target_by_location[target.location] = set()
             self.target_by_location[target.location] |= set([target])
 
     def retrieve_toolset(self, ide):
-        ide_toolset_map = {'vs2012':'v110', 'vs2013':'v120'}
+        ide_toolset_map = {'vs2012': 'v110', 'vs2013': 'v120'}
         return ide_toolset_map[ide]
 
     def module_make_command(self, targets):
@@ -694,9 +695,6 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
 
     nmake_project_guid = '8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942'
 
-    def get_project_directory(self, target):
-        return os.path.join(self.solution_directory, target.location.split('/')[-1])
-
     def get_dependency_libs(self, linked_libs, library_projects):
         dependency_libs = {}
         for linked_lib in linked_libs:
@@ -713,7 +711,6 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
             for project in projects:
                 target = project.target
                 print(' %s' % target.name, end='')
-                module = target.location.split('/')[-1]
                 proj_path = os.path.relpath(project.path, os.path.abspath(os.path.dirname(solution_path)))
                 f.write('Project("{%s}") = "%s", "%s", "{%s}"\n' %
                         (VisualStudioIntegrationGenerator.nmake_project_guid,
@@ -783,15 +780,15 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
             platform_toolset_node = ET.SubElement(conf_node, '{%s}PlatformToolset' % ns)
             platform_toolset_node.text = self.toolset
 
-        import_node = ET.SubElement(proj_node, '{%s}Import' % ns, Project='$(VCTargetsPath)\Microsoft.Cpp.props')
+        ET.SubElement(proj_node, '{%s}Import' % ns, Project='$(VCTargetsPath)\Microsoft.Cpp.props')
         ET.SubElement(proj_node, '{%s}ImportGroup' % ns, Label='ExtensionSettings')
         for configuration in self.configurations:
             prop_sheets_node = ET.SubElement(proj_node, '{%s}ImportGroup' % ns, Label='Configuration',
                                              Condition="'$(Configuration)|$(Platform)'=='%s|%s'" % (configuration, platform))
-            import_node = ET.SubElement(prop_sheets_node, '{%s}Import' % ns,
-                                        Project='$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props',
-                                        Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')",
-                                        Label='LocalAppDataPlatform')
+            ET.SubElement(prop_sheets_node, '{%s}Import' % ns,
+                          Project='$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props',
+                          Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')",
+                          Label='LocalAppDataPlatform')
 
         ET.SubElement(proj_node, '{%s}PropertyGroup' % ns, Label='UserMacros')
         for cfg_name, cfg_targets in self.configurations.items():
@@ -838,8 +835,7 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
                 ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=hfile)
         ET.SubElement(proj_node, '{%s}Import' % ns, Project='$(VCTargetsPath)\Microsoft.Cpp.targets')
         ET.SubElement(proj_node, '{%s}ImportGroup' % ns, Label='ExtensionTargets')
-        msbuild_tree = ET.ElementTree(proj_node)
-        msbuild_tree.write(project_path, encoding='unicode', xml_declaration=True)
+        self.write_pretty_xml(proj_node, project_path)
         self.write_filters(project_path + '.filters',
                            os.path.join(self.gbuildparser.srcdir, os.path.basename(target.location)),
                            [cxx_node.get('Include') for cxx_node in cxxobjects_node.findall('{%s}ClCompile' % ns)],
@@ -856,6 +852,12 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
             subfilters.add('\\'.join(parts[:i]))
         return subfilters
 
+    def write_pretty_xml(self, node, file_path):
+        xml_str = ET.tostring(node, encoding='unicode')
+        pretty_str = minidom.parseString(xml_str).toprettyxml(encoding='utf-8')
+        with open(file_path, 'w') as f:
+            f.write(pretty_str.decode())
+
     def add_nodes(self, files_node, module_dir, tag, project_files):
         ns = 'http://schemas.microsoft.com/developer/msbuild/2003'
         filters = set()
@@ -883,8 +885,7 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator):
             filter_node = ET.SubElement(filters_node, '{%s}Filter' % ns, Include=proj_filter)
             filter_id_node = ET.SubElement(filter_node, '{%s}UniqueIdentifier' % ns)
             filter_id_node.text = '{%s}' % str(uuid.uuid4())
-        filters_tree = ET.ElementTree(proj_node)
-        filters_tree.write(filters_path, encoding='unicode', xml_declaration=True)
+        self.write_pretty_xml(proj_node, filters_path)
 
 
 if __name__ == '__main__':


More information about the Libreoffice-commits mailing list