packages with FORTRAN code

Paul Gilbert pgilbert@bank-banque-canada.ca
Wed, 09 Jun 1999 15:11:16 -0400


Kurt

It seems the old version of f77 that previously caused me problems is now gone,
so I removed my link making f77 use g77, but the problem was not fixed. Also,
changing grep to egrep on the lines:

f77_output=`${F77} -v 2>&1 | grep "GNU F77\|egcs\|g77"`

in configure and configure.in, as suggested by Peter,  does not seem to have
fixed it.

In re-configuring and re-making R I noticed that it is not just my package which
has this error. It also occurs while making R (bsplvd.f and elsewhere). Below is
my configure and make for R. Configure reports
  FORTRAN compiler:         g77 -O2
but that does not seem to be the way it always gets used.

(Also, configure reports
  C compiler:               gcc -g -O2
but some of the gcc calls add fPIC. That does not seem to generate error
messages.)

Paul
__________
[1] /home/res3/gilp : which egrep
/usr/bin/egrep
[2] /home/res3/gilp : cd R
[3] /home/res3/gilp/R : ls
aclocal.m4      config.status*  demos/          Makeconf.in     PROJECTS
afm/            configure*      doc/            Makefile        README
aux/            configure.in    etc/            Makefile.in     RESOURCES
bin/            configure.mac*  FAQ             Makefrag.etc    src/
BUGS            COPYING         include/        Makefrag.top    TASKS
config.cache    COPYRIGHTS      INSTALL         MIRROR-SITES    tests/
config.log      date-stamp      library/        NEWS            Y2K
config.site     debian/         Makeconf        PLATFORMS
[4] /home/res3/gilp/R : grep "f77_output" *
configure:    f77_output=`${F77} -v 2>&1 | grep "GNU F77\|egcs\|g77"`
configure:    if test -n "${f77_output}"; then
configure.in:    f77_output=`${F77} -v 2>&1 | grep "GNU F77\|egcs\|g77"`
configure.in:    if test -n "${f77_output}"; then
[5] /home/res3/gilp/R : cd ..
[6] /home/res3/gilp/R-versions : ls
R-0.63.1.tar        R-0.63.3.tar        R-0.64.1.f77tog77/  R-release.tar
R-0.63.2/           R-0.64.0/           R-0.64.1.tar
R-0.63.2.tar        R-0.64.0.tar        R-release/
R-0.63.3/           R-0.64.1/           R-release.old/
[7] /home/res3/gilp/R-versions : rm -rf R-0.64.1
[8] /home/res3/gilp/R-versions : tar -xf R-0.64.1.tar
[9] /home/res3/gilp/R-versions : cd ../R
[10] /home/res3/gilp/R : te configure &
[1] 1354
[11] /home/res3/gilp/R : te configure.in &
[2] 1355
[1]    Done                 textedit configure
[12] /home/res3/gilp/R :
[2]    Done                 textedit configure.in
[12] /home/res3/gilp/R :
[12] /home/res3/gilp/R :
[12] /home/res3/gilp/R : ./configure
creating cache ./config.cache
checking for a BSD compatible install... aux/install-sh -c
checking whether ln -s works... yes
checking for ranlib... ranlib
checking for bison... no
checking for byacc... no
checking for ar... ar
checking for latex... /apps/res/bin/latex
checking for dvips... /apps/res/bin/dvips
checking for makeindex... false
checking for unzip... /apps/res/bin/unzip
checking for zip... no
checking for perl... /usr/bin/perl
checking whether perl is perl 5... yes
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for g77... /home/res/public/gnu/sun5.6/bin/g77
checking for underscore after Fortran symbols... yes
checking for sin in -lm... yes
checking for sin in -lmoto... no
checking for main in -lncurses... no
checking for main in -ltermcap... yes
checking for dlopen in -ldl... yes
checking for main in -lz... no
checking for main in -lhdf5... no
checking for main in -ldxml... no
checking for main in -lblas... no
checking for rl_callback_read_char in -lreadline... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for pid_t... yes
checking for vfork.h... no
checking for working vfork... yes
checking for vprintf... yes
checking for acosh... yes
checking for asinh... yes
checking for atanh... yes
checking for bcopy... yes
checking for finite... yes
checking for isfinite... no
checking for isnan... yes
checking for matherr... yes
checking for memcpy... yes
checking for memmove... yes
checking for regcomp... yes
checking for rint... yes
checking for strcoll... yes
checking for strtod... yes
checking for strtol... yes
checking for system... yes
checking for times... yes
checking for sigsetjmp... yes
checking for siglongjmp... yes
checking for __setfpucw... no
checking for ANSI C header files... (cached) yes
checking for dl.h... no
checking for dlfcn.h... yes
checking for elf.h... yes
checking for locale.h... yes
checking for readline/history.h... no
checking for rpc/xdr.h... yes
checking for sys/times.h... yes
checking for time.h... yes
checking for ieeefp.h... yes
checking for ieee754.h... no
checking for unistd.h... yes
checking for hdf5.h... no
checking return type of signal handlers... void
checking for working const... yes
checking size of long... 4
checking for xmkmf... /usr/openwin/bin/xmkmf
checking how to make shared libraries... done
checking for X... libraries /usr/openwin/lib, headers /usr/openwin/include
checking whether -R must be followed by a space... no
checking for dnet_ntoa in -ldnet... no
checking for dnet_ntoa in -ldnet_stub... no
checking for gethostbyname... no
checking for gethostbyname in -lnsl... yes
checking for connect... no
checking for connect in -lsocket... yes
checking for remove... yes
checking for shmat... yes
checking for IceConnectionNumber in -lICE... yes
checking for lpr... lpr
updating cache ./config.cache
creating ./config.status
creating Makeconf
creating Makefile
creating afm/Makefile
creating demos/Makefile
creating doc/Makefile
creating doc/keyword-test
creating doc/manual/Makefile
creating doc/manual/lib2tex
creating doc/manual/Reference.tex
creating doc/manual/Manual.tex
creating etc/Makefile
creating etc/Makeconf
creating src/Makefile
creating src/appl/Makefile
creating src/include/Makefile
creating src/library/Makefile
creating src/main/Makefile
creating src/nmath/Makefile
creating src/scripts/Makefile
creating src/unix/Makefile
creating src/gnome/Makefile
creating src/library/base/Makefile
creating src/library/profile/Makefile
creating src/library/eda/Makefile
creating src/library/eda/src/Makefile
creating src/library/lqs/Makefile
creating src/library/lqs/src/Makefile
creating src/library/modreg/Makefile
creating src/library/modreg/src/Makefile
creating src/library/mva/Makefile
creating src/library/mva/src/Makefile
creating src/library/stepfun/Makefile
creating src/scripts/COMPILE
creating src/scripts/INSTALL
creating src/scripts/REMOVE
creating src/scripts/R.sh
creating src/scripts/Rdconv
creating src/scripts/Rdindex
creating src/scripts/Rman2Rd
creating src/scripts/SHLIB
creating src/scripts/Sd2Rd
creating src/scripts/build-help
creating src/scripts/fwf2table
creating src/scripts/help.pretty
creating src/scripts/html2dos
creating src/scripts/Rd2contents
creating tests/Makefile
creating tests/Examples/Makefile
creating src/include/Platform.h


