вторник, 1 ноября 2011 г.

FPC-Notes: Начало работы

Предварительно хочу сказать, что данная заметка является непосредственным продолжением «Что такое Free Pascal?», а не «Hello, World!»

Очевидно, чтобы использовать Free Pascal, первым делом нам надо откуда-то его взять и установить на свой компьютер. Для этого нужно зайти на официальный сайт в раздел «Download» [1] и выбрать дистрибутив для своей системы. Далее следовать инструкциям на сайте. Для разных систем предусмотрены различные адекватные системы установки (на врезке показан установщик для Win32), в том числе deb- и rpm-пакеты для распространенных дистрибутивов Linux, dmg-образ для Mac OS X и т.д.

Таким образом вы получите последний стабильный релиз. Пользователям Linux имеет смысл предварительно выяснить, нет ли пакета fpc в репозиториях родного дистрибутива... Скорее всего он там найдется, но далеко не факт, что свежей версии1.

Версии

ветвь версия svn
стабильная 2.4.4 нет
2.4.5 → 2.4.6 [fixes_2_4]
бета 2.5.1 → 2.6.0 [fixes_2_6]
нестабильная 2.7.1 → 2.8.0 (?) [trunk]

Табл. 1: Ветви и версии Free Pascal

Чтобы не возникало недопонимания и путаницы, давайте сразу определимся с версиями. Во-первых, разработка Free Pascal делится на две ветви — стабильную и нестабильную. Внешнее отличие между ними — вторая цифра версии — четная для стабильной ветви и нечетная для нестабильной соответственно. Нестабильная предназначена для тех, кто хочет поучаствовать в разработке, нуждается в наиновейших возможностях, или просто любит эксперименты. Во-вторых, третья цифра версии четная для официальных релизов, и нечетная для всего остального. Все остальное здесь — это и нестабильная ветка, и текущие, еще не вошедшие в релиз, исправления в стабильной. Постепенно исправления накапливаются, тестируются и попадают в следующий стабильный релиз, вторая цифра номера которого увеличивается на два. Это общепринятая, хоть и не обязательная практика для свободных проектов, так что у пользователей, например, Linux такая схема нумерации не должна вызвать затруднений.

В некоторые периоды времени (например, сейчас, когда я все это пишу) существует не две, а три ветви разработки: третья — это бета следующего мажорного релиза, т.е. релиза, который отличается от предыдущего не только исправлениями, но и новым функционалом (и, как минимум, второй цифрой в номере). На врезке (табл. 1) показана сегодняшняя2 ситуация. Понимать ее следует так — если вы сейчас тем или иным образом, о которых мы поговорим чуть ниже, получите с официального сайта дистрибутив Free Pascal, он может быть одной из следующих версий:

2.4.4
— стабильный релиз, берется с основной страницы скачивания, рекомендуется для реальной работы, а так же для начального знакомства с компилятором.
2.4.5
— исправления к стабильному релизу. В дальнейшем эта версия должна превратиться в релиз 2.4.6 (если не получится так, что 2.6.0 выйдет раньше). Рекомендуется в том случае, если вам важны именно эти исправления. Шансов, что в данной версии что-то поломано относительно релиза, немного, поскольку никакая новая функциональность сюда не вносится — только исправление ошибок, но тем не менее, полностью исключить такую возможность нельзя. Можно сказать, что эта версия для тех, кто активно пользуется багтрекером [2].
2.5.1
— то же самое, что 2.6.0-rc1, если вы понимаете, о чем я. То есть — это готовящийся к выходу релиз 2.6.0. Внесение новой функциональности сюда также заморожено, идет доводка и тестирование. Однако от 2.4.x он отличается именно новыми возможностями. Рекомендуется... дождаться релиза, судя по всему. Взять эту версию можно только с SVN, в отличие от всех остальных.
2.7.1
— нестабильная ветка, разработка будущих версий. Я не могу с уверенностью сказать, что это — готовящийся релиз 2.8.0, поскольку а) разработчики могут решить выпустить после 2.6 сразу 3.0, если количественно и качественно он покажется слишком новым (или просто так захотят), и б) некоторые функции, уже работающие, но недостаточно стабильные, могут не войти в следующий релиз, а остаться в дальнейшей разработке надолго. Рекомендуется тем, кто хочет сам принять участие в разработке, кто любит эксперименты и не боится трудностей. Поскольку сюда постоянно добавляется новый функционал, ни о какой стабильности речи и быть не может.

