Browse Source

Copy php5 from old repository and update

Signed-off-by: W. Michael Petullo <mike@flyn.org>
lilik-openwrt-22.03
W. Michael Petullo 10 years ago
parent
commit
7771752217
11 changed files with 52539 additions and 0 deletions
  1. +538
    -0
      lang/php5/Makefile
  2. +311
    -0
      lang/php5/files/php.ini
  3. +3
    -0
      lang/php5/files/php5-fastcgi.config
  4. +30
    -0
      lang/php5/files/php5-fastcgi.init
  5. +50845
    -0
      lang/php5/patches/090-restore-sqlite2.patch
  6. +101
    -0
      lang/php5/patches/091-fix-sqlite2.patch
  7. +11
    -0
      lang/php5/patches/101-fix_membar_producer_link_error_gcc3x.patch
  8. +620
    -0
      lang/php5/patches/102-debian_patches_use_embedded_timezonedb.patch
  9. +19
    -0
      lang/php5/patches/103-debian_patches_use_embedded_timezonedb.patch
  10. +14
    -0
      lang/php5/patches/950-Fix-dl-cross-compiling-issue.patch
  11. +47
    -0
      lang/php5/pecl.mk

+ 538
- 0
lang/php5/Makefile View File

@ -0,0 +1,538 @@
#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=php
PKG_VERSION:=5.4.33
PKG_RELEASE:=1
PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
PKG_LICENSE=PHPv3.01
PKG_LICENSE_FILE=LICENSE
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.php.net/distributions/
PKG_MD5SUM:=c6878bb1cdb46bfc1e1a5cd67a024737
PKG_FIXUP:=libtool no-autoreconf
PKG_BUILD_PARALLEL:=1
PHP5_MODULES = \
calendar ctype curl \
fileinfo \
dom \
exif \
ftp \
gettext gd gmp \
hash \
iconv \
json \
ldap \
mbstring mcrypt mysql mysqli \
openssl \
pcntl pdo pdo-mysql pdo-pgsql pdo-sqlite pgsql \
session shmop simplexml soap sockets sqlite sqlite3 sysvmsg sysvsem sysvshm \
tokenizer \
xml xmlreader xmlwriter zip \
PKG_CONFIG_DEPENDS:= \
$(patsubst %,CONFIG_PACKAGE_php5-mod-%,$(PHP5_MODULES)) \
CONFIG_PHP5_FILTER CONFIG_PHP5_LIBXML CONFIG_PHP5_SYSTEMTZDATA
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
define Package/php5/Default
SUBMENU:=PHP
SECTION:=lang
CATEGORY:=Languages
TITLE:=PHP5 Hypertext preprocessor
URL:=http://www.php.net/
MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
DEPENDS:=php5
endef
define Package/php5/Default/description
PHP is a widely-used general-purpose scripting language that is especially
suited for Web development and can be embedded into HTML.
endef
define Package/php5/config
config PHP5_FILTER
bool "PHP5 Filter support"
depends on PACKAGE_php5-cli || PACKAGE_php5-cgi
config PHP5_LIBXML
bool "PHP5 LIBXML support"
depends on PACKAGE_php5-cli || PACKAGE_php5-cgi
config PHP5_SYSTEMTZDATA
bool "Use system timezone data instead of php's built-in database"
depends on PACKAGE_php5-cli || PACKAGE_php5-cgi
select PACKAGE_zoneinfo-core
default y
help
Enabling this feature automatically selects the zoneinfo-core package
which contains data for UTC timezone. To use other timezones you have
to install the corresponding zoneinfo-... package(s).
endef
define Package/php5
$(call Package/php5/Default)
DEPENDS:=+libpcre +zlib \
+PHP5_LIBXML:libxml2
endef
define Package/php5/description
$(call Package/php5/Default/description)
This package contains only the PHP config file. You must actually choose
your PHP flavour (cli, cgi or fastcgi).
endef
define Package/php5-cli
$(call Package/php5/Default)
TITLE+= (CLI)
endef
define Package/php5-cli/description
$(call Package/php5/Default/description)
This package contains the CLI version of the PHP5 interpreter.
endef
define Package/php5-cgi
$(call Package/php5/Default)
TITLE+= (CGI & FastCGI)
endef
define Package/php5-cgi/description
$(call Package/php5/Default/description)
This package contains the CGI version of the PHP5 interpreter.
endef
define Package/php5-fastcgi
$(call Package/php5/Default)
DEPENDS+= +php5-cgi
TITLE:=FastCGI startup script
endef
define Package/php5-fastcgi/description
As FastCGI support is now a core feature the php5-fastcgi package now depends
on the php5-cgi package, containing just the startup script.
endef
CONFIGURE_ARGS+= \
--enable-cli \
--enable-cgi \
--enable-shared \
--disable-static \
--disable-rpath \
--disable-debug \
--without-pear \
\
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php5 \
--disable-short-tags \
\
--with-zlib="$(STAGING_DIR)/usr" \
--with-zlib-dir="$(STAGING_DIR)/usr" \
--with-pcre-regex="$(STAGING_DIR)/usr" \
--disable-phar
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-calendar),)
CONFIGURE_ARGS+= --enable-calendar=shared
else
CONFIGURE_ARGS+= --disable-calendar
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-ctype),)
CONFIGURE_ARGS+= --enable-ctype=shared
else
CONFIGURE_ARGS+= --disable-ctype
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-curl),)
CONFIGURE_ARGS+= --with-curl=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-curl
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-fileinfo),)
CONFIGURE_ARGS+= --enable-fileinfo=shared
else
CONFIGURE_ARGS+= --disable-fileinfo
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-gettext),)
CONFIGURE_ARGS+= --with-gettext=shared,"$(STAGING_DIR)/usr/lib/libintl-full"
else
CONFIGURE_ARGS+= --without-gettext
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-dom),)
CONFIGURE_ARGS+= --enable-dom=shared
else
CONFIGURE_ARGS+= --disable-dom
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-exif),)
CONFIGURE_ARGS+= --enable-exif=shared
else
CONFIGURE_ARGS+= --disable-exif
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-ftp),)
CONFIGURE_ARGS+= --enable-ftp=shared
else
CONFIGURE_ARGS+= --disable-ftp
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-gd),)
CONFIGURE_ARGS+= \
--with-gd=shared \
--without-freetype-dir \
--with-jpeg-dir="$(STAGING_DIR)/usr" \
--with-png-dir="$(STAGING_DIR)/usr" \
--without-xpm-dir \
--without-t1lib \
--enable-gd-native-ttf \
--disable-gd-jis-conv
else
CONFIGURE_ARGS+= --without-gd
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-gmp),)
CONFIGURE_ARGS+= --with-gmp=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-gmp
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-hash),)
CONFIGURE_ARGS+= --enable-hash=shared
else
CONFIGURE_ARGS+= --disable-hash
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-iconv),)
CONFIGURE_ARGS+= --with-iconv=shared,"$(ICONV_PREFIX)"
else
CONFIGURE_ARGS+= --without-iconv
endif
ifneq ($(CONFIG_PACKAGE_php5-mod-json),)
CONFIGURE_ARGS+= --enable-json=shared
else
CONFIGURE_ARGS+= --disable-json
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-ldap),)
CONFIGURE_ARGS+= \
--with-ldap=shared,"$(STAGING_DIR)/usr" \
--with-ldap-sasl="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-ldap
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-mbstring),)
CONFIGURE_ARGS+= --enable-mbstring=shared --enable-mbregex
else
CONFIGURE_ARGS+= --disable-mbstring
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-mcrypt),)
CONFIGURE_ARGS+= --with-mcrypt=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-mcrypt
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-mysql),)
CONFIGURE_ARGS+= --with-mysql=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-mysql
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-mysqli),)
CONFIGURE_ARGS+= --with-mysqli=shared,"$(STAGING_DIR)/usr/bin/mysql_config"
else
CONFIGURE_ARGS+= --without-mysqli
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-openssl),)
CONFIGURE_ARGS+= \
--with-openssl=shared,"$(STAGING_DIR)/usr" \
--with-kerberos=no \
--with-openssl-dir="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-openssl
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-pcntl),)
CONFIGURE_ARGS+= --enable-pcntl=shared
else
CONFIGURE_ARGS+= --disable-pcntl
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-pdo),)
CONFIGURE_ARGS+= --enable-pdo=shared
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-pdo-mysql),)
CONFIGURE_ARGS+= --with-pdo-mysql=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-pdo-mysql
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-pdo-pgsql),)
CONFIGURE_ARGS+= --with-pdo-pgsql=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-pdo-pgsql
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-pdo-sqlite),)
CONFIGURE_ARGS+= --with-pdo-sqlite=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-pdo-sqlite
endif
else
CONFIGURE_ARGS+= --disable-pdo
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-pgsql),)
CONFIGURE_ARGS+= --with-pgsql=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-pgsql
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-session),)
CONFIGURE_ARGS+= --enable-session=shared
else
CONFIGURE_ARGS+= --disable-session
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-shmop),)
CONFIGURE_ARGS+= --enable-shmop=shared
else
CONFIGURE_ARGS+= --disable-shmop
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-simplexml),)
CONFIGURE_ARGS+= --enable-simplexml=shared
else
CONFIGURE_ARGS+= --disable-simplexml
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-soap),)
CONFIGURE_ARGS+= --enable-soap=shared
else
CONFIGURE_ARGS+= --disable-soap
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-sockets),)
CONFIGURE_ARGS+= --enable-sockets=shared
else
CONFIGURE_ARGS+= --disable-sockets
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-sqlite),)
CONFIGURE_ARGS+= --with-sqlite=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-sqlite
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-sqlite3),)
CONFIGURE_ARGS+= --with-sqlite3=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --without-sqlite3
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-sysvmsg),)
CONFIGURE_ARGS+= --enable-sysvmsg=shared
else
CONFIGURE_ARGS+= --disable-sysvmsg
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-sysvsem),)
CONFIGURE_ARGS+= --enable-sysvsem=shared
else
CONFIGURE_ARGS+= --disable-sysvsem
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-sysvshm),)
CONFIGURE_ARGS+= --enable-sysvshm=shared
else
CONFIGURE_ARGS+= --disable-sysvshm
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-tokenizer),)
CONFIGURE_ARGS+= --enable-tokenizer=shared
else
CONFIGURE_ARGS+= --disable-tokenizer
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-xml),)
CONFIGURE_ARGS+= --enable-xml=shared,"$(STAGING_DIR)/usr"
ifneq ($(CONFIG_PHP5_LIBXML),)
CONFIGURE_ARGS+= --with-libxml-dir="$(STAGING_DIR)/usr/include/libxml2"
else
CONFIGURE_ARGS+= --with-libexpat-dir="$(STAGING_DIR)/usr"
endif
else
CONFIGURE_ARGS+= --disable-xml
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-xmlreader),)
CONFIGURE_ARGS+= --enable-xmlreader=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --disable-xmlreader
endif
ifneq ($(SDK)$(CONFIG_PACKAGE_php5-mod-xmlwriter),)
CONFIGURE_ARGS+= --enable-xmlwriter=shared,"$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS+= --disable-xmlwriter
endif
ifneq ($(CONFIG_PACKAGE_php5-mod-zip),)
CONFIGURE_ARGS+= --enable-zip=shared
else
CONFIGURE_ARGS+= --disable-zip
endif
ifneq ($(SDK)$(CONFIG_PHP5_FILTER),)
CONFIGURE_ARGS+= --enable-filter
else
CONFIGURE_ARGS+= --disable-filter
endif
ifneq ($(SDK)$(CONFIG_PHP5_LIBXML),)
CONFIGURE_ARGS+= --enable-libxml
CONFIGURE_ARGS+= --with-libxml-dir="$(STAGING_DIR)/usr/include/libxml2"
else
CONFIGURE_ARGS+= --disable-libxml
endif
ifneq ($(CONFIG_PHP5_SYSTEMTZDATA),)
CONFIGURE_ARGS+= --with-system-tzdata
else
CONFIGURE_ARGS+= --without-system-tzdata
endif
CONFIGURE_VARS+= \
ac_cv_c_bigendian_php=$(if $(CONFIG_BIG_ENDIAN),yes,no) \
php_cv_cc_rpath="no" \
iconv_impl_name="gnu_libiconv" \
ac_cv_php_xml2_config_path="$(STAGING_DIR)/host/bin/xml2-config" \
define Package/php5/conffiles
/etc/php.ini
endef
define Package/php5/install
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) ./files/php.ini $(1)/etc/
endef
define Package/php5-cli/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_BUILD_DIR)/sapi/cli/php $(1)/usr/bin/php-cli
endef
define Package/php5-cgi/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_BUILD_DIR)/sapi/cgi/php-cgi $(1)/usr/bin/php-cgi
ln -sf php-cgi $(1)/usr/bin/php-fcgi
endef
define Package/php5-fastcgi/install
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/php5-fastcgi.config $(1)/etc/config/php5-fastcgi
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/php5-fastcgi.init $(1)/etc/init.d/php5-fastcgi
endef
define Build/Prepare
$(call Build/Prepare/Default)
( cd $(PKG_BUILD_DIR); touch configure.in; ./buildconf --force )
endef
define Build/InstallDev
mkdir -p $(PKG_BUILD_DIR)/staging/usr/bin
make -C $(PKG_BUILD_DIR) install INSTALL_ROOT=$(PKG_BUILD_DIR)/staging
rm -f $(PKG_BUILD_DIR)/staging/usr/bin/php
$(CP) $(PKG_BUILD_DIR)/staging/* $(STAGING_DIR_HOST)
sed -i -e "s#prefix='/usr'#prefix='$(STAGING_DIR_HOST)/usr'#" $(STAGING_DIR_HOST)/usr/bin/phpize
sed -i -e "s#exec_prefix=\"\`eval echo /usr\`\"#exec_prefix='$(STAGING_DIR_HOST)/usr'#" $(STAGING_DIR_HOST)/usr/bin/phpize
sed -i -e "s#prefix=\"/usr\"#prefix=\"$(STAGING_DIR_HOST)/usr\"#" $(STAGING_DIR_HOST)/usr/bin/php-config
endef
define BuildModule
define Package/php5-mod-$(1)
$(call Package/php5/Default)
ifneq ($(3),)
DEPENDS+=$(3)
endif
TITLE:=$(2) shared module
endef
define Package/php5-mod-$(1)/install
$(INSTALL_DIR) $$(1)/usr/lib/php
$(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/$(subst -,_,$(1)).so $$(1)/usr/lib/php/
$(INSTALL_DIR) $$(1)/etc/php5
echo "extension=$(subst -,_,$(1)).so" > $$(1)/etc/php5/$(subst -,_,$(1)).ini
endef
$$(eval $$(call BuildPackage,php5-mod-$(1)))
endef
$(eval $(call BuildPackage,php5))
$(eval $(call BuildPackage,php5-cli))
$(eval $(call BuildPackage,php5-cgi))
$(eval $(call BuildPackage,php5-fastcgi))
#$(eval $(call BuildModule,NAME,TITLE[,PKG DEPENDS]))
$(eval $(call BuildModule,calendar,Calendar))
$(eval $(call BuildModule,ctype,Ctype))
$(eval $(call BuildModule,curl,cURL,+PACKAGE_php5-mod-curl:libcurl))
$(eval $(call BuildModule,fileinfo,Fileinfo,+PACKAGE_php5-mod-fileinfo:libmagic))
$(eval $(call BuildModule,dom,DOM,+@PHP5_LIBXML +PACKAGE_php5-mod-dom:libxml2))
$(eval $(call BuildModule,exif,EXIF))
$(eval $(call BuildModule,ftp,FTP,+PACKAGE_php5-mod-ftp:libopenssl))
$(eval $(call BuildModule,gettext,Gettext,+PACKAGE_php5-mod-gettext:libintl-full))
$(eval $(call BuildModule,gd,GD graphics,+PACKAGE_php5-mod-gd:libjpeg +PACKAGE_php5-mod-gd:libpng))
$(eval $(call BuildModule,gmp,GMP,+PACKAGE_php5-mod-gmp:libgmp))
$(eval $(call BuildModule,hash,Hash))
$(eval $(call BuildModule,iconv,iConv,+PACKAGE_php5-mod-iconv:libiconv))
$(eval $(call BuildModule,json,JSON))
$(eval $(call BuildModule,ldap,LDAP,+PACKAGE_php5-mod-ldap:libopenldap +PACKAGE_php5-mod-ldap:libsasl2))
$(eval $(call BuildModule,mbstring,MBString))
$(eval $(call BuildModule,mcrypt,Mcrypt,+PACKAGE_php5-mod-mcrypt:libmcrypt +PACKAGE_php5-mod-mcrypt:libltdl))
$(eval $(call BuildModule,mysql,MySQL,+PACKAGE_php5-mod-mysql:libmysqlclient))
$(eval $(call BuildModule,mysqli,MySQL Improved Extension,+PACKAGE_php5-mod-mysqli:libmysqlclient))
$(eval $(call BuildModule,openssl,OpenSSL,+PACKAGE_php5-mod-openssl:libopenssl))
$(eval $(call BuildModule,pcntl,PCNTL))
$(eval $(call BuildModule,pdo,PHP Data Objects))
$(eval $(call BuildModule,pdo-mysql,PDO driver for MySQL,+php5-mod-pdo +PACKAGE_php5-mod-pdo-mysql:libmysqlclient))
$(eval $(call BuildModule,pdo-pgsql,PDO driver for PostgreSQL,+php5-mod-pdo +PACKAGE_php5-mod-pdo-pgsql:libpq))
$(eval $(call BuildModule,pdo-sqlite,PDO driver for SQLite 3.x,+php5-mod-pdo +PACKAGE_php5-mod-pdo-sqlite:libsqlite3 +PACKAGE_php5-mod-pdo-sqlite:libpthread +PACKAGE_php5-mod-pdo-sqlite:librt))
$(eval $(call BuildModule,pgsql,PostgreSQL,+PACKAGE_php5-mod-pgsql:libpq))
$(eval $(call BuildModule,session,Session))
$(eval $(call BuildModule,shmop,Shared Memory))
$(eval $(call BuildModule,simplexml,SimpleXML,+@PHP5_LIBXML +PACKAGE_php5-mod-simplexml:libxml2))
$(eval $(call BuildModule,soap,SOAP,+@PHP5_LIBXML +PACKAGE_php5-mod-soap:libxml2))
$(eval $(call BuildModule,sockets,Sockets))
$(eval $(call BuildModule,sqlite3,SQLite3,+PACKAGE_php5-mod-sqlite3:libsqlite3 +PACKAGE_php5-mod-sqlite3:libpthread))
$(eval $(call BuildModule,sysvmsg,System V messages))
$(eval $(call BuildModule,sysvsem,System V shared memory))
$(eval $(call BuildModule,sysvshm,System V semaphore))
$(eval $(call BuildModule,tokenizer,Tokenizer))
$(eval $(call BuildModule,xml,XML,+PHP5_LIBXML:libxml2 +!PHP5_LIBXML:libexpat))
$(eval $(call BuildModule,xmlreader,XMLReader,+@PHP5_LIBXML +PACKAGE_php5-mod-xmlreader:libxml2 +PACKAGE_php5-mod-xmlreader:libiconv))
$(eval $(call BuildModule,xmlwriter,XMLWriter,+@PHP5_LIBXML +PACKAGE_php5-mod-xmlwriter:libxml2 +PACKAGE_php5-mod-xmlwriter:libiconv))
$(eval $(call BuildModule,zip,ZIP,+PACKAGE_php5-mod-zip:zlib))

+ 311
- 0
lang/php5/files/php.ini View File

@ -0,0 +1,311 @@
[PHP]
zend.ze1_compatibility_mode = Off
; Language Options
engine = On
;short_open_tag = Off
precision = 12
y2k_compliance = On
output_buffering = Off
;output_handler =
zlib.output_compression = Off
;zlib.output_compression_level = -1
;zlib.output_handler =
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 100
;open_basedir =
disable_functions =
disable_classes =
; Colors for Syntax Highlighting mode. Anything that's acceptable in
; <span style="color: ???????"> would work.
;highlight.string = #DD0000
;highlight.comment = #FF9900
;highlight.keyword = #007700
;highlight.bg = #FFFFFF
;highlight.default = #0000BB
;highlight.html = #000000
;ignore_user_abort = On
;realpath_cache_size = 16k
;realpath_cache_ttl = 120
; Miscellaneous
expose_php = On
; Resource Limits
max_execution_time = 30 ; Maximum execution time of each script, in seconds.
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data.
;max_input_nesting_level = 64
memory_limit = 8M ; Maximum amount of memory a script may consume.
; Error handling and logging
; Error Level Constants:
; E_ALL - All errors and warnings (includes E_STRICT as of PHP 6.0.0)
; E_ERROR - fatal run-time errors
; E_RECOVERABLE_ERROR - almost fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it's automatically initialized to an
; empty string)
; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
; E_DEPRECATED - warn about code that will not work in future versions
; of PHP
; E_USER_DEPRECATED - user-generated deprecation warnings
;
; Common Values:
; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.)
; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.)
; Default Value: E_ALL & ~E_NOTICE
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
display_errors = On
display_startup_errors = Off
log_errors = Off
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
;report_zend_debug = 0
track_errors = Off
;html_errors = Off
;docref_root = "/phpmanual/"
;docref_ext = .html
;error_prepend_string = "<font color=#ff0000>"
;error_append_string = "</font>"
; Log errors to specified file.
;error_log = /var/log/php_errors.log
; Log errors to syslog.
;error_log = syslog
; Data Handling
;arg_separator.output = "&amp;"
;arg_separator.input = ";&"
variables_order = "EGPCS"
request_order = "GP"
register_globals = Off
register_long_arrays = Off
register_argc_argv = On
auto_globals_jit = On
post_max_size = 8M
;magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
;always_populate_raw_post_data = On
; Paths and Directories
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
doc_root = "/www"
user_dir =
extension_dir = "/usr/lib/php"
enable_dl = On
;cgi.force_redirect = 1
;cgi.nph = 1
;cgi.redirect_status_env = ;
cgi.fix_pathinfo=1
;fastcgi.impersonate = 1;
;fastcgi.logging = 0
;cgi.rfc2616_headers = 0
; File Uploads
file_uploads = On
upload_tmp_dir = "/tmp"
upload_max_filesize = 2M
max_file_uploads = 20
; Fopen wrappers
allow_url_fopen = On
allow_url_include = Off
;from="john@doe.com"
;user_agent="PHP"
default_socket_timeout = 60
;auto_detect_line_endings = Off
; Dynamic Extensions
;extension=ctype.so
;extension=curl.so
;extension=dom.so
;extension=exif.so
;extension=ftp.so
;extension=gd.so
;extension=gmp.so
;extension=hash.so
;extension=iconv.so
;extension=json.so
;extension=ldap.so
;extension=mbstring.so
;extension=mcrypt.so
;extension=mysql.so
;extension=openssl.so
;extension=pcre.so
;extension=pdo.so
;extension=pdo-mysql.so
;extension=pdo-pgsql.so
;extension=pdo_sqlite.so
;extension=pgsql.so
;extension=session.so
;extension=soap.so
;extension=sockets.so
;extension=sqlite.so
;extension=sqlite3.so
;extension=tokenizer.so
;extension=xml.so
;extension=xmlreader.so
;extension=xmlwriter.so
; Module Settings
[APC]
apc.enabled = 1
apc.shm_segments = 1 ;The number of shared memory segments to allocate for the compiler cache.
apc.shm_size = 4M ;The size of each shared memory segment.
[Date]
;date.timezone =
;date.default_latitude = 31.7667
;date.default_longitude = 35.2333
;date.sunrise_zenith = 90.583333
;date.sunset_zenith = 90.583333
[filter]
;filter.default = unsafe_raw
;filter.default_flags =
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
[sqlite]
;sqlite.assoc_case = 0
[sqlite3]
;sqlite3.extension_dir =
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Session]
session.save_handler = files
session.save_path = "/tmp"
session.use_cookies = 1
;session.cookie_secure =
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = On
session.bug_compat_warn = On
session.referer_check =
session.entropy_length = 0
;session.entropy_file = /dev/urandom
session.entropy_file =
;session.entropy_length = 16
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
[mbstring]
;mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.encoding_translation = Off
;mbstring.detect_order = auto
;mbstring.substitute_character = none;
;mbstring.func_overload = 0
;mbstring.strict_detection = Off
;mbstring.http_output_conv_mimetype=
;mbstring.script_encoding=
[gd]
;gd.jpeg_ignore_warning = 0
[exif]
;exif.encode_unicode = ISO-8859-15
;exif.decode_unicode_motorola = UCS-2BE
;exif.decode_unicode_intel = UCS-2LE
;exif.encode_jis =
;exif.decode_jis_motorola = JIS
;exif.decode_jis_intel = JIS
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
;sysvshm.init_mem = 10000
[ldap]
ldap.max_links = -1
[mcrypt]
;mcrypt.algorithms_dir=
;mcrypt.modes_dir=

+ 3
- 0
lang/php5/files/php5-fastcgi.config View File

@ -0,0 +1,3 @@
config php5-fastcgi
option enabled 1
option port '1026'

+ 30
- 0
lang/php5/files/php5-fastcgi.init View File

@ -0,0 +1,30 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2010-2011 OpenWrt.org
START=50
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
start_instance() {
local section="$1"
local enabled
local port
config_get_bool enabled "$section" 'enabled' 0
config_get port "$section" 'port' 1026
[ $enabled -gt 0 ] || return 1
PHP_FCGI_CHILDREN='' \
service_start /usr/bin/php-fcgi -b $port
}
start() {
config_load 'php5-fastcgi'
config_foreach start_instance 'php5-fastcgi'
}
stop() {
service_stop /usr/bin/php-fcgi
}

+ 50845
- 0
lang/php5/patches/090-restore-sqlite2.patch
File diff suppressed because it is too large
View File


+ 101
- 0
lang/php5/patches/091-fix-sqlite2.patch View File

@ -0,0 +1,101 @@
--- a/ext/sqlite/pdo_sqlite2.c
+++ b/ext/sqlite/pdo_sqlite2.c
@@ -522,11 +522,6 @@ static char *make_filename_safe(const ch
return NULL;
}
- if (PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- efree(fullpath);
- return NULL;
- }
-
if (php_check_open_basedir(fullpath TSRMLS_CC)) {
efree(fullpath);
return NULL;
@@ -585,7 +580,7 @@ static int pdo_sqlite2_handle_factory(pd
if (!filename) {
zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC,
- "safe_mode/open_basedir prohibits opening %s",
+ "open_basedir prohibits opening %s",
dbh->data_source);
goto cleanup;
}
--- a/ext/sqlite/sqlite.c
+++ b/ext/sqlite/sqlite.c
@@ -1066,10 +1066,6 @@ static int php_sqlite_authorizer(void *a
case SQLITE_COPY:
if (strncmp(arg4, ":memory:", sizeof(":memory:") - 1)) {
TSRMLS_FETCH();
- if (PG(safe_mode) && (!php_checkuid(arg4, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return SQLITE_DENY;
- }
-
if (php_check_open_basedir(arg4 TSRMLS_CC)) {
return SQLITE_DENY;
}
@@ -1079,10 +1075,6 @@ static int php_sqlite_authorizer(void *a
case SQLITE_ATTACH:
if (strncmp(arg3, ":memory:", sizeof(":memory:") - 1)) {
TSRMLS_FETCH();
- if (PG(safe_mode) && (!php_checkuid(arg3, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
- return SQLITE_DENY;
- }
-
if (php_check_open_basedir(arg3 TSRMLS_CC)) {
return SQLITE_DENY;
}
@@ -1160,13 +1152,12 @@ static void sqlite_object_free_storage(v
static void sqlite_object_new(zend_class_entry *class_type, zend_object_handlers *handlers, zend_object_value *retval TSRMLS_DC)
{
sqlite_object *intern;
- zval *tmp;
intern = emalloc(sizeof(sqlite_object));
memset(intern, 0, sizeof(sqlite_object));
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+ object_properties_init(&intern->std, class_type);
retval->handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) sqlite_object_free_storage, NULL TSRMLS_CC);
retval->handlers = handlers;
@@ -1510,7 +1501,7 @@ static struct php_sqlite_db *php_sqlite_
/* authorizer hook so we can enforce safe mode
* Note: the declaration of php_sqlite_authorizer is correct for 2.8.2 of libsqlite,
* and IS backwards binary compatible with earlier versions */
- if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) {
+ if (PG(open_basedir) && *PG(open_basedir)) {
sqlite_set_authorizer(sdb, php_sqlite_authorizer, NULL);
}
@@ -1569,8 +1560,7 @@ PHP_FUNCTION(sqlite_popen)
RETURN_FALSE;
}
- if ((PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) ||
- php_check_open_basedir(fullpath TSRMLS_CC)) {
+ if (php_check_open_basedir(fullpath TSRMLS_CC)) {
efree(fullpath);
RETURN_FALSE;
}
@@ -1656,8 +1646,7 @@ PHP_FUNCTION(sqlite_open)
}
}
- if ((PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) ||
- php_check_open_basedir(fullpath TSRMLS_CC)) {
+ if (php_check_open_basedir(fullpath TSRMLS_CC)) {
efree(fullpath);
zend_restore_error_handling(&error_handling TSRMLS_CC);
if (object) {
@@ -1710,8 +1699,7 @@ PHP_FUNCTION(sqlite_factory)
RETURN_NULL();
}
- if ((PG(safe_mode) && (!php_checkuid(fullpath, NULL, CHECKUID_CHECK_FILE_AND_DIR))) ||
- php_check_open_basedir(fullpath TSRMLS_CC)) {
+ if (php_check_open_basedir(fullpath TSRMLS_CC)) {
efree(fullpath);
zend_restore_error_handling(&error_handling TSRMLS_CC);
RETURN_NULL();

+ 11
- 0
lang/php5/patches/101-fix_membar_producer_link_error_gcc3x.patch View File

@ -0,0 +1,11 @@
--- a/ext/standard/php_crypt_r.c
+++ b/ext/standard/php_crypt_r.c
@@ -96,6 +96,8 @@ void _crypt_extended_init_r(void)
InterlockedIncrement(&initialized);
#elif defined(HAVE_SYNC_FETCH_AND_ADD)
__sync_fetch_and_add(&initialized, 1);
+#elif (defined(__GNUC__) && (__GNUC__ == 3))
+ initialized = 1;
#elif defined(HAVE_ATOMIC_H) /* Solaris 10 defines atomic API within */
membar_producer();
atomic_add_int(&initialized, 1);

+ 620
- 0
lang/php5/patches/102-debian_patches_use_embedded_timezonedb.patch View File

@ -0,0 +1,620 @@
Add support for use of the system timezone database, rather
than embedding a copy. Discussed upstream but was not desired.
History:
r9: fix another compile error without --with-system-tzdata configured
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
--- a/ext/date/lib/parse_tz.c
+++ b/ext/date/lib/parse_tz.c
@@ -20,6 +20,16 @@
#include "timelib.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"
+#endif
+
#include <stdio.h>
#ifdef HAVE_LOCALE_H
@@ -31,7 +41,12 @@
#else
#include <strings.h>
#endif
+
+#ifndef HAVE_SYSTEM_TZDATA
#include "timezonedb.h"
+#endif
+
+#include <ctype.h>
#if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
# if defined(__LITTLE_ENDIAN__)
@@ -51,9 +66,14 @@
static void read_preamble(const unsigned char **tzf, timelib_tzinfo *tz)
{
- /* skip ID */
- *tzf += 4;
-
+ if (memcmp(tzf, "TZif", 4) == 0) {
+ *tzf += 20;
+ return;
+ }
+
+ /* skip ID */
+ *tzf += 4;
+
/* read BC flag */
tz->bc = (**tzf == '\1');
*tzf += 1;
@@ -256,7 +276,397 @@ void timelib_dump_tzinfo(timelib_tzinfo
}
}
-static int seek_to_tz_position(const unsigned char **tzf, 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 = NULL;
+
+/* 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)
+
+static uint32_t tz_hash(const char *str)
+{
+ const unsigned char *p = (const unsigned char *)str;
+ uint32_t hash = 5381;
+ int c;
+
+ while ((c = *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 = round(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 (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, ".tab") == NULL;
+}
+
+static int sysdbcmp(const void *first, const void *second)
+{
+ const timelib_tzdb_index_entry *alpha = first, *beta = second;
+
+ return strcmp(alpha->id, beta->id);
+}
+
+
+/* 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);
+
+ 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 + 7);
+
+ 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)
+{
+ return S_ISREG(st->st_mode) && st->st_size > 20;
+}
+
+/* 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", timezone);
+
+ fd = open(fname, O_RDONLY);
+ if (fd == -1) {
+ return NULL;
+ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st)) {
+ 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, char *timezone, const timelib_tzdb *tzdb)
{
int left = 0, right = tzdb->index_size - 1;
#ifdef HAVE_SETLOCALE
@@ -295,36 +705,128 @@ static int seek_to_tz_position(const uns
return 0;
}
+static int seek_to_tz_position(const unsigned char **tzf, 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.system";
+ tmp->data = NULL;
+ create_zone_index(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_builtin_identifiers_list(int *count)
{
+#ifdef HAVE_SYSTEM_TZDATA
+ *count = timezonedb_system->index_size;
+ return timezonedb_system->index;
+#else
*count = sizeof(timezonedb_idx_builtin) / sizeof(*timezonedb_idx_builtin);
return timezonedb_idx_builtin;
+#endif
}
int timelib_timezone_id_is_valid(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;
+ }
+
+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", timezone);
+
+ return stat(fname, &st) == 0 && is_valid_tzfile(&st);
+ }
+#endif
+
+ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb));
}
timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb)
{
const unsigned char *tzf;
+ char *memmap = NULL;
+ size_t maplen;
timelib_tzinfo *tmp;
- if (seek_to_tz_position(&tzf, timezone, tzdb)) {
+ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) {
tmp = timelib_tzinfo_ctor(timezone);
read_preamble(&tzf, tmp);
read_header(&tzf, tmp);
read_transistions(&tzf, tmp);
read_types(&tzf, tmp);
- read_location(&tzf, tmp);
+
+#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 = 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 {
+ strcpy(tmp->location.country_code, "??");
+ tmp->bc = 0;
+ tmp->location.comments = strdup("");
+ }
+
+ /* Now done with the mmap segment - discard it. */
+ munmap(memmap, maplen);
+ } else
+#endif
+ {
+ /* PHP-style - use the embedded info. */
+ read_location(&tzf, tmp);
+ }
} else {
tmp = NULL;
}
--- a/ext/date/lib/timelib.m4
+++ b/ext/date/lib/timelib.m4
@@ -78,3 +78,17 @@ stdlib.h
dnl Check for strtoll, atoll
AC_CHECK_FUNCS(strtoll atoll strftime)
+
+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
+

+ 19
- 0
lang/php5/patches/103-debian_patches_use_embedded_timezonedb.patch View File

@ -0,0 +1,19 @@
Author: Sean Finney <seanius@debian.org>
Forwarded: no (upstream doesn't want it)
Description: Silence warnings about using the default system timezone info
In vanilla upstream php, this is considered an error (i.e. the user must
set the timezone explicitly), though with our use of the system timezonedb
patch, we actually feel quite comfortable using the default timezone info.
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=571762
--- a/ext/date/tests/date_default_timezone_set-1.phpt
+++ b/ext/date/tests/date_default_timezone_set-1.phpt
@@ -22,9 +22,6 @@ date.timezone=
echo date(DATE_ISO8601, $date4), "\n";
?>
--EXPECTF--
-Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in %sdate_default_timezone_set-1.php on line 3
-
-Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in %sdate_default_timezone_set-1.php on line 4
America/Indiana/Knox
2005-01-12T03:00:00-0500
2005-07-12T03:00:00-0500

+ 14
- 0
lang/php5/patches/950-Fix-dl-cross-compiling-issue.patch View File

@ -0,0 +1,14 @@
--- a/configure.in
+++ b/configure.in
@@ -453,7 +453,10 @@ PHP_CHECK_FUNC(gethostname, nsl)
PHP_CHECK_FUNC(gethostbyaddr, nsl)
PHP_CHECK_FUNC(yp_get_default_domain, nsl)
-PHP_CHECK_FUNC(dlopen, dl)
+PHP_ADD_LIBRARY(dl)
+PHP_DEF_HAVE(dlopen)
+PHP_DEF_HAVE(libdl)
+ac_cv_func_dlopen=yes
if test "$ac_cv_func_dlopen" = "yes"; then
AC_DEFINE(HAVE_LIBDL, 1, [ ])
fi

+ 47
- 0
lang/php5/pecl.mk View File

@ -0,0 +1,47 @@
#
# Copyright (C) 2011-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Package/php5-pecl/Default
SUBMENU:=PHP
SECTION:=lang
CATEGORY:=Languages
URL:=http://pecl.php.net/
MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
DEPENDS:=php5
endef
define Build/Configure
( cd $(PKG_BUILD_DIR); $(STAGING_DIR_HOST)/usr/bin/phpize )
$(Build/Configure/Default)
endef
CONFIGURE_ARGS+= \
--with-php-config=$(STAGING_DIR_HOST)/usr/bin/php-config
define PECLPackage
define Package/php5-pecl-$(1)
$(call Package/php5-pecl/Default)
TITLE:=$(2)
ifneq ($(3),)
DEPENDS+=$(3)
endif
endef
define Package/php5-pecl-$(1)/install
$(INSTALL_DIR) $$(1)/usr/lib/php
$(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/$(subst -,_,$(1)).so $$(1)/usr/lib/php/
$(INSTALL_DIR) $$(1)/etc/php5
ifeq ($(4),zend)
echo "zend_extension=/usr/lib/php/$(subst -,_,$(1)).so" > $$(1)/etc/php5/$(subst -,_,$(1)).ini
else
echo "extension=$(subst -,_,$(1)).so" > $$(1)/etc/php5/$(subst -,_,$(1)).ini
endif
endef
endef

Loading…
Cancel
Save