194 lines
6.7 KiB
Java
194 lines
6.7 KiB
Java
package _VisualDVM.GlobalData.Compiler;
|
|
import Common.Utils.Utils_;
|
|
import _VisualDVM.Current;
|
|
import Common.Database.Objects.iDBObject;
|
|
import _VisualDVM.Validators.DVMHelpParser;
|
|
import _VisualDVM.GlobalData.CompilerEnvironment.CompilerEnvironmentsSet;
|
|
import _VisualDVM.GlobalData.CompilerOption.CompilerOptionsSet;
|
|
import _VisualDVM.GlobalData.Machine.Machine;
|
|
import _VisualDVM.ProjectData.Files.DBProjectFile;
|
|
import _VisualDVM.ProjectData.LanguageName;
|
|
import com.sun.org.glassfish.gmbal.Description;
|
|
public class Compiler extends iDBObject {
|
|
public int machine_id = -1;
|
|
public String description = "";
|
|
public CompilerType type = CompilerType.dvm;
|
|
public String home_path = ""; //домашняя папка. нужна для двм компиляторов, в теории и для остальных может сгодиться, например для установки окружения ifort под виндой
|
|
public String call_command = ""; //непосредственно вызов компилятора.
|
|
public String version_command = "";//команда запроса версии компилятора.
|
|
public String help_command = "";// команда запроса help
|
|
public String version = "?";
|
|
public String revision = "?";
|
|
//-
|
|
@Description("IGNORE")
|
|
public boolean helpLoaded = false;
|
|
@Description("IGNORE")
|
|
public String helpText = "";
|
|
//-
|
|
@Description("IGNORE")
|
|
public boolean versionLoaded = false;
|
|
@Description("IGNORE")
|
|
public String versionText = "";
|
|
//-
|
|
public CompilerOptionsSet options = new CompilerOptionsSet();
|
|
public CompilerEnvironmentsSet environments = new CompilerEnvironmentsSet();
|
|
//-
|
|
public Compiler() {
|
|
}
|
|
public Compiler(Machine machine,
|
|
String description_in,
|
|
CompilerType type_in,
|
|
String call_command_in,
|
|
String version_command_in,
|
|
String help_command_in
|
|
) {
|
|
machine_id = machine.id;
|
|
description = description_in;
|
|
type = type_in;
|
|
call_command = call_command_in;
|
|
version_command = version_command_in;
|
|
help_command = help_command_in;
|
|
}
|
|
public void ResetHelp() {
|
|
helpLoaded = false;
|
|
helpText = "";
|
|
options.clear();
|
|
environments.clear();
|
|
}
|
|
public void ResetVersion() {
|
|
versionLoaded = false;
|
|
versionText = "";
|
|
}
|
|
public void ParseHelp() {
|
|
switch (type) {
|
|
case dvm:
|
|
DVMHelpParser.ReadOptions(this);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
public void ParseVersion() {
|
|
switch (type) {
|
|
case dvm:
|
|
String [] lines = versionText.split("\n");
|
|
if (lines.length>=3) {
|
|
String[] data = lines[2].split(" ");
|
|
if (data.length >= 4)
|
|
version = data[3].replace(",", "");
|
|
if (data.length >= 7) revision = data[6].replace(",", "");
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
@Override
|
|
public boolean isVisible() {
|
|
return Current.HasMachine() && Current.getMachine().id == machine_id;
|
|
}
|
|
//todo понять как извлекать версию чтобы выдавать нормальную инфу.
|
|
@Override
|
|
public String toString() {
|
|
return call_command;
|
|
}
|
|
public String getStyleOptions(DBProjectFile program) {
|
|
String res = "";
|
|
switch (type) {
|
|
case gnu:
|
|
switch (program.languageName) {
|
|
case fortran:
|
|
switch (program.style) {
|
|
case free:
|
|
res = "-ffree-form";
|
|
break;
|
|
case extended:
|
|
res = "-ffixed-line-length-132";
|
|
break;
|
|
case fixed:
|
|
res = "-ffixed-form";
|
|
break;
|
|
case none:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case dvm:
|
|
switch (program.languageName) {
|
|
case fortran:
|
|
switch (program.style) {
|
|
case fixed:
|
|
case extended:
|
|
res = "-FI";
|
|
break;
|
|
case free:
|
|
res = "-f90";
|
|
break;
|
|
case none:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case intel:
|
|
switch (program.languageName) {
|
|
case fortran:
|
|
switch (program.style) {
|
|
case fixed:
|
|
case extended:
|
|
res = "-fixed";
|
|
break;
|
|
case free:
|
|
res = "-free";
|
|
break;
|
|
case none:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return res;
|
|
}
|
|
//todo как то извлекать/заполнять версии компилятора?
|
|
public String getDescription() {
|
|
return description;
|
|
}
|
|
public String getSpecialLinkCommand(LanguageName languageName) {
|
|
switch (type) {
|
|
case dvm:
|
|
switch (languageName) {
|
|
case fortran:
|
|
return "flink";
|
|
case c:
|
|
return "clink";
|
|
}
|
|
break;
|
|
}
|
|
return "";
|
|
}
|
|
public String getSpecialCompilationCommand(LanguageName languageName) {
|
|
switch (type) {
|
|
case dvm:
|
|
switch (languageName) {
|
|
case fortran:
|
|
return "f";
|
|
case c:
|
|
return "c";
|
|
}
|
|
break;
|
|
}
|
|
return "";
|
|
}
|
|
public String getHelpCommand() {
|
|
return Utils_.DQuotes(call_command) + " " + help_command;
|
|
}
|
|
public String getVersionCommand() {
|
|
return Utils_.DQuotes(call_command) + " " + version_command;
|
|
}
|
|
public String getVersionInfo(){
|
|
return "v="+version+" r="+revision;
|
|
}
|
|
}
|