Инструкция по использованию.
Программа fpc_pk предназначена для динамического связывания программ, написанных
в системе FreePascal и/или в среде Lazarus.
Программа НЕ способна создавать пакеты (динамической библиотеки) самостоятельно.
Она нужна лишь для связывания Вашей программы с уже готовыми пакетами.
Между тем, она может помочь и для ручного создания дополнительного (к уже имеющимся)
пакета.
Речь о том, что сейчас FPC до конца не поддерживает динамические пакеты, в которые
можно поместить системные модули. Тем не менее, механизм .so linux (и практически
любого другого UNIX) довольно легко позволяет обойти это ограничение.
fpc_pk требует наличия ini-файла fppkg.ini (либо в домашнем каталоге, тогда
в linux имя будет начинаться с точки, т.е. .fppkg.ini, либо в каталоге /etc).
Файл сейчас включает 2 секции (пример выложен вместе с исходным кодом).
Секция [Settings]:
StrictPaths = 0 | 1 - учитывать ли полные пути модулей?
            1 - учитывать. Более безопасно, но менее переносимо.
            0 - не учитывать, сравнивать только имена модулей. Если где-то
            встретится модуль с таким же именем, но с другим содержимым,
            он будет "подменён".
FPC = <путь к компилятору> - думаю, комментарии излишни.
IgnoreCase = 0 | 1 - игнорировать ли регистр файлов модулей. Как правило, надо
           ставить 0 - не игнорировать, но если файловая система регистронезависима,
           то это может создать ошибки.

Секция [Libs]
Здесь идёт перечень пакетов в формате
<сокращённое название> = <путь к скрипту создания>
Если пакет есть в перечне, то при работе fpc_pk он будет подключен к проекту.
Сокращённое название - название библиотеки без первого lib и без .so.

Порядок работы с fpс_pk (предполагается, что все скрипты создания пакетов на месте,
ini-файл заполнен, а сами пакеты находятся в стандартных каталогах размещения
библиотек, ну или путь к ним прописан в LD_LIBRARY_PATH) - ему надо передать
командную строку, которая обычно передаётся FPC. В итоге будет создан
динамический файл. link.res и ppas.sh удалены не будут (впрочем, это зависит от
версии FPC, он может создать скрипт, удаляющий их).
Порядок работы в системе lazarus - на стадии окончательной сборки (НЕ РАНЬШЕ!)
изменить в параметрах проекта команды компилятора - имя компилятора - на путь к
fpc_pk; ОБЯЗАТЕЛЬНО выключить в этих же параметрах отладку (с отладочной информацией
почему-то компоновка не удаётся) и откомпилировать проект (глубокая сборка не нужна).

Как создать пакет (вручную):
1. Без использования fpc_pk (вручную):
- откомпилировать проект с параметром -Cn.
- создать будущий файл скрипта для сборки пакета
- найти в файле link.res первую секцию "INPUT("
- перенести из неё названия файлов, соответствующих модулям, помещаемым в проект,
  в скрипт для сборки пакета. При этом надо внимательно следить за тем, чтобы
  не захватить файлов, свойственных этому проекту, чтобы они не оказались
  "разорванными" - т.е., в проекте могут остаться модули, зависящие от
  пакета, но в пакете не должно быть модулей, которые зависят от оставшихся
  модулей проекта. При нарушении этого правила пакет с проектом будут работать,
  но другие проекты его не смогут использовать.
- Из следующей секции "INPUT(" скопировать в скрипт (НЕ ПЕРЕНЕСТИ) названия библиотек
  (с -l), от которых зависит пакет.
- Первой строчкой скрипта сделать "gcc --shared -o <имя пакета с lib и .so> "
- В конце каждой строки скрипта (можно - кроме последней) поставить " \"
- Запустить скрипт. В итоге получится готовый пакет.
- Поместить пакет в место, видимое программами.
- Прописать название скрипта в fppkg.ini в формате
  <краткое имя пакета>=<полное имя скрипта (с путём к нему)>.
- Перекомпилировать проект(ы) с использованием fpc_pk (уже динамически).
2. C использованием fpc_pk (добавление пакетов).
Метод отличается крайне незначительно - он позволит исключить файлы, уже имеющиеся
в других пакетах. Вместо запуска FPC с -Cn надо запустить fpc_pk. Далее
действовать аналогично.

Ошибки и особенности.
1. Для нормальной работы программы файл ИЗНАЧАЛЬНО должен быть динамическим.
   Т.е. к нему уже изначально должна быть подключена какая-нибудь библиотека.
   Для проектов lazarus это не актуально - они почти всегда динамические,
   а для простых программ FPC это может оказаться проблемой. Включение, например,
   модуля x позволит решить проблему, хотя и некрасиво.
2. Не тестировалось под Windows. Скорее всего, в таком виде работать не будет,
   хотя общий подход имеет право на существование.
3. Сохраняются остаточные файлы ppas.sh и link.res. Их можно удалить командой
   delp .
4. Хотя fpc_pk и подменяет основной файл fpc (вызывая его же), полноценной заменой
   он пока не является. Т.е., он рассчитывает, что fpc вызывался для того, чтобы
   откомпилировать какую-то программу. Если компилируется только модуль или же
   fpc вызван для получения информации, fpc_pk не сможет полноценно отработать.
   Как следствие, его не удастся использовать как полную замену исполняемого
   файла fpc в lazarus. Может, в какой-нибудь дальнейшей версии?
