From 6f33a65c138abda59690a20250f485af03b028fe Mon Sep 17 00:00:00 2001 From: Michael Programs Date: Fri, 10 Jul 2026 23:26:25 -0400 Subject: [PATCH] build: add pkg-config and libffi to dependency lists (#1235) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .github/workflows/ci.yml | 16 ++++++++-------- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/coverity-scan.yml | 2 +- Dockerfile | 2 +- QWEN.md | 8 +++++--- README.md | 10 +++++++--- README_CN.md | 10 +++++++--- docs/build.md | 10 +++++++--- 8 files changed, 37 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4d042c37..e4d75c47 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 8adf5f70..ddb476c6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -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 diff --git a/.github/workflows/coverity-scan.yml b/.github/workflows/coverity-scan.yml index 390194ba..b93dd4a4 100644 --- a/.github/workflows/coverity-scan.yml +++ b/.github/workflows/coverity-scan.yml @@ -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 diff --git a/Dockerfile b/Dockerfile index 0f9f46dd..18f451e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/QWEN.md b/QWEN.md index 040d867b..c7a4f2a8 100644 --- a/QWEN.md +++ b/QWEN.md @@ -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" .. diff --git a/README.md b/README.md index 2020918a..83ccc908 100644 --- a/README.md +++ b/README.md @@ -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):** diff --git a/README_CN.md b/README_CN.md index 28ccb0e8..ec85cb54 100644 --- a/README_CN.md +++ b/README_CN.md @@ -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. 编译(静态构建):** diff --git a/docs/build.md b/docs/build.md index 7d3df152..b15ea09d 100644 --- a/docs/build.md +++ b/docs/build.md @@ -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 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