root / trunk / extensions / ext3Dgui / buildman / bin / bmplugins / CreateSolutionPlugIn.py @ 26254
History | View | Annotate | Download (4.51 KB)
1 |
from bmbase.IPlugIn import IPlugIn |
---|---|
2 |
from bmbase.PlugInManager import PlugInManager |
3 |
from bmcore.BMUtil import BMUtil |
4 |
import os |
5 |
|
6 |
class CreateSolutionPlugIn(IPlugIn): |
7 |
def __init__(self): |
8 |
IPlugIn.__init__(self)
|
9 |
self._buildType = "Release" |
10 |
self._supportedGenerators = dict() |
11 |
self._supportedGenerators["vs8"] = "Visual Studio 8 2005" |
12 |
self._supportedGenerators["vs7"] = "Visual Studio 7 .NET 2003" |
13 |
self._supportedGenerators["unix"] = "Unix Makefiles" |
14 |
self._supportedGenerators["xcode"] = "Xcode" |
15 |
self._cmakeGenerator = "" |
16 |
self._projectPath = "" |
17 |
self._projectGenerationPath = "" |
18 |
self._installPath = "" |
19 |
self._cmakeOtherOptions = "" |
20 |
|
21 |
|
22 |
def init(self): |
23 |
self.addGoal("create-solution", "Creates the solution Makefiles/VisualStudio for Win/Linux/Mac based on CMake") |
24 |
self.addGoalOption("create-solution","--build-type", "sets the build path (Release/Debug). default=Release.") |
25 |
self.addGoalOption("create-solution","--generator", "selects the generator (vs8,vs7,unix,xcode).") |
26 |
self.addGoalOption("create-solution","--project-path", "sets the path of the project.") |
27 |
self.addGoalOption("create-solution","--project-gen-path", "sets the path to generate project files. default=${project-path}/CMake") |
28 |
self.addGoalOption("create-solution","--install", "sets the path to generate the product installation. default=${project-path}/../install") |
29 |
self.addGoalOption("create-solution","--cmake-options", "Adds other cmake command line options.") |
30 |
execute = False
|
31 |
if self._arguments.read("create-solution"): |
32 |
execute = True
|
33 |
if execute:
|
34 |
args = [""]
|
35 |
if self._arguments.read("--build-type",args): |
36 |
self._buildType = args[0] |
37 |
|
38 |
args = [""]
|
39 |
if self._arguments.read("--generator",args): |
40 |
if args[0] in self._supportedGenerators: |
41 |
self._cmakeGenerator = self._supportedGenerators[args[0]] |
42 |
|
43 |
args = [""]
|
44 |
if self._arguments.read("--project-path",args): |
45 |
self._projectPath=args[0] |
46 |
|
47 |
args = [""]
|
48 |
if self._arguments.read("--project-gen-path",args): |
49 |
self._projectGenerationPath=args[0] |
50 |
|
51 |
args = [""]
|
52 |
if self._arguments.read("--install",args): |
53 |
self._installPath=args[0] |
54 |
|
55 |
args = [""]
|
56 |
if self._arguments.read("--cmake-options",args): |
57 |
self._cmakeOtherOptions=args[0] |
58 |
|
59 |
self.setExecute(True) |
60 |
|
61 |
def initFromXML(self,node): |
62 |
if node.localName=="create-solution": |
63 |
if node.hasAttributes():
|
64 |
if node.attributes.has_key("build-type"): |
65 |
self._buildType = node.attributes.get("build-type").value |
66 |
if node.attributes.has_key("generator"): |
67 |
gen = node.attributes.get("generator").value
|
68 |
if gen in self._supportedGenerators: |
69 |
self._cmakeGenerator = self._supportedGenerators[gen] |
70 |
if node.attributes.has_key("project-path"): |
71 |
self._projectPath = node.attributes.get("project-path").value |
72 |
if node.attributes.has_key("project-gen-path"): |
73 |
self._projectGenerationPath = os.path.abspath(node.attributes.get("project-gen-path").value) |
74 |
if node.attributes.has_key("install"): |
75 |
self._installPath = os.path.abspath(node.attributes.get("install").value) |
76 |
if node.attributes.has_key("cmake-options"): |
77 |
self._cmakeOtherOptions = node.attributes.get("cmake-options").value |
78 |
|
79 |
def execute(self): |
80 |
if self._cmakeGenerator=="": |
81 |
self.reportError("Missing valid generator option") |
82 |
return False |
83 |
if self._projectPath=="": |
84 |
self.reportError("Missing required project path option") |
85 |
return False |
86 |
|
87 |
if self._cmakeGenerator!="" and self._projectPath!="": |
88 |
self._projectPath = os.path.abspath(self._projectPath) |
89 |
projectName = os.path.basename(self._projectPath)
|
90 |
if self._projectGenerationPath=="": |
91 |
self._projectGenerationPath=os.path.abspath(os.path.join(self._projectPath,"BMCMake")) |
92 |
if self._installPath=="": |
93 |
self._installPath=os.path.abspath(self._projectPath+os.path.sep+".."+os.path.sep+projectName+"-install") |
94 |
if self._buildType=="": |
95 |
self._buildType="Release" |
96 |
|
97 |
print "Executing Plugin:" + str(self.__class__) |
98 |
bmutil = BMUtil() |
99 |
print " * Creating Project Generation Path: "+self._projectGenerationPath |
100 |
bmutil.mkdir(self._projectGenerationPath)
|
101 |
olddir = os.getcwd() |
102 |
os.chdir(self._projectGenerationPath)
|
103 |
if os.path.exists("CMakeCache.txt"): |
104 |
os.remove("CMakeCache.txt")
|
105 |
cmakeCommand = "cmake "+self._cmakeOtherOptions+" -G\""+self._cmakeGenerator+"\" -DCMAKE_BUILD_TYPE="+self._buildType+" -DCMAKE_INSTALL_PREFIX="+self._installPath+" "+self._projectPath |
106 |
print " * Running CMAKE: " + cmakeCommand |
107 |
os.system(cmakeCommand) |
108 |
os.chdir(olddir) |
109 |
return True |
110 |
|
111 |
PlugInManager().registerPlugIn("CreateSolutionPlugIn",CreateSolutionPlugIn())
|
112 |
|
113 |
|