Re: Błąd kompilacji starszych wersji PHP <=8.0
Maciej Kędzierski
pld-devel-pl-list at vip.server.pl
Thu Dec 5 11:30:37 CET 2024
W dniu 3.12.2024 o 18:05, Adam Osuchowski pisze:
> Maciej Kędzierski wrote:
>> Próbuję przebudować pakiety ze starszymi wersjami PHP, np. 7.4, czy 5.6 i
>> kompilacje wyrzucają błędy.
>> Jeden błąd namierzyłem i jest związany z bibliotekami libxml2>=2.12.
>>
>> [...]
>>
>> Po przywróceniu wersji libxml2-2.11.5, kompilacja przechodzi dalej, ale
>> wyrzuca błąd w innym miejscu.
>> Tego już nie mogę namierzyć, co za to odpowiada.
> W libxml2 w pewnym momencie zmieniły się prototypy funkcji -- pododawali
> kwalifikatory const, a nowy gcc jest bardzo akuratny. Wystarczy owarunkować
> per wersja:
>
>
> diff -ruNp php-7.2.34.orig/ext/libxml/libxml.c php-7.2.34/ext/libxml/libxml.c
> --- php-7.2.34.orig/ext/libxml/libxml.c 2020-09-30 07:15:53.000000000 +0200
> +++ php-7.2.34/ext/libxml/libxml.c 2024-11-17 23:07:54.494686435 +0100
> @@ -728,7 +728,11 @@ PHP_LIBXML_API void php_libxml_ctx_warni
> va_end(args);
> }
>
> +#if LIBXML_VERSION >= 21200
> +PHP_LIBXML_API void php_libxml_structured_error_handler(void *userData, const xmlError *error)
> +#else
> PHP_LIBXML_API void php_libxml_structured_error_handler(void *userData, xmlErrorPtr error)
> +#endif
> {
> _php_list_set_error_structure(error, NULL);
>
>
>
> W przypadku tego drugiego błędu winny jest jakiś totalnie zbędny patch
> %{orgname}-mail.patch (php-mail.patch), made by PLD, w którym jakiś mądrala
> próbował na siłę i nie wiadomo po co przerabiać wbudowaną funkcję mail().
> Wykomentuj go ze speca i pójdzie od strzału.
> _______________________________________________
No niestety od strzału nie idzie. Pojawiają się nowe błędy, patrz niżej.
Zakomentowałem php-mail.patch, nałożony został patch na libxml'a - idąc
za podpowiedzią znalazłem trochę pełniejszą wersją patcha:
https://github.com/phpbrew/phpbrew/issues/1370
https://github.com/php/php-src/commit/0a39890c967aa57225bb6bdf4821aff7a3a3c082
na podstawie której stworzyłem ten poniższy:
php-7433-libxml_2_12.patch
====================
--- php-7.4.33/ext/libxml/libxml.c.orig 2022-10-31 11:36:06.000000000 +0100
+++ php-7.4.33/ext/libxml/libxml.c 2024-12-04 09:23:13.464210850 +0100
@@ -530,7 +530,11 @@ static int _php_libxml_free_error(xmlErr
return 1;
}
-static void _php_list_set_error_structure(xmlErrorPtr error, const char
*msg)
+#if LIBXML_VERSION >= 21200
+static void _php_list_set_error_structure(const xmlError *error, const
char *msg)
+#else
+static void _php_list_set_error_structure(xmlError *error, const char
*msg)
+#endif
{
xmlError error_copy;
int ret;
@@ -782,7 +786,11 @@ PHP_LIBXML_API void php_libxml_ctx_warni
va_end(args);
}
+#if LIBXML_VERSION >= 21200
+PHP_LIBXML_API void php_libxml_structured_error_handler(void *userData,
const xmlError *error)
+#else
PHP_LIBXML_API void php_libxml_structured_error_handler(void *userData,
xmlErrorPtr error)
+#endif
{
_php_list_set_error_structure(error, NULL);
@@ -1061,9 +1069,7 @@ static PHP_FUNCTION(libxml_use_internal_
Retrieve last error from libxml */
static PHP_FUNCTION(libxml_get_last_error)
{
- xmlErrorPtr error;
-
- error = xmlGetLastError();
+ const xmlError *error = xmlGetLastError();
if (error) {
object_init_ex(return_value, libxmlerror_class_entry);
diff -ruNp php_sdl.c.orig php_sdl.c
--- php-7.4.33/ext/soap/php_sdl.c.orig 2022-10-31 11:36:07.000000000 +0100
+++ php-7.4.33/ext/soap/php_sdl.c 2024-12-04 09:12:19.160873316 +0100
@@ -333,7 +333,7 @@ static void load_wsdl_ex(zval *this_ptr,
sdl_restore_uri_credentials(ctx);
if (!wsdl) {
- xmlErrorPtr xmlErrorPtr = xmlGetLastError();
+ const xmlError *xmlErrorPtr = xmlGetLastError();
if (xmlErrorPtr) {
soap_error2(E_ERROR, "Parsing WSDL: Couldn't
load from '%s' : %s", struri, xmlErrorPtr->message);
=======================
Z patchem dla libxml, mogę skompilować ręcznie kompilowaną swoją wersję
7.4.33, ale paczka z dystrybucji wywala się znowu, tym razem na
kompilacji litespeed.
Jak wywalę wszystkie wpisy z php.spec, odnośnie litespeed, to rebuild
przebudowuje wszystko, tylko oczywiście nie robi paczek dla litespeed.
PS. Jak wyłączyć budowanie phpXX-litespeed w php.spec, bez wywalania
wszystkich wpisów odnośnie litespeed?
Taki błąd jaki pojawia się przy kompilacji "litespeed".
/bin/sh /root/rpm/BUILD/php-7.4.33/libtool --silent --preserve-dup-deps
--tag=CC --mode=compile x86_64-pld-linux-gcc -Isapi/litespeed/
-I/root/rpm/BUILD/php-7.4.33/sapi/litespeed/ -DPHP_ATOM_INC -I/root/rpm
/BUILD/php-7.4.33/include -I/root/rpm/BUILD/php-7.4.33/main
-I/root/rpm/BUILD/php-7.4.33 -I/usr/include/valgrind
-I/root/rpm/BUILD/php-7.4.33/ext/date/lib -I/usr/include/libxml2
-I/usr/include/enchant -I/usr
/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-6
-I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/harfbuzz -I/usr/include/webp -I/usr/include/ima
p -I/root/rpm/BUILD/php-7.4.33/ext/mbstring/libmbfl
-I/root/rpm/BUILD/php-7.4.33/ext/mbstring/libmbfl/mbfl
-I/usr/include/pspell -I/usr/include/tidy -I/usr/include/xmlrpc-epi
-I/root/rpm/BUILD/php-7.4.33/TSR
M -I/root/rpm/BUILD/php-7.4.33/Zend -DDEBUG_FASTCGI -DHAVE_STRNDUP
-I/usr/include/xmlrpc-epi -I/usr/include -O2 -fwrapv -pipe -Wformat
-Werror=format-security -gdwarf-4 -fno-debug-types-section -fvar-track
ing-assignments -g2 -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong
--param=ssp-buffer-size=4 -Werror=trampolines -fPIC -march=x86-64
-mtune=generic -gdwarf-4 -fno-debug-types-section -fvar-tracking-assignm
ents -g2 -fPIC -DPIC -Wall -Wno-strict-aliasing -DZEND_SIGNALS -c
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapilib.c -o
sapi/litespeed/lsapilib.lo
In file included from
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:53:
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lscriu.c:In function
'LSCRIU_try_checkpoint':
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lscriu.c:501:9:warning:
variable 'iRet' set but not used [-Wunused-but-set-variable]
501 | int iRet;
| ^~~~
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:In function
'lsapi_clean_shutdown':
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:691:9:warning:
variable 'sa_rc' set but not used [-Wunused-but-set-variable]
691 | int sa_rc;
| ^~~~~
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:In function
'lsapi_module_main':
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:753:9:warning:
variable 'sa_rc' set but not used [-Wunused-but-set-variable]
753 | int sa_rc;
| ^~~~~
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:In function
'zif_litespeed_response_headers':
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:1729:9:warning:
the comparison will always evaluate as 'true' for the address of
'headers' will never be NULL [-Waddress]
1729 | if (!&SG(sapi_headers).headers) {
| ^
In file included from
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:20:
/root/rpm/BUILD/php-7.4.33/main/SAPI.h:56:20:note: 'headers' declared here
56 | zend_llist headers;
| ^~~~~~~
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:In function
'zif_litespeed_finish_request':
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapi_main.c:1790:5:error:
implicit declaration of function 'php_header'
[-Wimplicit-function-declaration]
1790 | php_header();
| ^~~~~~~~~~
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lscriu.c:At top level:
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lscriu.c:314:14:warning:
'LSCRIU_Error_File_Name' defined but not used [-Wunused-function]
314 | static char *LSCRIU_Error_File_Name(char *pchFile, int max_len)
| ^~~~~~~~~~~~~~~~~~~~~~
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lscriu.c:104:12:warning:
's_criu_debug' defined but not used [-Wunused-variable]
104 | static int s_criu_debug= 0;
| ^~~~~~~~~~~~
make: *** [Makefile.litespeed:573: sapi/litespeed/lsapi_main.lo] Error 1
make: *** Waiting for unfinished jobs....
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapilib.c:In function
'LSAPI_ParseSockAddr':
/root/rpm/BUILD/php-7.4.33/sapi/litespeed/lsapilib.c:2641:9:warning:
'__builtin_strncpy' output may be truncated copying 108 bytes from a
string of length 255 [-Wstringop-truncation]
2641 | strncpy( ((struct sockaddr_un *)pAddr)->sun_path, p,
| ^
Kolejny patch jest potrzebny, którego nie mogę znaleźć.
PS. Zrobiłem też patcha dla libxml do wersji php-5.6.40, ale i z tą
wersją PHP jeszcze walczę, bo tam pojawiają się też inne błędy, których
nie mogę obejść.
/bin/sh /root/rpm/BUILD/php-5.6.40/libtool --silent --preserve-dup-deps
--tag=CC --mode=compile x86_64-pld-linux-gcc -Imain/
-I/root/rpm/BUILD/php-5.6.40/main/ -DPHP_ATOM_INC
-I/root/rpm/BUILD/php-5.6.40/in
clude -I/root/rpm/BUILD/php-5.6.40/main -I/root/rpm/BUILD/php-5.6.40
-I/root/rpm/BUILD/php-5.6.40/ext/date/lib -I/usr/include/libxml2
-I/usr/include/enchant -I/usr/include/freetype2 -I/usr/include/libpng16 -
I/usr/include/harfbuzz -I/usr/include/glib-2.0
-I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-6
-I/usr/include/imap -I/root/rpm/BUILD/php-5.6.40/ext/mbstring/oniguruma
-I/root/rpm/BUILD/php-5.6.40/ext/
mbstring/libmbfl -I/root/rpm/BUILD/php-5.6.40/ext/mbstring/libmbfl/mbfl
-I/usr/include/pspell -I/usr/include/tidy -I/usr/include/xmlrpc-epi
-I/root/rpm/BUILD/php-5.6.40/ext/zip/lib -I/root/rpm/BUILD/php-5.6.
40/TSRM -I/root/rpm/BUILD/php-5.6.40/Zend -DDEBUG_FASTCGI
-DHAVE_STRNDUP -DOPENSSL_NO_SSL2 -I/usr/include/xmlrpc-epi
-I/usr/include -O2 -fwrapv -pipe -Wformat -Werror=format-security
-gdwarf-4 -fno-debug-t
ypes-section -fvar-tracking-assignments -g2 -Wp,-D_FORTIFY_SOURCE=2
-fstack-protector-strong --param=ssp-buffer-size=4 -Werror=trampolines
-fPIC -march=x86-64 -mtune=generic -gdwarf-4 -fno-debug-types-sectio
n -fvar-tracking-assignments -g2 -c
/root/rpm/BUILD/php-5.6.40/main/reentrancy.c -o main/reentrancy.lo
/root/rpm/BUILD/php-5.6.40/main/reentrancy.c:In function 'php_readdir_r':
/root/rpm/BUILD/php-5.6.40/main/reentrancy.c:139:9:warning: 'readdir_r'
is deprecated [-Wdeprecated-declarations]
139 | readdir_r(dirp, entry);
| ^~~~~~~~~
In file included from
/root/rpm/BUILD/php-5.6.40/Zend/zend_virtual_cwd.h:90,
from /root/rpm/BUILD/php-5.6.40/main/php.h:404,
from /root/rpm/BUILD/php-5.6.40/main/php_reentrancy.h:24,
from /root/rpm/BUILD/php-5.6.40/main/reentrancy.c:28:
/usr/include/dirent.h:185:12:note: declared here
185 | extern int readdir_r(DIR *__restrict __dirp,
| ^~~~~~~~~
/root/rpm/BUILD/php-5.6.40/main/reentrancy.c:139:9:error: too few
arguments to function 'readdir_r'
139 | readdir_r(dirp, entry);
| ^~~~~~~~~
/usr/include/dirent.h:185:12:note: declared here
185 | extern int readdir_r(DIR *__restrict __dirp,
| ^~~~~~~~~
make: *** [Makefile:2420: main/reentrancy.lo] Error 1
make: *** Waiting for unfinished jobs....
błąd: Błędny stan wyjścia z /root/tmp/rpm-tmp.pwrEXI (%build)
More information about the pld-devel-pl
mailing list