Ed,

ED > I don't really understand why Perl 5.8.7 lacked DB_File since
ED > Module::CoreList [...] reports it being standard sine 5.00307.
Perhaps
ED > this is some sort of emasculated version that ships with Solaris
:-)

Nope, I wasn't using a "Perl lite" version. ;-) 

Although Solaris now comes with Perl (v.5.6.1 for Solaris 9), when I set
up a server I always download and compile from the latest Perl source
(v.5.8.7 in this case) and that's the Perl version I use for my scripts
and the version to which I add any non-standard modules.  I did a plain
vanilla "all defaults" Perl installation [1].

ED > It looks like the user tried to install DB_File without having the
ED > BerkeleyDB libraries from SleepyCat already installed.

It *is* true that I tried to install the DB_File.pm module without
having installed any software from SleepyCat (although I *did* check for
Berkeley DB libraries installed as Solaris packages and was hoping that
they would suffice [2]).  If DB_File.pm requires software from SleepyCat
as part of the compile/installation process, I'm curious how it could be
installed as a core module.  However, the DB_File documentation on CPAN
(Paul Marquess > DB_File-1.814 > DB_File)  states this:

        AVAILABILITY 
        DB_File comes with the standard Perl source distribution.
        Look in the directory ext/DB_File.

...and I rechecked my Perl source and it *is* in that directory.

However, the Perl "Configure" script appears to do some system checking
in regard to what Berkeley DB components are available [3].  I'm
guessing the necessary Berkeley DB stuff is installed by default on some
platforms, and thus DB_File.pm gets installed when compiling/installing
Perl on those platforms.  Not apparently, however, the case for my
particular Solaris/Perl setup (nor is it included in the Solaris OS
package v5.6.1 Perl version), although I'd be interested in the
experiences of other Solaris sites in installing MARC::Charset.
Although for security reasons, we no longer install the Solaris "Entire"
metacluster, I did do a Solaris package search for "Berkeley DB"
(http://rocky.uta.edu/doran/pkginfo/search.cgi) and I installed the only
two relevant Solaris packages I found prior to trying to install the
DB_File.pm module from the source code.

Sooooo... this is all very interesting (and I've definitely learned
something here), but like I suggested previously, this level of digging
may be a bit beyond the "casual" Perl user.  ;-)

-- Michael

# Michael Doran, Systems Librarian
# University of Texas at Arlington
# 817-272-5326 office
# 817-688-1926 cell
# [EMAIL PROTECTED]
# http://rocky.uta.edu/doran/ 

[1] hostname:/> /opt/bin/perl -v

This is perl, v5.8.7 built for sun4-solaris

Copyright 1987-2005, Larry Wall

Perl may be copied only under the terms of either the Artistic License
or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to
the
Internet, point your browser at http://www.perl.org/, the Perl Home
Page.

bullwinkle:/opt/lib/perl5> /opt/bin/perl -V
Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
  Platform:
    osname=solaris, osvers=2.9, archname=sun4-solaris
    uname='sunos bullwinkle 5.9 generic_118558-06 sun4u sparc
sunw,ultra-enterprise '
    config_args='-de'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64',
    optimize='-O',
    cppflags='-fno-strict-aliasing -pipe'
    ccversion='', gccversion='2.95.3 20010315 (release)',
gccosandvers='solaris2.9'
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' '
    libpth=/usr/lib /usr/ccs/lib
    libs=-lsocket -lnsl -ldl -lm -lc
    perllibs=-lsocket -lnsl -ldl -lm -lc
    libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
    cccdlflags='-fPIC', lddlflags='-G'


Characteristics of this binary (from libperl): 
  Compile-time options: USE_LARGE_FILES
  Built under solaris
  Compiled at Jun 13 2005 10:21:04
  @INC:
    /opt/lib/perl5/5.8.7/sun4-solaris
    /opt/lib/perl5/5.8.7
    /opt/lib/perl5/site_perl/5.8.7/sun4-solaris
    /opt/lib/perl5/site_perl/5.8.7
    /opt/lib/perl5/site_perl
    .

[2] From previous message:
> The DB_File README says that "Berkeley DB" is a prerequisite. 
> I have the following Solaris packages installed:
>       SFWbdb               berkeleyDB - Berkeley Database Library
>       SFWdb1               Berkeley DB - database library
> ... but I'm not sure if that constitutes having the "Berkeley DB". 

[3] Excerpt from the "perl-5.8.7/Configure script":

: see if this is a db.h system
set db.h i_db
eval $inhdr

case "$i_db" in
$define)
        : Check db version.
        echo " "
        echo "Checking Berkeley DB version ..." >&4
        $cat >try.c <<EOCP
#$d_const HASCONST
#ifndef HASCONST
#define const
#endif
#include <sys/types.h>
#include <stdio.h>
#$i_stdlib I_STDLIB
#ifdef I_STDLIB
#include <stdlib.h>
#endif
#include <db.h>
int main(int argc, char *argv[])
{
#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
    int Major, Minor, Patch ;
    unsigned long Version ;
    (void)db_version(&Major, &Minor, &Patch) ;
    if (argc == 2) {
        printf("%d %d %d %d %d %d\n",
               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
               Major, Minor, Patch);
        exit(0);
    }
    printf("You have Berkeley DB Version 2 or greater.\n");

    printf("db.h is from Berkeley DB Version %d.%d.%d\n",
                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
    printf("libdb is from Berkeley DB Version %d.%d.%d\n",
                Major, Minor, Patch) ;

    /* check that db.h & libdb are compatible */
    if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor ||
DB_VERSION_PAT
CH != Patch) {
        printf("db.h and libdb are incompatible.\n") ;
        exit(3);
    }

    printf("db.h and libdb are compatible.\n") ;

    Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
                + DB_VERSION_PATCH ;

    /* needs to be >= 2.3.4 */
    if (Version < 2003004) {
    /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 &&
DB_VERSION_PATCH <
5) { */
        printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
        exit(2);
    }

    exit(0);
#else
#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
    if (argc == 2) {
        printf("1 0 0\n");
        exit(0);
    }
    printf("You have Berkeley DB Version 1.\n");
    exit(0);    /* DB version < 2: the coast is clear. */
#else
    exit(1);    /* <db.h> not Berkeley DB? */
#endif
#endif
}
EOCP
        set try
        if eval $compile_ok && $run ./try; then
                echo 'Looks OK.' >&4
                set `$run ./try 1`
                db_version_major=$1
                db_version_minor=$2
                db_version_patch=$3
        else
                echo "I can't use Berkeley DB with your <db.h>.  I'll
disable Be
rkeley DB." >&4
                i_db=$undef
                case " $libs " in
                *"-ldb "*)
                        : Remove db from list of libraries to use
                        echo "Removing unusable -ldb from library list"
>&4
                        set `echo X $libs | $sed -e 's/-ldb / /' -e
's/-ldb$//'`
                        shift
                        libs="$*"
                        echo "libs = $libs" >&4
                        ;;
                esac
        fi
        $rm -f try.*
        ;;
esac

case "$i_db" in
define)
        : Check the return type needed for hash
        echo " "
        echo "Checking return type needed for hash for Berkeley DB ..."
>&4
        $cat >try.c <<EOCP

<yada, yada, yada>

Reply via email to