From 081e67eda18a55aeb6d5dbc0efb163ae6c81737f Mon Sep 17 00:00:00 2001 From: Tomas Ebenlendr Date: Mon, 22 Apr 2024 08:56:25 +0200 Subject: [PATCH 1/4] Configurable build directory. Wnen building for multiple PHP versions at once (e.g. in Debian Linux distribution), we need configurable build directory, so that we avoid copying source code. --- Makefile | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index 7f8f5ec6..cee94119 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,14 @@ # libraries and the path to the binary file. If your php-config is not # installed in the default directory, you can change that here. # +# If you use environment with multiple PHP versions (e.g. debian), you need +# to specify name or path of php-config utility that matches targeted php +# version. If you want to build for multiple PHP versions, then also consider +# changing BUILD_DIR variable, so that builds for each version are separated +# PHP_CONFIG = php-config +BUILD_DIR = build UNAME := $(shell uname) # @@ -157,14 +163,14 @@ PHP_SOURCES = $(wildcard zend/*.cpp) # library. We also use a Makefile function here that takes all source files. # -COMMON_OBJECTS = $(COMMON_SOURCES:%.cpp=build/%.o) -PHP_OBJECTS = $(PHP_SOURCES:%.cpp=build/%.o) +COMMON_OBJECTS = $(COMMON_SOURCES:%.cpp=${BUILD_DIR}/%.o) +PHP_OBJECTS = $(PHP_SOURCES:%.cpp=${BUILD_DIR}/%.o) # # Dependencies # -DEPENDENCIES = $(wildcard build/common/*.d) $(wildcard build/zend/*.d) +DEPENDENCIES = $(wildcard ${BUILD_DIR}/common/*.d) $(wildcard ${BUILD_DIR}/zend/*.d) # # End of the variables section. Here starts the list of instructions and @@ -181,30 +187,30 @@ release: COMPILER_FLAGS += -O2 release: LINKER_FLAGS += -O2 release: phpcpp -phpcpp: ${PHP_SHARED_LIBRARY} ${PHP_STATIC_LIBRARY} +phpcpp: ${BUILD_DIR}/${PHP_SHARED_LIBRARY} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} @echo @echo "Build complete." -${PHP_SHARED_LIBRARY}: build_directories ${COMMON_OBJECTS} ${PHP_OBJECTS} +${BUILD_DIR}/${PHP_SHARED_LIBRARY}: build_directories ${COMMON_OBJECTS} ${PHP_OBJECTS} ${LINKER} ${PHP_LINKER_FLAGS} -Wl,${LINKER_SONAME_OPTION},libphpcpp.so.$(SONAME) -o $@ ${COMMON_OBJECTS} ${PHP_OBJECTS} -${PHP_STATIC_LIBRARY}: build_directories ${COMMON_OBJECTS} ${PHP_OBJECTS} +${BUILD_DIR}/${PHP_STATIC_LIBRARY}: build_directories ${COMMON_OBJECTS} ${PHP_OBJECTS} ${ARCHIVER} $@ ${COMMON_OBJECTS} ${PHP_OBJECTS} build_directories: - ${MKDIR} build/common - ${MKDIR} build/zend + ${MKDIR} ${BUILD_DIR}/common + ${MKDIR} ${BUILD_DIR}/zend clean: - ${RM} build ${PHP_SHARED_LIBRARY} ${PHP_STATIC_LIBRARY} + ${RM} ${BUILD_DIR} find -name *.o | xargs ${RM} find -name *.d | xargs ${RM} ${COMMON_OBJECTS}: - ${COMPILER} ${COMPILER_FLAGS} -o $@ ${@:build/%.o=%.cpp} + ${COMPILER} ${COMPILER_FLAGS} -o $@ ${@:${BUILD_DIR}/%.o=%.cpp} ${PHP_OBJECTS}: - ${COMPILER} ${COMPILER_FLAGS} -o $@ ${@:build/%.o=%.cpp} + ${COMPILER} ${COMPILER_FLAGS} -o $@ ${@:${BUILD_DIR}/%.o=%.cpp} # The if statements below must be seen as single line by make @@ -214,12 +220,13 @@ install: ${MKDIR} ${INSTALL_LIB} ${CP} phpcpp.h ${INSTALL_HEADERS} ${CP} include/*.h ${INSTALL_HEADERS}/phpcpp - if [ -e ${PHP_SHARED_LIBRARY} ]; then \ - ${CP} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/; \ + if [ -e ${BUILD_DIR}${PHP_SHARED_LIBRARY} ]; then \ + ${CP} ${BUILD_DIR}}/${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/; \ ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so.$(SONAME); \ ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so; \ fi - if [ -e ${PHP_STATIC_LIBRARY} ]; then ${CP} ${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/; \ + if [ -e ${BUILD_DIR}${PHP_STATIC_LIBRARY} ]; then \ + ${CP} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/; \ ${LN} ${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/libphpcpp.a; \ fi if `which ldconfig`; then \ From b956a555231836bceeea1711912fc6f518b77a3a Mon Sep 17 00:00:00 2001 From: Tomas Ebenlendr Date: Mon, 22 Apr 2024 09:20:33 +0200 Subject: [PATCH 2/4] Fail if cp or ln command fails when installing. --- Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index cee94119..97549389 100644 --- a/Makefile +++ b/Makefile @@ -220,13 +220,13 @@ install: ${MKDIR} ${INSTALL_LIB} ${CP} phpcpp.h ${INSTALL_HEADERS} ${CP} include/*.h ${INSTALL_HEADERS}/phpcpp - if [ -e ${BUILD_DIR}${PHP_SHARED_LIBRARY} ]; then \ - ${CP} ${BUILD_DIR}}/${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/; \ - ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so.$(SONAME); \ + if [ -e ${BUILD_DIR}/${PHP_SHARED_LIBRARY} ]; then \ + ${CP} ${BUILD_DIR}/${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/ && \ + ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so.$(SONAME) && \ ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so; \ fi - if [ -e ${BUILD_DIR}${PHP_STATIC_LIBRARY} ]; then \ - ${CP} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/; \ + if [ -e ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ]; then \ + ${CP} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/ && \ ${LN} ${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/libphpcpp.a; \ fi if `which ldconfig`; then \ From 8856bde10fd00e66b86296242b0862d3b268b81c Mon Sep 17 00:00:00 2001 From: Tomas Ebenlendr Date: Mon, 22 Apr 2024 09:22:09 +0200 Subject: [PATCH 3/4] Allow ldconfig to be configured. When installing multiple php versions at once, ldconfig may fail when executed in parallel. This enables to configure command to be executed instead of ldconfig. --- Makefile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 97549389..cb0d9ec6 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,14 @@ PHP_CONFIG = php-config BUILD_DIR = build UNAME := $(shell uname) +# +# If you do not want to run LDCONFIG, then set LDCONFIG to empty string. +# alternatively you can provide another command to register libraries +# after installation. +# + +LDCONFIG = $(shell which ldconfig 2>/dev/null) + # # Installation directory # @@ -229,9 +237,7 @@ install: ${CP} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/ && \ ${LN} ${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/libphpcpp.a; \ fi - if `which ldconfig`; then \ - ldconfig; \ - fi + ${LDCONFIG} uninstall: ${RM} ${INSTALL_HEADERS}/phpcpp* From d45e387709484555cf8882cc51729025ca2ffc95 Mon Sep 17 00:00:00 2001 From: Tomas Ebenlendr Date: Mon, 22 Apr 2024 09:27:39 +0200 Subject: [PATCH 4/4] Configurable library name We need to distinguish phpcpp built for different php versions on same system, easiest way is to make different library name. --- Makefile | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index cb0d9ec6..37c14b61 100644 --- a/Makefile +++ b/Makefile @@ -75,8 +75,10 @@ VERSION = 2.4.3 # you can change that here. # -PHP_SHARED_LIBRARY = libphpcpp.so.$(VERSION) -PHP_STATIC_LIBRARY = libphpcpp.a.$(VERSION) +LIBRARY_NAME = libphpcpp + +PHP_SHARED_LIBRARY = ${LIBRARY_NAME}.so.$(VERSION) +PHP_STATIC_LIBRARY = ${LIBRARY_NAME}.a.$(VERSION) # @@ -200,7 +202,7 @@ phpcpp: ${BUILD_DIR}/${PHP_SHARED_LIBRARY} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} @echo "Build complete." ${BUILD_DIR}/${PHP_SHARED_LIBRARY}: build_directories ${COMMON_OBJECTS} ${PHP_OBJECTS} - ${LINKER} ${PHP_LINKER_FLAGS} -Wl,${LINKER_SONAME_OPTION},libphpcpp.so.$(SONAME) -o $@ ${COMMON_OBJECTS} ${PHP_OBJECTS} + ${LINKER} ${PHP_LINKER_FLAGS} -Wl,${LINKER_SONAME_OPTION},${LIBRARY_NAME}.so.$(SONAME) -o $@ ${COMMON_OBJECTS} ${PHP_OBJECTS} ${BUILD_DIR}/${PHP_STATIC_LIBRARY}: build_directories ${COMMON_OBJECTS} ${PHP_OBJECTS} ${ARCHIVER} $@ ${COMMON_OBJECTS} ${PHP_OBJECTS} @@ -230,16 +232,16 @@ install: ${CP} include/*.h ${INSTALL_HEADERS}/phpcpp if [ -e ${BUILD_DIR}/${PHP_SHARED_LIBRARY} ]; then \ ${CP} ${BUILD_DIR}/${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/ && \ - ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so.$(SONAME) && \ - ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/libphpcpp.so; \ + ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/${LIBRARY_NAME}.so.$(SONAME) && \ + ${LN} ${PHP_SHARED_LIBRARY} ${INSTALL_LIB}/${LIBRARY_NAME}.so; \ fi if [ -e ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ]; then \ ${CP} ${BUILD_DIR}/${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/ && \ - ${LN} ${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/libphpcpp.a; \ + ${LN} ${PHP_STATIC_LIBRARY} ${INSTALL_LIB}/${LIBRARY_NAME}.a; \ fi ${LDCONFIG} uninstall: ${RM} ${INSTALL_HEADERS}/phpcpp* - ${RM} ${INSTALL_LIB}/libphpcpp.* + ${RM} ${INSTALL_LIB}/${LIBRARY_NAME}.*