
[[building_from_sources]]
### Cборка программы из исходников

Программа имеет 2 режима сборки [.hl]#ZCAD# и [.hl]#ZCADELECTROTECH#, в первом только базовые CAD функции, во втором плюсом чуток электрической специфики.
Советую пробовать собрать [.hl]#ZCADELECTROTECH#, т.к. я его сам всегда использую, соответственно он более стабилен.

Простая компиляция исходников даст вам только файл [.filepath]#zcad.exe#, но для для работы нужны некоторые другие файлы, без которых программа не работает
(не говоря о [.filepath]#allgeneratedfiles.inc#, [.filepath]#zcadversion.inc# и [.filepath]#buildmode.inc# без которых даже не скомпилируется)

Для автоматизации процесса сборки был написан скрипт на основе системы сборки [.hl]#make#.
Опишу его использование применительно к тридцати двух битным [.hl]#Lazarus2.2# и [.hl]#fpc3.2.2# под управлением ОС [.hl]#Windows#

Итак:

#### Установка Lazarus
Устанавливаем последний релизный [.hl]#Lazarus# (2.2 на момент написания текста). Гарантированно [.hl]#ZCAD# компилится в транковом [.hl]#Lazarus# транковом [.hl]#fpc#,
с релизами бывают нюансы, но они решаемы.

Запускаем, проверяем работоспособность [.hl]#Lazarus# - собираем тестовый пустой проект. тут проблем быть не должно.

Ищем идущую в комплекте [.hl]#fpc# утилиту [.hl]#make#, она скорее всего лежит тут [.filepath]#lazarus\fpc\3.2.2\bin\i386-win32\make.exe# но, мало ли.
В дальнейшем я считаю что Lazarus установлен на диск [.filepath]#C#, и путь для запуска [.hl]#make# соответственно [.filepath]#C:\lazarus\fpc\3.2.2\bin\i386-win32\make.exe#
если что - уточнить по месту)).

Также еще понадобятся такие пути:

* путь к Lazarus [.filepath]#C:\lazarus#

* путь к первичному файлу настроек Lazarus, по умолчанию он [.filepath]#C:\Users\<ИМЯПОЛЬЗОВАТЕЛЯ>\AppData\Local\lazarus#

Если имя пользователя у вас на кириллице, примите мои поздравления! Требуются дополнительные действия, пользователи с нормальными именами спокойно переходят к пункту 2.

Кириллица в путях не поддерживается утилитой [.hl]#make#, или я с этим не разобрался. Придется "перенастроить" Lazarus чтоб настройки хранились по 'нормальным' путям.
Для этого в папке [.filepath]#C:\lazarus# создаем файл [.filepath]#runlazarus.bat# следующего содержания:

[.shell]#startlazarus.exe --pcp=C:\lazarus\mylazcfg#

и далее всегда используем его для запуска Lazarus IDE, все что написано ниже вам следует отредактировать из расчета что путь к настройкам Lazarus будет [.filepath]#C:\lazarus\mylazcfg#

