
Процедура ПередСборкой(Знач РабочийКаталог) Экспорт

	КаталогМодулей = ОбъединитьПути(РабочийКаталог, "oscript_modules");
	УдалитьФайлы(КаталогМодулей, ПолучитьМаскуВсеФайлы());

	СистемнаяИнформация = Новый СистемнаяИнформация;
	ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
	Если ЭтоWindows Тогда
		ИмяУтилиты = "opm.bat";
	Иначе
		ИмяУтилиты = "opm";
	КонецЕсли;

	СтрокаЗапуска = СтрШаблон("%1 install -l", ИмяУтилиты);
	ВыполнитьОбязательныйШаг(СтрокаЗапуска, РабочийКаталог);
	
	СобираемаяВерсия = Описание.Свойства().Версия;
	Если СобираемаяВерсия = "0.14.4" Тогда
		УдалитьФайлы(ОбъединитьПути(КаталогМодулей, "gitrunner"));
		СтрокаЗапуска = "oscript src/cmd/opm.os install -l";
		ВыполнитьОбязательныйШаг(СтрокаЗапуска, РабочийКаталог);
		
		// Подчищаем за 1bdd
		// TODO: сделать зависимости этапа разработки
		УдалитьФайлы(ОбъединитьПути(КаталогМодулей, "bin"));
		УдалитьФайлы(ОбъединитьПути(КаталогМодулей, "1bdd"));
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ВыполнитьОбязательныйШаг(Знач СтрокаЗапуска, Знач РабочийКаталог)
	Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог);
	Процесс.Запустить();
	Процесс.ОжидатьЗавершения();
	
	Если Процесс.КодВозврата <> 0 Тогда
		ВызватьИсключение "Ошибка сборки пакета";
	КонецЕсли;
КонецПроцедуры

ПутьКСценариюКонстант = ОбъединитьПути(ТекущийСценарий().Каталог, "src/core", "Модули", "КонстантыOpm.os");
Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант);

Описание.Имя("opm")
		.Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта)
		.ВерсияСреды("1.0.19")
		.ЗависитОт("fs", "0.4.1")
		.ЗависитОт("asserts", "0.4.0")
		.ЗависитОт("json", "1.0.1")
		.ЗависитОт("fluent", "0.3.1")
		.ЗависитОт("logos", "1.0.2")
		.ЗависитОт("cmdline", "0.6.2")
		.ЗависитОт("tempfiles", "0.2.2")
		.ЗависитОт("gitrunner", "1.5.1")
		.ВключитьФайл("src")
		.ВключитьФайл("oscript_modules")
		.ВключитьФайл("packagedef")
		.ОпределяетКласс("КэшУстановленныхПакетов", "src/core/Классы/КэшУстановленныхПакетов.os")
		.ОпределяетКласс("МенеджерПолученияПакетов", "src/core/Классы/МенеджерПолученияПакетов.os")
		.ОпределяетКласс("МенеджерУстановкиПакетов", "src/core/Классы/МенеджерУстановкиПакетов.os")
		.ОпределяетКласс("ОписаниеПакета", "src/core/Классы/ОписаниеПакета.os")
		.ОпределяетКласс("СборщикПакета", "src/core/Классы/СборщикПакета.os")
		.ОпределяетКласс("СерверПакетов", "src/core/Классы/СерверПакетов.os")
		.ОпределяетКласс("СериализацияМетаданныхПакета", "src/core/Классы/СериализацияМетаданныхПакета.os")
		.ОпределяетКласс("УстановкаПакета", "src/core/Классы/УстановкаПакета.os")
		.ОпределяетМодуль("КонстантыOpm", "src/core/Модули/КонстантыOpm.os")
		.ОпределяетМодуль("НастройкиOpm", "src/core/Модули/НастройкиOpm.os")
		.ОпределяетМодуль("РаботаСВерсиями", "src/core/Модули/РаботаСВерсиями.os")
		.ОпределяетМодуль("РаботаСОписаниемПакета", "src/core/Модули/РаботаСОписаниемПакета.os")
		.ОпределяетМодуль("РаботаСПакетами", "src/core/Модули/РаботаСПакетами.os")
		.ОпределяетМодуль("РежимУстановкиПакетов", "src/core/Модули/РежимУстановкиПакетов.os")
		.ИсполняемыйФайл("src/cmd/opm.os");		