Что еще можно сказать о версиях? Во-первых, когда вы это будете читать, номера версий могут быть уже другими, тогда как общий принцип нумерации, скорее всего, сохранится. Во-вторых, бо́́льшую часть времени предрелизной ветви не существует, есть только стабильная и нестабильная (2.4.x и 2.7.1 на данный момент).

Lazarus

Что касается проекта Lazarus, он еще не дошел до стадии первого релиза... Впрочем, общие принципы нумерации те же, только стабильность (относительная) определяется по третьей цифре номера, а не по второй. Сейчас последний релиз — 0.9.303, ветка исправлений к нему имеет номер версии 0.9.30.1, а ветка разработки — 0.9.31.

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

Где взять?

Из репозитория своего родного дистрибутива Linux

Для этого нужно пользоваться именно этой операционной системой, кроме того, в дистрибутиве должен присутствовать пакет fpc. Устанавливается штатными средствами дистрибутива.

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

Последний релиз с официального сайта

Идем на страницу загрузки Free Pascal [1] или Lazarus [3], выбираем свою платформу, далее действуем по инструкциям.

Плюсы — последняя стабильная версия, предусмотрены наиболее популярные форматы пакетов под основные платформы (т.е., скорее всего проблем с зависимостями тоже не будет). Минус — по сравнению с предыдущим вариантом — за обновлениями придется следить самостоятельно.

Снапшот (ночная сборка) с официального сайта

Пусть проклянут меня пуристы, но адекватного русского термина для перевода английского «snapshot» лично я не знаю. Это сборка, сделанная в какой-то момент времени (как правило, ночью в автоматическом режиме, впрочем, что считать ночью для проекта, разработчики которого располагаются в самых разных часовых поясах — тот еще вопрос) из текущих исходников. Вообще говоря, работоспособность такой сборки никто не обещает, хотя случаи, когда что-то не работает, довольно редки.

Чтобы загрузить снапшот версии исправлений или текущей нестабильной версии (см. выше о версиях), следует отправиться на страницу разработки [4] на официальном сайте — там даются ссылки на соответствующие архивы с исходниками, или же на ftp-сервер [5], в подкаталоги snapshot/fixes и snapshot/trunk соответственно — за бинарными сборками под свою платформу. Снапшоты Lazarus брать на соответствующей странице его сайта [6]. Архив с бинарниками следует распаковать в соответствии с правилами своей операционной системы, прописать нужные переменные среды и т.д. Архив же с исходниками — распаковать и скомпилировать... Впрочем, чуть ниже мы еще поговорим, что делать с исходниками.

Плюсы — самая свежая версия. Минусы — не факт, что работает, устанавливать нужно вручную, понимая, как и что там делается.

Текущие исходники с SVN

SVN — Subversion — централизованная система контроля версий. В настоящее время управление исходниками Free Pascal производится именно в ней. Это одна из наиболее популярных систем контроля версий вообще и самая популярная среди централизованных. Программа-клиент SVN существует практически для всех более-менее распространенных платформ.

Инструкция по получению с SVN исходников Free Pascal находится на уже упоминавшейся странице разработки [4]. Собственно, даже не знакомый с SVN человек может воспользоваться одной из команд, показанных ниже. Впрочем, документацию по Subversion [7] почитать все равно не помешает.

          # нестабильная версия
$ svn checkout http://svn.freepascal.org/svn/fpc/trunk fpc
          # или — исправления к релизу
$ svn checkout http://svn.freepascal.org/svn/fpc/branches/fixes_2_4 fpc
          # или — готовящийся релиз
$ svn checkout http://svn.freepascal.org/svn/fpc/branches/fixes_2_6 fpc
          # и/или — Lazarus
$ svn checkout http://svn.freepascal.org/svn/lazarus/trunk lazarus

