From:             [EMAIL PROTECTED]
Operating system: BSD/OS 4.x
PHP version:      4.0.6
PHP Bug Type:     Unknown/Other Function
Bug description:  Configure issues

Hi,

for a number of releases I've dealt with some known issues, but felt it's
time to summarize them here, since I think I've pretty much got them all,
including the fixes.

1) Native make + gnu make
For some reason, php is the only package, that manages to override the
variable MAKE=/path/to/make as well as the make in the PATH setting. If you
keep the native make (which is sensible, for it's best used for creating a
new kernel), but you have your own make compiled in your own dirs, then
make doesn't work. The reason is, the old include format. I use this
perlscript 'makefix.pl' to fix the issues:
#!/perl/bin/perl

use Getopt::Long;

my $dir=$ENV{'HOME'}.'/_src/php-4.0.4pl1';

GetOptions(
        'dir=s'         =>      \$dir);


chdir($dir) || die "Can't change to $dir\n$!\n";

open(FILE, './makefix.lst') || die "Please create the list first,
with:\nfind -x . -exec grep -l -E '\\.include \\\"' {} \\;
>./makefix.lst";
@files = <FILE>;
close(FILE);

for $i (0..$#files) {
        $fix = $files[$i];
        next if $fix =~ /\.bak$/;
        chomp($fix);
        $bak = $fix . '.bak';
        system("cp $fix $bak");
        print STDOUT "Trying $bak and $fix....";
        open(BAK, $bak) || die "cant open $bak\n$!\n";
        open(FIX, ">$fix") || die "cant open $fix\n$!\n";
        while(<BAK>) {
                chomp;
                s/^\.include \"([^\"]+)\"\s?$/include $1/;
                print FIX $_;
                print FIX "\n";
        }
        close(BAK);
        close(FIX);
        print STDOUT "fixed.\n";
}
exit(0);

It can probably be done more easily, but it works.

2) INET_* functions
Are native for BSDi and don't need a library. Secondly, they complain
without the right headers. Here's a snippet from the Bind configure script,
on how to _correctly_ test for these functions:
------------------------------------------------------------
echo $ac_n "checking for inet_aton""... $ac_c" 1>&6
echo "configure:3901: checking for inet_aton" >&5
cat > conftest.$ac_ext <<EOF
#line 3903 "configure"
#include "confdefs.h"

#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
struct in_addr in; inet_aton(0, &in); return (0);
; return 0; }
EOF
------------------------------------------------------------

The native bind on BSDi does have __inet_aton in libbind, but it's static,
so PHP complains and you need to edit config.h and Zend/Makefile to get rid
of it.

Secondly - bind 9.x requires not only libbind but libisc as well, so any
tests for -lbind will always fail, if you've upgraded your named package.

3) res_search
Is also native on BSDi. I don't have a definite fix, since I'm no
C-programmer, but I just add these lines to the end of main/php_config.h.in
to work around it:

#ifdef __bsdi__
        #define HAVE_RES_SEARCH 1
#endif

man 3 res_search says:
DEPRECATED
     #include <sys/types.h>
     #include <netinet/in.h>
     #include <arpa/nameser.h>
     #include <resolv.h>
...
     res_search(const char *dname, int class, type, u_char *answer, int
anslen);

4) Iconv and XSLT
Below is a typical diff for any section in configure trying to find iconv
for the XSLT section:
------------------------------------------------------------
    found_iconv=no
!   echo $ac_n "checking for iconv_open in -lc""... $ac_c" 1>&6
! echo "configure:48789: checking for iconv_open in -lc" >&5
  ac_lib_var=`echo c'_'iconv_open | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set";
then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_save_LIBS="$LIBS"
! LIBS="-lc  $LIBS"
  cat > conftest.$ac_ext <<EOF
  #line 48797 "configure"
  #include "confdefs.h"
--- 48784,48797 ----


    found_iconv=no
!   echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6
! echo "configure:48789: checking for iconv_open in -liconv" >&5
  ac_lib_var=`echo c'_'iconv_open | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set";
then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_save_LIBS="$LIBS"
! LIBS="-liconv  $LIBS"
  cat > conftest.$ac_ext <<EOF
  #line 48797 "configure"
  #include "confdefs.h"
------------------------------------------------------------
It will do this correctly for --with-iconv, but later on when iconv is
specified with xslt, it breaks. There are several sections in the configure
script and I usually fix them all just to spare me the havoc of find out
which is called and why.

I hope you can address these issues before 4.0.7 release.

As a side note:
The latest snapshots work correctly with make as always, but then the
release versions don't.
-- 
Edit bug report at: http://bugs.php.net/?id=14048&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to