skia2/fix-gn-sln.py
Brian Osman f891147523 In VS SLN fixup script, don't erase old files
First, this avoids removing .suo files (solution options), which is where
things like debugging command line arguments live. This lets those
settings persist when re-generating.

Second, it lets you run the script while you have the solution open.
(Writing new files works okay, but removing the existing ones was
triggering a sharing violation).

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4981

Change-Id: Ib40494caf152dd638f9eee7635639399e8099421
Reviewed-on: https://skia-review.googlesource.com/4981
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
2016-11-17 21:47:51 +00:00

77 lines
2.6 KiB
Python

# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import glob
import sys
from shutil import copyfile
srcDir = sys.argv[1]
# Get list of existing directories to use as configs
configs = []
for root, dirs, files in os.walk("out"):
for outDir in dirs:
if os.path.exists("out/" + outDir + "/build.ninja.d"):
configs.append(outDir)
break
# Ensure directories exist
try:
os.makedirs("out/sln/obj")
except OSError:
pass
# Copy filter files unmodified
for filterFile in glob.glob("out/" + srcDir + "/obj/*.filters"):
copyfile(filterFile, filterFile.replace("out/" + srcDir, "out/sln"))
# Copy Solution file, with additional configurations
slnLines = iter(open("out/" + srcDir + "/all.sln"))
newSlnLines = []
for line in slnLines:
newSlnLines.append(line)
if "SolutionConfigurationPlatforms" in line:
slnConfig = slnLines.next()
for config in configs:
newSlnLines.append(slnConfig.replace("GN", config))
elif "ProjectConfigurationPlatforms" in line:
activeCfg = slnLines.next()
while "EndGlobalSection" not in activeCfg:
buildCfg = slnLines.next()
for config in configs:
newSlnLines.append(activeCfg.replace("GN", config))
newSlnLines.append(buildCfg.replace("GN", config))
activeCfg = slnLines.next()
newSlnLines.append(activeCfg)
with open("out/sln/skia.sln", "w") as newSln:
newSln.writelines(newSlnLines)
# Now bring over all project files with modification
for srcProjFilename in glob.glob("out/" + srcDir + "/obj/*.vcxproj"):
with open(srcProjFilename) as srcProjFile:
projLines = iter(srcProjFile)
newProjLines = []
for line in projLines:
if "ProjectConfigurations" in line:
newProjLines.append(line)
projConfigLines = [
projLines.next(),
projLines.next(),
projLines.next(),
projLines.next() ]
for config in configs:
for projConfigLine in projConfigLines:
newProjLines.append(
projConfigLine.replace("GN", config))
elif "<OutDir" in line:
newProjLines.append(line.replace(srcDir, "$(Configuration)"))
else:
newProjLines.append(line)
newName = "out/sln/obj/" + os.path.basename(srcProjFilename)
with open(newName, "w") as newProj:
newProj.writelines(newProjLines)