[PHP] The deprecated command line option "-phpfull" has been
removed. We recommend building your extension as a dynamically loadable module. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10637 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
fa5b3a0b66
commit
7893f114a4
3 changed files with 63 additions and 412 deletions
|
|
@ -1,6 +1,11 @@
|
||||||
Version 1.3.36 (in progress)
|
Version 1.3.36 (in progress)
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
|
2008-07-03: olly
|
||||||
|
[PHP] The deprecated command line option "-phpfull" has been
|
||||||
|
removed. We recommend building your extension as a dynamically
|
||||||
|
loadable module.
|
||||||
|
|
||||||
2008-07-02: olly
|
2008-07-02: olly
|
||||||
[PHP4] Support for PHP4 has been removed. The PHP developers are
|
[PHP4] Support for PHP4 has been removed. The PHP developers are
|
||||||
no longer making new PHP4 releases, and won't even be patching
|
no longer making new PHP4 releases, and won't even be patching
|
||||||
|
|
@ -10,5 +15,6 @@ Version 1.3.36 (in progress)
|
||||||
[Python] Import the C extension differently for Python 2.6 and
|
[Python] Import the C extension differently for Python 2.6 and
|
||||||
later so that an implicit relative import doesn't produce a
|
later so that an implicit relative import doesn't produce a
|
||||||
deprecation warning for 2.6 and a failure for 2.7 and later.
|
deprecation warning for 2.6 and a failure for 2.7 and later.
|
||||||
Patch from Richard Boulton in SF#2008229.
|
Patch from Richard Boulton in SF#2008229, plus follow-up patches
|
||||||
|
from Richard and Haoyu Bai.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ you wish to statically link the extension into the php interpreter.
|
||||||
The third file,
|
The third file,
|
||||||
<tt>example.php</tt> can be included by PHP scripts. It attempts to
|
<tt>example.php</tt> can be included by PHP scripts. It attempts to
|
||||||
dynamically load the extension and contains extra php code specified
|
dynamically load the extension and contains extra php code specified
|
||||||
in the interface file. If wrapping C++ code for PHP5, it will
|
in the interface file. If wrapping C++ code with PHP classes, it will
|
||||||
also contain PHP5 class wrappers.
|
also contain PHP5 class wrappers.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
@ -103,7 +103,8 @@ more detail in <a href="#Php_nn2_6">section 27.2.6</a>.
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The usual (and recommended) way is to build the extension as a separate
|
The usual (and recommended) way is to build the extension as a separate
|
||||||
dynamically loaded module. You can then specify that this be loaded
|
dynamically loaded module (which is supported by all modern operating
|
||||||
|
systems). You can then specify that this be loaded
|
||||||
automatically in <tt>php.ini</tt> or load it explicitly for any script which
|
automatically in <tt>php.ini</tt> or load it explicitly for any script which
|
||||||
needs it.
|
needs it.
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -113,17 +114,15 @@ It is also possible to rebuild PHP from source so that your module is
|
||||||
statically linked into the php executable/library. This is a lot more
|
statically linked into the php executable/library. This is a lot more
|
||||||
work, and also requires a full rebuild of PHP to update your module,
|
work, and also requires a full rebuild of PHP to update your module,
|
||||||
and it doesn't play nicely with package system. We don't recommend
|
and it doesn't play nicely with package system. We don't recommend
|
||||||
this approach, but if you really want to do this, the <tt>-phpfull</tt>
|
this approach, or provide explicit support for it.
|
||||||
command line argument to swig may be of use - see below for details.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<H3><a name="Php_nn1_1"></a>28.1.1 Building a loadable extension</H3>
|
<H3><a name="Php_nn1_1"></a>28.1.1 Building a loadable extension</H3>
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
To build your module as a dynamically loadable extension, use compilation
|
To build your module as a dynamically loadable extension, use compilation
|
||||||
commands like these (if you aren't using GCC, the commands will be different,
|
commands like these (if you aren't using GCC, the commands will be different,
|
||||||
and there may be so variation between platforms - these commands should at
|
and there may be some variation between platforms - these commands should at
|
||||||
least work for Linux though):
|
least work for Linux though):
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
@ -141,128 +140,9 @@ add them to your Makefile or other build system directly. We recommend that
|
||||||
you don't use <tt>-make</tt> and it's likely to be removed at some point.
|
you don't use <tt>-make</tt> and it's likely to be removed at some point.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<H3><a name="Php_nn1_2"></a>28.1.2 Building extensions into PHP</H3>
|
|
||||||
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note that we don't recommend this approach - it's cleaner and simpler to
|
|
||||||
use dynamically loadable modules, which are supported by all modern OSes.
|
|
||||||
Support for this may be discontinued entirely in the future.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
It is possible to rebuild PHP itself with your module statically linked
|
|
||||||
in. To do this, you can use the <tt>-phpfull</tt> command line option to
|
|
||||||
swig. Using this option will generate three additional files. The first
|
|
||||||
extra file, <tt>config.m4</tt> contains the m4 and shell code needed to
|
|
||||||
enable the extension as part of the PHP build process. The second
|
|
||||||
extra file, <tt>Makefile.in</tt> contains the information needed to
|
|
||||||
build the final Makefile after substitutions. The third and final
|
|
||||||
extra file, <tt>CREDITS</tt> should contain the credits for the
|
|
||||||
extension.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
To build with phpize, after you have run swig you will need to run the
|
|
||||||
'phpize' command (installed as part of php) in the same
|
|
||||||
directory. This re-creates the php build environment in that
|
|
||||||
directory. It also creates a configure file which includes the shell
|
|
||||||
code from the config.m4 that was generated by SWIG, this configure
|
|
||||||
script will accept a command line argument to enable the extension to
|
|
||||||
be run (by default the command line argument is --enable-modulename,
|
|
||||||
however you can edit the config.m4 file before running phpize to
|
|
||||||
accept --with-modulename. You can also add extra tests in config.m4 to
|
|
||||||
check that a correct library version is installed or correct header
|
|
||||||
files are included, etc, but you must edit this file before running
|
|
||||||
phpize.) You can also get SWIG to generate simple extra tests for
|
|
||||||
libraries and header files for you.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="code"><pre>
|
|
||||||
swig -php -phpfull
|
|
||||||
</pre></div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you depend on source files not generated by SWIG, before generating
|
|
||||||
the configure file, you may need to edit the <tt>Makefile.in</tt>
|
|
||||||
file. This contains the names of the source files to compile (just the
|
|
||||||
wrapper file by default) and any additional libraries needed to be
|
|
||||||
linked in. If there are extra C files to compile, you will need to add
|
|
||||||
them to the <tt>Makefile.in</tt>, or add the names of libraries if they are
|
|
||||||
needed. In simple cases SWIG is pretty good at generating a complete
|
|
||||||
<tt>Makefile.in</tt> and <tt>config.m4</tt> which need no further editing.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
You then run the configure script with the command line argument needed
|
|
||||||
to enable the extension. Then run make, which builds the extension.
|
|
||||||
The extension object file will be left in the modules sub directory, you can
|
|
||||||
move it to wherever it is convenient to call from your php script.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
When using <tt>-phpfull</tt>, swig also accepts the following
|
|
||||||
additional optional arguments:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li><tt>-withincs "<incs>"</tt> Adds include files to the config.m4 file.
|
|
||||||
<li><tt>-withlibs "<libs>"</tt> Links with the specified libraries.
|
|
||||||
<li><tt>-withc "<files>"</tt> Compiles and links the additional specified C files.
|
|
||||||
<li><tt>-withcxx "<files>"</tt> Compiles and links the additional specified C++ files.
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
After running swig with the <tt>-phpfull</tt> switch, you will be left with a shockingly
|
|
||||||
similar set of files to the previous build process. However you will then need
|
|
||||||
to move these files to a subdirectory within the php source tree, this subdirectory you will need to create under the ext directory, with the name of the extension (e.g. <tt>mkdir php-4.0.6/ext/modulename</tt>).
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
After moving the files into this directory, you will need to run the 'buildall'
|
|
||||||
script in the php source directory. This rebuilds the configure script
|
|
||||||
and includes the extra command line arguments from the module you have added.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Before running the generated configure file, you may need to edit the <tt>
|
|
||||||
Makefile.in</tt>. This contains the names of the source files to compile (
|
|
||||||
just the wrapper file by default) and any additional libraries needed to
|
|
||||||
link in. If there are extra C files to compile you will need to add them
|
|
||||||
to the Makefile, or add the names of libraries if they are needed.
|
|
||||||
In most cases <tt>Makefile.in</tt> will be complete, especially if you
|
|
||||||
make use of <tt>-withlibs</tt> and <tt>-withincs</tt>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="code"><pre>
|
|
||||||
swig -php -phpfull -withlibs "xapian omquery" --withincs "om.h"
|
|
||||||
</pre></div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Will include in the <tt>config.m4</tt> and <tt>Makefile.in</tt> search for
|
|
||||||
<tt>libxapian.a</tt> or <tt>libxapian.so</tt> and search for
|
|
||||||
<tt>libomquery.a</tt> or <tt>libomquery.so</tt> as well as a
|
|
||||||
search for <tt>om.h</tt>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
You then need to run the configure command and pass the necessary command
|
|
||||||
line arguments to enable your module (by default this is --enable-modulename,
|
|
||||||
but this can be changed by editing the config.m4 file in the modules directory
|
|
||||||
before running the buildall script. In addition, extra tests can be added to
|
|
||||||
the config.m4 file to ensure the correct libraries and header files are
|
|
||||||
installed.)
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Once configure has completed, you can run make to build php. If this all
|
|
||||||
compiles correctly, you should end up with a php executable/library
|
|
||||||
which contains your new module. You can test it with a php script which
|
|
||||||
does not have the 'dl' command as used above.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<H3><a name="Php_nn1_3"></a>28.1.3 Using PHP Extensions</H3>
|
<H3><a name="Php_nn1_3"></a>28.1.3 Using PHP Extensions</H3>
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
To test the extension from a PHP script, you need to load it first. You
|
To test the extension from a PHP script, you need to load it first. You
|
||||||
can load it for every script by adding this line the <tt>[PHP]</tt> section of
|
can load it for every script by adding this line the <tt>[PHP]</tt> section of
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,6 @@ PHP Options (available with -php5)\n\
|
||||||
-noproxy - Don't generate proxy classes.\n\
|
-noproxy - Don't generate proxy classes.\n\
|
||||||
-prefix <prefix> - Prepend <prefix> to all class names in PHP5 wrappers\n\
|
-prefix <prefix> - Prepend <prefix> to all class names in PHP5 wrappers\n\
|
||||||
-make - Create simple makefile\n\
|
-make - Create simple makefile\n\
|
||||||
-phpfull - Create full make files\n\
|
|
||||||
-withincs <incs> - With -phpfull writes needed incs in config.m4\n\
|
|
||||||
-withlibs <libs> - With -phpfull writes needed libs in config.m4\n\
|
|
||||||
-withc <files> - With -phpfull makes extra C files in Makefile.in\n\
|
|
||||||
-withcxx <files> - With -phpfull makes extra C++ files in Makefile.in\n\
|
|
||||||
\n";
|
\n";
|
||||||
|
|
||||||
/* The original class wrappers for PHP4 store the pointer to the C++ class in
|
/* The original class wrappers for PHP4 store the pointer to the C++ class in
|
||||||
|
|
@ -74,14 +69,11 @@ static Node *classnode = 0;
|
||||||
static String *module = 0;
|
static String *module = 0;
|
||||||
static String *cap_module = 0;
|
static String *cap_module = 0;
|
||||||
static String *prefix = 0;
|
static String *prefix = 0;
|
||||||
static String *withlibs = 0;
|
|
||||||
static String *withincs = 0;
|
|
||||||
static String *withc = 0;
|
static String *withc = 0;
|
||||||
static String *withcxx = 0;
|
static String *withcxx = 0;
|
||||||
|
|
||||||
static String *shadow_classname = 0;
|
static String *shadow_classname = 0;
|
||||||
|
|
||||||
static int gen_extra = 0;
|
|
||||||
static int gen_make = 0;
|
static int gen_make = 0;
|
||||||
|
|
||||||
static File *f_runtime = 0;
|
static File *f_runtime = 0;
|
||||||
|
|
@ -215,14 +207,7 @@ public:
|
||||||
SWIG_config_cppext("cpp");
|
SWIG_config_cppext("cpp");
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
if (argv[i]) {
|
if (strcmp(argv[i], "-prefix") == 0) {
|
||||||
if (strcmp(argv[i], "-phpfull") == 0) {
|
|
||||||
gen_extra = 1;
|
|
||||||
Swig_mark_arg(i);
|
|
||||||
} else if (strcmp(argv[i], "-dlname") == 0) {
|
|
||||||
Printf(stderr, "*** -dlname is no longer supported\n*** if you want to change the module name, use -module instead.\n");
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
} else if (strcmp(argv[i], "-prefix") == 0) {
|
|
||||||
if (argv[i + 1]) {
|
if (argv[i + 1]) {
|
||||||
prefix = NewString(argv[i + 1]);
|
prefix = NewString(argv[i + 1]);
|
||||||
Swig_mark_arg(i);
|
Swig_mark_arg(i);
|
||||||
|
|
@ -231,24 +216,6 @@ public:
|
||||||
} else {
|
} else {
|
||||||
Swig_arg_error();
|
Swig_arg_error();
|
||||||
}
|
}
|
||||||
} else if (strcmp(argv[i], "-withlibs") == 0) {
|
|
||||||
if (argv[i + 1]) {
|
|
||||||
withlibs = NewString(argv[i + 1]);
|
|
||||||
Swig_mark_arg(i);
|
|
||||||
Swig_mark_arg(i + 1);
|
|
||||||
i++;
|
|
||||||
} else {
|
|
||||||
Swig_arg_error();
|
|
||||||
}
|
|
||||||
} else if (strcmp(argv[i], "-withincs") == 0) {
|
|
||||||
if (argv[i + 1]) {
|
|
||||||
withincs = NewString(argv[i + 1]);
|
|
||||||
Swig_mark_arg(i);
|
|
||||||
Swig_mark_arg(i + 1);
|
|
||||||
i++;
|
|
||||||
} else {
|
|
||||||
Swig_arg_error();
|
|
||||||
}
|
|
||||||
} else if (strcmp(argv[i], "-withc") == 0) {
|
} else if (strcmp(argv[i], "-withc") == 0) {
|
||||||
if (argv[i + 1]) {
|
if (argv[i + 1]) {
|
||||||
withc = NewString(argv[i + 1]);
|
withc = NewString(argv[i + 1]);
|
||||||
|
|
@ -284,7 +251,14 @@ public:
|
||||||
Swig_mark_arg(i);
|
Swig_mark_arg(i);
|
||||||
} else if (strcmp(argv[i], "-help") == 0) {
|
} else if (strcmp(argv[i], "-help") == 0) {
|
||||||
fputs(usage, stdout);
|
fputs(usage, stdout);
|
||||||
}
|
} else if (strcmp(argv[i], "-phpfull") == 0 ||
|
||||||
|
strcmp(argv[i], "-withlibs") == 0 ||
|
||||||
|
strcmp(argv[i], "-withincs") == 0) {
|
||||||
|
Printf(stderr, "*** %s is no longer supported.\n*** We recommend building as a dynamically loadable module.\n", argv[i]);
|
||||||
|
SWIG_exit(EXIT_FAILURE);
|
||||||
|
} else if (strcmp(argv[i], "-dlname") == 0) {
|
||||||
|
Printf(stderr, "*** -dlname is no longer supported.\n*** If you want to change the module name, use -module instead.\n");
|
||||||
|
SWIG_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -326,206 +300,6 @@ public:
|
||||||
Close(f_make);
|
Close(f_make);
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_extra_files(String *outfile) {
|
|
||||||
File *f_extra;
|
|
||||||
|
|
||||||
static String *configm4 = 0;
|
|
||||||
static String *makefilein = 0;
|
|
||||||
static String *credits = 0;
|
|
||||||
|
|
||||||
configm4 = NewStringEmpty();
|
|
||||||
Printv(configm4, SWIG_output_directory(), "config.m4", NIL);
|
|
||||||
|
|
||||||
makefilein = NewStringEmpty();
|
|
||||||
Printv(makefilein, SWIG_output_directory(), "Makefile.in", NIL);
|
|
||||||
|
|
||||||
credits = NewStringEmpty();
|
|
||||||
Printv(credits, SWIG_output_directory(), "CREDITS", NIL);
|
|
||||||
|
|
||||||
// are we a --with- or --enable-
|
|
||||||
int with = (withincs || withlibs) ? 1 : 0;
|
|
||||||
|
|
||||||
// Note Makefile.in only copes with one source file
|
|
||||||
// also withincs and withlibs only take one name each now
|
|
||||||
// the code they generate should be adapted to take multiple lines
|
|
||||||
|
|
||||||
/* Write out Makefile.in */
|
|
||||||
f_extra = NewFile(makefilein, "w");
|
|
||||||
if (!f_extra) {
|
|
||||||
FileErrorDisplay(makefilein);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
Printf(f_extra, "# $Id$\n\n" "LTLIBRARY_NAME = %s.la\n", module);
|
|
||||||
|
|
||||||
// C++ has more and different entries to C in Makefile.in
|
|
||||||
if (!CPlusPlus) {
|
|
||||||
Printf(f_extra, "LTLIBRARY_SOURCES = %s %s\n", Swig_file_filename(outfile), withc);
|
|
||||||
Printf(f_extra, "LTLIBRARY_SOURCES_CPP = %s\n", withcxx);
|
|
||||||
} else {
|
|
||||||
Printf(f_extra, "LTLIBRARY_SOURCES = %s\n", withc);
|
|
||||||
Printf(f_extra, "LTLIBRARY_SOURCES_CPP = %s %s\n", Swig_file_filename(outfile), withcxx);
|
|
||||||
Printf(f_extra, "LTLIBRARY_OBJECTS_X = $(LTLIBRARY_SOURCES_CPP:.cpp=.lo) $(LTLIBRARY_SOURCES_CPP:.cxx=.lo)\n");
|
|
||||||
}
|
|
||||||
Printf(f_extra, "LTLIBRARY_SHARED_NAME = %s.la\n", module);
|
|
||||||
Printf(f_extra, "LTLIBRARY_SHARED_LIBADD = $(%s_SHARED_LIBADD)\n\n", cap_module);
|
|
||||||
Printf(f_extra, "include $(top_srcdir)/build/dynlib.mk\n");
|
|
||||||
|
|
||||||
Printf(f_extra, "\n# patch in .cxx support to php build system to work like .cpp\n");
|
|
||||||
Printf(f_extra, ".SUFFIXES: .cxx\n\n");
|
|
||||||
|
|
||||||
Printf(f_extra, ".cxx.o:\n");
|
|
||||||
Printf(f_extra, "\t$(CXX_COMPILE) -c $<\n\n");
|
|
||||||
|
|
||||||
Printf(f_extra, ".cxx.lo:\n");
|
|
||||||
Printf(f_extra, "\t$(CXX_PHP_COMPILE)\n\n");
|
|
||||||
Printf(f_extra, ".cxx.slo:\n");
|
|
||||||
|
|
||||||
Printf(f_extra, "\t$(CXX_SHARED_COMPILE)\n\n");
|
|
||||||
|
|
||||||
Printf(f_extra, "\n# make it easy to test module\n");
|
|
||||||
Printf(f_extra, "testmodule:\n");
|
|
||||||
Printf(f_extra, "\tphp -q -d extension_dir=modules %s\n\n", Swig_file_filename(phpfilename));
|
|
||||||
|
|
||||||
Close(f_extra);
|
|
||||||
|
|
||||||
/* Now config.m4 */
|
|
||||||
// Note: # comments are OK in config.m4 if you don't mind them
|
|
||||||
// appearing in the final ./configure file
|
|
||||||
// (which can help with ./configure debugging)
|
|
||||||
|
|
||||||
// NOTE2: phpize really ought to be able to write out a sample
|
|
||||||
// config.m4 based on some simple data, I'll take this up with
|
|
||||||
// the php folk!
|
|
||||||
f_extra = NewFile(configm4, "w");
|
|
||||||
if (!f_extra) {
|
|
||||||
FileErrorDisplay(configm4);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
Printf(f_extra, "dnl $Id$\n");
|
|
||||||
Printf(f_extra, "dnl ***********************************************************************\n");
|
|
||||||
Printf(f_extra, "dnl ** THIS config.m4 is provided for PHPIZE and PHP's consumption NOT\n");
|
|
||||||
Printf(f_extra, "dnl ** for any part of the rest of the %s build system\n", module);
|
|
||||||
Printf(f_extra, "dnl ***********************************************************************\n\n");
|
|
||||||
|
|
||||||
|
|
||||||
if (!with) { // must be enable then
|
|
||||||
Printf(f_extra, "PHP_ARG_ENABLE(%s, whether to enable %s support,\n", module, module);
|
|
||||||
Printf(f_extra, "[ --enable-%s Enable %s support])\n\n", module, module);
|
|
||||||
} else {
|
|
||||||
Printf(f_extra, "PHP_ARG_WITH(%s, for %s support,\n", module, module);
|
|
||||||
Printf(f_extra, "[ --with-%s[=DIR] Include %s support.])\n\n", module, module);
|
|
||||||
// These tests try and file the library we need
|
|
||||||
Printf(f_extra, "dnl THESE TESTS try and find the library and header files\n");
|
|
||||||
Printf(f_extra, "dnl your new php module needs. YOU MAY NEED TO EDIT THEM\n");
|
|
||||||
Printf(f_extra, "dnl as written they assume your header files are all in the same place\n\n");
|
|
||||||
|
|
||||||
Printf(f_extra, "dnl ** are we looking for %s_lib.h or something else?\n", module);
|
|
||||||
if (withincs)
|
|
||||||
Printf(f_extra, "HNAMES=\"%s\"\n\n", withincs);
|
|
||||||
else
|
|
||||||
Printf(f_extra, "HNAMES=\"\"; # %s_lib.h ?\n\n", module);
|
|
||||||
|
|
||||||
Printf(f_extra, "dnl ** Are we looking for lib%s.a or lib%s.so or something else?\n", module, module);
|
|
||||||
|
|
||||||
if (withlibs)
|
|
||||||
Printf(f_extra, "LIBNAMES=\"%s\"\n\n", withlibs);
|
|
||||||
else
|
|
||||||
Printf(f_extra, "LIBNAMES=\"\"; # lib%s.so ?\n\n", module);
|
|
||||||
|
|
||||||
Printf(f_extra, "dnl IF YOU KNOW one of the symbols in the library and you\n");
|
|
||||||
Printf(f_extra, "dnl specify it below then we can have a link test to see if it works\n");
|
|
||||||
Printf(f_extra, "LIBSYMBOL=\"\"\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now write out tests to find thing.. they may need to extend tests
|
|
||||||
Printf(f_extra, "if test \"$PHP_%s\" != \"no\"; then\n\n", cap_module);
|
|
||||||
|
|
||||||
// Ready for when we add libraries as we find them
|
|
||||||
Printf(f_extra, " PHP_SUBST(%s_SHARED_LIBADD)\n\n", cap_module);
|
|
||||||
|
|
||||||
if (withlibs) { // find more than one library
|
|
||||||
Printf(f_extra, " for LIBNAME in $LIBNAMES ; do\n");
|
|
||||||
Printf(f_extra, " LIBDIR=\"\"\n");
|
|
||||||
// For each path element to try...
|
|
||||||
Printf(f_extra, " for i in $PHP_%s $PHP_%s/lib /usr/lib /usr/local/lib ; do\n", cap_module, cap_module);
|
|
||||||
Printf(f_extra, " if test -r $i/lib$LIBNAME.a -o -r $i/lib$LIBNAME.so ; then\n");
|
|
||||||
Printf(f_extra, " LIBDIR=\"$i\"\n");
|
|
||||||
Printf(f_extra, " break\n");
|
|
||||||
Printf(f_extra, " fi\n");
|
|
||||||
Printf(f_extra, " done\n\n");
|
|
||||||
Printf(f_extra, " dnl ** and $LIBDIR should be the library path\n");
|
|
||||||
Printf(f_extra, " if test \"$LIBNAME\" != \"\" -a -z \"$LIBDIR\" ; then\n");
|
|
||||||
Printf(f_extra, " AC_MSG_RESULT(Library files $LIBNAME not found)\n");
|
|
||||||
Printf(f_extra, " AC_MSG_ERROR(Is the %s distribution installed properly?)\n", module);
|
|
||||||
Printf(f_extra, " else\n");
|
|
||||||
Printf(f_extra, " AC_MSG_RESULT(Library files $LIBNAME found in $LIBDIR)\n");
|
|
||||||
Printf(f_extra, " PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $LIBDIR, %s_SHARED_LIBADD)\n", cap_module);
|
|
||||||
Printf(f_extra, " fi\n");
|
|
||||||
Printf(f_extra, " done\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (withincs) { // Find more than once include
|
|
||||||
Printf(f_extra, " for HNAME in $HNAMES ; do\n");
|
|
||||||
Printf(f_extra, " INCDIR=\"\"\n");
|
|
||||||
// For each path element to try...
|
|
||||||
Printf(f_extra, " for i in $PHP_%s $PHP_%s/include $PHP_%s/includes $PHP_%s/inc $PHP_%s/incs /usr/local/include /usr/include; do\n", cap_module,
|
|
||||||
cap_module, cap_module, cap_module, cap_module);
|
|
||||||
// Try and find header files
|
|
||||||
Printf(f_extra, " if test \"$HNAME\" != \"\" -a -r $i/$HNAME ; then\n");
|
|
||||||
Printf(f_extra, " INCDIR=\"$i\"\n");
|
|
||||||
Printf(f_extra, " break\n");
|
|
||||||
Printf(f_extra, " fi\n");
|
|
||||||
Printf(f_extra, " done\n\n");
|
|
||||||
|
|
||||||
Printf(f_extra, " dnl ** Now $INCDIR should be the include file path\n");
|
|
||||||
Printf(f_extra, " if test \"$HNAME\" != \"\" -a -z \"$INCDIR\" ; then\n");
|
|
||||||
Printf(f_extra, " AC_MSG_RESULT(Include files $HNAME not found)\n");
|
|
||||||
Printf(f_extra, " AC_MSG_ERROR(Is the %s distribution installed properly?)\n", module);
|
|
||||||
Printf(f_extra, " else\n");
|
|
||||||
Printf(f_extra, " AC_MSG_RESULT(Include files $HNAME found in $INCDIR)\n");
|
|
||||||
Printf(f_extra, " PHP_ADD_INCLUDE($INCDIR)\n");
|
|
||||||
Printf(f_extra, " fi\n\n");
|
|
||||||
Printf(f_extra, " done\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CPlusPlus) {
|
|
||||||
Printf(f_extra, " # As this is a C++ module..\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
Printf(f_extra, " PHP_REQUIRE_CXX\n");
|
|
||||||
Printf(f_extra, " AC_CHECK_LIB(stdc++, cin)\n");
|
|
||||||
|
|
||||||
if (with) {
|
|
||||||
Printf(f_extra, " if test \"$LIBSYMBOL\" != \"\" ; then\n");
|
|
||||||
Printf(f_extra, " old_LIBS=\"$LIBS\"\n");
|
|
||||||
Printf(f_extra, " LIBS=\"$LIBS -L$TEST_DIR/lib -lm -ldl\"\n");
|
|
||||||
Printf(f_extra, " AC_CHECK_LIB($LIBNAME, $LIBSYMBOL, [AC_DEFINE(HAVE_TESTLIB,1, [ ])],\n");
|
|
||||||
Printf(f_extra, " [AC_MSG_ERROR(wrong test lib version or lib not found)])\n");
|
|
||||||
Printf(f_extra, " LIBS=\"$old_LIBS\"\n");
|
|
||||||
Printf(f_extra, " fi\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
Printf(f_extra, " AC_DEFINE(HAVE_%s, 1, [ ])\n", cap_module);
|
|
||||||
Printf(f_extra, "dnl AC_DEFINE_UNQUOTED(PHP_%s_DIR, \"$%s_DIR\", [ ])\n", cap_module, cap_module);
|
|
||||||
Printf(f_extra, " PHP_EXTENSION(%s, $ext_shared)\n", module);
|
|
||||||
|
|
||||||
// and thats all!
|
|
||||||
Printf(f_extra, "fi\n");
|
|
||||||
|
|
||||||
Close(f_extra);
|
|
||||||
|
|
||||||
/* CREDITS */
|
|
||||||
f_extra = NewFile(credits, "w");
|
|
||||||
if (!f_extra) {
|
|
||||||
FileErrorDisplay(credits);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
Printf(f_extra, "%s\n", module);
|
|
||||||
Close(f_extra);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------
|
/* ------------------------------------------------------------
|
||||||
* top()
|
* top()
|
||||||
* ------------------------------------------------------------ */
|
* ------------------------------------------------------------ */
|
||||||
|
|
@ -715,9 +489,6 @@ public:
|
||||||
Printf(s_init, "};\n");
|
Printf(s_init, "};\n");
|
||||||
Printf(s_init, "zend_module_entry* SWIG_module_entry = &%s_module_entry;\n\n", module);
|
Printf(s_init, "zend_module_entry* SWIG_module_entry = &%s_module_entry;\n\n", module);
|
||||||
|
|
||||||
if (gen_extra) {
|
|
||||||
Printf(s_init, "#ifdef COMPILE_DL_%s\n", cap_module);
|
|
||||||
}
|
|
||||||
Printf(s_init, "#ifdef __cplusplus\n");
|
Printf(s_init, "#ifdef __cplusplus\n");
|
||||||
Printf(s_init, "extern \"C\" {\n");
|
Printf(s_init, "extern \"C\" {\n");
|
||||||
Printf(s_init, "#endif\n");
|
Printf(s_init, "#endif\n");
|
||||||
|
|
@ -728,10 +499,6 @@ public:
|
||||||
Printf(s_init, "}\n");
|
Printf(s_init, "}\n");
|
||||||
Printf(s_init, "#endif\n\n");
|
Printf(s_init, "#endif\n\n");
|
||||||
|
|
||||||
if (gen_extra) {
|
|
||||||
Printf(s_init, "#endif\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We have to register the constants before they are (possibly) used
|
/* We have to register the constants before they are (possibly) used
|
||||||
* by the pointer typemaps. This all needs re-arranging really as
|
* by the pointer typemaps. This all needs re-arranging really as
|
||||||
* things are being called in the wrong order
|
* things are being called in the wrong order
|
||||||
|
|
@ -828,9 +595,7 @@ public:
|
||||||
Printf(f_phpcode, "%s\n?>\n", s_phpclasses);
|
Printf(f_phpcode, "%s\n?>\n", s_phpclasses);
|
||||||
Close(f_phpcode);
|
Close(f_phpcode);
|
||||||
|
|
||||||
if (gen_extra) {
|
if (gen_make) {
|
||||||
create_extra_files(outfile);
|
|
||||||
} else if (gen_make) {
|
|
||||||
create_simple_make();
|
create_simple_make();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue