php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #13876 Not possible to build DBA as shared extension
Submitted: 2001-10-30 12:42 UTC Modified: 2002-04-18 11:44 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: jlam at jgrind dot org Assigned:
Status: Closed Package: DBM/DBA related
PHP Version: 4.2.0RC4 OS: NetBSD + Linux
Private report: No CVE-ID: None
 [2001-10-30 12:42 UTC] jlam at jgrind dot org
If php is configured and installed on a system without any
db libraries, then a db library, e.g. gdbm, is installed 
afterwards, it's not possible to separately build the DBA 
module as a shared extension.  The problem occurs because 
when a db library is not found when php is configured, the 
php_config.h file written out contains the line:

	#define HAVE_DBA 0

Later, when the DBA module is phpize'd and configured, the
HAVE_DBA definition from php_config.h overrides the value 
set in the local config.h file, which causes all of the 
code to be ifdef'd out.  Even when this problem is fixed, 
the various dba_<db>.c files that implement the PHP 
functions for a particular db library will have all of 
their code ifdef'd out since the DBA_<DB> definitions in 
the local config.h file aren't used.

The complete fix is simple:

    1) Remove the line "AC_DEFINE(HAVE_DBA, 0, [ ])" from
       ext/dba/config.m4.
    2) For each dba_<db>.c file, add at the top before
       php.h is included the following lines:

	#ifdef HAVE_CONFIG_H
	#include "config.h"
	#endif

I have a patch relative to the php-4.0.6 source tree that 
makes the above changes, located at:

	http://jgrind.org/~jlam/patch.dba-4.0.6


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-04-18 01:36 UTC] alan_k@php.net
Full patch to fix this - attached - let me know if you want the patch as a file - I can send it.

--- /usr/src/php/php-4.1.2/ext/dba/config.m4    Thu Jun 28 23:16:28 2001
+++ config.m4   Thu Apr 18 13:19:19 2002
@@ -230,6 +230,5 @@
   PHP_SUBST(DBA_SHARED_LIBADD)
 else
   AC_MSG_RESULT(no)
-  AC_DEFINE(HAVE_DBA, 0, [ ])
 fi
--- /usr/src/php/php-4.2.0RC2/ext/dba/dba_cdb.c	Thu Feb 28 16:25:58 2002
+++ dba_cdb.c	Thu Apr 18 13:27:47 2002
@@ -20,6 +20,10 @@
 
 #include "php.h"
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #if DBA_CDB
 #include "php_cdb.h"
 
--- /usr/src/php/php-4.2.0RC2/ext/dba/dba_db2.c	Thu Feb 28 16:25:58 2002
+++ dba_db2.c	Thu Apr 18 13:27:23 2002
@@ -16,10 +16,14 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: dba_db2.c,v 1.20 2002/02/28 08:25:58 sebastian Exp $ */
+/* $Id: dba_db2.c,v 1.20.2.1 2002/04/08 06:36:39 derick Exp $ */
 
 #include "php.h"
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #if DBA_DB2
 #include "php_db2.h"
 #include <sys/stat.h>
--- /usr/src/php/php-4.2.0RC2/ext/dba/dba_db3.c	Thu Feb 28 16:25:58 2002
+++ dba_db3.c	Thu Apr 18 13:27:57 2002
@@ -20,10 +20,14 @@
 
 #include "php.h"
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #if DBA_DB3
 #include "php_db3.h"
-#include <sys/stat.h>
 
+#include <sys/stat.h>
 #include <string.h>
 #ifdef DB3_INCLUDE_FILE
 #include DB3_INCLUDE_FILE
--- /usr/src/php/php-4.2.0RC2/ext/dba/dba_dbm.c	Thu Feb 28 16:25:59 2002
+++ dba_dbm.c	Thu Apr 18 13:28:15 2002
@@ -20,6 +20,10 @@
 
 #include "php.h"
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #if DBA_DBM
 #include "php_dbm.h"
 
--- /usr/src/php/php-4.2.0RC2/ext/dba/dba_gdbm.c	Thu Feb 28 16:25:59 2002
+++ dba_gdbm.c	Thu Apr 18 13:28:30 2002
@@ -20,6 +20,10 @@
 
 #include "php.h"
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #if DBA_GDBM
 #include "php_gdbm.h"
 
--- /usr/src/php/php-4.2.0RC2/ext/dba/dba_ndbm.c	Thu Feb 28 16:25:59 2002
+++ dba_ndbm.c	Thu Apr 18 13:28:42 2002
@@ -20,10 +20,15 @@
 
 #include "php.h"
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #if DBA_NDBM
 #include "php_ndbm.h"
 
 #include <fcntl.h>
+
 #ifdef NDBM_INCLUDE_FILE
 #include NDBM_INCLUDE_FILE
 #endif

 [2002-04-18 11:44 UTC] alan_k@php.net
This bug has been fixed in CVS.

thanks - this should now work with 4.2.0 and greater 
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 13:01:30 2024 UTC