Преимущество этого способа в максимальной оперативности, даже по сравнению с предыдущим. Кроме того, можно переключаться между ревизиями кода, например, для поиска ошибки. Еще один плюс — в дальнейшем при обновлении не нужно будет качать все исходники, достаточно командой svn update вытянуть только то, что реально изменилось.

В настоящее время все более популярны становятся не централизованные, а распределенные системы контроля версий... Для тех, кто, как и я, предпочитает Git [8], могу порекомендовать использовать дополнение git-svn [9], предназначенное для работы через локальный git-репозиторий с удаленным svn-репозиторием. Очень удобно.

В этом случае нужно использовать команду git svn clone вместо svn checkout и git svn rebase вместо svn update.

Установка

Как я уже говорил, в случае релиза установка не составит каких-либо сложностей — дистрибутив уже упакован под соответствующие системы вместе с рабочими настройками по-умолчанию. Другой случай — бинарный снапшот. Взятый с ftp архив нужно распаковать куда-то и отследить некоторые моменты:

  • Переменная среды PATH должна содержать путь к исполняемым файлам Free Pascal — подкаталог ./bin или ./bin/<arch>-<os> в каталоге установки.
    • Кроме того, под Linux следует также убедиться, что PATH содержит путь к исполняемому файлу ppc386 (ppcx64 etc.), который располагается в ./lib/fpc/<версия>. А лучше всего сделать на него симлинк в ./bin.
  • Должен быть установлен (и находиться через PATH) пакет BinUtils [10].
  • Следует правильно указать пути к модулям (они находятся в подкаталогах каталога установки ./lib/fpc/<версия>/units/<arch>-<os>/* или ./units/<arch>-<os>/*) в конфигурационном файле fpc.cfg, который компилятор будет искать в нижеследующем порядке.
    • Под Linux и другими unix-подобными ОС:
      1. Домашний каталог (в этом случае ищется скрытый файл с точкой — .fpc.cfg);
      2. Каталог, указанный в переменной окружения PPC_CONFIG_PATH;
      3. В каталоге etc рядом с каталогом компилятора — если, например, коспилятор размещен в /usr/local/bin, то fpc.cfg будет искаться в /usr/local/etc;
      4. В каталоге /etc.
    • Под всеми прочими ОС:
      1. Каталог, указанный в переменной окружения PPC_CONFIG_PATH;
      2. Каталог компилятора.
    Сами пути к модулям в файле выглядят примерно так (мой рабочий вариант):
    # searchpath for units and other system dependent things
    -Fu/home/iws/opt/fpc/lib/fpc/$fpcversion/units/$fpctarget
    -Fu/home/iws/opt/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
    -Fu/home/iws/opt/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
    где /home/iws/opt/fpc — собственно каталог, куда установлен Free Pascal, а загадочные выражения $fpcversion и $fpctarget — специальные макросы, которые разворачиваются в соответствующие значения (у меня это получается 2.7.1 и x86_64-linux соответственно).

Ну, и нам осталось понять, что же делать с исходниками, если мы решили скачать именно их, или воспользоваться SVN... И первое, что нам придется сделать — это установить бинарную версию, поскольку Free Pascal написан на Free Pascal. Важно: это должна быть последняя стабильная версия, или снапшот того же времени, что и исходники — снапшот даже суточной давности может не подойти (а может и подойти, это уж как повезет). Понятно, что со стабильной будет проще. Впрочем, зато для некоторых систем (а именно — для DOS и Windows) можно скачать с ftp-сервера [5] только базовый набор — файл base_w32_vXY.zip или base_go32_vXY.zip, находящийся рядом с соответствующим бинарным снапшотом.

Если бинарный компилятор корректно установлен, то достаточно в каталоге исходников выполнить две команды: make build и затем make install. Впрочем, должен отметить существенный недостаток данного способа — факт инсталляции нигде не фиксируется и выполнить обратное действие, т.е. — корректную отмену установки не получится. Поэтому лучше выбрать для установки какое-то отдельное место, которое легко очистить и указать его, скомандовав make install PREFIX=<путь>. Собственно, как можно догадаться из вышеизложенного, я использую make install PREFIX=$HOME/opt/fpc.

Замечу, что для беспроблемной сборки из исходников необходимо иметь установленный GNU Make [11], которого на не-unix системах может и не оказаться. Более того, если под Windows у вас установлены какие-то системы разработки, такие как Delphi или Visual Studio, то может быть вызван make.exe из их поставки, а он не совсем совместим. Соответственно, нужно установить GNU Make и вызывать именно его (например, указав полный путь к исполняемому файлу make.exe).

Что касается Lazarus, то во-первых, не стоит его инсталлировать куда-либо в системные каталоги — поскольку в процессе обычной работы с ним его весьма вероятно придется пересобирать, имеет смысл оставить его там, где у пользователя есть полный доступ на запись файлов. Во-вторых, компилировать его лучше командой make bigide, которая сразу соберет и установит в IDE компоненты основных пакетов. В-третьих, для его полноценной работы требуются исходники компилятора (точнее RTL), путь к ним вероятнее всего придется указать при первом запуске. При установке Lazarus через релизный установщик, или из снапшота, скорее всего, обо всем этом думать не придется — он попросту устанавливает с собой все необходимые части Free Pascal, а вот при сборке из исходников — нужно учитывать.

В завершение этой заметки опишу свою собственную конфигурацию.

  1. У меня установлен пакет fpc из дерева портежей (основного репозитория) Gentoo. Это, соответственно, стабильный релиз (не самый последний, но близко к нему).
  2. По адресу $HOME/opt/src/freepascal находится git-репозиторий с текущими исходниками, получаемыми посредством git-svn.
  3. В каталог $HOME/opt/fpc установлен Free Pascal, собранный из этих исходников. Каталог с исполняемыми файлами $HOME/opt/fpc/bin добавлен в переменную среды PATH, причем в начало, чтобы fpc оттуда находился до того, который установлен средствами Gentoo. В этом каталоге создан симлинк на исполняемый файл $HOME/opt/fpc/lib/fpc/2.7.1/ppcx64.
  4. Файл конфигурации fpc.cfg расположен в каталоге $HOME/opt/fpc/etc. Этот каталог прописан в переменной среды PPC_CONFIG_PATH.
  5. И, наконец, Lazarus расположен в каталоге $HOME/opt/src/lazarus, опять же — в виде git-репози- тория с привязкой через git-svn.

Есть еще некоторые нюансы, но они уже не относятся к установке и начальной настройке.


1) Так, например, на момент написания этих строк в основном дереве портежей Gentoo самая новая версия — 2.4.0, тогда как на сайте — 2.4.4.

2) На дату написания, т.е. — 30 октября 2011 г.

3) А вот в дереве портежей Gentoo лежит старинная версия 0.9.28.2-r1...


Ссылки

[1] Страница дистрибутивов
http://freepascal.org/download.var [en]

[2] Free Pascal / Lazarus bugtracker
http://mantis.freepascal.org/ [en]

[3] Дистрибутивы Lazarus
http://sf.net/projects/lazarus/files/ [en]

[4] Страница разработки
http://freepascal.org/develop.var [en]

[5] Официальный ftp-сервер
ftp://ftp.freepascal.org/pub/

[6] Снапшоты Lazarus
http://www.hu.freepascal.org/lazarus/ [en]

[7] Apache Subversion Documentation
http://subversion.apache.org/docs/ [en]

[8] Git — Fast Version Control System
http://git-scm.com/ [en]

[9] git-svn(1) Manual Page
http://schacon.github.com/git/git-svn.html [en]

[10] GNU Binutils
http://www.gnu.org/software/binutils/ [en]

[11] GNU Make
http://www.gnu.org/s/make/ [en]

3 комментария:

  1. Спасибо, очень познавательно и полезно!

    ОтветитьУдалить
  2. > где /home/iws/opt/fpc — собственно каталог, куда
    > установлен Free Pascal, а загадочные выражения
    > $fpcversion и $fpcversion — специальные макросы,
    > которые разворачиваются в соответствующие значения
    > (у меня это получается 2.7.1 и x86_64-linux
    > соответственно).

    Маленькая поправка: вместо второго fpcversion имелось в виду, наверно, fpctarget.

    ОтветитьУдалить