Annotation of embedaddon/php/README.SELF-CONTAINED-EXTENSIONS, revision 1.1.1.3

1.1.1.2   misho       1: $Id$
1.1       misho       2: =============================================================================
                      3: 
                      4: HOW TO CREATE A SELF-CONTAINED PHP EXTENSION
                      5: 
                      6:   A self-contained extension can be distributed independently of
                      7:   the PHP source. To create such an extension, two things are
                      8:   required:
                      9: 
                     10:   - Configuration file (config.m4)
                     11:   - Source code for your module
                     12: 
                     13:   We will describe now how to create these and how to put things
                     14:   together.
                     15: 
                     16: PREPARING YOUR SYSTEM
                     17: 
                     18:   While the result will run on any system, a developer's setup needs these
                     19:   tools:
                     20: 
                     21:     GNU autoconf
                     22:     GNU automake
                     23:     GNU libtool
                     24:     GNU m4
                     25: 
                     26:   All of these are available from 
                     27: 
                     28:     ftp://ftp.gnu.org/pub/gnu/
                     29: 
                     30: CONVERTING AN EXISTING EXTENSION
                     31: 
                     32:   Just to show you how easy it is to create a self-contained
                     33:   extension, we will convert an embedded extension into a
                     34:   self-contained one. Install PHP and execute the following
                     35:   commands.
                     36:   
                     37:      $ mkdir /tmp/newext
                     38:      $ cd /tmp/newext
                     39: 
                     40:   You now have an empty directory. We will copy the files from
                     41:   the mysql extension:
                     42: 
                     43:      $ cp -rp php-4.0.X/ext/mysql/* .
                     44: 
                     45:   It is time to finish the module. Run:
                     46: 
                     47:      $ phpize
                     48: 
                     49:   You can now ship the contents of the directory - the extension
                     50:   can live completely on its own.
                     51: 
                     52:   The user instructions boil down to
                     53: 
                     54:      $ ./configure \
                     55:             [--with-php-config=/path/to/php-config] \
                     56:             [--with-mysql=MYSQL-DIR]
                     57:      $ make install
                     58: 
                     59:   The MySQL module will either use the embedded MySQL client 
                     60:   library or the MySQL installation in MYSQL-DIR.
                     61: 
                     62: 
                     63: DEFINING THE NEW EXTENSION
                     64: 
                     65:   Our demo extension is called "foobar".
                     66: 
                     67:   It consists of two source files "foo.c" and "bar.c"
                     68:   (and any arbitrary amount of header files, but that is not
                     69:   important here).
                     70:   
                     71:   The demo extension does not reference any external 
                     72:   libraries (that is important, because the user does not
                     73:   need to specify anything).
                     74: 
                     75: 
                     76:   LTLIBRARY_SOURCES specifies the names of the sources files. You can
                     77:   name an arbitrary number of source files here.
                     78: 
                     79: CREATING THE M4 CONFIGURATION FILE
                     80: 
                     81:   The m4 configuration can perform additional checks. For a 
                     82:   self-contained extension, you do not need more than a few
                     83:   macro calls.
                     84: 
                     85: ------------------------------------------------------------------------------
                     86: PHP_ARG_ENABLE(foobar,whether to enable foobar,
                     87: [  --enable-foobar            Enable foobar])
                     88: 
                     89: if test "$PHP_FOOBAR" != "no"; then
                     90:   PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared)
                     91: fi
                     92: ------------------------------------------------------------------------------
                     93: 
                     94:   PHP_ARG_ENABLE will automatically set the correct variables, so
                     95:   that the extension will be enabled by PHP_NEW_EXTENSION in shared mode.
                     96: 
                     97:   The first argument of PHP_NEW_EXTENSION describes the name of the
                     98:   extension.  The second names the source-code files.  The third passes
                     99:   $ext_shared which is set by PHP_ARG_ENABLE/WITH to PHP_NEW_EXTENSION.
                    100:   
                    101:   Please use always PHP_ARG_ENABLE or PHP_ARG_WITH. Even if you do not
                    102:   plan to distribute your module with PHP, these facilities allow you
                    103:   to integrate your module easily into the main PHP module framework.
                    104: 
                    105: CREATING SOURCE FILES
                    106: 
                    107:   ext_skel can be of great help when creating the common code for all modules
                    108:   in PHP for you and also writing basic function definitions and C code for
                    109:   handling arguments passed to your functions. See README.EXT_SKEL for further
                    110:   information.
                    111: 
                    112:   As for the rest, you are currently alone here. There are a lot of existing
                    113:   modules, use a simple module as a starting point and add your own code.
                    114: 
                    115: 
                    116: CREATING THE SELF-CONTAINED EXTENSION
                    117: 
                    118:   Put config.m4 and the source files into one directory. Then, run phpize
                    119:   (this is installed during make install by PHP 4.0).
                    120: 
                    121:   For example, if you configured PHP with --prefix=/php, you would run
                    122: 
                    123:      $ /php/bin/phpize
                    124: 
                    125:   This will automatically copy the necessary build files and create
                    126:   configure from your config.m4.
                    127: 
                    128:   And that's it. You now have a self-contained extension.
                    129: 
                    130: INSTALLING A SELF-CONTAINED EXTENSION
                    131: 
                    132:   An extension can be installed by running:
                    133: 
                    134:      $ ./configure \
                    135:             [--with-php-config=/path/to/php-config]
                    136:      $ make install
                    137: 
                    138: ADDING SHARED MODULE SUPPORT TO A MODULE
                    139: 
                    140:   In order to be useful, a self-contained extension must be loadable
                    141:   as a shared module. I will explain now how you can add shared module 
                    142:   support to an existing module called foo.
                    143: 
                    144:   1. In config.m4, use PHP_ARG_WITH/PHP_ARG_ENABLE. Then you will
                    145:      automatically be able to use --with-foo=shared[,..] or
                    146:      --enable-foo=shared[,..].
                    147: 
                    148:   2. In config.m4, use PHP_NEW_EXTENSION(foo,.., $ext_shared) to enable
                    149:      building the extension.
                    150: 
                    151:   3. Add the following lines to your C source file:
                    152: 
                    153:         #ifdef COMPILE_DL_FOO
                    154:         ZEND_GET_MODULE(foo)
                    155:         #endif
1.1.1.3 ! misho     156: 
        !           157: PECL SITE CONFORMITY
        !           158: 
        !           159:   If you plan to release an extension to the PECL website, there are several
        !           160:   points to be regarded.
        !           161: 
        !           162:  1. Add LICENSE or COPYING to the package.xml
        !           163: 
        !           164:  2. The following should be defined in one of the extension header files
        !           165: 
        !           166:         #define PHP_FOO_VERSION "1.2.3"
        !           167: 
        !           168:     This macros has to be used within your foo_module_entry to indicate the
        !           169:     extension version.
        !           170: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>