2024-10-14 12:14:01 +03:00
|
|
|
|
package _VisualDVM.Passes.All;
|
2024-10-14 15:19:13 +03:00
|
|
|
|
import Common.Passes.Pass;
|
|
|
|
|
|
import Common.Passes.PassException;
|
2024-10-11 00:00:30 +03:00
|
|
|
|
import Common.Utils.Utils_;
|
2024-10-09 22:01:19 +03:00
|
|
|
|
import _VisualDVM.Current;
|
2024-10-12 00:17:51 +03:00
|
|
|
|
import _VisualDVM.Global;
|
2024-10-24 23:40:24 +03:00
|
|
|
|
import _VisualDVM.GlobalData.Machine.Machine;
|
|
|
|
|
|
import _VisualDVM.GlobalData.Makefile.Makefile;
|
2024-10-09 22:21:57 +03:00
|
|
|
|
import _VisualDVM.GlobalData.Tasks.CompilationTask.CompilationTask;
|
|
|
|
|
|
import _VisualDVM.GlobalData.Tasks.TaskState;
|
2024-10-24 23:40:24 +03:00
|
|
|
|
import _VisualDVM.GlobalData.User.User;
|
2024-10-09 22:21:57 +03:00
|
|
|
|
import _VisualDVM.GlobalData.User.UserState;
|
2024-10-14 15:19:13 +03:00
|
|
|
|
import _VisualDVM.Passes.PassCode;
|
2024-10-09 22:21:57 +03:00
|
|
|
|
import _VisualDVM.ProjectData.LanguageName;
|
|
|
|
|
|
import _VisualDVM.ProjectData.Project.db_project_info;
|
2024-10-09 23:37:58 +03:00
|
|
|
|
public class Compile extends Pass<db_project_info> {
|
|
|
|
|
|
Pass subpass = null;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
CompilationTask compilationTask = null;
|
2024-10-24 23:40:24 +03:00
|
|
|
|
Machine machine = null;
|
|
|
|
|
|
User user = null;
|
|
|
|
|
|
Makefile makefile = null;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
@Override
|
2024-10-09 23:37:58 +03:00
|
|
|
|
protected PassCode necessary() {
|
2024-10-13 22:08:13 +03:00
|
|
|
|
return Global.mainModule.getProject().languageName.equals(LanguageName.fortran) ? PassCode.SPF_ParseFilesWithOrder : null;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public String getIconPath() {
|
2024-10-15 16:58:20 +03:00
|
|
|
|
return "/Common/icons/BlueStart.png";
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public String getButtonText() {
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected boolean canStart(Object... args) {
|
2024-10-25 00:50:19 +03:00
|
|
|
|
if (Global.mainModule.Check(Log, Current.Project) && Global.mainModule.getDb().CheckCurrent(Log, Machine.class, User.class, Makefile.class)) {
|
2024-10-13 22:08:13 +03:00
|
|
|
|
target = Global.mainModule.getProject();
|
2024-10-24 23:40:24 +03:00
|
|
|
|
//--
|
|
|
|
|
|
machine = Global.mainModule.getDb().getTable(Machine.class).getUI().getCurrent();
|
|
|
|
|
|
user= Global.mainModule.getDb().getTable(User.class).getUI().getCurrent();
|
|
|
|
|
|
makefile= Global.mainModule.getDb().getTable(Makefile.class).getUI().getCurrent();
|
|
|
|
|
|
//--
|
2023-09-17 22:13:42 +03:00
|
|
|
|
subpass = null;
|
|
|
|
|
|
compilationTask = null;
|
2024-10-24 23:40:24 +03:00
|
|
|
|
if (user.state != UserState.ready_to_work)
|
|
|
|
|
|
Log.Writeln_("Пользователь " +
|
|
|
|
|
|
Utils_.Brackets(
|
|
|
|
|
|
user.login
|
|
|
|
|
|
) +
|
2023-09-17 22:13:42 +03:00
|
|
|
|
" не проинициализирован\nПерейдите на вкладку 'Настройки компиляции и запуска',\n" +
|
|
|
|
|
|
" и выполните команду 'Инициализация пользователя'\n");
|
2024-10-24 23:40:24 +03:00
|
|
|
|
makefile.Validate(Log);
|
2023-09-17 22:13:42 +03:00
|
|
|
|
return Log.isEmpty();
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void performPreparation() throws Exception {
|
|
|
|
|
|
compilationTask = new CompilationTask();
|
2024-10-24 23:40:24 +03:00
|
|
|
|
compilationTask.machine_id = machine.id;
|
|
|
|
|
|
compilationTask.user_id = user.id;
|
|
|
|
|
|
compilationTask.makefile_id = makefile.id;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
compilationTask.project_path = target.Home.getAbsolutePath();
|
|
|
|
|
|
compilationTask.project_description = target.description;
|
|
|
|
|
|
//------------------------------------------
|
|
|
|
|
|
compilationTask.CompleteSummary(target.compilation_maxtime);
|
|
|
|
|
|
compilationTask.state = TaskState.Inactive;
|
2024-10-12 00:17:51 +03:00
|
|
|
|
Global.mainModule.getDb().Insert(compilationTask);
|
2024-10-14 12:54:52 +03:00
|
|
|
|
Utils_.forceDeleteWithCheck(compilationTask.getLocalWorkspace());
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void showPreparation() throws Exception {
|
2024-10-12 00:17:51 +03:00
|
|
|
|
Global.mainModule.getDb().compilationTasks.ShowUI(compilationTask.getPK());
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void body() throws Exception {
|
2024-10-24 23:40:24 +03:00
|
|
|
|
switch (machine.type) {
|
2023-09-17 22:13:42 +03:00
|
|
|
|
case Local:
|
2024-10-11 00:00:30 +03:00
|
|
|
|
if (Utils_.isWindows()) {
|
2024-10-14 15:19:13 +03:00
|
|
|
|
subpass = Global.mainModule.getPass(PassCode.WindowsLocalCompilation);
|
2023-09-17 22:13:42 +03:00
|
|
|
|
} else
|
2024-10-14 15:19:13 +03:00
|
|
|
|
subpass = Global.mainModule.getPass(PassCode.LinuxLocalCompilation);
|
2023-09-17 22:13:42 +03:00
|
|
|
|
break;
|
|
|
|
|
|
case Undefined:
|
2024-01-08 20:37:16 +03:00
|
|
|
|
case MVS_cluster:
|
2024-10-24 23:40:24 +03:00
|
|
|
|
throw new PassException("Компиляция не реализована для типа машины " +
|
|
|
|
|
|
Utils_.DQuotes(machine.type));
|
2023-09-17 22:13:42 +03:00
|
|
|
|
default:
|
2024-10-14 15:19:13 +03:00
|
|
|
|
subpass = Global.mainModule.getPass(PassCode.RemoteCompilation);
|
2023-09-17 22:13:42 +03:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
2024-10-24 23:40:24 +03:00
|
|
|
|
subpass.Do(compilationTask, Global.mainModule.getProject());
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected boolean validate() {
|
|
|
|
|
|
return (subpass != null) && subpass.isDone();
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void showFinish() throws Exception {
|
2024-10-12 00:17:51 +03:00
|
|
|
|
Global.mainModule.getDb().compilationTasks.ShowUI(compilationTask.getPK());
|
2024-10-15 02:32:52 +03:00
|
|
|
|
Global.mainModule.getUI().getDebugWindow().ShowLastCompilationTask();
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|