Notes on making FB releases
 

  • 制作FB发布意味着:
    • 确保开发版本处于合理/可用状态。
    • 如果尚未完成,请更新文档(Wiki和手册页)以获取语言/编译器更改和新功能。
    • 为DOS,Linux x86,Linux x86_64,Win32,Win64选择和准备gcc工具链/构建环境。
    • 编译所有的FB的开发版本。
    • 构建Win32安装程序(contrib/nsis-installer/)。
    • 测试版本,以确保它们基本上正常工作。
    • 将在线Wiki与fbc Git仓库中的Wiki文件同步。
    • 重新生成PrintToc和CompilerErrMsg页面。
    • 重新编写示例/手册/目录(Wiki中的代码示例)。
    • 编译离线文档(CHM,HTML,文本)。
    • 创建发行包(源代码,二进制构建,文档)。
    • 将它们和源代码(binutils,gcc,MinGW,DJGPP,...)上传到ffc的SourceForge下载站点。
    • 在freebasic.net/forum新闻和SourceForge fbc项目新闻中宣布推出新版本。
  • 在发布新版本时,请检查新版本的源代码是否可以使用至少是以前版本的编译器进行编译。理想情况下,它可以编译甚至更旧的版本。这样我们可以确保fbc始终可以使用最后一个版本进行引导。

  • 至少对于DOS,Linux和Win32,应该以预构建的二进制文件的形式发布FB。
  • DOS和Win32软件包传统上是独立的构建,带有预构建的binutils和MinGW / DJGPP库。
  • 传统上,Linux包是一个正常的构建,它将安装在/usr/usr/local中,并使用系统的binutils /库。

  • 所有二进制包都必须由相同的源版本构建。
  • 源必须与二进制包并行打包和上传。
  • 所有要发布的fbc二进制文件应该使用相同的日期,优选在发布发布的同一天。有多个fbcs具有相同的版本号但不同的日期是令人困惑的;他们是否是同一版本?
  • 所有二进制包都应该包含一个build.txt文件,该文件描述用于构建的gcc / binutils工具链以及FB包中包含的工具/库。

  • 运行每个发行版构建/包的测试套件,以确保一切基本工作。
  • 测试所有的编译模式(exe,dll,profiling,...),以确保一切基本工作。
  • 运行包中包含的每个.exe(binutils等),以确保没有DLL丢失
  • 检查globbing是否适用于Windows版本(全部包括.exe和新生成的),
因为它取决于MinGW-w64运行时的配置。

  • Linux软件包必须是.tar.gz,Windows / DOS软件包必须是.zip.还应提供其他格式(如.tar.xz.7z),但请注意,较旧的GNU / Linux系统,不知道.tar.lzma.tar.xz,或者没有安装7-zip的Windows系统。

包装和清单

FB makefile提供了gitdist命令,用于通过git archive打包源代码,并提供bindist命令,用于打包以前构建的二进制文件。示例工作流程:

# Go to fbc Git clone
cd fbc

# Compile FB
make

# Package the source code
make gitdist

# Package the binaries, regenerate the manifest
make bindist

# Check the manifest
git diff
gitdist以多种格式创建源tarball。它假定用于构建版本的fbc源代码的所有更改都已提交到Git。

bindist根据目标平台创建所需的二进制存档(可能具有多种格式),具有正确的包名称和目录布局,以及它是正常还是独立构建,并且(重新)生成相应的清单包含在归档中的所有文件)放在fbc源代码树的contrib/manifest/目录中。

通过Git(git diff,git gui等)检查清单差异,您可以检查与上一版本相比是否丢失了任何文件,或者是否添加了不应该包含的文件。如果有任何这样的问题,他们可能需要手动修复(可能的makefile的bindist实现需要更新,或者你只需??要复制丢失的文件),之后make bindist可以再次运行以重新创建包,再次更新清单。

bindist配置选项:en

    • TARGET_OS/ TARGET_ARCHmakefile变量:您可以在make命令行上设置TARGET_OS和/或TARGET_ARCH以覆盖makefile的默认uname检查。如果您想要为uname命令返回的系统打包不同的系统,这是非常有用的。例如,从MinGW / MSYS shell(使用MSYS工具而不是DJGPP工具)打包FB-dos版本:
make bindist TARGET_OS=dos
    • FBPACKAGEmakefile变量:没有路径或扩展名的包/归档文件名。默认值:
      • Linux/BSD normal, Windows/DOS standalone: FreeBASIC-x.xx.x-target
      • Linux / BSD独立版:FreeBASIC-x.xx.x-target-standalone
      • Windows / DOS正常(MinGW / DJGPP风格的包):fbc-x.xx.x-target
    • FBMANIFESTmakefile变量:没有路径或扩展名的清单文件名。默认值与FBPACKAGE相同,但不包含-x.xx.x版本号的部分。
    • FBVERSIONmakefile变量:已经在makefile中设置,但是如果你想(例如)当测试版本而不是“官方”版本)。例如:FBVERSION=0.90.1FBVERSION=0.90.1rc1
    • DISABLE_DOCS=1makefile变量:如果设置了此变量,bindist将从包中排除文档(自述文件,更改日志,手册页)和示例。这在创建小型仅二进制fbc包(如安装到DJGPP / MinGW树中的包)时非常有用。

工具链/构建环境

FB-dos和FB-win32版本包括使用的DJGPP / MinGW工具链的库,它们将用于使用这些FB构建制作的任何FB程序。即使是FB-linux版本也将依赖于gcc / glibc版本,因为它是由于预编译的rtlib / gfxlib2库,因为fbc将被链接到可能不存在于其他系统上的共享库。

另外,不同的GCC工具链和运行库(例如,MinGW.org vs.MinGW-w64或DJGPP 2.03 vs.2.04 vs.CVS)在ABI兼容性或运行时行为方面或多或少不同。因此,根据GCC工具链(包括fbc本身),任何FB程序的行为可能不同。

更多信息:
FB手册/文档

  • 另请参阅doc / fbchkdoc / readme.txt和doc / manual / readme.txt
  • 获取MySQL,libcurl,libaspell,libpcre
  • 构建wiki工具:
cd doc/libfbdoc
make
cd ../fbdoc
make
cd ../fbchkdoc
make
cd ../makefbhelp
make
  • 更新wiki缓存(* .wakka文件的脱机副本)
cd doc/manual
rm -f cache/*
make refresh
  • 重新生成PrintToc页面:
cd doc/fbchkdoc
./mkprntoc -web
  • 重新生成CompilerErrMsg页面:
cd doc/fbchkdoc
./mkerrlst
fbc mkerrtxt.bas -exx
./mkerrtxt > errors.wakka
然后将错误列表从errors.wakka复制到doc / manual / cache / CompilerErrMsg.wakka中,并更新在线wiki。
  • 在示例/手册/中更新wiki示例(可能要先清除旧的样本,删除从维基中删除的)
cd doc/fbchkdoc
./getindex -web
./samps extract @PageIndex.txt