edink           Sat Sep 28 22:45:25 2002 EDT

  Added files:                 
    /php4/main  php_embed.c php_embed.h 
    /php4/win32 phpembed.dsp 

  Modified files:              
    /php4       Makefile.global configure.in 
  Log:
  Added php/embed toolkit for embedding PHP engine into C/C++ applications.
  See my post to php-dev on the subject.
  
  
Index: php4/Makefile.global
diff -u php4/Makefile.global:1.24 php4/Makefile.global:1.25
--- php4/Makefile.global:1.24   Thu Aug 15 20:36:05 2002
+++ php4/Makefile.global        Sat Sep 28 22:45:24 2002
@@ -22,8 +22,15 @@
 sapi/cli/php: $(PHP_GLOBAL_OBJS) $(PHP_CLI_OBJS)
        $(BUILD_CLI)
 
-install: $(install_targets) 
+libphp.la: $(PHP_LIB_OBJS)
+       $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) 
+$(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_LIB_OBJS) $(EXTRA_LIBS) 
+$(ZEND_EXTRA_LIBS) -o $@
+
+libphp.so: $(PHP_LIB_OBJS)
+       $(LIBTOOL) --mode=link $(CC) -shared -export-dynamic $(COMMON_FLAGS) 
+$(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) 
+$(PHP_LIB_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ .libs
 
+libs: libphp.la libphp.so
+
+install: $(install_targets) 
 
 install-cli: sapi/cli/php
        @echo "Installing PHP CLI binary:        $(INSTALL_ROOT)$(bindir)/"
@@ -62,7 +69,7 @@
                        $(top_builddir)/sapi/cli/php -c php.ini-dist 
$(top_srcdir)/run-tests.php $(TESTS)
 
 clean:
-       find . -name \*.lo -o -name \*.o -o -name \*.la -o -name \*.a| xargs rm -f
+       find . -name \*.lo -o -name \*.o -o -name \*.la -o -name \*.a -o -name \*.so| 
+xargs rm -f
        find . -name .libs -a -type d|xargs rm -rf
        rm -f libphp4.la php sapi/cli/php modules/* libs/*
 
Index: php4/configure.in
diff -u php4/configure.in:1.372 php4/configure.in:1.373
--- php4/configure.in:1.372     Fri Sep  6 13:18:16 2002
+++ php4/configure.in   Sat Sep 28 22:45:24 2002
@@ -1,4 +1,4 @@
-dnl ## $Id: configure.in,v 1.372 2002/09/06 17:18:16 sniper Exp $ -*- sh -*-
+dnl ## $Id: configure.in,v 1.373 2002/09/29 02:45:24 edink Exp $ -*- sh -*-
 dnl ## Process this file with autoconf to produce a configure script.
 
 divert(1)
@@ -1077,6 +1077,12 @@
 fi
 
 PHP_ADD_SOURCES_X(Zend, zend_execute.c,,PHP_GLOBAL_OBJS,,$flag)
+
+
+PHP_ADD_SOURCES_X(main, php_embed.c,, PHP_LIB_OBJS)
+PHP_LIB_OBJS="$PHP_GLOBAL_OBJS $PHP_LIB_OBJS main/internal_functions_cli.lo"
+PHP_SUBST(PHP_LIB_OBJS)
+
 
 PHP_ADD_BUILD_DIR(main)
 PHP_ADD_BUILD_DIR(regex)

Index: php4/main/php_embed.c
+++ php4/main/php_embed.c
/*
   +----------------------------------------------------------------------+
   | PHP Version 4                                                        |
   +----------------------------------------------------------------------+
   | Copyright (c) 1997-2002 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.02 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available at through the world-wide-web at                           |
   | http://www.php.net/license/2_02.txt.                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Edin Kadrinasic <[EMAIL PROTECTED]>                              |
   +----------------------------------------------------------------------+
*/
/* $Id: php_embed.c,v 1.1 2002/09/29 02:45:25 edink Exp $ */

#include "php_embed.h"

#ifdef PHP_WIN32
#include <io.h>
#include <fcntl.h>
#endif

static char* php_embed_read_cookies(TSRMLS_D)
{
        return NULL;
}

static int php_embed_deactivate(TSRMLS_D)
{
        fflush(stdout);
        return SUCCESS;
}

static inline size_t php_embed_single_write(const char *str, uint str_length)
{
#ifdef PHP_WRITE_STDOUT
        long ret;

        ret = write(STDOUT_FILENO, str, str_length);
        if (ret <= 0) return 0;
        return ret;
#else
        size_t ret;

        ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
        return ret;
#endif
}


static int php_embed_ub_write(const char *str, uint str_length TSRMLS_DC)
{
        const char *ptr = str;
        uint remaining = str_length;
        size_t ret;

        while (remaining > 0) {
                ret = php_embed_single_write(ptr, remaining);
                if (!ret) {
                        php_handle_aborted_connection();
                }
                ptr += ret;
                remaining -= ret;
        }

        return str_length;
}

static void php_embed_flush(void *server_context)
{
        if (fflush(stdout)==EOF) {
                php_handle_aborted_connection();
        }
}

static void php_embed_send_header(sapi_header_struct *sapi_header, void 
*server_context TSRMLS_DC)
{
}

static void php_embed_log_message(char *message)
{
        fprintf (stderr, "%s\n", message);
}

static void php_embed_register_variables(zval *track_vars_array TSRMLS_DC)
{
        php_import_environment_variables(track_vars_array TSRMLS_CC);
}

static int php_embed_startup(sapi_module_struct *sapi_module)
{
        if (php_module_startup(sapi_module, NULL, 0)==FAILURE) {
                return FAILURE;
        }
        return SUCCESS;
}

static sapi_module_struct php_embed_module = {
        "embedded",                    /* name */
        "PHP Embedded Library",        /* pretty name */
        
        php_embed_startup,              /* startup */
        php_module_shutdown_wrapper,   /* shutdown */
  
        NULL,                          /* activate */
        php_embed_deactivate,           /* deactivate */
  
        php_embed_ub_write,             /* unbuffered write */
        php_embed_flush,                /* flush */
        NULL,                          /* get uid */
        NULL,                          /* getenv */
  
        php_error,                     /* error handler */
  
        NULL,                          /* header handler */
        NULL,                          /* send headers handler */
        php_embed_send_header,          /* send header handler */
        
        NULL,                          /* read POST data */
        php_embed_read_cookies,         /* read Cookies */
  
        php_embed_register_variables,   /* register server variables */
        php_embed_log_message,          /* Log message */
  
        NULL,                          /* Block interruptions */
        NULL,                          /* Unblock interruptions */

        STANDARD_SAPI_MODULE_PROPERTIES
};
/* }}} */

int php_embed_init(int argc, char **argv PTSRMLS_DC)
{
        zend_llist global_vars;
#ifdef ZTS
        zend_compiler_globals *compiler_globals;
        zend_executor_globals *executor_globals;
        php_core_globals *core_globals;
        sapi_globals_struct *sapi_globals;
        void ***tsrm_ls;
#endif

#ifdef HAVE_SIGNAL_H
#if defined(SIGPIPE) && defined(SIG_IGN)
        signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so
                                                                 that sockets created 
via fsockopen()
                                                                 don't kill PHP if the 
remote site
                                                                 closes it.  in 
apache|apxs mode apache
                                                                 does that for us!  
[EMAIL PROTECTED]
                                                                 20000419 */
#endif
#endif

#ifdef PHP_WIN32
  _fmode = _O_BINARY;                   /*sets default for file streams to binary */
  setmode(_fileno(stdin), O_BINARY);            /* make the stdio mode be binary */
  setmode(_fileno(stdout), O_BINARY);           /* make the stdio mode be binary */
  setmode(_fileno(stderr), O_BINARY);           /* make the stdio mode be binary */
#endif

#ifdef ZTS
  tsrm_startup(1, 1, 0, NULL);
#endif

#ifdef ZTS
  compiler_globals = ts_resource(compiler_globals_id);
  executor_globals = ts_resource(executor_globals_id);
  core_globals = ts_resource(core_globals_id);
  sapi_globals = ts_resource(sapi_globals_id);
  tsrm_ls = ts_resource(0);
  *ptsrm_ls = tsrm_ls;
#endif

  sapi_startup(&php_embed_module);

  if (php_module_startup(&php_embed_module, NULL, 0)==FAILURE) {
          return FAILURE;
  }
 
  if (argv) {
        php_embed_module.executable_location = argv[0];
  }

  zend_llist_init(&global_vars, sizeof(char *), NULL, 0);  

  /* Set some Embedded PHP defaults */
  SG(options) |= SAPI_OPTION_NO_CHDIR;
  zend_alter_ini_entry("register_argc_argv", 19, "1", 1, PHP_INI_SYSTEM, 
PHP_INI_STAGE_ACTIVATE);
  zend_alter_ini_entry("html_errors", 12, "0", 1, PHP_INI_SYSTEM, 
PHP_INI_STAGE_ACTIVATE);
  zend_alter_ini_entry("implicit_flush", 15, "1", 1, PHP_INI_SYSTEM, 
PHP_INI_STAGE_ACTIVATE);
  zend_alter_ini_entry("max_execution_time", 19, "0", 1, PHP_INI_SYSTEM, 
PHP_INI_STAGE_ACTIVATE);

  SG(request_info).argc=argc;
  SG(request_info).argv=argv;

  if (php_request_startup(TSRMLS_C)==FAILURE) {
          php_module_shutdown(TSRMLS_C);
          return FAILURE;
  }
  
  SG(headers_sent) = 1;
  SG(request_info).no_headers = 1;
  php_register_variable("PHP_SELF", "-", NULL TSRMLS_CC);

  return SUCCESS;
}

void php_embed_shutdown(TSRMLS_D)
{
        php_request_shutdown((void *) 0);
        php_module_shutdown(TSRMLS_C);
#ifdef ZTS
    tsrm_shutdown();
#endif
}

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: sw=4 ts=4 fdm=marker
 * vim<600: sw=4 ts=4
 */

Index: php4/main/php_embed.h
+++ php4/main/php_embed.h
/*
   +----------------------------------------------------------------------+
   | PHP Version 4                                                        |
   +----------------------------------------------------------------------+
   | Copyright (c) 1997-2002 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.02 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available at through the world-wide-web at                           |
   | http://www.php.net/license/2_02.txt.                                 |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Edin Kadrinasic <[EMAIL PROTECTED]>                              |
   +----------------------------------------------------------------------+
*/
/* $Id: php_embed.h,v 1.1 2002/09/29 02:45:25 edink Exp $ */

#ifndef _PHP_EMBED_H_
#define _PHP_EMBED_H_

#include <main/php.h>
#include <main/SAPI.h>
#include <main/php_main.h>
#include <main/php_variables.h>
#include <main/php_ini.h>
#include <zend_ini.h>

#ifdef ZTS
#define PTSRMLS_D        void ****ptsrm_ls
#define PTSRMLS_DC       , PTSRMLS_D
#define PTSRMLS_C        &tsrm_ls
#define PTSRMLS_CC       , PTSRMLS_C
#else
#define PTSRMLS_D
#define PTSRMLS_DC
#define PTSRMLS_C
#define PTSRMLS_CC
#endif

#define PHP_EMBED_START_BLOCK(x,y) { \
    void ***tsrm_ls; \
    php_embed_init(x, y PTSRMLS_CC); \
    zend_first_try {

#define PHP_EMBED_END_BLOCK() \
  } zend_catch { \
    /* int exit_status = EG(exit_status); */ \
  } zend_end_try(); \
  php_embed_shutdown(TSRMLS_C); \
}

