From 6f08c430353b36d219c284a87f014985b00af06c Mon Sep 17 00:00:00 2001 From: Federico Bassini Date: Tue, 31 Jan 2017 08:53:10 +0100 Subject: [PATCH] gbuild-to-ide: VSGenerator and testVs2013 with relative links VisualStudio2013IntegrationGenerator recently doesn't work with the new relative paths in GbuilParser. this patch does this, now it works fine with all relative paths. what is missing it's in the .vcxproj: these still work with absolute path but i start now on working this Change-Id: I19610097edc11be67b4f7fd9f32b6683d334cc2d Reviewed-on: https://gerrit.libreoffice.org/33735 Reviewed-by: jan iversen Tested-by: jan iversen --- bin/gbuild-to-ide | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide index 3bf063dcaf2b..f9ca375357d9 100755 --- a/bin/gbuild-to-ide +++ b/bin/gbuild-to-ide @@ -353,33 +353,36 @@ class testVS2013Ide(IdeIntegrationGenerator): nmake_rebuild_node = ET.SubElement(conf_node, '{%s}NMakeReBuildCommandLine' % ns) nmake_rebuild_node.text = cfg_targets['rebuild'] % nmake_params nmake_output_node = ET.SubElement(conf_node, '{%s}NMakeOutput' % ns) - nmake_output_node.text = os.path.join(self.gbuildparser.instdir, 'program', 'soffice.exe') + nmake_output_node.text = os.path.join('../..', 'program', 'soffice.exe') nmake_defs_node = ET.SubElement(conf_node, '{%s}NMakePreprocessorDefinitions' % ns) nmake_defs_node.text = ';'.join(list(target['DEFS']) + ['$(NMakePreprocessorDefinitions)']) include_path_node = ET.SubElement(conf_node, '{%s}IncludePath' % ns) - include_path_node.text = ';'.join(target['include'] + ['$(IncludePath)']) + includes=[os.path.join('../..',elem) if elem[1] != ':' else elem for elem in target['include'] ] + include_path_node.text = ';'.join(includes + ['$(IncludePath)']) ET.SubElement(proj_node, '{%s}ItemDefinitionGroup' % ns) cxxobjects_node = ET.SubElement(proj_node, '{%s}ItemGroup' % ns) for cxxobject in target['CXXOBJECTS']: - cxxabspath = os.path.join(self.gbuildparser.srcdir + '/' + target['module'], cxxobject) - cxxfile = cxxabspath - if os.path.isfile(cxxabspath): - ET.SubElement(cxxobjects_node, '{%s}ClCompile' % ns, Include=cxxabspath) + cxxrelpath= os.path.join('../..',target['location'].split('/')[-1], cxxobject) + cxxabspath = os.path.join(self.gbuildparser.srcdir,target['location'].split('/')[-1], cxxobject) + cxxfile = cxxabspath + '.cxx' + if os.path.isfile(cxxfile): + ET.SubElement(cxxobjects_node, '{%s}ClCompile' % ns, Include=cxxrelpath + '.cxx') else: print('Source %s in project %s does not exist' % (cxxfile, target['target_name'])) includes_node = ET.SubElement(proj_node, '{%s}ItemGroup' % ns) for cxxobject in target['CXXOBJECTS']: - include_abs_path = os.path.join(self.gbuildparser.srcdir + '/' + target['module'], cxxobject) + include_rel_path = os.path.join('../..',target['location'].split('/')[-1], cxxobject) + include_abs_path = os.path.join(self.gbuildparser.srcdir,target['location'].split('/')[-1], cxxobject) hxxfile = include_abs_path + '.hxx' if os.path.isfile(hxxfile): - ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=hxxfile) + ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=include_rel_path + '.hxx') # Few files have corresponding .h files hfile = include_abs_path + '.h' if os.path.isfile(hfile): - ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=hfile) + ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=include_rel_path + '.h') ET.SubElement(proj_node, '{%s}Import' % ns, Project='$(VCTargetsPath)\Microsoft.Cpp.targets') ET.SubElement(proj_node, '{%s}ImportGroup' % ns, Label='ExtensionTargets') self.write_pretty_xml(proj_node, project_path) @@ -826,33 +829,36 @@ class VisualStudioIntegrationGenerator(IdeIntegrationGenerator): nmake_rebuild_node = ET.SubElement(conf_node, '{%s}NMakeReBuildCommandLine' % ns) nmake_rebuild_node.text = cfg_targets['rebuild'] % nmake_params nmake_output_node = ET.SubElement(conf_node, '{%s}NMakeOutput' % ns) - nmake_output_node.text = os.path.join(self.gbuildparser.instdir, 'program', 'soffice.exe') + nmake_output_node.text = os.path.join('../..', 'program', 'soffice.exe') nmake_defs_node = ET.SubElement(conf_node, '{%s}NMakePreprocessorDefinitions' % ns) nmake_defs_node.text = ';'.join(list(target['DEFS']) + ['$(NMakePreprocessorDefinitions)']) include_path_node = ET.SubElement(conf_node, '{%s}IncludePath' % ns) - include_path_node.text = ';'.join(target['include'] + ['$(IncludePath)']) + includes = [os.path.join('../..', elem) if elem[1] != ':' else elem for elem in target['include']] + include_path_node.text = ';'.join(includes + ['$(IncludePath)']) ET.SubElement(proj_node, '{%s}ItemDefinitionGroup' % ns) cxxobjects_node = ET.SubElement(proj_node, '{%s}ItemGroup' % ns) for cxxobject in target['CXXOBJECTS']: - cxxabspath = os.path.join(self.gbuildparser.srcdir + '/' + target['module'], cxxobject) - cxxfile = cxxabspath + cxxrelpath = os.path.join('../..', target['location'].split('/')[-1], cxxobject) + cxxabspath = os.path.join(self.gbuildparser.srcdir, target['location'].split('/')[-1], cxxobject) + cxxfile = cxxabspath + '.cxx' if os.path.isfile(cxxfile): - ET.SubElement(cxxobjects_node, '{%s}ClCompile' % ns, Include='../../' + cxxobject) + ET.SubElement(cxxobjects_node, '{%s}ClCompile' % ns, Include=cxxrelpath + '.cxx') else: print('Source %s in project %s does not exist' % (cxxfile, target['target_name'])) includes_node = ET.SubElement(proj_node, '{%s}ItemGroup' % ns) for cxxobject in target['CXXOBJECTS']: - include_abs_path = os.path.join(self.gbuildparser.srcdir + '/' + target['module'], cxxobject) + include_rel_path = os.path.join('../..',target['location'].split('/')[-1], cxxobject) + include_abs_path = os.path.join(self.gbuildparser.srcdir,target['location'].split('/')[-1], cxxobject) hxxfile = include_abs_path + '.hxx' if os.path.isfile(hxxfile): - ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include='../../' + cxxobject + '.hxx') + ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=include_rel_path + '.hxx') # Few files have corresponding .h files hfile = include_abs_path + '.h' if os.path.isfile(hfile): - ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include='../../' + cxxobject + '.h') + ET.SubElement(includes_node, '{%s}ClInclude' % ns, Include=include_rel_path + '.h') ET.SubElement(proj_node, '{%s}Import' % ns, Project='$(VCTargetsPath)\Microsoft.Cpp.targets') ET.SubElement(proj_node, '{%s}ImportGroup' % ns, Label='ExtensionTargets') self.write_pretty_xml(proj_node, project_path)