build: add pkg-config and libffi to dependency lists (#1235)

package_ffi requires pkg-config and libffi (find_package(PkgConfig
REQUIRED) + pkg_check_modules(FFI REQUIRED libffi) in
src/packages/ffi/CMakeLists.txt), but the docs, Dockerfile, and CI
package lists never listed them — CI only passed because the runners
preinstall pkg-config.
Add the platform-appropriate packages across every dependency list:
- apt: pkg-config libffi-dev
- brew: libffi (pkg-config already present)
- apk: pkgconf libffi-dev
- pacman: mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi
Also note in the build docs that flex is only needed when editing the
LPC lexer; otherwise the pre-committed generated lexer is used.
This commit is contained in:
Michael Programs 2026-07-10 23:26:25 -04:00 committed by GitHub
parent 55956a24b7
commit 6f33a65c13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 37 additions and 23 deletions

View file

@ -31,7 +31,7 @@ jobs:
cxx: g++
build: Debug
cmake_flags: -DPACKAGE_DWLIB=ON
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev libffi-dev
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libffi-dev
- platform: Ubuntu
os: ubuntu-24.04
compiler: gcc
@ -39,7 +39,7 @@ jobs:
cxx: g++
build: RelWithDebInfo
cmake_flags: -DPACKAGE_DWLIB=ON
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev libffi-dev
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libffi-dev
# Ubuntu - Clang
- platform: Ubuntu
@ -48,14 +48,14 @@ jobs:
cc: clang
cxx: clang++
build: Debug
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev libffi-dev
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libffi-dev
- platform: Ubuntu
os: ubuntu-24.04
compiler: clang
cc: clang
cxx: clang++
build: RelWithDebInfo
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev libffi-dev
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libffi-dev
# Ubuntu - Clang with Sanitizer
- platform: Ubuntu
@ -66,7 +66,7 @@ jobs:
build: Debug
sanitizer: true
cmake_flags: -DENABLE_SANITIZER=ON
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev libdw-dev libbz2-dev libffi-dev
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libdw-dev libbz2-dev libffi-dev
- platform: Ubuntu
os: ubuntu-24.04
compiler: clang
@ -75,7 +75,7 @@ jobs:
build: RelWithDebInfo
sanitizer: true
cmake_flags: -DENABLE_SANITIZER=ON
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev libdw-dev libbz2-dev libffi-dev
packages: build-essential autoconf automake bison flex expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libdw-dev libbz2-dev libffi-dev
# macOS
- platform: macOS
@ -98,14 +98,14 @@ jobs:
build: Debug
cmake_generator: MSYS Makefiles
cmake_flags: -DMARCH_NATIVE=OFF -DPACKAGE_CRYPTO=OFF -DPACKAGE_DB_MYSQL="" -DPACKAGE_DB_SQLITE=1
packages: mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest mingw-w64-x86_64-libffi bison flex make
packages: mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi bison flex make
- platform: Windows
os: windows-latest
shell: msys2 {0}
build: RelWithDebInfo
cmake_generator: MSYS Makefiles
cmake_flags: -DMARCH_NATIVE=OFF -DPACKAGE_CRYPTO=OFF -DPACKAGE_DB_MYSQL="" -DPACKAGE_DB_SQLITE=1
packages: mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest mingw-w64-x86_64-libffi bison flex make
packages: mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi bison flex make
defaults:
run:

View file

@ -49,7 +49,7 @@ jobs:
- run: |
sudo apt update
sudo apt install -y build-essential autoconf automake bison expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev
sudo apt install -y build-essential autoconf automake bison expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libffi-dev
mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Debug -DPACKAGE_DB_SQLITE=2 .. && make -j 2 install && cd ..
- name: Perform CodeQL Analysis

View file

@ -18,7 +18,7 @@ jobs:
- name: Install packages
run: |
sudo apt update
sudo apt install -y build-essential autoconf automake bison expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev
sudo apt install -y build-essential autoconf automake bison expect libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev pkg-config libffi-dev
- name: configure
run: |
mkdir build

View file

@ -5,7 +5,7 @@ RUN apk add --no-progress --no-cache \
mariadb-dev mariadb-static postgresql-dev sqlite-dev sqlite-static\
openssl-dev openssl-libs-static zlib-dev zlib-static icu-dev icu-static \
pcre-dev bison git musl-dev libelf-static elfutils-dev zstd-static bzip2-static xz-static \
libffi-dev
pkgconf libffi-dev
WORKDIR /build

View file

@ -146,13 +146,14 @@ valgrind --leak-check=full ./build/bin/driver config.test
```bash
# 安装依赖
sudo apt install build-essential bison libmysqlclient-dev libpcre3-dev \
libpq-dev libsqlite3-dev libssl-dev libz-dev libjemalloc-dev libicu-dev
libpq-dev libsqlite3-dev libssl-dev libz-dev libjemalloc-dev libicu-dev \
pkg-config libffi-dev
```
### macOS
```bash
# 安装依赖
brew install cmake pkg-config mysql pcre libgcrypt libevent openssl jemalloc icu4c
brew install cmake pkg-config mysql pcre libgcrypt libevent openssl jemalloc icu4c libffi
# 使用环境变量构建
OPENSSL_ROOT_DIR="/usr/local/opt/openssl" ICU_ROOT="/usr/local/opt/icu4c" cmake ..
@ -163,7 +164,8 @@ OPENSSL_ROOT_DIR="/usr/local/opt/openssl" ICU_ROOT="/usr/local/opt/icu4c" cmake
# 安装 MSYS2 包
pacman -S git mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-zlib mingw-w64-x86_64-libevent \
mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-openssl
mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-openssl \
mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi
# 在 MINGW64 终端中构建
cmake -G "MSYS Makefiles" ..

View file

@ -135,9 +135,12 @@ sudo apt update
sudo apt install -y build-essential autoconf automake bison expect \
libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev \
libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev \
libdw-dev libbz2-dev
pkg-config libffi-dev libdw-dev libbz2-dev
```
> [!NOTE]
> `flex` is only needed if you modify the LPC lexer (`src/compiler/internal/lexer.l`). Otherwise the build uses the pre-committed generated lexer.
**2. Compile:**
```bash
mkdir build && cd build
@ -152,7 +155,7 @@ make -j$(nproc) install
**1. Install dependencies (Homebrew):**
```bash
brew install cmake pkg-config pcre libgcrypt openssl jemalloc icu4c \
mysql sqlite3 googletest
mysql sqlite3 googletest libffi
```
**2. Compile:**
@ -175,6 +178,7 @@ pacman --noconfirm -S --needed \
mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre \
mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 \
mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest \
mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi \
bison make
```
@ -218,7 +222,7 @@ apk add --no-cache linux-headers gcc g++ clang-dev make cmake bash \
mariadb-dev mariadb-static postgresql-dev sqlite-dev sqlite-static \
openssl-dev openssl-libs-static zlib-dev zlib-static icu-dev icu-static \
pcre-dev bison git musl-dev libelf-static elfutils-dev \
zstd-static bzip2-static xz-static
pkgconf libffi-dev zstd-static bzip2-static xz-static
```
**2. Compile (static build):**

View file

@ -134,9 +134,12 @@ sudo apt update
sudo apt install -y build-essential autoconf automake bison expect \
libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev \
libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev \
libdw-dev libbz2-dev
pkg-config libffi-dev libdw-dev libbz2-dev
```
> [!NOTE]
> 仅当你修改 LPC 词法分析器(`src/compiler/internal/lexer.l`)时才需要 `flex`;否则构建将使用预先提交的生成文件。
**2. 编译:**
```bash
mkdir build && cd build
@ -151,7 +154,7 @@ make -j$(nproc) install
**1. 安装依赖Homebrew**
```bash
brew install cmake pkg-config pcre libgcrypt openssl jemalloc icu4c \
mysql sqlite3 googletest
mysql sqlite3 googletest libffi
```
**2. 编译:**
@ -174,6 +177,7 @@ pacman --noconfirm -S --needed \
mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre \
mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 \
mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest \
mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi \
bison make
```
@ -217,7 +221,7 @@ apk add --no-cache linux-headers gcc g++ clang-dev make cmake bash \
mariadb-dev mariadb-static postgresql-dev sqlite-dev sqlite-static \
openssl-dev openssl-libs-static zlib-dev zlib-static icu-dev icu-static \
pcre-dev bison git musl-dev libelf-static elfutils-dev \
zstd-static bzip2-static xz-static
pkgconf libffi-dev zstd-static bzip2-static xz-static
```
**2. 编译(静态构建):**

View file

@ -50,9 +50,12 @@ $ sudo apt update
$ sudo apt install -y build-essential autoconf automake bison expect \
libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev \
libssl-dev libtool libz-dev telnet libjemalloc-dev libicu-dev \
libgtest-dev
libgtest-dev pkg-config libffi-dev
```
> [!NOTE]
> `flex` is only needed if you modify the LPC lexer (`src/compiler/internal/lexer.l`). Otherwise the build uses the pre-committed generated lexer.
For **sanitizer builds** (memory debugging), also install:
```shell
$ sudo apt install -y libdw-dev libbz2-dev
@ -132,7 +135,7 @@ If not already installed, goto <https://brew.sh/> and follow instructions!
```shell
$ brew install cmake pkg-config mysql pcre libgcrypt openssl jemalloc icu4c \
sqlite3 googletest
sqlite3 googletest libffi
```
Set `HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1` to speed up brew installs if needed.
@ -205,6 +208,7 @@ $ pacman --noconfirm -S --needed \
mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre \
mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 \
mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest \
mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi \
bison make
```
@ -360,7 +364,7 @@ $ apk add --no-cache linux-headers gcc g++ clang-dev make cmake bash \
mariadb-dev mariadb-static postgresql-dev sqlite-dev sqlite-static \
openssl-dev openssl-libs-static zlib-dev zlib-static icu-dev icu-static \
pcre-dev bison git musl-dev libelf-static elfutils-dev \
zstd-static bzip2-static xz-static
pkgconf libffi-dev zstd-static bzip2-static xz-static
```
### Installing jemalloc