checkin
OBS-URL: https://build.opensuse.org/package/show/devel:languages:php/php8?expand=0&rev=187
This commit is contained in:
commit
149894726f
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
## Default LFS
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.osc
|
131
README.macros
Normal file
131
README.macros
Normal file
@ -0,0 +1,131 @@
|
||||
README for php-macros
|
||||
|
||||
Author: Christian Wittmer <chris@computersalat.de>
|
||||
Author: Johannes Weberhofer <jweberhofer@weberhofer.at>
|
||||
|
||||
|
||||
%php_pear_gen_filelist generates an rpmlint happy filelist of your installed files
|
||||
|
||||
In most cases you only need to check the %doc part
|
||||
sometimes there is a "Changes" or "ChangeLog",....
|
||||
|
||||
Requirements for %php_pear_gen_filelist
|
||||
You have to define following parts inside your spec file
|
||||
|
||||
Example:
|
||||
|
||||
#
|
||||
# spec file for package php7-pear-Auth_SASL
|
||||
#
|
||||
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
%define php_name php7
|
||||
%define pear_name Auth_SASL
|
||||
Name: php7-pear-Auth_SASL
|
||||
Version: 1.1.0
|
||||
Release: 0
|
||||
Summary: Abstraction of various SASL mechanism responses
|
||||
License: BSD-3-Clause
|
||||
Group: Productivity/Networking/Web/Servers
|
||||
Url: http://pear.php.net/package/%{pear_name}
|
||||
Source: http://pear.php.net/get/%{pear_name}-%{version}.tgz
|
||||
BuildRequires: %{php_name}-devel
|
||||
BuildRequires: %{php_name}-pear >= 1.10.1
|
||||
Requires: %{php_name}-pear >= 1.10.1
|
||||
Provides: php-pear-%{pear_name} = %{version}
|
||||
Provides: php-pear(%{pear_name}) = %{version}
|
||||
Obsoletes: php5-pear-Auth_SASL
|
||||
BuildArch: noarch
|
||||
%if 0%{?suse_version} < 1330
|
||||
BuildRequires: %{php_name}-macros
|
||||
BuildRequires: %{php_name}-pear-Archive_Tar
|
||||
Requires: %{php_name}-pear-Archive_Tar
|
||||
%endif
|
||||
|
||||
%description
|
||||
Provides code to generate responses to common SASL mechanisms, including:
|
||||
- Digest-MD5
|
||||
- CramMD5
|
||||
- Plain
|
||||
- Anonymous
|
||||
- Login (Pseudo mechanism)
|
||||
|
||||
%prep
|
||||
%setup -q %setup -q -n %{pear_name}-%{version}
|
||||
mv ../package.xml .
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
%{__pear} install --nodeps --offline --packagingroot %{buildroot} package.xml
|
||||
install -D -m 0644 package.xml %{buildroot}%{pear_xmldir}/%{pear_name}.xml
|
||||
|
||||
rm -rf %{buildroot}/{doc,tmp}
|
||||
rm -rf %{buildroot}/%{php_peardir}/.{filemap,lock,registry,channels,depdb,depdblock}
|
||||
|
||||
%php_pear_gen_filelist
|
||||
|
||||
%post
|
||||
if [ "$1" = "1" ]; then
|
||||
# on "rpm -ivh"
|
||||
%{__pear} install --nodeps --soft --force --register-only %{pear_xmldir}/%{pear_name}.xml
|
||||
fi
|
||||
if [ "$1" = "2" ]; then
|
||||
# on "rpm -Uvh"
|
||||
%{__pear} upgrade --offline --register-only %{pear_xmldir}/%{pear_name}.xml
|
||||
fi
|
||||
|
||||
%postun
|
||||
if [ "$1" = "0" ]; then
|
||||
# on "rpm -e"
|
||||
%{__pear} uninstall --nodeps --ignore-errors --register-only pear.php.net/%{pear_name}
|
||||
fi
|
||||
|
||||
%files -f %{name}.files
|
||||
|
||||
%changelog
|
||||
|
||||
#############################################################################
|
||||
|
||||
And here an Example of the generated filelist (does not match above package):
|
||||
|
||||
/usr/share/php5/PEAR/Date.php
|
||||
%dir /usr/share/php5/PEAR/Date
|
||||
/usr/share/php5/PEAR/Date/Calc.php
|
||||
/usr/share/php5/PEAR/Date/Human.php
|
||||
/usr/share/php5/PEAR/Date/Span.php
|
||||
/usr/share/php5/PEAR/Date/TimeZone.php
|
||||
%dir /usr/share/php5/PEAR/test
|
||||
%dir /usr/share/php5/PEAR/test/Date
|
||||
%dir /usr/share/php5/PEAR/test/Date/tests
|
||||
/usr/share/php5/PEAR/test/Date/tests/test_date_methods_span.php
|
||||
/usr/share/php5/PEAR/test/Date/tests/testunit_date_span.php
|
||||
/usr/share/php5/PEAR/test/Date/tests/test_calc.php
|
||||
/usr/share/php5/PEAR/test/Date/tests/calc.php
|
||||
/usr/share/php5/PEAR/test/Date/tests/testunit_date.php
|
||||
/usr/share/php5/PEAR/test/Date/tests/testunit.php
|
||||
%dir /usr/share/php5/PEAR/test/Date/tests/bugs
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-1.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-2.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-3.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-4.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-674.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-9213.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-9414.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-8912.phpt
|
||||
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-967.phpt
|
||||
/var/lib/pear/Date.xml
|
||||
|
7
_multibuild
Normal file
7
_multibuild
Normal file
@ -0,0 +1,7 @@
|
||||
<multibuild>
|
||||
<package>apache2</package>
|
||||
<package>embed</package>
|
||||
<package>fastcgi</package>
|
||||
<package>fpm</package>
|
||||
<package>test</package>
|
||||
</multibuild>
|
55
build-test.sh
Normal file
55
build-test.sh
Normal file
@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
TEST_RESULT_FILE_BEFORE='test_results.before'
|
||||
TEST_RESULT_FILE_AFTER='test_results.after'
|
||||
|
||||
function usage
|
||||
{
|
||||
echo "usage: $0 buildroot [osc ARGUMENTS]"
|
||||
echo " 1. Run first time to create ${TEST_RESULT_FILE_BEFORE}."
|
||||
echo " 2. Make source changes."
|
||||
echo " 3. Run second time to create ${TEST_RESULT_FILE_AFTER}"
|
||||
echo " and see changes in test results."
|
||||
}
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo 'ERROR: missing a parameter: buildroot'
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" == "-h" ]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
export OSC_BUILD_ROOT=$1
|
||||
shift
|
||||
apiurl=`cat .osc/_apiurl 2>/dev/null`
|
||||
if [ ! -z "$apiurl" ]; then
|
||||
apiurl="-A $apiurl"
|
||||
fi
|
||||
osc $apiurl build $@ --no-verify --with make_test -x valgrind *.spec
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: build failed. See $OSC_BUILD_ROOT/.build.log for details."
|
||||
exit 1
|
||||
fi
|
||||
cat $OSC_BUILD_ROOT/.build.log \
|
||||
| sed 's:^\[[ 0-9]\+s\] ::' \
|
||||
| egrep 'TEST [0-9]+\/[0-9]+|SKIP.*reason' \
|
||||
| sed 's:.*\r::' \
|
||||
| sort \
|
||||
> ${TEST_RESULT_FILE_AFTER}
|
||||
if [ ! -e ${TEST_RESULT_FILE_BEFORE} ]; then
|
||||
echo "Creating ${TEST_RESULT_FILE_BEFORE}"
|
||||
echo "Run $0 again AFTER source changes, to create ${TEST_RESULT_FILE_AFTER}."
|
||||
echo "Differences will be checked then."
|
||||
mv ${TEST_RESULT_FILE_AFTER} ${TEST_RESULT_FILE_BEFORE}
|
||||
else
|
||||
echo --- DIFFERENCES -------------------------------------------
|
||||
diff -up $TEST_RESULT_FILE_BEFORE ${TEST_RESULT_FILE_AFTER}
|
||||
echo -----------------------------------------------------------
|
||||
echo "Do not forgot to "
|
||||
echo "rm ${TEST_RESULT_FILE_BEFORE} ${TEST_RESULT_FILE_AFTER}"
|
||||
echo
|
||||
fi
|
||||
|
96
macros.php
Normal file
96
macros.php
Normal file
@ -0,0 +1,96 @@
|
||||
# macros.php file
|
||||
# macros for module building. handle with care.
|
||||
|
||||
#
|
||||
# Interface versions exposed by PHP:
|
||||
#
|
||||
%php_core_api @PHP_APIVER@
|
||||
%php_zend_api @PHP_ZENDVER@
|
||||
|
||||
# Useful php macros (from Christian Wittmer <chris@computersalat.de>)
|
||||
#
|
||||
%__php /usr/bin/php
|
||||
%__phpize /usr/bin/phpize
|
||||
%__php_config /usr/bin/php-config
|
||||
%php_version %(%{__php_config} --version)
|
||||
%php_cfgdir %(%{__php_config} --ini-dir)
|
||||
%php_extdir %(%{__php_config} --extension-dir)
|
||||
|
||||
# pear related macros
|
||||
%__pear /usr/bin/pear
|
||||
%php_peardir %(%{__pear} config-get php_dir)
|
||||
|
||||
# %pear_xmldir should be replaced by %php_pearxmldir
|
||||
%pear_xmldir /var/lib/pear
|
||||
|
||||
%php_pearxmldir /var/lib/pear
|
||||
%pear_phpdir %(%{__pear} config-get php_dir 2> /dev/null || echo undefined)
|
||||
%pear_docdir %(%{__pear} config-get doc_dir 2> /dev/null || echo undefined)
|
||||
%pear_testdir %(%{__pear} config-get test_dir 2> /dev/null || echo undefined)
|
||||
%pear_datadir %(%{__pear} config-get data_dir 2> /dev/null || echo undefined)
|
||||
%pear_cfgdir %(%{__pear} config-get cfg_dir 2> /dev/null || echo undefined)
|
||||
%pear_wwwdir %(%{__pear} config-get www_dir 2> /dev/null || echo undefined)
|
||||
%pear_metadir %(%{__pear} config-get metadata_dir 2> /dev/null || echo undefined)
|
||||
|
||||
# pecl related macros
|
||||
%__pecl /usr/bin/pecl
|
||||
%pecl_phpdir %(%{__pecl} config-get php_dir 2> /dev/null || echo undefined)
|
||||
%pecl_docdir %(%{__pecl} config-get doc_dir 2> /dev/null || echo undefined)
|
||||
%pecl_testdir %(%{__pecl} config-get test_dir 2> /dev/null || echo undefined)
|
||||
%pecl_datadir %(%{__pecl} config-get data_dir 2> /dev/null || echo undefined)
|
||||
|
||||
# macro: php_pear_gen_filelist
|
||||
# do the rpmlint happy filelist generation
|
||||
# with %dir in front of directories
|
||||
%php_pear_gen_filelist(n)\
|
||||
FILES=%{name}.files\
|
||||
# fgen_dir func\
|
||||
# IN: dir\
|
||||
fgen_dir(){\
|
||||
%{__cat} >> $FILES << EOF\
|
||||
%dir ${1}\
|
||||
EOF\
|
||||
}\
|
||||
# fgen_file func\
|
||||
# IN: file\
|
||||
fgen_file(){\
|
||||
%{__cat} >> $FILES << EOF\
|
||||
${1}\
|
||||
EOF\
|
||||
}\
|
||||
# check for files in %{php_peardir}\
|
||||
RES=`find ${RPM_BUILD_ROOT}%{php_peardir} -maxdepth 1 -type f`\
|
||||
if [ -n "$RES" ]; then\
|
||||
for file in $RES; do\
|
||||
fgen_file "%{php_peardir}/$(basename ${file})"\
|
||||
done\
|
||||
fi\
|
||||
\
|
||||
# get all dirs into array\
|
||||
base_dir="${RPM_BUILD_ROOT}%{php_peardir}/"\
|
||||
for dir in `find ${base_dir} -type d | sort`; do\
|
||||
if [ "$dir" = "${base_dir}" ]; then\
|
||||
continue\
|
||||
else\
|
||||
el=`echo $dir | %{__awk} -F"${base_dir}" '{print $2}'`\
|
||||
all_dir=(${all_dir[@]} $el)\
|
||||
fi\
|
||||
done\
|
||||
\
|
||||
# build filelist\
|
||||
for i in ${all_dir[@]}; do\
|
||||
if [ -d ${base_dir}/${i} ]; then\
|
||||
RES=`find "${base_dir}/${i}" -maxdepth 1 -type f`\
|
||||
if [ -n "$RES" ]; then\
|
||||
fgen_dir "%{php_peardir}/${i}"\
|
||||
for file in $RES; do\
|
||||
fgen_file "%{php_peardir}/${i}/$(basename ${file})"\
|
||||
done\
|
||||
else\
|
||||
fgen_dir "%{php_peardir}/${i}"\
|
||||
fi\
|
||||
fi\
|
||||
done\
|
||||
# add xml file\
|
||||
fgen_file "%php_pearxmldir/%{pear_name}.xml"\
|
||||
#
|
17
mod_php8.conf
Normal file
17
mod_php8.conf
Normal file
@ -0,0 +1,17 @@
|
||||
<IfModule mod_php.c>
|
||||
<FilesMatch "\.ph(p[34578]?|tml)$">
|
||||
SetHandler application/x-httpd-php
|
||||
</FilesMatch>
|
||||
<FilesMatch "\.php[34578]?s$">
|
||||
SetHandler application/x-httpd-php-source
|
||||
</FilesMatch>
|
||||
DirectoryIndex index.php4
|
||||
DirectoryIndex index.php5
|
||||
DirectoryIndex index.php7
|
||||
DirectoryIndex index.php8
|
||||
DirectoryIndex index.php
|
||||
|
||||
php_value session.save_handler "files"
|
||||
php_value session.save_path "/var/lib/php8/sessions"
|
||||
</IfModule>
|
||||
|
BIN
php-8.3.11.tar.xz
(Stored with Git LFS)
Normal file
BIN
php-8.3.11.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
7
php-8.3.11.tar.xz.asc
Normal file
7
php-8.3.11.tar.xz.asc
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iHUEABYIAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCZs4m5wAKCRAcB3ncXAqd
|
||||
5GEcAQDijVOhXPZKRA3CPaut9JwOysoNgX9/A5zLeMGgTwUMIwEAwGig+o0XKonL
|
||||
Ay0PrGtv7SLU3ZUXKGIfo/E2jCDlUgE=
|
||||
=1Ytt
|
||||
-----END PGP SIGNATURE-----
|
BIN
php-8.3.13.tar.xz
(Stored with Git LFS)
Normal file
BIN
php-8.3.13.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
7
php-8.3.13.tar.xz.asc
Normal file
7
php-8.3.13.tar.xz.asc
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iHUEABYIAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCZxfylwAKCRAcB3ncXAqd
|
||||
5GjlAQCsFNinpnYAZ88GbsZEJQqWzPmItJRD9WWzaORbBm77IQEAlirlZBd2hV93
|
||||
JW8Su4q4+75tS15z1BwNgTlxVOsxGwY=
|
||||
=f4+r
|
||||
-----END PGP SIGNATURE-----
|
BIN
php-8.3.14.tar.xz
(Stored with Git LFS)
Normal file
BIN
php-8.3.14.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
16
php-8.3.14.tar.xz.asc
Normal file
16
php-8.3.14.tar.xz.asc
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEESx/A2d+SMhztn2FdvsVV4ioUNVMFAmc8rEcACgkQvsVV4ioU
|
||||
NVPz5BAAxNVnJ1Gc7mjX3k0AygzaunoQlBVzJyGeBCad6kY3snyMRhJy/kGhTT/H
|
||||
HOaVYEZ2wiLa9wdBmvxDQbHnWwxhprjj/7CFMtwC1mDKkA0/tNWOouazRJWJ7J2b
|
||||
H8rsdBFFUwqFJH4qdCnH4z6suURDzHn9l78GLpSU9U+dH1jRIwY8yxC/9jefhvP/
|
||||
hoXKCqpcye+FErp6IIboGs6vn8YJR4FjvkX3wy2oX+n4XbHhXN4MD5vgbgcSIJaU
|
||||
xpFSaGX+fHRJ2X/7wKFawxexotU1sk1ero/Va4YgWJHFkEXCcx23GGGT97dZ8qt5
|
||||
XlXD8rRlyz3DW3jyzGAY5nwqOw7c8IUV0/uwrTBP929I/2YMM//h9YCnXkw/fuOx
|
||||
YyYIIwI6Rds+xQD1OOVC6kJ0PkJUgsWTkcl4T5+3vsbIIBh5fyS1Me80qnL4/qp+
|
||||
9AU6hbncInw4gGantW3Rm4lLA+U614ONuvJe8V3EoW/semCHUCztKExLrCQ/O9xn
|
||||
PDhRbOpc6ZSpnYrBg6fCMbwFHI3fMz+ZoAsRqAK+AiuHuAUGGOLQWG0B8wf+b42f
|
||||
0ZvP6OJLCTtMl8UAyLKpRfycCueUk6CEEHWbyAGeuhBkERitRLv+xUNmIjZsxuC1
|
||||
Uo6WzEJupnDNgwRqkIrpKW26UEhA1FTQVDa/XwxsuOxtRSZrd74=
|
||||
=bYDn
|
||||
-----END PGP SIGNATURE-----
|
3
php-8.3.15.tar.xz
Normal file
3
php-8.3.15.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3df5d45637283f759eef8fc3ce03de829ded3e200c3da278936a684955d2f94f
|
||||
size 12525028
|
7
php-8.3.15.tar.xz.asc
Normal file
7
php-8.3.15.tar.xz.asc
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iHUEABYIAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCZ2HBGwAKCRAcB3ncXAqd
|
||||
5FfDAP9iE08nlyqBiw3lXXkncY6B77s0Eoa80HsPNEr2B4KBRQEAhubvFBf1eRAY
|
||||
jJHRKnonxL0ygmfvxTbHpqzqbP5tZw4=
|
||||
=bxek
|
||||
-----END PGP SIGNATURE-----
|
BIN
php-8.3.8.tar.xz
(Stored with Git LFS)
Normal file
BIN
php-8.3.8.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
16
php-8.3.8.tar.xz.asc
Normal file
16
php-8.3.8.tar.xz.asc
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEESx/A2d+SMhztn2FdvsVV4ioUNVMFAmZfK+4ACgkQvsVV4ioU
|
||||
NVNKGRAAp1I9pjv04n7OkvUyeIxCJ0Ou1GcoDTqoy30LpVrWswU1VkKBwb1Sr2Dj
|
||||
5efWKylCZZ9+9IzJJVGxG6hAPlFer9JMSuO+FZXjLnvAAgDJy64L2eOadjsg0u9+
|
||||
xKv2molW0arG25P3P8xRpXKisRy0JJpxNhTSUiXUUL/Gy0zW9Uc/6wrKPF5c3LQF
|
||||
i7UzpMuqaxOuXznwQaWhkcIk7GNDhZJAW5SsX6FFkxctbDXAICCfiFN1WPgfiG15
|
||||
ZYLexBZKGzufnH0T6b7o/pylFWhlVSt59B55witdimZciE8QCNKnmqCGafhYda/J
|
||||
UZAOb9X2MJjvBMRQLI6jpCoV8XAY5Jo7F5QkaZmnECydGj9XDADWYlVG4XLP0p34
|
||||
htcDB6odzURZDLxKYD97KRRL+bycj161Bh3WW7tRD9OIoNvtkgHg2ko531APUccl
|
||||
x1FFFkB9Trm9b/+y95EuCMN80BQXjd4Q6pQHaTo33UAlY182VfhewfWRB9OsLezn
|
||||
LXGZ9m4jC18AKnyrpLMPJuDUZjrorXOBjqQp0be8TlNhuXNbVgV+/WG/8+KChr7Y
|
||||
GBupFNkBpYHQsmQTZNuSJMqVzcxPFc1k4pp2SGvscVMPoqdgw9dRFsK6s40KbQ7g
|
||||
dXT8aLjWoYFAmE3bD7PJtWsnB3b/ghat6CuNGjLK9mp4V82Mv7Y=
|
||||
=aLaa
|
||||
-----END PGP SIGNATURE-----
|
3
php-8.3.9.tar.xz
Normal file
3
php-8.3.9.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bf4d7b8ea60a356064f88485278bd6f941a230ec16f0fc401574ce1445ad6c77
|
||||
size 12470616
|
7
php-8.3.9.tar.xz.asc
Normal file
7
php-8.3.9.tar.xz.asc
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iHUEABYIAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCZoQK9wAKCRAcB3ncXAqd
|
||||
5H8jAP9WEpSWbki9sfUQLT8qe3isaIKefFiXBQt0m4drCMgjVwEAvKf1mtCm3P91
|
||||
ATaVsdSJ04qGIvfhWOmZbqk/Ejg+1Qo=
|
||||
=vE3W
|
||||
-----END PGP SIGNATURE-----
|
13
php-ar-flags.patch
Normal file
13
php-ar-flags.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: php-8.3.15/configure.ac
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/configure.ac
|
||||
+++ php-8.3.15/configure.ac
|
||||
@@ -1668,7 +1668,7 @@ PHP_CONFIGURE_PART(Configuring libtool)
|
||||
|
||||
dnl Silence warning: `ar: 'u' modifier ignored since 'D' is the default`
|
||||
dnl See https://github.com/php/php-src/pull/3017
|
||||
-AC_SUBST(AR_FLAGS, [cr])
|
||||
+AC_SUBST(AR_FLAGS, [Dcr])
|
||||
|
||||
dnl Only allow AC_PROG_CXX and AC_PROG_CXXCPP if they are explicitly called (by
|
||||
dnl PHP_REQUIRE_CXX). Otherwise AC_PROG_LIBTOOL fails if there is no working C++
|
109
php-build-reproducible-phar.patch
Normal file
109
php-build-reproducible-phar.patch
Normal file
@ -0,0 +1,109 @@
|
||||
From 485e2a4e43458a417603d4ed219af3e79854ef46 Mon Sep 17 00:00:00 2001
|
||||
From: Arjen de Korte <build+github@de-korte.org>
|
||||
Date: Sat, 2 Jan 2021 17:57:18 +0100
|
||||
Subject: [PATCH 1/1] phar: honor SOURCE_DATE_EPOCH for timestamps
|
||||
|
||||
In order to build reproducible phars, honor SOURCE_DATE_EPOCH
|
||||
if set
|
||||
|
||||
Signed-off-by: Arjen de Korte <build+github@de-korte.org>
|
||||
---
|
||||
ext/phar/phar.c | 2 +-
|
||||
ext/phar/phar_internal.h | 15 +++++++++++++++
|
||||
ext/phar/stream.c | 2 +-
|
||||
ext/phar/tar.c | 2 +-
|
||||
ext/phar/util.c | 2 +-
|
||||
ext/phar/zip.c | 2 +-
|
||||
6 files changed, 18 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: php-8.3.15/ext/phar/phar.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/phar/phar.c
|
||||
+++ php-8.3.15/ext/phar/phar.c
|
||||
@@ -2996,7 +2996,7 @@ int phar_flush(phar_archive_data *phar,
|
||||
4: metadata-len
|
||||
+: metadata
|
||||
*/
|
||||
- mytime = time(NULL);
|
||||
+ mytime = source_date_epoch_time(NULL);
|
||||
phar_set_32(entry_buffer, entry->uncompressed_filesize);
|
||||
phar_set_32(entry_buffer+4, mytime);
|
||||
phar_set_32(entry_buffer+8, entry->compressed_filesize);
|
||||
Index: php-8.3.15/ext/phar/phar_internal.h
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/phar/phar_internal.h
|
||||
+++ php-8.3.15/ext/phar/phar_internal.h
|
||||
@@ -427,6 +427,21 @@ static inline enum phar_fp_type phar_get
|
||||
return PHAR_G(cached_fp)[entry->phar->phar_pos].manifest[entry->manifest_pos].fp_type;
|
||||
}
|
||||
|
||||
+static inline time_t source_date_epoch_time(time_t *tloc)
|
||||
+{
|
||||
+ const char *sde;
|
||||
+ time_t ts;
|
||||
+
|
||||
+ tsrm_env_lock();
|
||||
+ sde = getenv("SOURCE_DATE_EPOCH");
|
||||
+ ts = (sde) ? strtoul(sde, NULL, 10) : time(0);
|
||||
+ tsrm_env_unlock();
|
||||
+ if (tloc) {
|
||||
+ *tloc = ts;
|
||||
+ }
|
||||
+ return ts;
|
||||
+}
|
||||
+
|
||||
static inline zend_off_t phar_get_fp_offset(phar_entry_info *entry)
|
||||
{
|
||||
if (!entry->is_persistent) {
|
||||
Index: php-8.3.15/ext/phar/stream.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/phar/stream.c
|
||||
+++ php-8.3.15/ext/phar/stream.c
|
||||
@@ -474,7 +474,7 @@ static int phar_stream_flush(php_stream
|
||||
phar_entry_data *data = (phar_entry_data *) stream->abstract;
|
||||
|
||||
if (data->internal_file->is_modified) {
|
||||
- data->internal_file->timestamp = time(0);
|
||||
+ data->internal_file->timestamp = source_date_epoch_time(0);
|
||||
ret = phar_flush(data->phar, 0, 0, 0, &error);
|
||||
if (error) {
|
||||
php_stream_wrapper_log_error(stream->wrapper, REPORT_ERRORS, "%s", error);
|
||||
Index: php-8.3.15/ext/phar/tar.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/phar/tar.c
|
||||
+++ php-8.3.15/ext/phar/tar.c
|
||||
@@ -969,7 +969,7 @@ int phar_tar_flush(phar_archive_data *ph
|
||||
char halt_stub[] = "__HALT_COMPILER();";
|
||||
|
||||
entry.flags = PHAR_ENT_PERM_DEF_FILE;
|
||||
- entry.timestamp = time(NULL);
|
||||
+ entry.timestamp = source_date_epoch_time(NULL);
|
||||
entry.is_modified = 1;
|
||||
entry.is_crc_checked = 1;
|
||||
entry.is_tar = 1;
|
||||
Index: php-8.3.15/ext/phar/util.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/phar/util.c
|
||||
+++ php-8.3.15/ext/phar/util.c
|
||||
@@ -584,7 +584,7 @@ phar_entry_data *phar_get_or_create_entr
|
||||
|
||||
phar_add_virtual_dirs(phar, path, path_len);
|
||||
etemp.is_modified = 1;
|
||||
- etemp.timestamp = time(0);
|
||||
+ etemp.timestamp = source_date_epoch_time(0);
|
||||
etemp.is_crc_checked = 1;
|
||||
etemp.phar = phar;
|
||||
etemp.filename = estrndup(path, path_len);
|
||||
Index: php-8.3.15/ext/phar/zip.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/phar/zip.c
|
||||
+++ php-8.3.15/ext/phar/zip.c
|
||||
@@ -1236,7 +1236,7 @@ int phar_zip_flush(phar_archive_data *ph
|
||||
|
||||
pass.error = &temperr;
|
||||
entry.flags = PHAR_ENT_PERM_DEF_FILE;
|
||||
- entry.timestamp = time(NULL);
|
||||
+ entry.timestamp = source_date_epoch_time(NULL);
|
||||
entry.is_modified = 1;
|
||||
entry.is_zip = 1;
|
||||
entry.phar = phar;
|
24
php-date-regenerate-lexers.patch
Normal file
24
php-date-regenerate-lexers.patch
Normal file
@ -0,0 +1,24 @@
|
||||
Index: php-8.3.15/ext/date/config0.m4
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/date/config0.m4
|
||||
+++ php-8.3.15/ext/date/config0.m4
|
||||
@@ -27,6 +27,8 @@ timelib_sources="lib/astro.c lib/dow.c l
|
||||
|
||||
PHP_NEW_EXTENSION(date, php_date.c $timelib_sources, no,, $PHP_DATE_CFLAGS)
|
||||
|
||||
+PHP_ADD_MAKEFILE_FRAGMENT()
|
||||
+
|
||||
PHP_ADD_BUILD_DIR([$ext_builddir/lib], 1)
|
||||
PHP_ADD_INCLUDE([$ext_builddir/lib])
|
||||
PHP_ADD_INCLUDE([$ext_srcdir/lib])
|
||||
Index: php-8.3.15/ext/date/Makefile.frag
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ php-8.3.15/ext/date/Makefile.frag
|
||||
@@ -0,0 +1,6 @@
|
||||
+$(srcdir)/lib/parse_date.c: $(srcdir)/lib/parse_date.re
|
||||
+ @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) -b --no-generation-date -o ext/date/lib/parse_date.c ext/date/lib/parse_date.re)
|
||||
+
|
||||
+$(srcdir)/lib/parse_iso_intervals.c: $(srcdir)/lib/parse_iso_intervals.re
|
||||
+ @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) -b --no-generation-date -o ext/date/lib/parse_iso_intervals.c ext/date/lib/parse_iso_intervals.re)
|
||||
+
|
2
php-fpm.tmpfiles.d
Normal file
2
php-fpm.tmpfiles.d
Normal file
@ -0,0 +1,2 @@
|
||||
# Type Path Mode UID GID Age Argument
|
||||
d /run/php-fpm 0711 root root - -
|
44
php-ini.patch
Normal file
44
php-ini.patch
Normal file
@ -0,0 +1,44 @@
|
||||
Index: php-8.3.0/php.ini-production
|
||||
===================================================================
|
||||
--- php-8.3.0.orig/php.ini-production
|
||||
+++ php-8.3.0/php.ini-production
|
||||
@@ -752,7 +752,7 @@ default_charset = "UTF-8"
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
; UNIX: "/path1:/path2"
|
||||
-;include_path = ".:/php/includes"
|
||||
+include_path = ".:/usr/share/php8:/usr/share/php/PEAR"
|
||||
;
|
||||
; Windows: "\path1;\path2"
|
||||
;include_path = ".;c:\php\includes"
|
||||
@@ -986,7 +986,7 @@ cli_server.color = On
|
||||
[Date]
|
||||
; Defines the default timezone used by the date functions
|
||||
; https://php.net/date.timezone
|
||||
-;date.timezone =
|
||||
+date.timezone = 'UTC'
|
||||
|
||||
; https://php.net/date.default-latitude
|
||||
;date.default_latitude = 31.7667
|
||||
@@ -1179,7 +1179,7 @@ mysqli.max_persistent = -1
|
||||
|
||||
; Allow or prevent persistent links.
|
||||
; https://php.net/mysqli.allow-persistent
|
||||
-mysqli.allow_persistent = On
|
||||
+mysqli.allow_persistent = Off
|
||||
|
||||
; Maximum number of links. -1 means no limit.
|
||||
; https://php.net/mysqli.max-links
|
||||
Index: php-8.3.0/sapi/fpm/www.conf.in
|
||||
===================================================================
|
||||
--- php-8.3.0.orig/sapi/fpm/www.conf.in
|
||||
+++ php-8.3.0/sapi/fpm/www.conf.in
|
||||
@@ -27,6 +27,8 @@
|
||||
; If the group is not set, the user's group is used.
|
||||
user = @php_fpm_user@
|
||||
group = @php_fpm_group@
|
||||
+; session folder has to be writable by user:group
|
||||
+php_value[session.save_path] = /var/lib/php8/sessions
|
||||
|
||||
; The address on which to accept FastCGI requests.
|
||||
; Valid syntaxes are:
|
17
php-php-config.patch
Normal file
17
php-php-config.patch
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
scripts/php-config.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: php-8.0.0/scripts/php-config.in
|
||||
===================================================================
|
||||
--- php-8.0.0.orig/scripts/php-config.in 2020-11-24 18:04:03.000000000 +0100
|
||||
+++ php-8.0.0/scripts/php-config.in 2021-01-07 10:13:28.462563114 +0100
|
||||
@@ -6,7 +6,7 @@ datarootdir="@datarootdir@"
|
||||
exec_prefix="@exec_prefix@"
|
||||
version="@PHP_VERSION@"
|
||||
vernum="@PHP_VERSION_ID@"
|
||||
-include_dir="@includedir@/php"
|
||||
+include_dir="@includedir@/php8"
|
||||
includes="-I$include_dir -I$include_dir/main -I$include_dir/TSRM -I$include_dir/Zend -I$include_dir/ext -I$include_dir/ext/date/lib"
|
||||
ldflags="@PHP_LDFLAGS@"
|
||||
libs="@EXTRA_LIBS@"
|
35
php-phpize.patch
Normal file
35
php-phpize.patch
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
scripts/Makefile.frag | 4 ++--
|
||||
scripts/phpize.in | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: php-8.0.0/scripts/Makefile.frag
|
||||
===================================================================
|
||||
--- php-8.0.0.orig/scripts/Makefile.frag 2020-11-24 18:04:03.000000000 +0100
|
||||
+++ php-8.0.0/scripts/Makefile.frag 2021-01-07 10:13:16.914490379 +0100
|
||||
@@ -2,8 +2,8 @@
|
||||
# Build environment install
|
||||
#
|
||||
|
||||
-phpincludedir = $(includedir)/php
|
||||
-phpbuilddir = $(libdir)/build
|
||||
+phpincludedir = $(includedir)/php8
|
||||
+phpbuilddir = $(datadir)/build
|
||||
|
||||
BUILD_FILES = \
|
||||
scripts/phpize.m4 \
|
||||
Index: php-8.0.0/scripts/phpize.in
|
||||
===================================================================
|
||||
--- php-8.0.0.orig/scripts/phpize.in 2020-11-24 18:04:03.000000000 +0100
|
||||
+++ php-8.0.0/scripts/phpize.in 2021-01-07 10:13:16.914490379 +0100
|
||||
@@ -4,8 +4,8 @@
|
||||
prefix='@prefix@'
|
||||
datarootdir='@datarootdir@'
|
||||
exec_prefix="`eval echo @exec_prefix@`"
|
||||
-phpdir="`eval echo @libdir@`/build"
|
||||
-includedir="`eval echo @includedir@`/php"
|
||||
+phpdir="`eval echo @datadir@`/build"
|
||||
+includedir="`eval echo @includedir@`/php8"
|
||||
builddir="`pwd`"
|
||||
SED="@SED@"
|
||||
|
13
php-sort-filelist-phar.patch
Normal file
13
php-sort-filelist-phar.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: php-8.2.8/ext/phar/Makefile.frag
|
||||
===================================================================
|
||||
--- php-8.2.8.orig/ext/phar/Makefile.frag
|
||||
+++ php-8.2.8/ext/phar/Makefile.frag
|
||||
@@ -46,7 +46,7 @@ $(builddir)/phar.phar: $(builddir)/phar.
|
||||
if [ "$(TEST_PHP_EXECUTABLE_RES)" != 1 ]; then \
|
||||
rm -f $(builddir)/phar.phar; \
|
||||
rm -f $(srcdir)/phar.phar; \
|
||||
- $(PHP_PHARCMD_EXECUTABLE) $(PHP_PHARCMD_SETTINGS) $(builddir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x \\.svn -p 0 -s $(srcdir)/phar/phar.php -h sha1 -b "$(PHP_PHARCMD_BANG)" $(srcdir)/phar/; \
|
||||
+ $(PHP_PHARCMD_EXECUTABLE) $(PHP_PHARCMD_SETTINGS) $(builddir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x \\.svn -p 0 -s $(srcdir)/phar/phar.php -h sha1 -b "$(PHP_PHARCMD_BANG)" -l 9 $(srcdir)/phar/*.inc; \
|
||||
chmod +x $(builddir)/phar.phar; \
|
||||
else \
|
||||
echo "Skipping phar.phar generating during cross compilation"; \
|
16
php-systemd-unit.patch
Normal file
16
php-systemd-unit.patch
Normal file
@ -0,0 +1,16 @@
|
||||
Index: php-7.4.0RC6/sapi/fpm/php-fpm.service.in
|
||||
===================================================================
|
||||
--- php-7.4.0RC6.orig/sapi/fpm/php-fpm.service.in 2019-11-19 11:33:35.195960137 +0100
|
||||
+++ php-7.4.0RC6/sapi/fpm/php-fpm.service.in 2019-11-19 11:35:45.588688471 +0100
|
||||
@@ -5,10 +5,10 @@
|
||||
[Unit]
|
||||
Description=The PHP FastCGI Process Manager
|
||||
After=network.target
|
||||
+Before=apache2.service nginx.service lighttpd.service
|
||||
|
||||
[Service]
|
||||
Type=@php_fpm_systemd@
|
||||
-PIDFile=@EXPANDED_LOCALSTATEDIR@/run/php-fpm.pid
|
||||
ExecStart=@EXPANDED_SBINDIR@/php-fpm --nodaemonize --fpm-config @EXPANDED_SYSCONFDIR@/php-fpm.conf
|
||||
ExecReload=/bin/kill -USR2 $MAINPID
|
||||
|
746
php-systzdata-v24.patch
Normal file
746
php-systzdata-v24.patch
Normal file
@ -0,0 +1,746 @@
|
||||
# License: MIT
|
||||
# http://opensource.org/licenses/MIT
|
||||
|
||||
Add support for use of the system timezone database, rather
|
||||
than embedding a copy. Discussed upstream but was not desired.
|
||||
|
||||
History:
|
||||
f24: add internal UTC if tzdata is missing
|
||||
r23: fix possible buffer overflow
|
||||
r22: retrieve tzdata version from /usr/share/zoneinfo/tzdata.zi
|
||||
r21: adapt for timelib 2021.03 (in 8.1.0)
|
||||
r20: adapt for timelib 2020.03 (in 8.0.10RC1)
|
||||
r19: adapt for timelib 2020.02 (in 8.0.0beta2)
|
||||
r18: adapt for autotool change in 7.3.3RC1
|
||||
r17: adapt for timelib 2018.01 (in 7.3.2RC1)
|
||||
r16: adapt for timelib 2017.06 (in 7.2.3RC1)
|
||||
r15: adapt for timelib 2017.05beta7 (in 7.2.0RC1)
|
||||
r14: improve check for valid tz file
|
||||
r13: adapt for upstream changes to use PHP allocator
|
||||
r12: adapt for upstream changes for new zic
|
||||
r11: use canonical names to avoid more case sensitivity issues
|
||||
round lat/long from zone.tab towards zero per builtin db
|
||||
r10: make timezone case insensitive
|
||||
r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold)
|
||||
r8: fix compile error without --with-system-tzdata configured
|
||||
r7: improve check for valid timezone id to exclude directories
|
||||
r6: fix fd leak in r5, fix country code/BC flag use in
|
||||
timezone_identifiers_list() using system db,
|
||||
fix use of PECL timezonedb to override system db,
|
||||
r5: reverts addition of "System/Localtime" fake tzname.
|
||||
updated for 5.3.0, parses zone.tab to pick up mapping between
|
||||
timezone name, country code and long/lat coords
|
||||
r4: added "System/Localtime" tzname which uses /etc/localtime
|
||||
r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert)
|
||||
r2: add filesystem trawl to set up name alias index
|
||||
r1: initial revision
|
||||
|
||||
|
||||
Index: php-8.3.15/ext/date/config0.m4
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/date/config0.m4
|
||||
+++ php-8.3.15/ext/date/config0.m4
|
||||
@@ -4,6 +4,19 @@ AC_CHECK_HEADERS([io.h])
|
||||
dnl Check for strtoll, atoll
|
||||
AC_CHECK_FUNCS(strtoll atoll)
|
||||
|
||||
+PHP_ARG_WITH(system-tzdata, for use of system timezone data,
|
||||
+[ --with-system-tzdata[=DIR] to specify use of system timezone data],
|
||||
+no, no)
|
||||
+
|
||||
+if test "$PHP_SYSTEM_TZDATA" != "no"; then
|
||||
+ AC_DEFINE(HAVE_SYSTEM_TZDATA, 1, [Define if system timezone data is used])
|
||||
+
|
||||
+ if test "$PHP_SYSTEM_TZDATA" != "yes"; then
|
||||
+ AC_DEFINE_UNQUOTED(HAVE_SYSTEM_TZDATA_PREFIX, "$PHP_SYSTEM_TZDATA",
|
||||
+ [Define for location of system timezone data])
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
AX_CHECK_COMPILE_FLAG([-Wno-implicit-fallthrough],
|
||||
[PHP_DATE_CFLAGS="$PHP_DATE_CFLAGS -Wno-implicit-fallthrough"],,
|
||||
[-Werror])
|
||||
Index: php-8.3.15/ext/date/lib/parse_tz.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/date/lib/parse_tz.c
|
||||
+++ php-8.3.15/ext/date/lib/parse_tz.c
|
||||
@@ -26,9 +26,33 @@
|
||||
#include "timelib.h"
|
||||
#include "timelib_private.h"
|
||||
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+#include <sys/mman.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <limits.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+#include "php_scandir.h"
|
||||
+
|
||||
+static const unsigned char internal_utc[] = {
|
||||
+ 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||
+ 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x0a, 0x55, 0x54, 0x43,
|
||||
+ 0x30, 0x0a
|
||||
+};
|
||||
+
|
||||
+#else
|
||||
#define TIMELIB_SUPPORTS_V2DATA
|
||||
#define TIMELIB_SUPPORT_SLIM_FILE
|
||||
#include "timezonedb.h"
|
||||
+#endif
|
||||
+
|
||||
+#include <ctype.h>
|
||||
|
||||
#if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
|
||||
# if defined(__LITTLE_ENDIAN__)
|
||||
@@ -95,6 +119,11 @@ static int read_php_preamble(const unsig
|
||||
{
|
||||
uint32_t version;
|
||||
|
||||
+ if (memcmp(*tzf, "TZif", 4) == 0) {
|
||||
+ *tzf += 20;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
/* read ID */
|
||||
version = (*tzf)[3] - '0';
|
||||
*tzf += 4;
|
||||
@@ -577,7 +606,475 @@ void timelib_dump_tzinfo(timelib_tzinfo
|
||||
}
|
||||
}
|
||||
|
||||
-static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb)
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+
|
||||
+#ifdef HAVE_SYSTEM_TZDATA_PREFIX
|
||||
+#define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX
|
||||
+#else
|
||||
+#define ZONEINFO_PREFIX "/usr/share/zoneinfo"
|
||||
+#endif
|
||||
+
|
||||
+/* System timezone database pointer. */
|
||||
+static const timelib_tzdb *timezonedb_system;
|
||||
+
|
||||
+/* Hash table entry for the cache of the zone.tab mapping table. */
|
||||
+struct location_info {
|
||||
+ char code[2];
|
||||
+ double latitude, longitude;
|
||||
+ char name[64];
|
||||
+ char *comment;
|
||||
+ struct location_info *next;
|
||||
+};
|
||||
+
|
||||
+/* Cache of zone.tab. */
|
||||
+static struct location_info **system_location_table;
|
||||
+
|
||||
+/* Size of the zone.tab hash table; a random-ish prime big enough to
|
||||
+ * prevent too many collisions. */
|
||||
+#define LOCINFO_HASH_SIZE (1021)
|
||||
+
|
||||
+/* Compute a case insensitive hash of str */
|
||||
+static uint32_t tz_hash(const char *str)
|
||||
+{
|
||||
+ const unsigned char *p = (const unsigned char *)str;
|
||||
+ uint32_t hash = 5381;
|
||||
+ int c;
|
||||
+
|
||||
+ while ((c = tolower(*p++)) != '\0') {
|
||||
+ hash = (hash << 5) ^ hash ^ c;
|
||||
+ }
|
||||
+
|
||||
+ return hash % LOCINFO_HASH_SIZE;
|
||||
+}
|
||||
+
|
||||
+/* Parse an ISO-6709 date as used in zone.tab. Returns end of the
|
||||
+ * parsed string on success, or NULL on parse error. On success,
|
||||
+ * writes the parsed number to *result. */
|
||||
+static char *parse_iso6709(char *p, double *result)
|
||||
+{
|
||||
+ double v, sign;
|
||||
+ char *pend;
|
||||
+ size_t len;
|
||||
+
|
||||
+ if (*p == '+')
|
||||
+ sign = 1.0;
|
||||
+ else if (*p == '-')
|
||||
+ sign = -1.0;
|
||||
+ else
|
||||
+ return NULL;
|
||||
+
|
||||
+ p++;
|
||||
+ for (pend = p; *pend >= '0' && *pend <= '9'; pend++)
|
||||
+ ;;
|
||||
+
|
||||
+ /* Annoying encoding used by zone.tab has no decimal point, so use
|
||||
+ * the length to determine the format:
|
||||
+ *
|
||||
+ * 4 = DDMM
|
||||
+ * 5 = DDDMM
|
||||
+ * 6 = DDMMSS
|
||||
+ * 7 = DDDMMSS
|
||||
+ */
|
||||
+ len = pend - p;
|
||||
+ if (len < 4 || len > 7) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ /* p => [D]DD */
|
||||
+ v = (p[0] - '0') * 10.0 + (p[1] - '0');
|
||||
+ p += 2;
|
||||
+ if (len == 5 || len == 7)
|
||||
+ v = v * 10.0 + (*p++ - '0');
|
||||
+ /* p => MM[SS] */
|
||||
+ v += (10.0 * (p[0] - '0')
|
||||
+ + p[1] - '0') / 60.0;
|
||||
+ p += 2;
|
||||
+ /* p => [SS] */
|
||||
+ if (len > 5) {
|
||||
+ v += (10.0 * (p[0] - '0')
|
||||
+ + p[1] - '0') / 3600.0;
|
||||
+ p += 2;
|
||||
+ }
|
||||
+
|
||||
+ /* Round to five decimal place, not because it's a good idea,
|
||||
+ * but, because the builtin data uses rounded data, so, match
|
||||
+ * that. */
|
||||
+ *result = trunc(v * sign * 100000.0) / 100000.0;
|
||||
+
|
||||
+ return p;
|
||||
+}
|
||||
+
|
||||
+/* This function parses the zone.tab file to build up the mapping of
|
||||
+ * timezone to country code and geographic location, and returns a
|
||||
+ * hash table. The hash table is indexed by the function:
|
||||
+ *
|
||||
+ * tz_hash(timezone-name)
|
||||
+ */
|
||||
+static struct location_info **create_location_table(void)
|
||||
+{
|
||||
+ struct location_info **li, *i;
|
||||
+ char zone_tab[PATH_MAX];
|
||||
+ char line[512];
|
||||
+ FILE *fp;
|
||||
+
|
||||
+ strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab);
|
||||
+
|
||||
+ fp = fopen(zone_tab, "r");
|
||||
+ if (!fp) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ li = calloc(LOCINFO_HASH_SIZE, sizeof *li);
|
||||
+
|
||||
+ while (fgets(line, sizeof line, fp)) {
|
||||
+ char *p = line, *code, *name, *comment;
|
||||
+ uint32_t hash;
|
||||
+ double latitude, longitude;
|
||||
+
|
||||
+ while (isspace(*p))
|
||||
+ p++;
|
||||
+
|
||||
+ if (*p == '#' || *p == '\0' || *p == '\n')
|
||||
+ continue;
|
||||
+
|
||||
+ if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t')
|
||||
+ continue;
|
||||
+
|
||||
+ /* code => AA */
|
||||
+ code = p;
|
||||
+ p[2] = 0;
|
||||
+ p += 3;
|
||||
+
|
||||
+ /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */
|
||||
+ p = parse_iso6709(p, &latitude);
|
||||
+ if (!p) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ p = parse_iso6709(p, &longitude);
|
||||
+ if (!p) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!p || *p != '\t') {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* name = string */
|
||||
+ name = ++p;
|
||||
+ while (*p != '\t' && *p && *p != '\n')
|
||||
+ p++;
|
||||
+
|
||||
+ *p++ = '\0';
|
||||
+
|
||||
+ /* comment = string */
|
||||
+ comment = p;
|
||||
+ while (*p != '\t' && *p && *p != '\n')
|
||||
+ p++;
|
||||
+
|
||||
+ if (*p == '\n' || *p == '\t')
|
||||
+ *p = '\0';
|
||||
+
|
||||
+ hash = tz_hash(name);
|
||||
+ i = malloc(sizeof *i);
|
||||
+ memcpy(i->code, code, 2);
|
||||
+ strncpy(i->name, name, sizeof i->name);
|
||||
+ i->comment = strdup(comment);
|
||||
+ i->longitude = longitude;
|
||||
+ i->latitude = latitude;
|
||||
+ i->next = li[hash];
|
||||
+ li[hash] = i;
|
||||
+ /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */
|
||||
+ }
|
||||
+
|
||||
+ fclose(fp);
|
||||
+
|
||||
+ return li;
|
||||
+}
|
||||
+
|
||||
+/* Return location info from hash table, using given timezone name.
|
||||
+ * Returns NULL if the name could not be found. */
|
||||
+const struct location_info *find_zone_info(struct location_info **li,
|
||||
+ const char *name)
|
||||
+{
|
||||
+ uint32_t hash = tz_hash(name);
|
||||
+ const struct location_info *l;
|
||||
+
|
||||
+ if (!li) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ for (l = li[hash]; l; l = l->next) {
|
||||
+ if (timelib_strcasecmp(l->name, name) == 0)
|
||||
+ return l;
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+/* Filter out some non-tzdata files and the posix/right databases, if
|
||||
+ * present. */
|
||||
+static int index_filter(const struct dirent *ent)
|
||||
+{
|
||||
+ return strcmp(ent->d_name, ".") != 0
|
||||
+ && strcmp(ent->d_name, "..") != 0
|
||||
+ && strcmp(ent->d_name, "posix") != 0
|
||||
+ && strcmp(ent->d_name, "posixrules") != 0
|
||||
+ && strcmp(ent->d_name, "right") != 0
|
||||
+ && strstr(ent->d_name, ".list") == NULL
|
||||
+ && strstr(ent->d_name, ".tab") == NULL;
|
||||
+}
|
||||
+
|
||||
+static int sysdbcmp(const void *first, const void *second)
|
||||
+{
|
||||
+ const timelib_tzdb_index_entry *alpha = first, *beta = second;
|
||||
+
|
||||
+ return timelib_strcasecmp(alpha->id, beta->id);
|
||||
+}
|
||||
+
|
||||
+/* Retrieve tzdata version. */
|
||||
+static void retrieve_zone_version(timelib_tzdb *db)
|
||||
+{
|
||||
+ static char buf[30];
|
||||
+ char path[PATH_MAX];
|
||||
+ FILE *fp;
|
||||
+
|
||||
+ strncpy(path, ZONEINFO_PREFIX "/tzdata.zi", sizeof(path));
|
||||
+
|
||||
+ fp = fopen(path, "r");
|
||||
+ if (fp) {
|
||||
+ if (fgets(buf, sizeof(buf), fp)) {
|
||||
+ if (!memcmp(buf, "# version ", 10) &&
|
||||
+ isdigit(buf[10]) &&
|
||||
+ isdigit(buf[11]) &&
|
||||
+ isdigit(buf[12]) &&
|
||||
+ isdigit(buf[13]) &&
|
||||
+ islower(buf[14])) {
|
||||
+ if (buf[14] >= 't') { /* 2022t = 2022.20 */
|
||||
+ buf[17] = 0;
|
||||
+ buf[16] = buf[14] - 't' + '0';
|
||||
+ buf[15] = '2';
|
||||
+ } else if (buf[14] >= 'j') { /* 2022j = 2022.10 */
|
||||
+ buf[17] = 0;
|
||||
+ buf[16] = buf[14] - 'j' + '0';
|
||||
+ buf[15] = '1';
|
||||
+ } else { /* 2022a = 2022.1 */
|
||||
+ buf[16] = 0;
|
||||
+ buf[15] = buf[14] - 'a' + '1';
|
||||
+ }
|
||||
+ buf[14] = '.';
|
||||
+ db->version = buf+10;
|
||||
+ }
|
||||
+ }
|
||||
+ fclose(fp);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* Create the zone identifier index by trawling the filesystem. */
|
||||
+static void create_zone_index(timelib_tzdb *db)
|
||||
+{
|
||||
+ size_t dirstack_size, dirstack_top;
|
||||
+ size_t index_size, index_next;
|
||||
+ timelib_tzdb_index_entry *db_index;
|
||||
+ char **dirstack;
|
||||
+
|
||||
+ /* LIFO stack to hold directory entries to scan; each slot is a
|
||||
+ * directory name relative to the zoneinfo prefix. */
|
||||
+ dirstack_size = 32;
|
||||
+ dirstack = malloc(dirstack_size * sizeof *dirstack);
|
||||
+ dirstack_top = 1;
|
||||
+ dirstack[0] = strdup("");
|
||||
+
|
||||
+ /* Index array. */
|
||||
+ index_size = 64;
|
||||
+ db_index = malloc(index_size * sizeof *db_index);
|
||||
+ index_next = 0;
|
||||
+
|
||||
+ do {
|
||||
+ struct dirent **ents;
|
||||
+ char name[PATH_MAX], *top;
|
||||
+ int count;
|
||||
+
|
||||
+ /* Pop the top stack entry, and iterate through its contents. */
|
||||
+ top = dirstack[--dirstack_top];
|
||||
+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top);
|
||||
+
|
||||
+ count = php_scandir(name, &ents, index_filter, php_alphasort);
|
||||
+
|
||||
+ while (count > 0) {
|
||||
+ struct stat st;
|
||||
+ const char *leaf = ents[count - 1]->d_name;
|
||||
+
|
||||
+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s",
|
||||
+ top, leaf);
|
||||
+
|
||||
+ if (strlen(name) && stat(name, &st) == 0) {
|
||||
+ /* Name, relative to the zoneinfo prefix. */
|
||||
+ const char *root = top;
|
||||
+
|
||||
+ if (root[0] == '/') root++;
|
||||
+
|
||||
+ snprintf(name, sizeof name, "%s%s%s", root,
|
||||
+ *root ? "/": "", leaf);
|
||||
+
|
||||
+ if (S_ISDIR(st.st_mode)) {
|
||||
+ if (dirstack_top == dirstack_size) {
|
||||
+ dirstack_size *= 2;
|
||||
+ dirstack = realloc(dirstack,
|
||||
+ dirstack_size * sizeof *dirstack);
|
||||
+ }
|
||||
+ dirstack[dirstack_top++] = strdup(name);
|
||||
+ }
|
||||
+ else {
|
||||
+ if (index_next == index_size) {
|
||||
+ index_size *= 2;
|
||||
+ db_index = realloc(db_index,
|
||||
+ index_size * sizeof *db_index);
|
||||
+ }
|
||||
+
|
||||
+ db_index[index_next++].id = strdup(name);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ free(ents[--count]);
|
||||
+ }
|
||||
+
|
||||
+ if (count != -1) free(ents);
|
||||
+ free(top);
|
||||
+ } while (dirstack_top);
|
||||
+
|
||||
+ qsort(db_index, index_next, sizeof *db_index, sysdbcmp);
|
||||
+
|
||||
+ if (!index_next) {
|
||||
+ db_index[index_next++].id = strdup("UTC");
|
||||
+ }
|
||||
+ db->index = db_index;
|
||||
+ db->index_size = index_next;
|
||||
+
|
||||
+ free(dirstack);
|
||||
+}
|
||||
+
|
||||
+#define FAKE_HEADER "1234\0??\1??"
|
||||
+#define FAKE_UTC_POS (7 - 4)
|
||||
+
|
||||
+/* Create a fake data segment for database 'sysdb'. */
|
||||
+static void fake_data_segment(timelib_tzdb *sysdb,
|
||||
+ struct location_info **info)
|
||||
+{
|
||||
+ size_t n;
|
||||
+ char *data, *p;
|
||||
+
|
||||
+ data = malloc(3 * sysdb->index_size + sizeof(FAKE_HEADER) - 1);
|
||||
+
|
||||
+ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1);
|
||||
+
|
||||
+ for (n = 0; n < sysdb->index_size; n++) {
|
||||
+ const struct location_info *li;
|
||||
+ timelib_tzdb_index_entry *ent;
|
||||
+
|
||||
+ ent = (timelib_tzdb_index_entry *)&sysdb->index[n];
|
||||
+
|
||||
+ /* Lookup the timezone name in the hash table. */
|
||||
+ if (strcmp(ent->id, "UTC") == 0) {
|
||||
+ ent->pos = FAKE_UTC_POS;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ li = find_zone_info(info, ent->id);
|
||||
+ if (li) {
|
||||
+ /* If found, append the BC byte and the
|
||||
+ * country code; set the position for this
|
||||
+ * section of timezone data. */
|
||||
+ ent->pos = (p - data) - 4;
|
||||
+ *p++ = '\1';
|
||||
+ *p++ = li->code[0];
|
||||
+ *p++ = li->code[1];
|
||||
+ }
|
||||
+ else {
|
||||
+ /* If not found, the timezone data can
|
||||
+ * point at the header. */
|
||||
+ ent->pos = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ sysdb->data = (unsigned char *)data;
|
||||
+}
|
||||
+
|
||||
+/* Returns true if the passed-in stat structure describes a
|
||||
+ * probably-valid timezone file. */
|
||||
+static int is_valid_tzfile(const struct stat *st, int fd)
|
||||
+{
|
||||
+ if (fd) {
|
||||
+ char buf[20];
|
||||
+ if (read(fd, buf, 20)!=20) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ lseek(fd, SEEK_SET, 0);
|
||||
+ if (memcmp(buf, "TZif", 4)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+ return S_ISREG(st->st_mode) && st->st_size > 20;
|
||||
+}
|
||||
+
|
||||
+/* To allow timezone names to be used case-insensitively, find the
|
||||
+ * canonical name for this timezone, if possible. */
|
||||
+static const char *canonical_tzname(const char *timezone)
|
||||
+{
|
||||
+ if (timezonedb_system) {
|
||||
+ timelib_tzdb_index_entry *ent, lookup;
|
||||
+
|
||||
+ lookup.id = (char *)timezone;
|
||||
+
|
||||
+ ent = bsearch(&lookup, timezonedb_system->index,
|
||||
+ timezonedb_system->index_size, sizeof lookup,
|
||||
+ sysdbcmp);
|
||||
+ if (ent) {
|
||||
+ return ent->id;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return timezone;
|
||||
+}
|
||||
+
|
||||
+/* Return the mmap()ed tzfile if found, else NULL. On success, the
|
||||
+ * length of the mapped data is placed in *length. */
|
||||
+static char *map_tzfile(const char *timezone, size_t *length)
|
||||
+{
|
||||
+ char fname[PATH_MAX];
|
||||
+ struct stat st;
|
||||
+ char *p;
|
||||
+ int fd;
|
||||
+
|
||||
+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone));
|
||||
+
|
||||
+ fd = open(fname, O_RDONLY);
|
||||
+ if (fd == -1) {
|
||||
+ if (strcmp(timezone, "UTC")) {
|
||||
+ return NULL;
|
||||
+ } else {
|
||||
+ *length = sizeof(internal_utc);
|
||||
+ return internal_utc;
|
||||
+ }
|
||||
+ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) {
|
||||
+ close(fd);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ *length = st.st_size;
|
||||
+ p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
+ close(fd);
|
||||
+
|
||||
+ return p != MAP_FAILED ? p : NULL;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+static int inmem_seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb)
|
||||
{
|
||||
int left = 0, right = tzdb->index_size - 1;
|
||||
|
||||
@@ -603,9 +1100,49 @@ static int seek_to_tz_position(const uns
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int seek_to_tz_position(const unsigned char **tzf, const char *timezone,
|
||||
+ char **map, size_t *maplen,
|
||||
+ const timelib_tzdb *tzdb)
|
||||
+{
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+ if (tzdb == timezonedb_system) {
|
||||
+ char *orig;
|
||||
+
|
||||
+ orig = map_tzfile(timezone, maplen);
|
||||
+ if (orig == NULL) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ (*tzf) = (unsigned char *)orig;
|
||||
+ *map = orig;
|
||||
+ return 1;
|
||||
+ }
|
||||
+ else
|
||||
+#endif
|
||||
+ {
|
||||
+ return inmem_seek_to_tz_position(tzf, timezone, tzdb);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
const timelib_tzdb *timelib_builtin_db(void)
|
||||
{
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+ if (timezonedb_system == NULL) {
|
||||
+ timelib_tzdb *tmp = malloc(sizeof *tmp);
|
||||
+
|
||||
+ tmp->version = "0";
|
||||
+ tmp->data = NULL;
|
||||
+ create_zone_index(tmp);
|
||||
+ retrieve_zone_version(tmp);
|
||||
+ system_location_table = create_location_table();
|
||||
+ fake_data_segment(tmp, system_location_table);
|
||||
+ timezonedb_system = tmp;
|
||||
+ }
|
||||
+
|
||||
+ return timezonedb_system;
|
||||
+#else
|
||||
return &timezonedb_builtin;
|
||||
+#endif
|
||||
}
|
||||
|
||||
const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count)
|
||||
@@ -617,7 +1154,32 @@ const timelib_tzdb_index_entry *timelib_
|
||||
int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb)
|
||||
{
|
||||
const unsigned char *tzf;
|
||||
- return (seek_to_tz_position(&tzf, timezone, tzdb));
|
||||
+
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+ if (tzdb == timezonedb_system) {
|
||||
+ char fname[PATH_MAX];
|
||||
+ struct stat st;
|
||||
+
|
||||
+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ if (!strcmp(timezone, "UTC")) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ if (system_location_table) {
|
||||
+ if (find_zone_info(system_location_table, timezone) != NULL) {
|
||||
+ /* found in cache */
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone));
|
||||
+
|
||||
+ return stat(fname, &st) == 0 && is_valid_tzfile(&st, 0);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb));
|
||||
}
|
||||
|
||||
static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz)
|
||||
@@ -662,6 +1224,8 @@ static timelib_tzinfo* timelib_tzinfo_ct
|
||||
timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code)
|
||||
{
|
||||
const unsigned char *tzf;
|
||||
+ char *memmap = NULL;
|
||||
+ size_t maplen;
|
||||
timelib_tzinfo *tmp;
|
||||
int version;
|
||||
int transitions_result, types_result;
|
||||
@@ -669,7 +1233,7 @@ timelib_tzinfo *timelib_parse_tzfile(con
|
||||
|
||||
*error_code = TIMELIB_ERROR_NO_ERROR;
|
||||
|
||||
- if (seek_to_tz_position(&tzf, timezone, tzdb)) {
|
||||
+ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) {
|
||||
tmp = timelib_tzinfo_ctor(timezone);
|
||||
|
||||
version = read_preamble(&tzf, tmp, &type);
|
||||
@@ -712,11 +1276,38 @@ timelib_tzinfo *timelib_parse_tzfile(con
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+ if (memmap) {
|
||||
+ const struct location_info *li;
|
||||
+
|
||||
+ /* TZif-style - grok the location info from the system database,
|
||||
+ * if possible. */
|
||||
+
|
||||
+ if ((li = find_zone_info(system_location_table, timezone)) != NULL) {
|
||||
+ tmp->location.comments = timelib_strdup(li->comment);
|
||||
+ strncpy(tmp->location.country_code, li->code, 2);
|
||||
+ tmp->location.longitude = li->longitude;
|
||||
+ tmp->location.latitude = li->latitude;
|
||||
+ tmp->bc = 1;
|
||||
+ }
|
||||
+ else {
|
||||
+ set_default_location_and_comments(&tzf, tmp);
|
||||
+ }
|
||||
+
|
||||
+ /* Now done with the mmap segment - discard it. */
|
||||
+ if (memmap != internal_utc) {
|
||||
+ munmap(memmap, maplen);
|
||||
+ }
|
||||
+ } else {
|
||||
+#endif
|
||||
if (type == TIMELIB_TZINFO_PHP) {
|
||||
read_location(&tzf, tmp);
|
||||
} else {
|
||||
set_default_location_and_comments(&tzf, tmp);
|
||||
}
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+ }
|
||||
+#endif
|
||||
} else {
|
||||
*error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE;
|
||||
tmp = NULL;
|
||||
Index: php-8.3.15/ext/date/php_date.c
|
||||
===================================================================
|
||||
--- php-8.3.15.orig/ext/date/php_date.c
|
||||
+++ php-8.3.15/ext/date/php_date.c
|
||||
@@ -491,7 +491,11 @@ PHP_MINFO_FUNCTION(date)
|
||||
php_info_print_table_row(2, "date/time support", "enabled");
|
||||
php_info_print_table_row(2, "timelib version", TIMELIB_ASCII_VERSION);
|
||||
php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version);
|
||||
+#ifdef HAVE_SYSTEM_TZDATA
|
||||
+ php_info_print_table_row(2, "Timezone Database", "system");
|
||||
+#else
|
||||
php_info_print_table_row(2, "Timezone Database", php_date_global_timezone_db_enabled ? "external" : "internal");
|
||||
+#endif
|
||||
php_info_print_table_row(2, "Default timezone", guess_timezone(tzdb));
|
||||
php_info_print_table_end();
|
||||
|
15
php8-fpm.conf
Normal file
15
php8-fpm.conf
Normal file
@ -0,0 +1,15 @@
|
||||
<IfModule mod_proxy_fcgi.c>
|
||||
<FilesMatch "\.ph(p[34578]?|tml)$">
|
||||
SetHandler "proxy:fcgi://127.0.0.1:9000"
|
||||
</FilesMatch>
|
||||
|
||||
<FilesMatch "\.php[34578]?s$">
|
||||
SetHandler "proxy:fcgi://127.0.0.1:9000"
|
||||
</FilesMatch>
|
||||
|
||||
DirectoryIndex index.php4
|
||||
DirectoryIndex index.php5
|
||||
DirectoryIndex index.php7
|
||||
DirectoryIndex index.php8
|
||||
DirectoryIndex index.php
|
||||
</IfModule>
|
5975
php8.changes
Normal file
5975
php8.changes
Normal file
File diff suppressed because it is too large
Load Diff
265
php8.keyring
Normal file
265
php8.keyring
Normal file
@ -0,0 +1,265 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEYHHgIBYJKwYBBAHaRw8BAQdAOm0RDYTmM6omlqoTx6Wy65agVJ4q8EPGczNn
|
||||
YOrHyo20HUpha3ViIFplbGVua2EgPGJ1a2thQHBocC5uZXQ+iJMEExYIADsCGwMF
|
||||
CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUC
|
||||
YHHi+QIZAQAKCRAcB3ncXAqd5MZdAP0eAbdHgjHqKYol3QaXRhErAvvLHPSEXN5c
|
||||
AImF3zIICgD+NJZZMQDXd1OOKDt+YLiIqIq2ibRhOP5mZryPCGkq9QG0J0pha3Vi
|
||||
IFplbGVua2EgPGpha3ViLm9wZW5zc2xAZ21haWwuY29tPoiQBBMWCAA4FiEEwo2T
|
||||
dXVgPrSrtyWGHAd53FwKneQFAmBx4owCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgEC
|
||||
F4AACgkQHAd53FwKneS0NwEAt0IRpoCN/JNwg1TIseybpmC65nSzYVyX10xe4Ji5
|
||||
0dcBAI6TYA+47z6F4IVRg2c8Vtg1xktot7b/tKn6hgdv59sLtCdKYWt1YiBaZWxl
|
||||
bmthIDxqYWt1Yi56ZWxlbmthQGdtYWlsLmNvbT6IkAQTFggAOBYhBMKNk3V1YD60
|
||||
q7clhhwHedxcCp3kBQJgceAgAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ
|
||||
EBwHedxcCp3k+3MBAKuK15XyHw+sdFATFuW9vN+lXqHnYid2jRzQUoh5wG/FAQDc
|
||||
BXQgXRfe72XRoxY4AE3E4onGMfzW3kbDKDVF7o4zDrg4BGBx4CASCisGAQQBl1UB
|
||||
BQEBB0Bm2FjWsSDUwL5nbAhtl+rwnGLKbWiVYrwHQocgKFj6GwMBCAeIeAQYFggA
|
||||
IBYhBMKNk3V1YD60q7clhhwHedxcCp3kBQJgceAgAhsMAAoJEBwHedxcCp3k8ZwA
|
||||
/jLRHUBKIeRAxeGJhoqJRr2oTxrP887FuX9/ikSX21bcAQD90AB2fu6dpAkOFyZz
|
||||
X9UdE7QxtBhHVWRx3DRr4P/cDrgzBGBx4KcWCSsGAQQB2kcPAQEHQEDgLoxnsU3i
|
||||
jAnPZwAbShiRcxeQ/gXkqufbQlVJy/BfiPUEGBYIACYWIQTCjZN1dWA+tKu3JYYc
|
||||
B3ncXAqd5AUCYHHgpwIbAgUJAeEzgACBCRAcB3ncXAqd5HYgBBkWCAAdFiEEK92x
|
||||
XVRjS6mw6oyiCpxkP6el608FAmBx4KcACgkQCpxkP6el608JUgEA7NU04gu368gu
|
||||
lSeGbGcjAERgJmFcxHjyEoqb7eCR+9UBALhy3Q6VSio081TBhtg9M82QL0NoxlkZ
|
||||
NYg3TjzR5U4Mg9YA/1tG8HmWUqv5dE901v18ErGVKo8di06VqJT4jE8BRNLcAQCI
|
||||
PkJjNZFtt73kqNgwA/L2JPF2T6YJWYSPOtmQMrCnCw==
|
||||
=e6EH
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
wpxdIIyaoaS8NSuPIrV1g4SUXYs=
|
||||
=fB6k
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ovhBoCTlBaU=
|
||||
=Hyro
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
11
php8.rpmlintrc
Normal file
11
php8.rpmlintrc
Normal file
@ -0,0 +1,11 @@
|
||||
# Non-versioned shared library, php-embed requires
|
||||
# exact version of main package, parallel installation
|
||||
# not wanted
|
||||
addFilter("php.-embed.* shlib-policy-name-error")
|
||||
# PHP7 is (almost) obsolete, replaced by PHP8
|
||||
addFilter("obsolete-not-provided php7-*")
|
||||
# Silence expected error in configuration script
|
||||
addFilter("rpath-in-buildconfig /usr/bin/php-config")
|
||||
# False positives for scripts which check used shell
|
||||
addFilter("potential-bashisms /usr/share/php8/build/config.guess")
|
||||
addFilter("potential-bashisms /usr/share/php8/build/shtool")
|
Loading…
x
Reference in New Issue
Block a user