1<package> 2 <job id="new-project-wsh-js"> 3 4 <script language="VBScript"> 5 Function VbAskData(prompt, title, defvalue) 6 VbAskData = InputBox(prompt, title, defvalue) 7 End Function 8 9 Function VbAskQuestionYNC(prompt, title) 10 Dim reply 11 reply = MsgBox(prompt, vbYesNoCancel, title) 12 If reply = vbYes Then 13 VbAskQuestionYNC = "yes" 14 End If 15 If reply = vbNo Then 16 VbAskQuestionYNC = "no" 17 End If 18 End Function 19 20 Function VbAskQuestionYN(prompt, title) 21 Dim reply 22 reply = MsgBox(prompt, vbYesNo, title) 23 If reply = vbYes Then 24 VbAskQuestionYN = "yes" 25 End If 26 If reply = vbNo Then 27 VbAskQuestionYN = "no" 28 End If 29 End Function 30 31 Function VbInfoMessage(prompt, title) 32 Dim reply 33 reply = MsgBox(prompt, vbOKOnly, title) 34 VbInfoMessage = "ok" 35 End Function 36 </script> 37 38 <script language="JScript" src="project_utilits.js"> 39 </script> 40 41 <script language="JScript"> 42 // Framework 43 44 function InputData(prompt, defvalue) 45 { 46 var answer = VbAskData(prompt, WScript.ScriptFullName, defvalue); 47 if ((typeof(answer) == "undefined") || answer.length == 0) { 48 WScript.Quit(1); 49 } 50 return answer; 51 } 52 function InputFlagYNC(prompt) 53 { 54 var answer = VbAskQuestionYNC(prompt, WScript.ScriptFullName); 55 if ((typeof(answer) == "undefined") || answer.length == 0) { 56 WScript.Quit(1); 57 } 58 return answer == "yes"; 59 } 60 function InputFlagYN(prompt) 61 { 62 var answer = VbAskQuestionYN(prompt, WScript.ScriptFullName); 63 if ((typeof(answer) == "undefined") || answer.length == 0) { 64 WScript.Quit(1); 65 } 66 return answer == "yes"; 67 } 68 function ShowMessage(prompt) 69 { 70 var answer = VbInfoMessage(prompt, WScript.ScriptFullName); 71 return answer == "ok"; 72 } 73 // Verify command line arguments 74 function VerifyArguments(oArgs) 75 { 76 if (oArgs.Length < 2) { 77 return false; 78 } 79 var name = GetPositionalValue(oArgs, 0); 80 if (name == "") { 81 return false; 82 } 83/* 84 if (oArgs.Length > 6) { 85 return false; 86 } 87*/ 88 89 return true; 90 } 91 // Verify task object 92 function VerifyTask(oShell, oTask) 93 { 94 var err = false; 95 // Project name 96 var oRe = /^[a-zA-Z]([a-zA-Z]|\d|[_]|[-]|[\.])*$/g; 97 if (oTask.ProjectName.match(oRe) == null) { 98 WScript.Echo("ERROR: Invalid project name: \"" + oTask.ProjectName + "\""); 99 WScript.Echo(" Project name should start with a lower-case character"); 100 WScript.Echo(" and contain lower-case character(s), underscore(s), or digit(s)"); 101 err = true; 102 } 103 // Project type 104 if ((typeof(oTask.ProjectTemplate) == "undefined") || oTask.ProjectTemplate.length == 0) { 105 WScript.Echo("ERROR: Invalid project type: \"" + oTask.ProjectType + "\""); 106 WScript.Echo(" Supported project types are:"); 107 var keys = (new VBArray(oTask.TemplatesDict.Keys())).toArray(); 108 for(var key_ind in keys) { 109 WScript.Echo( " " + keys[key_ind] ); 110 } 111 err = true; 112 } 113 114 // Path to C++ Toolkit 115 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 116 if ( !oFso.FolderExists(oTask.ToolkitPath) || 117 (!(!oTask.DllBuild && oFso.FolderExists(oTask.ToolkitPath + "\\static\\bin")) && 118 !( oTask.DllBuild && oFso.FolderExists(oTask.ToolkitPath + "\\dll\\bin")) && 119 !oFso.FolderExists(oTask.ToolkitPath + "\\bin"))) { 120 WScript.Echo("ERROR: Pre-built NCBI C++ toolkit is not found in:\n\"" + oTask.ToolkitPath + "\""); 121 if (oTask.DllBuild) { 122 if (oFso.FolderExists(oTask.ToolkitPath + "\\static\\bin")) { 123 WScript.Echo("\nConsider using static build - do not specify -dll flag"); 124 } 125 } else { 126 if (oFso.FolderExists(oTask.ToolkitPath + "\\dll\\bin")) { 127 WScript.Echo("\nConsider using DLL build - specify -dll flag"); 128 } 129 } 130 err = true; 131 } 132 if ( !oFso.FolderExists(oTask.ToolkitSrcPath) || 133 !oFso.FolderExists(oTask.ToolkitSrcPath + "\\include") || 134 !oFso.FolderExists(oTask.ToolkitSrcPath + "\\src")) { 135 WScript.Echo("ERROR: Pre-built NCBI C++ toolkit sources are not found in:\n\"" + oTask.ToolkitPath + "\""); 136 err = true; 137 } 138 if (err) { 139 WScript.Quit(1); 140 } 141 } 142 // Create usage string 143 function Usage() 144 { 145 var usage_str; 146 //usage_str = "Usage:\n"; 147 //usage_str += "cscript new_project.wsf <project-name> <project-template> <path-to-pre-built-toolkit> [-dll]"; 148 usage_str = "USAGE: cscript new_project.wsf <name> <type> [builddir] [-msvc nn] [-dll] [-b] [-v] [-noopen] [-ams yes|no]\n"; 149 usage_str += "SYNOPSIS:\n"; 150 usage_str += " Create new MSVC application project from sample template:\n"; 151 usage_str += " Create local build tree structure. Fill-in the local tree.\n"; 152 usage_str += " Copy and adjust sample code.\n"; 153// usage_str += " Add to project_tree_builder.ini entries for pre-built NCBI C++ toolkit.\n"; 154 usage_str += " Run project tree builder on local build tree.\n"; 155 usage_str += " Open created solution in MSVC IDE.\n"; 156 usage_str += "ARGUMENTS:\n"; 157 usage_str += " <name> -- name of the project\n"; 158 usage_str += " <type> -- one of the following:\n"; 159 usage_str += " app[/basic] a simple application\n"; 160 usage_str += " app/multicmd a simple command-based application\n"; 161 usage_str += " app/alnmgr an application that uses Alignment Manager\n"; 162 usage_str += " app/asn an application that uses ASN.1 specification\n"; 163 usage_str += " app/blast a BLAST application\n"; 164 usage_str += " app/cgi a CGI application\n"; 165 usage_str += " app/deployable_cgi a CD-deployable CGI application\n"; 166 usage_str += " app/dbapi a DBAPI application\n"; 167 usage_str += " app/sdbapi a Simple-DBAPI application\n"; 168 usage_str += " app/eutils an eUtils client application\n"; 169 usage_str += " app/http_session an application that uses CHttpSession\n"; 170 usage_str += " app/lds an application that uses local data store\n"; 171 usage_str += " app/netcache an application that uses NetCache\n"; 172 usage_str += " app/netschedule an NCBI GRID (NetSchedule) application\n"; 173 usage_str += " app/objects an application that uses ASN.1 objects\n"; 174 usage_str += " app/objmgr an application that uses Object Manager\n"; 175 usage_str += " app/serial a data serialization application\n"; 176 usage_str += " app/soap/client a SOAP client\n"; 177 usage_str += " app/soap/server a SOAP server\n"; 178 usage_str += " app/unit_test a Boost-based unit test application\n"; 179 usage_str += " lib[/basic] a simple static library\n"; 180 usage_str += " lib/asn a static library from ASN.1 specification\n"; 181 usage_str += " lib/dtd a static library from DTD specification\n"; 182 usage_str += " lib/xsd a static library from XML Schema specification\n"; 183 usage_str += " lib/jsd a static library from JSON Schema specification\n"; 184 usage_str += " [builddir] -- path to the pre-built NCBI C++ toolkit\n"; 185 usage_str += " default path is: " + GetDefaultCXX_ToolkitFolder() + "\\" + GetDefaultCXX_ToolkitSubFolder() + "\n"; 186 usage_str += " you can only specify a subfolder of " + GetDefaultCXX_ToolkitFolder() + "\n"; 187 usage_str += " [-msvc nn] -- MSVC version: 140, 140x64, 150, 150x64; default is " + GetDefaultMsvcVer() + "\n"; 188 usage_str += " [-dll] -- use NCBI C++ toolkit DLLs' instead of static libraries\n"; 189 usage_str += " [-b] -- copy NCBI C++ toolkit DLLs' to local binary directories\n"; 190 usage_str += " [-v] -- show details about what is being made\n"; 191 usage_str += " [-i] -- enter the data interactively\n"; 192 usage_str += " [-noopen] -- do not open generated solution in IDE\n"; 193 usage_str += " [-ams yes|no] -- automatically map network drive S:\n"; 194 usage_str += " Generated solution uses libraries from a network location:\n"; 195 usage_str += " " + GetDefaultLibFolder() + "\n"; 196 usage_str += " It is recommended that this location is mapped to drive S:\n"; 197 usage_str += "EXAMPLES:\n"; 198 usage_str += " cscript new_project.wsf my_app app/basic\n"; 199 usage_str += " cscript new_project.wsf my_app app/basic -dll -v\n"; 200 usage_str += " cscript new_project.wsf my_app app/basic cxx.potluck -dll\n"; 201 usage_str += " cscript new_project.wsf my_app app/basic " + GetDefaultCXX_ToolkitFolder() + "\\cxx.current -dll\n"; 202 203 return usage_str; 204 } 205 // Task object constructor 206 function Task() 207 { 208 var toolkit_path; 209 var oArgs = WScript.Arguments; 210 SetMsvcVer(oArgs, "-msvc"); 211 SetOpenSolution(oArgs, "-noopen", false); 212 var run_interactive = GetFlagValue(oArgs, "-i", false); 213 if ( !run_interactive && VerifyArguments(oArgs) ) { 214 SetVerbose(oArgs, "-v", false); 215 this.ProjectName = GetPositionalValue(oArgs, 0); 216 this.ProjectType = GetPositionalValue(oArgs, 1); 217 this.DllBuild = GetFlagValue(oArgs, "-dll", false); 218 if ( this.DllBuild ) { 219 this.CopyDlls = GetFlagValue(oArgs, "-b", false); 220 } else { 221 this.CopyDlls = false; 222 } 223 this.AutoMapS = GetFlaggedValue(oArgs, "-ams", "ask") 224 toolkit_path = GetOptionalPositionalValue(oArgs, 2, 225 GetDefaultCXX_ToolkitFolder() + "\\" + GetDefaultCXX_ToolkitSubFolder()); 226 } else { 227 this.AutoMapS = "ask"; 228 WScript.Echo(Usage()); 229 if (!run_interactive) { 230 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 231 var scripthost = oFso.GetBaseName(WScript.FullName); 232 run_interactive = (scripthost == "cscript"); 233 if (run_interactive) { 234 run_interactive = InputFlagYN("Do you want to enter the data interactively?"); 235 } 236 if (!run_interactive) { 237 WScript.Quit(1); 238 } 239 } 240 } 241 if (run_interactive) { 242 var prompt, answer, footer; 243 prompt = "Enter Project Name"; 244// footer = "\n\nPress Cancel to abort the script"; 245 footer=""; 246 this.ProjectName = InputData(prompt+footer, "test"); 247 prompt = "Enter Project Type\n"; 248 prompt += "This can be one of the following:\n"; 249 prompt += "\tapp\n"; 250 prompt += "\tapp/basic\n"; 251 prompt += "\tapp/multicmd\n"; 252 prompt += "\tapp/alnmgr\n"; 253 prompt += "\tapp/asn\n"; 254 prompt += "\tapp/blast\n"; 255 prompt += "\tapp/cgi\n"; 256 prompt += "\tapp/deployable_cgi\n"; 257 prompt += "\tapp/dbapi\n"; 258 prompt += "\tapp/sdbapi\n"; 259 prompt += "\tapp/eutils\n"; 260 prompt += "\tapp/http_session\n"; 261 prompt += "\tapp/lds\n"; 262 prompt += "\tapp/netcache\n"; 263 prompt += "\tapp/netschedule\n"; 264 prompt += "\tapp/objects\n"; 265 prompt += "\tapp/objmgr\n"; 266 prompt += "\tapp/serial\n"; 267 prompt += "\tapp/soap/client\n"; 268 prompt += "\tapp/soap/server\n"; 269 prompt += "\tapp/unit_test\n"; 270 prompt += "\tlib\n"; 271 prompt += "\tlib/basic\n"; 272 prompt += "\tlib/asn\n"; 273 prompt += "\tlib/dtd\n"; 274 prompt += "\tlib/xsd\n"; 275 prompt += "\tlib/jsd\n"; 276 this.ProjectType = InputData(prompt+footer, "app/basic"); 277 prompt = "Enter path to the pre-built NCBI C++ toolkit"; 278 toolkit_path = InputData(prompt+footer, 279 GetDefaultCXX_ToolkitFolder() + "\\" + GetDefaultCXX_ToolkitSubFolder()); 280 prompt = "Use NCBI C++ toolkit DLLs?"; 281 this.DllBuild = InputFlagYNC(prompt+footer); 282 prompt = "Copy NCBI C++ toolkit DLLs into local directories?"; 283 this.CopyDlls = InputFlagYNC(prompt+footer); 284 prompt = "Use verbose output?" 285 SetVerboseFlag( InputFlagYNC(prompt+footer)); 286 } 287 this.ProjectFolder = this.ProjectName; 288 289 this.TemplatesDict = new ActiveXObject("Scripting.Dictionary"); 290 this.TemplatesDict.Add("app", "sample/app/basic"); 291 this.TemplatesDict.Add("app/basic", "sample/app/basic"); 292 this.TemplatesDict.Add("app/multicmd", "sample/app/multicmd"); 293 this.TemplatesDict.Add("app/alnmgr", "sample/app/alnmgr"); 294 this.TemplatesDict.Add("app/asn", "sample/app/asn"); 295 this.TemplatesDict.Add("app/blast", "sample/app/blast"); 296 this.TemplatesDict.Add("app/cgi", "sample/app/cgi"); 297 this.TemplatesDict.Add("app/deployable_cgi", "sample/app/deployable_cgi"); 298 this.TemplatesDict.Add("app/dbapi", "sample/app/dbapi"); 299 this.TemplatesDict.Add("app/sdbapi", "sample/app/sdbapi"); 300 this.TemplatesDict.Add("app/eutils", "sample/app/eutils"); 301 this.TemplatesDict.Add("app/http_session", "sample/app/http_session"); 302 this.TemplatesDict.Add("app/lds", "sample/app/lds"); 303 this.TemplatesDict.Add("app/netcache", "sample/app/netcache"); 304 this.TemplatesDict.Add("app/netschedule", "sample/app/netschedule"); 305 this.TemplatesDict.Add("app/objects", "sample/app/objects"); 306 this.TemplatesDict.Add("app/objmgr", "sample/app/objmgr"); 307 this.TemplatesDict.Add("app/serial", "sample/app/serial"); 308 this.TemplatesDict.Add("app/soap/client", "sample/app/soap/client"); 309 this.TemplatesDict.Add("app/soap/server", "sample/app/soap/server"); 310 this.TemplatesDict.Add("app/unit_test", "sample/app/unit_test"); 311 this.TemplatesDict.Add("lib", "sample/lib/basic"); 312 this.TemplatesDict.Add("lib/basic", "sample/lib/basic"); 313 this.TemplatesDict.Add("lib/asn", "sample/lib/asn_lib"); 314 this.TemplatesDict.Add("lib/dtd", "sample/lib/asn_lib"); 315 this.TemplatesDict.Add("lib/xsd", "sample/lib/asn_lib"); 316 this.TemplatesDict.Add("lib/jsd", "sample/lib/asn_lib"); 317 if (this.TemplatesDict.Exists(this.ProjectType)) { 318 this.ProjectTemplate = this.TemplatesDict.Item(this.ProjectType); 319 } 320 321 if (toolkit_path.indexOf("\\\\") == 0 || toolkit_path.indexOf(":\\") == 1) { 322 this.ToolkitPath = toolkit_path; 323 } else { 324 this.ToolkitPath = GetDefaultCXX_ToolkitFolder() + "\\" + toolkit_path; 325 } 326 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 327 var src_root = this.ToolkitPath; 328 var src_path = src_root + "\\src"; 329 while (!oFso.FolderExists(src_path)) { 330 src_root = oFso.GetParentFolderName(src_root) 331 if (src_root == "") { 332 break; 333 } 334 src_path = src_root + "\\src"; 335 } 336 this.ToolkitSrcPath = src_root; 337 } 338 // Diagnostic dump of task object 339 function DumpTask(oTask) 340 { 341 WScript.Echo("ProjectName = " + oTask.ProjectName); 342 WScript.Echo("ProjectFolder = " + oTask.ProjectFolder); 343 WScript.Echo("ProjectType = " + oTask.ProjectType); 344 WScript.Echo("ProjectTemplate = " + oTask.ProjectTemplate); 345 WScript.Echo("ToolkitPath = " + oTask.ToolkitPath); 346 WScript.Echo("ToolkitSrcPath = " + oTask.ToolkitSrcPath); 347 WScript.Echo("DllBuild = " + oTask.DllBuild.toString()); 348 WScript.Echo("CopyDlls = " + oTask.CopyDlls.toString()); 349 WScript.Echo("AutoMapS = " + oTask.AutoMapS); 350 } 351 352 // Fill local tree 353 function FillTree(oShell, oTree) 354 { 355 FillTreeStructure(oShell, oTree); 356 } 357 358 function ConvertDataSpec(oShell, oTree, oTask) 359 { 360 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 361 if ( oFso.FolderExists(oTree.SrcProjectBranch) ) { 362 var dir = oFso.GetFolder(oTree.SrcProjectBranch); 363 var dir_files = new Enumerator(dir.files); 364 for ( ; !dir_files.atEnd(); dir_files.moveNext()) { 365 if (oFso.GetExtensionName(dir_files.item()) == "asn") { 366 var cmd = oTask.Datatool + " -m " + dir_files.item() + " -sxo"; 367 var file_out = oTree.SrcProjectBranch + "\\" + oFso.GetBaseName(dir_files.item()); 368 if (oTask.ProjectType == "lib/dtd") { 369 cmd += " -fx " + file_out + ".dtd"; 370 } else if (oTask.ProjectType == "lib/xsd") { 371 cmd += " -fxs " + file_out + ".xsd"; 372 } else { 373 cmd += " -fjs " + file_out + ".jsd"; 374 } 375 execute(oShell,cmd); 376 } 377 } 378 } 379 } 380 381 // Copy project template from CVS/SVN 382 function CopyProjectTemplate(oShell, oTree, oTask) 383 { 384// var src = "/src/" + oTask.ProjectTemplate + "/*.*"; 385// GetFileFromTree(oShell, oTree, oTask, src, oTree.SrcProjectBranch) 386 GetSubtreeFromTree(oShell, oTree, oTask, "src/" + oTask.ProjectTemplate, oTree.SrcProjectBranch); 387 if (oTask.ProjectType == "lib" || 388 oTask.ProjectType == "lib/basic") { 389 GetSubtreeFromTree(oShell, oTree, oTask, "include/" + oTask.ProjectTemplate, oTree.IncludeProjectBranch); 390 } 391 392 var rm0 = new Array ( 393 "*.files" 394 ); 395 var rm = rm0; 396 if (oTask.ProjectType == "lib/asn" || 397 oTask.ProjectType == "lib/dtd" || 398 oTask.ProjectType == "lib/xsd" || 399 oTask.ProjectType == "lib/jsd") { 400 var rm1 = new Array ( 401 "*.lib" 402 ); 403 rm = rm0.concat(rm1); 404 405 if (typeof(oTask.Datatool) != "undefined" && ( 406 oTask.ProjectType == "lib/dtd" || 407 oTask.ProjectType == "lib/xsd" || 408 oTask.ProjectType == "lib/jsd")) { 409 ConvertDataSpec(oShell, oTree, oTask); 410 rm[rm.length] = "*.asn"; 411 } 412 } 413 for (var i = 0; i < rm.length; ++i) { 414 var cmd = "if exist " + oTree.SrcProjectBranch + "\\" + rm[i] + 415 " del " + oTree.SrcProjectBranch + "\\" + rm[i]; 416 execute(oShell,cmd); 417 } 418 } 419 420 function AdjustDataSpecProject(oShell, oTree, oTask) 421 { 422 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 423 424 var filename = oTree.SrcProjectBranch + "\\Makefile.in"; 425 var modelname = filename + ".old"; 426 427 // Makefile.in 428 VerboseEcho("Modifying " + filename); 429 oFso.CopyFile(filename, modelname); 430 var old_file = oFso.OpenTextFile(modelname, 1); 431 var new_file = oFso.CreateTextFile(filename, true); 432 while( !old_file.AtEndOfStream ) { 433 var old_line = old_file.ReadLine(); 434 if (old_line.indexOf("ASN_PROJ") == 0) { 435 if (oTask.ProjectType == "lib/asn") { 436 new_file.WriteLine("ASN_PROJ = " + oTask.ProjectName); 437 } else if (oTask.ProjectType == "lib/dtd") { 438 new_file.WriteLine("DTD_PROJ = " + oTask.ProjectName); 439 } else if (oTask.ProjectType == "lib/xsd") { 440 new_file.WriteLine("XSD_PROJ = " + oTask.ProjectName); 441 } else if (oTask.ProjectType == "lib/jsd") { 442 new_file.WriteLine("JSD_PROJ = " + oTask.ProjectName); 443 } 444 } else { 445 new_file.WriteLine(old_line); 446 } 447 } 448 old_file.Close(); 449 new_file.Close(); 450 oFso.DeleteFile(modelname, true); 451 452 // Makefile.projname.lib 453 filename = oTree.SrcProjectBranch + "\\Makefile." + oTask.ProjectName + ".lib"; 454 VerboseEcho("Creating " + filename); 455 new_file = oFso.CreateTextFile(filename, true); 456 new_file.WriteLine("LIB = " + oTask.ProjectName); 457 new_file.WriteLine("SRC = " + oTask.ProjectName + "__ " + oTask.ProjectName + "___ "); 458 new_file.Close(); 459 460 //dataspec 461 var dir = oFso.GetFolder(oTree.SrcProjectBranch); 462 var dir_files = new Enumerator(dir.files); 463 for ( ; !dir_files.atEnd(); dir_files.moveNext()) { 464 var ext = oFso.GetExtensionName(dir_files.item()); 465 var file_out = oTree.SrcProjectBranch + "\\" + oTask.ProjectName; 466 if (oTask.ProjectType == "lib/asn") { 467 if (ext == "asn") { 468 oFso.MoveFile(dir_files.item(),file_out+".asn"); 469 break; 470 } 471 } else if (oTask.ProjectType == "lib/dtd") { 472 if (ext == "dtd") { 473 oFso.MoveFile(dir_files.item(),file_out+".dtd"); 474 break; 475 } 476 } else if (oTask.ProjectType == "lib/xsd") { 477 if (ext == "xsd") { 478 oFso.MoveFile(dir_files.item(),file_out+".xsd"); 479 break; 480 } 481 } else if (oTask.ProjectType == "lib/jsd") { 482 if (ext == "jsd") { 483 oFso.MoveFile(dir_files.item(),file_out+".jsd"); 484 break; 485 } 486 } 487 } 488 } 489 490 // Change Makefile.in and Makefile.*.app 491 function AdjustProject(oShell, oTree, oTask) 492 { 493 if (oTask.ProjectType == "lib/asn" || 494 oTask.ProjectType == "lib/dtd" || 495 oTask.ProjectType == "lib/xsd" || 496 oTask.ProjectType == "lib/jsd") { 497 AdjustDataSpecProject(oShell, oTree, oTask) 498 return; 499 } 500 var XX_PROJ = "APP_PROJ"; 501 var XX_EXT = "app"; 502 var XX_APP = "APP"; 503 if (oTask.ProjectType == "lib" || 504 oTask.ProjectType == "lib/basic") { 505 XX_PROJ = "LIB_PROJ"; 506 XX_EXT = "lib"; 507 XX_APP = "LIB" 508 } 509 510 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 511 512 var filename = oTree.SrcProjectBranch + "\\Makefile.in"; 513 var modelname = filename + ".old"; 514 var samplename = ""; 515 var sourcename = ""; 516 var subtype = oTask.ProjectType.split("/"); 517 if (subtype.length > 1) { 518 subtype = subtype[1]; 519 } else { 520 subtype = "basic"; 521 } 522 var standard_sample_found = false; 523 524 525 // Makefile.in 526 VerboseEcho("Modifying " + filename); 527 oFso.CopyFile(filename, modelname); 528 var old_file = oFso.OpenTextFile(modelname, 1); 529 var new_file = oFso.CreateTextFile(filename, true); 530 while( !old_file.AtEndOfStream ) { 531 var old_line = old_file.ReadLine(); 532 if (old_line.indexOf( XX_PROJ ) == 0) { 533 var subproj = old_line.split(" "); 534 var new_line = ""; 535 for (var i = 0; i < subproj.length; i++) { 536 if (subproj[i] == subtype + "_sample") { 537 standard_sample_found = true; 538 sourcename = subproj[i]; 539 new_line += oTask.ProjectName + " "; 540 } else { 541 new_line += subproj[i] + " "; 542 } 543 } 544 new_file.WriteLine(new_line); 545 } else { 546 new_file.WriteLine(old_line); 547 } 548 } 549 old_file.Close(); 550 new_file.Close(); 551 oFso.DeleteFile(modelname, true); 552 553 if (!standard_sample_found) { 554 return; 555 } 556 557 modelname = oTree.SrcProjectBranch + "\\" + "Makefile." + sourcename + "." + XX_EXT; 558 if (sourcename == "" || !oFso.FileExists(modelname)) { 559 // Makefile.*.app 560 // lookup file name 561 var type = oTask.ProjectType; 562 type = type.replace(/[/]/g, "."); 563 type = oFso.GetExtensionName(type); 564 if (type == "") { 565 type = "basic"; 566 } 567 var src_folder = oFso.GetFolder(oTree.SrcProjectBranch); 568 var src_folder_contents = new Enumerator(src_folder.files); 569 modelname = ""; 570 for( ; !src_folder_contents.atEnd() && modelname == ""; src_folder_contents.moveNext()) { 571 var src_file = src_folder_contents.item(); 572 if (oFso.GetExtensionName(src_file) == XX_EXT) { 573 var t1 = oFso.GetFileName(src_file).replace(/_/g, "."); 574 var t2 = oFso.GetBaseName(t1); 575 while ( t1 != t2 ) { 576 if ( oFso.GetExtensionName( t1 ) == type) { 577 modelname = src_file; 578 break; 579 } 580 t1 = t2; 581 t2 = oFso.GetBaseName(t1); 582 } 583 } 584 } 585 if ( modelname == "") { 586 src_folder_contents.moveFirst(); 587 for( ; !src_folder_contents.atEnd(); src_folder_contents.moveNext()) { 588 var src_file = src_folder_contents.item(); 589 if (oFso.GetExtensionName(src_file) == XX_EXT) { 590 modelname = src_file; 591 break; 592 } 593 } 594 } 595 } 596 597 samplename = oFso.GetExtensionName( oFso.GetBaseName(modelname) ); 598 if (XX_EXT == "lib") { 599 ReplaceInFile( oFso, oTree.SrcProjectBranch, "app", samplename, oTask.ProjectName); 600 ReplaceInFile( oFso, oTree.SrcProjectBranch, "cpp", oTask.ProjectTemplate, oTask.ProjectName); 601 } 602 filename = oTree.SrcProjectBranch + "\\Makefile." + oTask.ProjectName + "." + XX_EXT; 603 VerboseEcho("Converting model file " + modelname + " into " + filename); 604 // open for reading 605 var old_makefile = oFso.OpenTextFile(modelname, 1); 606 // Create new makefile with new project name 607 var new_makefile = oFso.CreateTextFile(filename, true); 608 while( !old_makefile.AtEndOfStream ) { 609 var old_line = old_makefile.ReadLine(); 610 if (old_line.indexOf( XX_APP ) == 0) { 611 if (sourcename != "") { 612 if (old_line.indexOf(sourcename) >= 0) { 613 var tt = old_line.replace(sourcename,oTask.ProjectName); 614 old_line = tt; 615 } 616 new_makefile.WriteLine(old_line); 617 } else { 618 new_makefile.WriteLine(XX_APP + " = " + oTask.ProjectName); 619 } 620 } 621/* 622// rename source file ? 623 else if (old_line.indexOf("SRC") == 0) { 624 var subproj = old_line.split(" "); 625 var new_line = ""; 626 for (var i = 0; i < subproj.length; i++) { 627 if (i == 2) { 628 filename = oTree.SrcProjectBranch + "\\" + subproj[2] + ".cpp"; 629 if (oFso.FileExists(filename)) { 630 oFso.MoveFile(filename, oTree.SrcProjectBranch + "\\" + oTask.ProjectName + ".cpp"); 631 new_line += oTask.ProjectName + " "; 632 } else { 633 new_line += subproj[i] + " "; 634 } 635 } else { 636 new_line += subproj[i] + " "; 637 } 638 } 639 new_makefile.WriteLine(new_line); 640 } 641*/ 642 else { 643 if (old_line.indexOf(oTask.ProjectTemplate) >= 0) { 644 var tt = old_line.replace(oTask.ProjectTemplate,oTask.ProjectName); 645 old_line = tt; 646 } 647 if (old_line.indexOf("#") == 0 && old_line.indexOf(sourcename) > 0) { 648 var tt = old_line.replace(sourcename,oTask.ProjectName); 649 old_line = tt; 650 } 651 new_makefile.WriteLine(old_line); 652 } 653 } 654 old_makefile.Close(); 655 new_makefile.Close(); 656 oFso.DeleteFile(modelname, true); 657 658// MSVC customisation 659 modelname += ".msvc"; 660 filename += ".msvc"; 661 if (oFso.FileExists(modelname)) { 662 oFso.MoveFile(modelname, filename); 663 } 664 } 665 function ReplaceInFile(oFso, srcdir, srcext, findtxt, replacetxt) 666 { 667 var src_folder = oFso.GetFolder(srcdir); 668 var src_folder_contents = new Enumerator(src_folder.files); 669 var src_file; 670 for( ; !src_folder_contents.atEnd(); src_folder_contents.moveNext()) { 671 src_file = src_folder_contents.item(); 672 if (oFso.GetExtensionName(src_file) == srcext) { 673// break; 674 var old_name = src_file; 675 var new_name = src_file+"new"; 676 oFso.CopyFile(old_name, new_name); 677 old_name = src_file; 678 var old_makefile = oFso.OpenTextFile(new_name, 1); 679 var new_makefile = oFso.CreateTextFile(old_name, true); 680 while( !old_makefile.AtEndOfStream ) { 681 var old_line = old_makefile.ReadLine(); 682 var tt = old_line.replace(findtxt,replacetxt); 683 old_line = tt; 684 new_makefile.WriteLine(old_line); 685 } 686 old_makefile.Close(); 687 new_makefile.Close(); 688 oFso.DeleteFile(new_name, true); 689 } 690 } 691 } 692 // Run project tree builder 693 function RunPtb(oShell, oTree, oTask) 694 { 695 var ptb_platform = GetTargetPlatform(); 696 var sln_path; 697 if ( oTask.DllBuild ) { 698 sln_path = oTree.CompilersBranchDll + "\\build\\" + oTask.ProjectName + ".sln"; 699 } else { 700 sln_path = oTree.CompilersBranchStatic + "\\build\\" + oTask.ProjectName + ".sln"; 701 } 702 var ptb_path; 703 var conf = GetConfigs(oTask)[0]; 704 if (oTask.DllBuild) { 705 ptb_path = oTree.BinPathDll; 706 } else { 707 ptb_path = oTree.BinPathStatic; 708 } 709 ptb_path += "\\" + conf; 710 var ptb_flags; 711 ptb_flags = ""; 712 if ( oTask.DllBuild ) { 713 ptb_flags += " -dll"; 714 } 715 if (GetVerbose()) { 716 ptb_flags += " -cfg"; 717 } 718 ptb_flags += " -nobuildptb"; 719 ptb_flags += " -ext -nws -extroot \""; 720 var lib_dir = oTask.ToolkitPath + "\\lib\\"; 721 if ( oTask.DllBuild ) { 722 lib_dir += "dll"; 723 } else { 724 lib_dir += "static"; 725 } 726 var oFso = new ActiveXObject("Scripting.FileSystemObject"); 727 if (!oFso.FolderExists(lib_dir)) { 728 lib_dir = oTask.ToolkitPath + "\\"; 729 if ( oTask.DllBuild ) { 730 lib_dir += "dll"; 731 } else { 732 lib_dir += "static"; 733 } 734 lib_dir += "\\lib"; 735 } 736 ptb_flags += lib_dir + "\""; 737 var sysenv = oShell.Environment("PROCESS"); 738 sysenv("PTB_PLATFORM") = ptb_platform; 739 sysenv("PTB_FLAGS") = ptb_flags; 740 sysenv("PTB_PATH") = ptb_path; 741 sysenv("SLN_PATH") = sln_path; 742 sysenv("TREE_ROOT") = oTree.TreeRoot; 743 sysenv("BUILD_TREE_ROOT") = oTree.CompilersBranch; 744 sysenv("PTB_PROJECT_REQ") = "src\\"; 745 746 var ptb_command_line; 747 ptb_command_line = "\"" + oTree.CompilersBranch + "\\ptb.bat\""; 748 if (!GetVerbose()) { 749 WScript.Echo(ptb_command_line); 750 } 751 if ( execute(oShell, ptb_command_line) != 0) { 752 WScript.Echo("ERROR: project_tree_builder failed"); 753 WScript.Quit(1); 754 } 755 } 756 function AutoMountS(oTask) 757 { 758 var check = CheckNetworkDrive(); 759 if (check == "ok") { 760 return; 761 } 762 var message = "\n"; 763 message += "Generated solution uses libraries from a network location:\n"; 764 message += " " + GetDefaultLibFolder() + "\n"; 765 message += "It is recommended that this location is mapped to drive S:\n"; 766 if (check == "wrong") { 767 message += "\nDisk S: is now mapped to a wrong location!\n"; 768 if (oTask.AutoMapS == "ask") { 769 ShowMessage(message); 770 } else { 771 WScript.Echo(message); 772 } 773 return; 774 } 775 if (oTask.AutoMapS == "ask") { 776 message += "\nDo you want to map the network drive?\n"; 777 if (InputFlagYN(message)) { 778 MapNetworkDrive(); 779 } 780 } else { 781 if (oTask.AutoMapS == "yes") { 782 MapNetworkDrive(); 783 } else { 784 WScript.Echo(message); 785 } 786 } 787 } 788 // Open generated solution in MSVC IDE 789 function LoadSolution(oShell, oTree, oTask) 790 { 791 AutoMountS(oTask); 792 if ( GetFlagValue(WScript.Arguments, "-noopen", false)) { 793 return; 794 } 795 var sln_path = " \""; 796 if ( oTask.DllBuild ) { 797 sln_path += oTree.CompilersBranchDll; 798 } else { 799 sln_path += oTree.CompilersBranchStatic; 800 } 801 sln_path += "\\build\\" + oTask.ProjectName + ".sln\""; 802 803 WScript.Echo("Generated solution: " + sln_path); 804 if (GetOpenSolution()) { 805 execute(oShell, "start \"\" " + sln_path); 806 } 807 } 808 809 </script> 810 811 <script language="JScript"> 812 WScript.Echo(WScript.ScriptFullName); 813 var oShell = WScript.CreateObject("WScript.shell"); 814 815 var oTask = new Task(); 816 VerifyTask(oShell, oTask); 817 WScript.Echo("========================= Task ========================================"); 818 DumpTask(oTask); 819 820 var oTree = new Tree(oShell, oTask); 821 VerboseEcho("========================= Tree ========================================"); 822 DumpTree(oTree); 823 824 WScript.Echo("========================= CreateTreeStructure ========================="); 825 CreateTreeStructure(oTree, oTask); 826 WScript.Echo("========================= FillTree ===================================="); 827 FillTree (oShell, oTree); 828 WScript.Echo("========================= CopyPtb ====================================="); 829 CopyPtb (oShell, oTree, oTask); 830 WScript.Echo("========================= CopyDatatool ================================"); 831 CopyDatatool (oShell, oTree, oTask); 832 VerboseEcho("========================= CopyDlls ===================================="); 833 CopyDlls (oShell, oTree, oTask); 834 WScript.Echo("========================= CopyProjectTemplate ========================="); 835 CopyProjectTemplate(oShell, oTree, oTask); 836 WScript.Echo("========================= AdjustProject ==============================="); 837 AdjustProject (oShell, oTree, oTask); 838 WScript.Echo("========================= RunPtb ======================================"); 839 RunPtb (oShell, oTree, oTask); 840 WScript.Echo("========================= LoadSolution ================================"); 841 LoadSolution (oShell, oTree, oTask); 842 WScript.Echo("========================= done ========================================"); 843 </script> 844 </job> 845</package> 846 847