1
0
Fork 0
php-sqlcipher/debian/rules
2025-10-14 17:40:53 +11:00

126 lines
5.9 KiB
Makefile
Executable file

#!/usr/bin/make -f
# Keep dh defaults, but the actual builds pass explicit flags
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_CFLAGS_MAINT_APPEND = -O2 -fPIC
# Match the shell script layout: build in-tree and use .libs directly
SQLCIPHER_SRC_DIR := $(CURDIR)/build-sqlcipher
export SQLITE_LIBS = $(SQLCIPHER_SRC_DIR)/.libs/
export SQLCIPHER_LIBDIR_ARG = $(SQLITE_LIBS)sqlite3.o
export STANDARD_SQLCIPHER_CFLAGS = -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -DSQLITE_MAX_VARIABLE_NUMBER=250000 -DSQLITE_EXTRA_INIT=sqlcipher_extra_init -DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown
export STANDARD_SQLCIPHER_LDFLAGS = -lcrypto -L$(SQLITE_LIBS)
export SQLITE_CFLAGS = -I$(SQLCIPHER_SRC_DIR) $(STANDARD_SQLCIPHER_CFLAGS)
# Detect PHP version on the build host
PHPCONFIG_CANDIDATE := $(shell \
if ls -1 /usr/bin/php-config[0-9]* >/dev/null 2>&1; then \
ls -1 /usr/bin/php-config[0-9]* | sed 's#.*/##' | sort -Vr | head -n1; \
elif command -v php-config >/dev/null 2>&1; then echo php-config; \
else echo php-config; fi)
PHP_VER ?= $(shell $(PHPCONFIG_CANDIDATE) --version 2>/dev/null | awk -F. '{print $$1"."$$2}')
PHPCONFIG := $(shell if command -v php-config$(PHP_VER) >/dev/null 2>&1; then echo php-config$(PHP_VER); else echo $(PHPCONFIG_CANDIDATE); fi)
PHPIZE := $(patsubst php-config%,phpize%,$(PHPCONFIG))
# Extension API dir (e.g. 20240924)
PHP_API := $(shell $(PHPCONFIG) --extension-dir | awk -F/ '{print $$NF}')
# Binary package name (must match debian/<package>.php)
PACKAGE ?= php$(PHP_VER)-sqlcipher
# Final install path (inside package staging tree)
EXTDIR = debian/$(PACKAGE)/usr/lib/php/$(PHP_API)
# Markers to persist paths across recipe lines
PHP_SRC_MARKER = .php_src_dir
SQLITE3_DIR_MARKER = .sqlite3_dir
PDO_SQLITE_DIR_MARKER = .pdo_sqlite_dir
# Figure out the matching Debian source package from the dev tool that owns php-config
PHP_DEV_PKG := $(shell dpkg-query -S $$(command -v $(PHPCONFIG)) 2>/dev/null | cut -d: -f1 | sed 's/:.*//' | head -n1)
# PDO sources and build dir
PDO_SRC_DIR := $(CURDIR)/pdo_sqlcipher
PDO_BUILD_DIR := $(PDO_SRC_DIR)/build
%:
dh $@ --with php
override_dh_auto_build:
# 1) Build SQLCipher
cd "$(SQLCIPHER_SRC_DIR)" && env -u DEB_BUILD_MAINT_OPTIONS -u DEB_CFLAGS_MAINT_APPEND \
CFLAGS="$(STANDARD_SQLCIPHER_CFLAGS)" \
LDFLAGS="-lcrypto" \
./configure --with-tempstore=yes
$(MAKE) -C "$(SQLCIPHER_SRC_DIR)"
# 2) Check PHP sources are present, set string vars
@set -eu; \
PHP_SRC_DIR=$$(readlink -f $$(ls -dt php-src/*/ | head -n1 | sed 's#/$$##')); \
test -d "$$PHP_SRC_DIR" || { echo "Could not locate extracted php$(PHP_VER) source dir"; ls -al php-src; exit 1; }; \
printf '%s' "$$PHP_SRC_DIR" > "$(PHP_SRC_MARKER)"; \
SQLITE3_DIR=$$(readlink -f $$(find "$$PHP_SRC_DIR" -type d -path '*/ext/sqlite3' | head -n1)); \
test -d "$$SQLITE3_DIR" || { echo "ext/sqlite3 not found under $$PHP_SRC_DIR"; find "$$PHP_SRC_DIR" -maxdepth 4 -type d -name sqlite3; exit 1; }; \
printf '%s' "$$SQLITE3_DIR" > "$(SQLITE3_DIR_MARKER)"; \
PDO_SQLITE_DIR=$$(readlink -f $$(find "$$PHP_SRC_DIR" -type d -path '*/ext/pdo_sqlite' | head -n1)); \
test -d "$$PDO_SQLITE_DIR" || { echo "ext/pdo_sqlite not found under $$PHP_SRC_DIR"; exit 1; }; \
printf '%s' "$$PDO_SQLITE_DIR" > "$(PDO_SQLITE_DIR_MARKER)"
# 2a) Prepare ext/sqlite3 (mv config0.m4, phpize, configure, make)
@set -eu; \
SQLITE3_DIR=$$(cat "$(SQLITE3_DIR_MARKER)"); \
if [ -f "$$SQLITE3_DIR/config0.m4" ] && [ ! -f "$$SQLITE3_DIR/config.m4" ]; then \
mv "$$SQLITE3_DIR/config0.m4" "$$SQLITE3_DIR/config.m4"; \
fi; \
cd "$$SQLITE3_DIR" && $(PHPIZE); \
cd "$$SQLITE3_DIR" && env -u DEB_BUILD_MAINT_OPTIONS -u DEB_CFLAGS_MAINT_APPEND \
CFLAGS="$(STANDARD_SQLCIPHER_CFLAGS)" \
LDFLAGS="$(STANDARD_SQLCIPHER_LDFLAGS)" \
./configure --libdir="$(SQLCIPHER_LIBDIR_ARG)" --with-php-config="$(PHPCONFIG)"
$(MAKE) -C "$$(cat "$(SQLITE3_DIR_MARKER)")"
# Fix the pic_object in sqlite3.lo so it links to sqlcipher's sqlite3.o
@set -eu; \
PHP_SRC_DIR=$$(cat "$(PHP_SRC_MARKER)"); \
sed -i "s|pic_object='.libs/sqlite3.o'|pic_object='.libs/sqlite3.o $(SQLCIPHER_SRC_DIR)/sqlite3.o'|g" \
"$$PHP_SRC_DIR/ext/sqlite3/sqlite3.lo"
# Rebuild the sqlite3 extension after the pic_object fix
$(MAKE) -C "$$(cat "$(SQLITE3_DIR_MARKER)")"
# 3) Build PDO SQLCipher
@set -eu; \
PDO_SQLITE_DIR=$$(cat "$(PDO_SQLITE_DIR_MARKER)"); \
mkdir -p "$(PDO_BUILD_DIR)"; \
cp "$$PDO_SQLITE_DIR"/*.c "$$PDO_SQLITE_DIR"/*.h "$(PDO_BUILD_DIR)/"; \
# Bring in sqlcipher amalgamation and config for PDO build
cp "$(SQLCIPHER_SRC_DIR)/sqlite3.c" "$(PDO_BUILD_DIR)/sqlite3.c"; \
cp "$(SQLCIPHER_SRC_DIR)/sqlite3.h" "$(PDO_BUILD_DIR)/sqlite3.h"; \
cp "$(SQLCIPHER_SRC_DIR)/sqlite_cfg.h" "$(PDO_BUILD_DIR)/config.h"; \
sed -i '1i#include "config.h"' "$(PDO_BUILD_DIR)/sqlite3.c"; \
cp "$(PDO_SRC_DIR)/config.m4" "$(PDO_BUILD_DIR)/config.m4"; \
cd "$(PDO_BUILD_DIR)" && $(PHPIZE) --clean && $(PHPIZE); \
cd "$(PDO_BUILD_DIR)" && env -u DEB_BUILD_MAINT_OPTIONS -u DEB_CFLAGS_MAINT_APPEND \
CFLAGS="$(STANDARD_SQLCIPHER_CFLAGS)" \
LDFLAGS="$(STANDARD_SQLCIPHER_LDFLAGS)" \
./configure --libdir="$(SQLCIPHER_LIBDIR_ARG)" --with-php-config="$(PHPCONFIG)"
$(MAKE) -C "$(PDO_BUILD_DIR)"
override_dh_auto_install:
@set -eu; \
SQLITE3_DIR=$$(cat "$(SQLITE3_DIR_MARKER)"); \
install -D -m 0644 "$$SQLITE3_DIR/modules/sqlite3.so" "$(EXTDIR)/sqlite3.so"; \
install -D -m 0644 "$(PDO_BUILD_DIR)/modules/pdo_sqlite.so" "$(EXTDIR)/pdo_sqlite.so"; \
# Install .ini so dh-php can enable them across SAPIs
install -D -m 0644 debian/sqlite3.ini "debian/$(PACKAGE)/usr/share/$(PACKAGE)/sqlite3/sqlite3.ini"; \
install -D -m 0644 debian/pdo_sqlite.ini "debian/$(PACKAGE)/usr/share/$(PACKAGE)/sqlite3/pdo_sqlite.ini"
override_dh_installexamples:
dh_installexamples --sourcedir=.
override_dh_missing:
dh_missing --fail-missing
override_dh_auto_clean:
rm -rf "$(PHP_SRC_MARKER)" "$(SQLITE3_DIR_MARKER)" "$(PDO_SQLITE_DIR_MARKER)"