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

1.1     ! misho       1: $Id: README.SELF-CONTAINED-EXTENSIONS 242949 2007-09-26 15:44:16Z cvs2svn $
        !             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

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