Улучшенная поддержка серверов компиляции

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Улучшенная поддержка серверов компиляции

В версии 3.13.0 поддерживается улучшенный механизм взаимодействия сервера турнира ej-contests и серверов компиляции e-compile.

Главным недостатком "старой" модели поддержки языков программирования было то, что конфигурации языков программирования в турнире были несинхронизированы с конфигурацией языков программирования в используемом сервере компиляции ej-compile.

  • При обновлении версий языков программирования информация о версиях не обновляется в конфигурационных файлах турниров.
  • Конфигурации языков программирования нужно копировать в каждый турнир.
  • При переключении на другой сервер компиляции информация о языках программирования не синхронизируется.

Новый механизм взаимодействия сервера турнира и сервера компиляции доступен, если при конфигурировании ejudge с помощью configure была указана опция --enable-compile-spool-dir, доступная с версии 3.8.0. Новый механизм не включается автоматически, он должен быть активирован вручную для каждого турнира. Для его активации нужно на странице списка турниров в serve-control перейти к редактированию настроек (Settings), перейти на вкладку Language Settings и в строке "Compilation server integration DISABLED" нажать кнопку "Enable". Затем потребуется выполнить операцию "COMMIT changes!", и после этого снова открыть экран настроек языков программирования при редактировании турнира. Новый экран настроек языков программирования сильно отличается от старого. Изменение сервера компиляции по умолчанию в турнире тоже потребует сохранения настроек турнира с помощью "COMMIT changes!".

Новая страница редактирования настроек языков программирования позволяет выбирать сервер компиляции для турнира, если доступно несколько серверов компиляции. Каждый язык программирования может активироваться и деактивироваться.

Настройка доступных языков программирования в турнире

Новый механизм взаимодействия сервера турнира с сервером компиляции включается, если установлен в положительное значение глобальный конфигурационный параметр enable_language_import, например так:

enable_language_import

Если в качестве основного сервера компиляции используется не сервер по умолчанию, его имя указывается в глобальном конфигурационном параметре compile_server_id, например так:

compile_server_id = "fast"

Сервер компиляции ej-compile при старте сохраняет актуальную конфигурацию поддерживаемых языков в каталог, задаваемый опцией --enable-compile-spool-dir. Таким образом актуальная конфигурация становится доступной серверу турниров ej-contests. Сервер турниров загружает актуальную конфигурацию языков программирования из файла и объединяет с локальными конфигурационными секциями языков программирования. Локальные конфигурационные секции могут модифицировать конфигурацию языков от сервера компиляции.

Список разрешенных языков программирования для турнира можно задать с помощью глобального конфигурационного параметра language_import.

Например, конфигурация

enable_language_import
language_import = "enable all"

включает все языки программирования, поддерживаемые сервером компиляции, кроме языков, явно помеченных default_disabled. В текущей версии к ним относятся языки postgres и custom.

Выборочно запретить некоторые языки программирования можно следующим образом:

enable_language_import
language_import = "enable all"
language_import = "disable python,vbnc"

Возможна конфигурация языков с разрешением избранных языков и запретом всех остальных:

enable_language_import
language_import = "disable all"
language_import = "enable g++,clang++"

Кроме того, можно изменить конфигурацию языка программирования с помощью явной секции:

enable_language_import
language_import = "disable all"
[language]
short_name = "g++"
compiler_env = "EJUDGE_FLAGS=-O2 -Wall -std=gnu++23"

У секции модификации конфигурации языка должен быть задан параметр short_name и не должен быть задан параметр id. Если для языка заданы дополнительные настройки с помощью секции [language], такой язык активируется по умолчанию. Его можно не указывать в language_import.