R is now configured for sparc-sun-solaris2.6

  Source directory:         .
  Installation directory:   /usr/local
  C compiler:               gcc -g -O2
  FORTRAN compiler:         g77 -O2
  Gnome support:            no

[13] /home/res3/gilp/R : make
make[1]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/afm'
make[1]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/afm'
make[1]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/demos'
make[1]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/demos'
make[1]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/doc'
make[1]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/doc'
make[1]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/etc'
make[1]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/etc'
make[1]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/include'
../../aux/GETSYMBOLS
mkdir ../../include
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/include'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/appl'
gcc -g -O2 -I../include -I../../src/include  -c S_compat.c -o S_compat.o
gcc -g -O2 -I../include -I../../src/include  -c approx.c -o approx.o
gcc -g -O2 -I../include -I../../src/include  -c bakslv.c -o bakslv.o
gcc -g -O2 -I../include -I../../src/include  -c binning.c -o binning.o
g77 -O2 -c blas.f -o blas.o
g77 -O2 -c ch2inv.f -o ch2inv.o
g77 -O2 -c chol.f -o chol.o
gcc -g -O2 -I../include -I../../src/include  -c chull.c -o chull.o
gcc -g -O2 -I../include -I../../src/include  -c cpoly.c -o cpoly.o
gcc -g -O2 -I../include -I../../src/include  -c cumsum.c -o cumsum.o
gcc -g -O2 -I../include -I../../src/include  -c distance.c -o distance.o
g77 -O2 -c dpbfa.f -o dpbfa.o
g77 -O2 -c dpbsl.f -o dpbsl.o
g77 -O2 -c dpoco.f -o dpoco.o
g77 -O2 -c dpodi.f -o dpodi.o
g77 -O2 -c dpofa.f -o dpofa.o
g77 -O2 -c dposl.f -o dposl.o
g77 -O2 -c dqrdc.f -o dqrdc.o
g77 -O2 -c dqrdc2.f -o dqrdc2.o
g77 -O2 -c dqrls.f -o dqrls.o
g77 -O2 -c dqrsl.f -o dqrsl.o
g77 -O2 -c dqrutl.f -o dqrutl.o
g77 -O2 -c dsvdc.f -o dsvdc.o
g77 -O2 -c dtrco.f -o dtrco.o
g77 -O2 -c dtrsl.f -o dtrsl.o
g77 -O2 -c eigen.f -o eigen.o
gcc -g -O2 -I../include -I../../src/include  -c fortran.c -o fortran.o
gcc -g -O2 -I../include -I../../src/include  -c fft.c -o fft.o
g77 -O2 -c fmin.f -o fmin.o
g77 -O2 -c lminfl.f -o lminfl.o
gcc -g -O2 -I../include -I../../src/include  -c loglin.c -o loglin.o
gcc -g -O2 -I../include -I../../src/include  -c lowess.c -o lowess.o
gcc -g -O2 -I../include -I../../src/include  -c machar.c -o machar.o
gcc -g -O2 -I../include -I../../src/include  -c massdist.c -o massdist.o
gcc -g -O2 -I../include -I../../src/include  -c pretty.c -o pretty.o
gcc -g -O2 -I../include -I../../src/include  -c pythag.c -o pythag.o
gcc -g -O2 -I../include -I../../src/include  -c rowsum.c -o rowsum.o
gcc -g -O2 -I../include -I../../src/include  -c splines.c -o splines.o
gcc -g -O2 -I../include -I../../src/include  -c stem.c -o stem.o
gcc -g -O2 -I../include -I../../src/include  -c strsignif.c -o strsignif.o
gcc -g -O2 -I../include -I../../src/include  -c tabulate.c -o tabulate.o
g77 -O2 -c uncmin.f -o uncmin.o
g77 -O2 -c zeroin.f -o zeroin.o
ar cr libappl.a S_compat.o approx.o bakslv.o binning.o blas.o ch2inv.o chol.o
chull.o cpoly.o cumsum.o distance.o dpbfa.o dpbsl.o dpoco.o dpodi.o dpofa.o
dposl.o dqrdc.o dqrdc2.o dqrls.o dqrsl.o dqrutl.o dsvdc.o dtrco.o dtrsl.o
eigen.o fortran.o fft.o fmin.o lminfl.o loglin.o lowess.o machar.o massdist.o
pretty.o pythag.o rowsum.o splines.o stem.o strsignif.o tabulate.o uncmin.o
zeroin.o
ranlib libappl.a
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/appl'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/nmath'
gcc -g -O2 -I../include -I../../src/include  -c mlutils.c -o mlutils.o
...
gcc -g -O2 -I../include -I../../src/include  -c signrank.c -o signrank.o
ar cr libmath.a mlutils.o d1mach.o i1mach.o fmax2.o fmin2.o fmod.o fprec.o
fround.o ftrunc.o sign.o fsign.o fsquare.o fcube.o imax2.o imin2.o chebyshev.o
logrelerr.o lgammacor.o gammalims.o gamma.o lgamma.o gamma_cody.o beta.o lbeta.o
polygamma.o bessel_i.o bessel_j.o bessel_k.o bessel_y.o choose.o snorm.o sunif.o
sexp.o dgamma.o pgamma.o qgamma.o rgamma.o dbeta.o pbeta.o qbeta.o rbeta.o
dunif.o punif.o qunif.o runif.o dnorm.o pnorm.o qnorm.o rnorm.o dlnorm.o
plnorm.o qlnorm.o rlnorm.o df.o pf.o qf.o rf.o dt.o pt.o qt.o rt.o dchisq.o
pchisq.o qchisq.o rchisq.o dbinom.o pbinom.o qbinom.o rbinom.o dcauchy.o
pcauchy.o qcauchy.o rcauchy.o dexp.o pexp.o qexp.o rexp.o dgeom.o pgeom.o
qgeom.o rgeom.o dhyper.o phyper.o qhyper.o rhyper.o dnbinom.o pnbinom.o
qnbinom.o rnbinom.o dpois.o ppois.o qpois.o rpois.o dweibull.o pweibull.o
qweibull.o rweibull.o dlogis.o plogis.o qlogis.o rlogis.o dnchisq.o pnchisq.o
qnchisq.o dnbeta.o pnbeta.o pnf.o pnt.o ptukey.o qtukey.o wilcox.o signrank.o
ranlib libmath.a
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/nmath'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/unix'
gcc -g -O2 -I/usr/openwin/include -I../include -I../../src/include  -c
dataentry.c
gcc -g -O2 -I../include -I../../src/include  -c devPS.c -o devPS.o
gcc -g -O2 -I../include -I../../src/include  -c devPicTeX.c -o devPicTeX.o
gcc -g -O2 -I/usr/openwin/include -I../include -I../../src/include  -c devX11.c
gcc -g -O2 -I../include -I../../src/include  -c dynload.c -o dynload.o
gcc -g -O2 -I../include -I../../src/include  -c edit.c -o edit.o
gcc -g -O2 -I/usr/openwin/include -I../include -I../../src/include  -c rotated.c

gcc -g -O2 -I../include -I../../src/include  -c system.c -o system.o
gcc -g -O2 -I../include -I../../src/include  -c Rsock.c -o Rsock.o
gcc -g -O2 -I../include -I../../src/include  -c sock.c -o sock.o
ar cr libunix.a dataentry.o devPS.o devPicTeX.o devX11.o dynload.o edit.o
rotated.o system.o Rsock.o sock.o
ranlib libunix.a
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/unix'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/main'
gcc -g -O2 -I../include -I../../src/include  -c arithmetic.c -o arithmetic.o
...
gcc -g -O2 -I../include -I../../src/include  -c version.c -o version.o
mkdir ../../bin
g77  -o ../../bin/R.binary arithmetic.o array.o attrib.o bind.o builtin.o
character.o coerce.o colors.o complex.o context.o cov.o cum.o debug.o deparse.o
deriv.o devices.o dotcode.o dstruct.o duplicate.o envir.o errors.o eval.o
format.o fourier.o gram.o gram-ex.o graphics.o iosupport.o list.o logic.o main.o
match.o memory.o model.o names.o objects.o optimize.o options.o par.o paste.o
platform.o plot.o plot3d.o plotmath.o print.o printarray.o printvector.o
printutils.o random.o relop.o saveload.o scan.o seq.o sort.o source.o split.o
subassign.o subscript.o subset.o summary.o unique.o util.o version.o
../unix/libunix.a ../appl/libappl.a ../nmath/libmath.a -lSM -lICE
-L/usr/openwin/lib -R/usr/openwin/lib -lX11 -lsocket  -lnsl -ldl -ltermcap -lm
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/main'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/scripts'
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/scripts'
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/library'
mkdir ../../library
make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/base'
Building R base package
mkdir ../../../library/base
mkdir ../../../library/base/R
mkdir ../../../library/base/data
make[3]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/base'
make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/eda'
mkdir ../../../library/eda
mkdir ../../../library/eda/R
make[4]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/eda/src'
gcc -g -O2 -fPIC -I../../../../include -c line.c -o line.o
gcc -g -O2 -fPIC -I../../../../include -c smooth.c -o smooth.o
ld -G -o eda.so line.o smooth.o
mkdir ../../../../library/eda/libs
make[4]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/eda/src'
make[3]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/library/eda'

