126 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			Makefile
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			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)"
 | |
| 
 |