From 459a09594c97c4ed1ce8b41cf6083369c12b3204 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Thu, 31 Jul 2025 11:26:41 +0200 Subject: [PATCH 1/4] Expose system info --- main/main.c | 27 ++++++++++++++++++++------- main/php_main.h | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/main/main.c b/main/main.c index e2973f17c248c..0f6c104b27d7e 100644 --- a/main/main.c +++ b/main/main.c @@ -121,26 +121,36 @@ ZEND_ATTRIBUTE_CONST PHPAPI const char *php_build_provider(void) PHPAPI char *php_get_version(sapi_module_struct *sapi_module) { + zend_string *os = php_get_uname('s'); + zend_string *os_version = php_get_uname('r'); + smart_string version_info = {0}; smart_string_append_printf(&version_info, - "PHP %s (%s) (built: %s) (%s)\n", + "PHP %s (%s) (built: %s) (%s) (%s %s%s)\n", PHP_VERSION, sapi_module->name, php_build_date, #ifdef ZTS "ZTS" #else "NTS" #endif -#ifdef PHP_BUILD_COMPILER - " " PHP_BUILD_COMPILER -#endif -#ifdef PHP_BUILD_ARCH - " " PHP_BUILD_ARCH -#endif #if ZEND_DEBUG " DEBUG" #endif #ifdef HAVE_GCOV " GCOV" +#endif +#ifdef PHP_BUILD_ARCH + " " PHP_BUILD_ARCH +#else + " Unknown arch" +#endif + , + ZSTR_VAL(os), + ZSTR_VAL(os_version), +#ifdef PHP_BUILD_COMPILER + " " PHP_BUILD_COMPILER +#else + " Unknown compiler" #endif ); smart_string_appends(&version_info, "Copyright (c) The PHP Group\n"); @@ -150,6 +160,9 @@ PHPAPI char *php_get_version(sapi_module_struct *sapi_module) smart_string_appends(&version_info, get_zend_version()); smart_string_0(&version_info); + zend_string_free(os); + zend_string_free(os_version); + return version_info.c; } diff --git a/main/php_main.h b/main/php_main.h index bd28a0dee1d7f..f111d5e72ad30 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -89,6 +89,26 @@ PHPAPI bool php_tsrm_startup(void); #define PHP_OS_STR PHP_OS #endif +#ifndef PHP_BUILD_COMPILER +# if defined(__clang__) +/* __VERSION__ contains the compiler name */ +# define PHP_BUILD_COMPILER __VERSION__ +# elif defined(__GNUC__) +/* __VERSION__ does not contain the compiler name */ +# define PHP_BUILD_COMPILER "GCC " __VERSION__ +# endif +#endif + +#ifndef PHP_BUILD_ARCH +# if defined(__x86_64__) +# define PHP_BUILD_ARCH "x86_64" +# elif defined(__i386__) +# define PHP_BUILD_ARCH "x86" +# elif defined(__aarch64__) +# define PHP_BUILD_ARCH "aarch64" +# endif +#endif + END_EXTERN_C() #endif From 4ad3a0a84c1b5915294bb13caac09d92ecc73737 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc <365207+arnaud-lb@users.noreply.github.com> Date: Mon, 4 Aug 2025 10:45:57 +0200 Subject: [PATCH 2/4] x64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Michael Voříšek --- main/php_main.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/php_main.h b/main/php_main.h index f111d5e72ad30..d92c2c07f3377 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -101,7 +101,7 @@ PHPAPI bool php_tsrm_startup(void); #ifndef PHP_BUILD_ARCH # if defined(__x86_64__) -# define PHP_BUILD_ARCH "x86_64" +# define PHP_BUILD_ARCH "x64" # elif defined(__i386__) # define PHP_BUILD_ARCH "x86" # elif defined(__aarch64__) From f9df77a8e982880d8f1688fb6003df614cf351d9 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Mon, 4 Aug 2025 11:34:19 +0200 Subject: [PATCH 3/4] Use build-time OS information; expose only compiler major version --- configure.ac | 10 ++++++++++ main/main.c | 27 +++++++++++---------------- main/php_main.h | 9 +++++---- win32/build/confutils.js | 2 ++ 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/configure.ac b/configure.ac index 2bd6ae26ce625..838623036530c 100644 --- a/configure.ac +++ b/configure.ac @@ -1412,6 +1412,16 @@ AC_ARG_VAR([PHP_UNAME], AS_VAR_IF([PHP_UNAME],, [PHP_UNAME=$(uname -a | xargs)]) AC_DEFINE_UNQUOTED([PHP_UNAME], ["$PHP_UNAME"], [The 'uname -a' output.]) +AC_ARG_VAR([PHP_UNAME_S], + [Operating system name (defaults to the 'uname -s' output)]) +AS_VAR_IF([PHP_UNAME_S],, [PHP_UNAME_S=$(uname -s | xargs)]) +AC_DEFINE_UNQUOTED([PHP_UNAME_S], ["$PHP_UNAME_S"], [The 'uname -s' output.]) + +AC_ARG_VAR([PHP_UNAME_R], + [Operating system version (defaults to the 'uname -r' output)]) +AS_VAR_IF([PHP_UNAME_R],, [PHP_UNAME_R=$(uname -r | xargs)]) +AC_DEFINE_UNQUOTED([PHP_UNAME_R], ["$PHP_UNAME_R"], [The 'uname -r' output.]) + PHP_OS=$(uname | xargs) AC_DEFINE_UNQUOTED([PHP_OS], ["$PHP_OS"], [The 'uname' output.]) diff --git a/main/main.c b/main/main.c index 0f6c104b27d7e..18cee3ef2a145 100644 --- a/main/main.c +++ b/main/main.c @@ -121,12 +121,9 @@ ZEND_ATTRIBUTE_CONST PHPAPI const char *php_build_provider(void) PHPAPI char *php_get_version(sapi_module_struct *sapi_module) { - zend_string *os = php_get_uname('s'); - zend_string *os_version = php_get_uname('r'); - smart_string version_info = {0}; smart_string_append_printf(&version_info, - "PHP %s (%s) (built: %s) (%s) (%s %s%s)\n", + "PHP %s (%s) (built: %s) (%s)\n", PHP_VERSION, sapi_module->name, php_build_date, #ifdef ZTS "ZTS" @@ -144,25 +141,23 @@ PHPAPI char *php_get_version(sapi_module_struct *sapi_module) #else " Unknown arch" #endif - , - ZSTR_VAL(os), - ZSTR_VAL(os_version), + ); + smart_string_appends(&version_info, "Copyright (c) The PHP Group\n"); + smart_string_append_printf(&version_info, "Built %s\n", +#ifdef PHP_BUILD_PROVIDER + "by " PHP_BUILD_PROVIDER +#else + "on " PHP_UNAME_S " " PHP_UNAME_R +#endif #ifdef PHP_BUILD_COMPILER - " " PHP_BUILD_COMPILER + " (" PHP_BUILD_COMPILER ")" #else - " Unknown compiler" + "" #endif ); - smart_string_appends(&version_info, "Copyright (c) The PHP Group\n"); - if (php_build_provider()) { - smart_string_append_printf(&version_info, "Built by %s\n", php_build_provider()); - } smart_string_appends(&version_info, get_zend_version()); smart_string_0(&version_info); - zend_string_free(os); - zend_string_free(os_version); - return version_info.c; } diff --git a/main/php_main.h b/main/php_main.h index d92c2c07f3377..24da5e2375e44 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -89,13 +89,14 @@ PHPAPI bool php_tsrm_startup(void); #define PHP_OS_STR PHP_OS #endif +#define _PHP_STRINGIFY(s) #s +#define PHP_STRINGIFY(s) _PHP_STRINGIFY(s) + #ifndef PHP_BUILD_COMPILER # if defined(__clang__) -/* __VERSION__ contains the compiler name */ -# define PHP_BUILD_COMPILER __VERSION__ +# define PHP_BUILD_COMPILER "Clang " PHP_STRINGIFY(__clang_major__) # elif defined(__GNUC__) -/* __VERSION__ does not contain the compiler name */ -# define PHP_BUILD_COMPILER "GCC " __VERSION__ +# define PHP_BUILD_COMPILER "GCC " PHP_STRINGIFY(__GNUC__) # endif #endif diff --git a/win32/build/confutils.js b/win32/build/confutils.js index 0930a86b741ca..258a64acb4955 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -133,6 +133,8 @@ extension_module_ptrs = ""; var oss = wmiservice.ExecQuery("Select * from Win32_OperatingSystem"); var os = oss.ItemIndex(0); AC_DEFINE("PHP_BUILD_SYSTEM", os.Caption + " [" + os.Version + "]", "The system that PHP was built on."); + AC_DEFINE("PHP_UNAME_S", os.Caption, "The system name that PHP was built on."); + AC_DEFINE("PHP_UNAME_R", os.Version, "The system version that PHP was built on."); var build_provider = WshShell.Environment("Process").Item("PHP_BUILD_PROVIDER"); if (build_provider) { AC_DEFINE("PHP_BUILD_PROVIDER", build_provider, "The PHP build provider information."); From 5b1be8a4f3e4c1ca638cf272d74776a4958f10f0 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Mon, 4 Aug 2025 12:11:42 +0200 Subject: [PATCH 4/4] Use target host information; shorten output --- configure.ac | 15 +++++---------- main/main.c | 19 +++++++------------ main/php_main.h | 18 ++++++++++++++++++ win32/build/confutils.js | 2 -- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/configure.ac b/configure.ac index 838623036530c..6caf24b8f0ee4 100644 --- a/configure.ac +++ b/configure.ac @@ -1412,16 +1412,6 @@ AC_ARG_VAR([PHP_UNAME], AS_VAR_IF([PHP_UNAME],, [PHP_UNAME=$(uname -a | xargs)]) AC_DEFINE_UNQUOTED([PHP_UNAME], ["$PHP_UNAME"], [The 'uname -a' output.]) -AC_ARG_VAR([PHP_UNAME_S], - [Operating system name (defaults to the 'uname -s' output)]) -AS_VAR_IF([PHP_UNAME_S],, [PHP_UNAME_S=$(uname -s | xargs)]) -AC_DEFINE_UNQUOTED([PHP_UNAME_S], ["$PHP_UNAME_S"], [The 'uname -s' output.]) - -AC_ARG_VAR([PHP_UNAME_R], - [Operating system version (defaults to the 'uname -r' output)]) -AS_VAR_IF([PHP_UNAME_R],, [PHP_UNAME_R=$(uname -r | xargs)]) -AC_DEFINE_UNQUOTED([PHP_UNAME_R], ["$PHP_UNAME_R"], [The 'uname -r' output.]) - PHP_OS=$(uname | xargs) AC_DEFINE_UNQUOTED([PHP_OS], ["$PHP_OS"], [The 'uname' output.]) @@ -1447,6 +1437,11 @@ AS_VAR_IF([PHP_BUILD_ARCH],,, [AC_DEFINE_UNQUOTED([PHP_BUILD_ARCH], ["$PHP_BUILD_ARCH"], [The build architecture.])]) +AC_ARG_VAR([PHP_BUILD_OS], [The build OS]) +AS_VAR_IF([PHP_BUILD_OS],,, + [AC_DEFINE_UNQUOTED([PHP_BUILD_OS], ["$PHP_BUILD_OS"], + [The build OS.])]) + PHP_SUBST([PHP_FASTCGI_OBJS]) PHP_SUBST([PHP_SAPI_OBJS]) PHP_SUBST([PHP_BINARY_OBJS]) diff --git a/main/main.c b/main/main.c index 18cee3ef2a145..fde678b1a25b8 100644 --- a/main/main.c +++ b/main/main.c @@ -138,23 +138,18 @@ PHPAPI char *php_get_version(sapi_module_struct *sapi_module) #endif #ifdef PHP_BUILD_ARCH " " PHP_BUILD_ARCH -#else - " Unknown arch" #endif - ); - smart_string_appends(&version_info, "Copyright (c) The PHP Group\n"); - smart_string_append_printf(&version_info, "Built %s\n", -#ifdef PHP_BUILD_PROVIDER - "by " PHP_BUILD_PROVIDER -#else - "on " PHP_UNAME_S " " PHP_UNAME_R +#ifdef PHP_BUILD_OS + " " PHP_BUILD_OS #endif #ifdef PHP_BUILD_COMPILER - " (" PHP_BUILD_COMPILER ")" -#else - "" + " " PHP_BUILD_COMPILER #endif ); + smart_string_appends(&version_info, "Copyright (c) The PHP Group\n"); + if (php_build_provider()) { + smart_string_append_printf(&version_info, "Built by %s\n", php_build_provider()); + } smart_string_appends(&version_info, get_zend_version()); smart_string_0(&version_info); diff --git a/main/php_main.h b/main/php_main.h index 24da5e2375e44..8d5748c2c521f 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -110,6 +110,24 @@ PHPAPI bool php_tsrm_startup(void); # endif #endif +#ifndef PHP_BUILD_OS +# if defined(PHP_WIN32) +# define PHP_BUILD_OS "WINNT" +# elif defined(__APPLE__) +# define PHP_BUILD_OS "Darwin" +# elif defined(__linux__) +# define PHP_BUILD_OS "Linux" +# elif defined(__FreeBSD__) +# define PHP_BUILD_OS "FreeBSD" +# elif defined(__NetBSD__) +# define PHP_BUILD_OS "NetBSD" +# elif defined(__OpenBSD__) +# define PHP_BUILD_OS "OpenBSD" +#elif defined(__sun__) +# define PHP_BUILD_OS "Solaris" +# endif +#endif + END_EXTERN_C() #endif diff --git a/win32/build/confutils.js b/win32/build/confutils.js index 258a64acb4955..0930a86b741ca 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -133,8 +133,6 @@ extension_module_ptrs = ""; var oss = wmiservice.ExecQuery("Select * from Win32_OperatingSystem"); var os = oss.ItemIndex(0); AC_DEFINE("PHP_BUILD_SYSTEM", os.Caption + " [" + os.Version + "]", "The system that PHP was built on."); - AC_DEFINE("PHP_UNAME_S", os.Caption, "The system name that PHP was built on."); - AC_DEFINE("PHP_UNAME_R", os.Version, "The system version that PHP was built on."); var build_provider = WshShell.Environment("Process").Item("PHP_BUILD_PROVIDER"); if (build_provider) { AC_DEFINE("PHP_BUILD_PROVIDER", build_provider, "The PHP build provider information.");