Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2892301
update_compat_info.php
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Advanced/Developer...
View Handle
View Hovercard
Size
3 KB
Referenced Files
None
Subscribers
None
update_compat_info.php
View Options
#!/usr/bin/env php
<?php
require_once
dirname
(
__FILE__
)
.
'/__init_script__.php'
;
$target
=
'resources/php_compat_info.json'
;
echo
phutil_console_format
(
"%s\n"
,
pht
(
'Purpose: Updates %s used by %s.'
,
$target
,
'ArcanistXHPASTLinter'
)
)
;
// PHP CompatInfo is installed via Composer.
//
// You should symlink the Composer vendor directory to
// libphutil/externals/includes/vendor`.
require_once
'vendor/autoload.php'
;
$output
=
array
(
)
;
$output
[
'@'
.
'generated'
]
=
true
;
$output
[
'params'
]
=
array
(
)
;
$output
[
'functions'
]
=
array
(
)
;
$output
[
'classes'
]
=
array
(
)
;
$output
[
'interfaces'
]
=
array
(
)
;
$output
[
'constants'
]
=
array
(
)
;
/**
* Transform compatibility info into a slightly different format.
*
* The data returned by PHP CompatInfo is slightly odd in that null data is
* represented by an empty string.
*
* @param map<string, string>
* @return map<string, string | null>
*/
function
parse_compat_info
(
array
$compat
)
{
return
array
(
'ext.name'
=>
$compat
[
'ext.name'
]
,
'ext.min'
=>
nonempty
(
$compat
[
'ext.min'
]
,
null
)
,
'ext.max'
=>
nonempty
(
$compat
[
'ext.max'
]
,
null
)
,
'php.min'
=>
nonempty
(
$compat
[
'php.min'
]
,
null
)
,
'php.max'
=>
nonempty
(
$compat
[
'php.max'
]
,
null
)
,
)
;
}
$client
=
new
\
Bartlett
\
Reflect
\
Client
(
)
;
$api
=
$client
->
api
(
'reference'
)
;
foreach
(
$api
->
dir
(
)
as
$extension
)
{
$result
=
$api
->
show
(
$extension
->
name
,
false
,
false
,
false
,
true
,
true
,
true
,
true
,
true
)
;
foreach
(
$result
[
'constants'
]
as
$constant
=>
$compat
)
{
$output
[
'constants'
]
[
$constant
]
=
parse_compat_info
(
$compat
)
;
}
foreach
(
$result
[
'functions'
]
as
$function
=>
$compat
)
{
$output
[
'functions'
]
[
$function
]
=
parse_compat_info
(
$compat
)
;
if
(
idx
(
$compat
,
'parameters'
)
)
{
$output
[
'params'
]
[
$function
]
=
explode
(
', '
,
$compat
[
'parameters'
]
)
;
}
}
foreach
(
$result
[
'classes'
]
as
$class
=>
$compat
)
{
$output
[
'classes'
]
[
$class
]
=
parse_compat_info
(
$compat
)
;
}
foreach
(
$result
[
'interfaces'
]
as
$interface
=>
$compat
)
{
$output
[
'interfaces'
]
[
$interface
]
=
parse_compat_info
(
$compat
)
;
}
foreach
(
$result
[
'methods'
]
as
$class
=>
$methods
)
{
$output
[
'methods'
]
[
$class
]
=
array
(
)
;
foreach
(
$methods
as
$method
=>
$compat
)
{
$output
[
'methods'
]
[
$class
]
[
$method
]
=
parse_compat_info
(
$compat
)
;
}
}
foreach
(
$result
[
'static methods'
]
as
$class
=>
$methods
)
{
$output
[
'static_methods'
]
[
$class
]
=
array
(
)
;
foreach
(
$methods
as
$method
=>
$compat
)
{
$output
[
'static_methods'
]
[
$class
]
[
$method
]
=
parse_compat_info
(
$compat
)
;
}
}
}
ksort
(
$output
[
'params'
]
)
;
ksort
(
$output
[
'functions'
]
)
;
ksort
(
$output
[
'classes'
]
)
;
ksort
(
$output
[
'interfaces'
]
)
;
ksort
(
$output
[
'constants'
]
)
;
// Grepped from PHP Manual.
// TODO: Can we get this from PHP CompatInfo?
// See https://github.com/llaville/php-compat-info/issues/185.
$output
[
'functions_windows'
]
=
array
(
'apache_child_terminate'
=>
false
,
'chroot'
=>
false
,
'getrusage'
=>
false
,
'imagecreatefromxpm'
=>
false
,
'lchgrp'
=>
false
,
'lchown'
=>
false
,
'nl_langinfo'
=>
false
,
'strptime'
=>
false
,
'sys_getloadavg'
=>
false
,
'checkdnsrr'
=>
'5.3.0'
,
'dns_get_record'
=>
'5.3.0'
,
'fnmatch'
=>
'5.3.0'
,
'getmxrr'
=>
'5.3.0'
,
'getopt'
=>
'5.3.0'
,
'imagecolorclosesthwb'
=>
'5.3.0'
,
'inet_ntop'
=>
'5.3.0'
,
'inet_pton'
=>
'5.3.0'
,
'link'
=>
'5.3.0'
,
'linkinfo'
=>
'5.3.0'
,
'readlink'
=>
'5.3.0'
,
'socket_create_pair'
=>
'5.3.0'
,
'stream_socket_pair'
=>
'5.3.0'
,
'symlink'
=>
'5.3.0'
,
'time_nanosleep'
=>
'5.3.0'
,
'time_sleep_until'
=>
'5.3.0'
,
)
;
Filesystem
::
writeFile
(
phutil_get_library_root
(
'phutil'
)
.
'/../'
.
$target
,
id
(
new
PhutilJSON
(
)
)
->
encodeFormatted
(
$output
)
)
;
echo
pht
(
'Done.'
)
.
"\n"
;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 19, 16:36 (2 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1126532
Default Alt Text
update_compat_info.php (3 KB)
Attached To
Mode
rARC Arcanist
Attached
Detach File
Event Timeline
Log In to Comment