#### Получение ZCAD
Клонируем исходники зкада (или скачиваем архивом, но это плохо, лучше клонировать [.shell]#git# ом). Некоторые части исходников оформлены
субмодулями [.hl]#git# , поэтому:

WARNING: субмодули [.hl]#git# используемые [.hl]#ZCAD# нужно инициализировать и обновить.

По описанным выше причинам путь до папки [.filepath]#zcad# не
должен содержать не латинские символы
Тут будет много файлов\папок, но основные:

* [.filepath]#zcad\cad_source# - папка с исходниками зкад

* [.filepath]#zcad\environment# - папка с файлами окружения программы и исходник небольшой программы [.hl]#typeexporter# настраивающей исходники зкад для компиляции

* [.filepath]#zcad\Makefile# - файл с скриптами установки

* [.filepath]#zcad\cad# - данной папки изначально нет, будет создана в пункте 4 и содержит скомпилированный дистрибутив zcad со всеми нужными файлами

#### Установка пакетов от которых зависит ZCAD
Для облегчения я приложил пакеты от которых зависит [.hl]#ZCAD# в дистрибутив исходников (за исключением идущих в составе [.hl]#Lazarus#). Открываем командную строку в папке [.filepath]#zcad#,
там где лежит файл [.filepath]#Makefile#

Нужно установить в [.hl]#Lazarus# пакеты требуемые для компиляции [.hl]#ZCAD#, данный пункт выполняется только один раз, для свеже установленного [.hl]#Lazarus#, если пакеты установлены,
пропускаем данный пункт (но если что, то повторное выполнение ничего страшного не несет).
Выполняем:

[.shell]#C:\lazarus\fpc\3.2.2\bin\i386-win32\make installpkgstolaz LP=C:\lazarus PCP=C:\Users\<ИМЯПОЛЬЗОВАТЕЛЯ>\AppData\Local\lazarus#

[.hl]#installpkgstolaz# это пропишет в конфигах [.hl]#Lazarus# требуемые пакеты из [.filepath]#zcad\cad_source\other# и [.filepath]#zcad\cad_source\components# и пересобирет [.hl]#Lazarus#.
По неясным причинам пересборка в данном пункте иногда завершается ошибкой, но ничего страшного, просто идем дальше, [.hl]#Lazarus# докомпилирует все нужное в 4.

#### Компиляция ZCAD
Собственно запускаем компиляцию зкад, запустив следующее:

[.shell]C:\lazarus\fpc\3.2.2\bin\i386-win32\make cleanzcadelectrotech LP=C:\lazarus PCP=C:\Users\<ИМЯПОЛЬЗОВАТЕЛЯ>\AppData\Local\lazarus#

[.hl]#cleanzcadelectrotech# - данная цель выполнит сборку программы в режиме [.hl]#ZCADELECTROTECH#, замените на [.hl]#cleanzcad# - если желаете режим [.hl]#ZCAD#

Скрипт выполнит следующее:

* [.hl]#СОТРЕТ# папки [.filepath]#zcad\cad# и [.filepath]#zcad\cad_source\autogenerated# если они присутствует [.hl]#СО ВСЕМ ИХ СОДЕРЖИМЫМ# ничего не спрашивая
* создаст папки [.filepath]#zcad\cad# и [.filepath]#zcad\cad_source\autogenerated#
* скопирует нужные для работы файлы из [.filepath]#zcad\environment\runtimefiles# в [.filepath]#zcad\cad#
* создаст файл [.filepath]#zcad\cad_source\zcadversion.inc#
* создаст файл [.filepath]#zcad\cad_source\autogenerated\buildmode.inc#
* скомпилирует [.filepath]#zcad\cad_source\cad_source\utils\typeexporter.lpi# и запустит его с нужными параметрами, [.hl]#typeexporter# в свою очередь наполнит [.filepath]#zcad\cad_source\autogenerated# в том числе создаст [.filepath]#zcad\cad_source\autogenerated\allgeneratedfiles.inc# (только после этого шага зкад может быть собран)
* скомпилирует [.hl]#ZCAD#

Если все прошло нормально, имеем наполненную как надо папку [.filepath]#zcad\cad#, в том числе свежесозданный запускаемый бинарник [.filepath]#zcad\cad\bin\i386-win32\zcad.exe#
В дальнейшем можно просто открыть в Lazarus файл [.filepath]#zcad\cad_source\zcad.lpi# и смотреть-собирать исходники как обычно в IDE

NOTE: [.hl]#Lazarus#, [.hl]#FPC# и [.hl]#ZCAD# развивающиеся проекты, информация устаревает и бывают нюансы. В частности на данный момент из-за бага FPC
https://gitlab.com/freepascal.org/fpc/source/-/issues/39387 в IDE работает только полная пересборка зкада, т.е. в Lazarus если просто нажать
[.hl]#F9# зкад не соберется с вылетом компилятора, при любых изменениях надо всегда выполнять полную пересборку [.hl]#shift-F9#