BEGIN_EXTERN_C() 
int php_embed_init(int argc, char **argv PTSRMLS_DC);
void php_embed_shutdown(TSRMLS_D);
END_EXTERN_C()


#endif /* _PHP_EMBED_H_ */

Index: php4/win32/phpembed.dsp
+++ php4/win32/phpembed.dsp
# Microsoft Developer Studio Project File - Name="phpembed" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) Static Library" 0x0104

CFG=phpembed - Win32 Debug_TS
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE 
!MESSAGE NMAKE /f "phpembed.mak".
!MESSAGE 
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE 
!MESSAGE NMAKE /f "phpembed.mak" CFG="phpembed - Win32 Debug_TS"
!MESSAGE 
!MESSAGE Possible choices for configuration are:
!MESSAGE 
!MESSAGE "phpembed - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "phpembed - Win32 Release_TS" (based on "Win32 (x86) Static Library")
!MESSAGE 

# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe

!IF  "$(CFG)" == "phpembed - Win32 Debug_TS"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug_TS"
# PROP BASE Intermediate_Dir "Debug_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_TS"
# PROP Intermediate_Dir "Debug_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" 
/YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\Zend" /I 
"..\TSRM" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "ZTS" /D "ZEND_WIN32" /D 
"PHP_WIN32" /D ZEND_DEBUG=1 /YX /FD /GZ /c
# ADD BASE RSC /l 0x406 /d "_DEBUG"
# ADD RSC /l 0x406 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\Debug_TS\phpembed.lib"

!ELSEIF  "$(CFG)" == "phpembed - Win32 Release_TS"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release_TS"
# PROP BASE Intermediate_Dir "Release_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS"
# PROP Intermediate_Dir "Release_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD 
/c
# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\TSRM" /D 
"NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D 
ZEND_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x406 /d "NDEBUG"
# ADD RSC /l 0x406 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\Release_TS\phpembed.lib"

!ENDIF 

# Begin Target

# Name "phpembed - Win32 Debug_TS"
# Name "phpembed - Win32 Release_TS"
# Begin Group "Source Files"

# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File

SOURCE=..\main\php_embed.c
# End Source File
# End Group
# Begin Group "Header Files"

# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File

SOURCE=..\main\php_embed.h
# End Source File
# End Group
# End Target
# End Project

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to