make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/lqs'
mkdir ../../../library/lqs
mkdir ../../../library/lqs/R
make[4]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/lqs/src'
gcc -g -O2 -fPIC -I../../../../include -c lqs.c -o lqs.o
ld -G -o lqs.so lqs.o
mkdir ../../../../library/lqs/libs
make[4]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/lqs/src'
make[3]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/library/lqs'

make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/modreg'
mkdir ../../../library/modreg
mkdir ../../../library/modreg/R
mkdir ../../../library/modreg/data
make[4]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/modreg/src'
g77 -O2 -PIC -c bsplvd.f -o bsplvd.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c bvalue.f -o bvalue.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c bvalus.f -o bvalus.o
g77: unrecognized option `-PIC'
gcc -g -O2 -fPIC -I../../../../include -c ksmooth.c -o ksmooth.o
gcc -g -O2 -fPIC -I../../../../include -c loessc.c -o loessc.o
g77 -O2 -PIC -c loessf.f -o loessf.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c ppr.f -o ppr.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c qsbart.f -o qsbart.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c sbart.f -o sbart.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c sgram.f -o sgram.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c sinerp.f -o sinerp.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c sslvrg.f -o sslvrg.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c stxwx.f -o stxwx.o
g77: unrecognized option `-PIC'
../../../../bin/R SHLIB -o modreg.so bsplvd.o bvalue.o bvalus.o ksmooth.o
loessc.o loessf.o ppr.o qsbart.o sbart.o sgram.o sinerp.o sslvrg.o stxwx.o
make[5]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/modreg/src'
ld -G -o modreg.so bsplvd.o bvalue.o bvalus.o ksmooth.o loessc.o loessf.o ppr.o
qsbart.o sbart.o sgram.o sinerp.o sslvrg.o stxwx.o
make[5]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/modreg/src'
mkdir ../../../../library/modreg/libs
make[4]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/modreg/src'
make[3]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/modreg'
make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/mva'
mkdir ../../../library/mva
mkdir ../../../library/mva/R
make[4]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/mva/src'
gcc -g -O2 -fPIC -I../../../../include -c dblcen.c -o dblcen.o
g77 -O2 -PIC -c hclust.f -o hclust.o
g77: unrecognized option `-PIC'
g77 -O2 -PIC -c kmns.f -o kmns.o
g77: unrecognized option `-PIC'
ld -G -o mva.so dblcen.o hclust.o kmns.o
mkdir ../../../../library/mva/libs
make[4]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/mva/src'
make[3]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/library/mva'

make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/stepfun'
mkdir ../../../library/stepfun
mkdir ../../../library/stepfun/R
make[3]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/stepfun'
make[3]: Entering directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/profile'
Building system startup profile
make[3]: Leaving directory
`/home/res3/gilp/R-versions/R-0.64.1/src/library/profile'
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/library'
make[1]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src'
You should `make docs' now ...
make[1]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/library'
Building ALL documentation (help, HTML, LaTeX, examples)
make[2]: Entering directory `/home/res3/gilp/R-versions/R-0.64.1/src/library'
 >>> Building/Updating help pages for package `base'
     Formats: text html latex example
  Arithmetic                        text    html    latex   example
  BATCH                             text    html    latex
...
  stepfun                           text    html    latex   example
make[2]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/library'
make[1]: Leaving directory `/home/res3/gilp/R-versions/R-0.64.1/src/library'
[14] /home/res3/gilp/R :

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._