Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F18096644
update_compat_info.php
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
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, Aug 10, 8:26 AM (4 h, 17 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8240436
Default Alt Text
update_compat_info.php (3 KB)
Attached To
Mode
rPHU libphutil
Attached
Detach File
Event Timeline
Log In to Comment