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