Примечание по созданию релизов FB
 

  • Релизы FB в форме скомпилированных двоичных файлов могут создаваться, по крайней мере, для DOS, Linux и Win32.
  • Пакеты DOS и Win32 традиционно являются автономными, их построение идет с помощью Binutils и других библиотек
  • Пакет Linux традиционно устанавливается в /usr или /usr/local и использует binutils/libraries системы
  • Все выпущенные fbc двоичные файлы должны быть созданы с той же датой, которая имеет дату официального выпуска (сбивает с толку иметь множество fbc с одинаковой версией, но с различными датами; трудно становится понять действительно ли это та же версия или нет?)
  • Пакеты Linux должны быть .tar.gz, пакеты Windows должны быть .zip, пакеты DOS должны быть .zip с настройками байтов low word size/fast. Другие форматы могут быть предложены дополнительно, но есть люди с более старыми системами GNU/Linux, у которых нет поддержки .tar.lzma или .tar.xz, или с системами Windows, которые не имеют архиватора 7-zip.

Упаковка и Манифесты

После того, как FB, binutils и внешние библиотеки были скомпилированы и/или скопированы в дерево FB, может использоваться программа contrib/release/pattern.bas для создания двоичных пакетов и соответствующих деклараций из файлов в дереве FB.

$ fbc contrib/release/pattern.bas -g -exx
$ contrib/release/pattern {dos|linux|win32}
Манифесты в contrib/release/manifest/*.lst будут регенерированы. Это может использоваться для проверки на дополнительные/недостающие файлы в сочетании с возможностями Git's diff'ing. Включение/Исключение патернов в contrib/release/pattern.txt, возможно понадобится подкорректировать.

Win32

Для сборки win32 могут использоваться MinGW.org, TDM-GCC или MinGW-w64 инструменты.

MinGW.org, кажется, является самым "стандартным", но очевидно использует обработку исключений DW2, которая приводит к огромным разделам .eh_frame в коде, сгенерированном gcc, включая libgcc.a и т.д. Некоторые пользователи FB это считают недопустимым чрезмерным увеличением размера.

TDM-GCC использовался для некоторых выпусков FB в прошлом с помощью GCC 4, в то время как MinGW.org еще не использовался. Однако, в настоящее время у MinGW.org есть версия GCC 4.

MinGW-w64 довольно новый, но он уже успел обновиться различными патчами , так что его так же можно считать "стандартным". При размышлении о портировании FB для Windows 64 бита имело бы некоторый смысл использовать MinGW-w64 инструменты для 32\64 битных версий.

SJLJ по сравнению с обработкой исключений DW2 действительно не имеет значения для FB в данный момент, так как это не поддерживает исключения, но это может иметь значение при использовании статических библиотек C++, соединенных с программами FB, такие как ASpell, и это влияет на двоичные файлы, сгенерированные gcc включая собственные объекты/библиотеки gcc (такие как libgcc.a или crtbegin.o/crtend.o).

Даже при том, что ядро C ABI совместимо между различным Win32 GCC инструментами, могут быть различия в libsupc ++. (которую использует FB), или другими файлами, из-за конфигурации обработки исключений, и помимо этого различные выпуски GCC имеют различия в ABI, например, 4.6 по сравнению с 4.7 измененными структурами, принимают __attribute__((ms_struct)) по умолчанию, вместо __attribute__((gcc_struct)). Эти вещи могли вызвать проблемы между различными выпусками FB и различным MinGW инструментами.

FreeBASIC-x.xx.x-win32

  • Получите MinGW/MSYS установщик с MinGW.org
  • и потенциально MinGW-w64 или TDM-GCC в отдельном каталоге
  • MSYS обеспечивает Unix среду-оболочку
  • MinGW предоставляет Autotools
  • Установите PATH соответственно, самое главное для GCC/Binutils
  • Скомпилируйте FB с ENABLE_STANDALONE
  • Перекомпилируйте fbc из самого себя, по крайней мере, один раз, чтобы гарантировать, что он использует свой собственный rtlib вместо одного из хостов fbc
  • Используйте contrib/libs/win32/build.sh скрипт для построения libffi.a и других внешних библиотек
  • Скопируйте gcc/binutils/gdb составленный с помощью contrib/libs/win32/build.sh скрипта в bin/win32/
  • альтернативно, скопируйте binutils/gdb из MinGW.org/MinGW-w64/TDM-GCC установки в bin/win32/:
    • as.exe, ar.exe, ld.exe, dlltool.exe, gprof.exe, gdb.exe
    • плюс другие необходимые DLL (как libintl, libiconv, libexpat...)
    • также gcc.exe и его ../libexec/gcc/ каталог для -gen gcc
  • Скопируйте текущий GoRC.exe в bin/win32/
  • Используйте lib/win32/makefile для копирования MinGW и Win32 API библиотек из MinGW.org/MinGW-w64/TDM-GCC в lib/win32/
  • Скопируйте GCC библиотеки из MinGW.org/MinGW-w64/TDM-GCC установщика в lib/win32/:
    • libgcc.a, libgcc_eh.a (if it exists), libsupc++.a, crtbegin.o, crtend.o
    • crt2.o, dllcrt2.o, gcrt2.o
    • libmingw32.a, libmingwex.a, libmoldname.a, libgmon.a
  • Запустите contrib/release/pattern.exe для создания манифестов и пакета
  • Проверьте манифесты и внесите коррективы, если это необходимо

fbc-x.xx.x-mingw32

Предназначено для того, чтобы быть сборкой FB для MinGW.org инструментария, который может быть просто быть извлечен в дерево MinGW как пакет MinGW.

  • Получите MinGW.org/MSYS установку, плюс DirectX заголовки для gfxlib2
  • Постройте libffi.a
../libffi-3.0.11/configure --disable-shared --prefix=C:/MinGW
make install
  • Постройте FB
  • Запустите contrib/release/pattern.exe mingw32 для создания манифеста и пакета
  • Проверьте манифест и внесите коррективы, если это необходимо

Linux

Создание двоичных файлов, которые работают над большей частью доступного GNU/Linux дистрибутивов трудно, потому что даже при том, что они часто подобны в целом, они все таки отличаются. Наиболее распространенная проблема не соответстветствие glibc версии, т.е. fbc двоичный файл выполняется в системе с более старым glibc, чем тот, на котором это было построено, в итоге ошибка "glibc too old". Библиотека ncurses тоже не всегда такая же и в итоге предупреждение "`ospeed' has different size, consider re-linking" при выполнении fbc. Вот почему выпуски Linux обычно создавались в достаточно старой системе GNU/Linux, чтобы позволить fbc работать под Debian 4 и 5 и текущими версиями Ubuntu (особенно LTSs), Fedora и OpenSUSE.

FreeBASIC-x.xx.x-linuxmusl

С FB версии 0.24 есть возможность создать статические двоичные файлы ELF, используя musl libc вместо glibc, который должен предотвратить упомянутые выше проблемы. Другой альтернативный libc's мог бы работать также, хотя я (dkl) протестировал только musl libc и dietlibc, и musl работал почти без проблем, в то время как компиляция rtlib с dietlibc потребовала большего количества корректировок. Кроме того, получение rtlib построения, выливается в другую большую проблему предоставления необходимых целевых библиотек.

libc & Ко (включая crt{1,i,n}.o) легко создать из musl источников, но правильная компиляция GCC, с получением libgcc, libsupc ++ и crtbegin.o/crtend.o требует некоторого опыта. К счастью есть сценарий для создания musl libc GCC кросс-компилирующих инструментов доступный из https://github.com/GregorR/musl-cross.

Сценарий contrib/libs/linuxmusl/build.sh используется для того, чтобы создать целую статически соединенную установку FB, используя musl libc, включая статически слинкованный binutils и gcc и тонны внешних библиотек. Это привело к пакету FB-linuxmusl.

  • Архив с исходными кодами FB должен быть доступен в contrib/libs/src/
  • После запуска скрипта contrib/libs/linuxmusl/build.sh , он будет работать в текущем каталоге
  • Он должен создать каталог fbc-static, содержащий FB дерево со статически связанным FBC, и всеми другими, построенными файлами и библиотеками
  • Запустите contrib/release/pattern linuxmusl для создания манифестов и пакетов
  • Проверьте манифест и внесите коррективы, если это необходимо

FreeBASIC-x.xx.x-linux

  • Выберите дистрибутив
  • Постройте FB
  • Запустите contrib/release/pattern для создания манифестов и пакетов
  • Проверьте манифест и внесите коррективы, если это необходимо

DOS

С DJGPP выберите между последней версией CVS или несколько устаревшей бета-версией DJGPP 2.04. Компиляция DJGPP из CVS не является большой проблемой:
    • Получите DJGPP 2.04 установку в качестве базы
    • Получите & постройте DJGPPCVS с ("make" в src каталоге)
    • Скопируйте все пакеты (gcc/binutils/etc.) кроме старой djdev (libc, libm, headers, др.) в DJGPP CVS дерево
    • Удалите DJGPP 2.04 установку
    • И используйте CVS версию на этом месте

FreeBASIC-x.xx.x-dos

  • Получите DJGPP установщик, смотрите как это делается в разделе DOS страницы DevBuild
  • Постройте FB с опцией ENABLE_STANDALONE
  • Сокпируйте binutils/gdb из DJGPP в bin/dos/:
as.exe, ar.exe, ld.exe, gprof.exe, gdb.exe
  • Скопируйте libs из DJGPP в lib/dos/:
    • crt0.o, gcrt0.o
    • libemu.a, libm.a
    • libgcc.a, libsupcx.a (переименуйте из libsupcxx.a)
  • Сценарий contrib/libs/dos/build.sh может также использоваться для кросс-компиляции внешних библиотек, используя DJGPP кросс-компилятор
  • Запустите contrib/release/pattern.exe dos для создания манифестов и пакетов
  • Проверьте манифест и внесите коррективы, если это необходимо

fbcxxxxb.zip

Это предназначено, чтобы быть сборкой FB для DJGPP, который в состоянии просто быть извлеченным в дерево DJGPP как пакет DJGPP.

  • DJGPP установить как для FreeBASIC-x.xx.x-dos релиза
  • Построить FB
  • Запустить contrib/release/pattern.exe djgpp для создания манифестов и пакетов
  • Проверьте манифест и внесите коррективы, если это необходимо

FB руководство/документация

  • Смотрите также doc/fbchkdoc/readme.txt и doc/manual/readme.txt
  • Получить MySQL, libcurl, libaspell, libpcre
  • Построить вики инструменты:
cd doc/libfbdoc
make
cd ../fbdoc
make
cd ../fbchkdoc
make
cd ../makefbhelp
make
  • Обновите кэш вики (копия форума  *.wakka файлов)
cd doc/manual
rm -f cache/*
make refresh
  • Восстановить PrintToc страницу:
cd doc/fbchkdoc
./mkprnttoc -web
  • Восстановить CompilerErrMsg страницу:
cd doc/fbchkdoc
./mkerrlst
fbc mkerrtxt.bas -exx
./mkerrtxt > errors.wakka
Скопируйте список ошибок из errors.wakka в doc/manual/cache/CompilerErrMsg.wakka и обновите онлайновую Wiki также.
  • Обновите примеры Wiki в examples/manual/(можете очистить старые сначала, удалить эти удаленные из Wiki)
cd doc/fbchkdoc
./getindex -web
./samps extract @PageIndex.txt