penktadienis, rugpjūčio 13, 2010

visual studio sln file generation for tree of vcproj's

this might be useful for someone who does e.g. VC++ migration vs200x to vs2010 or similar tasks where you need to build solution file that contains projects from subtree.

synopsis: make_sln_with_vcprojs.py <subdir1> [<subdir2> ..]
import sys
import os
from xml.dom.minidom import parse as minidom_parse

class sln_writer(object):
def __init__(self, file):
self.file = file

def write_header(self):
self.file.write(
"\xEF\xBB\xBF\r\n"
+ "Microsoft Visual Studio Solution File, Format Version 11.00\r\n"
+ "# Visual Studio 2010\r\n"
)

def write_ref_to_vcproj(self, vcproj_file, vcproj_path):
vcproj_name = vcproj_file.split(".")[0]

proj_guid = self.read_proj_guid(vcproj_path)

if proj_guid <> "":
self.file.write(
"Project(\"%s\") = \"%s\", \"%s\", \"%s\"\r\n"
% ("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}", vcproj_file.split(".")[0], vcproj_path, proj_guid)
)
self.file.write("EndProject\r\n")

def read_proj_guid(self, vcproj_path):
dom = minidom_parse(vcproj_path)
root_elm = dom.getElementsByTagName("VisualStudioProject")[0]
return root_elm.getAttribute("ProjectGUID")

sln_file = open("output.sln", "wb")

sln = sln_writer(sln_file)
sln.write_header()

for dir_to_inspect in sys.argv[1:]:
for dirname, dirnames, filenames in os.walk(dir_to_inspect):
for vcproj_file in [f for f in filenames if f.endswith(".vcproj")]:
vcproj_path = os.path.join(dirname, vcproj_file)
sln.write_ref_to_vcproj(vcproj_file, vcproj_path)

Komentarų nėra: