Skip to content

Commit

Permalink
Integrate README.EXT_SKEL to help option
Browse files Browse the repository at this point in the history
- Sync help output using heredoc
- Add extension building instructions
- Building with phpize is preferred option. Mention also tests
- Refactor print_success()
  • Loading branch information
petk committed Mar 13, 2019
1 parent 50a6a0d commit a1b7bc0
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 66 deletions.
43 changes: 0 additions & 43 deletions README.EXT_SKEL

This file was deleted.

4 changes: 2 additions & 2 deletions README.SELF-CONTAINED-EXTENSIONS
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ CREATING SOURCE FILES

ext_skel can be of great help when creating the common code for all modules
in PHP for you and also writing basic function definitions and C code for
handling arguments passed to your functions. See README.EXT_SKEL for further
information.
handling arguments passed to your functions. See `./ext/ext_skel.php --help`
for further information.

As for the rest, you are currently alone here. There are a lot of existing
modules, use a simple module as a starting point and add your own code.
Expand Down
110 changes: 89 additions & 21 deletions ext/ext_skel.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,91 @@ function error($message) {
/* {{{ print_help
*/
function print_help() {
printf('php ext_skel.php --ext <name> [--experimental] [--author <name>]%s', PHP_EOL);
printf(' [--dir <path>] [--std] [--onlyunix]%s', PHP_EOL);
printf(' [--onlywindows] [--help]%1$s%1$s', PHP_EOL);
printf(' --ext <name> The name of the extension defined as <name>%s', PHP_EOL);
printf(' --experimental Passed if this extension is experimental, this creates%s', PHP_EOL);
printf(' the EXPERIMENTAL file in the root of the extension%s', PHP_EOL);
printf(' --author <name> Your name, this is used if --std is passed and%s', PHP_EOL);
printf(' for the CREDITS file%s', PHP_EOL);
printf(' --dir <path> Path to the directory for where extension should be%s', PHP_EOL);
printf(' created. Defaults to the directory of where this script%s', PHP_EOL);
printf(' lives%s', PHP_EOL);
printf(' --std If passed, the standard header used%s', PHP_EOL);
printf(' in extensions that is included in the core, will be used%s', PHP_EOL);
printf(' --onlyunix Only generate configure scripts for Unix%s', PHP_EOL);
printf(' --onlywindows Only generate configure scripts for Windows%s', PHP_EOL);
printf(' --help This help%s', PHP_EOL);
if (PHP_OS_FAMILY != 'Windows') {
$file_prefix = './';
$make_prefix = '';
} else {
$file_prefix = '';
$make_prefix = 'n';
}

echo <<<HELP
WHAT IT IS
It's a tool for automatically creating the basic framework for a PHP extension.
HOW TO USE IT
Very simple. First, change to the ext/ directory of the PHP sources. Then run
the following
php ext_skel.php --ext extension_name
and everything you need will be placed in directory ext/extension_name.
If you don't need to test the existence of any external header files,
libraries or functions in them, the extension is ready to be compiled in PHP.
To compile the extension run the following:
cd extension_name
phpize
{$file_prefix}configure
{$make_prefix}make
Don't forget to run tests once the compilation is done:
{$make_prefix}make test
Alternatively, to compile extension in the PHP:
cd /path/to/php-src
{$file_prefix}buildconf
{$file_prefix}configure --enable-extension_name
{$make_prefix}make
{$make_prefix}make test TESTS=ext/extension_name/tests
The definition of PHP_extension_NAME_VERSION will be present in the
php_extension_name.h and injected into the zend_extension_entry definition.
This is required by the PECL website for the version string conformity checks
against package.xml
SOURCE AND HEADER FILE NAME
The ext_skel.php script generates 'extension_name.c' and 'php_extension_name.h'
as the main source and header files. Keep these names.
extension functions (User functions) must be named
extension_name_function()
When you need to expose extension functions to other extensions, expose
functions strictly needed by others. Exposed internal function must be named
php_extension_name_function()
See also CODING_STANDARDS.
OPTIONS
php ext_skel.php --ext <name> [--experimental] [--author <name>]
[--dir <path>] [--std] [--onlyunix]
[--onlywindows] [--help]
--ext <name> The name of the extension defined as <name>
--experimental Passed if this extension is experimental, this creates
the EXPERIMENTAL file in the root of the extension
--author <name> Your name, this is used if --std is passed and for the
CREDITS file
--dir <path> Path to the directory for where extension should be
created. Defaults to the directory of where this script
lives
--std If passed, the standard header used in extensions that
is included in the core, will be used
--onlyunix Only generate configure scripts for Unix
--onlywindows Only generate configure scripts for Windows
--help This help
HELP;
exit;
}
/* }}} */
Expand Down Expand Up @@ -76,14 +144,14 @@ function print_success() {
$make_prefix = 'n';
}

printf('%1$sSuccess. The extension is now ready to be compiled into PHP. To do so, use the%s', PHP_EOL);
printf('%1$sSuccess. The extension is now ready to be compiled. To do so, use the%s', PHP_EOL);
printf('following steps:%1$s%1$s', PHP_EOL);
printf('cd /path/to/php-src%s', PHP_EOL);
printf('%sbuildconf%s', $file_prefix, PHP_EOL);
printf('%sconfigure --enable-%s%s', $file_prefix, $options['ext'], PHP_EOL);
printf('cd /path/to/php-src/%s%s', $options['ext'], PHP_EOL);
printf('phpize%s', PHP_EOL);
printf('%sconfigure%s', $file_prefix, PHP_EOL);
printf('%smake%2$s%2$s', $make_prefix, PHP_EOL);
printf('Don\'t forget to run tests once the compilation is done:%s', PHP_EOL);
printf('%smake test TESTS=ext/%s/tests%3$s%3$s', $make_prefix, $options['ext'], PHP_EOL);
printf('%smake test%2$s%2$s', $make_prefix, PHP_EOL);
printf('Thank you for using PHP!%s', PHP_EOL);
}
/* }}} */
Expand Down

0 comments on commit a1b7bc0

Please sign in to comment.