Great work!

Many thanks Lincoln, to you and all who have contributed.

I've bounced a copy to perl5-porters so there might be some feedback
from there.

On Mon, Jul 16, 2001 at 11:31:52AM -0400, [EMAIL PROTECTED] wrote:
> built perl per the instructions... The latest DBI and DBD-Oracle works with 
> the standard CPAN module mantra: (no hacking required)
> 
>    perl Makefile.PL
>    make
>    make test
>    make install
> 
> How can we get this information to the CPAN page that shows what systems
> these modules have been tested with?

I'm not sure what 'CPAN page' you're refering to.

Tim.

> I have attached (and pasted in line) a new version of the README.hpux for
> DBD-Oracle.  This includes some clarification of information I had to learn 
> all over again. (Ouch) I have also corrected a number stoopid typo's that 
> were easy to see after not looking at this for 6 months.
> 
> Best Wishes to all,
> 
> Lincoln
> 
> 
> 
> =head1 INTRODUCTION
> 
> Building a working dynamically linked version of the Oracle DBD driver
> on HPUX (11.00) has been a challenge for many.  For months after taking a
> new job, where HPUX was the standard server environment, I had only been
> able to build a staticly linked version of perl and the DBD-Oracle 
> module on HPUX 11.00.
> 
> Then Roger Foskett posted instructions for what turned out to be dynamic
> build.  Rogers's post got me farther than I had previously gotten.  In fact,
> 
> after resolving some undefined symbol errors, I succeeded where for I had 
> previously despaired of finding the time to hack out the right 
> incantation.  
> 
> This F<README.hpux> describes the combined knowledge of a number of
> folks who invested many hours discovering a working set of build options.
> The instructions in this file, which include building perl from
> sources, will produce a working dynamically linked DBD-Oracle that can
> be used with mod_perl and Apache.
> 
> Both Roger Foskett and I have been using the HP softbench c compiler
> normally installed in:
> 
>       /opt/softbench/bin/cc.
> 
> F<Makefile.PL> has been modified to check for some of the
> conditions which, when met, we know will produce a working build.
> However, there are many variations of Oracle installations and
> features.  Not all of these can be tested by any one of us,
> if you discover a way to make a variation which did not previous
> work, please submit patches to Makefile.PL to Tim Bunce, and 
> patches to this README to Tim Bunce or me.
> 
> The instructions herein, have compiled, linked cleanly, and tested 
> cleanly using the HP softbench compiler, and Oracle 8.0.5 (32bit), and
> Oracle 8.1.6 (64 bit).  Oracle 8.1.5 will probably work as well.
> 
> This author now has Oracle 8.1.7 (64 bit) workting with DBI-1.18 and
> DBD-Oracle-1.07 and perl 5.6.1.  See appendices for my exact build
> configuration.
> 
> 
> =head1  Build perl
> 
> =head2 HP's default perl (probably no good)
> 
> By default, HPUX 11.00 delivers perl 5.00503.  This version of perl will
> probably not work.  If you are reading this, you have probably
> discovered that something did not work.  To get good version of the
> DBD-Oracle driver, we have to start with a perl that as been built with
> the correct compiler flags and shared libraries.
> 
> =head2 Building the right perl
> 
> Generally, in order to get a version of the DBD-Oracle driver that
> works on HPUX you need to build your own version of perl from
> sources.
> 
> These instructions have been used to building a dynamically linked
> working DBD-Oracle driver that works with mod_perl and Apache.  These
> instructions are based on perl 5.6.0 and 5.6.1.  To this author's knowledge,
> they have not be tested on earlier versions of perl.  
> 
> It is important to build a B<non> threaded perl, but linked with 
> -lcl and -lpthread.   Since Oracle on HP uses libpthread, everything that
> dynamically loads it (such as DBD-Oracle) must have been built/linked
> with '-lpthread -lcl'.  (When used with Apache, it and any associated
> modules these must also be built this way - otherwise all it does is core
> dump when loading DBD::Oracle). 
> 
> A good link that explains thread local storage problems is
> http://my1.itrc.hp.com/cm/QuestionAnswer/1,1150,0x0d0a6d96588ad4118fef009027
> 9cd0f9!0,00.html
> 
> 
> =item Configure
> 
> Once you have downloaded and unpacked the perl sources 
> (version 5.6.0 assumed here)
> 
>     cd Perl-5.6.0/
>     ./Configure -Ubincompat5005 #important that there is no malloc polution
> 
> You should configure perl to understand largefiles... basically you can
> accept the
> defaults for all options except:
> 
>     Additional libraries: add -lcl -lpthread #FIRST in the list
>     ccflags: add '+z' 
>     Do you want to install perl as /usr/bin/perl? [y] n
>     Perl 5.005 binary compatable? [y] n #causes mod_perl to complain 
>                                         #about malloc polution
> 
> BTW: When you add -lcl -lpthread to the library list, make sure to place
> them B<first>, in the library list, and then that you add all the of
> the libraries that were originally prosented as the default list. If you add
> -lcl and -lpthread to the end of the list it will not work. I wasted a day 
> and a half trying to figure our why I had lost the recipe, before I 
> realized that this was the problem. The symptom will be that
> 
>    make test 
>    
> of perl itself will fail to load dynamic libraries.
> 
> You can check in the generated 'config.sh' that the options you selected
> are correct.  If not, modify config.sh and then re-run ./Configure with
> the '-d' option to process the config.sh file.
> 
> =item Build & Install 
>     
>     
>     make
>     make test
>     make install
> 
> If you are going to build mod_perl and Apache it as beed suggested that you
> modify
> Config.pm to the change the HPUX ldflags & ccdlflags in
> F</your/install/prefix/lib/5.6.0/PA-RISC2.0/Config.pm> as follows:
> 
>     ccdlflags=''
>     cccdlflags='+z'
>     ldflags=' -L/usr/local/lib'
> 
> This is not necessary if you are not using mod_perl and Apache.
> 
> =head1 Build and Install DBI
> 
>     
>     cd DBI-1.14/
>     perl Makefile.PL
>     make
>     make test
>     make install
> 
> =head1 DBD-Oraclea-1.07 and later
> 
> The standard mantra now works out of the box on HPUX:
>     
>     cd DBD-1.07/ #or more recent version
> 
>     export ORACLE_HOME=<path to oracle>
>     export ORACLE_SID=<a valid instance>
>     export ORACLE_USERID=<validuser/validpasswd>
> 
>     perl Makefile.PL
>     make 
>     make test
>     make install # if all went smoothly
> 
> If you have trouble, go though the instructions below, for hints
> of what might be wrong... and sent me a note, describing your
> configuration, and what you did to fix it.
> 
> =head1  DBD-Oracle-1.06
> 
> You are stronly urged to upgrade. However here is what you may
> need to know to get it or work, if you insist on using an earlier
> version.
> 
> Check the output that above command produces, to verify that 
> 
>    -Wl,+n
>    -W1,+s
> 
> is b<NOT> present. and that 
> 
>    -lqsmashr 
> 
> B<is> present.  
> 
> If the version of Makefile.PL does not include the patch produced at the
> time
> of this README.hpux, then the above conditions will likely not be met.
> You can fix this as follows:
> 
>       cat Makefile | sed 's/-Wl,+[sn]//' > Makefile.tmp
>       mv Makefile.tmp Makefile
> 
> You can add -lqsmashr (assuming $ORACLE_HOME/lib/libqsmashr.sl exists) to
> the link 
> command, as follows
> 
>    cat Makefile | sed 's/\(OTHERLDFLAGS=.*$\)/\1 -lqsmashr/' > Makefile.tmp
>       mv Makefile.tmp Makefile
> 
> Oracle version 8.1.6 and (maybe 8.1.5) (and probably later) versions, use
> the 
> 
>    +Wl,+n +Wl,+s 
> 
> linker options which causes ld to complain about these as unknown options.
> This
> is probably because Oracle is linking with the cc command, and we are
> linking with
> ld.  Oracle also fails to include libqsmashr which defines the Symbol
> LhrStrInsert().  
> 
> If you are using Oracle 8.0.5, check for, and remove if found,
> the linker options:  
> 
>    +DA2.0W +DS2.0
> 
> Oracle 8.0.5 does not have libqsmashr.sl
> 
> We are now ready to make:
> 
>     make
>     make test #needs valid TWO_TASK & ORACLE_USERID environment vars set)
> 
> At this point dld.sl may be reporting undefined symbol errors.
> 
> In my case, LhtStrInsert was undefined.  To solve this problem, I had
> to looked though the Oracle libraries using nm.  I found the symbol
> in 3 separate libraries in $ORACLE_HOME/lib.  I then proceeded to as these
> libraries to the OTHERLDFLAGS makefile macro until I got a clean linke.
> libqsmashr.sl was what did the trick for me.
> 
> The following ksh/bash function will search from the current directory 
> down for Symbols in files in lib directories:
> 
> To make this search easy I took a code snippet suggested by Roger and turned
> it into a little symbol hunting ksh/bash function: 
> 
>    #cd to where you want to look
>       #find_symbol Symbol ['libnamewildcard' as in '*.sl'] 
>    #based on a code fragment suggested by Roger Foskett
>       function find_symbol {
>          sym=$1; shift;
>          libs=$1; shift;
>          set +u
>          for libdir in $(find . | egrep '/lib$'); do
>             cd $libdir;
>             for lib in $(ls $libs); do
>                if nm $lib | grep $sym; then
>                   echo $(pwd)/$lib : $sym
>                fi
>             done
>             cd -
>          done
>          set -u
>       }
> 
> To use this I cd'd to $ORACLE_HOME and searched for the definitions of the
> undefined
> symbol as follows:
>       
>       find_symbol LhtStrInsert '*.sl'
>       
> Once you have run make test successfully, you can install your build in your
> perl tree:
> 
>    make install
> 
> 
> =head1 Apache and mod_perl
> 
> If you are not building this version of perl for Apache you can go on
> to build what ever other modules you require.  The following instructions
> describe how these modules were built with the perl/DBD-Oracle built above:
> The following is what worked for Roger Foskett:
> 
> 
> =head2 Apache Web server
> 
>     cd apache_1.3.14/
>     LDFLAGS_SHLIB_EXPORT="" \
>     LDFLAGS="-lm -lpthread -lcl" \
>     CC=/usr/bin/cc \
>     CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" \
>     ./configure \
>         --prefix=/opt/www/apache \
>         --enable-shared=max \
>         --disable-rule=EXPAT \
>         --enable-module=info \
>         --enable-rule=SHARED_CORE
> 
> The Expat XML parser is disabled as it conflicts with the Perl
> XML-Parser module causing core dumps.  -lcl is needed to ensure that Apache
> does
> not coredump complaining about thread local storage
>     
>     make
>     make install
>     
> Once installed, ensure that the generated httpd.conf is properly
> configured, change the relvant lines to below (the default user/group 
> caused problems on HP (the user 'www' may need to be created)
> 
>         User www
>         Group other
>         port 80
>         
> =head2 mod_perl
> 
>     cd mod_perl-1.24_01/
>     perl Makefile.PL \
>         NO_HTTPD=1 \
>         USE_APXS=1 \
>         WITH_APXS=/opt/www/apache/bin/apxs \
>         EVERYTHING=1 
>     make
>     make install
> 
> =head2 htdig intranet search engine
> 
>     cd htdig-3.1.5/
>     CC='cc' CPP='aCC' \
>     ./configure \
>         --prefix=/opt/www/htdig \
>         --with-cgi-bin-dir=/opt/www/htdig/cgi-bin \
>         --with-image-dir=/opt/www/htdig/images
> 
> =head1 CONTRIBUTORS
> 
> The following folks contributed to this README:
> 
>    Lincoln A. Baxter <[EMAIL PROTECTED] or [EMAIL PROTECTED]>
>    Roger Foskett <[EMAIL PROTECTED]>
>    Weiguo Sun <[EMAIL PROTECTED]>
> 
> And probably others unknown to me.
> 
> =head1 AUTHOR
> 
>    Lincoln A. Baxter
>    IT Solutions Delivery, Fleet Credit Card Services
>    [EMAIL PROTECTED] or [EMAIL PROTECTED]
>    Office:  215.444.7973
> 
> =head1 Appendix A (Perl Configuration Dumps)
> 
> The following to sections provide full dumps of perl -V for three
> versions of perl that were successfully built and linked on
> HPUX 11.00.
> 
> =head2 Lincoln Baxter's DBD-Oracle-1.07 Configuration
> 
>      Platform:
>        osname=hpux, osvers=11.00, archname=PA-RISC2.0
>        uname='hp-ux dhdb108 b.11.00 u 9000800 612309363 unlimited-user
> license '
>        config_args=''
>        hint=previous, useposix=true, d_sigaction=define
>        usethreads=undef use5005threads=undef useithreads=undef
> usemultiplicity=undef
>        useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
>        use64bitint=undef use64bitall=undef uselongdouble=undef
>      Compiler:
>        cc='cc', ccflags ='-D_HPUX_SOURCE -Aa -I/usr/local/include
> -DDEBUGGING -z',
>        optimize='-O',
>        cppflags='-D_HPUX_SOURCE -Aa -I/usr/local/include -DDEBUGGING -z'
>        ccversion='', gccversion='', gccosandvers=''
>        intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
>        d_longlong=undef, longlongsize=, d_longdbl=define, longdblsize=16
>        ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
> lseeksize=4
>        alignbytes=8, usemymalloc=y, prototype=define
>      Linker and Libraries:
>        ld='ld', ldflags =' -Wl,+vnocompatwarnings -L/usr/local/lib'
>        libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib
>        libs=-lcl -lpthread -lnsl -lnm -lndbm -ldld -lm -lc -lndir -lcrypt
> -lsec
>        perllibs=-lcl -lpthread -lnsl -lnm -ldld -lm -lc -lndir -lcrypt -lsec
>        libc=, so=sl, useshrplib=false, libperl=libperl.a
>      Dynamic Linking:
>        dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef, ccdlflags='-Wl,-E
> -Wl,-B,deferred '
>        cccdlflags='+z', lddlflags='-b +vnocompatwarnings -L/usr/local/lib'
> 
>    Characteristics of this binary (from libperl): 
>      Compile-time options: DEBUGGING USE_LARGE_FILES
>      Built under hpux
>      Compiled at Jul 15 2001 16:01:33
>      @INC:
>        /home/baxtlinc/perl/lib
>        /opt/perl/5.6.1-fccs-01/lib/5.6.1/PA-RISC2.0
>        /opt/perl/5.6.1-fccs-01/lib/5.6.1
>        /opt/perl/5.6.1-fccs-01/lib/site_perl/5.6.1/PA-RISC2.0
>        /opt/perl/5.6.1-fccs-01/lib/site_perl/5.6.1
>        /opt/perl/5.6.1-fccs-01/lib/site_perl
> 
> 
> =head2 Lincoln Baxter's DBD-Oracle-1.06 Configuration 
> 
>      Platform:
>        osname=hpux, osvers=11.00, archname=PA-RISC2.0
>        uname='hp-ux dhdb108 b.11.00 u 9000800 612309363 unlimited-user
> license '
>        config_args='-Dprefix=/temp_data/baxtlinc/perl -Ubincompat5005'
>        hint=previous, useposix=true, d_sigaction=define
>        usethreads=undef use5005threads=undef useithreads=undef
> usemultiplicity=undef
>        useperlio=undef d_sfio=undef uselargefiles=define 
>        use64bitint=undef use64bitall=undef uselongdouble=undef
> usesocks=undef
>      Compiler:
>        cc='cc', optimize='-O', gccversion=
>        cppflags='-D_HPUX_SOURCE -I/usr/local/include +z -D_LARGEFILE_SOURCE
> -D_FILE_OFFSET_BITS=64 -Ae'
>        ccflags ='-D_HPUX_SOURCE -I/usr/local/include +z -D_LARGEFILE_SOURCE
> -D_FILE_OFFSET_BITS=64 -Ae'
>        stdchar='unsigned char', d_stdstdio=define, usevfork=false
>        intsize=4, longsize=4, ptrsize=4, doublesize=8
>        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, usemymalloc=y, prototype=define
>      Linker and Libraries:
>        ld='ld', ldflags =' -Wl,+vnocompatwarnings'
>        libpth=/lib /usr/lib /usr/ccs/lib
>        libs=-lnsl -lnm -lndbm -ldld -lm -lc -lndir -lcrypt -lsec -lcl
> -lpthread
>        libc=, so=sl, useshrplib=true, libperl=libperl.sl
>      Dynamic Linking:
>        dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef, ccdlflags='-Wl,-E
> -Wl,-B,deferred '
>        cccdlflags='+z', lddlflags='-b +vnocompatwarnings'
>    
>    Characteristics of this binary (from libperl): 
>      Compile-time options: USE_LARGE_FILES
>      Built under hpux
>      Compiled at Jan  9 2001 17:36:00
>      @INC:
>        /temp_data/baxtlinc/perl/lib/5.6.0/PA-RISC2.0
>        /temp_data/baxtlinc/perl/lib/5.6.0
>        /temp_data/baxtlinc/perl/lib/site_perl/5.6.0/PA-RISC2.0
>        /temp_data/baxtlinc/perl/lib/site_perl/5.6.0
>        /temp_data/baxtlinc/perl/lib/site_perl
>        .
> 
> 
> =head2 Roger Foskett's Configuration (works with Apache and mod_perl)
> 
>      Platform:
>        osname=hpux, osvers=11.00, archname=PA-RISC2.0
>        uname='hp-ux titan b.11.00 u 9000800 103901567 unlimited-user license
> '
>        config_args='-Ubincompat5005'
>        hint=recommended, useposix=true, d_sigaction=define
>        usethreads=undef use5005threads=undef useithreads=undef
> usemultiplicity=undef
>        useperlio=undef d_sfio=undef uselargefiles=define 
>        use64bitint=undef use64bitall=undef uselongdouble=undef
> usesocks=undef
>      Compiler:
>        cc='cc', optimize='-O', gccversion=
>        cppflags='-D_HPUX_SOURCE -Aa -I/usr/local/include'
>        ccflags =' +z -D_HPUX_SOURCE -I/usr/local/include -D_LARGEFILE_SOURCE
>    -D_FILE_OFFSET_BITS=64  -Ae '
>        stdchar='unsigned char', d_stdstdio=define, usevfork=false
>        intsize=4, longsize=4, ptrsize=4, doublesize=8
>        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, usemymalloc=y, prototype=define
>      Linker and Libraries:
>        ld='ld', ldflags =' -L/usr/local/lib'
>        libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib
>        libs=-lnsl -lnm -lndbm -lgdbm -ldld -lm -lc -lndir -lcrypt -lsec -lcl
>    -lpthread
>        libc=/lib/libc.sl, so=sl, useshrplib=false, libperl=libperl.a
>      Dynamic Linking:
>        dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef, ccdlflags=' '
>        cccdlflags='+z', lddlflags=' -b +vnocompatwarnings -L/usr/local/lib'
> 
>    Characteristics of this binary (from libperl): 
>      Compile-time options: USE_LARGE_FILES
>      Built under hpux
>      Compiled at Dec 19 2000 19:17:00
>      @INC:
>        /opt/www/perl5/lib/5.6.0/PA-RISC2.0
>        /opt/www/perl5/lib/5.6.0
>        /opt/www/perl5/lib/site_perl/5.6.0/PA-RISC2.0
>        /opt/www/perl5/lib/site_perl/5.6.0
>        /opt/www/perl5/lib/site_perl
>        .
> 
> 
> Roger also provides a link to some threads containing some of his
> DBD-Oracle and HPUX11 trials... 
> L<http://www.geocrawler.com/search/?config=183&words=Roger+Foskett>
> 
> 
> =head1 Appendix B (Why Dynamic Linking)
> 
> Some one posted to the DBI email list the following question:
> 
>    What are the advantages of building a dynamically linked version?
>    Being able to use threads? Or something besides that?
> 
> The answer is there are too many to count, but here are several big
> ones:
> 
> =item 1 Much smaller executables 
> 
> Only the code referenced gets loaded... this
> means faster execution times, and less machine resources (VM) used)
> 
> =item 2 Modular addition and updating of modules. 
> 
> This is HUGE.  One does not relink B<EVERYTHING, EVERY time> one changes
> or updates  a module.
> 
> =item 3 It eliminates Dynaloader warning (multiply defined).
> 
> This occurs with the static build when perl is run with -w.  I fixed
> this by removing -w from my #! lines, converting the the pragam "use
> warnings;". However, it was annoying, since all my scripts had -w in the
> #! line.
> 
> =item 4 Its the default build
> 
> Since almost every OS now supports dynamic linking, I believe that 
> static linking is NOT getting the same level of vetting it maybe used
> to.  Dynamicly linking is what you get by default, so its way better
> tested.
> 
> =item 5 Its required for Apache and mod_perl.
> 
> 
> 


Reply via email to