From 1002d815e376e69458bf605611aba0678e611fa3 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 17 Feb 2017 10:09:30 +0000 Subject: [PATCH 01/27] psblas3-mcbind Make.inc.in Makefile cbind cbind/Makefile cbind/base cbind/base/Makefile cbind/base/psb_base_cbind.h cbind/base/psb_base_cbind_mod.f90 cbind/base/psb_base_psblas_cbind_mod.f90 cbind/base/psb_base_string_cbind_mod.f90 cbind/base/psb_base_tools_cbind_mod.F90 cbind/base/psb_c_base.c cbind/base/psb_c_base.h cbind/base/psb_c_dbase.c cbind/base/psb_c_dbase.h cbind/base/psb_cpenv_mod.f90 cbind/base/psb_d_psblas_cbind_mod.f90 cbind/base/psb_d_serial_cbind_mod.F90 cbind/base/psb_d_tools_cbind_mod.F90 cbind/base/psb_objhandle_mod.f90 Branch for C bindings. --- Make.inc.in | 2 + Makefile | 8 +- cbind/Makefile | 23 ++ cbind/base/Makefile | 44 +++ cbind/base/psb_base_cbind.h | 7 + cbind/base/psb_base_cbind_mod.f90 | 6 + cbind/base/psb_base_psblas_cbind_mod.f90 | 6 + cbind/base/psb_base_string_cbind_mod.f90 | 38 +++ cbind/base/psb_base_tools_cbind_mod.F90 | 295 +++++++++++++++++ cbind/base/psb_c_base.c | 39 +++ cbind/base/psb_c_base.h | 80 +++++ cbind/base/psb_c_dbase.c | 39 +++ cbind/base/psb_c_dbase.h | 64 ++++ cbind/base/psb_cpenv_mod.f90 | 170 ++++++++++ cbind/base/psb_d_psblas_cbind_mod.f90 | 279 ++++++++++++++++ cbind/base/psb_d_serial_cbind_mod.F90 | 119 +++++++ cbind/base/psb_d_tools_cbind_mod.F90 | 385 +++++++++++++++++++++++ cbind/base/psb_objhandle_mod.f90 | 20 ++ 18 files changed, 1623 insertions(+), 1 deletion(-) create mode 100644 cbind/Makefile create mode 100644 cbind/base/Makefile create mode 100644 cbind/base/psb_base_cbind.h create mode 100644 cbind/base/psb_base_cbind_mod.f90 create mode 100644 cbind/base/psb_base_psblas_cbind_mod.f90 create mode 100644 cbind/base/psb_base_string_cbind_mod.f90 create mode 100644 cbind/base/psb_base_tools_cbind_mod.F90 create mode 100644 cbind/base/psb_c_base.c create mode 100644 cbind/base/psb_c_base.h create mode 100644 cbind/base/psb_c_dbase.c create mode 100644 cbind/base/psb_c_dbase.h create mode 100644 cbind/base/psb_cpenv_mod.f90 create mode 100644 cbind/base/psb_d_psblas_cbind_mod.f90 create mode 100644 cbind/base/psb_d_serial_cbind_mod.F90 create mode 100644 cbind/base/psb_d_tools_cbind_mod.F90 create mode 100644 cbind/base/psb_objhandle_mod.f90 diff --git a/Make.inc.in b/Make.inc.in index 5ff454bf..4266526f 100755 --- a/Make.inc.in +++ b/Make.inc.in @@ -65,6 +65,8 @@ PRECMODNAME=@PRECMODNAME@ METHDMODNAME=@METHDMODNAME@ UTILMODNAME=@UTILMODNAME@ +CBINDLIBNAME=libpsb_cbind.a + @PSBLASRULES@ diff --git a/Makefile b/Makefile index 50981dd0..389360ca 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include Make.inc -all: libd based precd kryld utild +all: libd based precd kryld utild cbindd @echo "=====================================" @echo "PSBLAS libraries Compilation Successful." @@ -8,6 +8,8 @@ based: libd precd utild: based kryld: precd based +cbindd: precd kryld utild + libd: (if test ! -d lib ; then mkdir lib; fi) (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) @@ -19,6 +21,8 @@ kryld: cd krylov && $(MAKE) lib utild: cd util&& $(MAKE) lib +cbindd: + cd cbind&& $(MAKE) lib install: all (./mkdir.sh $(INSTALL_INCLUDEDIR) &&\ @@ -38,6 +42,7 @@ clean: cd prec && $(MAKE) clean cd krylov && $(MAKE) clean cd util && $(MAKE) clean + cd cbind && $(MAKE) clean check: all make check -C test/serial @@ -51,6 +56,7 @@ veryclean: cleanlib cd prec && $(MAKE) veryclean cd krylov && $(MAKE) veryclean cd util && $(MAKE) veryclean + cd cbind && $(MAKE) clean cd test/fileread && $(MAKE) clean cd test/pargen && $(MAKE) clean cd test/util && $(MAKE) clean diff --git a/cbind/Makefile b/cbind/Makefile new file mode 100644 index 00000000..88d0120d --- /dev/null +++ b/cbind/Makefile @@ -0,0 +1,23 @@ +include ../Make.inc + +HERE=. +LIBDIR=../lib +INCDIR=../include +LIBNAME=$(CBINDLIBNAME) + +lib: based + /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) + /bin/cp -p $(CPUPDFLAG) *$(.mod) *.h $(INCDIR) + + + +based: + cd base && $(MAKE) lib LIBNAME=$(LIBNAME) + + +clean: + cd base && $(MAKE) clean + + +veryclean: clean + /bin/rm -f $(HERE)/$(LIBNAME) $(LIBMOD) *$(.mod) *.h diff --git a/cbind/base/Makefile b/cbind/base/Makefile new file mode 100644 index 00000000..fb342ac1 --- /dev/null +++ b/cbind/base/Makefile @@ -0,0 +1,44 @@ +TOP=../.. +include $(TOP)/Make.inc +LIBDIR=$(TOP)lib +INCLUDEDIR=$(TOP)/include +HERE=.. + +FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCLUDEDIR) +CINCLUDES=-I$(INCLUDEDIR) + +OBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o\ + psb_base_tools_cbind_mod.o psb_base_string_cbind_mod.o\ + psb_base_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_c_base.o \ + psb_d_serial_cbind_mod.o psb_c_dbase.o psb_d_psblas_cbind_mod.o +CMOD=psb_base_cbind.h psb_c_base.h psb_c_dbase.h + +LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ + psb_base_tools_cbind_mod$(.mod) psb_base_string_cbind_mod$(.mod) psb_base_psblas_cbind_mod$(.mod)\ + psb_d_tools_cbind_mod$(.mod) psb_d_serial_cbind_mod$(.mod) psb_d_psblas_cbind_mod$(.mod) +LOCAL_MODS=$(LIBMOD) +LIBNAME=$(CBINDLIBNAME) + + +lib: $(OBJS) $(CMOD) + $(AR) $(HERE)/$(LIBNAME) $(OBJS) + $(RANLIB) $(HERE)/$(LIBNAME) + /bin/cp -p $(LIBMOD) $(CMOD) $(HERE) + + +psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_mod.o \ + psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o +psb_base_tools_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o: psb_base_tools_cbind_mod.o + +psb_base_psblas_cbind_mod.o: psb_d_psblas_cbind_mod.o +psb_d_psblas_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_cpenv_mod.o: psb_base_string_cbind_mod.o + +veryclean: clean + /bin/rm -f $(HERE)/$(LIBNAME) + +clean: + /bin/rm -f $(OBJS) $(LOCAL_MODS) + +veryclean: clean diff --git a/cbind/base/psb_base_cbind.h b/cbind/base/psb_base_cbind.h new file mode 100644 index 00000000..6e07e499 --- /dev/null +++ b/cbind/base/psb_base_cbind.h @@ -0,0 +1,7 @@ +#ifndef PSB_BASE_CBIND_ +#define PSB_BASE_CBIND_ + +#include "psb_c_base.h" +#include "psb_c_dbase.h" + +#endif diff --git a/cbind/base/psb_base_cbind_mod.f90 b/cbind/base/psb_base_cbind_mod.f90 new file mode 100644 index 00000000..a943e57e --- /dev/null +++ b/cbind/base/psb_base_cbind_mod.f90 @@ -0,0 +1,6 @@ +module psb_base_cbind_mod + use psb_objhandle_mod + use psb_cpenv_mod + use psb_base_tools_cbind_mod + use psb_base_psblas_cbind_mod +end module psb_base_cbind_mod diff --git a/cbind/base/psb_base_psblas_cbind_mod.f90 b/cbind/base/psb_base_psblas_cbind_mod.f90 new file mode 100644 index 00000000..8a53ea2f --- /dev/null +++ b/cbind/base/psb_base_psblas_cbind_mod.f90 @@ -0,0 +1,6 @@ +module psb_base_psblas_cbind_mod + + use iso_c_binding + use psb_d_psblas_cbind_mod + +end module psb_base_psblas_cbind_mod diff --git a/cbind/base/psb_base_string_cbind_mod.f90 b/cbind/base/psb_base_string_cbind_mod.f90 new file mode 100644 index 00000000..05cd9d7d --- /dev/null +++ b/cbind/base/psb_base_string_cbind_mod.f90 @@ -0,0 +1,38 @@ +module psb_base_string_cbind_mod + use iso_c_binding + +contains + + subroutine stringc2f(cstring,fstring) + character(c_char) :: cstring(*) + character(len=*) :: fstring + integer :: i + + i = 1 + do + if (cstring(i) == c_null_char) exit + if (i > len(fstring)) exit + fstring(i:i) = cstring(i) + i = i + 1 + end do + do + if (i > len(fstring)) exit + fstring(i:i) = " " + i = i + 1 + end do + return + end subroutine stringc2f + + subroutine stringf2c(fstring,cstring) + character(c_char) :: cstring(*) + character(len=*) :: fstring + integer :: i + + do i=1, len(fstring) + cstring(i) = fstring(i:i) + end do + cstring(len(fstring)+1) = c_null_char + return + end subroutine stringf2c + +end module psb_base_string_cbind_mod diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 new file mode 100644 index 00000000..1ea32827 --- /dev/null +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -0,0 +1,295 @@ +module psb_base_tools_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + +contains + + function psb_c_error() bind(c) result(res) + implicit none + integer(c_int) :: res + res = 0 + call psb_error() + end function psb_c_error + + function psb_c_clean_errstack() bind(c) result(res) + implicit none + integer(c_int) :: res + res = 0 + call psb_clean_errstack() + end function psb_c_clean_errstack + + function psb_c_cdall_vg(ng,vg,ictxt,cdh) bind(c,name='psb_c_cdall_vg') result(res) + implicit none + + integer(c_int) :: res + integer(c_int), value :: ng, ictxt + integer(c_int) :: vg(*) + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + if (ng <=0) then + write(0,*) 'Invalid size' + return + end if + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%free(info) + if (info == 0) deallocate(descp,stat=info) + if (info /= 0) return + end if + + allocate(descp,stat=info) + if (info < 0) return + + call psb_cdall(ictxt,descp,info,vg=vg(1:ng)) + cdh%item = c_loc(descp) + res = info + + end function psb_c_cdall_vg + + + function psb_c_cdall_vl(nl,vl,ictxt,cdh) bind(c,name='psb_c_cdall_vl') result(res) + implicit none + + integer(c_int) :: res + integer(c_int), value :: nl, ictxt + integer(c_int) :: vl(*) + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + if (nl <=0) then + write(0,*) 'Invalid size' + return + end if + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%free(info) + if (info == 0) deallocate(descp,stat=info) + if (info /= 0) return + end if + + allocate(descp,stat=info) + if (info < 0) return + + call psb_cdall(ictxt,descp,info,vl=vl(1:nl)) + cdh%item = c_loc(descp) + res = info + + end function psb_c_cdall_vl + + function psb_c_cdall_nl(nl,ictxt,cdh) bind(c,name='psb_c_cdall_nl') result(res) + implicit none + + integer(c_int) :: res + integer(c_int), value :: nl, ictxt + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + if (nl <=0) then + write(0,*) 'Invalid size' + return + end if + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%free(info) + if (info == 0) deallocate(descp,stat=info) + if (info /= 0) return + end if + + allocate(descp,stat=info) + if (info < 0) return + + call psb_cdall(ictxt,descp,info,nl=nl) + cdh%item = c_loc(descp) + res = info + + end function psb_c_cdall_nl + + function psb_c_cdall_repl(n,ictxt,cdh) bind(c,name='psb_c_cdall_repl') result(res) + implicit none + + integer(c_int) :: res + integer(c_int), value :: n, ictxt + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + if (n <=0) then + write(0,*) 'Invalid size' + return + end if + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%free(info) + if (info == 0) deallocate(descp,stat=info) + if (info /= 0) return + end if + + allocate(descp,stat=info) + if (info < 0) return + + call psb_cdall(ictxt,descp,info,mg=n,repl=.true.) + cdh%item = c_loc(descp) + res = info + + end function psb_c_cdall_repl + + function psb_c_cdasb(cdh) bind(c,name='psb_c_cdasb') result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call psb_cdasb(descp,info) + res = info + end if + + end function psb_c_cdasb + + + function psb_c_cdfree(cdh) bind(c,name='psb_c_cdfree') result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: cdh + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call descp%free(info) + if (info == 0) deallocate(descp,stat=info) + if (info /= 0) return + cdh%item = c_null_ptr + end if + + res = info + return + end function psb_c_cdfree + + function psb_c_cdins(nz,ia,ja,cdh) bind(c,name='psb_c_cdins') result(res) + + implicit none + integer(c_int) :: res + integer(c_int), value :: nz + type(psb_c_object_type) :: cdh + integer(c_int) :: ia(*),ja(*) + + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + call psb_cdins(nz,ia(1:nz),ja(1:nz),descp,info) + res = info + end if + return + end function psb_c_cdins + + + + function psb_c_cd_get_local_rows(cdh) bind(c,name='psb_c_cd_get_local_rows') result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + res = descp%get_local_rows() + + end if + + end function psb_c_cd_get_local_rows + + + + function psb_c_cd_get_local_cols(cdh) bind(c,name='psb_c_cd_get_local_cols') result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + res = descp%get_local_cols() + + end if + + end function psb_c_cd_get_local_cols + + function psb_c_cd_get_global_rows(cdh) bind(c,name='psb_c_cd_get_global_rows') result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + res = descp%get_global_rows() + + end if + + end function psb_c_cd_get_global_rows + + + + function psb_c_cd_get_global_cols(cdh) bind(c,name='psb_c_cd_get_global_cols') result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + res = descp%get_global_cols() + + end if + + end function psb_c_cd_get_global_cols + + +end module psb_base_tools_cbind_mod + diff --git a/cbind/base/psb_c_base.c b/cbind/base/psb_c_base.c new file mode 100644 index 00000000..96a6df34 --- /dev/null +++ b/cbind/base/psb_c_base.c @@ -0,0 +1,39 @@ +#include +#include +#include "psb_c_base.h" + +psb_c_descriptor* psb_c_new_descriptor() +{ + psb_c_descriptor* temp; + + temp=(psb_c_descriptor *) malloc(sizeof(psb_c_descriptor)); + temp->descriptor=NULL; + return(temp); +} + + +void psb_c_print_errmsg() +{ + char *mesg; + + for (mesg = psb_c_pop_errmsg(); mesg != NULL; mesg = psb_c_pop_errmsg()) { + fprintf(stderr,"%s\n",mesg); + free(mesg); + } + +} + + +#define PSB_MAX_ERRLINE_LEN 132 +#define PSB_MAX_ERR_LINES 4 +static int maxlen=PSB_MAX_ERR_LINES*(PSB_MAX_ERRLINE_LEN+2); +char *psb_c_pop_errmsg() +{ + char *tmp; + tmp = (char*) malloc(maxlen*sizeof(char)); + if (psb_c_f2c_errmsg(tmp,maxlen)<=0) { + free(tmp); tmp = NULL; + } + return(tmp); +} + diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h new file mode 100644 index 00000000..6738a249 --- /dev/null +++ b/cbind/base/psb_c_base.h @@ -0,0 +1,80 @@ +#ifndef PSB_C_BASE__ +#define PSB_C_BASE__ +#ifdef __cplusplus +extern "C" { + typedef char _Bool; +#endif + + typedef int psb_err_t; + typedef int psb_ctx_t; +#define PSB_ERR_ERROR -1 +#define PSB_ERR_SUCCESS 0 + + + typedef struct PSB_C_DESCRIPTOR { + void *descriptor; + } psb_c_descriptor; + + + + int psb_c_error(); + int psb_c_clean_errstack(); + void psb_c_print_errmsg(); + char *psb_c_pop_errmsg(); + int psb_c_f2c_errmsg(char *, int); + void psb_c_seterraction_ret(); + void psb_c_seterraction_print(); + void psb_c_seterraction_abort(); + + /* Environment routines */ + int psb_c_init(); + void psb_c_exit_ctxt(int ictxt); + void psb_c_exit(int ictxt); + void psb_c_abort(int ictxt); + void psb_c_barrier(int ictxt); + void psb_c_info(int ictxt, int *iam, int *np); + double psb_c_wtime(); + int psb_c_get_errstatus(); + + void psb_c_ibcast(int ictxt, int n, int *v, int root); + void psb_c_dbcast(int ictxt, int n, double *v, int root); + void psb_c_hbcast(int ictxt, const char *v, int root); + + /* Descriptor/integer routines */ + psb_c_descriptor* psb_c_new_descriptor(); + int psb_c_cdall_vg(int ng, int *vg, int ictxt, psb_c_descriptor *cd); + int psb_c_cdall_vl(int nl, int *vl, int ictxt, psb_c_descriptor *cd); + int psb_c_cdall_nl(int nl, int ictxt, psb_c_descriptor *cd); + int psb_c_cdall_repl(int n, int ictxt, psb_c_descriptor *cd); + int psb_c_cdasb(psb_c_descriptor *cd); + int psb_c_cdfree(psb_c_descriptor *cd); + int psb_c_cdins(int nz, const int *ia, const int *ja, psb_c_descriptor *cd); + + + int psb_c_cd_get_local_rows(psb_c_descriptor *cd); + int psb_c_cd_get_local_cols(psb_c_descriptor *cd); + int psb_c_cd_get_global_rows(psb_c_descriptor *cd); + int psb_c_cd_get_global_rows(psb_c_descriptor *cd); + + + /* legal values for upd argument */ +#define psb_upd_srch_ 98764 +#define psb_upd_perm_ 98765 +#define psb_upd_def_ psb_upd_srch_ + /* legal values for dupl argument */ +#define psb_dupl_ovwrt_ 0 +#define psb_dupl_add_ 1 +#define psb_dupl_err_ 2 +#define psb_dupl_def_ psb_dupl_ovwrt_ + + /* legal values for afmt */ +#define PSB_AFMT_CSR "CSR" +#define PSB_AFMT_CSC "CSC" +#define PSB_AFMT_COO "COO" +#define PSB_AFMT_RSB "RSB" + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_c_dbase.c b/cbind/base/psb_c_dbase.c new file mode 100644 index 00000000..6cc4d8dc --- /dev/null +++ b/cbind/base/psb_c_dbase.c @@ -0,0 +1,39 @@ +#include +#include "psb_c_dbase.h" + +psb_c_dvector* psb_c_new_dvector() +{ + psb_c_dvector* temp; + + temp=(psb_c_dvector *) malloc(sizeof(psb_c_dvector)); + temp->dvector=NULL; + return(temp); +} + +double* psb_c_dvect_get_cpy(psb_c_dvector *xh) +{ + double *temp=NULL; + int vsize=0; + + if ((vsize=psb_c_dvect_get_nrows(xh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(double *)malloc(vsize*sizeof(double)))!=NULL) + psb_c_dvect_f_get_cpy(temp,xh); + + return(temp); + +} + + +psb_c_dspmat* psb_c_new_dspmat() +{ + psb_c_dspmat* temp; + + temp=(psb_c_dspmat *) malloc(sizeof(psb_c_dspmat)); + temp->dspmat=NULL; + return(temp); +} diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h new file mode 100644 index 00000000..42125e5a --- /dev/null +++ b/cbind/base/psb_c_dbase.h @@ -0,0 +1,64 @@ +#ifndef PSB_C_DBASE_ +#define PSB_C_DBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_DVECTOR { + void *dvector; +} psb_c_dvector; + +typedef struct PSB_C_DSPMAT { + void *dspmat; +} psb_c_dspmat; + + +/* dense vectors */ +psb_c_dvector* psb_c_new_dvector(); +int psb_c_dvect_get_nrows(psb_c_dvector *xh); +double *psb_c_dvect_get_cpy( psb_c_dvector *xh); +int psb_c_dvect_f_get_cpy(double *v, psb_c_dvector *xh); +int psb_c_dvect_zero(psb_c_dvector *xh); + +int psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); +int psb_c_dgeins(int nz, const int *irw, const double *val, + psb_c_dvector *xh, psb_c_descriptor *cdh); +int psb_c_dgeins_add(int nz, const int *irw, const double *val, + psb_c_dvector *xh, psb_c_descriptor *cdh); +int psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); +int psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); + +/* sparse matrices*/ +psb_c_dspmat* psb_c_new_dspmat(); +int psb_c_dspall(psb_c_dspmat *mh, psb_c_descriptor *cdh); +int psb_c_dspasb(psb_c_dspmat *mh, psb_c_descriptor *cdh); +int psb_c_dspfree(psb_c_dspmat *mh, psb_c_descriptor *cdh); +int psb_c_dspins(int nz, const int *irw, const int *icl, const double *val, + psb_c_dspmat *mh, psb_c_descriptor *cdh); +int psb_c_dmat_get_nrows(psb_c_dspmat *mh); +int psb_c_dmat_get_ncols(psb_c_dspmat *mh); + +/* int psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, int upd, int dupl); */ +int psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* int psb_c_dspprint(psb_c_dspmat *mh); */ + +/* psblas computational routines */ +double psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); +double psb_c_dgenrm2(psb_c_dvector *xh, psb_c_descriptor *cdh); +double psb_c_dgeamax(psb_c_dvector *xh, psb_c_descriptor *cdh); +double psb_c_dgeasum(psb_c_dvector *xh, psb_c_descriptor *cdh); +double psb_c_dspnrmi(psb_c_dvector *xh, psb_c_descriptor *cdh); +int psb_c_dgeaxpby(double alpha, psb_c_dvector *xh, + double beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +int psb_c_dspmm(double alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + double beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +int psb_c_dspsm(double alpha, psb_c_dspmat *th, psb_c_dvector *xh, + double beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 new file mode 100644 index 00000000..eaf3d8f2 --- /dev/null +++ b/cbind/base/psb_cpenv_mod.f90 @@ -0,0 +1,170 @@ +module psb_cpenv_mod + use iso_c_binding + +contains + + function psb_c_get_errstatus() bind(c) result(res) + use psb_base_mod + implicit none + + integer(c_int) :: res + + res = psb_get_errstatus() + end function psb_c_get_errstatus + + function psb_c_init() bind(c) + use psb_base_mod + implicit none + + integer(c_int) :: psb_c_init + + integer :: ictxt + + call psb_init(ictxt) + psb_c_init = ictxt + end function psb_c_init + + subroutine psb_c_exit_ctxt(ictxt) bind(c) + use psb_base_mod + integer(c_int), value :: ictxt + + call psb_exit(ictxt,close=.false.) + return + end subroutine psb_c_exit_ctxt + + subroutine psb_c_exit(ictxt) bind(c) + use psb_base_mod + integer(c_int), value :: ictxt + + call psb_exit(ictxt) + return + end subroutine psb_c_exit + + subroutine psb_c_abort(ictxt) bind(c) + use psb_base_mod + integer(c_int), value :: ictxt + + call psb_abort(ictxt) + return + end subroutine psb_c_abort + + + subroutine psb_c_info(ictxt,iam,np) bind(c) + use psb_base_mod + integer(c_int), value :: ictxt + integer(c_int) :: iam,np + + call psb_info(ictxt,iam,np) + return + end subroutine psb_c_info + + subroutine psb_c_barrier(ictxt) bind(c) + use psb_base_mod + integer(c_int), value :: ictxt + + call psb_barrier(ictxt) + end subroutine psb_c_barrier + + real(c_double) function psb_c_wtime() bind(c) + use psb_base_mod + + psb_c_wtime = psb_wtime() + end function psb_c_wtime + + subroutine psb_c_ibcast(ictxt,n,v,root) bind(c) + use psb_base_mod + implicit none + integer(c_int), value :: ictxt,n, root + integer(c_int) :: v(*) + + if (n < 0) then + write(0,*) 'Wrong size in BCAST' + return + end if + if (n==0) return + + call psb_bcast(ictxt,v(1:n),root=root) + end subroutine psb_c_ibcast + + subroutine psb_c_dbcast(ictxt,n,v,root) bind(c) + use psb_base_mod + implicit none + integer(c_int), value :: ictxt,n, root + real(c_double) :: v(*) + + if (n < 0) then + write(0,*) 'Wrong size in BCAST' + return + end if + if (n==0) return + + call psb_bcast(ictxt,v(1:n),root=root) + end subroutine psb_c_dbcast + + subroutine psb_c_hbcast(ictxt,v,root) bind(c) + use psb_base_mod + implicit none + integer(c_int), value :: ictxt, root + character(c_char) :: v(*) + integer :: n, iam, np + + call psb_info(ictxt,iam,np) + + if (iam==root) then + n = 1 + do + if (v(n) == c_null_char) exit + n = n + 1 + end do + end if + call psb_bcast(ictxt,n,root=root) + call psb_bcast(ictxt,v(1:n),root=root) + end subroutine psb_c_hbcast + + function psb_c_f2c_errmsg(cmesg,len) bind(c) result(res) + use psb_base_mod + use psb_base_string_cbind_mod + implicit none + character(c_char), intent(inout) :: cmesg(*) + integer(c_int), intent(in), value :: len + integer(c_int) :: res + character(len=psb_max_errmsg_len_), allocatable :: fmesg(:) + character(len=psb_max_errmsg_len_) :: tmp + integer :: i, j, ll, il + + res = 0 + call psb_errpop(fmesg) + ll = 1 + if (allocated(fmesg)) then + res = size(fmesg) + do i=1, size(fmesg) + tmp = fmesg(i) + il = len_trim(tmp) + il = min(il,len-ll) + !write(0,*) 'loop f2c_errmsg: ', ll,il + call stringf2c(tmp(1:il),cmesg(ll:ll+il)) + cmesg(ll+il)=c_new_line + ll = ll+il+1 + end do + !write(0,*) 'From f2c_errmsg: ', ll,len + end if + cmesg(ll) = c_null_char + end function psb_c_f2c_errmsg + + subroutine psb_c_seterraction_ret() bind(c) + use psb_base_mod + call psb_set_erraction(psb_act_ret_) + end subroutine psb_c_seterraction_ret + + subroutine psb_c_seterraction_print() bind(c) + use psb_base_mod + call psb_set_erraction(psb_act_print_) + end subroutine psb_c_seterraction_print + + subroutine psb_c_seterraction_abort() bind(c) + use psb_base_mod + call psb_set_erraction(psb_act_abort_) + end subroutine psb_c_seterraction_abort + + +end module psb_cpenv_mod diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 new file mode 100644 index 00000000..c55e3228 --- /dev/null +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -0,0 +1,279 @@ +module psb_d_psblas_cbind_mod + use iso_c_binding + +contains + + function psb_c_dgeaxpby(alpha,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + + type(psb_c_object_type) :: xh,yh, cdh + real(c_double), value :: alpha,beta + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp,yp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + + call psb_geaxpby(alpha,xp,beta,yp,descp,info) + + res = info + + end function psb_c_dgeaxpby + + function psb_c_dgenrm2(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double) :: res + + type(psb_c_object_type) :: xh,cdh + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_genrm2(xp,descp,info) + + end function psb_c_dgenrm2 + + function psb_c_dgeamax(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double) :: res + + type(psb_c_object_type) :: xh,cdh + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geamax(xp,descp,info) + + end function psb_c_dgeamax + + function psb_c_dgeasum(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double) :: res + + type(psb_c_object_type) :: xh,cdh + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geasum(xp,descp,info) + + end function psb_c_dgeasum + + + function psb_c_dspnrmi(mh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double) :: res + + type(psb_c_object_type) :: mh,cdh + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = psb_spnrmi(ap,descp,info) + + end function psb_c_dspnrmi + + function psb_c_dgedot(xh,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double) :: res + + type(psb_c_object_type) :: xh,yh,cdh + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp,yp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + res = psb_gedot(xp,yp,descp,info) + + end function psb_c_dgedot + + + function psb_c_dspmm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + + type(psb_c_object_type) :: ah,xh,yh, cdh + real(c_double), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp,yp + type(psb_dspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spmm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_dspmm + + + function psb_c_dspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + + type(psb_c_object_type) :: ah,xh,yh, cdh + real(c_double), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp,yp + type(psb_dspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spsm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_dspsm + + +end module psb_d_psblas_cbind_mod diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 new file mode 100644 index 00000000..7a8d95f5 --- /dev/null +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -0,0 +1,119 @@ +module psb_d_serial_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + + function psb_c_dvect_get_nrows(xh) bind(c) result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: xh + + type(psb_d_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + res = vp%get_nrows() + end if + + end function psb_c_dvect_get_nrows + + function psb_c_dvect_f_get_cpy(v,xh) bind(c) result(res) + implicit none + + integer(c_int) :: res + real(c_double) :: v(*) + type(psb_c_object_type) :: xh + + type(psb_d_vect_type), pointer :: vp + real(psb_dpk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + fv = vp%get_vect() + sz = size(fv) + v(1:sz) = fv(1:sz) + end if + + end function psb_c_dvect_f_get_cpy + + + function psb_c_dvect_zero(xh) bind(c) result(res) + implicit none + + integer(c_int) :: res + type(psb_c_object_type) :: xh + + type(psb_d_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call vp%set(dzero) + end if + + end function psb_c_dvect_zero + + + function psb_c_dmat_get_nrows(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + + type(psb_c_object_type) :: mh + type(psb_dspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_nrows() + + end function psb_c_dmat_get_nrows + + + function psb_c_dmat_get_ncols(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + + type(psb_c_object_type) :: mh + type(psb_dspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_ncols() + + end function psb_c_dmat_get_ncols + + + +end module psb_d_serial_cbind_mod + diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 new file mode 100644 index 00000000..f01aba8e --- /dev/null +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -0,0 +1,385 @@ +module psb_d_tools_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + function psb_c_dgeall(xh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: xh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_dgeall + + function psb_c_dgeasb(xh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: xh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info) + res = min(0,info) + + return + end function psb_c_dgeasb + + function psb_c_dgefree(xh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: xh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_gefree(xp,descp,info) + res = min(0,info) + xh%item = c_null_ptr + + return + end function psb_c_dgefree + + + function psb_c_dgeins(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + integer(c_int), value :: nz + integer(c_int) :: irw(*) + real(c_double) :: val(*) + type(psb_c_object_type) :: xh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + res = min(0,info) + + return + end function psb_c_dgeins + + + function psb_c_dgeins_add(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + integer(c_int), value :: nz + integer(c_int) :: irw(*) + real(c_double) :: val(*) + type(psb_c_object_type) :: xh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + res = min(0,info) + + return + end function psb_c_dgeins_add + + + function psb_c_dspall(mh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: mh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + return + end if + allocate(ap) + call psb_spall(ap,descp,info) + mh%item = c_loc(ap) + res = min(0,info) + + return + end function psb_c_dspall + + + + function psb_c_dspasb(mh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: mh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spasb(ap,descp,info) + res = min(0,info) + return + end function psb_c_dspasb + + + function psb_c_dspfree(mh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + type(psb_c_object_type) :: mh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spfree(ap,descp,info) + res = min(0,info) + mh%item=c_null_ptr + return + end function psb_c_dspfree + + +#if 0 + + function psb_c_dspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#ifdef HAVE_LIBRSB + use psb_d_rsb_mat_mod +#endif + implicit none + integer(c_int) :: res + integer(c_int), value :: cdh, mh,upd,dupl + character(c_char) :: afmt(*) + integer :: info,n, fdupl + character(len=5) :: fafmt +#ifdef HAVE_LIBRSB + type(psb_d_rsb_sparse_mat) :: arsb +#endif + + res = -1 + call psb_check_descriptor_handle(cdh,info) + if (info < 0) return + call psb_check_double_spmat_handle(mh,info) + if (info < 0) return + + call stringc2f(afmt,fafmt) + select case(fafmt) +#ifdef HAVE_LIBRSB + case('RSB') + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & upd=upd,dupl=dupl,mold=arsb) +#endif + case default + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & afmt=fafmt,upd=upd,dupl=dupl) + end select + + res = min(0,info) + + return + end function psb_c_dspasb_opt +#endif + + function psb_c_dspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + implicit none + integer(c_int) :: res + integer(c_int), value :: nz + integer(c_int) :: irw(*), icl(*) + real(c_double) :: val(*) + type(psb_c_object_type) :: mh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + res = min(0,info) + return + end function psb_c_dspins + + + function psb_c_dsprn(mh,cdh,clear) bind(c) result(res) + + implicit none + integer(c_int) :: res + logical(c_bool), value :: clear + type(psb_c_object_type) :: mh + type(psb_c_object_type) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + integer :: info + logical :: fclear + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + fclear = clear + call psb_sprn(ap,descp,info,clear=fclear) + res = min(0,info) + + return + end function psb_c_dsprn +!!$ +!!$ function psb_c_dspprint(mh) bind(c) result(res) +!!$ +!!$ implicit none +!!$ integer(c_int) :: res +!!$ integer(c_int), value :: mh +!!$ integer :: info +!!$ +!!$ +!!$ res = -1 +!!$ call psb_check_double_spmat_handle(mh,info) +!!$ if (info < 0) return +!!$ +!!$ call psb_csprt(0,double_spmat_pool(mh)%item,head='Debug mat') +!!$ +!!$ res = 0 +!!$ +!!$ return +!!$ end function psb_c_dspprint + + +end module psb_d_tools_cbind_mod + diff --git a/cbind/base/psb_objhandle_mod.f90 b/cbind/base/psb_objhandle_mod.f90 new file mode 100644 index 00000000..3d5cf5d5 --- /dev/null +++ b/cbind/base/psb_objhandle_mod.f90 @@ -0,0 +1,20 @@ +module psb_objhandle_mod + use iso_c_binding + + type, bind(c) :: psb_c_object_type + type(c_ptr) :: item = c_null_ptr + end type psb_c_object_type + + type, bind(c) :: psb_c_descriptor + type(c_ptr) :: item = c_null_ptr + end type psb_c_descriptor + + type, bind(c) :: psb_c_dvector + type(c_ptr) :: item = c_null_ptr + end type psb_c_dvector + + type, bind(c) :: psb_c_dspmat + type(c_ptr) :: item = c_null_ptr + end type psb_c_dspmat + +end module psb_objhandle_mod From c2828d9dd7de074a0f2f0555fb6b767b95868074 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 17 Feb 2017 11:24:43 +0000 Subject: [PATCH 02/27] psblas3-mcbind cbind/base/psb_d_serial_cbind_mod.F90 Use interoperable types. --- cbind/base/psb_d_serial_cbind_mod.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 7a8d95f5..d450329d 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -12,7 +12,7 @@ contains implicit none integer(c_int) :: res - type(psb_c_object_type) :: xh + type(psb_c_dvector) :: xh type(psb_d_vect_type), pointer :: vp integer :: info @@ -31,7 +31,7 @@ contains integer(c_int) :: res real(c_double) :: v(*) - type(psb_c_object_type) :: xh + type(psb_c_dvector) :: xh type(psb_d_vect_type), pointer :: vp real(psb_dpk_), allocatable :: fv(:) @@ -53,7 +53,7 @@ contains implicit none integer(c_int) :: res - type(psb_c_object_type) :: xh + type(psb_c_dvector) :: xh type(psb_d_vect_type), pointer :: vp integer :: info @@ -75,7 +75,7 @@ contains implicit none integer(c_int) :: res - type(psb_c_object_type) :: mh + type(psb_c_dspmat) :: mh type(psb_dspmat_type), pointer :: ap integer :: info @@ -98,7 +98,7 @@ contains implicit none integer(c_int) :: res - type(psb_c_object_type) :: mh + type(psb_c_dspmat) :: mh type(psb_dspmat_type), pointer :: ap integer :: info From 69b42b78163bb831bbfcb129e606f8405fac435b Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 17 Feb 2017 13:45:26 +0000 Subject: [PATCH 03/27] psblas3-mcbind: cbind/base/Makefile cbind/base/psb_c_base.h cbind/base/psb_c_dbase.c cbind/base/psb_c_dbase.h cbind/base/psb_cpenv_mod.f90 configure.ac configure Added check for C99 compiler. Added typedefs for int/real/complex. --- cbind/base/Makefile | 14 +- cbind/base/psb_c_base.h | 69 +- cbind/base/psb_c_dbase.c | 2 +- cbind/base/psb_c_dbase.h | 60 +- cbind/base/psb_cpenv_mod.f90 | 33 +- configure | 8700 ++++++++++++++++++++++------------ configure.ac | 9 + 7 files changed, 5887 insertions(+), 3000 deletions(-) diff --git a/cbind/base/Makefile b/cbind/base/Makefile index fb342ac1..492526de 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -7,11 +7,14 @@ HERE=.. FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCLUDEDIR) CINCLUDES=-I$(INCLUDEDIR) -OBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o\ - psb_base_tools_cbind_mod.o psb_base_string_cbind_mod.o\ - psb_base_psblas_cbind_mod.o psb_d_tools_cbind_mod.o psb_c_base.o \ - psb_d_serial_cbind_mod.o psb_c_dbase.o psb_d_psblas_cbind_mod.o +FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ + psb_base_tools_cbind_mod.o psb_base_string_cbind_mod.o \ + psb_base_psblas_cbind_mod.o psb_d_tools_cbind_mod.o \ + psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o + +COBJS= psb_c_base.o psb_c_dbase.o CMOD=psb_base_cbind.h psb_c_base.h psb_c_dbase.h +OBJS=$(FOBJS) $(COBJS) LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ psb_base_tools_cbind_mod$(.mod) psb_base_string_cbind_mod$(.mod) psb_base_psblas_cbind_mod$(.mod)\ @@ -25,6 +28,7 @@ lib: $(OBJS) $(CMOD) $(RANLIB) $(HERE)/$(LIBNAME) /bin/cp -p $(LIBMOD) $(CMOD) $(HERE) +$(COBJS): $(CMOD) psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_mod.o \ psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o @@ -33,7 +37,7 @@ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o: psb_base_tools_cbind_mod.o psb_base_psblas_cbind_mod.o: psb_d_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o -psb_cpenv_mod.o: psb_base_string_cbind_mod.o +psb_cpenv_mod.o: psb_base_string_cbind_mod.o psb_objhandle_mod.o veryclean: clean /bin/rm -f $(HERE)/$(LIBNAME) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 6738a249..0a680bc4 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -4,9 +4,24 @@ extern "C" { typedef char _Bool; #endif + +#include +#include +#include +#include +#include +#include - typedef int psb_err_t; - typedef int psb_ctx_t; + +#if defined(LONG_INTEGERS_) + typedef int64_t psb_i_t; +#else + typedef int32_t psb_i_t; +#endif + typedef float psb_s_t; + typedef double psb_d_t; + typedef float complex psb_c_t; + typedef double complex psb_z_t; #define PSB_ERR_ERROR -1 #define PSB_ERR_SUCCESS 0 @@ -17,44 +32,44 @@ extern "C" { - int psb_c_error(); - int psb_c_clean_errstack(); + psb_i_t psb_c_error(); + psb_i_t psb_c_clean_errstack(); void psb_c_print_errmsg(); char *psb_c_pop_errmsg(); - int psb_c_f2c_errmsg(char *, int); + psb_i_t psb_c_f2c_errmsg(char *, psb_i_t); void psb_c_seterraction_ret(); void psb_c_seterraction_print(); void psb_c_seterraction_abort(); /* Environment routines */ - int psb_c_init(); - void psb_c_exit_ctxt(int ictxt); - void psb_c_exit(int ictxt); - void psb_c_abort(int ictxt); - void psb_c_barrier(int ictxt); - void psb_c_info(int ictxt, int *iam, int *np); - double psb_c_wtime(); - int psb_c_get_errstatus(); + psb_i_t psb_c_init(); + void psb_c_exit_ctxt(psb_i_t ictxt); + void psb_c_exit(psb_i_t ictxt); + void psb_c_abort(psb_i_t ictxt); + void psb_c_barrier(psb_i_t ictxt); + void psb_c_info(psb_i_t ictxt, psb_i_t *iam, psb_i_t *np); + psb_d_t psb_c_wtime(); + psb_i_t psb_c_get_errstatus(); - void psb_c_ibcast(int ictxt, int n, int *v, int root); - void psb_c_dbcast(int ictxt, int n, double *v, int root); - void psb_c_hbcast(int ictxt, const char *v, int root); + void psb_c_ibcast(psb_i_t ictxt, psb_i_t n, psb_i_t *v, psb_i_t root); + void psb_c_dbcast(psb_i_t ictxt, psb_i_t n, psb_d_t *v, psb_i_t root); + void psb_c_hbcast(psb_i_t ictxt, const char *v, psb_i_t root); /* Descriptor/integer routines */ psb_c_descriptor* psb_c_new_descriptor(); - int psb_c_cdall_vg(int ng, int *vg, int ictxt, psb_c_descriptor *cd); - int psb_c_cdall_vl(int nl, int *vl, int ictxt, psb_c_descriptor *cd); - int psb_c_cdall_nl(int nl, int ictxt, psb_c_descriptor *cd); - int psb_c_cdall_repl(int n, int ictxt, psb_c_descriptor *cd); - int psb_c_cdasb(psb_c_descriptor *cd); - int psb_c_cdfree(psb_c_descriptor *cd); - int psb_c_cdins(int nz, const int *ia, const int *ja, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_vg(psb_i_t ng, psb_i_t *vg, psb_i_t ictxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_vl(psb_i_t nl, psb_i_t *vl, psb_i_t ictxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_nl(psb_i_t nl, psb_i_t ictxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdall_repl(psb_i_t n, psb_i_t ictxt, psb_c_descriptor *cd); + psb_i_t psb_c_cdasb(psb_c_descriptor *cd); + psb_i_t psb_c_cdfree(psb_c_descriptor *cd); + psb_i_t psb_c_cdins(psb_i_t nz, const psb_i_t *ia, const psb_i_t *ja, psb_c_descriptor *cd); - int psb_c_cd_get_local_rows(psb_c_descriptor *cd); - int psb_c_cd_get_local_cols(psb_c_descriptor *cd); - int psb_c_cd_get_global_rows(psb_c_descriptor *cd); - int psb_c_cd_get_global_rows(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_rows(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_local_cols(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); + psb_i_t psb_c_cd_get_global_rows(psb_c_descriptor *cd); /* legal values for upd argument */ diff --git a/cbind/base/psb_c_dbase.c b/cbind/base/psb_c_dbase.c index 6cc4d8dc..3e7c968c 100644 --- a/cbind/base/psb_c_dbase.c +++ b/cbind/base/psb_c_dbase.c @@ -13,7 +13,7 @@ psb_c_dvector* psb_c_new_dvector() double* psb_c_dvect_get_cpy(psb_c_dvector *xh) { double *temp=NULL; - int vsize=0; + psb_i_t vsize=0; if ((vsize=psb_c_dvect_get_nrows(xh))<0) return(temp); diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 42125e5a..f7179123 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -17,46 +17,46 @@ typedef struct PSB_C_DSPMAT { /* dense vectors */ psb_c_dvector* psb_c_new_dvector(); -int psb_c_dvect_get_nrows(psb_c_dvector *xh); -double *psb_c_dvect_get_cpy( psb_c_dvector *xh); -int psb_c_dvect_f_get_cpy(double *v, psb_c_dvector *xh); -int psb_c_dvect_zero(psb_c_dvector *xh); +psb_i_t psb_c_dvect_get_nrows(psb_c_dvector *xh); +psb_d_t *psb_c_dvect_get_cpy( psb_c_dvector *xh); +psb_i_t psb_c_dvect_f_get_cpy(psb_d_t *v, psb_c_dvector *xh); +psb_i_t psb_c_dvect_zero(psb_c_dvector *xh); -int psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); -int psb_c_dgeins(int nz, const int *irw, const double *val, +psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); -int psb_c_dgeins_add(int nz, const int *irw, const double *val, +psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_d_t *val, psb_c_dvector *xh, psb_c_descriptor *cdh); -int psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); -int psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); /* sparse matrices*/ psb_c_dspmat* psb_c_new_dspmat(); -int psb_c_dspall(psb_c_dspmat *mh, psb_c_descriptor *cdh); -int psb_c_dspasb(psb_c_dspmat *mh, psb_c_descriptor *cdh); -int psb_c_dspfree(psb_c_dspmat *mh, psb_c_descriptor *cdh); -int psb_c_dspins(int nz, const int *irw, const int *icl, const double *val, +psb_i_t psb_c_dspall(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspasb(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspfree(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_d_t *val, psb_c_dspmat *mh, psb_c_descriptor *cdh); -int psb_c_dmat_get_nrows(psb_c_dspmat *mh); -int psb_c_dmat_get_ncols(psb_c_dspmat *mh); +psb_i_t psb_c_dmat_get_nrows(psb_c_dspmat *mh); +psb_i_t psb_c_dmat_get_ncols(psb_c_dspmat *mh); -/* int psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ -/* const char *afmt, int upd, int dupl); */ -int psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* int psb_c_dspprint(psb_c_dspmat *mh); */ +/* psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_dspprint(psb_c_dspmat *mh); */ /* psblas computational routines */ -double psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); -double psb_c_dgenrm2(psb_c_dvector *xh, psb_c_descriptor *cdh); -double psb_c_dgeamax(psb_c_dvector *xh, psb_c_descriptor *cdh); -double psb_c_dgeasum(psb_c_dvector *xh, psb_c_descriptor *cdh); -double psb_c_dspnrmi(psb_c_dvector *xh, psb_c_descriptor *cdh); -int psb_c_dgeaxpby(double alpha, psb_c_dvector *xh, - double beta, psb_c_dvector *yh, psb_c_descriptor *cdh); -int psb_c_dspmm(double alpha, psb_c_dspmat *ah, psb_c_dvector *xh, - double beta, psb_c_dvector *yh, psb_c_descriptor *cdh); -int psb_c_dspsm(double alpha, psb_c_dspmat *th, psb_c_dvector *xh, - double beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeamax(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeasum(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dspnrmi(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpby(psb_d_t alpha, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspmm(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspsm(psb_d_t alpha, psb_c_dspmat *th, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 index eaf3d8f2..1f3d9542 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.f90 @@ -1,10 +1,11 @@ module psb_cpenv_mod use iso_c_binding - + use psb_objhandle_mod + contains function psb_c_get_errstatus() bind(c) result(res) - use psb_base_mod + use psb_base_mod, only : psb_get_errstatus implicit none integer(c_int) :: res @@ -13,7 +14,7 @@ contains end function psb_c_get_errstatus function psb_c_init() bind(c) - use psb_base_mod + use psb_base_mod, only : psb_init implicit none integer(c_int) :: psb_c_init @@ -25,7 +26,7 @@ contains end function psb_c_init subroutine psb_c_exit_ctxt(ictxt) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_exit integer(c_int), value :: ictxt call psb_exit(ictxt,close=.false.) @@ -33,7 +34,7 @@ contains end subroutine psb_c_exit_ctxt subroutine psb_c_exit(ictxt) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_exit integer(c_int), value :: ictxt call psb_exit(ictxt) @@ -41,7 +42,7 @@ contains end subroutine psb_c_exit subroutine psb_c_abort(ictxt) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_abort integer(c_int), value :: ictxt call psb_abort(ictxt) @@ -50,7 +51,7 @@ contains subroutine psb_c_info(ictxt,iam,np) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_info integer(c_int), value :: ictxt integer(c_int) :: iam,np @@ -59,20 +60,20 @@ contains end subroutine psb_c_info subroutine psb_c_barrier(ictxt) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_barrier integer(c_int), value :: ictxt call psb_barrier(ictxt) end subroutine psb_c_barrier real(c_double) function psb_c_wtime() bind(c) - use psb_base_mod + use psb_base_mod, only : psb_wtime psb_c_wtime = psb_wtime() end function psb_c_wtime subroutine psb_c_ibcast(ictxt,n,v,root) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_bcast implicit none integer(c_int), value :: ictxt,n, root integer(c_int) :: v(*) @@ -87,7 +88,7 @@ contains end subroutine psb_c_ibcast subroutine psb_c_dbcast(ictxt,n,v,root) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_bcast implicit none integer(c_int), value :: ictxt,n, root real(c_double) :: v(*) @@ -102,7 +103,7 @@ contains end subroutine psb_c_dbcast subroutine psb_c_hbcast(ictxt,v,root) bind(c) - use psb_base_mod + use psb_base_mod, only : psb_bcast, psb_info implicit none integer(c_int), value :: ictxt, root character(c_char) :: v(*) @@ -122,7 +123,7 @@ contains end subroutine psb_c_hbcast function psb_c_f2c_errmsg(cmesg,len) bind(c) result(res) - use psb_base_mod + use psb_base_mod, only : psb_errpop,psb_max_errmsg_len_ use psb_base_string_cbind_mod implicit none character(c_char), intent(inout) :: cmesg(*) @@ -152,17 +153,17 @@ contains end function psb_c_f2c_errmsg subroutine psb_c_seterraction_ret() bind(c) - use psb_base_mod + use psb_base_mod, only : psb_set_erraction, psb_act_ret_ call psb_set_erraction(psb_act_ret_) end subroutine psb_c_seterraction_ret subroutine psb_c_seterraction_print() bind(c) - use psb_base_mod + use psb_base_mod, only : psb_set_erraction, psb_act_print_ call psb_set_erraction(psb_act_print_) end subroutine psb_c_seterraction_print subroutine psb_c_seterraction_abort() bind(c) - use psb_base_mod + use psb_base_mod, only : psb_set_erraction, psb_act_abort_ call psb_set_erraction(psb_act_abort_) end subroutine psb_c_seterraction_abort diff --git a/configure b/configure index ed459b69..3a8d223d 100755 --- a/configure +++ b/configure @@ -1,22 +1,20 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for PSBLAS 3.4. +# Generated by GNU Autoconf 2.63 for PSBLAS 3.4. # # Report bugs to . # -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which @@ -24,15 +22,23 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; esac + fi + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + as_nl=' ' export as_nl @@ -40,13 +46,7 @@ export as_nl as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else @@ -57,7 +57,7 @@ else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; - case $arg in #( + case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; @@ -80,6 +80,13 @@ if test "${PATH_SEPARATOR+set}" != set; then } fi +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + # IFS # We need space, tab and new line, in precisely that order. Quoting is @@ -89,16 +96,15 @@ fi IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( +case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done IFS=$as_save_IFS ;; @@ -110,16 +116,12 @@ if test "x$as_myself" = x; then fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 + { (exit 1); exit 1; } fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' @@ -131,294 +133,7 @@ export LC_ALL LANGUAGE=C export LANGUAGE -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: salvatore.filippone@uniroma2.it about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - +# Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -432,12 +147,8 @@ else as_basename=false fi -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi +# Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ @@ -457,133 +168,437 @@ $as_echo X/"$0" | } s/.*/./; q'` -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits +# CDPATH. +$as_unset CDPATH - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 } -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file +exitcode=0 +if as_func_success; then + : else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null + exitcode=1 + echo as_func_success failed. fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' +if as_func_ret_success; then + : else - test -d ./-p && rmdir ./-p - as_mkdir_p=false + exitcode=1 + echo as_func_ret_success failed. fi -as_test_x='test -x' -as_executable_p=as_fn_executable_p +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +test \$exitcode = 0) || { (exit 1); exit 1; } +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS -test -n "$DJDIR" || exec 7<&0 &1 -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= +fi -# Identity of this package. -PACKAGE_NAME='PSBLAS' -PACKAGE_TARNAME='psblas' -PACKAGE_VERSION='3.4' -PACKAGE_STRING='PSBLAS 3.4' -PACKAGE_BUGREPORT='salvatore.filippone@uniroma2.it' -PACKAGE_URL='' + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='PSBLAS' +PACKAGE_TARNAME='psblas' +PACKAGE_VERSION='3.4' +PACKAGE_STRING='PSBLAS 3.4' +PACKAGE_BUGREPORT='salvatore.filippone@uniroma2.it' ac_unique_file="base/modules/psb_base_mod.f90" # Factoring default headers for most tests. @@ -670,14 +685,9 @@ LAPACK_LIBS EGREP GREP CPP -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE -am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE @@ -755,7 +765,6 @@ bindir program_transform_name prefix exec_prefix -PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION @@ -776,7 +785,6 @@ with_library_path with_include_path with_module_path enable_dependency_tracking -enable_silent_rules enable_long_integers with_blas with_blasdir @@ -869,9 +877,8 @@ do fi case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -916,7 +923,8 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -942,7 +950,8 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1146,7 +1155,8 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1162,7 +1172,8 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1192,17 +1203,17 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1211,7 +1222,7 @@ Try \`$0 --help' for more information" $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac @@ -1219,13 +1230,15 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1248,7 +1261,8 @@ do [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' @@ -1262,6 +1276,8 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1276,9 +1292,11 @@ test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" + { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } # Find the source files, if location was not specified. @@ -1317,11 +1335,13 @@ else fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1361,7 +1381,7 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files @@ -1423,34 +1443,30 @@ Optional Features: --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-serial Specify whether to enable a fake mpi library to run in serial mode. - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors --enable-long-integers Specify usage of 64 bits integers. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-ccopt additional [CCOPT] flags to be added: will prepend - to [CCOPT] - --with-fcopt additional [FCOPT] flags to be added: will prepend - to [FCOPT] + --with-ccopt additional CCOPT flags to be added: will prepend + to CCOPT + --with-fcopt additional FCOPT flags to be added: will prepend + to FCOPT --with-libs List additional link flags here. For example, --with-libs=-lspecial_system_lib or --with-libs=-L/path/to/libs - --with-clibs additional [CLIBS] flags to be added: will prepend - to [CLIBS] - --with-flibs additional [FLIBS] flags to be added: will prepend - to [FLIBS] - --with-library-path additional [LIBRARYPATH] flags to be added: will - prepend to [LIBRARYPATH] - --with-include-path additional [INCLUDEPATH] flags to be added: will - prepend to [INCLUDEPATH] - --with-module-path additional [MODULE_PATH] flags to be added: will - prepend to [MODULE_PATH] + --with-clibs additional CLIBS flags to be added: will prepend + to CLIBS + --with-flibs additional FLIBS flags to be added: will prepend + to FLIBS + --with-library-path additional LIBRARYPATH flags to be added: will + prepend to LIBRARYPATH + --with-include-path additional INCLUDEPATH flags to be added: will + prepend to INCLUDEPATH + --with-module-path additional MODULE_PATH flags to be added: will + prepend to MODULE_PATH --with-blas= use BLAS library --with-blasdir= search for BLAS library in --with-lapack= use LAPACK library @@ -1482,7 +1498,7 @@ Some influential environment variables: FFLAGS Fortran 77 compiler flags CC C compiler command CFLAGS C compiler flags - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC MPI C compiler command MPIFC MPI Fortran compiler command @@ -1556,764 +1572,58 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF PSBLAS configure 3.4 -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.63 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by PSBLAS $as_me 3.4, which was +generated by GNU Autoconf 2.63. Invocation command line was -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## + $ $0 $@ -# ac_fn_fc_try_compile LINENO -# --------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_fc_try_compile () +_ACEOF +exec 5>>config.log { - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_fc_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` -} # ac_fn_fc_try_compile +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` -# ac_fn_f77_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_f77_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_f77_try_compile - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_fc_try_link LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_fc_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_fc_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_fc_try_link - -# ac_fn_f77_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_f77_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_f77_try_link - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ---------------------------------------------- ## -## Report this to salvatore.filippone@uniroma2.it ## -## ---------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by PSBLAS $as_me 3.4, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME +_ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done + $as_echo "PATH: $as_dir" +done IFS=$as_save_IFS } >&5 @@ -2350,9 +1660,9 @@ do ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) - as_fn_append ac_configure_args1 " '$ac_arg'" + ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -2368,13 +1678,13 @@ do -* ) ac_must_keep_next=true ;; esac fi - as_fn_append ac_configure_args " '$ac_arg'" + ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -2386,9 +1696,11 @@ trap 'exit_status=$? { echo - $as_echo "## ---------------- ## + cat <<\_ASBOX +## ---------------- ## ## Cache variables. ## -## ---------------- ##" +## ---------------- ## +_ASBOX echo # The following way of writing the cache mishandles newlines in values, ( @@ -2397,13 +1709,13 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; + *) $as_unset $ac_var ;; esac ;; esac done @@ -2422,9 +1734,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + cat <<\_ASBOX +## ----------------- ## ## Output variables. ## -## ----------------- ##" +## ----------------- ## +_ASBOX echo for ac_var in $ac_subst_vars do @@ -2437,9 +1751,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + cat <<\_ASBOX +## ------------------- ## ## File substitutions. ## -## ------------------- ##" +## ------------------- ## +_ASBOX echo for ac_var in $ac_subst_files do @@ -2453,9 +1769,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; fi if test -s confdefs.h; then - $as_echo "## ----------- ## + cat <<\_ASBOX +## ----------- ## ## confdefs.h. ## -## ----------- ##" +## ----------- ## +_ASBOX echo cat confdefs.h echo @@ -2469,39 +1787,37 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; exit $exit_status ' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h - # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF + cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF + cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF + cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF @@ -2510,12 +1826,7 @@ _ACEOF ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site @@ -2526,23 +1837,19 @@ fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } + . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; @@ -2550,7 +1857,7 @@ $as_echo "$as_me: loading cache $cache_file" >&6;} esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -2565,11 +1872,11 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; @@ -2579,17 +1886,17 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac @@ -2601,20 +1908,43 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## + + + + + + + + + + + + + + + + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -2633,7 +1963,7 @@ psblas_cv_version="3.4" # Our custom M4 macros are in the 'config' directory -{ $as_echo "$as_me:${as_lineno-$LINENO}: +{ $as_echo "$as_me:$LINENO: -------------------------------------------------------------------------------- Welcome to the $PACKAGE_NAME $psblas_cv_version configure Script. @@ -2685,7 +2015,9 @@ for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do fi done if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, @@ -2711,10 +2043,10 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : +if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2722,11 +2054,11 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -2734,7 +2066,7 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2763,7 +2095,7 @@ case $as_dir/ in #(( ;; esac - done +done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir @@ -2779,7 +2111,7 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. @@ -2791,7 +2123,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to install" >&5 +{ $as_echo "$as_me:$LINENO: checking where to install" >&5 $as_echo_n "checking where to install... " >&6; } case $prefix in \/* ) eval "INSTALL_DIR=$prefix";; @@ -2813,7 +2145,7 @@ case $samplesdir in \/* ) eval "INSTALL_SAMPLESDIR=$samplesdir";; * ) eval "INSTALL_SAMPLESDIR=$INSTALL_DIR/samples";; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR" >&5 +{ $as_echo "$as_me:$LINENO: result: $INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR" >&5 $as_echo "$INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR" >&6; } # Note that the following line won't save from troubles. @@ -2826,9 +2158,9 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_FC+:} false; then : +if test "${ac_cv_prog_FC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$FC"; then @@ -2839,24 +2171,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 + { $as_echo "$as_me:$LINENO: result: $FC" >&5 $as_echo "$FC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -2870,9 +2202,9 @@ if test -z "$FC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_FC+:} false; then : +if test "${ac_cv_prog_ac_ct_FC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_FC"; then @@ -2883,24 +2215,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_FC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 + { $as_echo "$as_me:$LINENO: result: $ac_ct_FC" >&5 $as_echo "$ac_ct_FC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -2913,7 +2245,7 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -2923,32 +2255,45 @@ fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 +$as_echo "$as_me:$LINENO: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" +{ (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } rm -f a.out -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main end @@ -2958,8 +2303,8 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran compiler works" >&5 -$as_echo_n "checking whether the Fortran compiler works... " >&6; } +{ $as_echo "$as_me:$LINENO: checking for Fortran compiler default output file name" >&5 +$as_echo_n "checking for Fortran compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: @@ -2975,17 +2320,17 @@ do done rm -f $ac_rmfiles -if { { ac_try="$ac_link_default" +if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3002,7 +2347,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3021,41 +2366,84 @@ test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "Fortran compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +{ { $as_echo "$as_me:$LINENO: error: Fortran compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: Fortran compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler default output file name" >&5 -$as_echo_n "checking for Fortran compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } + ac_exeext=$ac_cv_exeext +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the Fortran compiler works" >&5 +$as_echo_n "checking whether the Fortran compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run Fortran compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run Fortran compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3070,93 +2458,44 @@ for ac_file in conftest.exe conftest conftest.*; do esac done else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -cat > conftest.$ac_ext <<_ACEOF - program main - open(unit=9,file='conftest.out') - close(unit=9) - - end -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run Fortran compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : +if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -3169,14 +2508,18 @@ else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } fi + rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT @@ -3184,12 +2527,12 @@ ac_objext=$OBJEXT # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5 +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } -if ${ac_cv_fc_compiler_gnu+:} false; then : +if test "${ac_cv_fc_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me @@ -3197,44 +2540,86 @@ else end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else - ac_compiler_gnu=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5 $as_echo "$ac_cv_fc_compiler_gnu" >&6; } ac_ext=$ac_save_ext -ac_test_FCFLAGS=${FCFLAGS+set} -ac_save_FCFLAGS=$FCFLAGS +ac_test_FFLAGS=${FCFLAGS+set} +ac_save_FFLAGS=$FCFLAGS FCFLAGS= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 +{ $as_echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5 $as_echo_n "checking whether $FC accepts -g... " >&6; } -if ${ac_cv_prog_fc_g+:} false; then : +if test "${ac_cv_prog_fc_g+set}" = set; then $as_echo_n "(cached) " >&6 else FCFLAGS=-g -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_prog_fc_g=yes else - ac_cv_prog_fc_g=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_fc_g=no fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5 $as_echo "$ac_cv_prog_fc_g" >&6; } -if test "$ac_test_FCFLAGS" = set; then - FCFLAGS=$ac_save_FCFLAGS +if test "$ac_test_FFLAGS" = set; then + FCFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" @@ -3249,11 +2634,6 @@ else fi fi -if test $ac_compiler_gnu = yes; then - GFC=yes -else - GFC= -fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3269,9 +2649,9 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_F77+:} false; then : +if test "${ac_cv_prog_F77+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$F77"; then @@ -3282,24 +2662,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 + { $as_echo "$as_me:$LINENO: result: $F77" >&5 $as_echo "$F77" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -3313,9 +2693,9 @@ if test -z "$F77"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_F77+:} false; then : +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_F77"; then @@ -3326,24 +2706,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_F77="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 + { $as_echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 $as_echo "$ac_ct_F77" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -3356,7 +2736,7 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -3366,41 +2746,54 @@ fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 +$as_echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" +{ (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } -if ${ac_cv_f77_compiler_gnu+:} false; then : +if test "${ac_cv_f77_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me @@ -3408,41 +2801,83 @@ else end _ACEOF -if ac_fn_f77_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else - ac_compiler_gnu=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 $as_echo "$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 +{ $as_echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 $as_echo_n "checking whether $F77 accepts -g... " >&6; } -if ${ac_cv_prog_f77_g+:} false; then : +if test "${ac_cv_prog_f77_g+set}" = set; then $as_echo_n "(cached) " >&6 else FFLAGS=-g -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF -if ac_fn_f77_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_prog_f77_g=yes else - ac_cv_prog_f77_g=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 $as_echo "$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS @@ -3481,9 +2916,9 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : +if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3494,24 +2929,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 + { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -3525,9 +2960,9 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3538,24 +2973,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -3568,7 +3003,7 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -3577,42 +3012,62 @@ esac fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" +{ (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : +if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int @@ -3626,16 +3081,37 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else - ac_compiler_gnu=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes @@ -3644,16 +3120,20 @@ else fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : +if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int @@ -3664,11 +3144,35 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int @@ -3679,12 +3183,36 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : else - ac_c_werror_flag=$ac_save_c_werror_flag + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int @@ -3695,17 +3223,42 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS @@ -3722,18 +3275,23 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : +if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include -struct stat; +#include +#include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -3785,9 +3343,32 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi + rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3798,19 +3379,17 @@ fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 + { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac -if test "x$ac_cv_prog_cc_c89" != xno; then : -fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3818,89 +3397,242 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : + +# Sanity checks, although redundant (useful when debugging this configure.ac)! +if test "X$FC" == "X" ; then + { { $as_echo "$as_me:$LINENO: error: Problem : No Fortran compiler specified nor found!" >&5 +$as_echo "$as_me: error: Problem : No Fortran compiler specified nor found!" >&2;} + { (exit 1); exit 1; }; } +fi + +if test "X$CC" == "X" ; then + { { $as_echo "$as_me:$LINENO: error: Problem : No C compiler specified nor found!" >&5 +$as_echo "$as_me: error: Problem : No C compiler specified nor found!" >&2;} + { (exit 1); exit 1; }; } +fi + { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} int main () { + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + ; return 0; } _ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c99=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC -# Sanity checks, although redundant (useful when debugging this configure.ac)! -if test "X$FC" == "X" ; then - as_fn_error $? "Problem : No Fortran compiler specified nor found!" "$LINENO" 5 fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac -if test "X$CC" == "X" ; then - as_fn_error $? "Problem : No C compiler specified nor found!" "$LINENO" 5 + + +if test "$ac_cv_prog_cc_c99" == "no" ; then + { { $as_echo "$as_me:$LINENO: error: Problem : Need a C99 compiler ! " >&5 +$as_echo "$as_me: error: Problem : Need a C99 compiler ! " >&2;} + { (exit 1); exit 1; }; } +else + CDEFINES="$ac_cv_prog_cc_c99 $CDEFINES" fi + + ############################################################################### # Suitable MPI compilers detection ############################################################################### # Note: Someday we will contemplate a fake MPI - configured version of PSBLAS ############################################################################### # First check whether the user required our serial (fake) mpi. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we want serial mpi stubs" >&5 +{ $as_echo "$as_me:$LINENO: checking whether we want serial mpi stubs" >&5 $as_echo_n "checking whether we want serial mpi stubs... " >&6; } # Check whether --enable-serial was given. -if test "${enable_serial+set}" = set; then : +if test "${enable_serial+set}" = set; then enableval=$enable_serial; pac_cv_serial_mpi="yes"; @@ -3908,11 +3640,11 @@ pac_cv_serial_mpi="yes"; fi if test x"$pac_cv_serial_mpi" == x"yes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes." >&5 + { $as_echo "$as_me:$LINENO: result: yes." >&5 $as_echo "yes." >&6; } else pac_cv_serial_mpi="no"; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no." >&5 + { $as_echo "$as_me:$LINENO: result: no." >&5 $as_echo "no." >&6; } fi @@ -3937,9 +3669,9 @@ if test "X$MPICC" = "X" ; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MPICC+:} false; then : +if test "${ac_cv_prog_MPICC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$MPICC"; then @@ -3950,24 +3682,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPICC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi MPICC=$ac_cv_prog_MPICC if test -n "$MPICC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5 + { $as_echo "$as_me:$LINENO: result: $MPICC" >&5 $as_echo "$MPICC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -3986,9 +3718,9 @@ fi do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MPICC+:} false; then : +if test "${ac_cv_prog_MPICC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$MPICC"; then @@ -3999,24 +3731,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPICC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi MPICC=$ac_cv_prog_MPICC if test -n "$MPICC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5 + { $as_echo "$as_me:$LINENO: result: $MPICC" >&5 $as_echo "$MPICC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4031,22 +3763,110 @@ test -n "$MPICC" || MPICC="$CC" if test x = x"$MPILIBS"; then - ac_fn_c_check_func "$LINENO" "MPI_Init" "ac_cv_func_MPI_Init" -if test "x$ac_cv_func_MPI_Init" = xyes; then : + { $as_echo "$as_me:$LINENO: checking for MPI_Init" >&5 +$as_echo_n "checking for MPI_Init... " >&6; } +if test "${ac_cv_func_MPI_Init+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define MPI_Init to an innocuous variant, in case declares MPI_Init. + For example, HP-UX 11i declares gettimeofday. */ +#define MPI_Init innocuous_MPI_Init + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char MPI_Init (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef MPI_Init + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char MPI_Init (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_MPI_Init || defined __stub___MPI_Init +choke me +#endif + +int +main () +{ +return MPI_Init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_MPI_Init=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_MPI_Init=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_MPI_Init" >&5 +$as_echo "$ac_cv_func_MPI_Init" >&6; } +if test "x$ac_cv_func_MPI_Init" = x""yes; then MPILIBS=" " fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpi" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpi" >&5 $as_echo_n "checking for MPI_Init in -lmpi... " >&6; } -if ${ac_cv_lib_mpi_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpi_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpi $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -4064,31 +3884,60 @@ return MPI_Init (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpi_MPI_Init=yes else - ac_cv_lib_mpi_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpi_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpi_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpi_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpi_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpi_MPI_Init" = x""yes; then MPILIBS="-lmpi" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpich" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpich" >&5 $as_echo_n "checking for MPI_Init in -lmpich... " >&6; } -if ${ac_cv_lib_mpich_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpich_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpich $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -4106,27 +3955,56 @@ return MPI_Init (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpich_MPI_Init=yes else - ac_cv_lib_mpich_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpich_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpich_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpich_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpich_MPI_Init" = x""yes; then MPILIBS="-lmpich" fi fi if test x != x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpi.h" >&5 + { $as_echo "$as_me:$LINENO: checking for mpi.h" >&5 $as_echo_n "checking for mpi.h... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int @@ -4137,14 +4015,35 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - MPILIBS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + MPILIBS="" + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -4154,11 +4053,15 @@ CC="$acx_mpi_save_CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then - as_fn_error $? "Cannot find any suitable MPI implementation for C" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Cannot find any suitable MPI implementation for C" >&5 +$as_echo "$as_me: error: Cannot find any suitable MPI implementation for C" >&2;} + { (exit 1); exit 1; }; } : else -$as_echo "#define HAVE_MPI 1" >>confdefs.h +cat >>confdefs.h <<\_ACEOF +#define HAVE_MPI 1 +_ACEOF : fi @@ -4177,9 +4080,9 @@ if test "X$MPIFC" = "X" ; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MPIFC+:} false; then : +if test "${ac_cv_prog_MPIFC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$MPIFC"; then @@ -4190,24 +4093,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPIFC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi MPIFC=$ac_cv_prog_MPIFC if test -n "$MPIFC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIFC" >&5 + { $as_echo "$as_me:$LINENO: result: $MPIFC" >&5 $as_echo "$MPIFC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4227,9 +4130,9 @@ fi do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MPIFC+:} false; then : +if test "${ac_cv_prog_MPIFC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$MPIFC"; then @@ -4240,24 +4143,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPIFC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi MPIFC=$ac_cv_prog_MPIFC if test -n "$MPIFC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIFC" >&5 + { $as_echo "$as_me:$LINENO: result: $MPIFC" >&5 $as_echo "$MPIFC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4272,159 +4175,305 @@ test -n "$MPIFC" || MPIFC="$FC" if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init" >&5 $as_echo_n "checking for MPI_Init... " >&6; } - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then MPILIBS=" " - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lfmpi" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lfmpi" >&5 $as_echo_n "checking for MPI_Init in -lfmpi... " >&6; } -if ${ac_cv_lib_fmpi_MPI_Init+:} false; then : +if test "${ac_cv_lib_fmpi_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfmpi $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_fmpi_MPI_Init=yes else - ac_cv_lib_fmpi_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_fmpi_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fmpi_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_fmpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_fmpi_MPI_Init" >&6; } -if test "x$ac_cv_lib_fmpi_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_fmpi_MPI_Init" = x""yes; then MPILIBS="-lfmpi" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpichf90" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpichf90" >&5 $as_echo_n "checking for MPI_Init in -lmpichf90... " >&6; } -if ${ac_cv_lib_mpichf90_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpichf90_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpichf90 $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpichf90_MPI_Init=yes else - ac_cv_lib_mpichf90_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpichf90_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpichf90_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpichf90_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpichf90_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpichf90_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpichf90_MPI_Init" = x""yes; then MPILIBS="-lmpichf90" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpi" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpi" >&5 $as_echo_n "checking for MPI_Init in -lmpi... " >&6; } -if ${ac_cv_lib_mpi_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpi_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpi $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpi_MPI_Init=yes else - ac_cv_lib_mpi_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpi_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpi_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpi_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpi_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpi_MPI_Init" = x""yes; then MPILIBS="-lmpi" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpich" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpich" >&5 $as_echo_n "checking for MPI_Init in -lmpich... " >&6; } -if ${ac_cv_lib_mpich_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpich_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpich $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpich_MPI_Init=yes else - ac_cv_lib_mpich_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpich_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpich_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpich_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpich_MPI_Init" = x""yes; then MPILIBS="-lmpich" fi fi if test x != x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpif.h" >&5 + { $as_echo "$as_me:$LINENO: checking for mpif.h" >&5 $as_echo_n "checking for mpif.h... " >&6; } - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main include 'mpif.h' end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - MPILIBS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + MPILIBS="" + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -4434,11 +4483,15 @@ FC="$acx_mpi_save_FC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then - as_fn_error $? "Cannot find any suitable MPI implementation for Fortran" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Cannot find any suitable MPI implementation for Fortran" >&5 +$as_echo "$as_me: error: Cannot find any suitable MPI implementation for Fortran" >&2;} + { (exit 1); exit 1; }; } : else -$as_echo "#define HAVE_MPI 1" >>confdefs.h +cat >>confdefs.h <<\_ACEOF +#define HAVE_MPI 1 +_ACEOF : fi @@ -4455,9 +4508,9 @@ if test "X$MPIF77" = "X" ; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MPIF77+:} false; then : +if test "${ac_cv_prog_MPIF77+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$MPIF77"; then @@ -4468,24 +4521,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPIF77="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi MPIF77=$ac_cv_prog_MPIF77 if test -n "$MPIF77"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF77" >&5 + { $as_echo "$as_me:$LINENO: result: $MPIF77" >&5 $as_echo "$MPIF77" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4504,9 +4557,9 @@ fi do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MPIF77+:} false; then : +if test "${ac_cv_prog_MPIF77+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$MPIF77"; then @@ -4517,24 +4570,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MPIF77="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi MPIF77=$ac_cv_prog_MPIF77 if test -n "$MPIF77"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF77" >&5 + { $as_echo "$as_me:$LINENO: result: $MPIF77" >&5 $as_echo "$MPIF77" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4549,159 +4602,305 @@ test -n "$MPIF77" || MPIF77="$F77" if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init" >&5 $as_echo_n "checking for MPI_Init... " >&6; } - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_f77_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then MPILIBS=" " - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lfmpi" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lfmpi" >&5 $as_echo_n "checking for MPI_Init in -lfmpi... " >&6; } -if ${ac_cv_lib_fmpi_MPI_Init+:} false; then : +if test "${ac_cv_lib_fmpi_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfmpi $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_f77_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_fmpi_MPI_Init=yes else - ac_cv_lib_fmpi_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_fmpi_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fmpi_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_fmpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_fmpi_MPI_Init" >&6; } -if test "x$ac_cv_lib_fmpi_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_fmpi_MPI_Init" = x""yes; then MPILIBS="-lfmpi" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lfmpich" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lfmpich" >&5 $as_echo_n "checking for MPI_Init in -lfmpich... " >&6; } -if ${ac_cv_lib_fmpich_MPI_Init+:} false; then : +if test "${ac_cv_lib_fmpich_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfmpich $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_f77_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_fmpich_MPI_Init=yes else - ac_cv_lib_fmpich_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_fmpich_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fmpich_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_fmpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_fmpich_MPI_Init" >&6; } -if test "x$ac_cv_lib_fmpich_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_fmpich_MPI_Init" = x""yes; then MPILIBS="-lfmpich" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpi" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpi" >&5 $as_echo_n "checking for MPI_Init in -lmpi... " >&6; } -if ${ac_cv_lib_mpi_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpi_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpi $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_f77_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpi_MPI_Init=yes else - ac_cv_lib_mpi_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpi_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpi_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpi_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpi_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpi_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpi_MPI_Init" = x""yes; then MPILIBS="-lmpi" fi fi if test x = x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Init in -lmpich" >&5 + { $as_echo "$as_me:$LINENO: checking for MPI_Init in -lmpich" >&5 $as_echo_n "checking for MPI_Init in -lmpich... " >&6; } -if ${ac_cv_lib_mpich_MPI_Init+:} false; then : +if test "${ac_cv_lib_mpich_MPI_Init+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmpich $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call MPI_Init end _ACEOF -if ac_fn_f77_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_mpich_MPI_Init=yes else - ac_cv_lib_mpich_MPI_Init=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_mpich_MPI_Init=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Init" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mpich_MPI_Init" >&5 $as_echo "$ac_cv_lib_mpich_MPI_Init" >&6; } -if test "x$ac_cv_lib_mpich_MPI_Init" = xyes; then : +if test "x$ac_cv_lib_mpich_MPI_Init" = x""yes; then MPILIBS="-lmpich" fi fi if test x != x"$MPILIBS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpif.h" >&5 + { $as_echo "$as_me:$LINENO: checking for mpif.h" >&5 $as_echo_n "checking for mpif.h... " >&6; } - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main include 'mpif.h' end _ACEOF -if ac_fn_f77_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - MPILIBS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + MPILIBS="" + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -4711,11 +4910,15 @@ F77="$acx_mpi_save_F77" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x = x"$MPILIBS"; then - as_fn_error $? "Cannot find any suitable MPI implementation for Fortran 77" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Cannot find any suitable MPI implementation for Fortran 77" >&5 +$as_echo "$as_me: error: Cannot find any suitable MPI implementation for Fortran 77" >&2;} + { (exit 1); exit 1; }; } : else -$as_echo "#define HAVE_MPI 1" >>confdefs.h +cat >>confdefs.h <<\_ACEOF +#define HAVE_MPI 1 +_ACEOF : fi @@ -4739,11 +4942,15 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ############################################################################### if test "X$MPIFC" == "X" ; then - as_fn_error $? "Problem : No MPI Fortran compiler specified nor found!" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Problem : No MPI Fortran compiler specified nor found!" >&5 +$as_echo "$as_me: error: Problem : No MPI Fortran compiler specified nor found!" >&2;} + { (exit 1); exit 1; }; } fi if test "X$MPICC" == "X" ; then - as_fn_error $? "Problem : No MPI C compiler specified nor found!" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Problem : No MPI C compiler specified nor found!" >&5 +$as_echo "$as_me: error: Problem : No MPI C compiler specified nor found!" >&2;} + { (exit 1); exit 1; }; } fi ############################################################################### @@ -4751,36 +4958,36 @@ fi ############################################################################### -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional CCOPT flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional CCOPT flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional CCOPT flags should be added (should be invoked only once)... " >&6; } # Check whether --with-ccopt was given. -if test "${with_ccopt+set}" = set; then : +if test "${with_ccopt+set}" = set; then withval=$with_ccopt; CCOPT="${withval} ${CCOPT}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: CCOPT = ${CCOPT}" >&5 +{ $as_echo "$as_me:$LINENO: result: CCOPT = ${CCOPT}" >&5 $as_echo "CCOPT = ${CCOPT}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional FCOPT flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional FCOPT flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional FCOPT flags should be added (should be invoked only once)... " >&6; } # Check whether --with-fcopt was given. -if test "${with_fcopt+set}" = set; then : +if test "${with_fcopt+set}" = set; then withval=$with_fcopt; FCOPT="${withval} ${FCOPT}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: FCOPT = ${FCOPT}" >&5 +{ $as_echo "$as_me:$LINENO: result: FCOPT = ${FCOPT}" >&5 $as_echo "FCOPT = ${FCOPT}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4789,18 +4996,18 @@ fi #PAC_ARG_WITH_FLAGS(f90copt,F90COPT) #PAC_ARG_WITH_FLAGS(ldflags,LDFLAGS) -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional libraries are needed" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional libraries are needed" >&5 $as_echo_n "checking whether additional libraries are needed... " >&6; } # Check whether --with-libs was given. -if test "${with_libs+set}" = set; then : +if test "${with_libs+set}" = set; then withval=$with_libs; LIBS="${withval} ${LIBS}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: LIBS = ${LIBS}" >&5 +{ $as_echo "$as_me:$LINENO: result: LIBS = ${LIBS}" >&5 $as_echo "LIBS = ${LIBS}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4808,36 +5015,36 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional CLIBS flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional CLIBS flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional CLIBS flags should be added (should be invoked only once)... " >&6; } # Check whether --with-clibs was given. -if test "${with_clibs+set}" = set; then : +if test "${with_clibs+set}" = set; then withval=$with_clibs; CLIBS="${withval} ${CLIBS}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: CLIBS = ${CLIBS}" >&5 +{ $as_echo "$as_me:$LINENO: result: CLIBS = ${CLIBS}" >&5 $as_echo "CLIBS = ${CLIBS}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional FLIBS flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional FLIBS flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional FLIBS flags should be added (should be invoked only once)... " >&6; } # Check whether --with-flibs was given. -if test "${with_flibs+set}" = set; then : +if test "${with_flibs+set}" = set; then withval=$with_flibs; FLIBS="${withval} ${FLIBS}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: FLIBS = ${FLIBS}" >&5 +{ $as_echo "$as_me:$LINENO: result: FLIBS = ${FLIBS}" >&5 $as_echo "FLIBS = ${FLIBS}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4845,54 +5052,54 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional LIBRARYPATH flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional LIBRARYPATH flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional LIBRARYPATH flags should be added (should be invoked only once)... " >&6; } # Check whether --with-library-path was given. -if test "${with_library_path+set}" = set; then : +if test "${with_library_path+set}" = set; then withval=$with_library_path; LIBRARYPATH="${withval} ${LIBRARYPATH}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: LIBRARYPATH = ${LIBRARYPATH}" >&5 +{ $as_echo "$as_me:$LINENO: result: LIBRARYPATH = ${LIBRARYPATH}" >&5 $as_echo "LIBRARYPATH = ${LIBRARYPATH}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional INCLUDEPATH flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional INCLUDEPATH flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional INCLUDEPATH flags should be added (should be invoked only once)... " >&6; } # Check whether --with-include-path was given. -if test "${with_include_path+set}" = set; then : +if test "${with_include_path+set}" = set; then withval=$with_include_path; INCLUDEPATH="${withval} ${INCLUDEPATH}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: INCLUDEPATH = ${INCLUDEPATH}" >&5 +{ $as_echo "$as_me:$LINENO: result: INCLUDEPATH = ${INCLUDEPATH}" >&5 $as_echo "INCLUDEPATH = ${INCLUDEPATH}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether additional MODULE_PATH flags should be added (should be invoked only once)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether additional MODULE_PATH flags should be added (should be invoked only once)" >&5 $as_echo_n "checking whether additional MODULE_PATH flags should be added (should be invoked only once)... " >&6; } # Check whether --with-module-path was given. -if test "${with_module_path+set}" = set; then : +if test "${with_module_path+set}" = set; then withval=$with_module_path; MODULE_PATH="${withval} ${MODULE_PATH}" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: MODULE_PATH = ${MODULE_PATH}" >&5 +{ $as_echo "$as_me:$LINENO: result: MODULE_PATH = ${MODULE_PATH}" >&5 $as_echo "MODULE_PATH = ${MODULE_PATH}" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4906,9 +5113,9 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : +if test "${ac_cv_prog_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then @@ -4919,24 +5126,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4946,9 +5153,9 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then @@ -4959,24 +5166,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -4985,7 +5192,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -4996,75 +5203,70 @@ else fi -am__api_version='1.15' +am__api_version='1.11' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; + { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 +$as_echo "$as_me: error: unsafe absolute working directory name" >&2;} + { (exit 1); exit 1; }; };; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; + { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 +$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} + { (exit 1); exit 1; }; };; esac -# Do 'set' in a subshell so we don't clobber the current shell's +# Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + test "$2" = conftest.file ) then # Ok. : else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +$as_echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +{ $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -5075,6 +5277,9 @@ test "$program_suffix" != NONE && ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) @@ -5084,15 +5289,15 @@ if test x"${MISSING+set}" != xset; then esac fi # Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi -if test x"${install_sh+set}" != xset; then +if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -5101,17 +5306,17 @@ if test x"${install_sh+set}" != xset; then esac fi -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. +# will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : +if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then @@ -5122,24 +5327,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -5149,9 +5354,9 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then @@ -5162,24 +5367,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -5188,7 +5393,7 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac @@ -5201,10 +5406,10 @@ fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : + if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5212,9 +5417,9 @@ for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do + for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ @@ -5224,12 +5429,11 @@ do esac done done - done +done IFS=$as_save_IFS fi - test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -5237,19 +5441,26 @@ fi # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : +if test "${ac_cv_prog_AWK+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then @@ -5260,24 +5471,24 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done - done +done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi @@ -5285,11 +5496,11 @@ fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -5297,7 +5508,7 @@ SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; @@ -5307,11 +5518,11 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -5337,14 +5548,14 @@ am__doit: .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. +# Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include @@ -5365,19 +5576,18 @@ if test "$am__include" = "#"; then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : +if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' - am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= @@ -5388,52 +5598,15 @@ else fi -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } fi fi @@ -5477,42 +5650,30 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -mkdir_p='$(MKDIR_P)' +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' +AMTAR=${AMTAR-"${am_missing_run}tar"} +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. @@ -5546,16 +5707,16 @@ else : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - # We check with '-c' and '-o' for the sake of the "dashmstdout" + # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in @@ -5564,16 +5725,16 @@ else test "$am__universal" = false || continue ;; nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} @@ -5612,7 +5773,7 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type @@ -5628,48 +5789,6 @@ fi -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - @@ -5679,7 +5798,7 @@ fi psblas_cv_fc="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU Fortran" >&5 +{ $as_echo "$as_me:$LINENO: checking for GNU Fortran" >&5 $as_echo_n "checking for GNU Fortran... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -5689,7 +5808,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main #ifdef __GNUC__ @@ -5699,17 +5818,38 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu #endif end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } psblas_cv_fc="gcc" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5719,7 +5859,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Cray Fortran" >&5 +{ $as_echo "$as_me:$LINENO: checking for Cray Fortran" >&5 $as_echo_n "checking for Cray Fortran... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -5729,7 +5869,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main #ifdef _CRAYFTN @@ -5739,17 +5879,38 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu #endif end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } psblas_cv_fc="cray" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5791,12 +5952,12 @@ if test x"$psblas_cv_fc" == "x" ; then else psblas_cv_fc="" # unsupported MPI Fortran compiler - { $as_echo "$as_me:${as_lineno-$LINENO}: Unknown Fortran compiler, proceeding with fingers crossed !" >&5 + { $as_echo "$as_me:$LINENO: Unknown Fortran compiler, proceeding with fingers crossed !" >&5 $as_echo "$as_me: Unknown Fortran compiler, proceeding with fingers crossed !" >&6;} fi fi if test "X$psblas_cv_fc" == "Xgcc" ; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for recent GNU Fortran" >&5 +{ $as_echo "$as_me:$LINENO: checking for recent GNU Fortran" >&5 $as_echo_n "checking for recent GNU Fortran... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -5806,7 +5967,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main #if ( __GNUC__ >= 4 && __GNUC_MINOR__ >= 8 ) || ( __GNUC__ > 4 ) @@ -5816,20 +5977,43 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu #endif end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: Sorry, we require GNU Fortran version 4.8.4 or later." >&5 + { $as_echo "$as_me:$LINENO: Sorry, we require GNU Fortran version 4.8.4 or later." >&5 $as_echo "$as_me: Sorry, we require GNU Fortran version 4.8.4 or later." >&6;} echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Bailing out." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Bailing out." >&5 +$as_echo "$as_me: error: Bailing out." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5860,14 +6044,14 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : + if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded @@ -5882,7 +6066,11 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include @@ -5891,34 +6079,78 @@ do #endif Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.i conftest.$ac_ext + +rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then # Broken: success on invalid input. continue else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Passes both tests. ac_preproc_ok=: break fi -rm -f conftest.err conftest.i conftest.$ac_ext + +rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then break fi @@ -5930,7 +6162,7 @@ fi else ac_cv_prog_CPP=$CPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes @@ -5941,7 +6173,11 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include @@ -5950,40 +6186,87 @@ do #endif Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.i conftest.$ac_ext + +rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then # Broken: success on invalid input. continue else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Passes both tests. ac_preproc_ok=: break fi -rm -f conftest.err conftest.i conftest.$ac_ext + +rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } fi ac_ext=c @@ -5993,9 +6276,9 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : +if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then @@ -6006,10 +6289,10 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in @@ -6026,7 +6309,7 @@ case `"$ac_path_GREP" --version 2>&1` in $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val + ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -6041,24 +6324,26 @@ esac $ac_path_GREP_found && break 3 done done - done +done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : +if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 @@ -6072,10 +6357,10 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in @@ -6092,7 +6377,7 @@ case `"$ac_path_EGREP" --version 2>&1` in $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val + ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -6107,10 +6392,12 @@ esac $ac_path_EGREP_found && break 3 done done - done +done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP @@ -6118,17 +6405,21 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : +if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include @@ -6143,23 +6434,48 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else - ac_cv_header_stdc=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - + $EGREP "memchr" >/dev/null 2>&1; then + : else ac_cv_header_stdc=no fi @@ -6169,14 +6485,18 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - + $EGREP "free" >/dev/null 2>&1; then + : else ac_cv_header_stdc=no fi @@ -6186,10 +6506,14 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes; then : else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include @@ -6216,33 +6540,118 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : else - ac_cv_header_stdc=no + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi + fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -6256,26 +6665,352 @@ done # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +{ $as_echo "$as_me:$LINENO: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } -if ${ac_cv_sizeof_void_p+:} false; then : +if test "${ac_cv_sizeof_void_p+set}" = set; then $as_echo_n "(cached) " >&6 else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (void *))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (void *))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (void *))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (void *))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long int) (sizeof (void *))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_void_p=$ac_lo;; +'') if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (void *) +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute sizeof (void *) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } + else + ac_cv_sizeof_void_p=0 + fi ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +static long int longval () { return (long int) (sizeof (void *)); } +static unsigned long int ulongval () { return (long int) (sizeof (void *)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (((long int) (sizeof (void *))) < 0) + { + long int i = longval (); + if (i != ((long int) (sizeof (void *)))) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ((long int) (sizeof (void *)))) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_void_p=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -else - if test "$ac_cv_type_void_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +( exit $ac_status ) +if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (void *) -See \`config.log' for more details" "$LINENO" 5; } +{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (void *) +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute sizeof (void *) +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } else ac_cv_sizeof_void_p=0 fi fi - +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } @@ -6298,12 +7033,12 @@ if test "X$psblas_cv_fc" == X"pg" ; then save_FC=$FC FC=$F77 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 +{ $as_echo "$as_me:$LINENO: checking for Fortran name-mangling scheme" >&5 $as_echo_n "checking for Fortran name-mangling scheme... " >&6; } -if ${ac_cv_fc_mangling+:} false; then : +if test "${ac_cv_fc_mangling+set}" = set; then $as_echo_n "(cached) " >&6 else - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF subroutine foobar() return end @@ -6311,7 +7046,24 @@ else return end _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS @@ -6326,7 +7078,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -6344,11 +7100,38 @@ return $ac_func (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_success=yes; break 2 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} @@ -6376,7 +7159,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -6394,11 +7181,38 @@ return $ac_func (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_success_extra=yes; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -6407,16 +7221,16 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" - if test -z "$ac_underscore"; then - ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" + if test -z "$ac_underscore"; then + ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else - ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" - fi - if test -z "$ac_extra"; then - ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" + ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" + fi + if test -z "$ac_extra"; then + ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else - ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" - fi + ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" + fi else ac_cv_fc_mangling="unknown" fi @@ -6428,15 +7242,22 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu rm -rf conftest* rm -f cfortran_test* else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compile a simple Fortran program -See \`config.log' for more details" "$LINENO" 5; } +{ { $as_echo "$as_me:$LINENO: error: cannot compile a simple Fortran program +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compile a simple Fortran program +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_fc_mangling" >&5 $as_echo "$ac_cv_fc_mangling" >&6; } if test "X$psblas_cv_fc" == X"pg" ; then @@ -6454,7 +7275,7 @@ pac_fc_sec_under=${pac_fc_under#*,} pac_fc_sec_under=${pac_fc_sec_under# } pac_fc_under=${pac_fc_under%%,*} pac_fc_under=${pac_fc_under# } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking defines for C/Fortran name interfaces" >&5 +{ $as_echo "$as_me:$LINENO: checking defines for C/Fortran name interfaces" >&5 $as_echo_n "checking defines for C/Fortran name interfaces... " >&6; } if test "x$pac_fc_case" == "xlower case"; then if test "x$pac_fc_under" == "xunderscore"; then @@ -6489,7 +7310,7 @@ else fi CDEFINES="$pac_f_c_names $CDEFINES" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_f_c_names " >&5 +{ $as_echo "$as_me:$LINENO: result: $pac_f_c_names " >&5 $as_echo " $pac_f_c_names " >&6; } ############################################################################### @@ -6648,9 +7469,9 @@ then else -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking fortran 90 modules extension" >&5 +{ $as_echo "$as_me:$LINENO: checking fortran 90 modules extension" >&5 $as_echo_n "checking fortran 90 modules extension... " >&6; } -if ${ax_cv_f90_modext+:} false; then : +if test "${ax_cv_f90_modext+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=${ac_fc_srcext-f} @@ -6664,7 +7485,7 @@ while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do done mkdir tmpdir_$i cd tmpdir_$i -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF module conftest_module contains @@ -6674,7 +7495,24 @@ cat > conftest.$ac_ext <<_ACEOF end module conftest_module _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ax_cv_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` if test x$ax_cv_f90_modext = x ; then ax_cv_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` @@ -6684,8 +7522,12 @@ if ac_fn_fc_try_compile "$LINENO"; then : fi else - ax_cv_f90_modext=unknown + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ax_cv_f90_modext=unknown fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cd .. rm -fr tmpdir_$i @@ -6697,12 +7539,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_f90_modext" >&5 +{ $as_echo "$as_me:$LINENO: result: $ax_cv_f90_modext" >&5 $as_echo "$ax_cv_f90_modext" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking fortran 90 modules inclusion flag" >&5 +{ $as_echo "$as_me:$LINENO: checking fortran 90 modules inclusion flag" >&5 $as_echo_n "checking fortran 90 modules inclusion flag... " >&6; } -if ${ax_cv_f90_modflag+:} false; then : +if test "${ax_cv_f90_modflag+set}" = set; then $as_echo_n "(cached) " >&6 else ac_ext=${ac_fc_srcext-f} @@ -6717,7 +7559,7 @@ done mkdir tmpdir_$i cd tmpdir_$i ac_ext='f90'; -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF module conftest_module contains @@ -6727,9 +7569,32 @@ cat > conftest.$ac_ext <<_ACEOF end module conftest_module _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cd ..; ax_cv_f90_modflag="not found" @@ -6737,7 +7602,7 @@ for ax_flag in "-I " "-M" "-p"; do if test "$ax_cv_f90_modflag" = "not found" ; then ax_save_FCFLAGS="$FCFLAGS" FCFLAGS="$ax_save_FCFLAGS ${ax_flag}tmpdir_$i" - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program conftest_program use conftest_module @@ -6745,16 +7610,41 @@ for ax_flag in "-I " "-M" "-p"; do end program conftest_program _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ax_cv_f90_modflag="$ax_flag" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS="$ax_save_FCFLAGS" fi done rm -fr tmpdir_$i if test "$ax_cv_f90_modflag" = "not found" ; then - as_fn_error $? "unable to find compiler flag for modules inclusion" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: unable to find compiler flag for modules inclusion" >&5 +$as_echo "$as_me: error: unable to find compiler flag for modules inclusion" >&2;} + { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6764,7 +7654,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_f90_modflag" >&5 +{ $as_echo "$as_me:$LINENO: result: $ax_cv_f90_modflag" >&5 $as_echo "$ax_cv_f90_modflag" >&6; } MODEXT=".$ax_cv_f90_modext" FMFLAG="${ax_cv_f90_modflag%% *}" @@ -6786,7 +7676,7 @@ fi if test x"$pac_cv_serial_mpi" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DSERIAL_MPI $psblas_cv_define_prepend-DMPI_MOD $FDEFINES"; else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking MPI Fortran 2008 interface" >&5 + { $as_echo "$as_me:$LINENO: checking MPI Fortran 2008 interface" >&5 $as_echo_n "checking MPI Fortran 2008 interface... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -6796,25 +7686,46 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program test use mpi_f08 end program test _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } pac_cv_mpi_f08="yes"; : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } pac_cv_mpi_f08="no"; echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6826,7 +7737,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x"$pac_cv_mpi_f08" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DMPI_MOD $FDEFINES"; else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran MPI mod" >&5 + { $as_echo "$as_me:$LINENO: checking for Fortran MPI mod" >&5 $as_echo_n "checking for Fortran MPI mod... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -6836,23 +7747,44 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program test use mpi end program test _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DMPI_MOD $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 FDEFINES="$psblas_cv_define_prepend-DMPI_H $FDEFINES" fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6865,10 +7797,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we want long (8 bytes) integers" >&5 +{ $as_echo "$as_me:$LINENO: checking whether we want long (8 bytes) integers" >&5 $as_echo_n "checking whether we want long (8 bytes) integers... " >&6; } # Check whether --enable-long-integers was given. -if test "${enable_long_integers+set}" = set; then : +if test "${enable_long_integers+set}" = set; then enableval=$enable_long_integers; pac_cv_long_integers="yes"; @@ -6876,17 +7808,18 @@ pac_cv_long_integers="yes"; fi if test x"$pac_cv_long_integers" == x"yes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes." >&5 + { $as_echo "$as_me:$LINENO: result: yes." >&5 $as_echo "yes." >&6; } else pac_cv_long_integers="no"; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no." >&5 + { $as_echo "$as_me:$LINENO: result: no." >&5 $as_echo "no." >&6; } fi if test x"$pac_cv_long_integers" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DLONG_INTEGERS $FDEFINES"; + CDEFINES="-DLONG_INTEGERS_ $CDEFINES"; fi # @@ -6897,7 +7830,7 @@ fi # # Critical features # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran allocatables TR15581" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran allocatables TR15581" >&5 $as_echo_n "checking support for Fortran allocatables TR15581... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -6907,7 +7840,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF module conftest type outer @@ -6959,19 +7892,43 @@ program testtr15581 end program testtr15581 _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Sorry, cannot build PSBLAS without support for TR15581. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Sorry, cannot build PSBLAS without support for TR15581. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&5 +$as_echo "$as_me: error: Sorry, cannot build PSBLAS without support for TR15581. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6984,7 +7941,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_exeext='' ac_ext='f90' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FCFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran EXTENDS" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran EXTENDS" >&5 $as_echo_n "checking support for Fortran EXTENDS... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -6994,7 +7951,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program conftest type foo @@ -7006,19 +7963,43 @@ program conftest type(bar) :: barvar end program conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Sorry, cannot build PSBLAS without support for EXTENDS. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Sorry, cannot build PSBLAS without support for EXTENDS. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&5 +$as_echo "$as_me: error: Sorry, cannot build PSBLAS without support for EXTENDS. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7028,7 +8009,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran CLASS TBP" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran CLASS TBP" >&5 $as_echo_n "checking support for Fortran CLASS TBP... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7038,7 +8019,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF module conftest_mod type foo @@ -7069,19 +8050,43 @@ program conftest type(foo) :: foovar end program conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Sorry, cannot build PSBLAS without support for CLASS and type bound procedures. - Please get a Fortran compiler that supports them, e.g. GNU Fortran 4.8." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Sorry, cannot build PSBLAS without support for CLASS and type bound procedures. + Please get a Fortran compiler that supports them, e.g. GNU Fortran 4.8." >&5 +$as_echo "$as_me: error: Sorry, cannot build PSBLAS without support for CLASS and type bound procedures. + Please get a Fortran compiler that supports them, e.g. GNU Fortran 4.8." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7091,7 +8096,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran SOURCE= allocation" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran SOURCE= allocation" >&5 $as_echo_n "checking support for Fortran SOURCE= allocation... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7101,7 +8106,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program xtt type foo @@ -7118,19 +8123,43 @@ program xtt end program xtt _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Sorry, cannot build PSBLAS without support for SOURCE= allocation. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Sorry, cannot build PSBLAS without support for SOURCE= allocation. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&5 +$as_echo "$as_me: error: Sorry, cannot build PSBLAS without support for SOURCE= allocation. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7140,7 +8169,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran MOVE_ALLOC intrinsic" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran MOVE_ALLOC intrinsic" >&5 $as_echo_n "checking support for Fortran MOVE_ALLOC intrinsic... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7148,7 +8177,7 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext='f90'; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program test_move_alloc integer, allocatable :: a(:), b(:) allocate(a(3)) @@ -7157,19 +8186,43 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu print *, b end program test_move_alloc _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_MOVE_ALLOC $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Sorry, cannot build PSBLAS without support for MOVE_ALLOC. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Sorry, cannot build PSBLAS without support for MOVE_ALLOC. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&5 +$as_echo "$as_me: error: Sorry, cannot build PSBLAS without support for MOVE_ALLOC. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7179,7 +8232,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran ISO_C_BINDING module" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran ISO_C_BINDING module" >&5 $as_echo_n "checking support for Fortran ISO_C_BINDING module... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7189,25 +8242,49 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program conftest use iso_c_binding end program conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_C_BINDING $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - as_fn_error $? "Sorry, cannot build PSBLAS without support for ISO_C_BINDING. - Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Sorry, cannot build PSBLAS without support for ISO_C_BINDING. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&5 +$as_echo "$as_me: error: Sorry, cannot build PSBLAS without support for ISO_C_BINDING. + Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8." >&2;} + { (exit 1); exit 1; }; } fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7221,7 +8298,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # Optional features # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran VOLATILE" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran VOLATILE" >&5 $as_echo_n "checking support for Fortran VOLATILE... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7231,23 +8308,44 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program conftest integer, volatile :: i, j end program conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_VOLATILE $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7257,7 +8355,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking test GENERIC interfaces" >&5 +{ $as_echo "$as_me:$LINENO: checking test GENERIC interfaces" >&5 $as_echo_n "checking test GENERIC interfaces... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7267,7 +8365,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='F90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF module conftest @@ -7283,18 +8381,39 @@ module conftest end module conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } : else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 FDEFINES="$psblas_cv_define_prepend-DHAVE_BUGGY_GENERICS $FDEFINES" fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7304,7 +8423,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FLUSH statement" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran FLUSH statement" >&5 $as_echo_n "checking support for Fortran FLUSH statement... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7314,7 +8433,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program conftest integer :: iunit=10 @@ -7324,17 +8443,38 @@ program conftest close(10) end program conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_FLUSH_STMT $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7344,7 +8484,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ISO_FORTRAN_ENV" >&5 +{ $as_echo "$as_me:$LINENO: checking support for ISO_FORTRAN_ENV" >&5 $as_echo_n "checking support for ISO_FORTRAN_ENV... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7354,23 +8494,44 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program test use iso_fortran_env end program test _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_ISO_FORTRAN_ENV $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7380,7 +8541,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran FINAL" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran FINAL" >&5 $as_echo_n "checking support for Fortran FINAL... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7390,7 +8551,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF module conftest_mod type foo @@ -7411,17 +8572,38 @@ program conftest type(foo) :: foovar end program conftest _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_FINAL $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7431,7 +8613,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran SAME_TYPE_AS" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran SAME_TYPE_AS" >&5 $as_echo_n "checking support for Fortran SAME_TYPE_AS... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7441,7 +8623,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program stt type foo @@ -7458,17 +8640,38 @@ program stt write(*,*) 'nfv2 == nfv1? ', same_type_as(nfv2,nfv1) end program stt _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_SAME_TYPE_AS $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7478,7 +8681,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran EXTENDS_TYPE_OF" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran EXTENDS_TYPE_OF" >&5 $as_echo_n "checking support for Fortran EXTENDS_TYPE_OF... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7488,7 +8691,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program xtt type foo @@ -7503,17 +8706,38 @@ program xtt write(*,*) 'nfv1 extends foov? ', extends_type_of(nfv1,foov) end program xtt _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_EXTENDS_TYPE_OF $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7523,7 +8747,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking support for Fortran MOLD= allocation" >&5 +{ $as_echo "$as_me:$LINENO: checking support for Fortran MOLD= allocation" >&5 $as_echo_n "checking support for Fortran MOLD= allocation... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -7533,7 +8757,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_exeext='' ac_ext='f90' ac_fc=${MPIFC-$FC}; - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program xtt type foo @@ -7550,17 +8774,38 @@ program xtt end program xtt _ACEOF -if ac_fn_fc_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } FDEFINES="$psblas_cv_define_prepend-DHAVE_MOLD $FDEFINES" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7623,7 +8868,7 @@ pac_blas_ok=no # Check whether --with-blas was given. -if test "${with_blas+set}" = set; then : +if test "${with_blas+set}" = set; then withval=$with_blas; fi @@ -7635,7 +8880,7 @@ case $with_blas in esac # Check whether --with-blasdir was given. -if test "${with_blasdir+set}" = set; then : +if test "${with_blasdir+set}" = set; then withval=$with_blasdir; fi @@ -7661,21 +8906,46 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test $pac_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $BLAS_LIBDIR $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in $BLAS_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in $BLAS_LIBS" >&5 $as_echo_n "checking for sgemm in $BLAS_LIBS... " >&6; } - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then pac_blas_ok=yes else - BLAS_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + BLAS_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_blas_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_blas_ok" >&5 $as_echo "$pac_blas_ok" >&6; } LIBS="$save_LIBS" fi @@ -7690,14 +8960,18 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATL_xerbla in -latlas" >&5 + { $as_echo "$as_me:$LINENO: checking for ATL_xerbla in -latlas" >&5 $as_echo_n "checking for ATL_xerbla in -latlas... " >&6; } -if ${ac_cv_lib_atlas_ATL_xerbla+:} false; then : +if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-latlas $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -7715,61 +8989,115 @@ return ATL_xerbla (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_atlas_ATL_xerbla=yes else - ac_cv_lib_atlas_ATL_xerbla=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_atlas_ATL_xerbla=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 $as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; } -if test "x$ac_cv_lib_atlas_ATL_xerbla" = xyes; then : +if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lf77blas" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lf77blas" >&5 $as_echo_n "checking for sgemm in -lf77blas... " >&6; } -if ${ac_cv_lib_f77blas_sgemm+:} false; then : +if test "${ac_cv_lib_f77blas_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lf77blas -latlas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_f77blas_sgemm=yes else - ac_cv_lib_f77blas_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_f77blas_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_f77blas_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_f77blas_sgemm" >&5 $as_echo "$ac_cv_lib_f77blas_sgemm" >&6; } -if test "x$ac_cv_lib_f77blas_sgemm" = xyes; then : +if test "x$ac_cv_lib_f77blas_sgemm" = x""yes; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_dgemm in -lcblas" >&5 + { $as_echo "$as_me:$LINENO: checking for cblas_dgemm in -lcblas" >&5 $as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; } -if ${ac_cv_lib_cblas_cblas_dgemm+:} false; then : +if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcblas -lf77blas -latlas $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -7787,18 +9115,43 @@ return cblas_dgemm (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_cblas_cblas_dgemm=yes else - ac_cv_lib_cblas_cblas_dgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_cblas_cblas_dgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 $as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; } -if test "x$ac_cv_lib_cblas_cblas_dgemm" = xyes; then : +if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then pac_blas_ok=yes BLAS_LIBS="-lcblas -lf77blas -latlas $BLAS_LIBDIR" fi @@ -7816,14 +9169,18 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATL_xerbla in -lsatlas" >&5 + { $as_echo "$as_me:$LINENO: checking for ATL_xerbla in -lsatlas" >&5 $as_echo_n "checking for ATL_xerbla in -lsatlas... " >&6; } -if ${ac_cv_lib_satlas_ATL_xerbla+:} false; then : +if test "${ac_cv_lib_satlas_ATL_xerbla+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsatlas $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -7841,61 +9198,115 @@ return ATL_xerbla (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_satlas_ATL_xerbla=yes else - ac_cv_lib_satlas_ATL_xerbla=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_satlas_ATL_xerbla=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_satlas_ATL_xerbla" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_satlas_ATL_xerbla" >&5 $as_echo "$ac_cv_lib_satlas_ATL_xerbla" >&6; } -if test "x$ac_cv_lib_satlas_ATL_xerbla" = xyes; then : +if test "x$ac_cv_lib_satlas_ATL_xerbla" = x""yes; then ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lsatlas" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lsatlas" >&5 $as_echo_n "checking for sgemm in -lsatlas... " >&6; } -if ${ac_cv_lib_satlas_sgemm+:} false; then : +if test "${ac_cv_lib_satlas_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsatlas -lsatlas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_satlas_sgemm=yes else - ac_cv_lib_satlas_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_satlas_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_satlas_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_satlas_sgemm" >&5 $as_echo "$ac_cv_lib_satlas_sgemm" >&6; } -if test "x$ac_cv_lib_satlas_sgemm" = xyes; then : +if test "x$ac_cv_lib_satlas_sgemm" = x""yes; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_dgemm in -lsatlas" >&5 + { $as_echo "$as_me:$LINENO: checking for cblas_dgemm in -lsatlas" >&5 $as_echo_n "checking for cblas_dgemm in -lsatlas... " >&6; } -if ${ac_cv_lib_satlas_cblas_dgemm+:} false; then : +if test "${ac_cv_lib_satlas_cblas_dgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsatlas -lsatlas $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -7913,18 +9324,43 @@ return cblas_dgemm (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_satlas_cblas_dgemm=yes else - ac_cv_lib_satlas_cblas_dgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_satlas_cblas_dgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_satlas_cblas_dgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_satlas_cblas_dgemm" >&5 $as_echo "$ac_cv_lib_satlas_cblas_dgemm" >&6; } -if test "x$ac_cv_lib_satlas_cblas_dgemm" = xyes; then : +if test "x$ac_cv_lib_satlas_cblas_dgemm" = x""yes; then pac_blas_ok=yes BLAS_LIBS="-lsatlas $BLAS_LIBDIR" fi @@ -7943,78 +9379,153 @@ ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lblas" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lblas" >&5 $as_echo_n "checking for sgemm in -lblas... " >&6; } -if ${ac_cv_lib_blas_sgemm+:} false; then : +if test "${ac_cv_lib_blas_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_blas_sgemm=yes else - ac_cv_lib_blas_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_blas_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blas_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_blas_sgemm" >&5 $as_echo "$ac_cv_lib_blas_sgemm" >&6; } -if test "x$ac_cv_lib_blas_sgemm" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgemm in -ldgemm" >&5 +if test "x$ac_cv_lib_blas_sgemm" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for dgemm in -ldgemm" >&5 $as_echo_n "checking for dgemm in -ldgemm... " >&6; } -if ${ac_cv_lib_dgemm_dgemm+:} false; then : +if test "${ac_cv_lib_dgemm_dgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldgemm -lblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call dgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_dgemm_dgemm=yes else - ac_cv_lib_dgemm_dgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dgemm_dgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dgemm_dgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dgemm_dgemm" >&5 $as_echo "$ac_cv_lib_dgemm_dgemm" >&6; } -if test "x$ac_cv_lib_dgemm_dgemm" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lsgemm" >&5 +if test "x$ac_cv_lib_dgemm_dgemm" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for sgemm in -lsgemm" >&5 $as_echo_n "checking for sgemm in -lsgemm... " >&6; } -if ${ac_cv_lib_sgemm_sgemm+:} false; then : +if test "${ac_cv_lib_sgemm_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsgemm -lblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_sgemm_sgemm=yes else - ac_cv_lib_sgemm_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_sgemm_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sgemm_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_sgemm_sgemm" >&5 $as_echo "$ac_cv_lib_sgemm_sgemm" >&6; } -if test "x$ac_cv_lib_sgemm_sgemm" = xyes; then : +if test "x$ac_cv_lib_sgemm_sgemm" = x""yes; then pac_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas $BLAS_LIBDIR" fi @@ -8032,60 +9543,110 @@ ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lopenblas" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lopenblas" >&5 $as_echo_n "checking for sgemm in -lopenblas... " >&6; } -if ${ac_cv_lib_openblas_sgemm+:} false; then : +if test "${ac_cv_lib_openblas_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lopenblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_openblas_sgemm=yes else - ac_cv_lib_openblas_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_openblas_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_openblas_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_openblas_sgemm" >&5 $as_echo "$ac_cv_lib_openblas_sgemm" >&6; } -if test "x$ac_cv_lib_openblas_sgemm" = xyes; then : +if test "x$ac_cv_lib_openblas_sgemm" = x""yes; then pac_blas_ok=yes;BLAS_LIBS="-lopenblas $BLAS_LIBDIR" fi fi # BLAS in Alpha CXML library? if test $pac_blas_ok = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lcxml" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lcxml" >&5 $as_echo_n "checking for sgemm in -lcxml... " >&6; } -if ${ac_cv_lib_cxml_sgemm+:} false; then : +if test "${ac_cv_lib_cxml_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcxml $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_cxml_sgemm=yes else - ac_cv_lib_cxml_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_cxml_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cxml_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cxml_sgemm" >&5 $as_echo "$ac_cv_lib_cxml_sgemm" >&6; } -if test "x$ac_cv_lib_cxml_sgemm" = xyes; then : +if test "x$ac_cv_lib_cxml_sgemm" = x""yes; then pac_blas_ok=yes;BLAS_LIBS="-lcxml $BLAS_LIBDIR" fi @@ -8093,30 +9654,55 @@ fi # BLAS in Alpha DXML library? (now called CXML, see above) if test $pac_blas_ok = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -ldxml" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -ldxml" >&5 $as_echo_n "checking for sgemm in -ldxml... " >&6; } -if ${ac_cv_lib_dxml_sgemm+:} false; then : +if test "${ac_cv_lib_dxml_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldxml $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_dxml_sgemm=yes else - ac_cv_lib_dxml_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dxml_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dxml_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dxml_sgemm" >&5 $as_echo "$ac_cv_lib_dxml_sgemm" >&6; } -if test "x$ac_cv_lib_dxml_sgemm" = xyes; then : +if test "x$ac_cv_lib_dxml_sgemm" = x""yes; then pac_blas_ok=yes;BLAS_LIBS="-ldxml $BLAS_LIBDIR" fi @@ -8126,54 +9712,104 @@ fi # BLAS in Sun Performance library? if test $pac_blas_ok = no; then if test "x$GCC" != xyes; then # only works with Sun CC - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acosp in -lsunmath" >&5 + { $as_echo "$as_me:$LINENO: checking for acosp in -lsunmath" >&5 $as_echo_n "checking for acosp in -lsunmath... " >&6; } -if ${ac_cv_lib_sunmath_acosp+:} false; then : +if test "${ac_cv_lib_sunmath_acosp+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsunmath $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call acosp end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_sunmath_acosp=yes else - ac_cv_lib_sunmath_acosp=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_sunmath_acosp=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunmath_acosp" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_sunmath_acosp" >&5 $as_echo "$ac_cv_lib_sunmath_acosp" >&6; } -if test "x$ac_cv_lib_sunmath_acosp" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lsunperf" >&5 +if test "x$ac_cv_lib_sunmath_acosp" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for sgemm in -lsunperf" >&5 $as_echo_n "checking for sgemm in -lsunperf... " >&6; } -if ${ac_cv_lib_sunperf_sgemm+:} false; then : +if test "${ac_cv_lib_sunperf_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsunperf -lsunmath $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_sunperf_sgemm=yes else - ac_cv_lib_sunperf_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_sunperf_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunperf_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_sunperf_sgemm" >&5 $as_echo "$ac_cv_lib_sunperf_sgemm" >&6; } -if test "x$ac_cv_lib_sunperf_sgemm" = xyes; then : +if test "x$ac_cv_lib_sunperf_sgemm" = x""yes; then BLAS_LIBS="-xlic_lib=sunperf -lsunmath $BLAS_LIBDIR" pac_blas_ok=yes fi @@ -8186,30 +9822,55 @@ fi # BLAS in SCSL library? (SGI/Cray Scientific Library) if test $pac_blas_ok = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lscs" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lscs" >&5 $as_echo_n "checking for sgemm in -lscs... " >&6; } -if ${ac_cv_lib_scs_sgemm+:} false; then : +if test "${ac_cv_lib_scs_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lscs $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_scs_sgemm=yes else - ac_cv_lib_scs_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_scs_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_scs_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_scs_sgemm" >&5 $as_echo "$ac_cv_lib_scs_sgemm" >&6; } -if test "x$ac_cv_lib_scs_sgemm" = xyes; then : +if test "x$ac_cv_lib_scs_sgemm" = x""yes; then pac_blas_ok=yes; BLAS_LIBS="-lscs $BLAS_LIBDIR" fi @@ -8218,31 +9879,59 @@ fi # BLAS in SGIMATH library? if test $pac_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_complib.sgimath_$sgemm" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcomplib.sgimath" >&5 +{ $as_echo "$as_me:$LINENO: checking for $sgemm in -lcomplib.sgimath" >&5 $as_echo_n "checking for $sgemm in -lcomplib.sgimath... " >&6; } -if eval \${$as_ac_Lib+:} false; then : +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcomplib.sgimath $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call $sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then eval "$as_ac_Lib=yes" else - eval "$as_ac_Lib=no" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then pac_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath $BLAS_LIBDIR" fi @@ -8251,55 +9940,108 @@ fi # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if test $pac_blas_ok = no; then as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 +{ $as_echo "$as_me:$LINENO: checking for $sgemm in -lblas" >&5 $as_echo_n "checking for $sgemm in -lblas... " >&6; } -if eval \${$as_ac_Lib+:} false; then : +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call $sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then eval "$as_ac_Lib=yes" else - eval "$as_ac_Lib=no" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lessl" >&5 +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for sgemm in -lessl" >&5 $as_echo_n "checking for sgemm in -lessl... " >&6; } -if ${ac_cv_lib_essl_sgemm+:} false; then : +if test "${ac_cv_lib_essl_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lessl -lblas $FLIBS $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_essl_sgemm=yes else - ac_cv_lib_essl_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_essl_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_essl_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_essl_sgemm" >&5 $as_echo "$ac_cv_lib_essl_sgemm" >&6; } -if test "x$ac_cv_lib_essl_sgemm" = xyes; then : +if test "x$ac_cv_lib_essl_sgemm" = x""yes; then pac_blas_ok=yes; BLAS_LIBS="-lessl -lblas $BLAS_LIBDIR" fi @@ -8313,30 +10055,56 @@ ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lblas" >&5 + +{ $as_echo "$as_me:$LINENO: checking for sgemm in -lblas" >&5 $as_echo_n "checking for sgemm in -lblas... " >&6; } -if ${ac_cv_lib_blas_sgemm+:} false; then : +if test "${ac_cv_lib_blas_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_blas_sgemm=yes else - ac_cv_lib_blas_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_blas_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blas_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_blas_sgemm" >&5 $as_echo "$ac_cv_lib_blas_sgemm" >&6; } -if test "x$ac_cv_lib_blas_sgemm" = xyes; then : +if test "x$ac_cv_lib_blas_sgemm" = x""yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBBLAS 1 _ACEOF @@ -8351,18 +10119,43 @@ fi # BLAS linked to by default? (happens on some supercomputers) if test $pac_blas_ok = no; then - cat > conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then pac_blas_ok=yes else - BLAS_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + BLAS_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi # Generic BLAS library? @@ -8372,30 +10165,55 @@ ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sgemm in -lblas" >&5 + { $as_echo "$as_me:$LINENO: checking for sgemm in -lblas" >&5 $as_echo_n "checking for sgemm in -lblas... " >&6; } -if ${ac_cv_lib_blas_sgemm+:} false; then : +if test "${ac_cv_lib_blas_sgemm+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lblas $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call sgemm end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then ac_cv_lib_blas_sgemm=yes else - ac_cv_lib_blas_sgemm=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_blas_sgemm=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blas_sgemm" >&5 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_blas_sgemm" >&5 $as_echo "$ac_cv_lib_blas_sgemm" >&6; } -if test "x$ac_cv_lib_blas_sgemm" = xyes; then : +if test "x$ac_cv_lib_blas_sgemm" = x""yes; then pac_blas_ok=yes; BLAS_LIBS="-lblas $BLAS_LIBDIR" fi @@ -8407,12 +10225,16 @@ LIBS="$pac_blas_save_LIBS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$pac_blas_ok" = xyes; then -$as_echo "#define HAVE_BLAS 1" >>confdefs.h +cat >>confdefs.h <<\_ACEOF +#define HAVE_BLAS 1 +_ACEOF : else pac_blas_ok=no - as_fn_error $? "Cannot find BLAS library, specify a path using --with-blas=DIR/LIB (for example --with-blas=/usr/path/lib/libcxml.a)" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: Cannot find BLAS library, specify a path using --with-blas=DIR/LIB (for example --with-blas=/usr/path/lib/libcxml.a)" >&5 +$as_echo "$as_me: error: Cannot find BLAS library, specify a path using --with-blas=DIR/LIB (for example --with-blas=/usr/path/lib/libcxml.a)" >&2;} + { (exit 1); exit 1; }; } fi @@ -8421,7 +10243,7 @@ pac_lapack_ok=no # Check whether --with-lapack was given. -if test "${with_lapack+set}" = set; then : +if test "${with_lapack+set}" = set; then withval=$with_lapack; fi @@ -8443,7 +10265,7 @@ fi # First, check LAPACK_LIBS environment variable if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cheev in $LAPACK_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for cheev in $LAPACK_LIBS" >&5 $as_echo_n "checking for cheev in $LAPACK_LIBS... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -8455,16 +10277,16 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu call cheev end EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then pac_lapack_ok=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 @@ -8485,7 +10307,7 @@ fi # LAPACK linked to by default? (is sometimes included in BLAS lib) if test $pac_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cheev in default libs" >&5 + { $as_echo "$as_me:$LINENO: checking for cheev in default libs" >&5 $as_echo_n "checking for cheev in default libs... " >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' @@ -8497,16 +10319,16 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu call cheev end EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then pac_lapack_ok=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 @@ -8531,31 +10353,59 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_ac_Lib=`$as_echo "ac_cv_lib_$lapack''_cheev" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cheev in -l$lapack" >&5 +{ $as_echo "$as_me:$LINENO: checking for cheev in -l$lapack" >&5 $as_echo_n "checking for cheev in -l$lapack... " >&6; } -if eval \${$as_ac_Lib+:} false; then : +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lapack $FLIBS $LIBS" -cat > conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF program main call cheev end _ACEOF -if ac_fn_fc_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then eval "$as_ac_Lib=yes" else - eval "$as_ac_Lib=no" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then pac_lapack_ok=yes; LAPACK_LIBS="-l$lapack" fi @@ -8603,16 +10453,16 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu #fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gnumake" >&5 +{ $as_echo "$as_me:$LINENO: checking for gnumake" >&5 $as_echo_n "checking for gnumake... " >&6; } MAKE=${MAKE:-make} if $MAKE --version 2>&1 | grep -e"GNU Make" >/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } psblas_make_gnumake='yes' else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } psblas_make_gnumake='no' fi @@ -8632,7 +10482,7 @@ fi # Check whether --with-rsb was given. -if test "${with_rsb+set}" = set; then : +if test "${with_rsb+set}" = set; then withval=$with_rsb; if test x"$withval" = xno; then want_rsb_libs= ; else if test x"$withval" = xyes ; then want_rsb_libs=yes ; else want_rsb_libs="$withval" ; fi ; fi else @@ -8657,7 +10507,7 @@ LIBS="$RSB_LIBS ${LIBS}" # Check whether --with-metis was given. -if test "${with_metis+set}" = set; then : +if test "${with_metis+set}" = set; then withval=$with_metis; psblas_cv_metis=$withval else psblas_cv_metis='-lmetis' @@ -8665,7 +10515,7 @@ fi # Check whether --with-metisdir was given. -if test "${with_metisdir+set}" = set; then : +if test "${with_metisdir+set}" = set; then withval=$with_metisdir; psblas_cv_metisdir=$withval else psblas_cv_metisdir='' @@ -8673,7 +10523,7 @@ fi # Check whether --with-metisincdir was given. -if test "${with_metisincdir+set}" = set; then : +if test "${with_metisincdir+set}" = set; then withval=$with_metisincdir; psblas_cv_metisincdir=$withval else psblas_cv_metisincdir='' @@ -8681,7 +10531,7 @@ fi # Check whether --with-metislibdir was given. -if test "${with_metislibdir+set}" = set; then : +if test "${with_metislibdir+set}" = set; then withval=$with_metislibdir; psblas_cv_metislibdir=$withval else psblas_cv_metislibdir='' @@ -8711,13 +10561,152 @@ if test "x$psblas_cv_metislibdir" != "x"; then METIS_LIBDIR="-L$psblas_cv_metislibdir" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: metis dir $psblas_cv_metisdir" >&5 +{ $as_echo "$as_me:$LINENO: metis dir $psblas_cv_metisdir" >&5 $as_echo "$as_me: metis dir $psblas_cv_metisdir" >&6;} + + for ac_header in limits.h metis.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ---------------------------------------------- ## +## Report this to salvatore.filippone@uniroma2.it ## +## ---------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -8733,13 +10722,152 @@ if test "x$pac_metis_header_ok" == "xno" ; then METIS_INCLUDES="-I$psblas_cv_metisdir/include -I$psblas_cv_metisdir/Include " CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for metis_h in $METIS_INCLUDES" >&5 + { $as_echo "$as_me:$LINENO: checking for metis_h in $METIS_INCLUDES" >&5 $as_echo_n "checking for metis_h in $METIS_INCLUDES... " >&6; } - for ac_header in limits.h metis.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + + +for ac_header in limits.h metis.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ---------------------------------------------- ## +## Report this to salvatore.filippone@uniroma2.it ## +## ---------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -8755,11 +10883,150 @@ if test "x$pac_metis_header_ok" == "xno" ; then unset ac_cv_header_metis_h METIS_INCLUDES="-I$psblas_cv_metisdir/UFconfig -I$psblas_cv_metisdir/METIS/Include -I$psblas_cv_metisdir/METIS/Include" CPPFLAGS="$METIS_INCLUDES $SAVE_CPPFLAGS" - for ac_header in limits.h metis.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + + +for ac_header in limits.h metis.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ---------------------------------------------- ## +## Report this to salvatore.filippone@uniroma2.it ## +## ---------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -8777,9 +11044,13 @@ if test "x$pac_metis_header_ok" == "xyes" ; then psblas_cv_metis_includes="$METIS_INCLUDES" METIS_LIBS="$psblas_cv_metis $METIS_LIBDIR" LIBS="$METIS_LIBS -lm $LIBS"; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS_PartGraphKway in $METIS_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for METIS_PartGraphKway in $METIS_LIBS" >&5 $as_echo_n "checking for METIS_PartGraphKway in $METIS_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8797,23 +11068,52 @@ return METIS_PartGraphKway (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_metis=yes;pac_metis_lib_ok=yes; else - psblas_cv_have_metis=no;pac_metis_lib_ok=no; METIS_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_metis=no;pac_metis_lib_ok=no; METIS_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_metis_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_metis_lib_ok" >&5 $as_echo "$pac_metis_lib_ok" >&6; } if test "x$pac_metis_lib_ok" == "xno" ; then METIS_LIBDIR="-L$psblas_cv_metisdir/Lib -L$psblas_cv_metisdir/lib" METIS_LIBS="$psblas_cv_metis $METIS_LIBDIR" LIBS="$METIS_LIBS -lm $SAVE_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS_PartGraphKway in $METIS_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for METIS_PartGraphKway in $METIS_LIBS" >&5 $as_echo_n "checking for METIS_PartGraphKway in $METIS_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8831,23 +11131,52 @@ return METIS_PartGraphKway (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_metis=yes;pac_metis_lib_ok=yes; else - psblas_cv_have_metis=no;pac_metis_lib_ok=no; METIS_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_metis=no;pac_metis_lib_ok=no; METIS_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_metis_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_metis_lib_ok" >&5 $as_echo "$pac_metis_lib_ok" >&6; } fi if test "x$pac_metis_lib_ok" == "xno" ; then METIS_LIBDIR="-L$psblas_cv_metisdir/METIS/Lib -L$psblas_cv_metisdir/METIS/Lib" METIS_LIBS="$psblas_cv_metis $METIS_LIBDIR" LIBS="$METIS_LIBS -lm $SAVE_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS_PartGraphKway in $METIS_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for METIS_PartGraphKway in $METIS_LIBS" >&5 $as_echo_n "checking for METIS_PartGraphKway in $METIS_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8865,21 +11194,50 @@ return METIS_PartGraphKway (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_metis=yes;pac_metis_lib_ok=yes; else - psblas_cv_have_metis=no;pac_metis_lib_ok=no; METIS_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_metis=no;pac_metis_lib_ok=no; METIS_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_metis_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_metis_lib_ok" >&5 $as_echo "$pac_metis_lib_ok" >&6; } fi fi if test "x$pac_metis_lib_ok" == "xyes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS_SetDefaultOptions in $LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for METIS_SetDefaultOptions in $LIBS" >&5 $as_echo_n "checking for METIS_SetDefaultOptions in $LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -8897,14 +11255,39 @@ return METIS_SetDefaultOptions (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_metis=yes;pac_metis_lib_ok=yes; else - psblas_cv_have_metis=no;pac_metis_lib_ok="no. Unusable METIS version, sorry."; METIS_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_metis=no;pac_metis_lib_ok="no. Unusable METIS version, sorry."; METIS_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_metis_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_metis_lib_ok" >&5 $as_echo "$pac_metis_lib_ok" >&6; } fi @@ -8918,7 +11301,7 @@ fi # Check whether --with-amd was given. -if test "${with_amd+set}" = set; then : +if test "${with_amd+set}" = set; then withval=$with_amd; psblas_cv_amd=$withval else psblas_cv_amd='-lamd' @@ -8926,7 +11309,7 @@ fi # Check whether --with-amddir was given. -if test "${with_amddir+set}" = set; then : +if test "${with_amddir+set}" = set; then withval=$with_amddir; psblas_cv_amddir=$withval else psblas_cv_amddir='' @@ -8934,7 +11317,7 @@ fi # Check whether --with-amdincdir was given. -if test "${with_amdincdir+set}" = set; then : +if test "${with_amdincdir+set}" = set; then withval=$with_amdincdir; psblas_cv_amdincdir=$withval else psblas_cv_amdincdir='' @@ -8942,7 +11325,7 @@ fi # Check whether --with-amdlibdir was given. -if test "${with_amdlibdir+set}" = set; then : +if test "${with_amdlibdir+set}" = set; then withval=$with_amdlibdir; psblas_cv_amdlibdir=$withval else psblas_cv_amdlibdir='' @@ -8972,10 +11355,141 @@ if test "x$psblas_cv_amdlibdir" != "x"; then AMD_LIBDIR="-L$psblas_cv_amdlibdir" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: amd dir $psblas_cv_amddir" >&5 +{ $as_echo "$as_me:$LINENO: amd dir $psblas_cv_amddir" >&5 $as_echo "$as_me: amd dir $psblas_cv_amddir" >&6;} -ac_fn_c_check_header_mongrel "$LINENO" "amd.h" "ac_cv_header_amd_h" "$ac_includes_default" -if test "x$ac_cv_header_amd_h" = xyes; then : +if test "${ac_cv_header_amd_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for amd.h" >&5 +$as_echo_n "checking for amd.h... " >&6; } +if test "${ac_cv_header_amd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_amd_h" >&5 +$as_echo "$ac_cv_header_amd_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking amd.h usability" >&5 +$as_echo_n "checking amd.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking amd.h presence" >&5 +$as_echo_n "checking amd.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: amd.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: amd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: amd.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: amd.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: amd.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: amd.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: amd.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: amd.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: amd.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: amd.h: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ---------------------------------------------- ## +## Report this to salvatore.filippone@uniroma2.it ## +## ---------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for amd.h" >&5 +$as_echo_n "checking for amd.h... " >&6; } +if test "${ac_cv_header_amd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_amd_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_amd_h" >&5 +$as_echo "$ac_cv_header_amd_h" >&6; } + +fi +if test "x$ac_cv_header_amd_h" = x""yes; then pac_amd_header_ok=yes else pac_amd_header_ok=no; AMD_INCLUDES="" @@ -8987,10 +11501,141 @@ if test "x$pac_amd_header_ok" == "xno" ; then AMD_INCLUDES="-I$psblas_cv_amddir/include -I$psblas_cv_amddir/Include " CPPFLAGS="$AMD_INCLUDES $SAVE_CPPFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for amd_h in $AMD_INCLUDES" >&5 + { $as_echo "$as_me:$LINENO: checking for amd_h in $AMD_INCLUDES" >&5 $as_echo_n "checking for amd_h in $AMD_INCLUDES... " >&6; } - ac_fn_c_check_header_mongrel "$LINENO" "amd.h" "ac_cv_header_amd_h" "$ac_includes_default" -if test "x$ac_cv_header_amd_h" = xyes; then : + if test "${ac_cv_header_amd_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for amd.h" >&5 +$as_echo_n "checking for amd.h... " >&6; } +if test "${ac_cv_header_amd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_amd_h" >&5 +$as_echo "$ac_cv_header_amd_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking amd.h usability" >&5 +$as_echo_n "checking amd.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking amd.h presence" >&5 +$as_echo_n "checking amd.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: amd.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: amd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: amd.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: amd.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: amd.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: amd.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: amd.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: amd.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: amd.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: amd.h: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ---------------------------------------------- ## +## Report this to salvatore.filippone@uniroma2.it ## +## ---------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for amd.h" >&5 +$as_echo_n "checking for amd.h... " >&6; } +if test "${ac_cv_header_amd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_amd_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_amd_h" >&5 +$as_echo "$ac_cv_header_amd_h" >&6; } + +fi +if test "x$ac_cv_header_amd_h" = x""yes; then pac_amd_header_ok=yes else pac_amd_header_ok=no; AMD_INCLUDES="" @@ -9002,8 +11647,139 @@ if test "x$pac_amd_header_ok" == "xno" ; then unset ac_cv_header_amd_h AMD_INCLUDES="-I$psblas_cv_amddir/UFconfig -I$psblas_cv_amddir/AMD/Include -I$psblas_cv_amddir/AMD/Include" CPPFLAGS="$AMD_INCLUDES $SAVE_CPPFLAGS" - ac_fn_c_check_header_mongrel "$LINENO" "amd.h" "ac_cv_header_amd_h" "$ac_includes_default" -if test "x$ac_cv_header_amd_h" = xyes; then : + if test "${ac_cv_header_amd_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for amd.h" >&5 +$as_echo_n "checking for amd.h... " >&6; } +if test "${ac_cv_header_amd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_amd_h" >&5 +$as_echo "$ac_cv_header_amd_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking amd.h usability" >&5 +$as_echo_n "checking amd.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking amd.h presence" >&5 +$as_echo_n "checking amd.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: amd.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: amd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: amd.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: amd.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: amd.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: amd.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: amd.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: amd.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: amd.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: amd.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: amd.h: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ---------------------------------------------- ## +## Report this to salvatore.filippone@uniroma2.it ## +## ---------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for amd.h" >&5 +$as_echo_n "checking for amd.h... " >&6; } +if test "${ac_cv_header_amd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_amd_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_amd_h" >&5 +$as_echo "$ac_cv_header_amd_h" >&6; } + +fi +if test "x$ac_cv_header_amd_h" = x""yes; then pac_amd_header_ok=yes else pac_amd_header_ok=no; AMD_INCLUDES="" @@ -9017,9 +11793,13 @@ if test "x$pac_amd_header_ok" == "xyes" ; then psblas_cv_amd_includes="$AMD_INCLUDES" AMD_LIBS="$psblas_cv_amd $AMD_LIBDIR" LIBS="$AMD_LIBS -lm $LIBS"; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for amd_order in $AMD_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for amd_order in $AMD_LIBS" >&5 $as_echo_n "checking for amd_order in $AMD_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -9037,23 +11817,52 @@ return amd_order (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_amd=yes;pac_amd_lib_ok=yes; else - psblas_cv_have_amd=no;pac_amd_lib_ok=no; AMD_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_amd=no;pac_amd_lib_ok=no; AMD_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_amd_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_amd_lib_ok" >&5 $as_echo "$pac_amd_lib_ok" >&6; } if test "x$pac_amd_lib_ok" == "xno" ; then AMD_LIBDIR="-L$psblas_cv_amddir/Lib -L$psblas_cv_amddir/lib" AMD_LIBS="$psblas_cv_amd $AMD_LIBDIR" LIBS="$AMD_LIBS -lm $SAVE_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for amd_order in $AMD_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for amd_order in $AMD_LIBS" >&5 $as_echo_n "checking for amd_order in $AMD_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -9071,23 +11880,52 @@ return amd_order (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_amd=yes;pac_amd_lib_ok=yes; else - psblas_cv_have_amd=no;pac_amd_lib_ok=no; AMD_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_amd=no;pac_amd_lib_ok=no; AMD_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_amd_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_amd_lib_ok" >&5 $as_echo "$pac_amd_lib_ok" >&6; } fi if test "x$pac_amd_lib_ok" == "xno" ; then AMD_LIBDIR="-L$psblas_cv_amddir/AMD/Lib -L$psblas_cv_amddir/AMD/Lib" AMD_LIBS="$psblas_cv_amd $AMD_LIBDIR" LIBS="$AMD_LIBS -lm $SAVE_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for amd_order in $AMD_LIBS" >&5 + { $as_echo "$as_me:$LINENO: checking for amd_order in $AMD_LIBS" >&5 $as_echo_n "checking for amd_order in $AMD_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -9105,14 +11943,39 @@ return amd_order (); return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then psblas_cv_have_amd=yes;pac_amd_lib_ok=yes; else - psblas_cv_have_amd=no;pac_amd_lib_ok=no; AMD_LIBS="" + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + psblas_cv_have_amd=no;pac_amd_lib_ok=no; AMD_LIBS="" fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pac_amd_lib_ok" >&5 + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $pac_amd_lib_ok" >&5 $as_echo "$pac_amd_lib_ok" >&6; } fi fi @@ -9249,13 +12112,13 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; + *) $as_unset $ac_var ;; esac ;; esac done @@ -9263,8 +12126,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" @@ -9286,23 +12149,12 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi + cat confcache >$cache_file else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi @@ -9352,36 +12204,33 @@ DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= -U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= @@ -9392,14 +12241,13 @@ else fi -: "${CONFIG_STATUS=./config.status}" +: ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -9409,18 +12257,17 @@ cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 debug=false ac_cs_recheck=false ac_cs_silent=false - SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which @@ -9428,15 +12275,23 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; esac + fi + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + as_nl=' ' export as_nl @@ -9444,13 +12299,7 @@ export as_nl as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else @@ -9461,7 +12310,7 @@ else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; - case $arg in #( + case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; @@ -9484,6 +12333,13 @@ if test "${PATH_SEPARATOR+set}" != set; then } fi +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + # IFS # We need space, tab and new line, in precisely that order. Quoting is @@ -9493,16 +12349,15 @@ fi IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( +case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done IFS=$as_save_IFS ;; @@ -9514,16 +12369,12 @@ if test "x$as_myself" = x; then fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 + { (exit 1); exit 1; } fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' @@ -9535,89 +12386,7 @@ export LC_ALL LANGUAGE=C export LANGUAGE -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - +# Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -9631,12 +12400,8 @@ else as_basename=false fi -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi +# Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ @@ -9656,25 +12421,76 @@ $as_echo X/"$0" | } s/.*/./; q'` -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( +case `echo -n x` in -n*) - case `echo 'xy\c'` in + case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; + *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then @@ -9689,85 +12505,49 @@ if (echo >conf$$.file) 2>/dev/null; then # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' + as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else - as_ln_s='cp -pR' + as_ln_s='cp -p' fi else - as_ln_s='cp -pR' + as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' + as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -9777,19 +12557,13 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to +# Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by PSBLAS $as_me 3.4, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -9817,15 +12591,13 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. +\`$as_me' instantiates files from templates according to the +current configuration. -Usage: $0 [OPTION]... [TAG]... +Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit - --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files @@ -9839,17 +12611,16 @@ $config_files Configuration commands: $config_commands -Report bugs to ." +Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ PSBLAS config.status 3.4 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -9867,16 +12638,11 @@ ac_need_defaults=: while test $# != 0 do case $1 in - --*=?*) + --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; *) ac_option=$1 ac_optarg=$2 @@ -9890,17 +12656,14 @@ do ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; esac - as_fn_append CONFIG_FILES " '$ac_optarg'" + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; @@ -9909,10 +12672,11 @@ do ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; - *) as_fn_append ac_config_targets " $1" + *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac @@ -9929,7 +12693,7 @@ fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' @@ -9966,7 +12730,9 @@ do "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Make.inc") CONFIG_FILES="$CONFIG_FILES Make.inc" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; esac done @@ -9988,24 +12754,26 @@ fi # after its creation but before its name has been assigned to `$tmp'. $debug || { - tmp= ac_tmp= + tmp= trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 - trap 'as_fn_exit 1' 1 2 13 15 + trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" + test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. @@ -10013,13 +12781,7 @@ ac_tmp=$tmp if test -n "$CONFIG_FILES"; then -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi +ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' @@ -10027,7 +12789,7 @@ else ac_cs_awk_cr=$ac_cr fi -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF @@ -10036,18 +12798,24 @@ _ACEOF echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi @@ -10055,7 +12823,7 @@ done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h @@ -10069,7 +12837,7 @@ s/'"$ac_delim"'$// t delim :nl h -s/\(.\{148\}\)..*/\1/ +s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p @@ -10083,7 +12851,7 @@ s/.\{148\}// t nl :delim h -s/\(.\{148\}\)..*/\1/ +s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p @@ -10103,7 +12871,7 @@ t delim rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && +cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" @@ -10135,29 +12903,23 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } _ACEOF -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// s/^[^=]*=[ ]*$// }' fi @@ -10175,7 +12937,9 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -10194,7 +12958,7 @@ do for ac_f do case $ac_f in - -) ac_f="$ac_tmp/stdin";; + -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. @@ -10203,10 +12967,12 @@ do [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" + ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't @@ -10217,7 +12983,7 @@ do `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. @@ -10229,8 +12995,10 @@ $as_echo "$as_me: creating $ac_file" >&6;} esac case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; esac ;; esac @@ -10258,7 +13026,47 @@ $as_echo X"$ac_file" | q } s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in @@ -10315,6 +13123,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= + ac_sed_dataroot=' /datarootdir/ { p @@ -10324,11 +13133,12 @@ ac_sed_dataroot=' /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p' +/@mandir@/p +' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -10338,7 +13148,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF @@ -10366,28 +13176,31 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} +which seems to be undefined. Please make sure it is defined." >&2;} - rm -f "$ac_tmp/stdin" + rm -f "$tmp/stdin" case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -10395,7 +13208,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files + # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in @@ -10408,7 +13221,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but + # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. @@ -10442,19 +13255,21 @@ $as_echo X"$mf" | continue fi # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. + # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue + test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || @@ -10480,7 +13295,47 @@ $as_echo X"$file" | q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done @@ -10492,12 +13347,15 @@ $as_echo X"$file" | done # for ac_tag -as_fn_exit 0 +{ (exit 0); exit 0; } _ACEOF +chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. @@ -10518,17 +13376,17 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 + $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi #AC_OUTPUT(Make.inc Makefile) ############################################################################### -{ $as_echo "$as_me:${as_lineno-$LINENO}: +{ $as_echo "$as_me:$LINENO: ${PACKAGE_NAME} ${psblas_cv_version} has been configured as follows: MPF90 : ${MPF90} diff --git a/configure.ac b/configure.ac index dc374552..31fc3ae9 100755 --- a/configure.ac +++ b/configure.ac @@ -111,6 +111,14 @@ fi if test "X$CC" == "X" ; then AC_MSG_ERROR([Problem : No C compiler specified nor found!]) fi +AC_PROG_CC_C99() +if test "$ac_cv_prog_cc_c99" == "no" ; then + AC_MSG_ERROR([Problem : Need a C99 compiler ! ]) +else + CDEFINES="$ac_cv_prog_cc_c99 $CDEFINES" +fi + + ############################################################################### # Suitable MPI compilers detection @@ -529,6 +537,7 @@ fi PAC_ARG_LONG_INTEGERS if test x"$pac_cv_long_integers" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DLONG_INTEGERS $FDEFINES"; + CDEFINES="-DLONG_INTEGERS_ $CDEFINES"; fi # From a60a547be6b31c263f8e5881ad8f2f7756e0aed2 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 17 Feb 2017 13:51:09 +0000 Subject: [PATCH 04/27] psblas3-mcbind: cbind/base/psb_base_tools_cbind_mod.F90 cbind/base/psb_cpenv_mod.f90 cbind/base/psb_d_psblas_cbind_mod.f90 cbind/base/psb_d_serial_cbind_mod.F90 cbind/base/psb_d_tools_cbind_mod.F90 cbind/base/psb_objhandle_mod.F90 cbind/base/psb_objhandle_mod.f90 Added kind parameter for short/long integers. --- cbind/base/psb_base_tools_cbind_mod.F90 | 42 +++++++++---------- cbind/base/psb_cpenv_mod.f90 | 28 ++++++------- cbind/base/psb_d_psblas_cbind_mod.f90 | 6 +-- cbind/base/psb_d_serial_cbind_mod.F90 | 10 ++--- cbind/base/psb_d_tools_cbind_mod.F90 | 40 +++++++++--------- ...bjhandle_mod.f90 => psb_objhandle_mod.F90} | 6 +++ 6 files changed, 69 insertions(+), 63 deletions(-) rename cbind/base/{psb_objhandle_mod.f90 => psb_objhandle_mod.F90} (78%) diff --git a/cbind/base/psb_base_tools_cbind_mod.F90 b/cbind/base/psb_base_tools_cbind_mod.F90 index 1ea32827..a8f87496 100644 --- a/cbind/base/psb_base_tools_cbind_mod.F90 +++ b/cbind/base/psb_base_tools_cbind_mod.F90 @@ -8,14 +8,14 @@ contains function psb_c_error() bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res res = 0 call psb_error() end function psb_c_error function psb_c_clean_errstack() bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res res = 0 call psb_clean_errstack() end function psb_c_clean_errstack @@ -23,9 +23,9 @@ contains function psb_c_cdall_vg(ng,vg,ictxt,cdh) bind(c,name='psb_c_cdall_vg') result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: ng, ictxt - integer(c_int) :: vg(*) + integer(psb_c_int) :: res + integer(psb_c_int), value :: ng, ictxt + integer(psb_c_int) :: vg(*) type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer :: info @@ -56,9 +56,9 @@ contains function psb_c_cdall_vl(nl,vl,ictxt,cdh) bind(c,name='psb_c_cdall_vl') result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: nl, ictxt - integer(c_int) :: vl(*) + integer(psb_c_int) :: res + integer(psb_c_int), value :: nl, ictxt + integer(psb_c_int) :: vl(*) type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer :: info @@ -88,8 +88,8 @@ contains function psb_c_cdall_nl(nl,ictxt,cdh) bind(c,name='psb_c_cdall_nl') result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: nl, ictxt + integer(psb_c_int) :: res + integer(psb_c_int), value :: nl, ictxt type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer :: info @@ -119,8 +119,8 @@ contains function psb_c_cdall_repl(n,ictxt,cdh) bind(c,name='psb_c_cdall_repl') result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: n, ictxt + integer(psb_c_int) :: res + integer(psb_c_int), value :: n, ictxt type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer :: info @@ -150,7 +150,7 @@ contains function psb_c_cdasb(cdh) bind(c,name='psb_c_cdasb') result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer :: info @@ -169,7 +169,7 @@ contains function psb_c_cdfree(cdh) bind(c,name='psb_c_cdfree') result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp integer :: info @@ -190,10 +190,10 @@ contains function psb_c_cdins(nz,ia,ja,cdh) bind(c,name='psb_c_cdins') result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: nz + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz type(psb_c_object_type) :: cdh - integer(c_int) :: ia(*),ja(*) + integer(psb_c_int) :: ia(*),ja(*) type(psb_desc_type), pointer :: descp integer :: info @@ -213,7 +213,7 @@ contains function psb_c_cd_get_local_rows(cdh) bind(c,name='psb_c_cd_get_local_rows') result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp @@ -234,7 +234,7 @@ contains function psb_c_cd_get_local_cols(cdh) bind(c,name='psb_c_cd_get_local_cols') result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp @@ -253,7 +253,7 @@ contains function psb_c_cd_get_global_rows(cdh) bind(c,name='psb_c_cd_get_global_rows') result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp @@ -274,7 +274,7 @@ contains function psb_c_cd_get_global_cols(cdh) bind(c,name='psb_c_cd_get_global_cols') result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: cdh type(psb_desc_type), pointer :: descp diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 index 1f3d9542..f0197fe3 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.f90 @@ -8,7 +8,7 @@ contains use psb_base_mod, only : psb_get_errstatus implicit none - integer(c_int) :: res + integer(psb_c_int) :: res res = psb_get_errstatus() end function psb_c_get_errstatus @@ -17,7 +17,7 @@ contains use psb_base_mod, only : psb_init implicit none - integer(c_int) :: psb_c_init + integer(psb_c_int) :: psb_c_init integer :: ictxt @@ -27,7 +27,7 @@ contains subroutine psb_c_exit_ctxt(ictxt) bind(c) use psb_base_mod, only : psb_exit - integer(c_int), value :: ictxt + integer(psb_c_int), value :: ictxt call psb_exit(ictxt,close=.false.) return @@ -35,7 +35,7 @@ contains subroutine psb_c_exit(ictxt) bind(c) use psb_base_mod, only : psb_exit - integer(c_int), value :: ictxt + integer(psb_c_int), value :: ictxt call psb_exit(ictxt) return @@ -43,7 +43,7 @@ contains subroutine psb_c_abort(ictxt) bind(c) use psb_base_mod, only : psb_abort - integer(c_int), value :: ictxt + integer(psb_c_int), value :: ictxt call psb_abort(ictxt) return @@ -52,8 +52,8 @@ contains subroutine psb_c_info(ictxt,iam,np) bind(c) use psb_base_mod, only : psb_info - integer(c_int), value :: ictxt - integer(c_int) :: iam,np + integer(psb_c_int), value :: ictxt + integer(psb_c_int) :: iam,np call psb_info(ictxt,iam,np) return @@ -61,7 +61,7 @@ contains subroutine psb_c_barrier(ictxt) bind(c) use psb_base_mod, only : psb_barrier - integer(c_int), value :: ictxt + integer(psb_c_int), value :: ictxt call psb_barrier(ictxt) end subroutine psb_c_barrier @@ -75,8 +75,8 @@ contains subroutine psb_c_ibcast(ictxt,n,v,root) bind(c) use psb_base_mod, only : psb_bcast implicit none - integer(c_int), value :: ictxt,n, root - integer(c_int) :: v(*) + integer(psb_c_int), value :: ictxt,n, root + integer(psb_c_int) :: v(*) if (n < 0) then write(0,*) 'Wrong size in BCAST' @@ -90,7 +90,7 @@ contains subroutine psb_c_dbcast(ictxt,n,v,root) bind(c) use psb_base_mod, only : psb_bcast implicit none - integer(c_int), value :: ictxt,n, root + integer(psb_c_int), value :: ictxt,n, root real(c_double) :: v(*) if (n < 0) then @@ -105,7 +105,7 @@ contains subroutine psb_c_hbcast(ictxt,v,root) bind(c) use psb_base_mod, only : psb_bcast, psb_info implicit none - integer(c_int), value :: ictxt, root + integer(psb_c_int), value :: ictxt, root character(c_char) :: v(*) integer :: n, iam, np @@ -127,8 +127,8 @@ contains use psb_base_string_cbind_mod implicit none character(c_char), intent(inout) :: cmesg(*) - integer(c_int), intent(in), value :: len - integer(c_int) :: res + integer(psb_c_int), intent(in), value :: len + integer(psb_c_int) :: res character(len=psb_max_errmsg_len_), allocatable :: fmesg(:) character(len=psb_max_errmsg_len_) :: tmp integer :: i, j, ll, il diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 index c55e3228..2667a114 100644 --- a/cbind/base/psb_d_psblas_cbind_mod.f90 +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -8,7 +8,7 @@ contains use psb_objhandle_mod use psb_base_string_cbind_mod implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: xh,yh, cdh real(c_double), value :: alpha,beta @@ -195,7 +195,7 @@ contains use psb_objhandle_mod use psb_base_string_cbind_mod implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: ah,xh,yh, cdh real(c_double), value :: alpha, beta @@ -238,7 +238,7 @@ contains use psb_objhandle_mod use psb_base_string_cbind_mod implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: ah,xh,yh, cdh real(c_double), value :: alpha, beta diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index d450329d..ce325144 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -11,7 +11,7 @@ contains function psb_c_dvect_get_nrows(xh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_dvector) :: xh type(psb_d_vect_type), pointer :: vp @@ -29,7 +29,7 @@ contains function psb_c_dvect_f_get_cpy(v,xh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res real(c_double) :: v(*) type(psb_c_dvector) :: xh @@ -52,7 +52,7 @@ contains function psb_c_dvect_zero(xh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_dvector) :: xh type(psb_d_vect_type), pointer :: vp @@ -73,7 +73,7 @@ contains use psb_objhandle_mod use psb_base_string_cbind_mod implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_dspmat) :: mh type(psb_dspmat_type), pointer :: ap @@ -96,7 +96,7 @@ contains use psb_objhandle_mod use psb_base_string_cbind_mod implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_dspmat) :: mh type(psb_dspmat_type), pointer :: ap diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index f01aba8e..6d3e5353 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -10,7 +10,7 @@ contains function psb_c_dgeall(xh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: xh type(psb_c_object_type) :: cdh @@ -39,7 +39,7 @@ contains function psb_c_dgeasb(xh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: xh type(psb_c_object_type) :: cdh @@ -69,7 +69,7 @@ contains function psb_c_dgefree(xh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: xh type(psb_c_object_type) :: cdh @@ -101,9 +101,9 @@ contains function psb_c_dgeins(nz,irw,val,xh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: nz - integer(c_int) :: irw(*) + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) real(c_double) :: val(*) type(psb_c_object_type) :: xh type(psb_c_object_type) :: cdh @@ -135,9 +135,9 @@ contains function psb_c_dgeins_add(nz,irw,val,xh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: nz - integer(c_int) :: irw(*) + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) real(c_double) :: val(*) type(psb_c_object_type) :: xh type(psb_c_object_type) :: cdh @@ -169,7 +169,7 @@ contains function psb_c_dspall(mh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: mh type(psb_c_object_type) :: cdh @@ -199,7 +199,7 @@ contains function psb_c_dspasb(mh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: mh type(psb_c_object_type) :: cdh @@ -228,7 +228,7 @@ contains function psb_c_dspfree(mh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res type(psb_c_object_type) :: mh type(psb_c_object_type) :: cdh @@ -263,8 +263,8 @@ contains use psb_d_rsb_mat_mod #endif implicit none - integer(c_int) :: res - integer(c_int), value :: cdh, mh,upd,dupl + integer(psb_c_int) :: res + integer(psb_c_int), value :: cdh, mh,upd,dupl character(c_char) :: afmt(*) integer :: info,n, fdupl character(len=5) :: fafmt @@ -299,9 +299,9 @@ contains function psb_c_dspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) implicit none - integer(c_int) :: res - integer(c_int), value :: nz - integer(c_int) :: irw(*), icl(*) + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*), icl(*) real(c_double) :: val(*) type(psb_c_object_type) :: mh type(psb_c_object_type) :: cdh @@ -332,7 +332,7 @@ contains function psb_c_dsprn(mh,cdh,clear) bind(c) result(res) implicit none - integer(c_int) :: res + integer(psb_c_int) :: res logical(c_bool), value :: clear type(psb_c_object_type) :: mh type(psb_c_object_type) :: cdh @@ -364,8 +364,8 @@ contains !!$ function psb_c_dspprint(mh) bind(c) result(res) !!$ !!$ implicit none -!!$ integer(c_int) :: res -!!$ integer(c_int), value :: mh +!!$ integer(psb_c_int) :: res +!!$ integer(psb_c_int), value :: mh !!$ integer :: info !!$ !!$ diff --git a/cbind/base/psb_objhandle_mod.f90 b/cbind/base/psb_objhandle_mod.F90 similarity index 78% rename from cbind/base/psb_objhandle_mod.f90 rename to cbind/base/psb_objhandle_mod.F90 index 3d5cf5d5..17737e2b 100644 --- a/cbind/base/psb_objhandle_mod.f90 +++ b/cbind/base/psb_objhandle_mod.F90 @@ -1,5 +1,11 @@ module psb_objhandle_mod use iso_c_binding + +#if defined(LONG_INTEGERS) + integer, parameter :: psb_c_int = c_int64_t +#else + integer, parameter :: psb_c_int = c_int32_t +#endif type, bind(c) :: psb_c_object_type type(c_ptr) :: item = c_null_ptr From d536410cbe4dbe433a87bb3376b87c1ab20d799f Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 4 Apr 2017 14:50:48 +0000 Subject: [PATCH 05/27] psblas3-mcbind: cbind/base/Makefile cbind/base/psb_c_dbase.c cbind/base/psb_c_psblas_cbind_mod.f90 cbind/base/psb_c_serial_cbind_mod.F90 cbind/base/psb_c_tools_cbind_mod.F90 cbind/base/psb_d_psblas_cbind_mod.f90 cbind/base/psb_d_serial_cbind_mod.F90 cbind/base/psb_d_tools_cbind_mod.F90 cbind/base/psb_objhandle_mod.F90 cbind/base/psb_s_psblas_cbind_mod.f90 cbind/base/psb_s_serial_cbind_mod.F90 cbind/base/psb_s_tools_cbind_mod.F90 cbind/base/psb_z_psblas_cbind_mod.f90 cbind/base/psb_z_serial_cbind_mod.F90 cbind/base/psb_z_tools_cbind_mod.F90 New bindings for S/C/D/Z, base routines. --- cbind/base/Makefile | 22 +- cbind/base/psb_c_dbase.c | 6 +- cbind/base/psb_c_psblas_cbind_mod.f90 | 289 +++++++++++++++++++ cbind/base/psb_c_serial_cbind_mod.F90 | 119 ++++++++ cbind/base/psb_c_tools_cbind_mod.F90 | 385 ++++++++++++++++++++++++++ cbind/base/psb_d_psblas_cbind_mod.f90 | 32 ++- cbind/base/psb_d_serial_cbind_mod.F90 | 2 +- cbind/base/psb_d_tools_cbind_mod.F90 | 40 +-- cbind/base/psb_objhandle_mod.F90 | 32 ++- cbind/base/psb_s_psblas_cbind_mod.f90 | 289 +++++++++++++++++++ cbind/base/psb_s_serial_cbind_mod.F90 | 119 ++++++++ cbind/base/psb_s_tools_cbind_mod.F90 | 385 ++++++++++++++++++++++++++ cbind/base/psb_z_psblas_cbind_mod.f90 | 289 +++++++++++++++++++ cbind/base/psb_z_serial_cbind_mod.F90 | 119 ++++++++ cbind/base/psb_z_tools_cbind_mod.F90 | 385 ++++++++++++++++++++++++++ 15 files changed, 2469 insertions(+), 44 deletions(-) create mode 100644 cbind/base/psb_c_psblas_cbind_mod.f90 create mode 100644 cbind/base/psb_c_serial_cbind_mod.F90 create mode 100644 cbind/base/psb_c_tools_cbind_mod.F90 create mode 100644 cbind/base/psb_s_psblas_cbind_mod.f90 create mode 100644 cbind/base/psb_s_serial_cbind_mod.F90 create mode 100644 cbind/base/psb_s_tools_cbind_mod.F90 create mode 100644 cbind/base/psb_z_psblas_cbind_mod.f90 create mode 100644 cbind/base/psb_z_serial_cbind_mod.F90 create mode 100644 cbind/base/psb_z_tools_cbind_mod.F90 diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 492526de..f6855808 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -9,8 +9,11 @@ CINCLUDES=-I$(INCLUDEDIR) FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ psb_base_tools_cbind_mod.o psb_base_string_cbind_mod.o \ - psb_base_psblas_cbind_mod.o psb_d_tools_cbind_mod.o \ - psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o + psb_base_psblas_cbind_mod.o \ + psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o \ + psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ + psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ + psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o COBJS= psb_c_base.o psb_c_dbase.o CMOD=psb_base_cbind.h psb_c_base.h psb_c_dbase.h @@ -18,7 +21,10 @@ OBJS=$(FOBJS) $(COBJS) LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ psb_base_tools_cbind_mod$(.mod) psb_base_string_cbind_mod$(.mod) psb_base_psblas_cbind_mod$(.mod)\ - psb_d_tools_cbind_mod$(.mod) psb_d_serial_cbind_mod$(.mod) psb_d_psblas_cbind_mod$(.mod) + psb_s_tools_cbind_mod$(.mod) psb_s_serial_cbind_mod$(.mod) psb_s_psblas_cbind_mod$(.mod) \ + psb_d_tools_cbind_mod$(.mod) psb_d_serial_cbind_mod$(.mod) psb_d_psblas_cbind_mod$(.mod) \ + psb_c_tools_cbind_mod$(.mod) psb_c_serial_cbind_mod$(.mod) psb_c_psblas_cbind_mod$(.mod) \ + psb_z_tools_cbind_mod$(.mod) psb_z_serial_cbind_mod$(.mod) psb_z_psblas_cbind_mod$(.mod) LOCAL_MODS=$(LIBMOD) LIBNAME=$(CBINDLIBNAME) @@ -33,10 +39,16 @@ $(COBJS): $(CMOD) psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_mod.o \ psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o psb_base_tools_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o -psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o: psb_base_tools_cbind_mod.o + +psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o \ +psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o \ +psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o \ +psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o \ +psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o \ +psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o: psb_d_psblas_cbind_mod.o -psb_d_psblas_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o + psb_cpenv_mod.o: psb_base_string_cbind_mod.o psb_objhandle_mod.o veryclean: clean diff --git a/cbind/base/psb_c_dbase.c b/cbind/base/psb_c_dbase.c index 3e7c968c..6b31d18e 100644 --- a/cbind/base/psb_c_dbase.c +++ b/cbind/base/psb_c_dbase.c @@ -10,9 +10,9 @@ psb_c_dvector* psb_c_new_dvector() return(temp); } -double* psb_c_dvect_get_cpy(psb_c_dvector *xh) +psb_d_t* psb_c_dvect_get_cpy(psb_c_dvector *xh) { - double *temp=NULL; + psb_d_t *temp=NULL; psb_i_t vsize=0; if ((vsize=psb_c_dvect_get_nrows(xh))<0) @@ -21,7 +21,7 @@ double* psb_c_dvect_get_cpy(psb_c_dvector *xh) if (vsize==0) vsize=1; - if ((temp=(double *)malloc(vsize*sizeof(double)))!=NULL) + if ((temp=(psb_d_t *)malloc(vsize*sizeof(psb_d_t)))!=NULL) psb_c_dvect_f_get_cpy(temp,xh); return(temp); diff --git a/cbind/base/psb_c_psblas_cbind_mod.f90 b/cbind/base/psb_c_psblas_cbind_mod.f90 new file mode 100644 index 00000000..809a16db --- /dev/null +++ b/cbind/base/psb_c_psblas_cbind_mod.f90 @@ -0,0 +1,289 @@ +module psb_c_psblas_cbind_mod + use iso_c_binding + +contains + + function psb_c_cgeaxpby(alpha,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_cvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_float_complex), value :: alpha,beta + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp,yp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + + call psb_geaxpby(alpha,xp,beta,yp,descp,info) + + res = info + + end function psb_c_cgeaxpby + + function psb_c_cgenrm2(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float_complex) :: res + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_genrm2(xp,descp,info) + + end function psb_c_cgenrm2 + + function psb_c_cgeamax(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float_complex) :: res + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geamax(xp,descp,info) + + end function psb_c_cgeamax + + function psb_c_cgeasum(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float_complex) :: res + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geasum(xp,descp,info) + + end function psb_c_cgeasum + + + function psb_c_cspnrmi(ah,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float_complex) :: res + + type(psb_c_cspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + res = psb_spnrmi(ap,descp,info) + + end function psb_c_cspnrmi + + function psb_c_cgedot(xh,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + complex(c_float_complex) :: res + + type(psb_c_cvector) :: xh,yh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp,yp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + res = psb_gedot(xp,yp,descp,info) + + end function psb_c_cgedot + + + function psb_c_cspmm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_cspmat) :: ah + type(psb_c_cvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_float_complex), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp,yp + type(psb_cspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spmm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_cspmm + + + function psb_c_cspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_cspmat) :: ah + type(psb_c_cvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_float_complex), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp,yp + type(psb_cspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spsm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_cspsm + + +end module psb_c_psblas_cbind_mod diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 new file mode 100644 index 00000000..8d2eac5a --- /dev/null +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -0,0 +1,119 @@ +module psb_c_serial_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + + function psb_c_cvect_get_nrows(xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_cvector) :: xh + + type(psb_c_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + res = vp%get_nrows() + end if + + end function psb_c_cvect_get_nrows + + function psb_c_cvect_f_get_cpy(v,xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + complex(c_float_complex) :: v(*) + type(psb_c_cvector) :: xh + + type(psb_c_vect_type), pointer :: vp + complex(psb_spk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + fv = vp%get_vect() + sz = size(fv) + v(1:sz) = fv(1:sz) + end if + + end function psb_c_cvect_f_get_cpy + + + function psb_c_cvect_zero(xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_cvector) :: xh + + type(psb_c_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call vp%zero() + end if + + end function psb_c_cvect_zero + + + function psb_c_cmat_get_nrows(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_cspmat) :: mh + type(psb_cspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_nrows() + + end function psb_c_cmat_get_nrows + + + function psb_c_cmat_get_ncols(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_cspmat) :: mh + type(psb_cspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_ncols() + + end function psb_c_cmat_get_ncols + + + +end module psb_c_serial_cbind_mod + diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 new file mode 100644 index 00000000..2f30b82e --- /dev/null +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -0,0 +1,385 @@ +module psb_c_tools_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + function psb_c_cgeall(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_cgeall + + function psb_c_cgeasb(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info) + res = min(0,info) + + return + end function psb_c_cgeasb + + function psb_c_cgefree(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_gefree(xp,descp,info) + res = min(0,info) + xh%item = c_null_ptr + + return + end function psb_c_cgefree + + + function psb_c_cgeins(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) + complex(c_float_complex) :: val(*) + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + res = min(0,info) + + return + end function psb_c_cgeins + + + function psb_c_cgeins_add(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) + complex(c_float_complex) :: val(*) + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + res = min(0,info) + + return + end function psb_c_cgeins_add + + + function psb_c_cspall(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_cspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + return + end if + allocate(ap) + call psb_spall(ap,descp,info) + mh%item = c_loc(ap) + res = min(0,info) + + return + end function psb_c_cspall + + + + function psb_c_cspasb(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_cspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spasb(ap,descp,info) + res = min(0,info) + return + end function psb_c_cspasb + + + function psb_c_cspfree(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_cspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spfree(ap,descp,info) + res = min(0,info) + mh%item=c_null_ptr + return + end function psb_c_cspfree + + +#if 0 + + function psb_c_cspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#ifdef HAVE_LIBRSB + use psb_c_rsb_mat_mod +#endif + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: cdh, mh,upd,dupl + character(c_char) :: afmt(*) + integer :: info,n, fdupl + character(len=5) :: fafmt +#ifdef HAVE_LIBRSB + type(psb_c_rsb_sparse_mat) :: arsb +#endif + + res = -1 + call psb_check_descriptor_handle(cdh,info) + if (info < 0) return + call psb_check_double_spmat_handle(mh,info) + if (info < 0) return + + call stringc2f(afmt,fafmt) + select case(fafmt) +#ifdef HAVE_LIBRSB + case('RSB') + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & upd=upd,dupl=dupl,mold=arsb) +#endif + case default + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & afmt=fafmt,upd=upd,dupl=dupl) + end select + + res = min(0,info) + + return + end function psb_c_cspasb_opt +#endif + + function psb_c_cspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*), icl(*) + complex(c_float_complex) :: val(*) + type(psb_c_cspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + res = min(0,info) + return + end function psb_c_cspins + + + function psb_c_csprn(mh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + logical(c_bool), value :: clear + type(psb_c_cspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + integer :: info + logical :: fclear + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + fclear = clear + call psb_sprn(ap,descp,info,clear=fclear) + res = min(0,info) + + return + end function psb_c_csprn +!!$ +!!$ function psb_c_cspprint(mh) bind(c) result(res) +!!$ +!!$ implicit none +!!$ integer(psb_c_int) :: res +!!$ integer(psb_c_int), value :: mh +!!$ integer :: info +!!$ +!!$ +!!$ res = -1 +!!$ call psb_check_double_spmat_handle(mh,info) +!!$ if (info < 0) return +!!$ +!!$ call psb_csprt(0,double_spmat_pool(mh)%item,head='Debug mat') +!!$ +!!$ res = 0 +!!$ +!!$ return +!!$ end function psb_c_cspprint + + +end module psb_c_tools_cbind_mod + diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 index 2667a114..2557069e 100644 --- a/cbind/base/psb_d_psblas_cbind_mod.f90 +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -10,7 +10,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: xh,yh, cdh + type(psb_c_dvector) :: xh,yh + type(psb_c_descriptor) :: cdh real(c_double), value :: alpha,beta type(psb_desc_type), pointer :: descp @@ -49,7 +50,8 @@ contains implicit none real(c_double) :: res - type(psb_c_object_type) :: xh,cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp integer :: info @@ -78,7 +80,8 @@ contains implicit none real(c_double) :: res - type(psb_c_object_type) :: xh,cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp integer :: info @@ -106,7 +109,8 @@ contains implicit none real(c_double) :: res - type(psb_c_object_type) :: xh,cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp integer :: info @@ -129,14 +133,15 @@ contains end function psb_c_dgeasum - function psb_c_dspnrmi(mh,cdh) bind(c) result(res) + function psb_c_dspnrmi(ah,cdh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod use psb_base_string_cbind_mod implicit none real(c_double) :: res - type(psb_c_object_type) :: mh,cdh + type(psb_c_dspmat) :: ah + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap integer :: info @@ -147,8 +152,8 @@ contains else return end if - if (c_associated(mh%item)) then - call c_f_pointer(mh%item,ap) + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) else return end if @@ -164,7 +169,8 @@ contains implicit none real(c_double) :: res - type(psb_c_object_type) :: xh,yh,cdh + type(psb_c_dvector) :: xh,yh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp,yp integer :: info @@ -197,7 +203,9 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: ah,xh,yh, cdh + type(psb_c_dspmat) :: ah + type(psb_c_dvector) :: xh,yh + type(psb_c_descriptor) :: cdh real(c_double), value :: alpha, beta type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp,yp @@ -240,7 +248,9 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: ah,xh,yh, cdh + type(psb_c_dspmat) :: ah + type(psb_c_dvector) :: xh,yh + type(psb_c_descriptor) :: cdh real(c_double), value :: alpha, beta type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp,yp diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index ce325144..9b14b898 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -62,7 +62,7 @@ contains if (c_associated(xh%item)) then call c_f_pointer(xh%item,vp) - call vp%set(dzero) + call vp%zero() end if end function psb_c_dvect_zero diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 6d3e5353..544262c3 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -11,8 +11,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: xh - type(psb_c_object_type) :: cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp @@ -40,8 +40,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: xh - type(psb_c_object_type) :: cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp @@ -70,8 +70,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: xh - type(psb_c_object_type) :: cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp @@ -105,8 +105,8 @@ contains integer(psb_c_int), value :: nz integer(psb_c_int) :: irw(*) real(c_double) :: val(*) - type(psb_c_object_type) :: xh - type(psb_c_object_type) :: cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp @@ -139,8 +139,8 @@ contains integer(psb_c_int), value :: nz integer(psb_c_int) :: irw(*) real(c_double) :: val(*) - type(psb_c_object_type) :: xh - type(psb_c_object_type) :: cdh + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp @@ -170,8 +170,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: mh - type(psb_c_object_type) :: cdh + type(psb_c_dspmat) :: mh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap @@ -200,8 +200,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: mh - type(psb_c_object_type) :: cdh + type(psb_c_dspmat) :: mh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap @@ -229,8 +229,8 @@ contains implicit none integer(psb_c_int) :: res - type(psb_c_object_type) :: mh - type(psb_c_object_type) :: cdh + type(psb_c_dspmat) :: mh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap @@ -303,8 +303,8 @@ contains integer(psb_c_int), value :: nz integer(psb_c_int) :: irw(*), icl(*) real(c_double) :: val(*) - type(psb_c_object_type) :: mh - type(psb_c_object_type) :: cdh + type(psb_c_dspmat) :: mh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap @@ -334,8 +334,8 @@ contains implicit none integer(psb_c_int) :: res logical(c_bool), value :: clear - type(psb_c_object_type) :: mh - type(psb_c_object_type) :: cdh + type(psb_c_dspmat) :: mh + type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap diff --git a/cbind/base/psb_objhandle_mod.F90 b/cbind/base/psb_objhandle_mod.F90 index 17737e2b..b2f1c008 100644 --- a/cbind/base/psb_objhandle_mod.F90 +++ b/cbind/base/psb_objhandle_mod.F90 @@ -6,15 +6,23 @@ module psb_objhandle_mod #else integer, parameter :: psb_c_int = c_int32_t #endif - + type, bind(c) :: psb_c_object_type type(c_ptr) :: item = c_null_ptr end type psb_c_object_type - + type, bind(c) :: psb_c_descriptor type(c_ptr) :: item = c_null_ptr end type psb_c_descriptor - + + type, bind(c) :: psb_c_svector + type(c_ptr) :: item = c_null_ptr + end type psb_c_svector + + type, bind(c) :: psb_c_sspmat + type(c_ptr) :: item = c_null_ptr + end type psb_c_sspmat + type, bind(c) :: psb_c_dvector type(c_ptr) :: item = c_null_ptr end type psb_c_dvector @@ -22,5 +30,21 @@ module psb_objhandle_mod type, bind(c) :: psb_c_dspmat type(c_ptr) :: item = c_null_ptr end type psb_c_dspmat - + + type, bind(c) :: psb_c_cvector + type(c_ptr) :: item = c_null_ptr + end type psb_c_cvector + + type, bind(c) :: psb_c_cspmat + type(c_ptr) :: item = c_null_ptr + end type psb_c_cspmat + + type, bind(c) :: psb_c_zvector + type(c_ptr) :: item = c_null_ptr + end type psb_c_zvector + + type, bind(c) :: psb_c_zspmat + type(c_ptr) :: item = c_null_ptr + end type psb_c_zspmat + end module psb_objhandle_mod diff --git a/cbind/base/psb_s_psblas_cbind_mod.f90 b/cbind/base/psb_s_psblas_cbind_mod.f90 new file mode 100644 index 00000000..5cef1b1c --- /dev/null +++ b/cbind/base/psb_s_psblas_cbind_mod.f90 @@ -0,0 +1,289 @@ +module psb_s_psblas_cbind_mod + use iso_c_binding + +contains + + function psb_c_sgeaxpby(alpha,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_svector) :: xh,yh + type(psb_c_descriptor) :: cdh + real(c_float), value :: alpha,beta + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp,yp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + + call psb_geaxpby(alpha,xp,beta,yp,descp,info) + + res = info + + end function psb_c_sgeaxpby + + function psb_c_sgenrm2(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float) :: res + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_genrm2(xp,descp,info) + + end function psb_c_sgenrm2 + + function psb_c_sgeamax(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float) :: res + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geamax(xp,descp,info) + + end function psb_c_sgeamax + + function psb_c_sgeasum(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float) :: res + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geasum(xp,descp,info) + + end function psb_c_sgeasum + + + function psb_c_sspnrmi(ah,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float) :: res + + type(psb_c_sspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + res = psb_spnrmi(ap,descp,info) + + end function psb_c_sspnrmi + + function psb_c_sgedot(xh,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_float) :: res + + type(psb_c_svector) :: xh,yh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp,yp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + res = psb_gedot(xp,yp,descp,info) + + end function psb_c_sgedot + + + function psb_c_sspmm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_sspmat) :: ah + type(psb_c_svector) :: xh,yh + type(psb_c_descriptor) :: cdh + real(c_float), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp,yp + type(psb_sspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spmm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_sspmm + + + function psb_c_sspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_sspmat) :: ah + type(psb_c_svector) :: xh,yh + type(psb_c_descriptor) :: cdh + real(c_float), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp,yp + type(psb_sspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spsm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_sspsm + + +end module psb_s_psblas_cbind_mod diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 new file mode 100644 index 00000000..b2bc5f6a --- /dev/null +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -0,0 +1,119 @@ +module psb_s_serial_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + + function psb_c_svect_get_nrows(xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_svector) :: xh + + type(psb_s_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + res = vp%get_nrows() + end if + + end function psb_c_svect_get_nrows + + function psb_c_svect_f_get_cpy(v,xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + real(c_float) :: v(*) + type(psb_c_svector) :: xh + + type(psb_s_vect_type), pointer :: vp + real(psb_spk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + fv = vp%get_vect() + sz = size(fv) + v(1:sz) = fv(1:sz) + end if + + end function psb_c_svect_f_get_cpy + + + function psb_c_svect_zero(xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_svector) :: xh + + type(psb_s_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call vp%zero() + end if + + end function psb_c_svect_zero + + + function psb_c_smat_get_nrows(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_sspmat) :: mh + type(psb_sspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_nrows() + + end function psb_c_smat_get_nrows + + + function psb_c_smat_get_ncols(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_sspmat) :: mh + type(psb_sspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_ncols() + + end function psb_c_smat_get_ncols + + + +end module psb_s_serial_cbind_mod + diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 new file mode 100644 index 00000000..e3b7fd76 --- /dev/null +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -0,0 +1,385 @@ +module psb_s_tools_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + function psb_c_sgeall(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_sgeall + + function psb_c_sgeasb(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info) + res = min(0,info) + + return + end function psb_c_sgeasb + + function psb_c_sgefree(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_gefree(xp,descp,info) + res = min(0,info) + xh%item = c_null_ptr + + return + end function psb_c_sgefree + + + function psb_c_sgeins(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) + real(c_float) :: val(*) + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + res = min(0,info) + + return + end function psb_c_sgeins + + + function psb_c_sgeins_add(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) + real(c_float) :: val(*) + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + res = min(0,info) + + return + end function psb_c_sgeins_add + + + function psb_c_sspall(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_sspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + return + end if + allocate(ap) + call psb_spall(ap,descp,info) + mh%item = c_loc(ap) + res = min(0,info) + + return + end function psb_c_sspall + + + + function psb_c_sspasb(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_sspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spasb(ap,descp,info) + res = min(0,info) + return + end function psb_c_sspasb + + + function psb_c_sspfree(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_sspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spfree(ap,descp,info) + res = min(0,info) + mh%item=c_null_ptr + return + end function psb_c_sspfree + + +#if 0 + + function psb_c_sspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#ifdef HAVE_LIBRSB + use psb_s_rsb_mat_mod +#endif + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: cdh, mh,upd,dupl + character(c_char) :: afmt(*) + integer :: info,n, fdupl + character(len=5) :: fafmt +#ifdef HAVE_LIBRSB + type(psb_s_rsb_sparse_mat) :: arsb +#endif + + res = -1 + call psb_check_descriptor_handle(cdh,info) + if (info < 0) return + call psb_check_double_spmat_handle(mh,info) + if (info < 0) return + + call stringc2f(afmt,fafmt) + select case(fafmt) +#ifdef HAVE_LIBRSB + case('RSB') + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & upd=upd,dupl=dupl,mold=arsb) +#endif + case default + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & afmt=fafmt,upd=upd,dupl=dupl) + end select + + res = min(0,info) + + return + end function psb_c_sspasb_opt +#endif + + function psb_c_sspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*), icl(*) + real(c_float) :: val(*) + type(psb_c_sspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + res = min(0,info) + return + end function psb_c_sspins + + + function psb_c_ssprn(mh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + logical(c_bool), value :: clear + type(psb_c_sspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + integer :: info + logical :: fclear + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + fclear = clear + call psb_sprn(ap,descp,info,clear=fclear) + res = min(0,info) + + return + end function psb_c_ssprn +!!$ +!!$ function psb_c_sspprint(mh) bind(c) result(res) +!!$ +!!$ implicit none +!!$ integer(psb_c_int) :: res +!!$ integer(psb_c_int), value :: mh +!!$ integer :: info +!!$ +!!$ +!!$ res = -1 +!!$ call psb_check_double_spmat_handle(mh,info) +!!$ if (info < 0) return +!!$ +!!$ call psb_csprt(0,double_spmat_pool(mh)%item,head='Debug mat') +!!$ +!!$ res = 0 +!!$ +!!$ return +!!$ end function psb_c_sspprint + + +end module psb_s_tools_cbind_mod + diff --git a/cbind/base/psb_z_psblas_cbind_mod.f90 b/cbind/base/psb_z_psblas_cbind_mod.f90 new file mode 100644 index 00000000..43cb6d8f --- /dev/null +++ b/cbind/base/psb_z_psblas_cbind_mod.f90 @@ -0,0 +1,289 @@ +module psb_z_psblas_cbind_mod + use iso_c_binding + +contains + + function psb_c_zgeaxpby(alpha,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_zvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_double_complex), value :: alpha,beta + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp,yp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + + call psb_geaxpby(alpha,xp,beta,yp,descp,info) + + res = info + + end function psb_c_zgeaxpby + + function psb_c_zgenrm2(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double_complex) :: res + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_genrm2(xp,descp,info) + + end function psb_c_zgenrm2 + + function psb_c_zgeamax(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double_complex) :: res + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geamax(xp,descp,info) + + end function psb_c_zgeamax + + function psb_c_zgeasum(xh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double_complex) :: res + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1.0 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + res = psb_geasum(xp,descp,info) + + end function psb_c_zgeasum + + + function psb_c_zspnrmi(ah,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + real(c_double_complex) :: res + + type(psb_c_zspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + res = psb_spnrmi(ap,descp,info) + + end function psb_c_zspnrmi + + function psb_c_zgedot(xh,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + complex(c_double_complex) :: res + + type(psb_c_zvector) :: xh,yh + type(psb_c_descriptor) :: cdh + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp,yp + integer :: info + + res = -1.0 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + res = psb_gedot(xp,yp,descp,info) + + end function psb_c_zgedot + + + function psb_c_zspmm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_zspmat) :: ah + type(psb_c_zvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_double_complex), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp,yp + type(psb_zspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spmm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_zspmm + + + function psb_c_zspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_zspmat) :: ah + type(psb_c_zvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_double_complex), value :: alpha, beta + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp,yp + type(psb_zspmat_type), pointer :: ap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + call psb_spsm(alpha,ap,xp,beta,yp,descp,info) + + res = info + + end function psb_c_zspsm + + +end module psb_z_psblas_cbind_mod diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 new file mode 100644 index 00000000..ef6285bf --- /dev/null +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -0,0 +1,119 @@ +module psb_z_serial_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + + function psb_c_zvect_get_nrows(xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_zvector) :: xh + + type(psb_z_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + res = vp%get_nrows() + end if + + end function psb_c_zvect_get_nrows + + function psb_c_zvect_f_get_cpy(v,xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + complex(c_double_complex) :: v(*) + type(psb_c_zvector) :: xh + + type(psb_z_vect_type), pointer :: vp + complex(psb_dpk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + fv = vp%get_vect() + sz = size(fv) + v(1:sz) = fv(1:sz) + end if + + end function psb_c_zvect_f_get_cpy + + + function psb_c_zvect_zero(xh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_zvector) :: xh + + type(psb_z_vect_type), pointer :: vp + integer :: info + + res = -1 + + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call vp%zero() + end if + + end function psb_c_zvect_zero + + + function psb_c_zmat_get_nrows(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_zspmat) :: mh + type(psb_zspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_nrows() + + end function psb_c_zmat_get_nrows + + + function psb_c_zmat_get_ncols(mh) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_zspmat) :: mh + type(psb_zspmat_type), pointer :: ap + integer :: info + + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + res = ap%get_ncols() + + end function psb_c_zmat_get_ncols + + + +end module psb_z_serial_cbind_mod + diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 new file mode 100644 index 00000000..96e2b9b0 --- /dev/null +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -0,0 +1,385 @@ +module psb_z_tools_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + function psb_c_zgeall(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_zgeall + + function psb_c_zgeasb(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geasb(xp,descp,info) + res = min(0,info) + + return + end function psb_c_zgeasb + + function psb_c_zgefree(xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_gefree(xp,descp,info) + res = min(0,info) + xh%item = c_null_ptr + + return + end function psb_c_zgefree + + + function psb_c_zgeins(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) + complex(c_double_complex) :: val(*) + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + res = min(0,info) + + return + end function psb_c_zgeins + + + function psb_c_zgeins_add(nz,irw,val,xh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*) + complex(c_double_complex) :: val(*) + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + res = min(0,info) + + return + end function psb_c_zgeins_add + + + function psb_c_zspall(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_zspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + return + end if + allocate(ap) + call psb_spall(ap,descp,info) + mh%item = c_loc(ap) + res = min(0,info) + + return + end function psb_c_zspall + + + + function psb_c_zspasb(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_zspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spasb(ap,descp,info) + res = min(0,info) + return + end function psb_c_zspasb + + + function psb_c_zspfree(mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + type(psb_c_zspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + call psb_spfree(ap,descp,info) + res = min(0,info) + mh%item=c_null_ptr + return + end function psb_c_zspfree + + +#if 0 + + function psb_c_zspasb_opt(mh,cdh,afmt,upd,dupl) bind(c) result(res) + +#ifdef HAVE_LIBRSB + use psb_z_rsb_mat_mod +#endif + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: cdh, mh,upd,dupl + character(c_char) :: afmt(*) + integer :: info,n, fdupl + character(len=5) :: fafmt +#ifdef HAVE_LIBRSB + type(psb_z_rsb_sparse_mat) :: arsb +#endif + + res = -1 + call psb_check_descriptor_handle(cdh,info) + if (info < 0) return + call psb_check_double_spmat_handle(mh,info) + if (info < 0) return + + call stringc2f(afmt,fafmt) + select case(fafmt) +#ifdef HAVE_LIBRSB + case('RSB') + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & upd=upd,dupl=dupl,mold=arsb) +#endif + case default + call psb_spasb(double_spmat_pool(mh)%item,descriptor_pool(cdh)%item,info,& + & afmt=fafmt,upd=upd,dupl=dupl) + end select + + res = min(0,info) + + return + end function psb_c_zspasb_opt +#endif + + function psb_c_zspins(nz,irw,icl,val,mh,cdh) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: nz + integer(psb_c_int) :: irw(*), icl(*) + complex(c_double_complex) :: val(*) + type(psb_c_zspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + integer :: info,n + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + res = min(0,info) + return + end function psb_c_zspins + + + function psb_c_zsprn(mh,cdh,clear) bind(c) result(res) + + implicit none + integer(psb_c_int) :: res + logical(c_bool), value :: clear + type(psb_c_zspmat) :: mh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + integer :: info + logical :: fclear + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + + fclear = clear + call psb_sprn(ap,descp,info,clear=fclear) + res = min(0,info) + + return + end function psb_c_zsprn +!!$ +!!$ function psb_c_zspprint(mh) bind(c) result(res) +!!$ +!!$ implicit none +!!$ integer(psb_c_int) :: res +!!$ integer(psb_c_int), value :: mh +!!$ integer :: info +!!$ +!!$ +!!$ res = -1 +!!$ call psb_check_double_spmat_handle(mh,info) +!!$ if (info < 0) return +!!$ +!!$ call psb_csprt(0,double_spmat_pool(mh)%item,head='Debug mat') +!!$ +!!$ res = 0 +!!$ +!!$ return +!!$ end function psb_c_zspprint + + +end module psb_z_tools_cbind_mod + From 4734f1916729f666e2ad8a8d492ab6f12f91771e Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 4 Apr 2017 15:31:46 +0000 Subject: [PATCH 06/27] psblas3-mcbind: Makefile cbind/base/Makefile cbind/base/psb_base_cbind_mod.f90 cbind/base/psb_base_psblas_cbind_mod.f90 cbind/base/psb_c_base.h cbind/base/psb_c_cbase.c cbind/base/psb_c_cbase.h cbind/base/psb_c_sbase.c cbind/base/psb_c_sbase.h cbind/base/psb_c_zbase.c cbind/base/psb_c_zbase.h cbind/base/psb_cpenv_mod.f90 cbind/krylov cbind/prec cbind/test cbind/util Fixed C includes. --- Makefile | 6 +-- cbind/base/Makefile | 17 ++++--- cbind/base/psb_base_cbind_mod.f90 | 4 ++ cbind/base/psb_base_psblas_cbind_mod.f90 | 3 ++ cbind/base/psb_c_base.h | 3 ++ cbind/base/psb_c_cbase.c | 39 +++++++++++++++ cbind/base/psb_c_cbase.h | 64 ++++++++++++++++++++++++ cbind/base/psb_c_sbase.c | 39 +++++++++++++++ cbind/base/psb_c_sbase.h | 64 ++++++++++++++++++++++++ cbind/base/psb_c_zbase.c | 39 +++++++++++++++ cbind/base/psb_c_zbase.h | 64 ++++++++++++++++++++++++ cbind/base/psb_cpenv_mod.f90 | 31 ++++++++++++ 12 files changed, 364 insertions(+), 9 deletions(-) create mode 100644 cbind/base/psb_c_cbase.c create mode 100644 cbind/base/psb_c_cbase.h create mode 100644 cbind/base/psb_c_sbase.c create mode 100644 cbind/base/psb_c_sbase.h create mode 100644 cbind/base/psb_c_zbase.c create mode 100644 cbind/base/psb_c_zbase.h diff --git a/Makefile b/Makefile index 389360ca..0a34e005 100644 --- a/Makefile +++ b/Makefile @@ -48,15 +48,15 @@ check: all make check -C test/serial cleanlib: - (cd lib; /bin/rm -f *.a *$(.mod) *$(.fh)) - (cd include; /bin/rm -f *.a *$(.mod) *$(.fh)) + (cd lib; /bin/rm -f *.a *$(.mod) *$(.fh) *.h) + (cd include; /bin/rm -f *.a *$(.mod) *$(.fh) *.h) veryclean: cleanlib cd base && $(MAKE) veryclean cd prec && $(MAKE) veryclean cd krylov && $(MAKE) veryclean cd util && $(MAKE) veryclean - cd cbind && $(MAKE) clean + cd cbind && $(MAKE) veryclean cd test/fileread && $(MAKE) clean cd test/pargen && $(MAKE) clean cd test/util && $(MAKE) clean diff --git a/cbind/base/Makefile b/cbind/base/Makefile index f6855808..29c5aaee 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -5,7 +5,7 @@ INCLUDEDIR=$(TOP)/include HERE=.. FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCLUDEDIR) -CINCLUDES=-I$(INCLUDEDIR) +CINCLUDES=-I. -I$(INCLUDEDIR) FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ psb_base_tools_cbind_mod.o psb_base_string_cbind_mod.o \ @@ -15,8 +15,8 @@ FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o -COBJS= psb_c_base.o psb_c_dbase.o -CMOD=psb_base_cbind.h psb_c_base.h psb_c_dbase.h +COBJS= psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o +CMOD=psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h OBJS=$(FOBJS) $(COBJS) LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ @@ -37,7 +37,12 @@ lib: $(OBJS) $(CMOD) $(COBJS): $(CMOD) psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_mod.o \ - psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o + psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o \ + psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o \ + psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ + psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ + psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o + psb_base_tools_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o \ @@ -45,9 +50,9 @@ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o \ psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o \ psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o \ -psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o: psb_base_tools_cbind_mod.o psb_objhandle_mod.o psb_base_string_cbind_mod.o -psb_base_psblas_cbind_mod.o: psb_d_psblas_cbind_mod.o +psb_base_psblas_cbind_mod.o: psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o psb_cpenv_mod.o: psb_base_string_cbind_mod.o psb_objhandle_mod.o diff --git a/cbind/base/psb_base_cbind_mod.f90 b/cbind/base/psb_base_cbind_mod.f90 index a943e57e..a4222ec1 100644 --- a/cbind/base/psb_base_cbind_mod.f90 +++ b/cbind/base/psb_base_cbind_mod.f90 @@ -2,5 +2,9 @@ module psb_base_cbind_mod use psb_objhandle_mod use psb_cpenv_mod use psb_base_tools_cbind_mod + use psb_s_tools_cbind_mod + use psb_d_tools_cbind_mod + use psb_c_tools_cbind_mod + use psb_z_tools_cbind_mod use psb_base_psblas_cbind_mod end module psb_base_cbind_mod diff --git a/cbind/base/psb_base_psblas_cbind_mod.f90 b/cbind/base/psb_base_psblas_cbind_mod.f90 index 8a53ea2f..1e6e03dc 100644 --- a/cbind/base/psb_base_psblas_cbind_mod.f90 +++ b/cbind/base/psb_base_psblas_cbind_mod.f90 @@ -1,6 +1,9 @@ module psb_base_psblas_cbind_mod use iso_c_binding + use psb_s_psblas_cbind_mod use psb_d_psblas_cbind_mod + use psb_c_psblas_cbind_mod + use psb_z_psblas_cbind_mod end module psb_base_psblas_cbind_mod diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 0a680bc4..02698686 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -52,7 +52,10 @@ extern "C" { psb_i_t psb_c_get_errstatus(); void psb_c_ibcast(psb_i_t ictxt, psb_i_t n, psb_i_t *v, psb_i_t root); + void psb_c_sbcast(psb_i_t ictxt, psb_i_t n, psb_s_t *v, psb_i_t root); void psb_c_dbcast(psb_i_t ictxt, psb_i_t n, psb_d_t *v, psb_i_t root); + void psb_c_cbcast(psb_i_t ictxt, psb_i_t n, psb_c_t *v, psb_i_t root); + void psb_c_zbcast(psb_i_t ictxt, psb_i_t n, psb_z_t *v, psb_i_t root); void psb_c_hbcast(psb_i_t ictxt, const char *v, psb_i_t root); /* Descriptor/integer routines */ diff --git a/cbind/base/psb_c_cbase.c b/cbind/base/psb_c_cbase.c new file mode 100644 index 00000000..6d4552a1 --- /dev/null +++ b/cbind/base/psb_c_cbase.c @@ -0,0 +1,39 @@ +#include +#include "psb_c_cbase.h" + +psb_c_cvector* psb_c_new_cvector() +{ + psb_c_cvector* temp; + + temp=(psb_c_cvector *) malloc(sizeof(psb_c_cvector)); + temp->cvector=NULL; + return(temp); +} + +psb_c_t* psb_c_cvect_get_cpy(psb_c_cvector *xh) +{ + psb_c_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_cvect_get_nrows(xh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_c_t *)malloc(vsize*sizeof(psb_c_t)))!=NULL) + psb_c_cvect_f_get_cpy(temp,xh); + + return(temp); + +} + + +psb_c_cspmat* psb_c_new_cspmat() +{ + psb_c_cspmat* temp; + + temp=(psb_c_cspmat *) malloc(sizeof(psb_c_cspmat)); + temp->cspmat=NULL; + return(temp); +} diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h new file mode 100644 index 00000000..9eaaaaa9 --- /dev/null +++ b/cbind/base/psb_c_cbase.h @@ -0,0 +1,64 @@ +#ifndef PSB_C_DBASE_ +#define PSB_C_DBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_CVECTOR { + void *cvector; +} psb_c_cvector; + +typedef struct PSB_C_CSPMAT { + void *cspmat; +} psb_c_cspmat; + + +/* dense vectors */ +psb_c_cvector* psb_c_new_cvector(); +psb_i_t psb_c_cvect_get_nrows(psb_c_cvector *xh); +psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); +psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); +psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); + +psb_i_t psb_c_dgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_c_t *val, + psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_c_t *val, + psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); + +/* sparse matrices*/ +psb_c_cspmat* psb_c_new_cspmat(); +psb_i_t psb_c_dspall(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspasb(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspfree(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_c_t *val, + psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dmat_get_nrows(psb_c_cspmat *mh); +psb_i_t psb_c_dmat_get_ncols(psb_c_cspmat *mh); + +/* psb_i_t psb_c_dspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dsprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_dspprint(psb_c_cspmat *mh); */ + +/* psblas computational routines */ +psb_c_t psb_c_dgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_dgenrm2(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_dgeamax(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_dgeasum(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_dspnrmi(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpby(psb_c_t alpha, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspmm(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_c_sbase.c b/cbind/base/psb_c_sbase.c new file mode 100644 index 00000000..a1b50c46 --- /dev/null +++ b/cbind/base/psb_c_sbase.c @@ -0,0 +1,39 @@ +#include +#include "psb_c_sbase.h" + +psb_c_svector* psb_c_new_svector() +{ + psb_c_svector* temp; + + temp=(psb_c_svector *) malloc(sizeof(psb_c_svector)); + temp->svector=NULL; + return(temp); +} + +psb_s_t* psb_c_svect_get_cpy(psb_c_svector *xh) +{ + psb_s_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_svect_get_nrows(xh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_s_t *)malloc(vsize*sizeof(psb_s_t)))!=NULL) + psb_c_svect_f_get_cpy(temp,xh); + + return(temp); + +} + + +psb_c_sspmat* psb_c_new_sspmat() +{ + psb_c_sspmat* temp; + + temp=(psb_c_sspmat *) malloc(sizeof(psb_c_sspmat)); + temp->sspmat=NULL; + return(temp); +} diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h new file mode 100644 index 00000000..6f08a50d --- /dev/null +++ b/cbind/base/psb_c_sbase.h @@ -0,0 +1,64 @@ +#ifndef PSB_C_DBASE_ +#define PSB_C_DBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_SVECTOR { + void *svector; +} psb_c_svector; + +typedef struct PSB_C_SSPMAT { + void *sspmat; +} psb_c_sspmat; + + +/* dense vectors */ +psb_c_svector* psb_c_new_svector(); +psb_i_t psb_c_svect_get_nrows(psb_c_svector *xh); +psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); +psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); +psb_i_t psb_c_svect_zero(psb_c_svector *xh); + +psb_i_t psb_c_dgeall(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_s_t *val, + psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_s_t *val, + psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgefree(psb_c_svector *xh, psb_c_descriptor *cdh); + +/* sparse matrices*/ +psb_c_sspmat* psb_c_new_sspmat(); +psb_i_t psb_c_dspall(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspasb(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspfree(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_s_t *val, + psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dmat_get_nrows(psb_c_sspmat *mh); +psb_i_t psb_c_dmat_get_ncols(psb_c_sspmat *mh); + +/* psb_i_t psb_c_dspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dsprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_dspprint(psb_c_sspmat *mh); */ + +/* psblas computational routines */ +psb_s_t psb_c_dgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_dgenrm2(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_dgeamax(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_dgeasum(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_dspnrmi(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpby(psb_s_t alpha, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspmm(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_c_zbase.c b/cbind/base/psb_c_zbase.c new file mode 100644 index 00000000..d5d0cd87 --- /dev/null +++ b/cbind/base/psb_c_zbase.c @@ -0,0 +1,39 @@ +#include +#include "psb_c_zbase.h" + +psb_c_zvector* psb_c_new_zvector() +{ + psb_c_zvector* temp; + + temp=(psb_c_zvector *) malloc(sizeof(psb_c_zvector)); + temp->zvector=NULL; + return(temp); +} + +psb_z_t* psb_c_zvect_get_cpy(psb_c_zvector *xh) +{ + psb_z_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_zvect_get_nrows(xh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_z_t *)malloc(vsize*sizeof(psb_z_t)))!=NULL) + psb_c_zvect_f_get_cpy(temp,xh); + + return(temp); + +} + + +psb_c_zspmat* psb_c_new_zspmat() +{ + psb_c_zspmat* temp; + + temp=(psb_c_zspmat *) malloc(sizeof(psb_c_zspmat)); + temp->zspmat=NULL; + return(temp); +} diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h new file mode 100644 index 00000000..7b7f24c4 --- /dev/null +++ b/cbind/base/psb_c_zbase.h @@ -0,0 +1,64 @@ +#ifndef PSB_C_DBASE_ +#define PSB_C_DBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_ZVECTOR { + void *zvector; +} psb_c_zvector; + +typedef struct PSB_C_ZSPMAT { + void *zspmat; +} psb_c_zspmat; + + +/* dense vectors */ +psb_c_zvector* psb_c_new_zvector(); +psb_i_t psb_c_zvect_get_nrows(psb_c_zvector *xh); +psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); +psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); +psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); + +psb_i_t psb_c_dgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_z_t *val, + psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_z_t *val, + psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); + +/* sparse matrices*/ +psb_c_zspmat* psb_c_new_zspmat(); +psb_i_t psb_c_dspall(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspasb(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspfree(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_z_t *val, + psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dmat_get_nrows(psb_c_zspmat *mh); +psb_i_t psb_c_dmat_get_ncols(psb_c_zspmat *mh); + +/* psb_i_t psb_c_dspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_dspprint(psb_c_zspmat *mh); */ + +/* psblas computational routines */ +psb_z_t psb_c_dgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeamax(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeasum(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dspnrmi(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpby(psb_z_t alpha, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspmm(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 index 73d88202..fea0a7dc 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.f90 @@ -87,6 +87,21 @@ contains call psb_bcast(ictxt,v(1:n),root=root) end subroutine psb_c_ibcast + subroutine psb_c_sbcast(ictxt,n,v,root) bind(c) + use psb_base_mod + implicit none + integer(psb_c_int), value :: ictxt,n, root + real(c_float) :: v(*) + + if (n < 0) then + write(0,*) 'Wrong size in BCAST' + return + end if + if (n==0) return + + call psb_bcast(ictxt,v(1:n),root=root) + end subroutine psb_c_sbcast + subroutine psb_c_dbcast(ictxt,n,v,root) bind(c) use psb_base_mod, only : psb_bcast implicit none @@ -102,6 +117,22 @@ contains call psb_bcast(ictxt,v(1:n),root=root) end subroutine psb_c_dbcast + + subroutine psb_c_cbcast(ictxt,n,v,root) bind(c) + use psb_base_mod, only : psb_bcast + implicit none + integer(psb_c_int), value :: ictxt,n, root + complex(c_float_complex) :: v(*) + + if (n < 0) then + write(0,*) 'Wrong size in BCAST' + return + end if + if (n==0) return + + call psb_bcast(ictxt,v(1:n),root=root) + end subroutine psb_c_cbcast + subroutine psb_c_zbcast(ictxt,n,v,root) bind(c) use psb_base_mod implicit none From b6686e96f667a1f33ccd669dcd822dc3df8a9faa Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 4 Apr 2017 19:16:58 +0000 Subject: [PATCH 07/27] psblas3-mcbind: cbind/Makefile cbind/prec/Makefile cbind/prec/psb_c_dprec.c cbind/prec/psb_c_dprec.h cbind/prec/psb_dprec_cbind_mod.f90 cbind/prec/psb_dprec_cbind_mod.mod cbind/prec/psb_prec_cbind.h cbind/prec/psb_prec_cbind_mod.f90 First step for C binding of PREC stuff. --- cbind/Makefile | 5 +- cbind/prec/Makefile | 32 ++++++++ cbind/prec/psb_c_dprec.c | 12 +++ cbind/prec/psb_c_dprec.h | 24 ++++++ cbind/prec/psb_dprec_cbind_mod.f90 | 118 +++++++++++++++++++++++++++++ cbind/prec/psb_dprec_cbind_mod.mod | Bin 0 -> 403244 bytes cbind/prec/psb_prec_cbind.h | 6 ++ cbind/prec/psb_prec_cbind_mod.f90 | 3 + 8 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 cbind/prec/Makefile create mode 100644 cbind/prec/psb_c_dprec.c create mode 100644 cbind/prec/psb_c_dprec.h create mode 100644 cbind/prec/psb_dprec_cbind_mod.f90 create mode 100644 cbind/prec/psb_dprec_cbind_mod.mod create mode 100644 cbind/prec/psb_prec_cbind.h create mode 100644 cbind/prec/psb_prec_cbind_mod.f90 diff --git a/cbind/Makefile b/cbind/Makefile index 88d0120d..85a09130 100644 --- a/cbind/Makefile +++ b/cbind/Makefile @@ -5,7 +5,7 @@ LIBDIR=../lib INCDIR=../include LIBNAME=$(CBINDLIBNAME) -lib: based +lib: based precd /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) /bin/cp -p $(CPUPDFLAG) *$(.mod) *.h $(INCDIR) @@ -13,10 +13,13 @@ lib: based based: cd base && $(MAKE) lib LIBNAME=$(LIBNAME) +precd: + cd prec && $(MAKE) lib LIBNAME=$(LIBNAME) clean: cd base && $(MAKE) clean + cd prec && $(MAKE) clean veryclean: clean diff --git a/cbind/prec/Makefile b/cbind/prec/Makefile new file mode 100644 index 00000000..dbd3d67f --- /dev/null +++ b/cbind/prec/Makefile @@ -0,0 +1,32 @@ +TOP=../.. +include $(TOP)/Make.inc +LIBDIR=$(TOP)/lib +INCLUDEDIR=$(TOP)/include +HERE=.. + +FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCLUDEDIR) +CINCLUDES=-I. -I$(INCLUDEDIR) + +OBJS=psb_prec_cbind_mod.o psb_dprec_cbind_mod.o psb_c_dprec.o +CMOD=psb_prec_cbind.h psb_c_dprec.h + + +LIBMOD=psb_prec_cbind_mod$(.mod) +LOCAL_MODS=$(LIBMOD) +LIBNAME=$(CPRECLIBNAME) + + +lib: $(OBJS) $(CMOD) + $(AR) $(HERE)/$(LIBNAME) $(OBJS) + $(RANLIB) $(HERE)/$(LIBNAME) + /bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR) + /bin/cp -p $(LIBMOD) $(CMOD) $(INCLUDEDIR) + +psb_prec_cbind_mod.o: psb_dprec_cbind_mod.o +veryclean: clean + /bin/rm -f $(HERE)/$(LIBNAME) + +clean: + /bin/rm -f $(OBJS) $(LOCAL_MODS) + +veryclean: clean diff --git a/cbind/prec/psb_c_dprec.c b/cbind/prec/psb_c_dprec.c new file mode 100644 index 00000000..f3234337 --- /dev/null +++ b/cbind/prec/psb_c_dprec.c @@ -0,0 +1,12 @@ +#include +#include "psb_c_dprec.h" + +psb_c_dprec* psb_c_new_dprec() +{ + psb_c_dprec* temp; + + temp=(psb_c_dprec *) malloc(sizeof(psb_c_dprec)); + temp->dprec=NULL; + return(temp); +} + diff --git a/cbind/prec/psb_c_dprec.h b/cbind/prec/psb_c_dprec.h new file mode 100644 index 00000000..bb8775c1 --- /dev/null +++ b/cbind/prec/psb_c_dprec.h @@ -0,0 +1,24 @@ +#ifndef PSB_C_DPREC_ +#define PSB_C_DPREC_ +#include "psb_base_cbind.h" +/* Object handle related routines */ +/* Note: psb_get_XXX_handle returns: <= 0 unsuccessful */ +/* >0 valid handle */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_DPREC { + void *dprec; +} psb_c_dprec; + +psb_c_dprec* psb_c_new_dprec(); + +int psb_c_dprecinit(psb_c_dprec *ph, const char *ptype); +int psb_c_dprecbld(psb_c_dspmat *ah, psb_c_descriptor *cdh, psb_c_dprec *ph); +int psb_c_dprecfree(psb_c_dprec *ph); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cbind/prec/psb_dprec_cbind_mod.f90 b/cbind/prec/psb_dprec_cbind_mod.f90 new file mode 100644 index 00000000..1e756d11 --- /dev/null +++ b/cbind/prec/psb_dprec_cbind_mod.f90 @@ -0,0 +1,118 @@ +module psb_dprec_cbind_mod + + use iso_c_binding + use psb_prec_mod, only : psb_dprec_type + use psb_objhandle_mod + use psb_base_string_cbind_mod + + type, bind(c) :: psb_c_dprec + type(c_ptr) :: item = c_null_ptr + end type psb_c_dprec + + +contains + + + function psb_c_dprecinit(ph,ptype) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_dprec) :: ph + character(c_char) :: ptype(*) + type(psb_dprec_type), pointer :: precp + integer :: info + character(len=80) :: fptype + + res = -1 + if (c_associated(ph%item)) then + return + end if + + allocate(precp,stat=info) + if (info /= 0) return + ph%item = c_loc(precp) + + call stringc2f(ptype,fptype) + + call psb_precinit(precp,fptype,info) + + res = min(0,info) + return + end function psb_c_dprecinit + + + + function psb_c_dprecbld(ah,cdh,ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_dspmat) :: ah + type(psb_c_dprec) :: ph + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + type(psb_dprec_type), pointer :: precp + + integer :: info + + res = -1 +!!$ write(*,*) 'Entry: ', psb_c_cd_get_local_rows(cdh) + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precbld(ap,descp, precp, info) + + res = min(info,0) + + end function psb_c_dprecbld + + + function psb_c_dprecfree(ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_dprec) :: ph + + type(psb_dprec_type), pointer :: precp + + integer :: info + + res = -1 + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precfree(precp, info) + + res = min(info,0) + + end function psb_c_dprecfree + + +end module psb_dprec_cbind_mod diff --git a/cbind/prec/psb_dprec_cbind_mod.mod b/cbind/prec/psb_dprec_cbind_mod.mod new file mode 100644 index 0000000000000000000000000000000000000000..b153ab91d1f74eab360a4107adb68d630593fab5 GIT binary patch literal 403244 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

>VEubH9>Z?tLQT}{ME_da;--Z()>xkfawpn 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 nT^5k=JA={-m|WGV}`q4bPZt389f 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∨+%?!=Oik0b7V=& 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�@8VPR*^I|W{+ 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�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 Date: Tue, 4 Apr 2017 19:50:55 +0000 Subject: [PATCH 08/27] *** empty log message *** --- cbind/prec/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cbind/prec/Makefile b/cbind/prec/Makefile index dbd3d67f..aa88b93a 100644 --- a/cbind/prec/Makefile +++ b/cbind/prec/Makefile @@ -11,7 +11,7 @@ OBJS=psb_prec_cbind_mod.o psb_dprec_cbind_mod.o psb_c_dprec.o CMOD=psb_prec_cbind.h psb_c_dprec.h -LIBMOD=psb_prec_cbind_mod$(.mod) +LIBMOD=psb_prec_cbind_mod$(.mod) psb_prec_cbind_mod$(.mod) LOCAL_MODS=$(LIBMOD) LIBNAME=$(CPRECLIBNAME) From 9cd9ea63a45232692e48cdf61c1b6a7241c24345 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 5 Apr 2017 12:18:22 +0000 Subject: [PATCH 09/27] psblas3-cbind: cbind/prec/psb_dprec_cbind_mod.mod Remove wrong file --- cbind/prec/psb_dprec_cbind_mod.mod | Bin 398601 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cbind/prec/psb_dprec_cbind_mod.mod diff --git a/cbind/prec/psb_dprec_cbind_mod.mod b/cbind/prec/psb_dprec_cbind_mod.mod deleted file mode 100644 index 804053e0d9bcf08fa56e5826d71c0edd1260f1b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398601 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

    I?nbqBsZM((wr`(fCz_(Z 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

    Yq437{9S^##YO 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 Date: Wed, 5 Apr 2017 12:19:17 +0000 Subject: [PATCH 10/27] psblas3-cbind: configure.ac configure Configure fix for move_alloc --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 00b83c95..4dd915f4 100755 --- a/configure +++ b/configure @@ -8690,7 +8690,7 @@ $as_echo "$ac_try_echo") >&5 } && test -s conftest.$ac_objext; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } - FDEFINES="$psblas_cv_define_prepend-DHAVE_MOVE_ALLOC $FDEFINES" + : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 diff --git a/configure.ac b/configure.ac index bd4c0452..72ea3e35 100755 --- a/configure.ac +++ b/configure.ac @@ -570,7 +570,7 @@ PAC_FORTRAN_TEST_SOURCE( ) PAC_FORTRAN_HAVE_MOVE_ALLOC( - [FDEFINES="$psblas_cv_define_prepend-DHAVE_MOVE_ALLOC $FDEFINES"], + [], [AC_MSG_ERROR([Sorry, cannot build PSBLAS without support for MOVE_ALLOC. Please get a Fortran compiler that supports it, e.g. GNU Fortran 4.8.])] ) From e30cafaf11f615acd261ffafc5583b5ec67e876d Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 5 Apr 2017 16:01:20 +0000 Subject: [PATCH 11/27] psblas3-mcbind: cbind/base/psb_c_base.h cbind/base/psb_c_tools_cbind_mod.F90 cbind/base/psb_cpenv_mod.f90 cbind/base/psb_d_tools_cbind_mod.F90 cbind/base/psb_s_tools_cbind_mod.F90 cbind/base/psb_z_tools_cbind_mod.F90 Added index base internal and accessors. Added adjustment for index base other than 1. --- cbind/base/psb_c_base.h | 3 +++ cbind/base/psb_c_tools_cbind_mod.F90 | 36 +++++++++++++++++++++------- cbind/base/psb_cpenv_mod.f90 | 17 +++++++++++++ cbind/base/psb_d_tools_cbind_mod.F90 | 36 +++++++++++++++++++++------- cbind/base/psb_s_tools_cbind_mod.F90 | 36 +++++++++++++++++++++------- cbind/base/psb_z_tools_cbind_mod.F90 | 36 +++++++++++++++++++++------- 6 files changed, 128 insertions(+), 36 deletions(-) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index 02698686..e61cfa79 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -51,6 +51,9 @@ extern "C" { psb_d_t psb_c_wtime(); psb_i_t psb_c_get_errstatus(); + psb_i_t psb_c_get_index_base(); + void psb_c_set_index_base(psb_i_t base); + void psb_c_ibcast(psb_i_t ictxt, psb_i_t n, psb_i_t *v, psb_i_t root); void psb_c_sbcast(psb_i_t ictxt, psb_i_t n, psb_s_t *v, psb_i_t root); void psb_c_dbcast(psb_i_t ictxt, psb_i_t n, psb_d_t *v, psb_i_t root); diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 2f30b82e..7f1b0cf4 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -1,6 +1,7 @@ module psb_c_tools_cbind_mod use iso_c_binding use psb_base_mod + use psb_cpenv_mod use psb_objhandle_mod use psb_base_string_cbind_mod use psb_base_tools_cbind_mod @@ -110,7 +111,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_c_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -124,8 +125,15 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_ovwrt_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + else + call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + end if + res = min(0,info) return @@ -144,7 +152,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_c_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -158,8 +166,14 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_add_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + else + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + end if res = min(0,info) return @@ -308,7 +322,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_cspmat_type), pointer :: ap - integer :: info,n + integer :: ixb,info,n res = -1 if (c_associated(cdh%item)) then @@ -322,8 +336,12 @@ contains return end if - - call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + else + call psb_spins(nz,(irw(1:nz)+(1-ixb)),(icl(1:nz)+(1-ixb)),val(1:nz),ap,descp,info) + end if res = min(0,info) return end function psb_c_cspins diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 index fea0a7dc..cda907ee 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.f90 @@ -1,9 +1,26 @@ module psb_cpenv_mod use iso_c_binding use psb_objhandle_mod + + integer, private :: psb_c_index_base=0 contains + function psb_c_get_index_base() bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + + res = psb_c_index_base + end function psb_c_get_index_base + + subroutine psb_c_set_index_base(base) bind(c) + implicit none + integer(psb_c_int) :: base + + psb_c_index_base = base + end subroutine psb_c_set_index_base + function psb_c_get_errstatus() bind(c) result(res) use psb_base_mod, only : psb_get_errstatus implicit none diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 544262c3..7a568352 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -1,6 +1,7 @@ module psb_d_tools_cbind_mod use iso_c_binding use psb_base_mod + use psb_cpenv_mod use psb_objhandle_mod use psb_base_string_cbind_mod use psb_base_tools_cbind_mod @@ -110,7 +111,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -124,8 +125,15 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_ovwrt_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + else + call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + end if + res = min(0,info) return @@ -144,7 +152,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -158,8 +166,14 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_add_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + else + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + end if res = min(0,info) return @@ -308,7 +322,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_dspmat_type), pointer :: ap - integer :: info,n + integer :: ixb,info,n res = -1 if (c_associated(cdh%item)) then @@ -322,8 +336,12 @@ contains return end if - - call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + else + call psb_spins(nz,(irw(1:nz)+(1-ixb)),(icl(1:nz)+(1-ixb)),val(1:nz),ap,descp,info) + end if res = min(0,info) return end function psb_c_dspins diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index e3b7fd76..e93bd761 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -1,6 +1,7 @@ module psb_s_tools_cbind_mod use iso_c_binding use psb_base_mod + use psb_cpenv_mod use psb_objhandle_mod use psb_base_string_cbind_mod use psb_base_tools_cbind_mod @@ -110,7 +111,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_s_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -124,8 +125,15 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_ovwrt_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + else + call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + end if + res = min(0,info) return @@ -144,7 +152,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_s_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -158,8 +166,14 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_add_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + else + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + end if res = min(0,info) return @@ -308,7 +322,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_sspmat_type), pointer :: ap - integer :: info,n + integer :: ixb,info,n res = -1 if (c_associated(cdh%item)) then @@ -322,8 +336,12 @@ contains return end if - - call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + else + call psb_spins(nz,(irw(1:nz)+(1-ixb)),(icl(1:nz)+(1-ixb)),val(1:nz),ap,descp,info) + end if res = min(0,info) return end function psb_c_sspins diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 96e2b9b0..fb0e0045 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -1,6 +1,7 @@ module psb_z_tools_cbind_mod use iso_c_binding use psb_base_mod + use psb_cpenv_mod use psb_objhandle_mod use psb_base_string_cbind_mod use psb_base_tools_cbind_mod @@ -110,7 +111,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_z_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -124,8 +125,15 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_ovwrt_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + else + call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_ovwrt_) + end if + res = min(0,info) return @@ -144,7 +152,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_z_vect_type), pointer :: xp - integer :: info + integer :: ixb, info res = -1 if (c_associated(cdh%item)) then @@ -158,8 +166,14 @@ contains return end if - call psb_geins(nz,irw(1:nz),val(1:nz),& - & xp,descp,info, dupl=psb_dupl_add_) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_geins(nz,irw(1:nz),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + else + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& + & xp,descp,info, dupl=psb_dupl_add_) + end if res = min(0,info) return @@ -308,7 +322,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_zspmat_type), pointer :: ap - integer :: info,n + integer :: ixb,info,n res = -1 if (c_associated(cdh%item)) then @@ -322,8 +336,12 @@ contains return end if - - call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + ixb = psb_c_get_index_base() + if (ixb == 1) then + call psb_spins(nz,irw(1:nz),icl(1:nz),val(1:nz),ap,descp,info) + else + call psb_spins(nz,(irw(1:nz)+(1-ixb)),(icl(1:nz)+(1-ixb)),val(1:nz),ap,descp,info) + end if res = min(0,info) return end function psb_c_zspins From 55bc44368bb00a3cd52b0327e1e6c347cf1da5c1 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 10:46:29 +0000 Subject: [PATCH 12/27] psblas3-mcbind: cbind/base/psb_base_cbind.h cbind/base/psb_c_cbase.h cbind/base/psb_c_dcomm.c cbind/base/psb_c_dcomm.h cbind/base/psb_c_sbase.h cbind/base/psb_c_zbase.h Fix C prototypes. Start writing COMM interfaces. --- cbind/base/psb_base_cbind.h | 4 ++++ cbind/base/psb_c_cbase.h | 46 ++++++++++++++++++------------------- cbind/base/psb_c_dcomm.c | 39 +++++++++++++++++++++++++++++++ cbind/base/psb_c_dcomm.h | 18 +++++++++++++++ cbind/base/psb_c_sbase.h | 46 ++++++++++++++++++------------------- cbind/base/psb_c_zbase.h | 46 ++++++++++++++++++------------------- 6 files changed, 130 insertions(+), 69 deletions(-) create mode 100644 cbind/base/psb_c_dcomm.c create mode 100644 cbind/base/psb_c_dcomm.h diff --git a/cbind/base/psb_base_cbind.h b/cbind/base/psb_base_cbind.h index 6e07e499..380208cb 100644 --- a/cbind/base/psb_base_cbind.h +++ b/cbind/base/psb_base_cbind.h @@ -2,6 +2,10 @@ #define PSB_BASE_CBIND_ #include "psb_c_base.h" +#include "psb_c_sbase.h" #include "psb_c_dbase.h" +#include "psb_c_cbase.h" +#include "psb_c_zbase.h" + #endif diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index 9eaaaaa9..ce9952f8 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -1,5 +1,5 @@ -#ifndef PSB_C_DBASE_ -#define PSB_C_DBASE_ +#ifndef PSB_C_CBASE_ +#define PSB_C_CBASE_ #include "psb_c_base.h" #ifdef __cplusplus @@ -22,40 +22,40 @@ psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); -psb_i_t psb_c_dgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_c_t *val, +psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeins(psb_i_t nz, const psb_i_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_c_t *val, +psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_c_t *val, psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); /* sparse matrices*/ psb_c_cspmat* psb_c_new_cspmat(); -psb_i_t psb_c_dspall(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspasb(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspfree(psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_c_t *val, +psb_i_t psb_c_cspall(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspasb(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspfree(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_c_t *val, psb_c_cspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dmat_get_nrows(psb_c_cspmat *mh); -psb_i_t psb_c_dmat_get_ncols(psb_c_cspmat *mh); +psb_i_t psb_c_cmat_get_nrows(psb_c_cspmat *mh); +psb_i_t psb_c_cmat_get_ncols(psb_c_cspmat *mh); -/* psb_i_t psb_c_dspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ +/* psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ -psb_i_t psb_c_dsprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_dspprint(psb_c_cspmat *mh); */ +psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_cspprint(psb_c_cspmat *mh); */ /* psblas computational routines */ -psb_c_t psb_c_dgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); -psb_s_t psb_c_dgenrm2(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_dgeamax(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_dgeasum(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_dspnrmi(psb_c_cvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeaxpby(psb_c_t alpha, psb_c_cvector *xh, +psb_c_t psb_c_cgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgeamax(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgeasum(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cspnrmi(psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaxpby(psb_c_t alpha, psb_c_cvector *xh, psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_cspmm(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, +psb_i_t psb_c_cspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus } diff --git a/cbind/base/psb_c_dcomm.c b/cbind/base/psb_c_dcomm.c new file mode 100644 index 00000000..6b31d18e --- /dev/null +++ b/cbind/base/psb_c_dcomm.c @@ -0,0 +1,39 @@ +#include +#include "psb_c_dbase.h" + +psb_c_dvector* psb_c_new_dvector() +{ + psb_c_dvector* temp; + + temp=(psb_c_dvector *) malloc(sizeof(psb_c_dvector)); + temp->dvector=NULL; + return(temp); +} + +psb_d_t* psb_c_dvect_get_cpy(psb_c_dvector *xh) +{ + psb_d_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_dvect_get_nrows(xh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_d_t *)malloc(vsize*sizeof(psb_d_t)))!=NULL) + psb_c_dvect_f_get_cpy(temp,xh); + + return(temp); + +} + + +psb_c_dspmat* psb_c_new_dspmat() +{ + psb_c_dspmat* temp; + + temp=(psb_c_dspmat *) malloc(sizeof(psb_c_dspmat)); + temp->dspmat=NULL; + return(temp); +} diff --git a/cbind/base/psb_c_dcomm.h b/cbind/base/psb_c_dcomm.h new file mode 100644 index 00000000..0d5f6c4a --- /dev/null +++ b/cbind/base/psb_c_dcomm.h @@ -0,0 +1,18 @@ +#ifndef PSB_C_DCOMM_ +#define PSB_C_DCOMM_ +#include "psb_c_dbase.h" + +#ifdef __cplusplus +extern "C" { +#endif + + psb_i_t psb_c_dvscatter(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_d_t* psb_c_dvgather(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_c_dspmat* psb_c_dspgather(psb_c_dspmat *ah, psb_c_descriptor *cdh); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index 6f08a50d..5d8132de 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -1,5 +1,5 @@ -#ifndef PSB_C_DBASE_ -#define PSB_C_DBASE_ +#ifndef PSB_C_SBASE_ +#define PSB_C_SBASE_ #include "psb_c_base.h" #ifdef __cplusplus @@ -22,40 +22,40 @@ psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); psb_i_t psb_c_svect_zero(psb_c_svector *xh); -psb_i_t psb_c_dgeall(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_s_t *val, +psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeins(psb_i_t nz, const psb_i_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_s_t *val, +psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_s_t *val, psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgefree(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); /* sparse matrices*/ psb_c_sspmat* psb_c_new_sspmat(); -psb_i_t psb_c_dspall(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspasb(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspfree(psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_s_t *val, +psb_i_t psb_c_sspall(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspasb(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspfree(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_s_t *val, psb_c_sspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dmat_get_nrows(psb_c_sspmat *mh); -psb_i_t psb_c_dmat_get_ncols(psb_c_sspmat *mh); +psb_i_t psb_c_smat_get_nrows(psb_c_sspmat *mh); +psb_i_t psb_c_smat_get_ncols(psb_c_sspmat *mh); -/* psb_i_t psb_c_dspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ +/* psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ -psb_i_t psb_c_dsprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_dspprint(psb_c_sspmat *mh); */ +psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_sspprint(psb_c_sspmat *mh); */ /* psblas computational routines */ -psb_s_t psb_c_dgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); -psb_s_t psb_c_dgenrm2(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_dgeamax(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_dgeasum(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_s_t psb_c_dspnrmi(psb_c_svector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeaxpby(psb_s_t alpha, psb_c_svector *xh, +psb_s_t psb_c_sgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgeamax(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgeasum(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sspnrmi(psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaxpby(psb_s_t alpha, psb_c_svector *xh, psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_sspmm(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, +psb_i_t psb_c_sspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus } diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 7b7f24c4..540562d7 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -1,5 +1,5 @@ -#ifndef PSB_C_DBASE_ -#define PSB_C_DBASE_ +#ifndef PSB_C_ZBASE_ +#define PSB_C_ZBASE_ #include "psb_c_base.h" #ifdef __cplusplus @@ -22,40 +22,40 @@ psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); -psb_i_t psb_c_dgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins(psb_i_t nz, const psb_i_t *irw, const psb_z_t *val, +psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeins(psb_i_t nz, const psb_i_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_z_t *val, +psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_i_t *irw, const psb_z_t *val, psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); /* sparse matrices*/ psb_c_zspmat* psb_c_new_zspmat(); -psb_i_t psb_c_dspall(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspasb(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspfree(psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_z_t *val, +psb_i_t psb_c_zspall(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspasb(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspfree(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspins(psb_i_t nz, const psb_i_t *irw, const psb_i_t *icl, const psb_z_t *val, psb_c_zspmat *mh, psb_c_descriptor *cdh); -psb_i_t psb_c_dmat_get_nrows(psb_c_zspmat *mh); -psb_i_t psb_c_dmat_get_ncols(psb_c_zspmat *mh); +psb_i_t psb_c_zmat_get_nrows(psb_c_zspmat *mh); +psb_i_t psb_c_zmat_get_ncols(psb_c_zspmat *mh); -/* psb_i_t psb_c_dspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ +/* psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ -psb_i_t psb_c_dsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_dspprint(psb_c_zspmat *mh); */ +psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); +/* psb_i_t psb_c_zspprint(psb_c_zspmat *mh); */ /* psblas computational routines */ -psb_z_t psb_c_dgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgenrm2(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgeamax(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dgeasum(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_d_t psb_c_dspnrmi(psb_c_zvector *xh, psb_c_descriptor *cdh); -psb_i_t psb_c_dgeaxpby(psb_z_t alpha, psb_c_zvector *xh, +psb_z_t psb_c_zgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgeamax(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgeasum(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zspnrmi(psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaxpby(psb_z_t alpha, psb_c_zvector *xh, psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_zspmm(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); -psb_i_t psb_c_dspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, +psb_i_t psb_c_zspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus } From af9864df40d37385e2a561bc24f87f5a14088d5d Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 10:47:33 +0000 Subject: [PATCH 13/27] *** empty log message *** --- cbind/base/psb_c_dcomm.c | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/cbind/base/psb_c_dcomm.c b/cbind/base/psb_c_dcomm.c index 6b31d18e..b6d708df 100644 --- a/cbind/base/psb_c_dcomm.c +++ b/cbind/base/psb_c_dcomm.c @@ -1,39 +1,4 @@ #include -#include "psb_c_dbase.h" +#include "psb_c_dcomm.h" -psb_c_dvector* psb_c_new_dvector() -{ - psb_c_dvector* temp; - - temp=(psb_c_dvector *) malloc(sizeof(psb_c_dvector)); - temp->dvector=NULL; - return(temp); -} -psb_d_t* psb_c_dvect_get_cpy(psb_c_dvector *xh) -{ - psb_d_t *temp=NULL; - psb_i_t vsize=0; - - if ((vsize=psb_c_dvect_get_nrows(xh))<0) - return(temp); - - if (vsize==0) - vsize=1; - - if ((temp=(psb_d_t *)malloc(vsize*sizeof(psb_d_t)))!=NULL) - psb_c_dvect_f_get_cpy(temp,xh); - - return(temp); - -} - - -psb_c_dspmat* psb_c_new_dspmat() -{ - psb_c_dspmat* temp; - - temp=(psb_c_dspmat *) malloc(sizeof(psb_c_dspmat)); - temp->dspmat=NULL; - return(temp); -} From 8883291d565414f72015315419fdb2bb076c1cd0 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 14:49:39 +0000 Subject: [PATCH 14/27] psblas3-mcbind: cbind/base/psb_c_base.h cbind/base/psb_c_cbase.h cbind/base/psb_c_dbase.h cbind/base/psb_c_dcomm.h cbind/base/psb_c_psblas_cbind_mod.f90 cbind/base/psb_c_sbase.h cbind/base/psb_c_zbase.h cbind/base/psb_d_psblas_cbind_mod.f90 cbind/base/psb_s_psblas_cbind_mod.f90 cbind/base/psb_z_psblas_cbind_mod.f90 New spmm_opt --- cbind/base/psb_c_base.h | 22 +++++++++++- cbind/base/psb_c_cbase.h | 3 ++ cbind/base/psb_c_dbase.h | 3 ++ cbind/base/psb_c_dcomm.h | 4 +++ cbind/base/psb_c_psblas_cbind_mod.f90 | 52 +++++++++++++++++++++++++++ cbind/base/psb_c_sbase.h | 3 ++ cbind/base/psb_c_zbase.h | 3 ++ cbind/base/psb_d_psblas_cbind_mod.f90 | 52 +++++++++++++++++++++++++++ cbind/base/psb_s_psblas_cbind_mod.f90 | 52 +++++++++++++++++++++++++++ cbind/base/psb_z_psblas_cbind_mod.f90 | 52 +++++++++++++++++++++++++++ 10 files changed, 245 insertions(+), 1 deletion(-) diff --git a/cbind/base/psb_c_base.h b/cbind/base/psb_c_base.h index e61cfa79..fe07902e 100644 --- a/cbind/base/psb_c_base.h +++ b/cbind/base/psb_c_base.h @@ -2,7 +2,7 @@ #define PSB_C_BASE__ #ifdef __cplusplus extern "C" { - typedef char _Bool; + /*typedef char _Bool;*/ #endif #include @@ -11,6 +11,7 @@ extern "C" { #include #include #include +#include #if defined(LONG_INTEGERS_) @@ -94,6 +95,25 @@ extern "C" { #define PSB_AFMT_COO "COO" #define PSB_AFMT_RSB "RSB" + /* Transpose argument */ +#define psb_NoTrans_ "N" +#define psb_Trans_ "T" +#define psb_ConjTrans_ "C" + + /* legal values for halo swap modes argument */ +#define psb_swap_send_ 1 +#define psb_swap_recv_ 2 +#define psb_swap_sync_ 4 +#define psb_swap_mpi_ 8 + + /* legal values for ovrl update argument */ +#define psb_none_ 0 +#define psb_sum_ 1 +#define psb_avg_ 2 +#define psb_square_root_ 3 +#define psb_setzero_ 4 + + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index ce9952f8..e74e39d9 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -55,6 +55,9 @@ psb_i_t psb_c_cgeaxpby(psb_c_t alpha, psb_c_cvector *xh, psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_cspmm(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspmm_opt(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); psb_i_t psb_c_cspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index f7179123..52868972 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -55,6 +55,9 @@ psb_i_t psb_c_dgeaxpby(psb_d_t alpha, psb_c_dvector *xh, psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_dspmm(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspmm_opt(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); psb_i_t psb_c_dspsm(psb_d_t alpha, psb_c_dspmat *th, psb_c_dvector *xh, psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus diff --git a/cbind/base/psb_c_dcomm.h b/cbind/base/psb_c_dcomm.h index 0d5f6c4a..9c906117 100644 --- a/cbind/base/psb_c_dcomm.h +++ b/cbind/base/psb_c_dcomm.h @@ -6,6 +6,10 @@ extern "C" { #endif + psb_i_t psb_c_dhalo(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dhalo_opt(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dovrl(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dovrl_opt(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dvscatter(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t* psb_c_dvgather(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_c_dspmat* psb_c_dspgather(psb_c_dspmat *ah, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_psblas_cbind_mod.f90 b/cbind/base/psb_c_psblas_cbind_mod.f90 index 809a16db..ac984562 100644 --- a/cbind/base/psb_c_psblas_cbind_mod.f90 +++ b/cbind/base/psb_c_psblas_cbind_mod.f90 @@ -241,6 +241,58 @@ contains end function psb_c_cspmm + function psb_c_cspmm_opt(alpha,ah,xh,beta,yh,cdh,trans,doswap) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_cspmat) :: ah + type(psb_c_cvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_float_complex), value :: alpha, beta + character(c_char) :: trans + logical(c_bool), value :: doswap + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp,yp + type(psb_cspmat_type), pointer :: ap + character :: ftrans + logical :: fdoswap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + fdoswap = doswap + ftrans = trans + call psb_spmm(alpha,ap,xp,beta,yp,descp,info,trans=ftrans,doswap=fdoswap) + + res = info + + end function psb_c_cspmm_opt + + function psb_c_cspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index 5d8132de..47a72d38 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -55,6 +55,9 @@ psb_i_t psb_c_sgeaxpby(psb_s_t alpha, psb_c_svector *xh, psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_sspmm(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspmm_opt(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); psb_i_t psb_c_sspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 540562d7..4d8f4f9a 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -55,6 +55,9 @@ psb_i_t psb_c_zgeaxpby(psb_z_t alpha, psb_c_zvector *xh, psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); psb_i_t psb_c_zspmm(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspmm_opt(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); psb_i_t psb_c_zspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); #ifdef __cplusplus diff --git a/cbind/base/psb_d_psblas_cbind_mod.f90 b/cbind/base/psb_d_psblas_cbind_mod.f90 index 2557069e..76bdfb18 100644 --- a/cbind/base/psb_d_psblas_cbind_mod.f90 +++ b/cbind/base/psb_d_psblas_cbind_mod.f90 @@ -241,6 +241,58 @@ contains end function psb_c_dspmm + function psb_c_dspmm_opt(alpha,ah,xh,beta,yh,cdh,trans,doswap) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_dspmat) :: ah + type(psb_c_dvector) :: xh,yh + type(psb_c_descriptor) :: cdh + real(c_double), value :: alpha, beta + character(c_char) :: trans + logical(c_bool), value :: doswap + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp,yp + type(psb_dspmat_type), pointer :: ap + character :: ftrans + logical :: fdoswap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + fdoswap = doswap + ftrans = trans + call psb_spmm(alpha,ap,xp,beta,yp,descp,info,trans=ftrans,doswap=fdoswap) + + res = info + + end function psb_c_dspmm_opt + + function psb_c_dspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod diff --git a/cbind/base/psb_s_psblas_cbind_mod.f90 b/cbind/base/psb_s_psblas_cbind_mod.f90 index 5cef1b1c..ea964ea7 100644 --- a/cbind/base/psb_s_psblas_cbind_mod.f90 +++ b/cbind/base/psb_s_psblas_cbind_mod.f90 @@ -241,6 +241,58 @@ contains end function psb_c_sspmm + function psb_c_sspmm_opt(alpha,ah,xh,beta,yh,cdh,trans,doswap) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_sspmat) :: ah + type(psb_c_svector) :: xh,yh + type(psb_c_descriptor) :: cdh + real(c_float), value :: alpha, beta + character(c_char) :: trans + logical(c_bool), value :: doswap + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp,yp + type(psb_sspmat_type), pointer :: ap + character :: ftrans + logical :: fdoswap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + fdoswap = doswap + ftrans = trans + call psb_spmm(alpha,ap,xp,beta,yp,descp,info,trans=ftrans,doswap=fdoswap) + + res = info + + end function psb_c_sspmm_opt + + function psb_c_sspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod diff --git a/cbind/base/psb_z_psblas_cbind_mod.f90 b/cbind/base/psb_z_psblas_cbind_mod.f90 index 43cb6d8f..0a3cad53 100644 --- a/cbind/base/psb_z_psblas_cbind_mod.f90 +++ b/cbind/base/psb_z_psblas_cbind_mod.f90 @@ -241,6 +241,58 @@ contains end function psb_c_zspmm + function psb_c_zspmm_opt(alpha,ah,xh,beta,yh,cdh,trans,doswap) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + type(psb_c_zspmat) :: ah + type(psb_c_zvector) :: xh,yh + type(psb_c_descriptor) :: cdh + complex(c_double_complex), value :: alpha, beta + character(c_char) :: trans + logical(c_bool), value :: doswap + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp,yp + type(psb_zspmat_type), pointer :: ap + character :: ftrans + logical :: fdoswap + integer :: info + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(yh%item)) then + call c_f_pointer(yh%item,yp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + + fdoswap = doswap + ftrans = trans + call psb_spmm(alpha,ap,xp,beta,yp,descp,info,trans=ftrans,doswap=fdoswap) + + res = info + + end function psb_c_zspmm_opt + + function psb_c_zspsm(alpha,ah,xh,beta,yh,cdh) bind(c) result(res) use psb_base_mod use psb_objhandle_mod From b039a1b109e7e9987d9440bcab3f4f74887c4e25 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 15:35:01 +0000 Subject: [PATCH 15/27] psblas3-mcbind: cbind/base/Makefile cbind/base/psb_c_dcomm.c cbind/base/psb_c_dcomm.h cbind/base/psb_d_comm_cbind.f90 Start of comm. --- cbind/base/Makefile | 19 ++++++--- cbind/base/psb_c_dcomm.c | 31 ++++++++++++++ cbind/base/psb_c_dcomm.h | 10 ++++- cbind/base/psb_d_comm_cbind.f90 | 74 +++++++++++++++++++++++++++++++++ 4 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 cbind/base/psb_d_comm_cbind.f90 diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 9d6e9814..00a5f656 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -13,10 +13,13 @@ FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ - psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o + psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o \ + psb_d_comm_cbind_mod.o -COBJS= psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o -CMOD=psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h +COBJS= psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o \ + psb_c_dcomm.o +CMOD=psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h \ + psb_c_dcomm.h OBJS=$(FOBJS) $(COBJS) LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ @@ -24,7 +27,9 @@ LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ psb_s_tools_cbind_mod$(.mod) psb_s_serial_cbind_mod$(.mod) psb_s_psblas_cbind_mod$(.mod) \ psb_d_tools_cbind_mod$(.mod) psb_d_serial_cbind_mod$(.mod) psb_d_psblas_cbind_mod$(.mod) \ psb_c_tools_cbind_mod$(.mod) psb_c_serial_cbind_mod$(.mod) psb_c_psblas_cbind_mod$(.mod) \ - psb_z_tools_cbind_mod$(.mod) psb_z_serial_cbind_mod$(.mod) psb_z_psblas_cbind_mod$(.mod) + psb_z_tools_cbind_mod$(.mod) psb_z_serial_cbind_mod$(.mod) psb_z_psblas_cbind_mod$(.mod) \ + psb_d_comm_cbind_mod$(.mod) + LOCAL_MODS=$(LIBMOD) LIBNAME=$(CBINDLIBNAME) @@ -41,7 +46,8 @@ psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_m psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o psb_s_psblas_cbind_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ - psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o + psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o \ + psb_d_comm_cbind_mod.o psb_base_tools_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o @@ -50,7 +56,8 @@ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o \ psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o \ psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o \ -psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o: psb_base_tools_cbind_mod.o psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o \ +psb_d_comm_cbind_mod.o : psb_base_tools_cbind_mod.o psb_objhandle_mod.o psb_base_string_cbind_mod.o psb_base_psblas_cbind_mod.o: psb_s_psblas_cbind_mod.o psb_d_psblas_cbind_mod.o psb_c_psblas_cbind_mod.o psb_z_psblas_cbind_mod.o diff --git a/cbind/base/psb_c_dcomm.c b/cbind/base/psb_c_dcomm.c index b6d708df..2a700d18 100644 --- a/cbind/base/psb_c_dcomm.c +++ b/cbind/base/psb_c_dcomm.c @@ -1,4 +1,35 @@ #include #include "psb_c_dcomm.h" +#include +#include "psb_c_dbase.h" + + +psb_d_t* psb_c_dvgather(psb_c_dvector *xh, psb_c_descriptor *cdh) +{ + psb_d_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_cd_get_global_rows(cdh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_d_t *)malloc(vsize*sizeof(psb_d_t)))!=NULL) + psb_c_dvgather_f(temp,xh,cdh); + + return(temp); + +} + + +psb_c_dspmat* psb_c_dspgather(psb_c_dspmat *ah, psb_c_descriptor *cdh) +{ + psb_c_dspmat* temp=psb_c_new_dspmat(); + + psb_c_dspgather_f(temp, ah, cdh); + return(temp); +} + diff --git a/cbind/base/psb_c_dcomm.h b/cbind/base/psb_c_dcomm.h index 9c906117..1c78b5a1 100644 --- a/cbind/base/psb_c_dcomm.h +++ b/cbind/base/psb_c_dcomm.h @@ -7,12 +7,18 @@ extern "C" { #endif psb_i_t psb_c_dhalo(psb_c_dvector *xh, psb_c_descriptor *cdh); - psb_i_t psb_c_dhalo_opt(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dhalo_opt(psb_c_dvector *xh, psb_c_descriptor *cdh, + char *trans, psb_i_t mode); psb_i_t psb_c_dovrl(psb_c_dvector *xh, psb_c_descriptor *cdh); - psb_i_t psb_c_dovrl_opt(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dovrl_opt(psb_c_dvector *xh, psb_c_descriptor *cdh, + psb_i_t update, psb_i_t mode); psb_i_t psb_c_dvscatter(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_d_t* psb_c_dvgather(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_c_dspmat* psb_c_dspgather(psb_c_dspmat *ah, psb_c_descriptor *cdh); + + psb_i_t psb_c_dvgather_f(psb_d_t* gv, psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dspgather_f(psb_c_dspmat* ga, psb_c_dspmat *ah, psb_c_descriptor *cdh); #ifdef __cplusplus diff --git a/cbind/base/psb_d_comm_cbind.f90 b/cbind/base/psb_d_comm_cbind.f90 new file mode 100644 index 00000000..5caec196 --- /dev/null +++ b/cbind/base/psb_d_comm_cbind.f90 @@ -0,0 +1,74 @@ +module psb_d_comm_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + use psb_base_tools_cbind_mod + +contains + + + function psb_c_dvgather_f(v,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + real(c_double) :: v(*) + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: vp + real(psb_dpk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call psb_gather(fv,vp,descp,info) + res = info + if (res /=0) return + sz = size(fv) + v(1:sz) = fv(1:sz) + end if + end function psb_c_dvgather_f + + function psb_c_dspgather_f(gah,ah,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_dspmat) :: ah, gah + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap, gap + integer :: info, sz + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(gah%item)) then + call c_f_pointer(gah%item,gap) + else + return + end if + call psb_gather(gap,ap,descp,info) + res = info + end function psb_c_dspgather_f + + +end module psb_d_comm_cbind_mod + From b07eb6dbbc585679c688dbc36ea58e9b23746274 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 15:36:53 +0000 Subject: [PATCH 16/27] psblas3-mcbind: cbind/base/psb_base_cbind_mod.f90 cbind/base/psb_d_comm_cbind.f90 cbind/base/psb_d_comm_cbind_mod.f90 Start of comm, fix name mismatch --- cbind/base/psb_base_cbind_mod.f90 | 1 + cbind/base/{psb_d_comm_cbind.f90 => psb_d_comm_cbind_mod.f90} | 0 2 files changed, 1 insertion(+) rename cbind/base/{psb_d_comm_cbind.f90 => psb_d_comm_cbind_mod.f90} (100%) diff --git a/cbind/base/psb_base_cbind_mod.f90 b/cbind/base/psb_base_cbind_mod.f90 index a4222ec1..b5c0de93 100644 --- a/cbind/base/psb_base_cbind_mod.f90 +++ b/cbind/base/psb_base_cbind_mod.f90 @@ -6,5 +6,6 @@ module psb_base_cbind_mod use psb_d_tools_cbind_mod use psb_c_tools_cbind_mod use psb_z_tools_cbind_mod + use psb_d_comm_cbind_mod use psb_base_psblas_cbind_mod end module psb_base_cbind_mod diff --git a/cbind/base/psb_d_comm_cbind.f90 b/cbind/base/psb_d_comm_cbind_mod.f90 similarity index 100% rename from cbind/base/psb_d_comm_cbind.f90 rename to cbind/base/psb_d_comm_cbind_mod.f90 From 55640b052b1555892873ca35d5988118de87193f Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 17:33:01 +0000 Subject: [PATCH 17/27] *** empty log message *** --- cbind/base/psb_c_dcomm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cbind/base/psb_c_dcomm.c b/cbind/base/psb_c_dcomm.c index 2a700d18..7dcf721b 100644 --- a/cbind/base/psb_c_dcomm.c +++ b/cbind/base/psb_c_dcomm.c @@ -28,7 +28,8 @@ psb_c_dspmat* psb_c_dspgather(psb_c_dspmat *ah, psb_c_descriptor *cdh) { psb_c_dspmat* temp=psb_c_new_dspmat(); - psb_c_dspgather_f(temp, ah, cdh); + if (temp != NULL) + psb_c_dspgather_f(temp, ah, cdh); return(temp); } From 44bdd979fb2fd569bacc48de6d9337b321ee90fb Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 6 Apr 2017 20:08:15 +0000 Subject: [PATCH 18/27] psblas3-mcbind: cbind/base/psb_c_dcomm.h cbind/base/psb_d_comm_cbind_mod.f90 More comm interfaces. --- cbind/base/psb_c_dcomm.h | 2 +- cbind/base/psb_d_comm_cbind_mod.f90 | 148 ++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+), 1 deletion(-) diff --git a/cbind/base/psb_c_dcomm.h b/cbind/base/psb_c_dcomm.h index 1c78b5a1..c032d34f 100644 --- a/cbind/base/psb_c_dcomm.h +++ b/cbind/base/psb_c_dcomm.h @@ -12,7 +12,7 @@ extern "C" { psb_i_t psb_c_dovrl(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_i_t psb_c_dovrl_opt(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t update, psb_i_t mode); - psb_i_t psb_c_dvscatter(psb_c_dvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_dvscatter(psb_i_t ng, psb_d_t *gx, psb_c_dvector *xh, psb_c_descriptor *cdh); psb_d_t* psb_c_dvgather(psb_c_dvector *xh, psb_c_descriptor *cdh); psb_c_dspmat* psb_c_dspgather(psb_c_dspmat *ah, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_d_comm_cbind_mod.f90 b/cbind/base/psb_d_comm_cbind_mod.f90 index 5caec196..895074e2 100644 --- a/cbind/base/psb_d_comm_cbind_mod.f90 +++ b/cbind/base/psb_d_comm_cbind_mod.f90 @@ -8,6 +8,154 @@ module psb_d_comm_cbind_mod contains + function psb_c_dhalo(xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: vp + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call psb_halo(vp,descp,info) + res = info + end if + + end function psb_c_dhalo + + function psb_c_dhalo_opt(xh,cdh,trans,mode) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + character(c_char) :: trans + integer(psb_c_int), value :: mode + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: vp + character :: trans_ + integer(psb_ipk_) :: mode_ + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + trans_ = trans + mode_ = mode + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call psb_halo(vp,descp,info,tran=trans_, mode=mode_) + res = info + end if + + end function psb_c_dhalo_opt + + function psb_c_dovrl(xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: vp + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call psb_ovrl(vp,descp,info) + res = info + end if + + end function psb_c_dovrl + + function psb_c_dovrl_opt(xh,cdh,update,mode) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_int), value :: update, mode + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: vp + integer(psb_ipk_) :: mode_, update_ + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + update_ = update + mode_ = mode + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + call psb_ovrl(vp,descp,info,update=update_,mode=mode_) + res = info + end if + + end function psb_c_dovrl_opt + + function psb_c_dvscatter(ng,gx,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + integer(psb_c_int), value :: ng + real(c_double), target :: gx(*) + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: vp + real(psb_dpk_), pointer :: pgx(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + pgx => gx(1:ng) + + call psb_scatter(pgx,vp,descp,info) + res = info + + end function psb_c_dvscatter + function psb_c_dvgather_f(v,xh,cdh) bind(c) result(res) implicit none From 4ad85e75ab123aefcf888516c616ab8bbdff7eab Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 28 Apr 2017 15:15:56 +0000 Subject: [PATCH 19/27] psblas3-mcbind: cbind/base/Makefile cbind/base/psb_c_comm_cbind_mod.f90 cbind/base/psb_d_comm_cbind_mod.f90 cbind/base/psb_s_comm_cbind_mod.f90 cbind/base/psb_z_comm_cbind_mod.f90 Added COMM module. --- cbind/base/Makefile | 9 +- cbind/base/psb_c_comm_cbind_mod.f90 | 239 ++++++++++++++++++++++++++++ cbind/base/psb_d_comm_cbind_mod.f90 | 149 +++++++++-------- cbind/base/psb_s_comm_cbind_mod.f90 | 239 ++++++++++++++++++++++++++++ cbind/base/psb_z_comm_cbind_mod.f90 | 239 ++++++++++++++++++++++++++++ 5 files changed, 806 insertions(+), 69 deletions(-) create mode 100644 cbind/base/psb_c_comm_cbind_mod.f90 create mode 100644 cbind/base/psb_s_comm_cbind_mod.f90 create mode 100644 cbind/base/psb_z_comm_cbind_mod.f90 diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 00a5f656..88eb30a0 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -14,7 +14,8 @@ FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o \ - psb_d_comm_cbind_mod.o + psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o \ + psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o COBJS= psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o \ psb_c_dcomm.o @@ -28,7 +29,8 @@ LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ psb_d_tools_cbind_mod$(.mod) psb_d_serial_cbind_mod$(.mod) psb_d_psblas_cbind_mod$(.mod) \ psb_c_tools_cbind_mod$(.mod) psb_c_serial_cbind_mod$(.mod) psb_c_psblas_cbind_mod$(.mod) \ psb_z_tools_cbind_mod$(.mod) psb_z_serial_cbind_mod$(.mod) psb_z_psblas_cbind_mod$(.mod) \ - psb_d_comm_cbind_mod$(.mod) + psb_s_comm_cbind_mod$(.mod) psb_d_comm_cbind_mod$(.mod) \ + psb_c_comm_cbind_mod$(.mod) psb_z_comm_cbind_mod$(.mod) LOCAL_MODS=$(LIBMOD) LIBNAME=$(CBINDLIBNAME) @@ -47,7 +49,8 @@ psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_m psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o psb_d_psblas_cbind_mod.o \ psb_c_tools_cbind_mod.o psb_c_serial_cbind_mod.o psb_c_psblas_cbind_mod.o \ psb_z_tools_cbind_mod.o psb_z_serial_cbind_mod.o psb_z_psblas_cbind_mod.o \ - psb_d_comm_cbind_mod.o + psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o \ + psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o psb_base_tools_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o diff --git a/cbind/base/psb_c_comm_cbind_mod.f90 b/cbind/base/psb_c_comm_cbind_mod.f90 new file mode 100644 index 00000000..1c6e4944 --- /dev/null +++ b/cbind/base/psb_c_comm_cbind_mod.f90 @@ -0,0 +1,239 @@ +module psb_c_comm_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + +contains + + function psb_c_c_ovrl(xh,cdh) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_ovrl(xp,descp,info) + + res = info + + end function psb_c_c_ovrl + + function psb_c_c_ovrl_opt(xh,cdh,update,mode) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: update, mode + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_ovrl(xp,descp,info,update=update,mode=mode) + + res = info + + end function psb_c_c_ovrl_opt + + + function psb_c_c_halo(xh,cdh) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_halo(xp,descp,info) + + res = info + + end function psb_c_c_halo + + function psb_c_c_halo_opt(xh,cdh,tran,data,mode) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: data, mode + character(c_char) :: tran + + + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + character :: ftrans + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + ftrans = trans + call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + + res = info + + end function psb_c_c_halo_opt + + + function psb_c_c_vscatter(ng,gx,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + integer(psb_c_int), value :: ng + complex(c_float_complex), target :: gx(*) + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: vp + complex(psb_spk_), pointer :: pgx(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + pgx => gx(1:ng) + + call psb_scatter(pgx,vp,descp,info) + res = info + + end function psb_c_c_vscatter + + function psb_c_cvgather(v,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + complex(c_float_complex), target :: v(*) + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: vp + complex(psb_spk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + call psb_gather(fv,vp,descp,info) + res = info + if (res /=0) return + sz = size(fv) + v(1:sz) = fv(1:sz) + end function psb_c_cvgather + + function psb_c_cspgather(gah,ah,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_cspmat) :: ah, gah + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap, gap + integer :: info, sz + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(gah%item)) then + call c_f_pointer(gah%item,gap) + else + return + end if + call psb_gather(gap,ap,descp,info) + res = info + end function psb_c_cspgather + +end module psb_c_comm_cbind_mod diff --git a/cbind/base/psb_d_comm_cbind_mod.f90 b/cbind/base/psb_d_comm_cbind_mod.f90 index 895074e2..ece954b1 100644 --- a/cbind/base/psb_d_comm_cbind_mod.f90 +++ b/cbind/base/psb_d_comm_cbind_mod.f90 @@ -3,21 +3,20 @@ module psb_d_comm_cbind_mod use psb_base_mod use psb_objhandle_mod use psb_base_string_cbind_mod - use psb_base_tools_cbind_mod - + contains - - function psb_c_dhalo(xh,cdh) bind(c) result(res) + function psb_c_d_ovrl(xh,cdh) bind(c) result(res) implicit none + integer(psb_c_int) :: res - integer(psb_c_int) :: res type(psb_c_dvector) :: xh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp - type(psb_d_vect_type), pointer :: vp - integer :: info, sz + type(psb_d_vect_type), pointer :: xp + integer :: info + res = -1 @@ -27,27 +26,29 @@ contains return end if if (c_associated(xh%item)) then - call c_f_pointer(xh%item,vp) - call psb_halo(vp,descp,info) - res = info + call c_f_pointer(xh%item,xp) + else + return end if - - end function psb_c_dhalo - - function psb_c_dhalo_opt(xh,cdh,trans,mode) bind(c) result(res) + + call psb_ovrl(xp,descp,info) + + res = info + + end function psb_c_d_ovrl + + function psb_c_d_ovrl_opt(xh,cdh,update,mode) bind(c) result(res) implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: update, mode - integer(psb_c_int) :: res type(psb_c_dvector) :: xh type(psb_c_descriptor) :: cdh - character(c_char) :: trans - integer(psb_c_int), value :: mode type(psb_desc_type), pointer :: descp - type(psb_d_vect_type), pointer :: vp - character :: trans_ - integer(psb_ipk_) :: mode_ - integer :: info, sz + type(psb_d_vect_type), pointer :: xp + integer :: info + res = -1 @@ -56,26 +57,30 @@ contains else return end if - trans_ = trans - mode_ = mode if (c_associated(xh%item)) then - call c_f_pointer(xh%item,vp) - call psb_halo(vp,descp,info,tran=trans_, mode=mode_) - res = info + call c_f_pointer(xh%item,xp) + else + return end if - - end function psb_c_dhalo_opt - - function psb_c_dovrl(xh,cdh) bind(c) result(res) + + call psb_ovrl(xp,descp,info,update=update,mode=mode) + + res = info + + end function psb_c_d_ovrl_opt + + + function psb_c_d_halo(xh,cdh) bind(c) result(res) implicit none + integer(psb_c_int) :: res - integer(psb_c_int) :: res type(psb_c_dvector) :: xh type(psb_c_descriptor) :: cdh type(psb_desc_type), pointer :: descp - type(psb_d_vect_type), pointer :: vp - integer :: info, sz + type(psb_d_vect_type), pointer :: xp + integer :: info + res = -1 @@ -85,25 +90,32 @@ contains return end if if (c_associated(xh%item)) then - call c_f_pointer(xh%item,vp) - call psb_ovrl(vp,descp,info) - res = info + call c_f_pointer(xh%item,xp) + else + return end if - - end function psb_c_dovrl - - function psb_c_dovrl_opt(xh,cdh,update,mode) bind(c) result(res) + + call psb_halo(xp,descp,info) + + res = info + + end function psb_c_d_halo + + function psb_c_d_halo_opt(xh,cdh,tran,data,mode) bind(c) result(res) implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: data, mode + character(c_char) :: tran + - integer(psb_c_int) :: res type(psb_c_dvector) :: xh type(psb_c_descriptor) :: cdh - integer(psb_c_int), value :: update, mode type(psb_desc_type), pointer :: descp - type(psb_d_vect_type), pointer :: vp - integer(psb_ipk_) :: mode_, update_ - integer :: info, sz + type(psb_d_vect_type), pointer :: xp + character :: ftrans + integer :: info + res = -1 @@ -112,17 +124,21 @@ contains else return end if - update_ = update - mode_ = mode if (c_associated(xh%item)) then - call c_f_pointer(xh%item,vp) - call psb_ovrl(vp,descp,info,update=update_,mode=mode_) - res = info + call c_f_pointer(xh%item,xp) + else + return end if + + ftrans = trans + call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + + res = info - end function psb_c_dovrl_opt + end function psb_c_d_halo_opt + - function psb_c_dvscatter(ng,gx,xh,cdh) bind(c) result(res) + function psb_c_d_vscatter(ng,gx,xh,cdh) bind(c) result(res) implicit none integer(psb_c_int) :: res @@ -154,13 +170,13 @@ contains call psb_scatter(pgx,vp,descp,info) res = info - end function psb_c_dvscatter + end function psb_c_d_vscatter - function psb_c_dvgather_f(v,xh,cdh) bind(c) result(res) + function psb_c_dvgather(v,xh,cdh) bind(c) result(res) implicit none integer(psb_c_int) :: res - real(c_double) :: v(*) + real(c_double), target :: v(*) type(psb_c_dvector) :: xh type(psb_c_descriptor) :: cdh @@ -178,15 +194,18 @@ contains end if if (c_associated(xh%item)) then call c_f_pointer(xh%item,vp) - call psb_gather(fv,vp,descp,info) - res = info - if (res /=0) return - sz = size(fv) - v(1:sz) = fv(1:sz) + else + return end if - end function psb_c_dvgather_f + + call psb_gather(fv,vp,descp,info) + res = info + if (res /=0) return + sz = size(fv) + v(1:sz) = fv(1:sz) + end function psb_c_dvgather - function psb_c_dspgather_f(gah,ah,cdh) bind(c) result(res) + function psb_c_dspgather(gah,ah,cdh) bind(c) result(res) implicit none integer(psb_c_int) :: res @@ -215,8 +234,6 @@ contains end if call psb_gather(gap,ap,descp,info) res = info - end function psb_c_dspgather_f - - + end function psb_c_dspgather + end module psb_d_comm_cbind_mod - diff --git a/cbind/base/psb_s_comm_cbind_mod.f90 b/cbind/base/psb_s_comm_cbind_mod.f90 new file mode 100644 index 00000000..0fc3da6b --- /dev/null +++ b/cbind/base/psb_s_comm_cbind_mod.f90 @@ -0,0 +1,239 @@ +module psb_s_comm_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + +contains + + function psb_c_s_ovrl(xh,cdh) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_ovrl(xp,descp,info) + + res = info + + end function psb_c_s_ovrl + + function psb_c_s_ovrl_opt(xh,cdh,update,mode) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: update, mode + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_ovrl(xp,descp,info,update=update,mode=mode) + + res = info + + end function psb_c_s_ovrl_opt + + + function psb_c_s_halo(xh,cdh) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_halo(xp,descp,info) + + res = info + + end function psb_c_s_halo + + function psb_c_s_halo_opt(xh,cdh,tran,data,mode) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: data, mode + character(c_char) :: tran + + + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + character :: ftrans + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + ftrans = trans + call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + + res = info + + end function psb_c_s_halo_opt + + + function psb_c_s_vscatter(ng,gx,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + integer(psb_c_int), value :: ng + real(c_float), target :: gx(*) + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: vp + real(psb_spk_), pointer :: pgx(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + pgx => gx(1:ng) + + call psb_scatter(pgx,vp,descp,info) + res = info + + end function psb_c_s_vscatter + + function psb_c_svgather(v,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + real(c_float), target :: v(*) + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: vp + real(psb_spk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + call psb_gather(fv,vp,descp,info) + res = info + if (res /=0) return + sz = size(fv) + v(1:sz) = fv(1:sz) + end function psb_c_svgather + + function psb_c_sspgather(gah,ah,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_sspmat) :: ah, gah + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap, gap + integer :: info, sz + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(gah%item)) then + call c_f_pointer(gah%item,gap) + else + return + end if + call psb_gather(gap,ap,descp,info) + res = info + end function psb_c_sspgather + +end module psb_s_comm_cbind_mod diff --git a/cbind/base/psb_z_comm_cbind_mod.f90 b/cbind/base/psb_z_comm_cbind_mod.f90 new file mode 100644 index 00000000..6b43dd67 --- /dev/null +++ b/cbind/base/psb_z_comm_cbind_mod.f90 @@ -0,0 +1,239 @@ +module psb_z_comm_cbind_mod + use iso_c_binding + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + +contains + + function psb_c_z_ovrl(xh,cdh) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_ovrl(xp,descp,info) + + res = info + + end function psb_c_z_ovrl + + function psb_c_z_ovrl_opt(xh,cdh,update,mode) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: update, mode + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_ovrl(xp,descp,info,update=update,mode=mode) + + res = info + + end function psb_c_z_ovrl_opt + + + function psb_c_z_halo(xh,cdh) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + call psb_halo(xp,descp,info) + + res = info + + end function psb_c_z_halo + + function psb_c_z_halo_opt(xh,cdh,tran,data,mode) bind(c) result(res) + implicit none + integer(psb_c_int) :: res + integer(psb_c_int), value :: data, mode + character(c_char) :: tran + + + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + character :: ftrans + integer :: info + + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + + ftrans = trans + call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + + res = info + + end function psb_c_z_halo_opt + + + function psb_c_z_vscatter(ng,gx,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + integer(psb_c_int), value :: ng + complex(c_double_complex), target :: gx(*) + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: vp + complex(psb_dpk_), pointer :: pgx(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + pgx => gx(1:ng) + + call psb_scatter(pgx,vp,descp,info) + res = info + + end function psb_c_z_vscatter + + function psb_c_zvgather(v,xh,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + complex(c_double_complex), target :: v(*) + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: vp + complex(psb_dpk_), allocatable :: fv(:) + integer :: info, sz + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,vp) + else + return + end if + + call psb_gather(fv,vp,descp,info) + res = info + if (res /=0) return + sz = size(fv) + v(1:sz) = fv(1:sz) + end function psb_c_zvgather + + function psb_c_zspgather(gah,ah,cdh) bind(c) result(res) + implicit none + + integer(psb_c_int) :: res + type(psb_c_zspmat) :: ah, gah + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap, gap + integer :: info, sz + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(gah%item)) then + call c_f_pointer(gah%item,gap) + else + return + end if + call psb_gather(gap,ap,descp,info) + res = info + end function psb_c_zspgather + +end module psb_z_comm_cbind_mod From 456f810c2fac5ddf3479ed91f95acc39a9833a64 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 28 Apr 2017 15:19:29 +0000 Subject: [PATCH 20/27] psblas3-mcbind: cbind/base/psb_base_cbind_mod.f90 cbind/base/psb_c_comm_cbind_mod.f90 cbind/base/psb_d_comm_cbind_mod.f90 cbind/base/psb_s_comm_cbind_mod.f90 cbind/base/psb_z_comm_cbind_mod.f90 Fix COMM module. --- cbind/base/psb_base_cbind_mod.f90 | 3 +++ cbind/base/psb_c_comm_cbind_mod.f90 | 6 +++--- cbind/base/psb_d_comm_cbind_mod.f90 | 6 +++--- cbind/base/psb_s_comm_cbind_mod.f90 | 6 +++--- cbind/base/psb_z_comm_cbind_mod.f90 | 6 +++--- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cbind/base/psb_base_cbind_mod.f90 b/cbind/base/psb_base_cbind_mod.f90 index b5c0de93..f7d74e74 100644 --- a/cbind/base/psb_base_cbind_mod.f90 +++ b/cbind/base/psb_base_cbind_mod.f90 @@ -6,6 +6,9 @@ module psb_base_cbind_mod use psb_d_tools_cbind_mod use psb_c_tools_cbind_mod use psb_z_tools_cbind_mod + use psb_s_comm_cbind_mod use psb_d_comm_cbind_mod + use psb_c_comm_cbind_mod + use psb_z_comm_cbind_mod use psb_base_psblas_cbind_mod end module psb_base_cbind_mod diff --git a/cbind/base/psb_c_comm_cbind_mod.f90 b/cbind/base/psb_c_comm_cbind_mod.f90 index 1c6e4944..389464a5 100644 --- a/cbind/base/psb_c_comm_cbind_mod.f90 +++ b/cbind/base/psb_c_comm_cbind_mod.f90 @@ -113,7 +113,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_c_vect_type), pointer :: xp - character :: ftrans + character :: ftran integer :: info @@ -130,8 +130,8 @@ contains return end if - ftrans = trans - call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + ftran = tran + call psb_halo(xp,descp,info,data=data,mode=mode,tran=ftran) res = info diff --git a/cbind/base/psb_d_comm_cbind_mod.f90 b/cbind/base/psb_d_comm_cbind_mod.f90 index ece954b1..857d0ce7 100644 --- a/cbind/base/psb_d_comm_cbind_mod.f90 +++ b/cbind/base/psb_d_comm_cbind_mod.f90 @@ -113,7 +113,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_d_vect_type), pointer :: xp - character :: ftrans + character :: ftran integer :: info @@ -130,8 +130,8 @@ contains return end if - ftrans = trans - call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + ftran = tran + call psb_halo(xp,descp,info,data=data,mode=mode,tran=ftran) res = info diff --git a/cbind/base/psb_s_comm_cbind_mod.f90 b/cbind/base/psb_s_comm_cbind_mod.f90 index 0fc3da6b..71e68cc5 100644 --- a/cbind/base/psb_s_comm_cbind_mod.f90 +++ b/cbind/base/psb_s_comm_cbind_mod.f90 @@ -113,7 +113,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_s_vect_type), pointer :: xp - character :: ftrans + character :: ftran integer :: info @@ -130,8 +130,8 @@ contains return end if - ftrans = trans - call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + ftran = tran + call psb_halo(xp,descp,info,data=data,mode=mode,tran=ftran) res = info diff --git a/cbind/base/psb_z_comm_cbind_mod.f90 b/cbind/base/psb_z_comm_cbind_mod.f90 index 6b43dd67..865e56ee 100644 --- a/cbind/base/psb_z_comm_cbind_mod.f90 +++ b/cbind/base/psb_z_comm_cbind_mod.f90 @@ -113,7 +113,7 @@ contains type(psb_desc_type), pointer :: descp type(psb_z_vect_type), pointer :: xp - character :: ftrans + character :: ftran integer :: info @@ -130,8 +130,8 @@ contains return end if - ftrans = trans - call psb_halo(xp,descp,info,data=data,mode=mode,tran=tran) + ftran = tran + call psb_halo(xp,descp,info,data=data,mode=mode,tran=ftran) res = info From 184141dd1c2cc5cce72a631d3240b870ca36f9ba Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 4 May 2017 13:41:43 +0000 Subject: [PATCH 21/27] *** empty log message *** --- README | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README b/README index b13612cc..66906c68 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ -This directory contains the PSBLAS library, version 3.4. +This directory contains the PSBLAS library, version 3.5. -Existing codes will work untouched with version 3.4, but they will +Existing codes will work untouched with version 3.5, but they will have to be recompiled; new methods have been added for the sake of GPU computations, plus the usual bunch of bug fixes. @@ -28,6 +28,14 @@ Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003, ACM Trans. on Math. Software, vol. 38, No. 4, 2012. +The ideas are explored further with the paper: + +V. Cardellini, S. Filippone and D. Rouson +Design Patterns for sparse-matrix computations on +hybrid CPU/GPU platforms, +Scientific Programming, 22(2014), pp.1-19. + + Version 1.0 of the library was described in: S. Filippone, M. Colajanni PSBLAS: A library for parallel linear algebra computation on sparse matrices From 39c90a83624d3bff921a7070b4362cf7fac4b8d1 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 4 May 2017 20:11:20 +0000 Subject: [PATCH 22/27] psblas3-cbind: cbind/base/Makefile cbind/base/psb_c_ccomm.c cbind/base/psb_c_ccomm.h cbind/base/psb_c_dcomm.c cbind/base/psb_c_scomm.c cbind/base/psb_c_scomm.h cbind/base/psb_c_zcomm.c cbind/base/psb_c_zcomm.h COMM routines, C side. --- cbind/base/Makefile | 4 ++-- cbind/base/psb_c_ccomm.c | 34 ++++++++++++++++++++++++++++++++++ cbind/base/psb_c_ccomm.h | 28 ++++++++++++++++++++++++++++ cbind/base/psb_c_dcomm.c | 2 -- cbind/base/psb_c_scomm.c | 34 ++++++++++++++++++++++++++++++++++ cbind/base/psb_c_scomm.h | 28 ++++++++++++++++++++++++++++ cbind/base/psb_c_zcomm.c | 34 ++++++++++++++++++++++++++++++++++ cbind/base/psb_c_zcomm.h | 28 ++++++++++++++++++++++++++++ 8 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 cbind/base/psb_c_ccomm.c create mode 100644 cbind/base/psb_c_ccomm.h create mode 100644 cbind/base/psb_c_scomm.c create mode 100644 cbind/base/psb_c_scomm.h create mode 100644 cbind/base/psb_c_zcomm.c create mode 100644 cbind/base/psb_c_zcomm.h diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 88eb30a0..342697ae 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -18,9 +18,9 @@ FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o COBJS= psb_c_base.o psb_c_sbase.o psb_c_dbase.o psb_c_cbase.o psb_c_zbase.o \ - psb_c_dcomm.o + psb_c_scomm.o psb_c_dcomm.o psb_c_ccomm.o psb_c_zcomm.o CMOD=psb_base_cbind.h psb_c_base.h psb_c_sbase.h psb_c_dbase.h psb_c_cbase.h psb_c_zbase.h \ - psb_c_dcomm.h + psb_c_scomm.h psb_c_dcomm.h psb_c_ccomm.h psb_c_zcomm.h OBJS=$(FOBJS) $(COBJS) LIBMOD=psb_base_cbind_mod$(.mod) psb_cpenv_mod$(.mod) psb_objhandle_mod$(.mod)\ diff --git a/cbind/base/psb_c_ccomm.c b/cbind/base/psb_c_ccomm.c new file mode 100644 index 00000000..24e3f358 --- /dev/null +++ b/cbind/base/psb_c_ccomm.c @@ -0,0 +1,34 @@ +#include +#include "psb_c_ccomm.h" +#include "psb_c_cbase.h" + + +psb_c_t* psb_c_cvgather(psb_c_cvector *xh, psb_c_descriptor *cdh) +{ + psb_c_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_cd_get_global_rows(cdh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_c_t *)malloc(vsize*sizeof(psb_c_t)))!=NULL) + psb_c_cvgather_f(temp,xh,cdh); + + return(temp); + +} + + +psb_c_cspmat* psb_c_cspgather(psb_c_cspmat *ah, psb_c_descriptor *cdh) +{ + psb_c_cspmat* temp=psb_c_new_cspmat(); + + if (temp != NULL) + psb_c_cspgather_f(temp, ah, cdh); + return(temp); +} + + diff --git a/cbind/base/psb_c_ccomm.h b/cbind/base/psb_c_ccomm.h new file mode 100644 index 00000000..774f34f2 --- /dev/null +++ b/cbind/base/psb_c_ccomm.h @@ -0,0 +1,28 @@ +#ifndef PSB_C_CCOMM_ +#define PSB_C_CCOMM_ +#include "psb_c_cbase.h" + +#ifdef __cplusplus +extern "C" { +#endif + + psb_i_t psb_c_chalo(psb_c_cvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_chalo_opt(psb_c_cvector *xh, psb_c_descriptor *cdh, + char *trans, psb_i_t mode); + psb_i_t psb_c_covrl(psb_c_cvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_covrl_opt(psb_c_cvector *xh, psb_c_descriptor *cdh, + psb_i_t update, psb_i_t mode); + psb_i_t psb_c_cvscatter(psb_i_t ng, psb_c_t *gx, psb_c_cvector *xh, psb_c_descriptor *cdh); + + psb_c_t* psb_c_cvgather(psb_c_cvector *xh, psb_c_descriptor *cdh); + psb_c_cspmat* psb_c_cspgather(psb_c_cspmat *ah, psb_c_descriptor *cdh); + + psb_i_t psb_c_cvgather_f(psb_c_t* gv, psb_c_cvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_cspgather_f(psb_c_cspmat* ga, psb_c_cspmat *ah, psb_c_descriptor *cdh); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_c_dcomm.c b/cbind/base/psb_c_dcomm.c index 7dcf721b..47e6e780 100644 --- a/cbind/base/psb_c_dcomm.c +++ b/cbind/base/psb_c_dcomm.c @@ -1,7 +1,5 @@ #include #include "psb_c_dcomm.h" - -#include #include "psb_c_dbase.h" diff --git a/cbind/base/psb_c_scomm.c b/cbind/base/psb_c_scomm.c new file mode 100644 index 00000000..1c6ab36e --- /dev/null +++ b/cbind/base/psb_c_scomm.c @@ -0,0 +1,34 @@ +#include +#include "psb_c_scomm.h" +#include "psb_c_sbase.h" + + +psb_s_t* psb_c_svgather(psb_c_svector *xh, psb_c_descriptor *cdh) +{ + psb_s_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_cd_get_global_rows(cdh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_s_t *)malloc(vsize*sizeof(psb_s_t)))!=NULL) + psb_c_svgather_f(temp,xh,cdh); + + return(temp); + +} + + +psb_c_sspmat* psb_c_sspgather(psb_c_sspmat *ah, psb_c_descriptor *cdh) +{ + psb_c_sspmat* temp=psb_c_new_sspmat(); + + if (temp != NULL) + psb_c_sspgather_f(temp, ah, cdh); + return(temp); +} + + diff --git a/cbind/base/psb_c_scomm.h b/cbind/base/psb_c_scomm.h new file mode 100644 index 00000000..7a8ecc12 --- /dev/null +++ b/cbind/base/psb_c_scomm.h @@ -0,0 +1,28 @@ +#ifndef PSB_C_SCOMM_ +#define PSB_C_SCOMM_ +#include "psb_c_sbase.h" + +#ifdef __cplusplus +extern "C" { +#endif + + psb_i_t psb_c_shalo(psb_c_svector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_shalo_opt(psb_c_svector *xh, psb_c_descriptor *cdh, + char *trans, psb_i_t mode); + psb_i_t psb_c_sovrl(psb_c_svector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_sovrl_opt(psb_c_svector *xh, psb_c_descriptor *cdh, + psb_i_t update, psb_i_t mode); + psb_i_t psb_c_svscatter(psb_i_t ng, psb_s_t *gx, psb_c_svector *xh, psb_c_descriptor *cdh); + + psb_s_t* psb_c_svgather(psb_c_svector *xh, psb_c_descriptor *cdh); + psb_c_sspmat* psb_c_sspgather(psb_c_sspmat *ah, psb_c_descriptor *cdh); + + psb_i_t psb_c_svgather_f(psb_s_t* gv, psb_c_svector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_sspgather_f(psb_c_sspmat* ga, psb_c_sspmat *ah, psb_c_descriptor *cdh); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/base/psb_c_zcomm.c b/cbind/base/psb_c_zcomm.c new file mode 100644 index 00000000..7a47d667 --- /dev/null +++ b/cbind/base/psb_c_zcomm.c @@ -0,0 +1,34 @@ +#include +#include "psb_c_zcomm.h" +#include "psb_c_zbase.h" + + +psb_z_t* psb_c_zvgather(psb_c_zvector *xh, psb_c_descriptor *cdh) +{ + psb_z_t *temp=NULL; + psb_i_t vsize=0; + + if ((vsize=psb_c_cd_get_global_rows(cdh))<0) + return(temp); + + if (vsize==0) + vsize=1; + + if ((temp=(psb_z_t *)malloc(vsize*sizeof(psb_z_t)))!=NULL) + psb_c_zvgather_f(temp,xh,cdh); + + return(temp); + +} + + +psb_c_zspmat* psb_c_zspgather(psb_c_zspmat *ah, psb_c_descriptor *cdh) +{ + psb_c_zspmat* temp=psb_c_new_zspmat(); + + if (temp != NULL) + psb_c_zspgather_f(temp, ah, cdh); + return(temp); +} + + diff --git a/cbind/base/psb_c_zcomm.h b/cbind/base/psb_c_zcomm.h new file mode 100644 index 00000000..8cf9e436 --- /dev/null +++ b/cbind/base/psb_c_zcomm.h @@ -0,0 +1,28 @@ +#ifndef PSB_C_ZCOMM_ +#define PSB_C_ZCOMM_ +#include "psb_c_zbase.h" + +#ifdef __cplusplus +extern "C" { +#endif + + psb_i_t psb_c_zhalo(psb_c_zvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_zhalo_opt(psb_c_zvector *xh, psb_c_descriptor *cdh, + char *trans, psb_i_t mode); + psb_i_t psb_c_zovrl(psb_c_zvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_zovrl_opt(psb_c_zvector *xh, psb_c_descriptor *cdh, + psb_i_t update, psb_i_t mode); + psb_i_t psb_c_zvscatter(psb_i_t ng, psb_z_t *gx, psb_c_zvector *xh, psb_c_descriptor *cdh); + + psb_z_t* psb_c_zvgather(psb_c_zvector *xh, psb_c_descriptor *cdh); + psb_c_zspmat* psb_c_zspgather(psb_c_zspmat *ah, psb_c_descriptor *cdh); + + psb_i_t psb_c_zvgather_f(psb_z_t* gv, psb_c_zvector *xh, psb_c_descriptor *cdh); + psb_i_t psb_c_zspgather_f(psb_c_zspmat* ga, psb_c_zspmat *ah, psb_c_descriptor *cdh); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif From fbc41dace74440cad8b813d3d160f45557666a01 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 4 May 2017 20:23:40 +0000 Subject: [PATCH 23/27] psblas3-cbind: cbind/prec/Makefile cbind/prec/psb_c_dprec.h cbind/prec/psb_cprec_cbind_mod.f90 cbind/prec/psb_prec_cbind_mod.f90 cbind/prec/psb_sprec_cbind_mod.f90 cbind/prec/psb_zprec_cbind_mod.f90 Start on PREC. --- cbind/prec/Makefile | 11 ++- cbind/prec/psb_c_dprec.h | 6 +- cbind/prec/psb_cprec_cbind_mod.f90 | 118 +++++++++++++++++++++++++++++ cbind/prec/psb_prec_cbind_mod.f90 | 3 + cbind/prec/psb_sprec_cbind_mod.f90 | 118 +++++++++++++++++++++++++++++ cbind/prec/psb_zprec_cbind_mod.f90 | 118 +++++++++++++++++++++++++++++ 6 files changed, 368 insertions(+), 6 deletions(-) create mode 100644 cbind/prec/psb_cprec_cbind_mod.f90 create mode 100644 cbind/prec/psb_sprec_cbind_mod.f90 create mode 100644 cbind/prec/psb_zprec_cbind_mod.f90 diff --git a/cbind/prec/Makefile b/cbind/prec/Makefile index f463ffcf..3dfe8894 100644 --- a/cbind/prec/Makefile +++ b/cbind/prec/Makefile @@ -7,11 +7,16 @@ HERE=.. FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(INCLUDEDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) -OBJS=psb_prec_cbind_mod.o psb_dprec_cbind_mod.o psb_c_dprec.o +OBJS=psb_prec_cbind_mod.o \ +psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o \ +psb_c_dprec.o CMOD=psb_prec_cbind.h psb_c_dprec.h -LIBMOD=psb_prec_cbind_mod$(.mod) psb_prec_cbind_mod$(.mod) +LIBMOD=psb_prec_cbind_mod$(.mod) \ +psb_sprec_cbind_mod$(.mod) psb_dprec_cbind_mod$(.mod) \ +psb_cprec_cbind_mod$(.mod) psb_zprec_cbind_mod$(.mod) + LOCAL_MODS=$(LIBMOD) LIBNAME=$(CPRECLIBNAME) @@ -22,7 +27,7 @@ lib: $(OBJS) $(CMOD) /bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR) /bin/cp -p $(LIBMOD) $(CMOD) $(INCLUDEDIR) -psb_prec_cbind_mod.o: psb_dprec_cbind_mod.o +psb_prec_cbind_mod.o: psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o veryclean: clean /bin/rm -f $(HERE)/$(LIBNAME) diff --git a/cbind/prec/psb_c_dprec.h b/cbind/prec/psb_c_dprec.h index bb8775c1..fa16247e 100644 --- a/cbind/prec/psb_c_dprec.h +++ b/cbind/prec/psb_c_dprec.h @@ -14,9 +14,9 @@ typedef struct PSB_C_DPREC { psb_c_dprec* psb_c_new_dprec(); -int psb_c_dprecinit(psb_c_dprec *ph, const char *ptype); -int psb_c_dprecbld(psb_c_dspmat *ah, psb_c_descriptor *cdh, psb_c_dprec *ph); -int psb_c_dprecfree(psb_c_dprec *ph); +psb_i_t psb_c_dprecinit(psb_c_dprec *ph, const char *ptype); +psb_i_t psb_c_dprecbld(psb_c_dspmat *ah, psb_c_descriptor *cdh, psb_c_dprec *ph); +psb_i_t psb_c_dprecfree(psb_c_dprec *ph); #ifdef __cplusplus } #endif diff --git a/cbind/prec/psb_cprec_cbind_mod.f90 b/cbind/prec/psb_cprec_cbind_mod.f90 new file mode 100644 index 00000000..7f827b55 --- /dev/null +++ b/cbind/prec/psb_cprec_cbind_mod.f90 @@ -0,0 +1,118 @@ +module psb_cprec_cbind_mod + + use iso_c_binding + use psb_prec_mod, only : psb_cprec_type + use psb_objhandle_mod + use psb_base_string_cbind_mod + + type, bind(c) :: psb_c_cprec + type(c_ptr) :: item = c_null_ptr + end type psb_c_cprec + + +contains + + + function psb_c_cprecinit(ph,ptype) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_cprec) :: ph + character(c_char) :: ptype(*) + type(psb_cprec_type), pointer :: precp + integer :: info + character(len=80) :: fptype + + res = -1 + if (c_associated(ph%item)) then + return + end if + + allocate(precp,stat=info) + if (info /= 0) return + ph%item = c_loc(precp) + + call stringc2f(ptype,fptype) + + call psb_precinit(precp,fptype,info) + + res = min(0,info) + return + end function psb_c_cprecinit + + + + function psb_c_cprecbld(ah,cdh,ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_cspmat) :: ah + type(psb_c_cprec) :: ph + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + type(psb_cprec_type), pointer :: precp + + integer :: info + + res = -1 +!!$ write(*,*) 'Entry: ', psb_c_cd_get_local_rows(cdh) + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precbld(ap,descp, precp, info) + + res = min(info,0) + + end function psb_c_cprecbld + + + function psb_c_cprecfree(ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_cprec) :: ph + + type(psb_cprec_type), pointer :: precp + + integer :: info + + res = -1 + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precfree(precp, info) + + res = min(info,0) + + end function psb_c_cprecfree + + +end module psb_cprec_cbind_mod diff --git a/cbind/prec/psb_prec_cbind_mod.f90 b/cbind/prec/psb_prec_cbind_mod.f90 index 946b159f..ebeefa50 100644 --- a/cbind/prec/psb_prec_cbind_mod.f90 +++ b/cbind/prec/psb_prec_cbind_mod.f90 @@ -1,3 +1,6 @@ module psb_prec_cbind_mod + use psb_sprec_cbind_mod use psb_dprec_cbind_mod + use psb_cprec_cbind_mod + use psb_zprec_cbind_mod end module psb_prec_cbind_mod diff --git a/cbind/prec/psb_sprec_cbind_mod.f90 b/cbind/prec/psb_sprec_cbind_mod.f90 new file mode 100644 index 00000000..1578eeba --- /dev/null +++ b/cbind/prec/psb_sprec_cbind_mod.f90 @@ -0,0 +1,118 @@ +module psb_sprec_cbind_mod + + use iso_c_binding + use psb_prec_mod, only : psb_sprec_type + use psb_objhandle_mod + use psb_base_string_cbind_mod + + type, bind(c) :: psb_c_sprec + type(c_ptr) :: item = c_null_ptr + end type psb_c_sprec + + +contains + + + function psb_c_sprecinit(ph,ptype) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_sprec) :: ph + character(c_char) :: ptype(*) + type(psb_sprec_type), pointer :: precp + integer :: info + character(len=80) :: fptype + + res = -1 + if (c_associated(ph%item)) then + return + end if + + allocate(precp,stat=info) + if (info /= 0) return + ph%item = c_loc(precp) + + call stringc2f(ptype,fptype) + + call psb_precinit(precp,fptype,info) + + res = min(0,info) + return + end function psb_c_sprecinit + + + + function psb_c_sprecbld(ah,cdh,ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_sspmat) :: ah + type(psb_c_sprec) :: ph + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + type(psb_sprec_type), pointer :: precp + + integer :: info + + res = -1 +!!$ write(*,*) 'Entry: ', psb_c_cd_get_local_rows(cdh) + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precbld(ap,descp, precp, info) + + res = min(info,0) + + end function psb_c_sprecbld + + + function psb_c_sprecfree(ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_sprec) :: ph + + type(psb_sprec_type), pointer :: precp + + integer :: info + + res = -1 + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precfree(precp, info) + + res = min(info,0) + + end function psb_c_sprecfree + + +end module psb_sprec_cbind_mod diff --git a/cbind/prec/psb_zprec_cbind_mod.f90 b/cbind/prec/psb_zprec_cbind_mod.f90 new file mode 100644 index 00000000..c662e21c --- /dev/null +++ b/cbind/prec/psb_zprec_cbind_mod.f90 @@ -0,0 +1,118 @@ +module psb_zprec_cbind_mod + + use iso_c_binding + use psb_prec_mod, only : psb_zprec_type + use psb_objhandle_mod + use psb_base_string_cbind_mod + + type, bind(c) :: psb_c_zprec + type(c_ptr) :: item = c_null_ptr + end type psb_c_zprec + + +contains + + + function psb_c_zprecinit(ph,ptype) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_zprec) :: ph + character(c_char) :: ptype(*) + type(psb_zprec_type), pointer :: precp + integer :: info + character(len=80) :: fptype + + res = -1 + if (c_associated(ph%item)) then + return + end if + + allocate(precp,stat=info) + if (info /= 0) return + ph%item = c_loc(precp) + + call stringc2f(ptype,fptype) + + call psb_precinit(precp,fptype,info) + + res = min(0,info) + return + end function psb_c_zprecinit + + + + function psb_c_zprecbld(ah,cdh,ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_zspmat) :: ah + type(psb_c_zprec) :: ph + type(psb_c_descriptor) :: cdh + + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + type(psb_zprec_type), pointer :: precp + + integer :: info + + res = -1 +!!$ write(*,*) 'Entry: ', psb_c_cd_get_local_rows(cdh) + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precbld(ap,descp, precp, info) + + res = min(info,0) + + end function psb_c_zprecbld + + + function psb_c_zprecfree(ph) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + + integer(c_int) :: res + type(psb_c_zprec) :: ph + + type(psb_zprec_type), pointer :: precp + + integer :: info + + res = -1 + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + call psb_precfree(precp, info) + + res = min(info,0) + + end function psb_c_zprecfree + + +end module psb_zprec_cbind_mod From 49cddbb6fb524ddac3ab04bf61e800c29fa70300 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 5 May 2017 15:38:08 +0000 Subject: [PATCH 24/27] psblas3-mcbind:## cbind/prec/Makefile cbind/test/pargen cbind/test/pargen/Makefile cbind/test/pargen/ppdec.c cbind/test/pargen/runs cbind/test/pargen/runs/ppde.inp Added test program. --- cbind/prec/Makefile | 1 + cbind/test/pargen/Makefile | 47 ++++ cbind/test/pargen/ppdec.c | 424 ++++++++++++++++++++++++++++++++ cbind/test/pargen/runs/ppde.inp | 11 + 4 files changed, 483 insertions(+) create mode 100644 cbind/test/pargen/Makefile create mode 100644 cbind/test/pargen/ppdec.c create mode 100644 cbind/test/pargen/runs/ppde.inp diff --git a/cbind/prec/Makefile b/cbind/prec/Makefile index 3dfe8894..8bdcd830 100644 --- a/cbind/prec/Makefile +++ b/cbind/prec/Makefile @@ -25,6 +25,7 @@ lib: $(OBJS) $(CMOD) $(AR) $(HERE)/$(LIBNAME) $(OBJS) $(RANLIB) $(HERE)/$(LIBNAME) /bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR) + /bin/cp -p $(LIBMOD) $(CMOD) $(HERE) /bin/cp -p $(LIBMOD) $(CMOD) $(INCLUDEDIR) psb_prec_cbind_mod.o: psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o diff --git a/cbind/test/pargen/Makefile b/cbind/test/pargen/Makefile new file mode 100644 index 00000000..040bc02c --- /dev/null +++ b/cbind/test/pargen/Makefile @@ -0,0 +1,47 @@ +TOP=../../.. +include $(TOP)/Make.inc +LIBDIR=$(TOP)/lib +INCLUDEDIR=$(TOP)/include +HERE=../.. + +FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(INCLUDEDIR) +CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) + +PSBC_LIBS= -L$(LIBDIR) -lpsb_cbind +PSB_LIBS=-lpsb_prec -lpsb_base -L$(LIBDIR) +# -lpsb_krylov_cbind + +# +# Compilers and such +# +CCOPT= -g +#FINCLUDES=$(FMFLAG)$(LIBDIR) $(FMFLAG). +CINCLUDES=-I$(LIBDIR) $(FIFLAG)$(INCLUDEDIR) $(FIFLAG)$(PSBLAS_INCDIR) + +EXEDIR=./runs + +all: ppdec + +ppdec: ppdec.o + $(MPFC) ppdec.o -o ppdec $(PSBC_LIBS) $(PSB_LIBS) $(PSBLDLIBS) -lm -lgfortran +# \ +# -lifcore -lifcoremt -lguide -limf -lirc -lintlc -lcxaguard -L/opt/intel/fc/10.0.023/lib/ -lm + /bin/mv ppdec $(EXEDIR) + +.f90.o: + $(MPFC) $(FCOPT) $(FINCLUDES) $(FDEFINES) -c $< +.c.o: + $(MPCC) $(CCOPT) $(CINCLUDES) $(CDEFINES) -c $< + + +clean: + /bin/rm -f ppdec.o $(EXEDIR)/ppdec +verycleanlib: + (cd ../..; make veryclean) +lib: + (cd ../../; make library) + +tests: all + cd runs ; ./ppdec < ppde.inp + + diff --git a/cbind/test/pargen/ppdec.c b/cbind/test/pargen/ppdec.c new file mode 100644 index 00000000..5573625a --- /dev/null +++ b/cbind/test/pargen/ppdec.c @@ -0,0 +1,424 @@ +/*----------------------------------------------------------------------------------*/ +/* Parallel Sparse BLAS v2.2 */ +/* (C) Copyright 2007 Salvatore Filippone University of Rome Tor Vergata */ +/* */ +/* Redistribution and use in source and binary forms, with or without */ +/* modification, are permitted provided that the following conditions */ +/* are met: */ +/* 1. Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* 2. Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions, and the following disclaimer in the */ +/* documentation and/or other materials provided with the distribution. */ +/* 3. The name of the PSBLAS group or the names of its contributors may */ +/* not be used to endorse or promote products derived from this */ +/* software without specific written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED */ +/* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ +/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS */ +/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */ +/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */ +/* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */ +/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */ +/* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ +/* POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* */ +/* File: ppdec.c */ +/* */ +/* Program: ppdec */ +/* This sample program shows how to build and solve a sparse linear */ +/* */ +/* The program solves a linear system based on the partial differential */ +/* equation */ +/* */ +/* */ +/* */ +/* The equation generated is */ +/* */ +/* b1 d d (u) b2 d d (u) a1 d (u)) a2 d (u))) */ +/* - ------ - ------ + ----- + ------ + a3 u = 0 */ +/* dx dx dy dy dx dy */ +/* */ +/* */ +/* with Dirichlet boundary conditions on the unit cube */ +/* */ +/* 0<=x,y,z<=1 */ +/* */ +/* The equation is discretized with finite differences and uniform stepsize; */ +/* the resulting discrete equation is */ +/* */ +/* ( u(x,y,z)(2b1+2b2+a1+a2)+u(x-1,y)(-b1-a1)+u(x,y-1)(-b2-a2)+ */ +/* -u(x+1,y)b1-u(x,y+1)b2)*(1/h**2) */ +/* */ +/* Example adapted from: C.T.Kelley */ +/* Iterative Methods for Linear and Nonlinear Equations */ +/* SIAM 1995 */ +/* */ +/* */ +/* In this sample program the index space of the discretized */ +/* computational domain is first numbered sequentially in a standard way, */ +/* then the corresponding vector is distributed according to an HPF BLOCK */ +/* distribution directive. */ +/* */ +/* Boundary conditions are set in a very simple way, by adding */ +/* equations of the form */ +/* */ +/* u(x,y) = rhs(x,y) */ +/* */ +/*----------------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include "psb_base_cbind.h" +#include "psb_prec_cbind.h" + +#define LINEBUFSIZE 1024 +#define NBMAX 20 + +double a1(double x, double y, double z) +{ + return(1.0); +} +double a2(double x, double y, double z) +{ + return(20.0*y); +} +double a3(double x, double y, double z) +{ + return(1.0); +} +double a4(double x, double y, double z) +{ + return(1.0); +} +double b1(double x, double y, double z) +{ + return(1.0); +} +double b2(double x, double y, double z) +{ + return(1.0); +} +double b3(double x, double y, double z) +{ + return(1.0); +} + +int matgen(int ictxt, int ng,int idim,int vg[],psb_c_dspmat *ah,psb_c_descriptor *cdh, + psb_c_dvector *xh, psb_c_dvector *bh, psb_c_dvector *rh) +{ + int iam, np; + int x, y, z, el,glob_row,i,info,ret; + double gx, gy, gz, deltah; + double val[10*NBMAX], zt[NBMAX]; + int irow[10*NBMAX], icol[10*NBMAX]; + + info = 0; + psb_c_info(ictxt,&iam,&np); + deltah = (double) 1.0/(idim-1); + + for (glob_row=1; glob_row<=ng; glob_row++) { + + /* Check if I have to do something about this entry */ + if (vg[glob_row-1] == iam) { + el=0; + if ( (glob_row%(idim*idim)) == 0) { + x = glob_row/(idim*idim); + } else { + x = glob_row/(idim*idim)+1; + } + if (((glob_row-(x-1)*idim*idim)%idim) == 0) { + y = (glob_row-(x-1)*idim*idim)/idim; + } else { + y = (glob_row-(x-1)*idim*idim)/idim+1; + } + z = glob_row-(x-1)*idim*idim-(y-1)*idim; + gx=x*deltah; + gy=y*deltah; + gz=z*deltah; + zt[0] = 0.0; + /* internal point: build discretization */ + /* term depending on (x-1,y,z) */ + + if (x==1) { + val[el] = -b1(gx,gy,gz)-a1(gx,gy,gz); + val[el] /= deltah*deltah; + zt[0] = exp(-gy*gy-gz*gz)*(-val[el]); + } else { + val[el]=-b1(gx,gy,gz) -a1(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + icol[el]=(x-2)*idim*idim+(y-1)*idim+(z); + el=el+1; + } + /* term depending on (x,y-1,z) */ + if (y==1) { + val[el]=-b2(gx,gy,gz)-a2(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + } else { + val[el]=-b2(gx,gy,gz)-a2(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + icol[el]=(x-1)*idim*idim+(y-2)*idim+(z); + el=el+1; + } + /* term depending on (x,y,z-1)*/ + if (z==1) { + val[el]=-b3(gx,gy,gz)-a3(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + } else { + val[el]=-b3(gx,gy,gz)-a3(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + icol[el]=(x-1)*idim*idim+(y-1)*idim+(z-1); + el=el+1; + } + /* term depending on (x,y,z)*/ + val[el]=2*b1(gx,gy,gz)+2*b2(gx,gy,gz)+2*b3(gx,gy,gz) + +a1(gx,gy,gz)+a2(gx,gy,gz)+a3(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + icol[el]=(x-1)*idim*idim+(y-1)*idim+(z); + el=el+1; + /* term depending on (x,y,z+1) */ + if (z==idim) { + val[el]=-b1(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + } else { + val[el]=-b1(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + icol[el]=(x-1)*idim*idim+(y-1)*idim+(z+1); + el=el+1; + } + /* term depending on (x,y+1,z) */ + if (y==idim) { + val[el]=-b2(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + } else { + val[el]=-b2(gx,gy,gz); + val[el] = val[el]/(deltah*deltah); + icol[el]=(x-1)*idim*idim+(y)*idim+(z); + el=el+1; + } + /* term depending on (x+1,y,z) */ + if (xdescriptor); + + /* Clean up object handles */ + free(ph); + free(xh); + free(bh); + free(ah); + free(cdh); + + + fprintf(stderr,"program completed successfully\n"); + + psb_c_barrier(ictxt); + psb_c_exit(ictxt); +} diff --git a/cbind/test/pargen/runs/ppde.inp b/cbind/test/pargen/runs/ppde.inp new file mode 100644 index 00000000..225e6e7f --- /dev/null +++ b/cbind/test/pargen/runs/ppde.inp @@ -0,0 +1,11 @@ +7 Number of entries below this +BICGSTAB Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES +BJAC Preconditioner NONE DIAG BJAC +CSR A Storage format CSR COO +40 Domain size (acutal system is this**3) +1 Stopping criterion +80 MAXIT +01 ITRACE +20 IRST restart for RGMRES and BiCGSTABL + + From 855f55767349adeeb3a2bc34c54ba42d199efe3b Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Mon, 8 May 2017 14:10:57 +0000 Subject: [PATCH 25/27] psblas3-mcbind: cbind/Makefile cbind/base/Makefile cbind/base/psb_c_serial_cbind_mod.F90 cbind/base/psb_d_serial_cbind_mod.F90 cbind/base/psb_s_serial_cbind_mod.F90 cbind/base/psb_z_serial_cbind_mod.F90 cbind/test/pargen/ppdec.c Added print interface. --- cbind/Makefile | 2 +- cbind/base/Makefile | 2 +- cbind/base/psb_c_serial_cbind_mod.F90 | 25 +++++++++++++++++++++++++ cbind/base/psb_d_serial_cbind_mod.F90 | 25 +++++++++++++++++++++++++ cbind/base/psb_s_serial_cbind_mod.F90 | 25 +++++++++++++++++++++++++ cbind/base/psb_z_serial_cbind_mod.F90 | 25 +++++++++++++++++++++++++ cbind/test/pargen/ppdec.c | 7 +++++-- 7 files changed, 107 insertions(+), 4 deletions(-) diff --git a/cbind/Makefile b/cbind/Makefile index 85a09130..e4baf011 100644 --- a/cbind/Makefile +++ b/cbind/Makefile @@ -13,7 +13,7 @@ lib: based precd based: cd base && $(MAKE) lib LIBNAME=$(LIBNAME) -precd: +precd: based cd prec && $(MAKE) lib LIBNAME=$(LIBNAME) diff --git a/cbind/base/Makefile b/cbind/base/Makefile index 342697ae..ee9b7dcc 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -52,7 +52,7 @@ psb_base_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_tools_cbind_m psb_s_comm_cbind_mod.o psb_d_comm_cbind_mod.o \ psb_c_comm_cbind_mod.o psb_z_comm_cbind_mod.o -psb_base_tools_cbind_mod.o: psb_objhandle_mod.o psb_base_string_cbind_mod.o +psb_base_tools_cbind_mod.o: psb_cpenv_mod.o psb_objhandle_mod.o psb_base_string_cbind_mod.o psb_s_tools_cbind_mod.o psb_s_serial_cbind_mod.o \ psb_d_tools_cbind_mod.o psb_d_serial_cbind_mod.o \ diff --git a/cbind/base/psb_c_serial_cbind_mod.F90 b/cbind/base/psb_c_serial_cbind_mod.F90 index 8d2eac5a..b91aa34c 100644 --- a/cbind/base/psb_c_serial_cbind_mod.F90 +++ b/cbind/base/psb_c_serial_cbind_mod.F90 @@ -113,7 +113,32 @@ contains end function psb_c_cmat_get_ncols + + function psb_c_cmat_name_print(mh,name) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + character(c_char) :: name(*) + type(psb_c_cspmat) :: mh + type(psb_cspmat_type), pointer :: ap + integer :: info + character(1024) :: fname + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + call stringc2f(name,fname) + + call ap%print(fname,head='PSBLAS Cbinding Interface') + + end function psb_c_cmat_name_print + end module psb_c_serial_cbind_mod diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 9b14b898..4f0a6bce 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -113,7 +113,32 @@ contains end function psb_c_dmat_get_ncols + + function psb_c_dmat_name_print(mh,name) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + character(c_char) :: name(*) + type(psb_c_dspmat) :: mh + type(psb_dspmat_type), pointer :: ap + integer :: info + character(1024) :: fname + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + call stringc2f(name,fname) + + call ap%print(fname,head='PSBLAS Cbinding Interface') + + end function psb_c_dmat_name_print + end module psb_d_serial_cbind_mod diff --git a/cbind/base/psb_s_serial_cbind_mod.F90 b/cbind/base/psb_s_serial_cbind_mod.F90 index b2bc5f6a..dedaab92 100644 --- a/cbind/base/psb_s_serial_cbind_mod.F90 +++ b/cbind/base/psb_s_serial_cbind_mod.F90 @@ -113,7 +113,32 @@ contains end function psb_c_smat_get_ncols + + function psb_c_smat_name_print(mh,name) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + character(c_char) :: name(*) + type(psb_c_sspmat) :: mh + type(psb_sspmat_type), pointer :: ap + integer :: info + character(1024) :: fname + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + call stringc2f(name,fname) + + call ap%print(fname,head='PSBLAS Cbinding Interface') + + end function psb_c_smat_name_print + end module psb_s_serial_cbind_mod diff --git a/cbind/base/psb_z_serial_cbind_mod.F90 b/cbind/base/psb_z_serial_cbind_mod.F90 index ef6285bf..b2a3d206 100644 --- a/cbind/base/psb_z_serial_cbind_mod.F90 +++ b/cbind/base/psb_z_serial_cbind_mod.F90 @@ -113,7 +113,32 @@ contains end function psb_c_zmat_get_ncols + + function psb_c_zmat_name_print(mh,name) bind(c) result(res) + use psb_base_mod + use psb_objhandle_mod + use psb_base_string_cbind_mod + implicit none + integer(psb_c_int) :: res + + character(c_char) :: name(*) + type(psb_c_zspmat) :: mh + type(psb_zspmat_type), pointer :: ap + integer :: info + character(1024) :: fname + res = 0 + if (c_associated(mh%item)) then + call c_f_pointer(mh%item,ap) + else + return + end if + call stringc2f(name,fname) + + call ap%print(fname,head='PSBLAS Cbinding Interface') + + end function psb_c_zmat_name_print + end module psb_z_serial_cbind_mod diff --git a/cbind/test/pargen/ppdec.c b/cbind/test/pargen/ppdec.c index 5573625a..fc972231 100644 --- a/cbind/test/pargen/ppdec.c +++ b/cbind/test/pargen/ppdec.c @@ -214,7 +214,10 @@ int matgen(int ictxt, int ng,int idim,int vg[],psb_c_dspmat *ah,psb_c_descriptor icol[el]=(x)*idim*idim+(y-1)*idim+(z); el=el+1; } - for (i=0; i Date: Wed, 10 May 2017 12:50:53 +0000 Subject: [PATCH 26/27] psblas3-mcbind: cbind/base/psb_cpenv_mod.f90 cbind/test/pargen/ppdec.c Fix psb_c_set_index_base; use it in test program. --- cbind/base/psb_cpenv_mod.f90 | 2 +- cbind/test/pargen/ppdec.c | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/cbind/base/psb_cpenv_mod.f90 b/cbind/base/psb_cpenv_mod.f90 index cda907ee..cf5fc7b0 100644 --- a/cbind/base/psb_cpenv_mod.f90 +++ b/cbind/base/psb_cpenv_mod.f90 @@ -16,7 +16,7 @@ contains subroutine psb_c_set_index_base(base) bind(c) implicit none - integer(psb_c_int) :: base + integer(psb_c_int), value :: base psb_c_index_base = base end subroutine psb_c_set_index_base diff --git a/cbind/test/pargen/ppdec.c b/cbind/test/pargen/ppdec.c index fc972231..8932b03f 100644 --- a/cbind/test/pargen/ppdec.c +++ b/cbind/test/pargen/ppdec.c @@ -123,7 +123,7 @@ int matgen(int ictxt, int ng,int idim,int vg[],psb_c_dspmat *ah,psb_c_descriptor info = 0; psb_c_info(ictxt,&iam,&np); deltah = (double) 1.0/(idim-1); - + psb_c_set_index_base(1); for (glob_row=1; glob_row<=ng; glob_row++) { /* Check if I have to do something about this entry */ @@ -214,10 +214,6 @@ int matgen(int ictxt, int ng,int idim,int vg[],psb_c_dspmat *ah,psb_c_descriptor icol[el]=(x)*idim*idim+(y-1)*idim+(z); el=el+1; } - for (i=0; i Date: Mon, 2 Oct 2017 12:04:14 +0100 Subject: [PATCH 27/27] Merged changes from svn dev version. --- Make.inc.in | 1 + Makefile | 9 +- base/Makefile | 3 +- base/internals/Makefile | 2 +- cbind/Makefile | 12 +- cbind/base/Makefile | 3 +- cbind/base/psb_c_cbase.h | 2 +- cbind/base/psb_c_dbase.c | 5 +- cbind/base/psb_c_dbase.h | 2 +- cbind/base/psb_c_sbase.h | 2 +- cbind/base/psb_c_tools_cbind_mod.F90 | 2 +- cbind/base/psb_c_zbase.h | 2 +- cbind/base/psb_d_serial_cbind_mod.F90 | 4 +- cbind/base/psb_d_tools_cbind_mod.F90 | 2 +- cbind/base/psb_s_tools_cbind_mod.F90 | 2 +- cbind/base/psb_z_tools_cbind_mod.F90 | 2 +- cbind/krylov/Makefile | 37 +++++ cbind/krylov/psb_base_krylov_cbind_mod.f90 | 27 ++++ cbind/krylov/psb_ckrylov_cbind_mod.f90 | 106 +++++++++++++ cbind/krylov/psb_dkrylov_cbind_mod.f90 | 108 +++++++++++++ cbind/krylov/psb_krylov_cbind.h | 51 +++++++ cbind/krylov/psb_skrylov_cbind_mod.f90 | 106 +++++++++++++ cbind/krylov/psb_zkrylov_cbind_mod.f90 | 106 +++++++++++++ cbind/prec/Makefile | 8 +- cbind/prec/psb_c_cprec.c | 12 ++ cbind/prec/psb_c_cprec.h | 24 +++ cbind/prec/psb_c_sprec.c | 12 ++ cbind/prec/psb_c_sprec.h | 24 +++ cbind/prec/psb_c_zprec.c | 12 ++ cbind/prec/psb_c_zprec.h | 24 +++ cbind/prec/psb_prec_cbind.h | 3 + cbind/test/pargen/Makefile | 7 +- cbind/test/pargen/ppdec.c | 170 ++++++++++----------- configure | 7 +- configure.ac | 4 +- docs/src/Makefile | 4 +- krylov/Makefile | 7 +- prec/Makefile | 7 +- prec/impl/Makefile | 3 +- test/fileread/Makefile | 3 +- test/hello/Makefile | 3 +- test/kernel/Makefile | 3 +- test/pargen/Makefile | 3 +- test/serial/Makefile | 3 +- test/torture/Makefile | 3 +- test/util/Makefile | 3 +- util/Makefile | 7 +- 47 files changed, 814 insertions(+), 138 deletions(-) create mode 100644 cbind/krylov/Makefile create mode 100644 cbind/krylov/psb_base_krylov_cbind_mod.f90 create mode 100644 cbind/krylov/psb_ckrylov_cbind_mod.f90 create mode 100644 cbind/krylov/psb_dkrylov_cbind_mod.f90 create mode 100644 cbind/krylov/psb_krylov_cbind.h create mode 100644 cbind/krylov/psb_skrylov_cbind_mod.f90 create mode 100644 cbind/krylov/psb_zkrylov_cbind_mod.f90 create mode 100644 cbind/prec/psb_c_cprec.c create mode 100644 cbind/prec/psb_c_cprec.h create mode 100644 cbind/prec/psb_c_sprec.c create mode 100644 cbind/prec/psb_c_sprec.h create mode 100644 cbind/prec/psb_c_zprec.c create mode 100644 cbind/prec/psb_c_zprec.h diff --git a/Make.inc.in b/Make.inc.in index cd2d7179..b6ae650f 100755 --- a/Make.inc.in +++ b/Make.inc.in @@ -44,6 +44,7 @@ INSTALL_DATA=@INSTALL_DATA@ INSTALL_DIR=@INSTALL_DIR@ INSTALL_LIBDIR=@INSTALL_LIBDIR@ INSTALL_INCLUDEDIR=@INSTALL_INCLUDEDIR@ +INSTALL_MODULESDIR=@INSTALL_MODULESDIR@ INSTALL_DOCSDIR=@INSTALL_DOCSDIR@ INSTALL_SAMPLESDIR=@INSTALL_SAMPLESDIR@ diff --git a/Makefile b/Makefile index 0a34e005..293a79ed 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ cbindd: precd kryld utild libd: (if test ! -d lib ; then mkdir lib; fi) (if test ! -d include ; then mkdir include; fi; $(INSTALL_DATA) Make.inc include/Make.inc.psblas) + (if test ! -d modules ; then mkdir modules; fi;) based: cd base && $(MAKE) lib precd: @@ -29,14 +30,17 @@ install: all $(INSTALL_DATA) Make.inc $(INSTALL_INCLUDEDIR)/Make.inc.psblas) (./mkdir.sh $(INSTALL_LIBDIR) &&\ $(INSTALL_DATA) lib/*.a $(INSTALL_LIBDIR)) + (./mkdir.sh $(INSTALL_MODULESDIR) && \ + $(INSTALL_DATA) modules/*$(.mod) $(INSTALL_MODULESDIR)) (./mkdir.sh $(INSTALL_INCLUDEDIR) && \ - $(INSTALL_DATA) include/*$(.mod) $(INSTALL_INCLUDEDIR)) + $(INSTALL_DATA) include/*.h $(INSTALL_INCLUDEDIR)) (./mkdir.sh $(INSTALL_DOCSDIR) && \ /bin/cp -fr docs/*pdf docs/html $(INSTALL_DOCSDIR)) (./mkdir.sh $(INSTALL_DOCSDIR) && \ $(INSTALL_DATA) README LICENSE $(INSTALL_DOCSDIR)) (./mkdir.sh $(INSTALL_SAMPLESDIR) && \ - /bin/cp -fr test/pargen test/fileread test/kernel $(INSTALL_SAMPLESDIR)) + /bin/cp -fr test/pargen test/fileread test/kernel $(INSTALL_SAMPLESDIR) && \ + ./mkdir.sh $(INSTALL_SAMPLESDIR)/cbind && /bin/cp -fr cbind/test/pargen/* $(INSTALL_SAMPLESDIR)/cbind) clean: cd base && $(MAKE) clean cd prec && $(MAKE) clean @@ -50,6 +54,7 @@ check: all cleanlib: (cd lib; /bin/rm -f *.a *$(.mod) *$(.fh) *.h) (cd include; /bin/rm -f *.a *$(.mod) *$(.fh) *.h) + (cd modules; /bin/rm -f *.a *$(.mod) *$(.fh) *.h) veryclean: cleanlib cd base && $(MAKE) veryclean diff --git a/base/Makefile b/base/Makefile index 96bfb8fd..3304176c 100644 --- a/base/Makefile +++ b/base/Makefile @@ -3,11 +3,12 @@ include ../Make.inc HERE=. LIBDIR=../lib INCDIR=../include +MODDIR=../modules LIBNAME=$(BASELIBNAME) lib: mods sr cm in pb tl /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(INCDIR) + /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) sr cm in pb tl: mods diff --git a/base/internals/Makefile b/base/internals/Makefile index 66276c8a..4f31d129 100644 --- a/base/internals/Makefile +++ b/base/internals/Makefile @@ -20,7 +20,7 @@ lib: mpfobjs $(FOBJS) $(FOBJS2) $(COBJS) $(MPFOBJS2) $(MPFOBJS) $(FOBJS) $(FBOJS2): $(MODDIR)/psi_mod.o mpfobjs: - (make $(MPFOBJS) F90="$(MPF90)" FC="$(MPF90)" FCOPT="$(F90COPT)") + (make $(MPFOBJS) F90="$(MPFC)" FC="$(MPFC)" FCOPT="$(FCOPT)") clean: /bin/rm -f $(MPFOBJS) $(FOBJS) $(COBJS) $(FOBJS2) $(MPFOBJS2) *$(.mod) diff --git a/cbind/Makefile b/cbind/Makefile index e4baf011..3d078a9c 100644 --- a/cbind/Makefile +++ b/cbind/Makefile @@ -3,11 +3,13 @@ include ../Make.inc HERE=. LIBDIR=../lib INCDIR=../include +MODDIR=../modules/ LIBNAME=$(CBINDLIBNAME) -lib: based precd +lib: based precd krylovd /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) - /bin/cp -p $(CPUPDFLAG) *$(.mod) *.h $(INCDIR) + /bin/cp -p $(CPUPDFLAG) *.h $(INCDIR) + /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) @@ -15,12 +17,16 @@ based: cd base && $(MAKE) lib LIBNAME=$(LIBNAME) precd: based cd prec && $(MAKE) lib LIBNAME=$(LIBNAME) +krylovd: based precd + cd krylov && $(MAKE) lib LIBNAME=$(LIBNAME) clean: cd base && $(MAKE) clean cd prec && $(MAKE) clean + cd krylov && $(MAKE) clean -veryclean: clean +veryclean: clean + cd test/pargen && $(MAKE) clean /bin/rm -f $(HERE)/$(LIBNAME) $(LIBMOD) *$(.mod) *.h diff --git a/cbind/base/Makefile b/cbind/base/Makefile index ee9b7dcc..e4716c0a 100644 --- a/cbind/base/Makefile +++ b/cbind/base/Makefile @@ -2,9 +2,10 @@ TOP=../.. include $(TOP)/Make.inc LIBDIR=$(TOP)lib INCLUDEDIR=$(TOP)/include +MODDIR=$(TOP)/modules HERE=.. -FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(INCLUDEDIR) +FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) FOBJS= psb_objhandle_mod.o psb_base_cbind_mod.o psb_cpenv_mod.o \ diff --git a/cbind/base/psb_c_cbase.h b/cbind/base/psb_c_cbase.h index e74e39d9..53cfd61d 100644 --- a/cbind/base/psb_c_cbase.h +++ b/cbind/base/psb_c_cbase.h @@ -43,7 +43,7 @@ psb_i_t psb_c_cmat_get_ncols(psb_c_cspmat *mh); /* psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_cspprint(psb_c_cspmat *mh); */ +psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); /* psblas computational routines */ psb_c_t psb_c_cgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_dbase.c b/cbind/base/psb_c_dbase.c index 6b31d18e..8eefca21 100644 --- a/cbind/base/psb_c_dbase.c +++ b/cbind/base/psb_c_dbase.c @@ -23,8 +23,9 @@ psb_d_t* psb_c_dvect_get_cpy(psb_c_dvector *xh) if ((temp=(psb_d_t *)malloc(vsize*sizeof(psb_d_t)))!=NULL) psb_c_dvect_f_get_cpy(temp,xh); - - return(temp); + + fprintf(stderr,"dvect_get_cpy: %lf\n",temp[0]); + return(temp); } diff --git a/cbind/base/psb_c_dbase.h b/cbind/base/psb_c_dbase.h index 52868972..ff4e6997 100644 --- a/cbind/base/psb_c_dbase.h +++ b/cbind/base/psb_c_dbase.h @@ -43,7 +43,7 @@ psb_i_t psb_c_dmat_get_ncols(psb_c_dspmat *mh); /* psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_dspprint(psb_c_dspmat *mh); */ +psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); /* psblas computational routines */ psb_d_t psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_sbase.h b/cbind/base/psb_c_sbase.h index 47a72d38..3617451c 100644 --- a/cbind/base/psb_c_sbase.h +++ b/cbind/base/psb_c_sbase.h @@ -43,7 +43,7 @@ psb_i_t psb_c_smat_get_ncols(psb_c_sspmat *mh); /* psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_sspprint(psb_c_sspmat *mh); */ +psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); /* psblas computational routines */ psb_s_t psb_c_sgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index 7f1b0cf4..3c2571ec 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -130,7 +130,7 @@ contains call psb_geins(nz,irw(1:nz),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) else - call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) end if diff --git a/cbind/base/psb_c_zbase.h b/cbind/base/psb_c_zbase.h index 4d8f4f9a..7f13f9ce 100644 --- a/cbind/base/psb_c_zbase.h +++ b/cbind/base/psb_c_zbase.h @@ -43,7 +43,7 @@ psb_i_t psb_c_zmat_get_ncols(psb_c_zspmat *mh); /* psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ /* const char *afmt, psb_i_t upd, psb_i_t dupl); */ psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); -/* psb_i_t psb_c_zspprint(psb_c_zspmat *mh); */ +psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); /* psblas computational routines */ psb_z_t psb_c_zgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); diff --git a/cbind/base/psb_d_serial_cbind_mod.F90 b/cbind/base/psb_d_serial_cbind_mod.F90 index 4f0a6bce..48314205 100644 --- a/cbind/base/psb_d_serial_cbind_mod.F90 +++ b/cbind/base/psb_d_serial_cbind_mod.F90 @@ -39,11 +39,13 @@ contains res = -1 - if (c_associated(xh%item)) then + if (c_associated(xh%item)) then + res = 0 call c_f_pointer(xh%item,vp) fv = vp%get_vect() sz = size(fv) v(1:sz) = fv(1:sz) + write(0,*) 'In dvect_f_get_cpy:',v(1),fv(1) end if end function psb_c_dvect_f_get_cpy diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 7a568352..d39c040b 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -130,7 +130,7 @@ contains call psb_geins(nz,irw(1:nz),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) else - call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) end if diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index e93bd761..117b6257 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -130,7 +130,7 @@ contains call psb_geins(nz,irw(1:nz),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) else - call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) end if diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index fb0e0045..4d293fab 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -130,7 +130,7 @@ contains call psb_geins(nz,irw(1:nz),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) else - call psb_geins(nz,(irw(1:nz)-(1-ixb)),val(1:nz),& + call psb_geins(nz,(irw(1:nz)+(1-ixb)),val(1:nz),& & xp,descp,info, dupl=psb_dupl_ovwrt_) end if diff --git a/cbind/krylov/Makefile b/cbind/krylov/Makefile new file mode 100644 index 00000000..bc75c1a0 --- /dev/null +++ b/cbind/krylov/Makefile @@ -0,0 +1,37 @@ +TOP=../.. +include $(TOP)/Make.inc +LIBDIR=$(TOP)/lib +INCLUDEDIR=$(TOP)/include +MODDIR=$(TOP)/modules +HERE=.. + +FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) +CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) + +OBJS=psb_base_krylov_cbind_mod.o \ +psb_skrylov_cbind_mod.o psb_dkrylov_cbind_mod.o psb_ckrylov_cbind_mod.o psb_zkrylov_cbind_mod.o +CMOD=psb_krylov_cbind.h + + +LIBMOD=psb_base_krylov_cbind_mod$(.mod) \ +psb_skrylov_cbind_mod$(.mod) psb_dkrylov_cbind_mod$(.mod) \ +psb_ckrylov_cbind_mod$(.mod) psb_zkrylov_cbind_mod$(.mod) + +LOCAL_MODS=$(LIBMOD) +LIBNAME=$(CKRYLOVLIBNAME) + + +lib: $(OBJS) $(CMOD) + $(AR) $(HERE)/$(LIBNAME) $(OBJS) + $(RANLIB) $(HERE)/$(LIBNAME) + /bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR) + /bin/cp -p $(LIBMOD) $(CMOD) $(HERE) + +psb_skrylov_cbind_mod.o psb_dkrylov_cbind_mod.o psb_ckrylov_cbind_mod.o psb_zkrylov_cbind_mod.o: psb_base_krylov_cbind_mod.o +veryclean: clean + /bin/rm -f $(HERE)/$(LIBNAME) + +clean: + /bin/rm -f $(OBJS) $(LOCAL_MODS) + +veryclean: clean diff --git a/cbind/krylov/psb_base_krylov_cbind_mod.f90 b/cbind/krylov/psb_base_krylov_cbind_mod.f90 new file mode 100644 index 00000000..5f322fbc --- /dev/null +++ b/cbind/krylov/psb_base_krylov_cbind_mod.f90 @@ -0,0 +1,27 @@ +module psb_base_krylov_cbind_mod + + use iso_c_binding + type, bind(c) :: solveroptions + integer(c_int) :: iter, itmax, itrace, irst, istop + real(c_double) :: eps, err + end type solveroptions + +contains + + function psb_c_DefaultSolverOptions(options)& + & bind(c,name='psb_c_DefaultSolverOptions') result(res) + implicit none + type(solveroptions) :: options + integer(c_int) :: res + + options%itmax = 1000 + options%itrace = 0 + options%istop = 2 + options%irst = 10 + options%eps = 1.d-6 + + res = 0 + end function psb_c_DefaultSolverOptions + + +end module psb_base_krylov_cbind_mod diff --git a/cbind/krylov/psb_ckrylov_cbind_mod.f90 b/cbind/krylov/psb_ckrylov_cbind_mod.f90 new file mode 100644 index 00000000..cba8ccc9 --- /dev/null +++ b/cbind/krylov/psb_ckrylov_cbind_mod.f90 @@ -0,0 +1,106 @@ +module psb_ckrylov_cbind_mod + + use psb_base_krylov_cbind_mod + +contains + + function psb_c_ckrylov(methd,& + & ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_cspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_cprec) :: ph + type(psb_c_cvector) :: bh,xh + character(c_char) :: methd(*) + type(solveroptions) :: options + + res= psb_c_ckrylov_opt(methd, ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_ckrylov + + + function psb_c_ckrylov_opt(methd,& + & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_cspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_cprec) :: ph + type(psb_c_cvector) :: bh,xh + integer(c_int), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(c_int) :: iter + real(c_double) :: err + character(c_char) :: methd(*) + type(solveroptions) :: options + type(psb_desc_type), pointer :: descp + type(psb_cspmat_type), pointer :: ap + type(psb_cprec_type), pointer :: precp + type(psb_c_vect_type), pointer :: xp, bp + + integer :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_spk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + + call stringc2f(methd,fmethd) + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_krylov(fmethd, ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & irst=first, err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_ckrylov_opt + +end module psb_ckrylov_cbind_mod diff --git a/cbind/krylov/psb_dkrylov_cbind_mod.f90 b/cbind/krylov/psb_dkrylov_cbind_mod.f90 new file mode 100644 index 00000000..55fc0366 --- /dev/null +++ b/cbind/krylov/psb_dkrylov_cbind_mod.f90 @@ -0,0 +1,108 @@ +module psb_dkrylov_cbind_mod + + use psb_base_krylov_cbind_mod + +contains + + function psb_c_dkrylov(methd,& + & ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_dspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_dprec) :: ph + type(psb_c_dvector) :: bh,xh + character(c_char) :: methd(*) + type(solveroptions) :: options + + write(0,*) 'psb_c_dkrylov options ', options%eps + res= psb_c_dkrylov_opt(methd, ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_dkrylov + + + function psb_c_dkrylov_opt(methd,& + & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_dspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_dprec) :: ph + type(psb_c_dvector) :: bh,xh + integer(c_int), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(c_int) :: iter + real(c_double) :: err + character(c_char) :: methd(*) + type(solveroptions) :: options + type(psb_desc_type), pointer :: descp + type(psb_dspmat_type), pointer :: ap + type(psb_dprec_type), pointer :: precp + type(psb_d_vect_type), pointer :: xp, bp + + integer :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_dpk_) :: feps,ferr + + write(0,*) 'psb_c_dkrylov_opt options ', eps + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + + call stringc2f(methd,fmethd) + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_krylov(fmethd, ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & irst=first, err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_dkrylov_opt + +end module psb_dkrylov_cbind_mod diff --git a/cbind/krylov/psb_krylov_cbind.h b/cbind/krylov/psb_krylov_cbind.h new file mode 100644 index 00000000..4ed45746 --- /dev/null +++ b/cbind/krylov/psb_krylov_cbind.h @@ -0,0 +1,51 @@ +#ifndef PSB_KRYL_CBIND_ +#define PSB_KRYL_CBIND_ + +#include "psb_base_cbind.h" +#include "psb_prec_cbind.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Object handle related routines */ +/* No new handles for Krylov methods. */ +/* Here's a choice: define a struct to hold the options */ +/* Drawback: we end up defining defaults in two places */ +/* Note: must be interoperable */ +typedef struct psb_c_solveroptions { + int iter; /* On exit how many iterations were performed */ + int itmax; /* On entry maximum number of iterations */ + int itrace; /* On entry print an info message every itrace iterations */ + int irst; /* Restart depth for RGMRES or BiCGSTAB(L) */ + int istop; /* Stopping criterion: 1:backward error 2: ||r||_2/||b||_2 */ + double eps; /* Stopping tolerance */ + double err; /* Convergence indicator on exit */ +} psb_c_SolverOptions; + +int psb_c_DefaultSolverOptions(psb_c_SolverOptions *opt); + +int psb_c_skrylov(const char *method, psb_c_sspmat *ah, psb_c_sprec *ph, + psb_c_svector *bh, psb_c_svector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +int psb_c_dkrylov(const char *method, psb_c_dspmat *ah, psb_c_dprec *ph, + psb_c_dvector *bh, psb_c_dvector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +int psb_c_ckrylov(const char *method, psb_c_cspmat *ah, psb_c_cprec *ph, + psb_c_cvector *bh, psb_c_cvector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +int psb_c_zkrylov(const char *method, psb_c_zspmat *ah, psb_c_zprec *ph, + psb_c_zvector *bh, psb_c_zvector *xh, + psb_c_descriptor *cdh, psb_c_SolverOptions *opt); + +#define PSB_VALID_KRYLOV_METHODS_STRINGS "CG","CGS","BICG","BICGSTAB","RGMRES","BICGSTABL","FCG","GCR" +#define PSB_VALID_KRYLOV_METHODS_STRING "CG CGS BICG BICGSTAB RGMRES BICGSTABL FCG GCR" + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif diff --git a/cbind/krylov/psb_skrylov_cbind_mod.f90 b/cbind/krylov/psb_skrylov_cbind_mod.f90 new file mode 100644 index 00000000..c2856567 --- /dev/null +++ b/cbind/krylov/psb_skrylov_cbind_mod.f90 @@ -0,0 +1,106 @@ +module psb_skrylov_cbind_mod + + use psb_base_krylov_cbind_mod + +contains + + function psb_c_skrylov(methd,& + & ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_sspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_sprec) :: ph + type(psb_c_svector) :: bh,xh + character(c_char) :: methd(*) + type(solveroptions) :: options + + res= psb_c_skrylov_opt(methd, ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_skrylov + + + function psb_c_skrylov_opt(methd,& + & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_sspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_sprec) :: ph + type(psb_c_svector) :: bh,xh + integer(c_int), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(c_int) :: iter + real(c_double) :: err + character(c_char) :: methd(*) + type(solveroptions) :: options + type(psb_desc_type), pointer :: descp + type(psb_sspmat_type), pointer :: ap + type(psb_sprec_type), pointer :: precp + type(psb_s_vect_type), pointer :: xp, bp + + integer :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_spk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + + call stringc2f(methd,fmethd) + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_krylov(fmethd, ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & irst=first, err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_skrylov_opt + +end module psb_skrylov_cbind_mod diff --git a/cbind/krylov/psb_zkrylov_cbind_mod.f90 b/cbind/krylov/psb_zkrylov_cbind_mod.f90 new file mode 100644 index 00000000..ae1931ec --- /dev/null +++ b/cbind/krylov/psb_zkrylov_cbind_mod.f90 @@ -0,0 +1,106 @@ +module psb_zkrylov_cbind_mod + + use psb_base_krylov_cbind_mod + +contains + + function psb_c_zkrylov(methd,& + & ah,ph,bh,xh,cdh,options) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_zspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_zprec) :: ph + type(psb_c_zvector) :: bh,xh + character(c_char) :: methd(*) + type(solveroptions) :: options + + res= psb_c_zkrylov_opt(methd, ah, ph, bh, xh, options%eps,cdh, & + & itmax=options%itmax, iter=options%iter,& + & itrace=options%itrace, istop=options%istop,& + & irst=options%irst, err=options%err) + + end function psb_c_zkrylov + + + function psb_c_zkrylov_opt(methd,& + & ah,ph,bh,xh,eps,cdh,itmax,iter,err,itrace,irst,istop) bind(c) result(res) + use psb_base_mod + use psb_prec_mod + use psb_krylov_mod + use psb_objhandle_mod + use psb_prec_cbind_mod + use psb_base_string_cbind_mod + implicit none + integer(c_int) :: res + type(psb_c_zspmat) :: ah + type(psb_c_descriptor) :: cdh + type(psb_c_zprec) :: ph + type(psb_c_zvector) :: bh,xh + integer(c_int), value :: itmax,itrace,irst,istop + real(c_double), value :: eps + integer(c_int) :: iter + real(c_double) :: err + character(c_char) :: methd(*) + type(solveroptions) :: options + type(psb_desc_type), pointer :: descp + type(psb_zspmat_type), pointer :: ap + type(psb_zprec_type), pointer :: precp + type(psb_z_vect_type), pointer :: xp, bp + + integer :: info,fitmax,fitrace,first,fistop,fiter + character(len=20) :: fmethd + real(psb_dpk_) :: feps,ferr + + res = -1 + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + call c_f_pointer(xh%item,xp) + else + return + end if + if (c_associated(bh%item)) then + call c_f_pointer(bh%item,bp) + else + return + end if + if (c_associated(ah%item)) then + call c_f_pointer(ah%item,ap) + else + return + end if + if (c_associated(ph%item)) then + call c_f_pointer(ph%item,precp) + else + return + end if + + + call stringc2f(methd,fmethd) + feps = eps + fitmax = itmax + fitrace = itrace + first = irst + fistop = istop + + call psb_krylov(fmethd, ap, precp, bp, xp, feps, & + & descp, info,& + & itmax=fitmax,iter=fiter,itrace=fitrace,istop=fistop,& + & irst=first, err=ferr) + iter = fiter + err = ferr + res = info + + end function psb_c_zkrylov_opt + +end module psb_zkrylov_cbind_mod diff --git a/cbind/prec/Makefile b/cbind/prec/Makefile index 8bdcd830..0de654d9 100644 --- a/cbind/prec/Makefile +++ b/cbind/prec/Makefile @@ -2,15 +2,16 @@ TOP=../.. include $(TOP)/Make.inc LIBDIR=$(TOP)/lib INCLUDEDIR=$(TOP)/include +MODDIR=$(TOP)/modules HERE=.. -FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(INCLUDEDIR) +FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) OBJS=psb_prec_cbind_mod.o \ psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o \ -psb_c_dprec.o -CMOD=psb_prec_cbind.h psb_c_dprec.h +psb_c_sprec.o psb_c_dprec.o psb_c_cprec.o psb_c_zprec.o +CMOD=psb_prec_cbind.h psb_c_sprec.h psb_c_dprec.h psb_c_cprec.h psb_c_zprec.h LIBMOD=psb_prec_cbind_mod$(.mod) \ @@ -26,7 +27,6 @@ lib: $(OBJS) $(CMOD) $(RANLIB) $(HERE)/$(LIBNAME) /bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR) /bin/cp -p $(LIBMOD) $(CMOD) $(HERE) - /bin/cp -p $(LIBMOD) $(CMOD) $(INCLUDEDIR) psb_prec_cbind_mod.o: psb_sprec_cbind_mod.o psb_dprec_cbind_mod.o psb_cprec_cbind_mod.o psb_zprec_cbind_mod.o veryclean: clean diff --git a/cbind/prec/psb_c_cprec.c b/cbind/prec/psb_c_cprec.c new file mode 100644 index 00000000..0bbf9902 --- /dev/null +++ b/cbind/prec/psb_c_cprec.c @@ -0,0 +1,12 @@ +#include +#include "psb_c_cprec.h" + +psb_c_cprec* psb_c_new_cprec() +{ + psb_c_cprec* temp; + + temp=(psb_c_cprec *) malloc(sizeof(psb_c_cprec)); + temp->cprec=NULL; + return(temp); +} + diff --git a/cbind/prec/psb_c_cprec.h b/cbind/prec/psb_c_cprec.h new file mode 100644 index 00000000..b840c6f0 --- /dev/null +++ b/cbind/prec/psb_c_cprec.h @@ -0,0 +1,24 @@ +#ifndef PSB_C_CPREC_ +#define PSB_C_CPREC_ +#include "psb_base_cbind.h" +/* Object handle related routines */ +/* Note: psb_get_XXX_handle returns: <= 0 unsuccessful */ +/* >0 valid handle */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_CPREC { + void *cprec; +} psb_c_cprec; + +psb_c_cprec* psb_c_new_cprec(); + +psb_i_t psb_c_cprecinit(psb_c_cprec *ph, const char *ptype); +psb_i_t psb_c_cprecbld(psb_c_cspmat *ah, psb_c_descriptor *cdh, psb_c_cprec *ph); +psb_i_t psb_c_cprecfree(psb_c_cprec *ph); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cbind/prec/psb_c_sprec.c b/cbind/prec/psb_c_sprec.c new file mode 100644 index 00000000..caf07fc8 --- /dev/null +++ b/cbind/prec/psb_c_sprec.c @@ -0,0 +1,12 @@ +#include +#include "psb_c_sprec.h" + +psb_c_sprec* psb_c_new_sprec() +{ + psb_c_sprec* temp; + + temp=(psb_c_sprec *) malloc(sizeof(psb_c_sprec)); + temp->sprec=NULL; + return(temp); +} + diff --git a/cbind/prec/psb_c_sprec.h b/cbind/prec/psb_c_sprec.h new file mode 100644 index 00000000..cfad99bb --- /dev/null +++ b/cbind/prec/psb_c_sprec.h @@ -0,0 +1,24 @@ +#ifndef PSB_C_SPREC_ +#define PSB_C_SPREC_ +#include "psb_base_cbind.h" +/* Object handle related routines */ +/* Note: psb_get_XXX_handle returns: <= 0 unsuccessful */ +/* >0 valid handle */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_SPREC { + void *sprec; +} psb_c_sprec; + +psb_c_sprec* psb_c_new_sprec(); + +psb_i_t psb_c_sprecinit(psb_c_sprec *ph, const char *ptype); +psb_i_t psb_c_sprecbld(psb_c_sspmat *ah, psb_c_descriptor *cdh, psb_c_sprec *ph); +psb_i_t psb_c_sprecfree(psb_c_sprec *ph); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cbind/prec/psb_c_zprec.c b/cbind/prec/psb_c_zprec.c new file mode 100644 index 00000000..b93db601 --- /dev/null +++ b/cbind/prec/psb_c_zprec.c @@ -0,0 +1,12 @@ +#include +#include "psb_c_zprec.h" + +psb_c_zprec* psb_c_new_zprec() +{ + psb_c_zprec* temp; + + temp=(psb_c_zprec *) malloc(sizeof(psb_c_zprec)); + temp->zprec=NULL; + return(temp); +} + diff --git a/cbind/prec/psb_c_zprec.h b/cbind/prec/psb_c_zprec.h new file mode 100644 index 00000000..eebe8e08 --- /dev/null +++ b/cbind/prec/psb_c_zprec.h @@ -0,0 +1,24 @@ +#ifndef PSB_C_ZPREC_ +#define PSB_C_ZPREC_ +#include "psb_base_cbind.h" +/* Object handle related routines */ +/* Note: psb_get_XXX_handle returns: <= 0 unsuccessful */ +/* >0 valid handle */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_ZPREC { + void *zprec; +} psb_c_zprec; + +psb_c_zprec* psb_c_new_zprec(); + +psb_i_t psb_c_zprecinit(psb_c_zprec *ph, const char *ptype); +psb_i_t psb_c_zprecbld(psb_c_zspmat *ah, psb_c_descriptor *cdh, psb_c_zprec *ph); +psb_i_t psb_c_zprecfree(psb_c_zprec *ph); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cbind/prec/psb_prec_cbind.h b/cbind/prec/psb_prec_cbind.h index 1dabd9cf..5a75b228 100644 --- a/cbind/prec/psb_prec_cbind.h +++ b/cbind/prec/psb_prec_cbind.h @@ -1,6 +1,9 @@ #ifndef PSB_PREC_CBIND_ #define PSB_PREC_CBIND_ +#include "psb_c_sprec.h" #include "psb_c_dprec.h" +#include "psb_c_cprec.h" +#include "psb_c_zprec.h" #endif diff --git a/cbind/test/pargen/Makefile b/cbind/test/pargen/Makefile index 040bc02c..66120929 100644 --- a/cbind/test/pargen/Makefile +++ b/cbind/test/pargen/Makefile @@ -2,19 +2,20 @@ TOP=../../.. include $(TOP)/Make.inc LIBDIR=$(TOP)/lib INCLUDEDIR=$(TOP)/include +MODDIR=$(TOP)/modules/ HERE=../.. -FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(INCLUDEDIR) +FINCLUDES=$(FMFLAG). $(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) CINCLUDES=-I. -I$(HERE) -I$(INCLUDEDIR) PSBC_LIBS= -L$(LIBDIR) -lpsb_cbind -PSB_LIBS=-lpsb_prec -lpsb_base -L$(LIBDIR) +PSB_LIBS=-lpsb_krylov -lpsb_prec -lpsb_base -L$(LIBDIR) # -lpsb_krylov_cbind # # Compilers and such # -CCOPT= -g +#CCOPT= -g #FINCLUDES=$(FMFLAG)$(LIBDIR) $(FMFLAG). CINCLUDES=-I$(LIBDIR) $(FIFLAG)$(INCLUDEDIR) $(FIFLAG)$(PSBLAS_INCDIR) diff --git a/cbind/test/pargen/ppdec.c b/cbind/test/pargen/ppdec.c index 8932b03f..4f34e676 100644 --- a/cbind/test/pargen/ppdec.c +++ b/cbind/test/pargen/ppdec.c @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------------*/ -/* Parallel Sparse BLAS v2.2 */ -/* (C) Copyright 2007 Salvatore Filippone University of Rome Tor Vergata */ +/* Parallel Sparse BLAS v 3.5.0 */ +/* (C) Copyright 2017 Salvatore Filippone Cranfield University */ /* */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ @@ -62,12 +62,8 @@ /* In this sample program the index space of the discretized */ /* computational domain is first numbered sequentially in a standard way, */ /* then the corresponding vector is distributed according to an HPF BLOCK */ -/* distribution directive. */ -/* */ -/* Boundary conditions are set in a very simple way, by adding */ -/* equations of the form */ -/* */ -/* u(x,y) = rhs(x,y) */ +/* distribution directive. The discretization ensures there are IDIM */ +/* *internal* points in each direction. */ /* */ /*----------------------------------------------------------------------------------*/ @@ -78,144 +74,136 @@ #include "psb_base_cbind.h" #include "psb_prec_cbind.h" +#include "psb_krylov_cbind.h" #define LINEBUFSIZE 1024 #define NBMAX 20 +#define DUMPMATRIX 0 double a1(double x, double y, double z) { - return(1.0); + return(1.0/80.0); } double a2(double x, double y, double z) { - return(20.0*y); + return(1.0/80.0); } double a3(double x, double y, double z) { - return(1.0); + return(1.0/80.0); } -double a4(double x, double y, double z) +double c(double x, double y, double z) { - return(1.0); + return(0.0); } double b1(double x, double y, double z) { - return(1.0); + return(1.0/sqrt(3.0)); } double b2(double x, double y, double z) { - return(1.0); + return(1.0/sqrt(3.0)); } double b3(double x, double y, double z) { - return(1.0); + return(1.0/sqrt(3.0)); +} + +double g(double x, double y, double z) +{ + if (x == 1.0) { + return(1.0); + } else if (x == 0.0) { + return( exp(-y*y-z*z)); + } else { + return(0.0); + } } int matgen(int ictxt, int ng,int idim,int vg[],psb_c_dspmat *ah,psb_c_descriptor *cdh, psb_c_dvector *xh, psb_c_dvector *bh, psb_c_dvector *rh) { int iam, np; - int x, y, z, el,glob_row,i,info,ret; - double gx, gy, gz, deltah; + int ix, iy, iz, el,glob_row,i,info,ret; + double x, y, z, deltah, sqdeltah, deltah2; double val[10*NBMAX], zt[NBMAX]; int irow[10*NBMAX], icol[10*NBMAX]; info = 0; psb_c_info(ictxt,&iam,&np); - deltah = (double) 1.0/(idim-1); - psb_c_set_index_base(1); - for (glob_row=1; glob_row<=ng; glob_row++) { + deltah = (double) 1.0/(idim+2); + sqdeltah = deltah*deltah; + deltah2 = 2.0* deltah; + psb_c_set_index_base(0); + for (glob_row=0; glob_row < ng; glob_row++) { /* Check if I have to do something about this entry */ - if (vg[glob_row-1] == iam) { + if (vg[glob_row] == iam) { el=0; - if ( (glob_row%(idim*idim)) == 0) { - x = glob_row/(idim*idim); - } else { - x = glob_row/(idim*idim)+1; - } - if (((glob_row-(x-1)*idim*idim)%idim) == 0) { - y = (glob_row-(x-1)*idim*idim)/idim; - } else { - y = (glob_row-(x-1)*idim*idim)/idim+1; - } - z = glob_row-(x-1)*idim*idim-(y-1)*idim; - gx=x*deltah; - gy=y*deltah; - gz=z*deltah; + ix = glob_row/(idim*idim); + iy = (glob_row-ix*idim*idim)/idim; + iz = glob_row-ix*idim*idim-iy*idim; + x=(ix+1)*deltah; + y=(iy+1)*deltah; + z=(iz+1)*deltah; zt[0] = 0.0; /* internal point: build discretization */ /* term depending on (x-1,y,z) */ - - if (x==1) { - val[el] = -b1(gx,gy,gz)-a1(gx,gy,gz); - val[el] /= deltah*deltah; - zt[0] = exp(-gy*gy-gz*gz)*(-val[el]); + val[el] = -a1(x,y,z)/sqdeltah-b1(x,y,z)/deltah2; + if (ix==0) { + zt[0] += g(0.0,y,z)*(-val[el]); } else { - val[el]=-b1(gx,gy,gz) -a1(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - icol[el]=(x-2)*idim*idim+(y-1)*idim+(z); + icol[el]=(ix-1)*idim*idim+(iy)*idim+(iz); el=el+1; } - /* term depending on (x,y-1,z) */ - if (y==1) { - val[el]=-b2(gx,gy,gz)-a2(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + /* term depending on (x,y-1,z) */ + val[el] = -a2(x,y,z)/sqdeltah-b2(x,y,z)/deltah2; + if (iy==0) { + zt[0] += g(x,0.0,z)*(-val[el]); } else { - val[el]=-b2(gx,gy,gz)-a2(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - icol[el]=(x-1)*idim*idim+(y-2)*idim+(z); + icol[el]=(ix)*idim*idim+(iy-1)*idim+(iz); el=el+1; } /* term depending on (x,y,z-1)*/ - if (z==1) { - val[el]=-b3(gx,gy,gz)-a3(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + val[el]=-a3(x,y,z)/sqdeltah-b3(x,y,z)/deltah2; + if (iz==0) { + zt[0] += g(x,y,0.0)*(-val[el]); } else { - val[el]=-b3(gx,gy,gz)-a3(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - icol[el]=(x-1)*idim*idim+(y-1)*idim+(z-1); + icol[el]=(ix)*idim*idim+(iy)*idim+(iz-1); el=el+1; } /* term depending on (x,y,z)*/ - val[el]=2*b1(gx,gy,gz)+2*b2(gx,gy,gz)+2*b3(gx,gy,gz) - +a1(gx,gy,gz)+a2(gx,gy,gz)+a3(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - icol[el]=(x-1)*idim*idim+(y-1)*idim+(z); + val[el]=2.0*(a1(x,y,z)+a2(x,y,z)+a3(x,y,z))/sqdeltah + c(x,y,z); + icol[el]=(ix)*idim*idim+(iy)*idim+(iz); el=el+1; /* term depending on (x,y,z+1) */ - if (z==idim) { - val[el]=-b1(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + val[el] = -a3(x,y,z)/sqdeltah+b3(x,y,z)/deltah2; + if (iz==idim-1) { + zt[0] += g(x,y,1.0)*(-val[el]); } else { - val[el]=-b1(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - icol[el]=(x-1)*idim*idim+(y-1)*idim+(z+1); + icol[el]=(ix)*idim*idim+(iy)*idim+(iz+1); el=el+1; } /* term depending on (x,y+1,z) */ - if (y==idim) { - val[el]=-b2(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - zt[0] = exp(-gy*gy-gz*gz)*exp(-gx)*(-val[el]); + val[el] = -a2(x,y,z)/sqdeltah+b2(x,y,z)/deltah2; + if (iy==idim-1) { + zt[0] += g(x,1.0,z)*(-val[el]); } else { - val[el]=-b2(gx,gy,gz); - val[el] = val[el]/(deltah*deltah); - icol[el]=(x-1)*idim*idim+(y)*idim+(z); + icol[el]=(ix)*idim*idim+(iy+1)*idim+(iz); el=el+1; } /* term depending on (x+1,y,z) */ - if (x&5 -$as_echo "$INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR" >&6; } +INSTALL_MODULESDIR=$INSTALL_DIR/modules +{ $as_echo "$as_me:$LINENO: result: $INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_MODULESDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR" >&5 +$as_echo "$INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_MODULESDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR" >&6; } save_FCFLAGS="$FCFLAGS"; ac_ext=${ac_fc_srcext-f} @@ -12130,6 +12132,7 @@ UTILLIBNAME=libpsb_util.a + PSBLASRULES=' diff --git a/configure.ac b/configure.ac index d8aa9b0e..639d6473 100755 --- a/configure.ac +++ b/configure.ac @@ -92,7 +92,8 @@ case $samplesdir in \/* ) eval "INSTALL_SAMPLESDIR=$samplesdir";; * ) eval "INSTALL_SAMPLESDIR=$INSTALL_DIR/samples";; esac -AC_MSG_RESULT([$INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR]) +INSTALL_MODULESDIR=$INSTALL_DIR/modules +AC_MSG_RESULT([$INSTALL_DIR $INSTALL_INCLUDEDIR $INSTALL_MODULESDIR $INSTALL_LIBDIR $INSTALL_DOCSDIR $INSTALL_SAMPLESDIR]) dnl dnl We set our own FC flags, ignore those from AC_PROG_FC but not those from the @@ -729,6 +730,7 @@ AC_SUBST(INSTALL_LIBDIR) AC_SUBST(INSTALL_INCLUDEDIR) AC_SUBST(INSTALL_DOCSDIR) AC_SUBST(INSTALL_SAMPLESDIR) +AC_SUBST(INSTALL_MODULESDIR) AC_SUBST(BLAS_LIBS) AC_SUBST(AMD_LIBS) diff --git a/docs/src/Makefile b/docs/src/Makefile index 54707fbc..1fbf2b03 100644 --- a/docs/src/Makefile +++ b/docs/src/Makefile @@ -1,4 +1,4 @@ -## $Id$ +## $Id: Makefile 10536 2017-04-09 19:15:54Z sfilippo $ ##--------------------------------------------------------------------------- ## LaTeX Makefile ## Copyright (C) 1996-2001 Michael Forman Michael.Forman@Colorado.EDU @@ -254,7 +254,7 @@ define header @echo "#---------------------------------------------------------------------" @echo "MAKEFILE = LaTeX PDF Makefile" @echo "AUTHOR = Alfredo Buttari" - @echo 'ID = $$Id$ ' + @echo 'ID = $$Id: Makefile 10536 2017-04-09 19:15:54Z sfilippo $ ' @echo "#---------------------------------------------------------------------" @echo @echo "ACRO = $(ACRO) $(ACROFLAGS) $(PDF)" diff --git a/krylov/Makefile b/krylov/Makefile index 947b1fe8..ab9a3933 100644 --- a/krylov/Makefile +++ b/krylov/Makefile @@ -4,6 +4,7 @@ include ../Make.inc HERE=. LIBDIR=../lib INCDIR=../include +MODDIR=../modules MODOBJS= psb_base_krylov_conv_mod.o \ psb_s_krylov_conv_mod.o psb_c_krylov_conv_mod.o \ @@ -23,19 +24,19 @@ OBJS=$(F90OBJS) $(MODOBJS) LOCAL_MODS=$(MODOBJS:.o=$(.mod)) LIBNAME=$(METHDLIBNAME) -FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCDIR) +FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) lib: $(OBJS) $(AR) $(HERE)/$(LIBNAME) $(OBJS) $(RANLIB) $(HERE)/$(LIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(INCDIR) + /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) psb_s_krylov_conv_mod.o psb_c_krylov_conv_mod.o psb_d_krylov_conv_mod.o psb_z_krylov_conv_mod.o: psb_base_krylov_conv_mod.o psb_krylov_conv_mod.o: psb_s_krylov_conv_mod.o psb_c_krylov_conv_mod.o psb_d_krylov_conv_mod.o psb_z_krylov_conv_mod.o $(F90OBJS): $(MODOBJS) -$(OBJS): $(INCDIR)/$(PRECMODNAME)$(.mod) $(INCDIR)/$(BASEMODNAME)$(.mod) +$(OBJS): $(MODDIR)/$(PRECMODNAME)$(.mod) $(MODDIR)/$(BASEMODNAME)$(.mod) veryclean: clean /bin/rm -f $(HERE)/$(LIBNAME) diff --git a/prec/Makefile b/prec/Makefile index 2538f522..0b9079c5 100644 --- a/prec/Makefile +++ b/prec/Makefile @@ -2,6 +2,7 @@ include ../Make.inc LIBDIR=../lib INCDIR=../include +MODDIR=../modules HERE=. MODOBJS=psb_prec_const_mod.o\ psb_s_prec_type.o psb_d_prec_type.o psb_c_prec_type.o psb_z_prec_type.o \ @@ -16,19 +17,19 @@ MODOBJS=psb_prec_const_mod.o\ LIBNAME=$(PRECLIBNAME) COBJS= -FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCDIR) +FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) OBJS=$(F90OBJS) $(COBJS) $(MPFOBJS) $(MODOBJS) lib: $(OBJS) impld $(AR) $(HERE)/$(LIBNAME) $(OBJS) $(RANLIB) $(HERE)/$(LIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(INCDIR) + /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) impld: $(OBJS) cd impl && $(MAKE) -$(OBJS): $(INCDIR)/$(BASEMODNAME)$(.mod) +$(OBJS): $(MODDIR)/$(BASEMODNAME)$(.mod) psb_s_base_prec_mod.o psb_d_base_prec_mod.o psb_c_base_prec_mod.o psb_z_base_prec_mod.o: psb_prec_const_mod.o diff --git a/prec/impl/Makefile b/prec/impl/Makefile index 90b51fbb..07562777 100644 --- a/prec/impl/Makefile +++ b/prec/impl/Makefile @@ -2,6 +2,7 @@ include ../../Make.inc LIBDIR=../../lib INCDIR=../../include +MODDIR=../../modules HERE=.. OBJS=psb_s_prec_type_impl.o psb_d_prec_type_impl.o \ psb_c_prec_type_impl.o psb_z_prec_type_impl.o \ @@ -20,7 +21,7 @@ OBJS=psb_s_prec_type_impl.o psb_d_prec_type_impl.o \ LIBNAME=$(PRECLIBNAME) COBJS= -FINCLUDES=$(FMFLAG).. $(FMFLAG)$(INCDIR) +FINCLUDES=$(FMFLAG).. $(FMFLAG)$(MODDIR) lib: $(OBJS) $(AR) $(HERE)/$(LIBNAME) $(OBJS) diff --git a/test/fileread/Makefile b/test/fileread/Makefile index 7d58adb0..103f7247 100644 --- a/test/fileread/Makefile +++ b/test/fileread/Makefile @@ -1,5 +1,6 @@ INSTALLDIR=../.. INCDIR=$(INSTALLDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas # # Libraries used @@ -8,7 +9,7 @@ LIBDIR=$(INSTALLDIR)/lib/ PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base LDLIBS=$(PSBLDLIBS) -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). SFOBJS=getp.o psb_sf_sample.o DFOBJS=getp.o psb_df_sample.o diff --git a/test/hello/Makefile b/test/hello/Makefile index 81c337bb..1a73ff34 100644 --- a/test/hello/Makefile +++ b/test/hello/Makefile @@ -1,5 +1,6 @@ BASEDIR=../.. INCDIR=$(BASEDIR)/include +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas # # Libraries used @@ -10,7 +11,7 @@ LDLIBS=$(PSBLDLIBS) # Compilers and such # CCOPT= -g -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). EXEDIR=./runs diff --git a/test/kernel/Makefile b/test/kernel/Makefile index a5939661..453bcd26 100644 --- a/test/kernel/Makefile +++ b/test/kernel/Makefile @@ -3,12 +3,13 @@ # INSTALLDIR=../.. INCDIR=$(INSTALLDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas LIBDIR=$(INSTALLDIR)/lib/ PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base LDLIBS=$(PSBLDLIBS) -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). DTOBJS=d_file_spmv.o diff --git a/test/pargen/Makefile b/test/pargen/Makefile index 5ffee40d..fa50692c 100644 --- a/test/pargen/Makefile +++ b/test/pargen/Makefile @@ -1,5 +1,6 @@ INSTALLDIR=../.. INCDIR=$(INSTALLDIR)/include +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas # # Libraries used @@ -10,7 +11,7 @@ LDLIBS=$(PSBLDLIBS) # Compilers and such # CCOPT= -g -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). EXEDIR=./runs diff --git a/test/serial/Makefile b/test/serial/Makefile index cadddf70..4a1fa77d 100644 --- a/test/serial/Makefile +++ b/test/serial/Makefile @@ -3,12 +3,13 @@ # BASEDIR=../.. INCDIR=$(BASEDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas LIBDIR=$(BASEDIR)/lib/ PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base LDLIBS=$(PSBLDLIBS) -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). EXEDIR=./runs diff --git a/test/torture/Makefile b/test/torture/Makefile index bad12722..2b4e7788 100644 --- a/test/torture/Makefile +++ b/test/torture/Makefile @@ -1,11 +1,12 @@ BASEDIR=../.. INCDIR=$(BASEDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas LIBDIR=$(BASEDIR)/lib/ PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base LDLIBS=$(PSBLDLIBS) CCOPT= -g -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). PSBTOBJS=psbtf.o psb_mvsv_tester.o \ psb_s_mvsv_tester.o psb_d_mvsv_tester.o psb_c_mvsv_tester.o \ diff --git a/test/util/Makefile b/test/util/Makefile index 85fcb958..37fb3da6 100644 --- a/test/util/Makefile +++ b/test/util/Makefile @@ -1,5 +1,6 @@ BASEDIR=../.. INCDIR=$(BASEDIR)/include/ +MODDIR=$(INSTALLDIR)/modules/ include $(INCDIR)/Make.inc.psblas # # Libraries used @@ -8,7 +9,7 @@ LIBDIR=$(BASEDIR)/lib/ PSBLAS_LIB= -L$(LIBDIR) -lpsb_util -lpsb_krylov -lpsb_prec -lpsb_base LDLIBS=$(PSBLDLIBS) -FINCLUDES=$(FMFLAG)$(INCDIR) $(FMFLAG). +FINCLUDES=$(FMFLAG)$(MODDIR) $(FMFLAG). ZH2MOBJS=zhb2mm.o DH2MOBJS=dhb2mm.o diff --git a/util/Makefile b/util/Makefile index 5d939109..88b33846 100644 --- a/util/Makefile +++ b/util/Makefile @@ -3,6 +3,7 @@ include ../Make.inc LIBDIR=../lib INCDIR=../include +MODDIR=../modules HERE=. @@ -24,18 +25,18 @@ COBJS=metis_int.o psb_amd_order.o OBJS=$(COBJS) $(MODOBJS) $(IMPLOBJS) LOCAL_MODS=$(MODOBJS:.o=$(.mod)) LIBNAME=$(UTILLIBNAME) -FINCLUDES=$(FMFLAG). $(FMFLAG)$(INCDIR) +FINCLUDES=$(FMFLAG). $(FMFLAG)$(MODDIR) lib: $(HERE)/$(LIBNAME) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) - /bin/cp -p $(CPUPDFLAG) *$(.mod) $(INCDIR) + /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) $(HERE)/$(LIBNAME): $(OBJS) $(AR) $(HERE)/$(LIBNAME) $(OBJS) $(RANLIB) $(HERE)/$(LIBNAME) -$(OBJS): $(INCDIR)/$(BASEMODNAME)$(.mod) +$(OBJS): $(MODDIR)/$(BASEMODNAME)$(.mod) psb_util_mod.o: $(BASEOBJS) psb_metispart_mod.o: metis_int.o psb_mat_dist_mod.o: psb_s_mat_dist_mod.o psb_d_mat_dist_mod.o psb_c_mat_dist_mod.o psb_z_mat_dist_mod.o

    lz84l=JW3|MFMrO{Lrc3Utv7;!f|BFmtZMOaOOR(slm`XMP>k@ zF=Er8HtOflQESc*bUVsjdeU5f0KiqHhD7Znz|h0c@jDGkh^2+QJ=jT8bXqGND_R7E z0W5hUM1zTCb`BDZB2hd~0Hf!v^F@A&c-5*1&nFCV5v2YI{dXESOJVoV= z$XFm0K6`_z`<7AjDt+-tG_bqa@^4WPmgS8%Hms?_^!U$l!_+?8=EKxuy1!U0ghyn% z2L2zYPCf?LL%gRo7As%2hD*h4*M1KKnNpv>1r95)|r0h@l5tm z?|r4tfcOPG^Q&^A8`~C>vBo^^M4ZI4bHcy*5d-Q$TSA#+GV>23K)0qLE>KjX7|Wo|^1=N~7Z#>h_{j<8F1WHDWJVehy9@Q?a| zINo3AZdn*%t#z2?6`4cPYDef>i-Gbj`3&po(nVpMhl}-glwdr$C7Hk&%{DN*VFSvC zq53NGDQ&L(=#X!2BnJmiMS&C-cmQb!1e@l%FZakcI5uu6Q9+aW^!W{~{XYC=4?%b|_%4 z$58OD6eb5HA#w%-MrBW#tXyfg|EsLysd92aDyoUD` zpuzkw>9sUG-C;#MJdNX?@B>{H?=@Pd90ih@bqMF&U-&-cOOKE?kH9eIQi_`KPiXb( z`s^#9sOVBbd3$yK*p5@X#!k{7#-2k`_(LI@KCJ`{+{3E`b~Gl+26~LodRq?tEm!xI z?5$BANs%*-d%BE!yI-d+Bt(2pk~J;JPi9^ z*heD5J@nw)ID_AdF-%EqOQGQ>Hx}x)=LAw$HYSYyiX*}i&T&~eT(o{~l&)`ii~j7~ z&w_dt>KM@P6|Bh{Ec=n@*<0=mr|-nSy+9pK--&ybX3={=#IisIwEyYDzrE6~+I{%A zTHS4L?=IJ!s-xAa)<4NAAn!fT>s2IBrIIRYRnwE<`xw&4RqR^+h~9mTM}(6@W_FM= z+DRC2BM5R91vv^A~LfRjxdT$9);A6EQxKBz=?A+ zofN)B8r{zR$xIPA5(U+gjACwL?+|s>yn?}WbdeQV8pQVB*Fug*BC@oJQryT4c2ta1 z5;`bDSQLOB9>-RS7!`epc&G2)xFnrqK@u$rAdGjJvP~1=Y+f zY8WRT?ntP`^4YAUHce`dj2i)R`~ZmyFN1~jF(uP^w?VA)#X@^zko<5T#n~wenib_D ztb__;0A^wbp^X7nl&{FdvLYYkva7O)hxt;TpxmrPJt+f~jG0o(L?I!CtEx$g@*Hs@ z3fRtZce3LqK}*_1AYsIpD2l7?CswxAba!A|E~ZmvnbG^c%xX+8NgOcHR<2JQ8FE4=eVwCAOH zs7d^@LL$uDS4orVrvtdp?)QhO3d=k!#JEacdadFUEzwJZ7#~g9peA3MAHh!ByV=S#58o+3 z0fvkU3=ta;HYrLHJ2bIg^%ZqSSq6pt%vz=|qn94RAv1wTxezT8wP%Ku>Kd}RFzSWx z>TS2g*UL$SVwVcVArpZ|(dI6potMho>Y=bKDaNiuvQ~;@qY}eGI|ZpkS=whmD$&*v zJS3ArSAg1FTai~+K{i+Ni+VS-NtbIqO-qcHTZ3^%4(o^%(GxR1j2{{y93An+9$ZgS zk*5fPG>l&J(?13_MDi}kxNOoVho#4erotEGdotSoJ+=`-UkJ0CW?28y;TaK*|K}m5 zK9cAhA(E%S^HPPZ?Yj_!^Egf^?69yU-cJu1xQ{J>{2xzMcjflIXB^QIWeb`T`Q_*I zbg)z?w(;L7Eq}Z^^uEu@H*;u@qg4l|YsT1!TN!_v(ct7(3OxTcB!{3G2B*7Q)G~pu zj_F>{Xw{ejqbba>oiy;n8irF3Sz6y4*y9~1gfobpgc)$@oO@ah*G(m4A`K`cS~De; zp2&4tDt!#G{QDI4kWp#^L?kFw+R!NUp%IywxKsx|q)Y*Rq*gB(^+Ya1XuX6;G+MD} zbdph+L=$qDQ3|K3abwZ>#q<{nV>1nviJB55arMZeDim&hoREs;P^pt*rLN?}3M%UI z={fjmhJ#do+?sN;9;1n-%)lW>!_$ddX7aiqe|54Jl_dnfob{??ioG+69E9;^AWP>m zD)!EgAV#}|$J6U=NZPI|EyyJlhw|{HSQ^INNMV0#CwbeA+~`p}bPQKDm|9j9PinA1 zb!f2l9Gl=hgWVn@;bW=yhPsxcMl3=#u}<`&ohmUF3S&ocV`l^VpHh{A3W}{jYnNYn z@C1Ju+f8oQ$Tf(UXYdfaH%jD_DGaht7*wxFr~&b3220oq3dAKM*XNNt-Le19N4>Y- z+Mp8ovvw-*;je{(eeE$Z&m0!ipTSeP&1AxTKaMCvqI?=pmL!-Yw$r3T|eA?EfJ9OUo{M!i119$qc`@lJEgakd3 zgh5bnXGlBRV|GDJQ?jIxid$e@q#Ae86{@)_me`tn@~*-P>;TSoT!QMcR99TPFjAVB zf_k+*c$|@w!T|idT31rLa3{exOq-H6)y3D&yq2r5kof)bGhq)~wI1OQK6_BVEXeho zfilC4G2ho-kFVkOB%c|Ld-^c{5A~;s63g!Hs$Dv>AX8RDKds&(ZPthmM>4oBC0FUlIN2 z>HFzo`P|ib3@O(0BGW5EnJHq+ zr=PW1fwM1&!>Y<=QD$XkzKS<1m6^JF`%xJ@8;eUx88T+WfWs=t*7fv1v``((a6{$b z8Q(BYgG32J9j`5>mq(Cn=*aO4#KoIF?(Jnot2eOo5dH^EMAkv3q=3oPFQv4q)#I#a zFln6LcpO(Qwo@moW4tAmbQbQE){6mBPnX6h*Yp4JXkJX=@a!YxCjZ zpu^5y&I@M&mmzJPU#zjmqm~0&%m6B41{N~~i9~=V+O-3DDNceX7&nE89D_rO#U{dG z6=Jgpw5pk|%FR|30<%Cl$>N>Q(t;T?`WG?ygcx!`2q8O|p+b!%_Piu&2sk4_HHHjn z2pRk#0867oI6j91Q<-WpD=WO-tLe%`@)xB^N=LHG$(_W5rhpga8i~%?>vJQ_GBvq} zR|+4_tZ`2~%gQ~=%a(14@xTrLA^KvAVSrdTh77S7vV@DL#WzL?VTu|&WG@3t=CYP! zAV56V&*aT)JK=g>BlR>H{1CCV{jBqQ8Bk zvE2jTf(JlI--!A$BIhOU^ZNwYC<54|OqirhJl>)+8vLu*62- zNK7D*nN>~B!s~mi6#u zJcyy4YkU%m;Fpi1EPm%2e*z0(;=zaCJGL6hFbxsPSmeT)s5eGZW!WmC7##wJSV|hZ zXp`!U*Aq`P9me7lC0;N=vSNm6$v{~+3_LZ?uqlw^ZKLm&#$v^X&sJ!Eksz(Z8VQ9n z5rJSP4jI9Lh+>z^)Ee$uG-w}(G9qaV7dC+p>4+BA8zrhULDFO@67h9 znSHi?gaKb=$)QHBknq@BjXMe=-u%VAVRF z;tZfZ!cZNv=QiJYFop@*A7u6T?()_x7=kWtv;!lc8%xrPA#W_wN*xymGI4E6nGC@Y zj-hPKz;zI3-WnI#bYW||$gRn=Ux2|+6#@V}e*qfFFjR+X>GmdT`ngS`H$L;+8yWa( z6qkktj9D^9LA2MI0_GF8OiFt?dU^wPbA6qkOjhsX->IK&yKl3<{rPB(v}~z_hV+Je zQy#rd2KOR2;&hBUqB5D;__W5hEP{y&GY#_s{CfQV^{HS~Mi|{>y&2dQ!qSg8-OcXW z`r%^n*%#8xmK&djA}?e3#TYMM87oF@5qJvfAx>;-ozGT5>1(m?E|$hVggfYTmFK&N z#*FULVR$x25^lOUa|(_Xf4l-pzbCH6Mz6t?83D*fZE}KFYE8ZQLq{G9rv#uwbQJsB zDj)*B{Cf3G1I45cx0cX+O*#tb>KFV?ovLzh*v(M4+CLGC#e$jpHx8b-Y6*}#M`mQX zGdeySIw@@}`w41UlxZ^QFG4oxbdq0d=aoAY;E`D)6eg_%0B1uCW&r?JzIe=hTGg{u zL0=Y<>kgkFo5YN;0R{@2t!?VMB~TY1`?H+^b|>tzT=jYZy&h zx)Ub$#DD{XpDTd<68cpP7a@ooyJE^nW9bqSTUpArpFeU279AeB09Pn&o=`e`3;~zmqh_p+Yq72s z+-)xX7$FxaiwiMtwI?&RIz>JjTLfzc2nud6M*QG(ghAN|-!uh~jsqFrGz1#3gk+M~ zCLY~QCd#7@qor(GRDK>H5Fo$a&Mt5NzO5d;{%}_Er~p*~GYO3p9zB<#uCM&>GsW)@ zS0IaSLM5f_&qcKi;7@cEPx-gsDZr-haJ$W+J zZ+ypN-5eEs{VW0fj|8QFamc6Eel0%!&o)FT0?#zkp#_D%r7i)xbWr$aPn472S(6*| z)Ukc)V_|dAgS6zxi~d`d~OVvJLehrQ~+m)yNZZ7%f8}tJRkC@v4&Kvq(NHN z>;LM~NZ4oT@b2jL@A{#0KYOcg!ra8tbif1UYf(d}Hz7V%HW1dL44c=M$UURio(r@+ zy!2?GRGAZQY0*mF$?w|r?ezBc@YiM%sErV0d-;92tD`1mdFin?sCDf1fAw9uXXRz5 z|5R}tYHWb#1=Om4j3OPY#|o5qjW4dg;07Rn?_YmDr>ldcz%sf4yaIYkA4Fp4`93|= z1!0}=l%D8ygdFgqysi;UD zBb@aO{a{|w*V|LvHGVyFjqv8SN81kCfGgL`6kWRT$4bJ)OTF(|S$HyW_F>L3*xv`W zxP2gVC6B#(T1%4Pu`#=o1k9T}1uy#+Df3Bllprqhz9GT|9KX?NAh{yRrey$!Qf{$> z9QQpDqJ32uM>*rM#}$t`r$XzQmx@7%nYhG~mMzzmTtXuhWRSmHET3P3G^eqj);{Ynq>|I5oAR_fnWOY>RfqpzsBzm2v!$ zC)e=?nZ{Pr8htix=s*)AbqryF>jQ^Z$Q07*M}rf;!1;|`0bifMzajyH$7CcE;U=m} zuTh@?5{VCin>>!y$Suoev0OAu#FG+lm2W&CA16f!;h6EQ7%L@l`R_&96c|&>F0{>I z;_SW}D+EOab(jfo?4*+uuBrdLw-f8Vgpo77ww`PomiNt*Q`*+^DSs2P=H5Gbbo~gu-F>(*-=9Kfn>E3kP`aRx&ggkCnGr^-uG%;)qS;4Eq8TNV>FMV1$Zs9~y!!ZjhsOLF9^ zBr3PM5QPJ3x1B-2a#;w$|D+agr-2Pe5JbaVfqFMH&nRXJ>+QK7>t9yj0+hvId63zBr4xHR5FD#b)P)@fIK^Ox`mh5E-U^vHdsP#3_5HdD7k~&0T|NG;}5Z> zRksIi5h&auaQHcps9PX0&j1p>Q59T@t^i@r8bxtYHijyf9TXIkI$hl{UH17h$<$2b z#~k78-AAkv1TEzkPquLe>b#FA4>D@rccA6Gi!_vFb8d3a6}@#~F$UK(8_omEul$fe z|0UArCBgvO+MRGYw!KlFgZ;Vu3BM{(i`t!g2+KA*HU}P0owjKT2X2UVJWww-R<7!3 zs>DlEe<=yGuR**OG210pplzR5tM01 z{$$V=r#S>G8zU|MtIQeI@aOgkdm+N|Qm zSOilF11Tgxz&PFRdHc%gso8H3j~!V))lfqgeU4g5nLED>IvpiE)g=lWpU8_RY_W%V zlhXHnvhY38^!M-8yx{L%jb>;4nE$Z8Fw<(T9H-a%0E8A7MEy^H)xrMMDI39;!>%y4jBF=s8(sU zP9BE_GN*SSMZ7QcTQsQpNPJIVUf1p+Q6p?JH#@1q=kxlkmUv3iA3viMM?hKlq|;e$`hu zE1SIw*5Q^VQzXfLyw8sBx->tQkyqVgnPiYu(%Ni|_NdMU+e5ox^{jos!7--Ll{MpyFQ5}e-dIO(LAmR=XU>!Bi< zqYDJA2%-y6QmISgG^!P!uzeAttI+tMrbaQqE_PouJY}L>ue2MJgnz@peWOG9{U_G^ z0cYBT|3mHk9oC|Bx}QCRitT^2GY_ z^P;SEJ2|p($|O=9BU#HFJX39C!TbHggJfw=-}4n=*9Q~4Jui}Y3M5fykX>N5AUd~# zB?*51Y8W3N^$Ij4Xxev^-^dfJx)~a4h>2dCX{{@X@j;b zsMkl#DF4Ra-b#D?+#ranR47MfLM5;x*sg7MXLSWBy*8b%&H?TQeRSUdob%dExn#j# z)RrXt6-G=;JZfr9*!#fE#4j}6WU(i@qDn|jov4aN&DkI`vD>FBB!A+#ZevhAN6Th| zW5sMcP<7P;=!e}pjm_QBo8pW?oge$;&3m3DDfdXLu%Yzn>CV#G^TteQaV>LE3N|o9 zKLxMPw8~J(7@=|Otd8F8ou0Z&OiqrZ^eNpviTz6%<}{V!6I^B zUmX8zlV`?M#f9dbmXw76`oC(v{z;XR95W(4U}7mUB!G$#B{1Nb6-1IG)X~jL*3Qz}imied zU7{$vM^*5s?FCvEO62vw#WGaP&TgMkm=>BTrXxmWbd6YXCCIMo0F^+)$Y=rqBjBcI13NN2cHVw!kV>_;y^^KG_2;4&NraS)Rs^EXo6p5dJsi_`+G2HHWx5GFbH zDP{#syyxri6OsrhLpf+(?DHu&Jl=mKxORWA`3ddcwtQod9y=1F7yG0ny8*?uf4qvMNhfuhW?6Xn$$lWY9n-js zVp>j)$;8uhp1DNQzF;4^E2Gdy71akCr51y7Axt)gG)=-E$-*OgF?N27IC8Fl@kuY9 z_j=L4KiW%alj$JvhOb>}cbn-x*)>baF2C$26*(ke2A3J;(5+p;8o$f24Ms9CBw;3A z39|wHGIVq+>VFXDiP6!J|7Xc1(o-n9BWAi3vUaA%7W9Ouw}c`(W(~qm9>w&KoTW+1 zZA(g<3i1LSCznH8?*=j}fA>`i`;%Qog0mpSTd!`3rt*`AEQ#P z%XK$^2JJxZlR*ZtFUvl7#FQe#omRa}QbEFQtcQXMNrv($Lw1@v0Y%F0H|qW`%F&}avw$IYUaUT9H-H#R5eE;8j4H9LgS$&0-$%1& zwA1o%gQ$ugJ`P@GTSiQ;G>i?y8emPgW$|)jR;UGu-GkLcXTQ0>>73CPI+E)?CO)E0 za!6x8nOm1LkuH<%I;--LD#n8n)zgi_tQnP2Er#&(mR67Kn`;m0eXg3qxlLgQC}5SO zE`GQzFTi61Yg`;+Luy4eUFBVBlM(Yj0bOxeB(9(iw zpo3Ibaf%mgn5XTVQAbDESQdL2ouO&yD`SDxY;-`9-@w`~xmug-XK|;~Na!Y+EH;;H zj5L?nW2n8Z1nR3cc0>;y(nP0TZ+X#Yh_mHs`mmV8Eb@d|&%VZSYx+g#XlN4iMxO{@5p#eij4~~vbr<~(D$~PeVF-oB90HuxO3FmDXsxT!d zQB6YOR!zDY2Q_s`5=?#do0T?*;&Ns}(>AWf4r{eQLqVoet~oRsdKb-wO8+x%m*BwtJN8X|H78McE6Lz;|^f=CP9Dw0As z-^47_c}n4u(oqz=nVa}dh0Pgj64`Vk&M~bJCP2V8Ndi@-b}?1=D^0P9V<j*J1KF`8{xkYbAv+o~C7;b)z2H4()<{)L9+adA z^@~D`uxv8x*N{8wI?MfX{>GE{s%6HBjiT^m*Yee5`vP+e4p))rHj6N+5$iS&NolK_ z*jf-%Fe$UqgY1-qGef8olT?YoU4~+5HQzr8@E&o1V3=9z(NauXvY}y@c}$Ir?`C90 zPt-QqB_tLh^p4`mqqW}-*u8-5z{~K9{V^s^AiPE>sj-I$z`?BtiAEK z+O!b8T%ep`70tmYTdJ4M2q_USQ_-$3MGClKtzaEiGmmJdN3q@wG0$~NqxWN2=EW8E z;UHW0|5Jt!$)^_pUSEy8vKet_PvW&A^IXu{mM0ai8QXHe8I+v0D~!(n=Fv^prhcOM zMTt^x6H3a?SSLICsGN^p?Px-9B_&*t7%cRd1XvBQm*FUDWUnOks~TI7jO8j|Xhf7E z*K%3RN6u zXZ_m6@=QH$^_u}VlQ+nYYc#__=7@#LW=MN^FvNW68+&oVzh{pfsltg;cSo*xFjRc$ z8-Go+w1nGQg3`ARdnXXl#3{~aTZ*><3v6LH=>M`6*uEZ5T9>!MzcR6o30}eiFKy)O z9K%t?If`N%L$!{fT*6W;X|!nLu*zjpl04c~GwrpGeJ*qV>rf@yr&Boamzdv8E(r?X zv3N^DF{#bBC=B1i)4;21(l~CNFE%H5>+ra3)QmUXh|d(c+LfZ>Qp;M>6r;prl#caU ztM83N-Z8wfC2p(%FV>hFhf(T3m^QYhi>TG7M$XFY%eUHT3S#Fsc71%QZkJ(8ejXmn|l%R~reqLDald+@K-bavJM;4NnNIOl40z3YOK_(^Jg~3 z+DwSmrGd!BM)=rBcq;56tAkYt9AgPALh|q~7fxRtWsZ%u(e6>dmLCZcDU~ z7&*FSC~;^zYw<+A^bvQxMoga;lMxjFipy#@VbMi=Ca}{Y<%$c6n%fG&IP!zB6igK; zd@4+9fy;sw@y84;<@Jq2{ppQAb*bvh_Df(RHeC?a7g;9k`rprB3iyC@|B+D>U2rAT zW!0G2r-8Ap%Ja>>Of?{TQ+YAZGU~PQXT!%O;WGB*E3p-j`5Z4@&QXz$FI!ga&GN2q zwYonUVy06W!PoCi&2?oHc~L|S4(RJ;Zs z;JmZDi?(peq*5Iduf|B$W9d&yrC23Wl>kwd8af zCyET?tXfbF{Gf~?tvr*s-4t53C1Ct?4{sC4;3HD5X3t0w6^(~dhh<*>q;RBxwMMRJ zDL1Svy-X56c(SgC#$-`{C_CoclC<9-DJ6q1se5S(Fs<#v;If15%of@1{a{K2qTL{i0-X{LwW?ihYWz>iuVsCy5q!z`CQu>k91&6%Ze(c`z$6pw_PeYvBACW8o zWsbr5*+P3QR+~gRof6PcES`i1P=})nXVL<@p<4@YE!}EZLU3ps(3Oh0X}y$)wP7Sj z{p^bJM{a9|+SU%ewu5eaymIRy71-(5+cntj&+%VLqehlT7}L_y2g9dJnHbnA$ENdb zv#HQPtuRWI9J@4$Nej!tO<~UEq(t_S@2XsN_9F_kV%{0PeArzuE8ko1CJs0pZlX-9 z{hI-9!YnnK^}vrTLvz6O@!|IC`QvIiL8jrClYk2?$Gs7NsAx0>5kSYnaUen1ZZhFH zXNvpV;I=-$kI&c0>!=D>2Ckzq+mwl}tI z+cq|~ZQFX{oV@RM&R2EaRns&5W4dZ)>YnbNtL;7(tz1UJSr3=@k1$DXY1QtUMj4Ea zBZN|C#HEk4_8&Lca95J0esGql%(vJ~L|O2&jZ?&O9Pj=LVu{<{&F%>NG5oe%%RwL#gnQ0;E^?B>cXhyk_LBPjrG&A^~G(#*s41BGK`69PEVkku#Ja-VcWs){VJXs6%Z3j zLX2A;hL(&C5QBO2A1H1si=9~2J0`Z|*nP!})!20`>9U%&rykYdTn|Jl5W zqyht?DTE5Z-8@rcGYsHH{Fo?M`;E3Z#;q0=O?$SgNxDi{6B|vNK_e=Ow;)VfN$%i7 znSoX-^;8W;imsi{GTJ{Jfe|bGR7I84XIh)}*XR-jkBq9|Z|IU5qDOsBxTq~}q+l1u zR=~39b__j%o=eSUMyDHZP@Ph{JH;TDNhH%KMr8)4j7QKI+wXr;_8{=oa?FJ5IJ}tH zFL=ziTyR3JSV5PJP-})r4Hv}1V}?D2!icE@X?mdq^#6<37=%J2d>Vg-ax+BklZSy` z?W-&entz7XV4;^*2n+c5Z?PYDkhw_p*NiT+`8z|znrQjgMKJ}>l%bm z9kJX|94@Cr_E>i3jN6OEZ#Q6vikv@PKQa=FTUdH0iewTPzBxWJywoEUb)MLW!9iWUU$W2Icin)5Tqsr*jbYvVFHO<~u#e$o9k}zK zzlk%XM3=BJZkc~hX#pp2U|O6a9QY->Tt70F!zmK2GZY3l7_4r2T)|CB67T+1d%Q!m zLY^??Y;py%RM;Gmp_v5>U1l5U<6VvJ{SB^A8A}Fjz zuiBMZl#H`GxC2)DDP!#H9`^PRxK^092e7yKvH2n=A{(7Oc(=CvUW;X?x?)TIHSZviH2#z)umK6RYp}EkT`~ozW4k=X%Ni4E8)%7GS;Yi5d zDr2zJ{wgCLZiw+fM2Ii~#LXEXk0#c5#6i~qp`%}Rj9<|!hNV%YfrLpWI7vzv8duwL zQv}^%bzGgt5Y_9OZEBl)nxJ{0U*80S;7xx}5P2W~WdWS+uUza+HC{khlEV>H*6#u& z0h+7PY*xBMw}_f;&BoeF+VxPWv$8^Lh>_#4`7{p5o=e1VHyw7K7?IRsTvV_5wGTzQK)tS~f9*9OWPa8$A{93=)GoR#-4S7;I)D)?aw^nX(xkGe^7xscyhzl=Fj?~K}` z-bv7DOfD6~>|&65*8;k)QENL|1T?#<2jGTm=2g~}r4Z5o&3X)q}7yR@7pBGtQU+>=X?TJ^P$Jbn-%XbHKG`xe6!R%qo-5yM88vB| zwlB;|v9&Z!SKB!*`{92|(-}=t zdtK1BcVoegG@+Zo3YRQdiFYRC=5XK~-9Jz%kPdHOO8ZI&DS}Fw;N*?5a)udsqLcd< zK2`*P)u%ikpMk5y^;n-3tHjA0h%YUtzu%b%(!X=NTdiU?fAaHhUTNNH%;@F7?%;Ji zt!sVo_Kwoi?lLq^q!j7KT=AvJgQd3AE>`TwBWK^k4F>teeLhX^8 ze%3qFMa(I`*S-aSe&CA3%t#C;AQ^eCAJ}47r)&foUAt+b0}#8jo!U|oPrr9ipHJ|y z0_1O&arM5aT+yprUo&{7;gx;vC>(}z!MH7{km*gLVX1kQ1mYBybr2AGvJ#+9;DaAR zKu85Tc^2nzKP>Oz3C7z?*LH=&%y z9xOf^e0T+fdgjoc>%BW<+9%^3A^O&@uSPmp`aB!ETjjm-pdI;ody9y!69UZ5K%z4Z zIDSFaR68*Q9^|(?LwB=nZh<+tp@Ln=w-VxV+=6w*^jdT`F+?m3_1rgX@%Br}064di zLf(q%4bMp3IDYl=e%`gMdv`ys^x6fj@F9`&WXhjot?~9s<@VAv?|ffpiE&j2R(Eav z^Y^wfj#_EEZISBvLS?^UEFq-ME9pb*)$YBledA>@!KLOcVKmtTyw`37N*7kLR7`Ba zI@ljQkAaWW+2Jey+Uzo&+ExNYVj-5H+WH1|a>hBT2d`T5jC^Gr3uc^0*aGK1(uTB> zyNwWit=|+n_U6;wo3j@b{v@odUz&ZsK?%Cca+TI?pCR})^?3cJcI|+Q=Z*-Q`-`4a z9}QG~ATf&*4RjW>4=EM1_Vr6fdS1(eZv7LT89IrqdR(>8Jk$hKH1vi7H9DvXarGGW zQnGbRfpRZgGb~JGl9I9MtDnEe(a!~gc$x$a*U5lChSpIgDn}Xe>5sh(?0FhS(tc&o zuS%0&g7i;7u;)M+N!&Db>!0CMy5M2e&Lep8Sj?`gW0E8;qdasdeAO z@j%PC*pE7OraDSyQ@R9{a2;cKG;e*+IBcA1KT!pO?xz`kqJvS2n zSueG*3NPzS%f~wF?>_m8i~+5P^tme~oGtIo%`b>76~U4BxZI*^@VHrs`ysdgIzqnw zFIKypZc#c<^a(#6QU8>c-QL7I|6p2{L^S%ADUw0b_C1xXH8A;4D;LdF+2Lm;@-V)h zSAcf-F)Z3=Ch{-m_GFMe$pVa6dNI3D>Rj8>4y@unqchFiW?QoWZ6=t>n8jxs(E+ep zeS(F|#m6~r@rVFh3QCv)dy7SuW(DPHW;2_=rjIuQ<^5B-qe|-GPJZGkZ|}28e!14= zG=phLK+$sQ(oB>r8xu$XZ+jN& z9WXE?RM9)}e%FH1Du|u<10^D_%C(p=e-*Ep3wn8Rgi(JL(B6OG%WS-?kj#%(n}V5m z?q-bu&9D)&%L)HWbyCD}|I1_{Q+`OHpcJ;HX%>qBTWLeudp?!4Cq6|(j3uM9B zWgDrCd?siZ9vV~i`Tf5S$A7OFJU2J3ys9W0*>z+syqic8Ep;32rhsAnDA(-gl6R!p zu@2#cf(#bCH>UR?eg{A)+N$H4Ti&#_*!)AyVthsy%ns>_GDCzk4#hnrXS0Fq_3|&E zfS%5r*ZGR%3v=hXl^2JaIKQQ8eGlDK8;!kge&~x;^YTTTD+@(?OYgF!^JT>U`iX(t zYtq;88ymN_F?;rM`Ze?Wj(y$-S6g5P{!p}%eL<9%*alIHmAwwire z#;|{W`LB(9te+3EHQ%th#<|=MsTS++lv}|%VV8PaET!+<_$@E{EvpSTAASFI_xF2& zV(Q2JjCd~By9Jt!?Lfjsa2|zFtHNPfCoFp3PE^Y=KlCZKv3k`xf45qTHYZzYY)z<3umyk<4E{exdQ=Lie& zH00241Xz^qAmLO11N^CPIUg;w%!@(T$zn=tSnK6V#9sXj98ptqqE-BNo-k8gb*-E5 z{yQ;KckGYB)pqpwQLUtA^kx``X_2xPZaaEtEDK%^#iSDDt?YK-vCZ5%ziP}YQ*;&X z!stFz^ewPe0=3&-^|o%0Hm}$Vy4@2N+OGbES}d>zY1h(&!#$ks(=P^Wwe_^b0Cd0J zq9z2!i&6}@4a(cWuM*wn+Gx%hb2|{K5LgcRy+cdG7j(f{m1Y7-C&9Lo2F)|*;&b}# zkZV^us@g!?JZ`4z)mC(5FzMn$lk)RFrUg3GV)cb0RKJl6$=KXcY_<*Oj<;Cneu>tI zM3X4{>`kAeb)%Z1^`g=ZosSit)*@b9UC5e0Z&7R?&&_06IJeB4p6Zr8DJE*+cfrL4F)Y8m+nPwo$wky720{}g4o8M8dzefULNx(v99kQs~Khkg*Jf)JsBN1^iV5FTZ zC~;x!6l4Pjy`l5RRx0wq5SM}5`oM%tcQJC|ovIKI;zVLl3_hJz?!e&cv#@3QeklBM>Wnzqnxcwp$)>(L^ z4{vjp|CzXI6YZ>4wJ;rV@(ivaKdbT&3}qZ!OrnLMyFIZJ+Z!GXWet1OH02#5?9leK zb?Lcv6xf;2y_N7w#Q1}HL{gUsAoM(2@@wl1+?PqkRgiQ+7r-VK(5?i^f=UM+(!OkZ z9J2Z2_w4@EShk3va@2N{aQEbpbf=D=Lvco$$Ub_Zs-Hu7Hts@bi#jO1C`7p2lBR!h zl(w*>N=$X!TKe1-kvT8c`ORu{SAIR)7*wiMx+jT}{+Q~{PdU~wh`h<9m7ii0OoQe+ z3DFrXt+5wTavT$rd+~DGo>QbHm`@x=aGE>Q)P_zFP?jK!RFbfs^mKepcYm@4nLQMk z%ejzy!^WkQXH@dufE!8rL=^%bRZ2ayJ7(yVsRv_QFa576fPA4iZy2Xk=U^sCZRMrf zpFVxNk5&5M@$la7aGyU^ePuLTP&uBpxcN>RRQIviUydGL?>d)|q;}h9myX~|WSCOd zm~=FZpbKNt*zsf8py8jQri|^V#OiV<+i9pRSAcWiCJqt^YdSQY?X4B4@?*3A89aFe zZBKM{^j|IJHs?THWX_ncq~+los9#=TJj>TZHsQ@)7oB!@a2J^??xXA$u4yagqwGNd znt}bUYgJFO__yB}<-PJKj;F&`$y&U`RZopJH_9d(?$JTE zUD)`1*+X-q(ei3+8AJPI;hRErK^$H%nWxv^iGH+}>jMAoH%YcY{&$42PW zLokQ2i548+lQ9E2cF&(Hef_))dk&Eh*j7x~^DpQ6q}^KrSWM}52MV1s`hs&kmvL`F zQjGiU>0gKFdd}LH=HCq1&`fa5(bokG5j2wqjzoA@Qf$+s7Z* zGwD`iQrL&~kc@%NDW8^e+sTPB77_P5t&nip_7jt=#d?@~zx! z8lvWR)K?hFD@mI&QDx1Syfobx;KcyWDX{bwNy(dZ+`kK1JF0>~n8z~WXjlvIWf))< z(gh6+_r6~5%udNo@J(Rk*R}L{wMM2L6#uUATGInxw--odjRTm!A2&aj=-AFLMVV^L zJ!dv&8%yq}Lg^?gx__MzVKGBwKXvyukB-%@lhgID7v>u*elBr=A6E^;Ih-yUNG&%i zkaVM*G^K05POb%!vLh?)213=Tq|ohGXbZ}>hZZJ|%M$^*WJp2>SN94cNLKrea6$Wl zX0|t<0U~YHz)AZ!c;Qi85F~FIL0?W~^7eFbDqHyAyWl;pECJAygg8#H)psfvCe9uz z+MppzK_{LxL%F^c-k1ZtqXvgHOvOVTO;f{|p9vWbw1rp;E(uNz!M#Y27# zhyJ2JAlDg|#ySy&-xqBrs!v&xR?u}0MO^K?o;K71P;JFQteJFr+GQ^C8hd-TWj1oe z^KFppwn%qar#i3EpEc;tn|2mWxJss8C4g~p{(B#*13Z{;IQ|1DC%F1c3T^3UtMqT> zj(T7WhMm?I0@<*WdnZWLN;d;%ka4RDF*R118DjL7m1(Qcdytp2AP@QEp>>ZSkbFV6 zR0QI66m7yf!G@Dy&J%?^55#J|!{{?nmp?!({;f5bcCA@f>Tr&CJ|j7s7fonq_-m;D z_p>cD`Q}9HI>eDqSbr|qi4G+&S?eGiZVMK&Ses0aJ~>B6ORoc*peGXY4LY*39iNmO z;PuPRj@!+vWMW(*H93CsDjn~)z8kz>?(NW`?t^EcX_@Hc{~cT|6zCH!X?FT#0kGcYYEdr~MgRcnM1z zV|Ro9ZkeAm(?3=-{hlQIB zsma};DUjUL#P7yn&k`_|jK!g^ADFc-v0T*rrP-w|{QB*wu*!)WDRp7QI?$q=e}pZi z#pxMyv`8vh{P$^WJ48M^V%=?_j(N;8Dg7d8Fo{&CI593=_jv4^_gtb^)|KG11>o^w zP_zt$U8QFcFz8I3V6D(g`0?Dgh+bE#Xe?dhDi)_iu7LjP+-{+oQdu07@|q<3qH_;KG4@1)s%1K5)0obf2wy{ zji^^5%F7mRrdP(7A}G%vI}6JlRWZl$Wzh%p1KK*+q;4lm8dRAWGF}}Oh7ueV)(~w1 znl@C`f1!SzW&7(uhd7dBMHprh0u-HZ7X@4R-n~3#Yf9a{D3!9>dX3!7pN%nWHtx{( zT;#yU)sZOO)KsslDj=w#Iudd?VYptEc(u_AykGx19)XTO;ZnI7s9yI~Z2GIV`;wB! zIWv%UCYAzQC1UG@bof z(d6`AKqQU3e)oSmhmYOFvQGCbxP(Av9DjvLDgo4f-o5i7%x-p< z;_Z+bnF}%a^U8l8L_#-BOqmP*OQPo})MfH_rNz3+_|+usX`cExt1%x4yW|6HF@NwW zC5d>INU%=M%bN1ItI)H>XUfmB^M1GjHPbBrUtRjMeBF8B&Z1CPNklpa)O3yWR44eP znOskmaJ6aY|39i0#(yLwh|0UVw}VM<=Wc%7lC(QE{E(LmA7OWrAfuC%C%9?4VG5}z z=_D+5KO>#b@PDh+&&FE0K<+F7`SH#^}y#(C}hOSbD)d%Sva z9d9u0&TyS?;4%eEKHQHb@py#sy8I7)+7WWb7GLTEdoO;!=+T*AK+YgR%7;LhU-q1_ zy7Rqc#zbHB;B0m`5(9kqLSL+0LfQ)zYSz;;50)_V-F6T>0TXKak6pjzByiJub4I!g zHCX32pV2OMxPIsF|B9UomACh9h{(KS!PD1jhBr?*m5!4k!d^XO_(FlRy~lfc!`25K zd@I|as1oxL!0zPXFpuDJe!mH{{cfN-&e_0Rl`!0el>528vMaP1f?!-cfy-ig z@2tra>CF>)_9T|rA+NJcPkMDeIr310=$*Bh19YI2J9ixw1~aljV$4k8Egg< z9VF_(`rA>?*3*n1}SZ0QT76g)VPm^of@63P_MX(` zHa)Gv_-i7oJUctz*Di<1G49-_XK20Fr(@ghSC_#^mBPxAj+oxh+XXj{9c~K8gOvH5 z@4b~qCk6vNKo|~2-}&|Rk+0QGjO}%u>u+nFXy@%>;RZSvzcU?7mv6Gy+ne6+TU|fs z&hK1bAig1e8VLOzsvX_Oq@}Z+?DumSm!C>uRf3^C9oGUI-cCzjb}=3IGl+zl_vsr~ zjk;`C%${$L-`_3ko4lKZb>a9AZ^Sz|DoC~ZH-!9Za|g!AcZTnfe}=x)3+)sj$RAg}nwhinYg!b; zzcnmp#K@Zs22Xp{{`Q&6m_{EY-l;RDe#EwiOo1O5vl_>lJuI*5O@LN>V_B{$tY=74 zgQOH>7uOtvJo(8qo5^AigCDV1{MAu1t^iokQ9lq$Uuml7SPi9-cDtr@OcxlreCDbQ z5hx>*SZXRWs%BQU!PdIYjbE|QHg{s*Edw+9{~r7t+Di1cUkJ!pKR}$KDAf&7@v27k z_1}9S1|Z(4uIux);J5f$e4qGz0|4J2Cx|=k!v}tS2Vc22ehvE5t%SaB?^FC=cXZx{ z&wg6(UL^><6VoduLBa)eTK9O_gfUYohTUnht^8APFWg~jRg z`IeNCTYTj-OyBn%Z_dKKpP9$|ox(MjU!PO_e)c=hz;bz=)<4zuo~C+x-D2+_IKDsl zcfLRNcKH1sT94N{GhwO1{J!jsPx<|>a&z5gX1*?Zd){+iPW*buAFLvtqOLu>=Xm+d zgzO)-MqapW_iJ;JtHl4zJWO1_icWp~>3Nvx?HPZ7jlc-F_V8`?`nu^^*xKmro<10m zSuZ5ecZ=P*10r0`99eQww?p6FZk!B$g>^!{zVJj4)z-fXC-i0pgJ3#( zH9|}sq-4s7s>6mq^%;whYOhTSE;>bm&K2Zv(dz(PfaW3Pv$$faD;mnN0O1j(42ca? zQUjzy)|?V&vWW(QtZ>xTg0y+jPtU zq4@)T;%wefZpUs2*^1-I7qus&vUmMx>r;~gZ)bS}H^=|H1UK|!!RtD@tiUcA6lkP_o zV#Uj?BE_l#N>JNa+Qd<*fYnZ4BrgsJBkByi-(gc68c zjhG(W>SBwDMH-yviJooOiPQ*M!RyJ)+jb!0kv_;(=D$WHo$C&s@i4@pdbj`A@9T?d z%QIJ6t$gu$2o{fjAaU=Ks~>p~q))iKv7(XoUDT}dh?;m=I(E3*>1x*|k0V~v%Y3Y;`Cb`}0?4>K;*jv+$?eb3>s4_K72ZvwkMtaX)SE=S9_$xBUWgg=tS+vv3$e+dr59i;aoP zsAgG=-*7<80E@!#7FN>sA(n&<3zh`@jB5cx5)JufX?cu<_)WQt_{9LiR7qr>_+%5Z z*3YOz*ZnB6l=Jmc39<+h(kJGG4QQ5xq+3#b?sUtuY^IhMY~$Zg*uv$cTR~Dq@QO0O zf6HdZ^W5jr%p;LSWz=A>(;98F)1%kly*OnmfeA`LE)O zQ8Xoy-nS8rc1q!mxLgG`OC>1&V^+W_fGSX9IA+mEiLRUI8UIItq86U_{!Mb}XKB(p znUz`uY9#r0iOb;_h}7?RVF9}3aRK!QB;?7%sNr#BVc8mRT=XRB7EtlD*+0|BWe?*m zAzgT~<7TQ8i8-aT@dL~~w0?a)d;<^#ii8L|3(xz5&qfTe>JVWO{z&Z0{d(a5wKmDc z{rla-7RA3=2Tq`QUuyS@$Jxm7f7ZUHwGd z<7d@m|6T*nA@8&E`#u1C+kA7}st7F0j*(YGU5=G`4#xdr~j>6^0bG^^sX>8&C#H?h$~ z-CPa4JUF%Dg!0||tjK3DLR;Bg?DDA!Yo&g$l&BEHEF12)UV2t8D6%PG5Q2V?0;2@3 zde;AX?fx9$JT;g5eSISb=3sl>dwJvRTl323o>u70l{3M?-x>3G<69SVr0)uRz4%7{ z3ap(F_Iz%BMOe0CE1z3AvV_a|obB!y_CkEM^lzR2axSK$Q2A01-m3NY#`zwxPoUK! zJm1oyo(8)0uhhi(?*3=%4o|PI$EQEZ<9lIQmb2~@Wn6O#OQX`30JpuRwT1Jo&(x=@ z&nZG0%pm6(m9dN%&KbqvrLYMu$vJsH!tM1cG9rIJ&$dnv>8avP#-N3vpyLWgCh^Ql z?$z>_YT(^9H~HFYT`=>d*q!eiNQ4wicAM|H09{z5@_${Ki(L&wC-dnG!*q0a)QkNR z;acv6LpekQD{kc^Dby8m`rgXWDAjrLxqh!lU*xKbup=-ECc+8&KQ##18RY$}3m;;u zHdxKODyR#= zSp?hH#x$KP+1O%MLeOzs{H#sDFo1&hgW7MrH?*PPc z5Hyinwba`mwSX=m##%7&TtkkHaAC4a)W}WqW;w_a{Z$Hb>Q6n)npJD1|IQKs8gAR( zULC0Zgz^1&|9;)uUkX0tL|#qcMGVamuueAF`N}o3NALSW$_jl!Ikl z;n;BAxWIRz_jR9WEq#v$p{FM#)U#9LIC}zGgiA^n^FTa|SKEe_b#-AvvCZkNG#lsf z+iK@CU=8RHxA##s=kce&Ku}W0N0HH=)X2wM9({FOV8Q5FJhrR4RXyC+aBZw9DE=j8 z>m9R^5nH#+b(3>T6IsMS$WLm(cX@={w2XYR$a_ycYc>#Zbw%C1js&jD;#$&RICOjz zACl@s=j(Kq>I4QAlljiSu4CG8c`I}Ok)m5R!s@xMVoD;BL;=+oy|J+(pGO%_8oNAweFdku(-Eef z9~ac)gWuqXpxr_C=Mx>UQK6IF=R@eAP*VH5VpWfCM{oEA@%}-#Q1UcmD;hOwPsfdPf_A|Oe#UX4wq<|kSJ1yx4<(CR zfF305W1aboWhh1pX-I@_UT`qyuOl99jUo~k*{0Xi9a1(QSXe_G8^eDiHAklg#4$Tz zE_LQ;C7wCiVz?S%2MjInwEr#;zQOs!bMAt5Dg%Q#b%>Y$39V5=~Bh2Vmv}Xxu~?YQS{YZIUa1hia+A;W}iVh~Jb# z;Yg}NMYzc<|kN&g*Umqm3VXx*8>(hHMPK6gV`Ff=h;+hT0&CEgt2m*?xV!a&tLJBh?27-=p;Ld|q{})1&aFy~t1;+DLQ~)|SAuRf zjUA9z}; zVALO#5tJ#C*~~NoH4e8ws0b|lhpY-I7T8{KwiAFrN~ChFrEDaP5d`#@vPgC=6aHj! zgE*QO3K30JpK+O<3tRsBR)4<*pW)&|m7j2lj`sS-{?P)CBwIu^H2Tqs_KN3Y#_rEv zjHO9CLfVuyn4x5yXNcx%!@EG6!jEFbHk)X4xmFx?OQljcmx5O4o-vloWfuwbigG2v zMD6wD@fBh7*WejPDT?~Y8l9Rr@RL$Z^d&K}86o>=nQcWZa4GX|t%weA&)yGHGv02p z`R@ot4IPe$FZh8wTeO86G-`n;fegh-fdgmYe0fUQnCF5tr#2#WD^cJq^5qC42=hA3 zD9?yfk@%=IT^g95%h!Rn;C{}L z5U_B#ys{x!W@(Z~#!qTDpKS1Qn;Z9mX3f&iSbNy>k2d7)C*y`5n)_;_ry^w^#GM7T z3zcO479D+c{29E^**y-YdH02p`NF7BGd`R2&2F9m#bz^_YCP4$+Q+_!m5?3FpZ0+()+=Zb|^!CcGi>5|?@jy~?$wCoyIu*xF z1P@gcJplDZ4GqQm)f9HO{mRCb?0l-S=Qx|utU3)$sDd4O>0 ztWB|Dh7YG3TlCS{jE1xT?;6|rprwe1rN(Nxa&R>_dx))GPo4V7?k4Jdh0{L1k{B3P zF`gA!owhDRy_Uq-N=^J;nI z!L3Q=^+}!Imy=l>f*SmXWejIQrHMspd>M@4?2hYFNRANk^P>ujPm(F$LRNB1)B8eW zR@ED^7)>a}_fd_4#P*7cv899IY2usDFWo@XEl+pcL_EhI1!f``Jr8ZNrr4HObPHnA z^HYFuwUbs*1^gGV+}y%is=Z!4#N{9;T%e4l(qB+v3RcZwnbtR%w8c@PTJo~;b;0^u zOHat|cx2X!{B&Fq7yev$;tLtEP;T2aoJYLq9EghB%9juUE&{_&zo zq-Ye1r(qs~hd3gbuN^?ZY}sj1nQ^^t;O}ae9J=MpJl7mfXoefY)9hhp+KSwM<$qH5 zb7Ah(l2|@-JY?UfYnolF=l30FS@cF62Q8_*%~7FoW+VbCB_f_HIWyV5ou7TtcNGdg zsRLSS4AykoY}0?TrEX@XhQ z0dtob9PnFWKJ}@GR_Q{2Xx-tUehPSV%u>F;G?k8H#o(?8=*2E9iLDDnvM?%8*q_zW zMjBjm{>Wqyf23Ss13(plnAw*jtKMHJu}ZDu$C_7d(p?0S;{Ko*R=i2BwA&+9AdE{2 zf>VV^N9>_gU-@OS3Ooc%beo2exdQHdZ}(>&hZ_dAq4Cf$q})2j--rNpHIZ0gW^r^q z!%IwXB||L~*(iFC^HjIeJ}Qy%FdD5!>K0-eUc2%I8bZj(aYN_xBw_e8mSBD1eVuY(J6sk zV29BmW}3S|iB-m`#k_!GHlXY_N3iHZ_G&GcdIPO=#x6xsJT@d-Q#` z64;Bk0xbh(M!AQQVQWa1Tz5pf9HbZ^)Aj=*^gDzQtvZORV5O-$u1z^(IjUw191@=g6_}f zt&zD@8dH!kM%AFBa$G+zgc`Jn257<1*CJo<#RR?14gPWtP`IJ{#%Ac zK1mbL#G9&(-{b+EvRwi@dJF7He<92R%Si)_$5?a{K$rZ*GV8Rp3KW%NMW@Nfi-|!d zHshjO6V{@+V$1Xw3Sr(!(+_0=FGlD6tUXF8DQDu%G~j3p708#n|c;aKkP+Y4}<_Sfdcnzric~Y3uBQxO!DQ&pM@3BSFF8M{)AHor-7-@+!1O zW(s=JE035q*3M)GLwSVdOu&VRq_yHO%gh|v$TaA9(p#kmT1e7TtVJp`phE5e{atYK z$j;_;Z_k9e5y84ya55Zg9&O}@c}znpV=1p=x0?*Uu!V{vP( zi{?>s)Y(td&Pn`ek(l|9y=RTNm+E-_39}yJtW$fRr43B`=c5<)UvNcF`W4u`6QLfk z(i2CIVTa@OyIy{ICw76Eqy4Cq5UV*S>=V#Oo&0HuoS9(_qn}yNjjdodtND7;A2|L; zVvgt1Grl@)hcgHSO@1`8j+?c91Pd3>gAaMsS&h;b8`*z|*@RngdW{dPITn~PjZs`J zJ%LHsx;iO6VHT$pIc+z}lQjA=tJghaf9UFOI@inFjYkO>BO*LI4Tj=fvE41n8Vp1H z04K~l(b5*ZlR$pdX-nukYga?S@SDucnE=uWn{^5{c!9ga&Smu14ATfcBD6~qj3l7O zz@S{q2SdahXZf*!xQrT%19vq335i#Iu?vao-!V1x&nl9g6T$ujj(P{flnUiQmH=`n%!RlYt06Ia?DtV`L0?*{7pH|xf$@L$?DAhx1iTLWA)by_VjtpYICCsXe?+ofyVF1e(AUwcZYsj ziOrdSj=DMD6eh@)4X3|dVSvW6kOkj$+|&r?xy$XW1H(^R^p>EEP~M8%VyRw;PSGts z9vh>KlKf8(=*CGlb#`0#ZJRa%^_O=~C(QIEg+N3het<^jh3a@gX?v#K^O|m)nZ{OU zMsJu0{gmEjxIY}tEsWQ$ny~D%Rw`b}+*Mc3vnnhYe6#!%W8gm8Ya^iobo^q9A=~yY zN9&@RHNm;s^uoIJObn(`%ij*-`YH*3m2{)&Wm5Wu38ZM;7AtE zM@L!TIyy$tx`6wT5#ePa0o!vSYr-8>mG0`F5@B0v?PPq6;KzH0Hp?f2riMtzJ%s*{ zCDTb73hr{T92jXGp>ggemaM%WEJQxbs%U8-&`9tyY(2qQceEP0E-s!r+^%?A;3j|P z2M&}Lybday~Hv68A-fJ!P(h>PXmGnEAlZA*LwB8-?XXATG7!GwBeuNl>wS`?|*M$b>eh8 z`gl|dA*x~E$+TI~|l=0WgJ5%y%_v_K`uHoa|Z1tL9_qp=?VQ@vd%3Js5r)fPQiEDYi zOf!m4yT23(Lw&e?6jw44&O5B+WJ9~rJnE?}qGX!1M$)MS&6tRDF-Gm!MsHmW8le@{z0V zs=+Tqag6w8E68r(rleG8v0>5JTw8L!v|SsG>Cy!IW{F^AI0R~(!iseE@=++Zupy@i zr#;ZYmR^NrJp-Ywilw}CG^0AsCR)~|;FRfx3&RT4+rXwHYFEx`CIu=YsH@?!zE~AW z%&o@lYEm27Z0;&=)JHcQ&^l6D8i&%iqDvHr%PnQ7#tXO|8#w0yr^PG@Ocvd;NZHr3 z=iEx>_YGVqaRK|In#dCDJ2^!}Jnu8ZPzcl6oV=cV#Uq)PW4e-=*p%&omhQ?P{sP3? z2YjXxU!5hBn6(X7lB5fna#J>4N60t-@PKK~y&`gZ6UIv$|2j8C644Tz@ey={W9F6?Y(f?JsmhT;8Rk-}BaftR_BXla zS6E=4%jQFs2GszXFu4to;ZhZQFW+XVponYF09Yrjoh=7QxGLJy()$hPaWk>5`3n&! zv*IGH(}rDY`xV(*v#cS^c6o0F3P=yY?swlIl2?#?89TgX{vI~Nk*88B&LcYF*q zCY;&s5sfG@xjs1sZ1q1}y<>D`O|*u)W7{@6wmKc#PCB-2bZpzUZQHihvDqEp-QPK9 z+&k{SHEWgE9%EO{dfr)~PgC&qTGH0X#{z!BnWk-ftG35t8KwzvHHn#~#ND9Y&5w?U zrzPnZ^Av&A5@QvstY|&;FN>n^g2+lC(CR5?x09?}~4W+@T1USnyMN3TtR(c#e6a>}@x(Wla)k%vq|H!;z zjwt}CT|EM820btl2_cxK!9Xk$SgCn?Q3y_T$`VuI(><;}*a5j~^qE;kT@E-K&U1Wmw_{BkLcQPKzq&YKpXC(OE*M z!A{i4Sbjgce0pAvj?U&)!zm+ToctaXhTI}-b8}EdjaF?MRmignR;h-BI=Y_W%g!vH z9xsJ)QYy1M3C)MyEp>D;x@{oL;=Pj@mV`(G3Aj<#p?FQ@I|M$aN0%pw#%&=EVC9tm zZo{sH)rg)h4&K!BX)OjUqEB6r<=rsDuu*f*1W&Qd0h|k136@@{2!C{j%KX-0O5W6* ziT3jReD`dW(v{(F$emsMj9I$w1^Vs5g|k4rw`&7P?nly&QhE1nUHyFWFjJy*twQ#RO^gu&cSzP;t2UPBK zW@9tx*{UOLs$?>l(Rk4J8G_SWv~B*7OvOR~O>ubZ@*vNDuw955=CUJZ=BTN;=|G^F zT?Preb9j3Dm_D{xto1wiFdTn*>%bgNW9zdI*gZ?e063_Z)_-R8cr@&Rsg}xeTpJLy zLmemd4!1$!akqId8f_d7V%cXwb>%Cs{#bnA@$%K&Vf_fE&InRE?ZFu~->7qxiYT#< z8cSDVi)IU{+fZf;Hj&-URmxoP5ka3m&kC)JtuHi3 z{Ejq8lR?VQu5$8=~=_OfpU7^l!fN@qZmiy;8` zF6fZuG@}6GKO+gJ#7ZkyA!pDQCq}x@s>48cvfm0;7AtTSUBE)*Hlz7_bZTbfgIiFa zwaDL$JO*AYCSSucBQ6HeIvTzq2NXZqeUg|+fHiEJm@d4&vUwwMUkTvXAz@$1lM94u zx2Ku@m?Ly%!5|xhKd?Z--K@YGdd^N8_CU$)g6S#vMYG3Gx#XT1f>Mu49pA&3iZz*vWWGdf%`)iriVE4Q0`3q;zK3i zV^N4erhei5SpGsjp5g)}G%eCKt^aCRKF5AAFCsrjhA4NF1R%&;7ZCY^&a$J$6R zDkp^zwgZ~B^s^$t3ldxuV`>`>!5lM%ZNLvrfP)lIi&4N9xDCS3T4aVq`0yB-HiU_% zhE-XUxT4U!Ok!#;2EIUIR+(*ZNf(aK0Zz;ph zJnlg0hdqDGwt*RozS!^a9GuG5p?;g=4Fg-t43m(&+ZU@c`Wk8kZ~R=(`EV_cmi5a&0(*dSFu_VUH(s~X)xY7SPlA}~v*Fjpk&k#& zvb_j8Jri8Tq|W^NNfFg*PFY6WM^VDyh4om$mDD=BpSUY4#I;_)O$Wf$HNphLx#`?H z)K1_Ix@wyYdm4@w;sSj9dfCd$(hx7%MQv-4@N=%V#lPCx@B5|wHMG}X;1MH-AJPqf zAW_u*;HNmFBvFbVW;VS~8g79qJ^!n^w4Ogd9mrAmTqs^5hnitQ`o=dimmeMmSATODwHTbc?S7?VnC;q#V7Cns%RuB9 z_uht^GDh+}rI@N{xq-kNkFVHrN)lTC_I&eXb}y>IWy3F1hW1OHf$HV0DQZmIF1Y6Z zG2&){&KRFHXtVhD;5;cEM6L2uzyoD#TLWp2az7FMK(O(FR0P3}zn-ek z<^3RiYw}#EJYOXC^l=EdWL69eC&YPNzUFgZ%yaQE{n2AhD2{f6m-=(gkh;2n z0(T;dvSA}t4QC-p#;T(3X_2qWt4~;&PW6?&udYOXld%#C)lOzTlU(lUFkE!k)dFf8 z-YUYySe{E;E>xZga9CFl6Wwgw+t<}4>u2BQsoi}A8?pg%52Xr*pRtV#w;e-Y`fJm~ z%g=Nz({v<~Br#a(lCbgL$vV4jc!hhp=#8G6=na6wy6H&@SE^p6Y$Qke$M>ymYeU{- zp-PXaMkNeW?``)$o*M+Hi`}sAp({1HN(Z5%_UvEVJcSE0nlSocu zDw3$M%F%U<^-PJHYe#Oj%+*6R!jkW^qK+YX=$DvOL+hzi_2 zomOpk!@U;NrePjaF9i#%(&Iu%UA0pGTFVbVk?c^l=HUK$q^4r!bgfy+5c%yzwJB6e z<^tXJpx`t_UA1i#jAj4u{G#+NlgS;n9`@u`i}FXcS0+f&?Hx&fs*3ot{p@JG@0A=O z>|BuCI)bdWN4fLkpT1#q>L$lPwUX)287~mCxr#I7t{iq4}Pm za7;dh4B@*){~KcS#J~1^Ar~syJr4WVp9}1``DiN8D1rvXt`vETLIxZyYg=Fb1W&+V zI-jdQ>oR1>PM*&kvautv76u5)KuAfN>_>&9a8fW}9ipFVb8QQRdBgg*w(y596AmI4 z#AN8ek#JydSMyo$Sgdsk&ln_k5Vsh}C2Ochp^h#1j?)c{k=sm(p*lp-a+4>5Z`U|w zJ#Bt%DV=ZoJ+LfFZ4Pp(R@C*2sHM#O8uWO9_HR*6$)lv>P<z&=)ySH$&ottm^<6$i^Z6nI={1YVXN0DP2LFxK8FFs|d zn2YHd25bGM>os(sQx1kDS0F6Ei?%cAy&c8x&qv3@YUekX`7WpVWS;VKou{^MWc=H+ zJ`abnzF*Iox!YvF{tWv1el7Ou%Rb4Uywoti8w)^0{qR=v<}D!8aX-=eyRf)S#%z;G z}u7DyoAj7KqaU6uv=43zg3zYS#cleu`)xp%A-w+1OHA2g!bPQu+bPX3f-N z$9haW?oSfPJ_7v5!@k1yY*O`p8l}Hvcf557iLHq-ZNo38`PqbcPHSW^GNCPAE=iQ+ zT?G7m8v6DK-`^%Ovh!TAkpysWl;6^nE*rgeqbfhl2L}2$WXfLFO+_ND!6J6r7d!)4 z?j_@K59k`nWUs4?p3uz+a8+JI8iU9GbJB#Qyl$8*a%^Kzgm50|$pdd#aSO*+-t(f& z%1V7Zd0W0XUmW!5{A0biDp$B*>eh;e?`5J~*7|apu|mcSu~AJBfBqSX zXAh1SDj%Bdl=rtfb`gefe%ojJ;6;wDkZ+T-Ef$MT@uZ$x8qev}_sgF)mb@*B%+QSr z@f*>qj_uU~s06~8IknWgmkrlb`Rpr$fcyJg9){e#1slHoL?Qps)nYY5NVz#Sk1*F` z(>Xsv5nXUDsYDouvYHHt22HrnP0TMB zTjKS`>g490-ZIW4!3;xx;fjq8N2IZGB`3C&1siU~?JS#mc?oL^I)h^nSe>U8lP=SG zieV(1lWo%!gcT_5+2oThcDsZX)Yp{Z&@KR^ynQr(P@chP&H2sAN#TiVa92*(BK@%- zkJnN9tX5l{#tKt*>P6d>4pWlUP&cL#9A)>#5i_!t6x=MA&P<0mRX>QE?Su6Uj3GwTAY)|&hfw5*)d&h0kv zkSESl?xIy)Eun|D-LLGr9wq$Ow2o@uYBz85yqy}`ecS8pPE*OH6|lTx53Zp4hUN4# zAj`da9u`yuU(|{Hu)SIin?Sx{WFVe3DfTiJ)rg{JeZPGJwK+&;JfrES+fNeE8FGB9 z`z5C6E`@(s}&&vC~ zLE4C7*kir2h=qDVPBD{Q@=-)G!2=7=)pKe_D6Bx&oc+yF2cb=@OheiU3bLDqkp4QQq$iww#_wXMa5K<8;{(vkF+aHF#mZca1EfXyUsEGwXQ7v~^s-SZ z2x?Fbf>?G;OG{0HEEycc$_UdYev*=@fGME@699xs1JJ>t-$PLnaH!z)gDht)wLyV}D(Xj}O|C#HqnxFwMCme6DtO@!QL*!JiKDp4 zk{mkR#mb(?#DY*PpRh)um;0>o^@Fs&lZ95loSxNS_;0q6iuqzRH0FXe{7jjRB2L2Na+YfR_q< z6F~>;^H2MK#eQ1&*W&(!CsX;>18hL;UvUKM5q`2H1a?GirooI}Iy{MJXtJeT3{WiDaV<4jf^VLmG;uj*dr^LiLLyc7Deo3xhwf zRKndXu){ekZP>seI*$x92{lu(0Si~icH09}%0@*0rLZz2qQKUr76YI6rA>p*39=mG zqZItC>43@GZPdUi`X#11pKNX|#t7^^nARZ+c791dJ3|->tWj|4Fmy0tunDt}!J|Vi zisklCU?0-9JDkO+1*B7kp&@4AN1#o-;RRSv{`z}5SQf%Vm$}lu;ze}0@;248$2Awnu%77eclMpM*H|&p6 z5T*crD=*#t)ah*+|B53Pp=dCUk|>1>IZVGX7Q~%2VE>v5u=63^qlKdsR+QE!CVqhx zp_l=GK}XC&2!6Ps*!gOTj7=Fn?KL2LWCPI6h7)E%xO*JWIQeS-<_c^I_|2CrX@GMF z_*WZuVg=nvbqH{XV*gcu1Ds&?DY_ICOZRRKu`&<=qXB4>6>AD$<#}*elhEt}yxO#6 zk4h4<6M1r^VwU_>z{S}Kfnwta@4JZj;?~EM_#UVZXvx`32O_2in~am4C-MuYVw&mw ztm^&`vyU`%83)N1@h{hKkQCD!$;y2yf)7_A+oHE$nWOqWUQgy z6Sx?@3UA+xyX#BK1U;jQX(tQ%c*gm}9p22*{>rCVRW}pgTv2GKF~zlpV+gKkzw77N zBPvB|@m~mo+|=(Y53uR`cF^B~dvJ0B-{Kz&Or(a(o6^VQ3Usfd_bMyJf!cgFn1yTc zKU-zT|BIh$tt{M$kL6Ii=exdpzSDm^sQmHD`Q!8NAG_X{b)2(KqN@2Xh)tCr2a`MV z=72Y-nKhj*@gu1OQ$~bYy_%x9dT^N(`04Ycc%Vz!%VzU_^t8F!v-T={d}FWr!+znX z7c-l`;&o8hub%c!Nm#M8Bolm{gFooi@n%Xui1NiGbPS*x>Wk{gl3Rj={- zw>U=MuQF}sciMh6=JMCkW=95MpW6s-V-NM~5pP2WMC5N!54Tt#`SE+g`M)!xPGj5pmW`T67eiGig)>Iy`*Nl$hM zE76T-UxoRR$?gheS@}u<4R){OLQ;kCUh-_zg$}znb@XA#H)1e6OJ#GSz+^Kd*mRms z9G?g~pG!7kK+24vI35cTZ=*nc(;WFcwqf76fLvj8&O2KLx=%^)s zDa?RN8rlv&|JaebysHLjUX?8dK2ME}{oiDN{VnQYglq=u%TwdL=GoOOn0vpiC`4i7 z7LT!=A?$Wa?3>E5JDN9zWZr0I;IgxgEHbp}T5HNF+LX#8A@(eZaJy+f?oEEcXg8Y4 z6&(*xkyr;}>aMcu)EI~=8-M_T!3ntvTkw|;EL56K4jwNp>G!pIg!15gdjulAN*1R7 zteT7Q=E2Zka$#XCIYirnwm4ksknc@V7H1St%|t|6-&s?>aksmUM6A{O4!i+a?G;sr zeEMdD0AKBbZL&4v&1<|McD#8Q&zXful+r;fxN|K2aJ}FFPx?dUz_~9W=%{NCF+m&YDkQ6n>;biT=N0zRh zu=t7=j3Cc6X&a$8K4Pe|aqD4p)b*|^`i13kARt2Hi+8Q*TGk*LS}%b%M0 z4nzKGaclHRl7>=f-aD7eWo|_iOLAi$XBB=Vb789~vc&TAf4gN3G1U=X40hjFS|DV2 zzk3+G=*S=Q@-w(iFT_?OiYL0#2ocYNFEr^C#?f**8*Ja-?%#(O%KM;)YHgvWwH(k& z$@fudG{R9cn)O^ORC^ViE{ zH-HH|`Vr5EuY9zsdsB`8Nzjhvx?3+X*!6a+g(Kqs^`8o+38AkPmdm^Aio*b)P(p4% zBT@eZk-ZPzJ>sV^SD zx=x-_RX@-#gl|$BjnJIFsTw*v$F-`i+cC|j0>&4(x~rCpDvgjOJz@X06^SOd^_J?a zj@GnBI;)UleMHgY3y;CNDcweluSow1K=dH0%)3;MXvv|WeJdhbXqf$Vcj7PuLH{Wd zQZ8FJ{EfhfCtxt=`@O6r=m3ho~{Go!aOrXh=e-%EvUf z+p~pxU33W$&Cj`nN22g1(P%uZ~v$^U>7Jr6K*ovF|Zme~=21h3+KSBGN>qD8a zKgdpM+3X9Jt;Z**PQw?4(|q8bq0orLe+#i=YJa#}@e;m-Su?2!&57 z7w5PXif}4INvqF0Ue5MNeGlf3-_uRm)W{8Haw|S``}>3sV#^^OTd_*}3TNBji_I5BJVVV4!cm zyCMZj{TTVWNYvj=%M8UJ4cOb5LvF7>*x){OZKYb`2xRqrD;?r`=-^WNRB-x=^sWP|8Aa; zbdFSV#ypXk#M@_+-rwU!M4dmjeSUdgkB<{x>TK{7j!(0-RfYuco`!7UZB^gwltABx zS{(B7C`iacju@w6@6PA*SPFUF z&f$!@J&y65>v}_pu+m``ggiseYLmOSv5By+MPw1Oqt|MQn#iO*&l5b8B$V7$$Q8+SW&+@dw%t@ zxN1CC+bmmt_gr(F0XVHt{6nD%98I<$!p2{#X7r!E4V9r3_!jR^ZeU!EsDU$!58+YKOA0;HIBa);W{2N6zJ z#p!5FPQY3P!)NFv4pY5GBBgscI!>W9b*p)q<``cBuHnmFv(Hq2OE((zu_#*kT(tZQ z*r2fXx?>*yB{tIv?ju4YQ%H}{37JODnstT|7SGO8n9kx%dht^Ki+=?y9-L^%yjlN& z|D<{tk}4Ldw)=_IURArV{OE##FTM&RwT75hYFMoc>RSZoc@H@hmevGc(VP;;##$HO z0@H@M=VAp~{dQum2Eby)3|nEulY8ccP?Lwg!l&8O7GzURy6g*SHQIJ~drl==E8r)S zk5u3jY?VryY@8ujUAhrAc|08+O)=Mxgl_$v@mgl$%=T%TUkLsFsXXsw?r^HCXx-Vo zYNCRuf&oRE!nk3Er(wJrYDW&Z5|gxEH`(7JDD-Y_d57vJK&!L?z<>pCIDBZh(uU*_ z6YbrX!sZWVRDSXyh%kmWPEv|33(%9pzqAO2lgjcf3|E+nqdMSz1N5sxOGpAzS!~&p zgh11j4bvOu*`mAh!+}mh#`ED$WQ)$|1hvrHx>mM6HXL`oh0_o== zQ8)R1E`ZslCdgOQi89%+CjbRto=ElyV?R*`D@M9;clUzx1%7L&0a9q8d65W=Jcc|l z_bM7)dLb?Hj%E`Ai|r5Mt26W^{{=h%AR7woEt!Zd(*&PW(GnLs1-$+mv(t-ZZo}gg zhOf@ky*qP#vfMr~eIT^DrwSL8ZS2<5x{8tV>+9Iw7+iR`pkz)T_?;Yg0(W$GOumMg zi>O9Q=7KVoed~j6K3Pv=w?oW)RsDYa>*K<%Jm+!|vQb`&Ol&yq>~^@)#DOt~koJzm z21!Kq5fGC58DnFSygTJDcN}$A8WX%?Y|^9wsr-vZVGQ>>Cr}wm?nzCEJgb0o^|%%` zNGP;)f0FdQm^#yG|+B82S;GA z&l~mHN_nI|S38Zedc4t6nL6E<6;_-DMdkCG-mao_|DlW-wB4blKd$u>TIFK41ZEWx zhOH3Wa~0H+u#a1Fo)b9k?IF(hqjN%+y6-^s*qGT;qW{93BoyE;{143tNxz)kjtPOk z`9wK<8a+*u>BNxmS}iX8WQ;^-bfscX*|4d;Ir+$ehBLkxyk!B|0(y+=DQcB8qa)yP z2aZ(?UVR0+`FL(+nyX#h)Xi`ATp%G!!#1iQ`_nCThengV*f}iJ()}mN&K7O4n-rVv z*o0z_gGaBd=zk0&2NwDy$y6;4C7Z%et5rfj(9JPaJ z9i4TvQ@U4rY^Q1@q<hsEl6FgL@c;l@T<48gzGe9n0BYd*GUhp?|ls3JSWhrA4MZ86ocp)6Si~ zB*LDxf$s7DKgUQ@gsvN}#EU6p;+bdU9~Xb|fJX2+478a?dPC+N>Pf+rkr~bZ0gS|y zJ^uqRf>O-I=e=gdomoamRGzliN)TwOaU=Z?z^D>SQg2os=E6u&5N3AMF`X9{Sny=j z^o?f3DHoM7cjM3o{{JXO2a)IgB{b`%uJ%1>ay7+0^_$+~wEY}#;^BY(@f_IJqRUSP zz1uycsF=dP_PrZhY)?V^#FF%{&YkO66Uw3T-v7hGEr*3fl#v`Ie=7S?dy2No%g2)r z%!Wl$$}2lZgegD1E~(u?!hx7$L%XE8p7EyO(b^88cO|vI_b|k%fCzURm}%L*9n~~4c$E?52odU8tmeMI43k3oQHH! zF;`i`k!uaHig@3os;JtR>8DAXu}5~Y&i%o;*1>dA12@wSccTPIcJJICxhaktHP}98 zG1)rW{jfS43(qvonc-k)RWRzhLVYi`&g8sasnj!ad7)xBn$-l8bLd{*>fKsvWv$N{ zn=wu6vyvi&_Lk9(EN_HLdGVHBWrWBZ&UqS&&m7?MiG0iyB9+71s-W*`qg0W^B+vp^ z1utUPc4km%_tBsdKA$L#4`x^tqm7k!pw}&Se&%!gv|`d{=C9f5VPg}6vREck;mx=b zG5yAHu_k>?=E^pz4|I_0imD|P=Y0qXF2S6mk{Os!sc;vMWD~ZqDio9{o%}wiF(obo z@i{MsOQL;Y80d7=X9P{L#@m!k1}#D?9ut!q7$bLiwyLAK1Rutk%@jXy*u<5aLC7#% zX}hu~vA8)y9kt=iKP~ayaaqd7helWH-QBg$;pk4FT4tok@}&xJUBTtMW!M) zwPE4pf^#t&&Y_8QiO*xxIFg0~L=xHA3|3UZV52GI9)uevDwdzlQIwUCE=hpmSTZF;-+Zk7R=&FwPgZJbsw5tE$;wIq z-h5Zn9-rPJ!Bt&yI_}^h?3ta%^1ygh+v3WzvVjFk>C4QcLKnW#%Vm0+-nIQ0~ zgDZg2N-$dbUxtM?XrR#^1udw&2r~7%>L{)ll}$6!LK|E#u{mwT1er|}?mq*CSz>NU z1fxuxAtVpRhz(0*&RB#oBySurv_@raX--YuBGS~28MKdpEvPIUs&rO-QWeO?5Rf;1 zIu|#H3X>6auoyo{Za(mMb%e}jz%=X#odFMs9t4+_HQE~K`qs;%mzN?uXG{>{00S<2 zj1uJw89?~}^qnKKrI)e-+Z^Y?Jye3um_ozBlAbe;Vhqb0=Sy)&2bUfBZ3vwaRZfA% zhO-z+Y0eUAs!b}07D1>GP;&5uqbj7f|&2@8Gg>(keq( zA#*`^>n0>@I086c(6R_m1;xv_EH#+3bH>_?QTZ^!k4zyYH4mK4W+&s!Q0Djn<}1|c zmj!f*lj0)uc__i==dTjlLwxA-24N+tN!cdJf+%n#8TEw91;OrPb5W0dQJeRVVSs$i zV9SwvI-u~u#iRpqcuj~cu<#mNxG|^*&K{dN$h5j{(3Zp^!nSeY4LQT3*7Knix*l@) zZ(0xz`Bz==yMb7sfi+G>crRnx@F_hM-3WmQtAhB*()4;MbZrb_{~TT6MV%MpI)9jH zfBLK(@hEi$Mpwouy(7u5VLLZJeR!sfcry}lP;0XzO`f-L@Io9|6*A6oCs&4S0T*zQ zMy8X3KMHJ-(P|w!{g2EU99jluQvz)*>USZ^E`IayjPtYY%pK2XrJW*fc_TrE7V@q} z?K#}MXuSkn#)VK8EqxRSIwiLfC=M1g(TpTz%n%J0Jg&1Wqf$`B><84cvTrWc5T_`C z)UuW4RZFHR5#$pKODah}JOjDKj3yR>P*>l@)8Gx+#1@yD%wc7yW**HmaH&0!Ptb*? zi~v?c78w~00TC6v-;E8pWJ}Hr9WrDZhY#3r=5W!nN=n31hZc?f=(XwO6G2Yx%lW3o zh~sKk?8fs`8S@epE-LoJ`MTLe?{W`Ae#(k?AhdQ|@vO7Eg?2i8(q2qLotNxjyxdHo z6a2n|pXw^qI((DnTc?F*eodu*h-T&yZ1Q^8NJ&4PzSusSR!3QnME#sY%GkT{bqMgJ zHh_7WfR_4?h0}-mkA>450J3l}Xr=(T>~At@3R1yymxaEKe=+n2;QwYp%d|0DplKhM zzyuNrSPTT!rSKr{2UR)|4)Bj4Qt>_V!4AUw!5l)7#`B1B=Eb3ah_#_ayisdESp_T7 zH??osyq?_ZWH+P@k?0rB`1P7ga@)Y8YQ{t7D&7%Y8y6J2LjR(G<)Ek7aMR zK*+6&;HGuNPB-Rd)28{^j%cUOe|uGn{iBWYMM_Bbst(X#vXf#o`QX%J9;yW62g!g- zdrwoZW?oz7H9#Ll;?D`^!*P|(KIbGf}&mj_8CUE`;tTCDNB(j)bMK-`ETtbq;8 z#ugfCKWJqYDY3$U__K4{wPsn==a%)7}1Ia7a2z)pt#*J z42|x(@mIj`*C_=WUDlMlRw8-E@=#pt=XA$N6Qvwv3A?{&>3FR@3sd!YS&NtPf`x1r zyo}X>^IpMoRA~DOFi&U+dwa;MQVDziUu)O)Md#3U~p%d30lcgD4!duV@?8u9Kg-m`5fsBcTJW60u#c2D4Y_b zUn|P=Vz~z=fNM}y`4UJ%*&+!Iw}Ak#cfPaJhw|!;ypl2`BaJs32TVgEhvc0}mxYsL znA%{+$d0lall$;cL2Xx~%}cbuJiesrp|WMM@p(;3K#Fnz+B&})db)dGjFO8aiqp-U zhCj>gv&!@H-B(1W`w@sDTL0MN$qw^!Lhz?-Zv1R*v6H|V3x$aR-g>&J&L(v#tqk8Y z;wf;wj9qH_MAMU&a-8M5UHP2j;Sl#0a!*vZoVt{lgnQk6Rg>bU+qPq!sGznC21o;) znAmllCz^v7)V6F3nc@n?JBvrXRDcsUYm_YXYFw{LT>HTnbA(ScU2-66PLuV|RbbpFSHcp1wJvQT^>Xj!VZR14Y2Se~x0cF#=em*a8f-Pj3c@=amn8}tf zE2yXD>Gd3$ni&(2NONOxbhL>+bp1z0_Ia?sb|5WM_9W&VNh&o7XvD6$02E>9WItn9 zzxn5SO(GoR3lkD<#z%`(3V{>NK17rARP^{rv8}J zA=ybKBv7|fLhMrN#K%P6RGEAaFU?OaH3A@g&%0xqn zh9UU|59R}iXdV6qJYt;}1F$baGl^L99valFK<7c>fjCP>174@Z0DG&&!_z@AI#DyG zZX59#ZML3(99#9;l~!Ahn|MmGxo|qsqEA;=X|BD?E&bS&RoMdhRK6eii&UF0FuA#b zE}H8uQ4Dk+YANX4fdZ2u_~&*=&hSF^@Y#nUQmymp&z z>-2^7o2zEL?rwvVkvzviv_jR(SXN}VD{f(z1L0I^etYON1Ww{ePv34!Qz>yx9ql|DRZqjn>9>+pg27wk%VrXWDG_ zlQ5iSPENM6Z*Y-loZfIWoK6a1w34pcLdL@|XxDRNGyR`XQJmxdgo;aZ!#D<2ToGMm znPq()r^f3|R|TT!BLEl6?r`8=!9wHF0O6E2mcWWv`%OGjI+DAg1I53N;}Bk1qE+I|jJLPrdc)Zt`B*DCv5U2xwyWf&s%^(nn)G*2qVz zK=~gOj;45rS_Lfd^}5rm__tbkn7hbXl+~fIUf#yX6L)w+bvSmz;7n~aJ6oJBRl2v_ zU%jKG)?mvG%kPgxxK+g=3u@2a%z~Sg0HPMP{6>8;^|?26xy?+xD!TL0^QNv;^lwKwZGax$xQ1QGEVy)kq8V>b_jE^BJONqNvk4!`A+O)KC z4q=Fd2An$yl~mFgRu`P~kh&l`99sssQ-zfTl$Dqb`Kc?DccdaJ4oRO;z+*^qhP*OM z4n?fP*YWVRj&2YSOlaEt@@bO?3%^`WM7wONYTy62)&C9L>Yt+QpF23&_wDYtT3N^8Cb1ni@HL)d}hHBqpLIel4oLIBRU-g8`E@5OSRGqspx&`1 zN@NN|RPc?2W%bKFrGrxatoOwaT+h8BVr~9Y%dfWMD4^1{&F?EWSFA>Wx1N1+sSKpz z?nYhlywFMRvh$)!2Cut=DyC#v%WN|bn53_HF2P$q@Z2tzYk^0Qin_OVz@@u@j) zM{`FDoc20bR=@4pX%zE~9hbc&w_pc@pbt{4X6hk*m^MW&f!IGofl)by#3o5sIxZT9qf4 zSvjxaE7!y>oCVwa6HL_ThLF6u&=MyWi# zlBcjn!C=gzI>CK|S%W}WKW2si1X{l#t|>_N4i!Had&Zh40M1g{rR>mpd+ERfjuFFY zXb7AZc8($-r+yTI!ex6>bLJ~Lt?3{SaNGC ztPkKSGMMXNm5tJcz|l%}lQWc&8#8Mw!0?UmVzi`vFq&Cfe{=DoXA43}uh*|N2#2%FK`mM_aB5Om6TT*H&l;V_`^u zqxGL}lVB(VS0kH%sNPIkkQ^ph6|9pSNgaep1}XU0mvv&?e+Ix(8y!mpD8N(%_FrR! z5NoN1DCaHB{bh@=7HbwFIg2g|jyC@aVm|;^he>@j7n>l@K~h6uofKD*u8i4CK$`N$ zvRi~m6hw5)Q^~HJMgTdEqad2#sDqptsYI~;oX8wb{lydbnIAkZ*Z0Kllo@?z=>(W; z?peSYM8RPpW+K&BNbEhK`KtB~)WbgrNXZB^&?UGs60F{K?iVyL=g5Bs!hj1$Ji38mm z_JhTxS{u3KG@D&mpA}J=qixx9sBubxt0Q3|lz^bOJdiHg4ngGP@V=OX9TfO7sldb0545FJogBl zv;IQ-F~861_TvG?Tp%^itYd9#o+P%!>>9x^-WRRdjPgqxW);u&Uh|=A`>YNb zrOw8Z;JGyHguB2n7yYl-r|HXI6gO9%c;oRd+i&j}Jr6r>rtNJzod)xT+Wm8OB#ZYacdS?br80 z9Y9j~zg-8WZ3acEq?arUFsE=`e`RZGbNA8e|zMrnR&aq7K`NEg&Lncw-v7N!zk&8=#FG-JF?o@>8q| zf#|tNqZ1@Wf_lzOTUk)3GMxkBm!@Y#L8f2Kj`CXDYWc@qYoRXN-^y&i6ZYoH&l-ymk z<1c9wHLVkm)j#LM+m5ZUj}$kK3Gd%A7A(bfpScxAVQsa3j9Jx5k%UocIwpwR2cSu` zr}r-!h#w*7-doPW4J836@zvp6?qN$v*ZT|Em5wRM)G|QtUA*7~geC3Zkmzpw?4ciA zj;v_{xrQEeLF@|Gu8b8%wv-_Lpbo0Qv8^lkFUYM@wisf5*(dN(Bml2p9<*KXq)7gMh&spUOrD_8 z$F^11(Kr=YHbyWEMMuW1L^7&*`9_}o?K%c|QKYo?)>;xZBm=3awHRT9YNP2>F3XYIq~qfG|%yHR{=dGLLs%l?I5T(r^65@Ps+; zEnZIq^)_4`SO^fefoZDVa01cY12V#iE6e-l_2{Ze zE=tF{jeu_^0N83eLPTD!_LoDuhy0+lK1IMkBRmIBQw=3}N=sKzU|II1gq z_8I)+%p_=1=6uy;bpg;wRNEmP8Cpy6at1+suG`SBvB~wih=HQSleNHiD)TXd(Qxow zAAJ79G}_}-T(+-}lU;j)!xV<#^&@5+=XITc1?tj;FWB%I95tE+jfBUaw$$^K*8C10|RL{nZOfXp@7R6`&}nE zOtDP=kSna3&&1n~`bNvK8=+Zu}kN zQqmG|g9|2-fO3$K-=(gpm3u6dSnB zUUftCXx9}!wZPYH_#^)BED(z?km;;eD}reaXyu_fbYOp&A9$<$CymO4sYa$y1*%6+ zYt#^QO~z)rzD(fiRKVtW-h%z7N(?(>JMslr3GdcpZB?x>Quqx@K9uP%c^npBSmPNH zMD^b>W#nPQ-#YdR8JzYV983@naTah2x!j;8N^W@KG0YX#EHs5Y{!3l*M?=O_v&;~* zw&2f%FGQn;=>G8Dn>dT!Vh=W|MQdMvf!0)hs(*Sm`RH~)?Yh^X?)g9UC)Qp% z(It7D0(xT=TAyy8q1*on6R3cij6xCA{)m$7=5~tqY2~sSRyH96<86%ZKlp0c zKJbPw%JoBRhzkiaT^r^-TNZ;i4A15=#2Z?LAmQZ5K0HukGjlyMpu~Rs zX5U*|5O!Ak<707sT16I>6i3FgN}ip&HA1Sqp46Li}m z!66B~CbD3m=mSgLk>_2;VagWj*p;fp*Y;EK z^ZB^%*!uT0+GZ7N!ngIt;&a&UeKo$xd^(slS{6$;`epDA>Q>@|q16-f6sxc)cm4hE z3KVVoOk``IQSt>ziBksi9V1B)lyJ5!C0V7CED3o760 zT--`dViv-V zXY9mWfMUhnf&OUkT<@ge9>j70{&O#MK_S0}L3FF<_GG;(zngboqlo&o=n2zreFl-( zE04ROMQ=ezB!I_gOivc5Ei4t1r(l4M)%%PsiOOQo+S`o-^;&%cdOy!Sj(ZAKrzrr) zp}1X~NbsJHb|F0X*uTt7ZX*TDy=rKiFB?vSG$m{4(MM@JuqmLx7l6;Xsv?6+m$FrF zzzZHDG@^Xfo_<}l;&w2DvvQVOBFLP5B2h_sf_)huZW(cO0Y9bz|5b}L_(?d<+5~)U zsU&6l<8oG2GhwGc)0BKSH-(I-eiVGI#Z)OQw+5(B+gne7iZLku9L$g2En4T5MNYuE zNNc=tFsEtdBG8_^5t*+L2PQ$Y?PQDF`;5!L3q#S$+qt!N{6>S|wyDtwj7}DupLaQ> z_N)}VP<=QxukiQgGRgeQINQP~%hE7?Pb7k+J?O7`ma79^RS zO$qoU<$^~;An$7akh3)~BE*4+-8gLREZWNLSY@r7Z=;`A$;`l3=v3Q&YSmjkuW8T|8Yhv)exSKBHn=r7gNo zAsuBJ`v-T6T+8U$C^wez0i_$Sa*>;BxQ7;`Q16G&tKn=Hu4#* zl*S9sb>(_bXv_#*{Fn*j;r&;IV7TZ1+!4O0zmr$f%MC@6=k@a{8~avG;5sw46SF(uqi20~S0G-lq zU;QnT-2KynlBk;1bkLewk6g)SE&Qi_%yb99Ailo=xeOb#lCro{jmb=a=Qf z+a<{+Z2hO{^Xl~CwsSMqD;5#j*g}psQeN)EsU%}g$I9%)vp>qB<9*}~FS_~n6d5+& z8RyGj#Ij$0iPLRVN*oIgI28-}%WM5@eGr~X5#9}b_q-1BdHq9aB}!h^^NW#RA52)( zJt@|OGyemfm`}UzOaOr|@xs(b`Sm4CeuuvC5uU~0P91UZXt`g_(~JB94(d^l8l6Q` z)MwGwGHA>0I}yDS&bQFy;TZP*Dt}upxm>zN7B?x7hIE-Ne0*f+!k>))LAA`Gw9Y9^ zZl4e%iOQf2@h~%1pE_pUE6JzneS@%5jC%U&??QfR{q99IWq_ph>n3)4uRJC}q1LD@LIb=#ye|?NBNI5n! zGrpdKfb?c)jZ$BZWkjjz;WF_m8?3znm2b(CCQY2s9P4WB>UfXgwIAz>KutderCWdf zI&J>#W2uGJSrzTM4{lo^Ft(GH?dF*jdvWoAz%w&uA97iGS@Q8`<0A0={9pXY;e%I$ znwMZtt^K?p_gl4qQ9TZa?yF1J3r!%2|De8GQG_X0(8VMF4EO0UiMP)A6JfQ$2cqB) zcVqqNGy6ba^edrFX5~Xgbw~YqLw$uvt@<6Z@%EUt1hU9&)S(*jN!8w?7*0ZKY&$`f zY9G?K7L&{JG@#b#Q}C|_nD!Qe>5XjUKl(4E*ohoh0)JiScrm`@m#XXm{pAb{)3E?# z+kjo?T4eUjs*&lJd*|=Fe`k)WI)N`?aLg*ISvv`?Wkc3vQet|%?6qBym14VbsaEw= zK-g>w)rRH@OYM0Ath27v*zme0gbO`3(((v3)Kd<%>q70y70IO(makDHR{_OV>m=sY zFdF)m9;c2->Utw^zq~i;(97`SNQL0^ObR&lbo4(Mc;G0W^OkZo%a5nQ!hiny{#~~t z+!v_Ia9F>OgX9T2nDuAHH>Vjtrc)HS0ukVeOk;P#@q!m@sajRv*aPY@3$58ut zu_SMEyE;y${X)pco`g&^#f!~Ocf>fb%Xq{zEsCG^qp}>HWE4XZrKhRQb1``K)^{^Drh(Fti{&$a?R#0slJOczLdKrtMT5Rm>bLApYe(}VXSWa3i zl~O6SK6XMR_p5XPZs@HQKO5XT?2sWR%#+_Ytf~77>L=+I!~1Ki)Bq4L3tP7U z+5b1tD{aKxUVqc_FWmH5^($8Kb4w|kEf#fBPtmlL@ZE75o^q)hythcd)k=H)Y_dX%Wtf3v1Ej7J5sU{tYXAbPLYwNLMRrNk`m{ zf7gVhqTT2OMoghEuPV`4``eVK{o$)p{HeBUp>McPrjUG&`csTn6s{ut_AWRAR;w65 z5R4=9?65aB2c3T`(;`40w%;P~&09>lV{7HN9l;;AQvMSx^`1wSCXP<9u4Zhn!f_*= zZACmLrHIOz45MO;8^Lr6Hb!Mmfexus;mn+DElzJwVdgwonEnmgCqDsdjm(2G z(QY8>TG3*1^O~3b^<&9y@3u!ST)3K0$LO}v7f2UlnRK`HE}X#77d-bxw+HT+$S@kx z+L7QFJU6j;d{1u3;C4f|{EO{m3tCYjkuP|@O<4r{^Vv|oE(4qsxgoPW49@adQo;WR zIESk(HJX{D5lM$y3B^grYSQeyykVM;x&)IgRJ&?PXR==mk6Omxs5ik!Liv*VS+BW> ze)}(zoJ==%i$EVOW)~i}&HG5d6~4 zk^wsL`%AxyQzl6(4(}Ltrz5Ib1osqkQfQ`V6GAQ=EeEjq6p5Kvk{Vc(I4FI(e$y(=@fmUvI zPC;4l-=ku;xc0>_1yhRl$c`BK_2=9#VSx1N%#vX!R}^TRtAm@l*tSnL?MseZs#M~_ z?-b2dmFP*xbHu`hCn9EdpQxWfG_DikXBN#80vw_6fxY23_Fs5&2!RoV>x>|PtHsKZm8sBE*MG3v zNtG@H_wB@!^KL2eDo4U@7+y|u8-Cddl>tqw(|&K(T4bvqy)F0y(I)}71Ev?kkb;3z zSZC6_>e7MYy(N3|b#ubp4f}fNw_QP)Vva1gRpTig5|St*ofI|c^ttSQ4_Z$lpF5&( zUIB{~P%n`Y*tXx#_v>8T_T3TE3|REj{bPf-&Tc)1V4Cn-6}r4GVSVwL2^%7?H?b|m zZDEE=C*$oWQ4aAky!YhjqU@!T62FAVz8kRp<=Ju2EvS*ibj;#o8 zE4{q**8J((>J=w?94U{D96~94bNhgPiwh>2Ayki*AJg#F#fK035l~s*s?AY;a*YY6Z4z1!DG-7=Ev=PsJ0h7~c_Rq~? zq>4@Z&g%)X@D^qAgcoZN>gyS0vb84*H~$6C@pws=V;IP%W7kKJ0lQg#E*(j93vk~K zC9kk13y~lB<2xf05ck%0U-&DgR*lc)=|4W8B4|roe8@RVvg>E^WuG(+%37Yq)J{bI zZ9i7O_Ke3|`yp(@ydU|u%h)tLC)+su+6!anluYl#u4dD)zfQlB8sTnk(v8aWI4X}z zv}I=;fp6~atsapeh{o|1&p{G|vz$=et>PyL|FF>i=!+DK61{M;{?hj5a|fY@YjzF7 z`U2)YwV?n){L$^<3ma0|`$Q~2=)28wpxt`SL~a1=_LRtu<}8a-X~OBH^-q6(^W8d|%kX9CZb&ifq`ytgPGjOZ5DGY%j)m zD9_`%E${0RPdIv|0ay<5`IQ}PhWIHQssgk?BvPnE}>8Fdk!H{kT)o6(t*x(hY;mDoPl`w`2 zuBrY#NqiqrQMbS#VqqRp<{B5D^b@Mveb~QYuR4N$n*hL-MQ+O4=4!VS3hKc4`5_v* z$LKRvBBX4j0!0SClkuhq?>`_zwB8yCVAkVt-llxP2Nn7ow>io|%L{CztK;g*lE$E4pJ7-9-!Mo|!1)CbRrQAoQr2*(z!j zgHAF&n&XW22pGHW#mKvRqt~Z{US3}vczKVPK2AP1H4Dp5(ZJdai%I-SDS92VeC&-E z7<><^e)vR-aR0joynx^|UNp~8&q;hUnH+`<=Lis4Bp<5=?kLA!Jp0YM)yD|n3j`l? zLSq@JzB)Jk5&UO`#J;R$LUlfG|FBpXm((=V$3vXlHg5};5UTBB+x^$WT42Q&cim=P zQNW9yo?kW>j?T8{34}{F&Ve2Pd!a8NZ-2*m3fWMo=@0bEYM6&Y?l)U5I8%AlF^94x*Ohm8v-<~0aieW&k%VswPRg&*P= z#`OxDMLAH;w23TlXDl$$mLs^nv&BTbuZTXmbCl4FMyd~KGb-o?%k82(tK{1K2+mciZ%sr3tGH8^;wx?e(hVeJ17~&dF zB)7&EtvRjC@&$ zs+T${{q}HGr?*qm3d9!rJ+dY?Ir=3xpE4#luMIE4BI;#7hVYBS-x3ClZP>B2FXV`< z;3=GTf;&9XtcEChjY)|MIW|@76mg5NkErt~wW1(3g zKwc&e%t>TkRQpT8X0$Fqc?^gX&W~wY58=QFf_mI*Eed3>Cn6K1*;bdLpmo1oAw1KH z@(3O7kpDrGwVvhR-Kd01Bck{)L_s&|+xi8aKn)6RQQ3{PF-5^vp@3#C+)Nuzi6Alh zTNUz>tZF|r1tMg#fmwuI6*rz%+~|!g{6WQK`vQXAu7pSQav=B$gzaUPZ1pH9reCZLb^?0$SjY8{&+4+RXB?|wgM-t|ZT>5}LXxh*;YK)%$dO?ONbtt7 z!6A@)I7h8DN_VI@!6A@JxJRwb{zblT9OxX@2Oejc71}4>Dst`IDOcqncKW?b4!|$U zKL*?m;{~_R;>AHV|4nV#0yT{`b{mTaZhd08O)w5Dxc*{v|73z|T;t_^^=O8(y%=u1 zuEAhM+`lnjAZ(vw?>;>C$2qh6(6gw!Z}GJm^RG|P5@go{DDYe-ALg$^Y-*k$2eO=` zkpn6TQL1Sq29Ps|sl_NZiX3^513CH);2_qb6GWEXS#*?=V76-oR`DP`4e$beNj4t=U z=QXIVgfJor4&qP;Jq6pB4{qqzgFdsz_0msuKO>tITZD@y5-7LvArkBHn}?4Z+0p3x zWgYu(Tl~G^1X*2znu*juJDxsaI}h2=xN3FYa%YX5h|e)Z;AUr5ytqTE?G+H1AuGic zx^S5nz&V*K&ELJ)&{<4VM>LVH!TK7rq{66WnKn=#9gnHmfjY_Q%gg?28kBcdH@u$LCEo7z;Gu z}d4QzqMPc5iN^SqKm%1ZRxetR6gdlsPns)rF2X&oh(1!gMz9QD zzQLaR1eSSSP0`83mWybN$<74LMeUS+e559Abww+Sk2H###^5`CV_v$8KO#;c1BjEx z4&GJG*A)UcyEP@PN=S3lgW|*Uf-!Rk(1w%|%zzf4>%#G1S!XJ0l#n{;j)6D}Gg zPIIa@ySY*>(~dF5e$_T-tf*y>~($>x})30_Iv>peJjntx#%A(PqUA7(%iUXW%;`~zEsm)(? z)zFZ&H;QU*)OLoI&52!3($PGytx4M|La{JuJxWXFBCRH`U;YBr45C<=wjKe=<{-}{ zp|bFnlT*5CD99>kZdp~ra=V^t+n zRUEkTmvsFXinL&`a=AysF1W$ZXz;PyS!+KQ;CdF~ADF+SgA|va;vw}{@k2U7b_JS4 z{=41Re*+fA;q_oefvM9YMMIVF#U;P>Sa!GlD`a1lg0~<5C zMpyFOg8ln&*Ps`SR~h|E?B~-Hl^T-j;IFYX;#98QY(@JP;dsig_Q~m!bNz_R-(%M= ziUz1kUXxSj46pB)d&E1pu6y@if8fL6YESuXcwfc1DSqXh+rI(U6f~n^mX@s=yW5{B zF4K-@#vso36wcn_@+-a8Q;i9(+N+;e9SZY~rZ!z4?dL4?Z`)rLv-Oznt+h6WP27&` zL5i0>tg@+X`v9pq;cfrNL@OSr@Kwm+r|>G}9qIi^7}K2CV3I0CamvS>%HwzNNLB?C4X8|Su{RT(U?7%$8#=BcR= zRdWlk^{is=-K+Z$ojMMFH)m;T>aERPV$ScGuAfl4j*BYnblLGi51b%W2Cw(u}mzYFkD0jC~fQ9 zPgm9(zNfN_8uA73N^%hdyhaQv%b}HtZMroh#JS%2!xYFf6SVbIa``#K{6s$SC$P!0 zXEfzq(98IFXg!Gf^1s6fqV|)CV(ZWtYqQkRb=8mC+$B+zat8y6={vwq|G?5)ZUU0g zoZUUymFE*4$*mJsPl@H~c z$!AQU1cLdCtpO?$WW3f^Pl;<9rANZrDv@!BG(C9#`V0Sag-8Aiu5od$i$S9#BZ>W2 zOdO-WLE7f_cW@x&2D;d#aTUI<_!QND`G~nBe3itI#Y@rlJEMo0E}8zfL`J18=sl(~ zl!Piio4;uzhg7&s*KWXB&6GfeaeHcgWx$0Om5TYkOxWjghMLGOq9Z|X~O+A@_;x&Pz znK@vWMqHk|cSznNqk72B2Ei`1I(%*-rk&fozCMPuf#DqM-&v1kBsDydLhfCTvefO< zWxUJ-8J&9FwKoQsUG0v?=sCoAU|A?}5zh}c4G&pIjT(OdsSLa0wmP=!^fA1{d&5{= zjcvxg?%@w9@q>!VH66nah#Jn_)92Tsf)|NHILv0l=2uj#O%Psn&kj@D@6sF%1z+hL zpoKIS4sJLvPnni-xX_$;)TZjF15e-H&^jJ0Ywrw8V^IC(%8FCRjz4uIyWjHr+%qNV zYhTgb`UF<>lj`QQfO_ul?ea%qMk~9o+JU@_HB6Jpf(RI;liF7u=SW{jL#b#G!-xX6 zp~730Z-k6^^|d-d=Z)}g)3fy|;iKaY-n#wBZcesYeWKU9 zgErP2-2SfUCDeM)fzA&;#4j6vw%~IYw3I0O)BNzz%DbqBl==<67Py#1hRol;``a zToTDBcZ-U~Y;Kxf($QsSScw4WP_{OqXh|cQ{Cp!BBY--D&w^5HNfRam}4J(A)Wt?4{XeGqv(WbiF?1<&~F{F$P%IXg(!o}(g;CfG1K8r$Fpy^ zV#-?Pgpxb!b9md-!o4~2198)@|F93rs4&YuWKpy-OS0q(1q`*{6s|F=j)nwbYQg+j zWUyv}0%C>Cxr*LyrgKU-|0A#_if%dwR=yy`UT#H=h6Qofi;=qz1J)*oT3Z#4ZIru! z9gu1_ZaynI^XNThK1*p7UDT#Z+a?@0V?{~wI1YE6j)*meQ!#e`Vt5NPo_7Nb* z9B>^~tl&euwXEPuES==PW&MR#hmP_K1*S3G;MkFecxPFINO%^)t7zftk@M`*LzfRv z4V?$q!tNe9b- z0uLcW<%_-sd%JrKhs@_@ARDP66b|u_vIkjkeoz6216+%cH8hM}F5KZVEXPh&4yM(Ql@l}Nyg#XXH&Lj!UiM#`>Y*D5WRBUmlW z3@Wtah?HmE!$lr0vqm)aJ1&$OM$V=;%>zuAEW+2&0-bWuja7kKoI=;gO3p8#Co5v{ zT3VVTY+=-A;hLxeHzI{Nppg%=R-8$od~B|u;*cjOh?CMH9MK^5BaJzP7mSG%nUu)$pCiDcfK)X z57plxhaG6Q9q6EjW6YkYX(|I;zlHIz6FH3#qKjVsmpD`_j?uvjH06}kqm@DSPx{52 z+r~11!u06KIw$l22d2PyF8 zw}R<7-v)O_i!7n!%<8^tghg`XD7S!4OI2C{>|WkejZl)tem{OvKt)%tYNw@WZSPiTY4-|xQfxf6oh&}K+Z zUP{#GjXM_Pw=u@d{ z3Ic4lV*H-~&%%NukKWMBaea^=DXSxTkxekc(&mp=&{$$ph!`1Ga!FoeXSKCP$qdR$ zm~t`?8vAX~&H-3^#`yIw->YGG=0V%Qohw=UU`19Q=M0C}eP7vKf$J^i#ULy6p2QJt z9yiWTC+*SzySqi2?b%T)^iRpzERB6^PB#@585wn(MVc=h`CPJiHn)rLClM=jWSa}J zx+D$c#5@HRF&?q}JENTMi;gmde;|3@a9gK@V82WC!EXQW>|a2pXPAwcK9|N8`kAop zGcaF%NNs-=2tW76-C+_QTJp1mZ-c!3@%8(j?4wMfFy$$CdX{ozv@THeN-{j$xnYi2 zk}sE+$=k(1fMFNkCy|L7dX_%{pY7YvK^fx12&z03wIot#Miu02==k$-d$u85Ml84k zZowPX<@$7o5|L_He_N-5!He+`%=!uc#s0BjEnNHVQZFw%Ya0T{rQ>S4?$b^vr4=4% z?QXx4Q4mio;}Y*Cln0q9&w89I0=@uVcrm*?3WI|Q#m6<%_Ap}+g1;uYEWN4Y^WWz! zF^hs&wD6-w320!%^5%zs>suq-_^mMwrU$+_p+{_TQ!M*5sZejQVle0Q=bihd+w||+ zw%IgC`QstM8i~(}2<)8FJx!nQm-4(K|JrJ$2s4fPv4c5YqIPSka&v5s_7N`xt&%7~ zYJ`R1K<3a!7|<}9HL~R) z2gy>!>bllW+3fey&2VFE%#$4|jEzV-A;8(XkkMmwPoTg;=b!>IF}l5qo-+5e)7GwD+%PhW~DRdShK*Ht>{YdW92Tw6%XtM z^|6CtX`_g6F^?6(|o`PbBFi z#;9p~a23(dizkXPoWYXw`~Lb-hd%+ay_!&pL&$;RaADkrd#DT?{&&?m__iQ_oh0ZA z+5-9Xa`DH;ostZ77;9Zho%zo*0)@^TM&*lpcZ`k(_xWSn&2gy8LZ3aw28OO3PxM+Z zp9-hd=Bn3;UeoPVTiOBqI~0=(%I)T9pA2wzgAVV13$6|--fhyfGaRls*Dg&M>sj@J z0e{;-Z2Z;SK45r^A-T)aQQsy8_hkU#V8$IdC8uz}M{-`GrNxj`!qDN=e$~B?ko!WI zU%f65bThdiP&{|iO@CB1+KE6LZAX~ z2zcB#JDK79@#+Ju#kRq*2ZoiuRs-?;IoGmV@4f7)Bn<-+b21We*MxG6zUTKPI~N3t zQUhtBNOe6yWLAfnOOT=#5OnmJ81!CDyLEjpo?=sH{lllhw@c7Uj6Hw6|GLl#(eaz5dG^1(P%TRze6_I9)9}_~ z3C`Cp-??8*gv>_J#ne{Sk)9})0Yq}Q>(%!8!*asTN+uoz5pj<+1DorW&l(QpfCeo$ zL0Jb?hmZ1ARb78?qu(fhw}?OgiMxxZ{{wG^JO~@HJQm#{&5)Z-){1#32wZ_RrNGlj ze^MNQ;O#n9cuO{ysGYy;|0iKJBlTv&TR;ZWJy;Hsh)A?<@ZL%mJOA6)h9^LZ5QE2L z=>ItZ&WzV(7PBiW60N!t*AMAmix)wn{+v0EdY1eBfwqL8~=aH zAIMaI{?zQbTf3LxmV?&i>4~)7g^{{fwSRlY=7c z*TNi-%`L$2ej=xtx2*c&*9T&S1Ovno#?=s3) zoMF=7I{>vB&{LB6RcGV~W>2(i!kXosi6f=QKH7r$;M0m@oBnsc=&;Jln|;3;VDx7a zIR65z{m>ZdQn{;If=H>1*}lKgpUZlD=8kN7Mq)k+ovu$<#wO}NbK{rmjR0dp%gcFp zMIEh+*ip-EP1zyO>g~}amBS8%*P-=jHbhmNBc$%Ob*pP`3bm^+S#ZfC$;zQl6iIyk z$zEy`lt3kl;zN(}V=QNAKX#WhLG>$F{FPE?wBdM)gi>t<7bI z3*4Xx!po0fknQ7X29R?h@l|Ww<^?}@noPBGV!hla1%p6Y(13)>Jm*91F{xaJ0>|7Y;K z##u@t)skLCcB4ZVpJA)39bkOue|xBh!;0J0sDOsPsqc~{S&u!Egl z=df?xsrQs7lI|;gSqTvkGejeSqVT6zeeBW=kbYG ziL;(}(xT)Rt(MP2ovW)K%OzdZkvMpt%mWE=q;SV-iKTX;rsx zr$)!SMIij)>HdOJpvCG`$)umL0>>MvlRC41l;mU4BP0-OLEIy##!MlG#mvm>RO+E<-( zFZVKYzdP6~>IWU5?Jyg+99CwHDzxs(j6LLqc;n6nYq1&|Wg5&?*GMOiEI< zl^Ts$V*n$Ehvhg7yD)n0l2t@KqFM~AP>h3GU>J>54LOcg1byH-keo#XorqjnqJl)8 zJ4WfPp`1wsT?pG^07_lRG=^0qO3cR~4P`Y;QbYU_id5~Awo}e%PV!_33Y><1p;sT{ zY*QW7-6=0diQN$Ev>!?x$SCHiG5!0wH;b86P0JL(iXm^pZ}sAyoKH(&Ee>4AG6|h% z!-7D!y&xc!$VQ<_5bS*z#%WEbRp6X6A;?v9o&R+Kel+^utqv9dkuWy6 zU?nO*EKPEdWpMg5cpVtCw_(Bl>j_?Sl$%K;Rh;D?CE!rXJ_8VuF4u_zAR=^ZGeE>b z^BKVX%m3ZqWIF1_B9cn>U$yk<6qLFT*C8EtA&h5ivuP;J9*1#^(gK$3q4G)G<=k3I z$|Imz#0nRpM8$Y<^UuZjs!gQPZaO3ne6C>i>!4P5%qY(97a;LN)7-U%Z1hJDg)3g za1aZi_cDezvGzkqqW@%q#k(Uffq22aW8uG@9bz96F22d<8soJei6PW~6%Rn|GX$$z)zAkp5g@`rE z#9r>Gg|+?4=GgHgL8X;He1LJk)y>Zoy<^af@M36}{pLIgVwshH27%Z=`IIv3FPGHM z*>krADH-e0quN|OI*>&?zXh6q(v*Gp>A35Df_UXtDhgME1i^H#KW~L|^VyC`8;Hat zZ1OVlgU2=b#)^x>=XrLJSz?x1cEg%JgBDI0Z$OJRaS>Ju*UO;dC?7zFOw(yGM7+!Q zOw%{@IGQ+PLu}t+N?I8dzH1?dS;SCP*LN|+lr9-w$b2yF|8AxV7Kou ze1!zt0R@DKYg8mI)^E+>Y24;nJ&rvHDH0sVV)jTgh%F%8VNiPx8p}zpy%j*%P#|u< zzvyz1wCnw7#`sGV!-D)k-+5nacE~qkJUpTQ`@?a&LBRVjPN{(RE`q0kL1y-uNODFS z+n{fccBcB05vhh`uhJrhaIs$oZ%a$7inT>Ad z*VD?)FSfqHX&&uI&yNR2$Q=@%tP0oWULN-+)RM6ey0Ll|;Fg67@*%mI6JVpwyGlWP zmNt<$U-;_c422e3%BW}iZ3ia|hV2y}U?$rm>+~T6Mji;W6o0c{8k{TcL%V&)?I(Fz zzgYS;oYX0A5tDi)ijQ+K^>-UFJtp;_5L8Sy6}e}|zM0EvhOb??LXUk2bqY|5)Wvj{ z*Q{xY6%XW;lsD&LO_0oRdUH&G_2EwzKsp>N$Z($23*zO5$;%zm&J`|<-p-UjPkeF8 z0?M~?N4%?a2E2zlZo?tn#z`lR!f=z@b z%9ziryXc~nUoDv98A@6SBs+0EJbaJqu7L;JN;mqa>&=82#$G)5{Bj#<&_orlv&3fH zsly?#sTxSN5>rmXLAKc&N5{WTK3=ne^kZ3hP^tevRJ~(#C0(?J8{4*>j&0lM*tTsa z9XsjRww;dMNjkR8j*}hS-QPLqj(dMq)vBtcsy%kixt{sXl7QlGT}MY_+Pb(mC=+SM zU6Hd#aOZyMGUpT($-TO z{Af=#^@vi#R4lABh%rq1I(YSsTj>D*o!6k`=wAN2M}fccfe7lHg|AuGXK%G*Q_+lxh+3ng`j#bVyuK`+GZVfs(_ z4lEGWmk!}51--u^EKWnKv?Wy0^vOh8iNaGsU|sN1RXxid3@9+&iXAbxq@kt`KSj5# zFX`3g<_tOrvV7A4w|udL9Qw?mo`wdAR}MI|$Gh1PQa4N3U-fDKK1CEu(})Z zK8;8x)&sqZ5rvpIw?D*&7Vdf}Yhxdl!m%n!-JKkQ1-Xx7olo1dUl`~HT4LObBaq6E zau*sM7Uy!>m^qs2E~Ix{k!lsDQpDb&n)C7w)k|EN2x}upvwU5w7Ij{lTb3<#B=G_x zshK*bUN$Wg(}&1s+B%a<2zZ80qY5w^@HZwyCKf`4wf(DdJ7g0OWc(jjOtPgnOp$UG zrZ&#M*ZgF317Ua?Qmpp>? z4w7dr)*&S%b?12yWT1Ah{=!^PnU=|ITk@OG04pgit)6>ann7BcEvO zUy?^upGWOD*%${JY>9K03$JF6!ExjZiz`|2!@~|rV#0b47K0XIW4iFnveUakL^sBb z_qd9-ZlSTpn$W%mF*@1vNv0r*MBW}LS3ahH5}coPxiU{|;oQVP6iNc+TP%|tqKv>z za=(_fz2A<9*>K%BjL2_g&W%d4!|GQGQ6gNwqrr**&-NW$Zod26 z;5pW7F?iQ4h)ZF+-SeTSfZpAG&F$X46Bvpz5Y%U~A(d|p!|^EmteMHv*HZ9bo%LTn zFP^pe{2tx}-;H`@XnL^tYpAabP6B&S%F5ZL&`Q44Uz(9WeCsq3p8oy7jeU%zQ~3+( zdYZ?0yQ8ubRNu>$zsu=-weeK6Hhlk7^n>q%@Ax0Czh+NHTvRL=$yn2Xxfr+_Iv4)^ zh2s>Q&g=_D<=f`oD@oMC9FcPu;Z)LelI+W>H7cv6Izj?^R&9fnd_MH8%HV=ffJoZw@8odk9jJj1y^1 zB{mbWi&xncU(Vm{tqAvOq}w(EG)<}T)pb}E)|=O&lsN0P5Z!~_N6Zs=PD$N>m0c%W zpH!0{!Cy*J_-8;#glq#vwf1?t_CN+j9p_PF7z@*c({EYesN*Z-ynFzn0#X*GA4uZT z&e_}rBty_JnI5G*r5&nnsi5AkMu8P_-f3>7nWCYLMsU}&+tD(6n$lSVJi5LmNDpU1 zy!`z&*WK;mp997(M{~pzA2QF=%DLOA7?RZ!tzyYVqO+8wSM=b_G)!BhGQeQ45;0ZV zXtqC|(#agk1dX0hlCiGW$%M%dW28x*5mAUQz%bxaBpDsJ7y-6%6>a}E!sISw-#Iq1 zIpE!pV6;&dW|Q@aGLFgTSZy;OYY>_J&L)~uG6r3Fl8UBEkw^FU$JDTetEM;Fw4Keu z<)VDXs!Ma{rv;CpRY|U%rO1md+ZFTk6_^0L!wU$@@al!KIsV#6eN@*oHY`SQVbCsk zXM%T|%2oHqF!oUrce2k~!Lv@%RFR2l;xAFew1f87wvhCa_RpK#X08e%wk+F2dYF3J zlSRos5Vjt_L-;un_B(U?kODTeSFmp=F@A-xcO0UIyB~#xj-f*CsW@+7w8+T**(zHq zqlNWAJT<&;a?a+T9>U0u&yxb7-kNyqhoVh2Q;^*A)!EpA3t)j*uQ$(0Ps^enpphux z&Bv~KkcS3oI)7&y`yeM+4MBQLq=U+qLs{YN5=B|J( zEnB~A`m2xMtlaJuQ8D~d7sp$%k(5M!@KPr*Cn6Ai17Z;|CYmbGA7K%q=>EG%F)<3d z#;s~h#{#svH4LN;;Rp7qI^WUs;i?yChq-iz?1k!I?_hpRSWQ|&*lAup!ZO2{QBSwc z`%@w6KJc3y;vL8l7XU90{%)M?;cwL4q^{o_zYdbo{FfRrT_8Gau@i2kv7?Gn^F)pf zNCwG+n8nEX<;J_Lf}}u1A|Sme{;2i*0!dh8McYMHdr}q;f(A-Wfh2%{*?PD8>N-RT zt#gCY_n!_hn3D?kz}feiq2;F9@7@X?hQS2Yr6){13vmA^*e#h>P1-s|z#AV|uKQkK zT_At5RuH!SU2Lc`y~pbOy&5V?W9s>&8z{JG$ogY*+~er7b_GINv$v~VS^sY37{X?5 z(y)lkkpXg5>#0pkG;z|<1@uz+ZJz`Tq$a7lij2iz@nl4QJ4yk>|MB)=y|#Rh`Fuy9 znjF;Y1toXG^f0fSA)QTSqz8v*2sDZwC%%-6fX>`5QED&IH|5$A3&&cg zIo-~)wJaD#jk5x$h_rV&!T7abxYN)Dq9_7Nb&hhnOZooNe4$nW_?5Fu4Qu&oD{sMs zj2%KkeG-}QWK-H{T6-|nNdV>G;<_pj|DRx#;Dd|&UWt3^pGH}zP|pzCgc0C8(cqs! zFIjk%*@{;~czjmq&)WuG$gu62RMEz$059A|#8qGXi0)0oxSM?EO8k@AWH_9@LSdVn zW=Y^^_9Gh14X45v{+jj*7Vsu+woZirU)Vr{yU$8|_#qT0oju5{dGv1AvL*$X6f3;1hFOEKY;RQ4(8;7qjPsFKUA zS9g!OS%7P@PK;X(qTOn1)!gaOF zhGwumBv>Y1ODVJ0T!Y}A#RUl%2}|I7c$e=(aG-RmCOg}!8q8kDAB?Wo!mGWlB@?z= zl$JV%K*_%>C_l9q{?O)nL<1pRTw1ZnxBYsJ8=AT-!VT#%3H8VAPP|5Vr%j;zS zA_}Gc{$$^wQ_0Lzl@f#rUAxAn8ET=^;=`(qyYA;!9h|Fk~G5&#C zn0g2yMjYot#;5F`)A?Kz1MHce%KRo?du;+ zCm)3L=~?j(l0bG_D%r=fPL%H3L8RlfV-zvo1s1r!@NxJ3CV%59zmG~%)_+_7`bJi` zuWRRQr%S<(ilm($${BEpT(2CTzT*3YFbWTUyv5N z4;B#U1{1(Yh+CwF~zHU3TO=%(deJfsqdicK-3 zZzLPzls~%}{4X_8)3Y2TX>h+iBf+w9QtEucEE6 zr{YY(XX7R}W&~Yrm-~^kcV;1BNsjq~f>trE%6XxXDC@`b1HlLi(2uUE^UsfteD!~R zbgdfX?7o{=xVrm{1u00M7^HN>(j&w;5I>-H;J!3j!5f)N(lSyh#VWNFGp>Llq$Lm! ztD3g$`j4O^O~|^|svO6+->6tbn!Km(P>;##HnNi(jeAe2uJsnWnI%(Fpp}=^jAPjj zca+sZvpU{JWrb%Dc52(5G)QIHJ1gryvl;fO+r$^rLszbga&y z3ibd~w~&-KpXeIg+2b|>nTOPX0ZoPm_iKWdI&w+nEFdTM1c6BEkwH-X4;lYTkG*J$c@;JTeZQ_b7)#qVF zc3Uw(3Fm2wOeIV!)Ig)hnJ-WzW+3KSjLYKePID~R zcP-#lf=mH{z|auAqCPT}yw`j%&Uw17Kp(iV(*{#6WC{EKrR2Q8wNF8lP3kTA1@{}| zRf&8GF#dCvb8RTXkksW$G%@PKC5o4*wNgG~=enJd{9qCaS%4d+3}lneC~GLkoI~&a z50ne$PwGM9H@+RN5d?h$VshlF@mlHypjN{Ur@u~!FB8q5Dz8;LhsH$~8+|{Cnl4(p zRI_2eK?fi~>g|6xU^~#FA(z4Zy6Z$okNvsP7xVj?LCYI$>I$pvE|Yf8ON*%=ir#Uu zD(!x<8Jfrlb7kY|+`Q28RF_*!?n?b4p4c5CK7IET7>xylrhzIl&OtI|Q%? zYb7X@GRpqB$A7(f9WnG!MuqHTMe2fGkfj4=-gx-usgc5SxYCSQ7XMBjsO?TJ*difo zOmfdd+w-F`!562*_Rtf8Xf@o?&fZ*;tS$_-6dE1sUH}3}>tib$9AyY6Wmwb4| zLGY0H0TYKgG5?g;tD6B9jf!AfyeaY)A$3-aAj|?*YKLt@e@bdSH|Wb?JkIWLtZu-* z%7T;Mo?zDRjXp2biqY&1?$fw)o>-fW)v+Yf((u0yawMAGm9#&Bt7(g!Y|Gig(R6JK zLDjYQ);0Z+>&Lf!o2a;tPYoWX-DM}MsZ9bPH4QiG1P;3gjNC`|yFpx+i=>`DBXGa} z1a6*o<57zN={SiL)e4B*VXO0oyJQT7brv$VQY*AN5DTk~fQ5KUZ|i8PtHdN23AIeA z*as8^Itrxu!#3hk3DT^V135Aj1w8K;8q^}0V2U52?6f_>de}uj+&=35vtq8np@8Dv zwiO}uA|`Q})WKOi=>{NiEJ%xopgmm;+;f7mvRI@xcj<{C$onG1V~JVc6Bfm1gVmZZ zBB8>eA+CN|6OeK|3R60o_HE*bCT1b85&VVY-|M3H%tV5A}qOuIe)`e%0N3Dd;{JH^m_*_Lj2~AUtFZO zEYensw-Lvvtb8=h(a)G~CjM0Oh3LRt=@Y6{p-VB0RL4F_|A@L*-Y{bW3biEqPt z>^ap}If+>St~X{vxfikd z6FkKYT|(6=Kl%j$+;sfAwsM5yH&o>W6#s!EiuI896zib)KgayQCWP;sK{L`po;DCN!%IZ0MzM0V77Z1x@?#|7sHL4)K z$zo)4&d})BM10X03!|nsMW1=e6{{D+#?jgp(ijktI|?$ztyV^L@iX?`+=f+>TwXzd zD@AH(;%62@R4i&4m7|KOBx#Hzju4T#jZN^87`K*^MGmD}%A?WfPgahBkQio;$37R) zKEZ5VFg0KmO-O4vtQ?OXAxe|1if+}lp4C$Qjv)&S&`2S~0yJgTx9pR(}_v&U8h*fx$2JIE>cX5!3|C;X$o^G`9_Mu-2@_Bi7SpdI0xYKb%vS>(}X z|HVkd+&_9Vg?N&;N;>cci{gKBu~qtnGP!cfg1j3!j`|6EN%=%G0md#QnG~&AQ*6F zm4VOWmFFGSU4l(S)nQKIHZ=XR5Ab3)p)+aO%`6Li2TW!BupiZrftJ1*Q@pYlc93Jn z1wFU8_4}LA|EUnO;EIn5m0g7X1VZmJY_+tW+#eP2wD@z8b(k;chu_QR3xTYR!M*1t zUo3TPG!nWrIciZkSnxI+zi!p(rn^fp+4>iSnV=QVgxda?fkSyl+T$yT2wK2h!}?Z# z*xMaL8sM-G6wLbzoj5=(xDPzHQ)<&`mdhZN06eiP&_D1IiCaL=d@cc8py}&JpGHmS zndY>ZWI+WkMmT)cvp{;e^cZF!G*gFG!eak+=vigqK!t z?Tuy(@zh)&U9%gA|0Znw3fVGD!q34bWWetC6#rXA|4aV3@p~0RR%K)be8c{a%9HYp zrG2%L<+YNa2c+@Z%rf+5go1s4T8;G1eejmbfP#>Hsqb_=XZ~KWhamKNj-FdTF1w)D zRbgpws9vgDxP!1mI!F@ZN{pH|0SYAW!p<$|_zcCKYk=)P1F$3bjm{Vq*_~Jx9uXtm z{WnJ!=b1=0S8dSKga4^ZkYP!}=Jj-a$U9~Od@*wB+7q%-_rnsvD)jsa(eMABeByzv z4l1sPK%$Jk|K`cmgBwIBmNY9*iaQeWlsVr#H_V(8Z|g}$g`d!bxJ#V4DP zs`taKtUuvWp{#_$c7{Y}f}sxZO}iOuyeV5h%Wg+~y!grph%Gl6x;Umr`}uyrz;^_l zy9=z8ppMy@mKjBMlcp}O`P>Nx_OXU=u>8rFk}q9$T_1qvD5FGw84JO8&^@1-NE=K1 z%_5rmM{3}EQ79A*>tASE0kfNTYnWZgfE^xd%o8foPT!RA1EX_dwyITAC=#%-fOGsp zGQkP-))Fr;Ldmip5Bm~bE63S9M2oA#qKP+IWLy^6g>KjTzrFxnJ8iico(trozTWjl z88~_;xz8^Z5=*(;{eG`^8}BUQA{$*YU z(_71Bm&jK9=dQhb$IcD_tahjWJmL~$sQ)7ynTf))@3psiPi(gDv&u}L&1s%={w?|G0-{X=61VZjE-Umj}4hgw!2_t^-{~@mz9}?VhW7~+D>QilBGT}2(?Q6zhfeEknH{GypGwbDn!W7~?SVd7SyUn5^dy+g zH&S3F7k$=a_tiJx4mv*_8v&qi9o9f?yfy8NG=q%T-N@xi&G*n4Z6QR*1HyF1hy3$k zx_T8d>_5Xt|03D;EcSBYXkRKPKywKa-Esv(AzhImG+@$yeJ?gKP=_or$>b!?QZYr{ z*pBtt${7p8)NDZwgI{?A?y2-9+_(P;YlC_QL+3Ovn^cKC&o%x(u5Fj!mX8Oh8Mt)k?%l5av)K|`kuO|! z>N?+VQs2LNqBcja=>=h&V4H2XpFY zMN(@cqe!VQ&&1pu@H_d0|2)vV5(NQ;UEaq1yKwu7{u$_Kw4IpuB+Kd`s|`!lm^mTV z{w23f?!woTO^B}YKEKs4tdFwWidK=oeK~4F&e>20^7|e}1U`v+YRcP| z7aCqDuB(FF`LYyUcYQLpcLN~L5at=v=&WY+qR31z1d5{-VZiFkqL89bwUT&AmHV^E zIH!5VRn%lz3ag_$3CoB>AHpiscF=PXIA zI}{_i9B8u_pm&q~3vL@&g*9->3(@vRJoN=)DwwplbaZndZvO+gd5m-ZX+MtTqgaM` zcpTV!$iL;pCmUi_UI9%q`v zo=Svn3qA|Dor*lkvG-pP4t=6H%9opX>_*qY)qxIRS zW0&7X4v!IPaJ?ECPR|m66;8MzW2|vAiQ@@9Jd;rAlsxeDU%0%WEOjPIiq5 zM1S=^#H~JSz@5k{GMD#Iv0iIH`%R<(r-I{I34g_N%rQ$tA+?mq`&nVnseqVFwA$GN zJHURvfQYO`MVSDTOw>>^Y7UzK^(`3!m5%q_EH7#)s!z7IL6`(2+m7nHBp)prS&ws}6wqUN=EEf6*n!h5^ zMA1vxxFF8;S18is|{+>qVyZ2>`|(a4##MJP08ToyW!I{TF!u&b&Vz+U7D z4rOg8Atp)!ry*ELy+&y=uR48=8=1eNVQy3#IA~#DOd2$%>@*Cp-}TN|Udo_7qufNP z;C6L5_!|w_6|cJ@Bf@4m;6&V?&u=c?a+<*6B{pQB!udsTZ{#!7piU*uN zOsq+6C16Q5Z~zk3$Fb0uzKjRo{uZDq$2AX!$_jIucqt=|uc+EhhT`xN^H;bD$KC%5 zog`Z1Cg-n!FgU2WEdVAyY90)gEntfWPE7j|ru3A~3=uNjg@=WgGOXLbffRbWH2wu| z-5;O6E%;M_r@~JYsnLE!YvRmLBW2?XuRLrDYy{D9YJvP;Yada-9pI@G=s~MyS#s^{ zx=WhadthgNF_QsLUmeEGs3DYp=d0#t`UxX49_-rFRmPYFMeRn~FSVEwWBBE4}_wh&Tf9#9! zgf!E}QZr%Cb*gSD-P}2yp$(i z?SRi_H5QZz$h9fR04I2La1A)DIi!k8swOetW0{5yGE$W`U^pY#M2{mlJ*xs>Gk?UB>EL>k~_oDp>>2wfn?wcT>)d zNw<$~o6=#WGCYl6UgM3MUk8!Dy5OY< zQ1u6#l8^h~bfBm8G&<~OLvs(dIgU0T-kg|PPUd20okj*ulVSPZVZQP!0R4HO}&XfwKQ^4or8aLo9d;?1- z(6r!jX<~pA0i&KZuGL#NCW~&WHbXeD$FBkS8)aYRR0v^2vjf*hrCbq1uAPG32$B*H zy^7Lp8#cmc4)toVM=&vm*mxVt!?FYa<5FOThC zZ#PVVA3|G)>@PZi;?*`Ex83~tx^4cmIlX6iZFMUs+71MQkcM!h#g*0&`n_?e)jyVvn zqI3u?uBoM#ucm~c1ECa;iINV@TMU26iGZcMIt>q&mXoVX!i%VPhWi2Kk13p@XsoBd zp(=ook0<+!&eJ9u9ff9PTN_HQ)yB8K!!cszT)EDH6c9ZV+wRNOL#`k(ZU$*)q;C(w zU^+(*O(||o+70`Rp*uDQB!($z{*csWiX53wMce^-HXi2Ozcyw?`YL`6Qz{tX*M30KpyqsfqXSyq=2h8^r>qhvn_1eKK z15wp}dnuleZ~0pKEcP`iWY~5P8+0dOU+o3uLV`&Tvts( ziy+keS#4e9UrVz$@_1%r6W*p?($dqX5m!hNzcHYq=jS0zAU4!48kf&>Q>!*N&A(~};JxHk{gkxJ9!Yq{(rJ|6529fi39*-nb)XerE) zS4+d9P@;nNz2ce2l>^QmC@+MulHWnfu&tAJcjuGJwMd2Q)8T}onjl+ow<0!bhD#@Y z>dY7FYeA>!(&JfH==+cWAR;MikmTuyzLbJl6@rJ@5QoeK`Fs3M#T-j06m}Srm@XPX@fRQo#_^|RNZ&5hI})q_-n+I?LqC*rxKz1T^ZNdV*<-S0@WCLk z@>`|M6timWkkfj$KCKplamn%5`6BbiPaxZ7VVm1?VfR)Fqcz9^_%TVutx?hKf+97K z)s1OC4*PqO9@iKj1T{X%RQ)Nlt|-wIF^0XYY;-yM&Yxib3)Na)A^Web@n<7+N)py- zi^$ZmYsSJ$uZ6yVsi{(5ioF&u-SSBa=RqC9k$@uGg20~+em!rfY4`YCMw26+FVHC< z9cSO0rOxAWdFq7b2I-;nJwTK%!xn%K9o+IJZ|S@~7sAJaV4__E-tAzH6<9kX5FH3Bjwoj9Hgep87g^rLMz3GXBsMK8EYoc1yrmv}8+!$#5V*?<=i!&z zm=un?K;#Y70mr(y8Z!>y{2%fbC6Uc#D{&ym14*+FGw`!Y`iBkfqeduaFuOomH1+IX z%2hnGmN8D8lPO!X`6#FXTQv#zh#TZT>OIy1_DFWv=@Lj-PRZlumCtvWSq$y#L5$XX ziD3k>RH~jnqfQ**MFoVdh7b(ecgZ97HoWMJo41|*ZhOx&7hRF#xW!6+49=}H-Gr)xz@*dDf)SR2g<)s?evoe4Vr4=OYL zlPc-PTm>IU809cTPYmB_CQ$@Ke#t~UEn|luD2ed!k_^$^SyLdf+L6VrDP?jvm^hH& zZWAc6=J2{fB^xiyOb_?hcya{eGaU{9{pyQmTkV>w4g~-LG>zUhK=2oji4CNZiU(oI0 zt~gG08}&+vrjtGSI<&Utwh8ToEYwUDr=4B8ErL=vsbSl_q0@ich~%P%QGxOX z!S3FeZ1kZ!aCykdd!TajiT}upyrQqzLATEL2u{&g$)8r~?4F4-PdcG5p^uEioj>BX z-lUyGHGGUCn<$>RAE6D!pt0P%1|wYs_`_m_KL-yjf-t&xe&G?=m#k_e2@zT=FwF?9 z(Mc%MxOJUh*SE@4&v?NN7+n6%G3^;Za4oq`Uop`Se^8F=kk#(H;FApkNm^c3G_~kS26QzA+c9Ag1PjeR0m3wj@&Ua?D&(6(iGXToKOKcV z@QfX*|M#d8RmFcZ+;^NX@+oVE(lv}arDiN&9`~jMkz|EwUyz16q8xMg( zVt}M-Cr}^LGMU{aQ-JV)ll`QAzeJZQNGaB5)~;PYZwbQeFU#-7^)Hb0DwZ5lQ5zBb zg5WK!UpW5FU%Q(7>Bi@FPGwpgzWM^>+W_YyT6CF4iM*&^8u3&7Ipn z|DQBz+w`JV7{I_{_EjT6z=ID>Uu&vjBz1jTCGqarC_4jC z8GTuXl^3M^p9CuVhly3>so&C^k{QQPMP0OnyO~)wQc)LBrIeD4Pu4Z=Qb!U5jaA$u zRiC`6xI>|fctB3VgWV*RYExL95r1tyN=-+Ff8o1{nUtxdwZujU8J|yqiVwybXd?n* z=*x>Qx7?wVgYkBh?$lIM(9>CXdzceQJq?j z@X(LG-!CNmHA_~QOL+fKNQg2ycVeSzxYwxzYK(w*HTSt-9^sKQD$2KjUKTs27`VD1 z%15HdaPu#6{%^h^3|#RHlbaL01_ns2s8GFzs?$L93?%57&1;9>j%!j&o#4w;qUcXb zlJ0q2c6QSPZt4m-o&}&9ri#bXoKsyIsuQ4El33_}$Tn(20nXAVft`&S%)}ZWcgMo6 zL;q;>3K3i1R;-*m{y)37w*nn#z4Oe6lK`VqLg z=xRy7=CA4*tYbr1?3|JKT?t1}-Kd=~H=mSxCa_6}v4%X!N{}k}0t+-OoJHSOrPv$E z>;%-yv|sz+x_QeG_}ascx>IT)PM10mvQsK$v+R&9J(opK=efXf2Xz)?3o{!umK95@ z`(J4AnFLEJC+1lq)ed$1=N2i9JL?IhNle%99ws;BQdWE^2mh?I+G~Y?B>RLm%D30GDI6+ zR|1vv^$t2Q*km#^Se~k{9+^6S1WY}#$s&7rN~URyOA`vAR{hmab8d@`07iYA7{znz$_TwHdd zYvnlm6hfRWbJ(%BwJ_`9-y$YC8rtI(mc_K{{M*_>Sk<{e)@3-UEU{31YO!^bU4Aq& zRB_KhE2yK|gIx~g99HG>h>Gj*x)^J40hcpU$6~d0^I5V0Cm}0&@h$9b{;9$zw`Ae< z;jZJw|Iv9<5RmyCfN}qHpXc@*veWO#rSwdlPkf5a-nH?t6VG5*v<3Z$A0Ovf?UP{- zn4OwF@edIA=ou2caRLYQf4w1pBn2QswQl%yoTYHBNA@6Z-sF_TboC4L)_nP`_c3zC zXx_?xKtpfYcYxn_eHC>T=;nW}28#feV9YgS0Yb$^qVvn_6TamRtXM3$C~?Hjq7+B#{^P94~q zXZ=f){ zTpr-&A{%SqecN`pva36Yn%?5i=RFtmTY8B4iqB3W)%r@mE^fYFruJ77`sybG`ANCH zW*q~c6UqWVF9JV5F8X(cABc2z1Aogv$w2}F09j4*Z|D6#e`B9HQeoaC*eFKS((H|9IEc_w_#YY)2l`&D^wmY)d8p|MHKo^{8ih)79P_S}|?-Mf{N`0`;}x82I{} zksybW=vem^pF0AlW^d3Eyaq*l8Q|RS8*s_*cso_z{dKe90{BXK_E2y+;%qzh z{ebJw1-OuN_D_rDOn8t*u-5+!^bCaND@|4FLCOx7WNtnbgRWLz>ZGN%<`9>{fx zH7#o1Wb;J@5kb)dsavsKz%nd%{)3K)+_Ynl+*D1S*u^Am`*UN~Q7Lq?7@H{4N1{-W zQaup)@$GmkroG+qDUQ=m1mOL!wYRdDPuw`)sZ1{H|9SpKqw`iz__Q)lS1^lzW4qcf zUaP5VxRgT*%_N#*C*9ApmWV7Q_p#&5GskuzgxmDT${04kd(+>)GXJZ0!Zz-@y;U;s z<@rJ=e8<16C_tOo=FauxvcCT2zMsq2|G6s`T7Pt?Q5!q0qL=C(^5b`}txrRHukXsk z5y{Imt1lQ8J=W`9`Gf_)zU__{X!1 z=1B3z$;9c&kGuNg-&)378S+PB6YB8^F&tZ=U+w;lShN4;Ey=5Ou|^O`2JuzUhA238D-gaSWp z?!9%B1wQU0e>8o4zQTajLFE1J=SM0mQy_9fNoV1Ona}?gmIeN*3@{@YxOE5ldOSH7 z(WLGa0fYSN*Ck?ra!iCs3}0y<^BD>d#1VOCwYU$vp*Bf`5g8(}6+2Bp-eC$&-BsL4 zYc0PC#TBRbgsVo(=_9tm-fri*i3j1{`xT+O+3)wY^7VPJ)3xaAE}SBaqp~BkSeA7CcVAh@up8$I`5*S6vn1`a0sT{8pepaL5Qhs zsHauz?NyP_OoF}=g-`xGQmi+rH+5~#bU+jvL#;3h!38JvoMd}D%Ht&C6}q>8uHUt_ z;OleYIq+r0@N4Jh^L>$hO3DB#5HL2>R2QJDArQIK)7jZg^z9&TwZWs@R~OK^bqOk8 zN^uD#zx_7y$Xi83TB9l7A)<`n(^P>tNL15`(--*Ogv=!!VB7wQE16`<)6pj#m)?#c5{BA^M^P;_;}>=L4oVE&L7ao(&-R{BvQ zY*e%kjB@Jb!j2pa@Sw~73U#GQl@>T7VHWs(F?VasWMqT+)vW0l;B#x94j6TEcR5}2 z^Yfk957asrx7`CsO?15ucs@1^x{b^`U7WYPN7OFe&N^<-&UXk+Px0RExl;b{Abk{8 zl&}7XH@DS)1GLXxZ^N>GW$p~1r4MZbbi${X4nhLp_#yP_PWHbcyxKfoAKz^o&AF~~ z903vuo3zpVpKw&Q+a^dqpNV&dTp9C6?3$&p`>-g`<8)#@pteP!`n1ErE`BYGU^{i5 zqLfZ+X9!^41WcE0EBu~i*jU|Quo%ZOtk-yE z!0GE6(VrRF5gAH|qHEL0*b?r*`7_=vE0k#9A$m%DVmV zIs}Tdv&Z8hkaoBWqjceD0?LGA3g{X2JVA~Q(Mkx_7yWK=zfwani~afDK#y@> zQN1Kvr@t<8~9p+p!Zi&QbfVTWia$TsVD5Mkp$q*)8rc zREnG77WjPf5vp^f4Fj=mFv9P+)EPvPM(wXgj?gWi2mVC){4gMOI&Eui$IG3(1u`TE z6Q}<$@`h$A_ORcQ> z+e6$pN;J(9M{HZYyNmf*TMAyQ9S<;3@_E!Yb;gCe6N;f#F`Ivt^okoEg~ODG6>B_!XUv;j2C}fJCNh(noa=+GQna))VXJ zU0;4XXCehtyFQe1n;=Ic@#y-EZ*y3RkRgx0QJ^1$Dqw0Rj@5RDfOV7R?1bZ8I3i{j z1LEPctRAwXANT?yvNykd)N(TW{Jr0rA_gX?0D6FJB#!85FM~ci7;bR=4}L^H5rMFN zzxR$4P!7sdw&;_@5>+w^UAqXC432G59_{W_50~8xAs4S;p4Wg&^M17MA@#hhY_P-K zF;;QdL`k0XXTRKJzHQL3K^n{LcvO@m~3IQau&UHebUa{dug9=SSvn4*F z#zLB=O#t7P`NZWW@bJw&{F%13OYVaUXGGy)IJPw<&?v2xLK4&%WQ)V}mP0+_sInoC zt0z6;@=~IWR;M~!E;Bf+-;c0}ej${!hXvces8_*6=VteytkQ|79&TadJ&xfNSs`03 zHM?L$Q4q3n0@S;&LM@vyF#Rp|ogSC8IXgROS#K%W6ojohu=>qEB4ERkcV)1n3KVHz z1%pvi*ZP7VP{}|jxWx3GKFPeL2VWB5wMS}>HCj&+8uX#g_;QJd?3Y~>x9QI z+I%1F0vn9z6;By3_Q7BtZ2iIAj$zSx@55v_NoL|K(oMtGDWF69X=quFC>QrVo?yO) z26-evVF&~+`o@3o6gEkc2&yl7tv9h|BL@z-MvIc!DK~k=8P&MB8!4(p9$O03M@&8h z?>S&Y3OZ1A#PH9U%Duel?KcK%g0<&9NJ)kx$fWQarSe~()Rz=rwUQxUD0wk`y;lel z2@TRe9~;|z9~U8sBWhRu$%U*|opnS1@CP={=iY@iEJU+f1V^4>njce)atakA(0;Igik?u*Qsv-0)pt@u5cC|Dg@rVB4Kmu&znW^(2p5UxU~1s=hk@b z$J}{ey^PwZqSwr$(CZBA_4&cwFu ziEn=Y_ul)ZPIuLL`b&4!##(!A&i8d!-vtJc?>BRsS|zX$L{($NiI1^tWH%?0UI@7*d^^%`Uq_wp3=0s`(d@g{k|C z;y4gunCT~C<&>7D9bayw-()f=5vvsyU0w)Eo3vb%Cy_G2OQ$ecg$kE9k~x+SSY_1TIqy{xZ7`F11wHXy-h5nbTA#TQlS3Zt{YsTXCniuhd0~fYRad<(u;T3qQW7 zBeNr|afXlTHEuGq(MLTqioma{ji;O_z{AxT#9s(w89I7#)KwcEPGcWFr$6Dqk1>P~ zhbkCf?}Phe(}W`pWFL;(drQ{)*JIV?4`_l|G2eL+-c@oVi9pkdqh{!-Ui|4GB#!T% zY<+f1QbIpU)WY`TwHi*$U=2^0yp+qhPD1HU$wCcha_rVAFwppWtd-`xy6>$_tRemu z2IwhpW;s?JZ>#y;In7?cs`)(~e}G~#<_*zFe{CszScZrSd+#1zx!uV0<6s9M%Y;OjwY*P@Je^fv(yo5)4O=p2T*mqeL;4U75fcw z{w{(ZEhoewIC^dUO+B?-FfZUv=zX6L^RG{PMUEgRJ6Vw%)YADkR;5|8?hm zSx73JLq>!3el+lBW?l6IKrn+a$wguTmL$7*RW_t0RZ!Th*Ynf8)BS2O<3wTPr-4k*X+$P24o85B%V2=Hs4FHgcPu*kG^y%gH2? zR`KONx-d8M102(d2)!>4MGYOgy8aWRkv(WNWEmawdT*%?7j6T0WKwibvbPYNyF^&~ z4x+GG-yPaoI?b(ez^-CU!HyGyaB_4O6H-d@us*XaZ`NN4EO_!+1OiejnuWhxgl6Jt zH=h>G*3Gyt6pBAB8*&XI#3VY=KDK#(_^L?4rLm0#+6~%1g>pHd<_;mG1`K#lqdWPe zq&itZ58GgU#sdMMrXdBQgI*fw4d6abh%vzc;LWe6!4v>~om_b5=g#8`NB$vRxts{PJ@+Z+zfF2Oe_swnjYP1-N7!V5)M#hNQr|2qE^JnFZM45Y!a{MbfGeR(I5 z`c?Y@~qQ_aE{dv+Z_)sek8n z@`2MfWkKgs8Q}Ar>d!{plS+1^QHS*R?7{izxnuQAaS+_07;?Ls)#t+39C}iC%5w{E z>1|sxdCx4$UAg&N^3bN@TQf$D9p%#{y+{0kag^3Ja4I;4ScgF&JAx0Cf;?aZ0f6f*_HQilJ%Mc@*pb8Oj zwWU{P%uu!jYIWv|?lepkBC>3Nc~CO~@?D?Rv`9~Y6()SxdUHbX5o9>8OaLa7PYM<55H~}n59@EV2Lt+O2#T{^ zE%4PqB{pn&GmA#GHOz68*y3bd+|@yro^S>9lhHH4sBXDHDS z8Wb!Q2HhD=sSwUNBpxOW?OKoGnhGDB1#x}Ij4D}^=f@H68eAk?U zwS6NzeuYI7i*WK{%MkD0Fmm!~H_+CPiU;buBX$tAD1{jd>^26+RG!Z$I?{W<&nDzl z8gRa~#j2l-b1O`155tGwJ3_xGvz@f1&C1_ONua>7?$)Epp<101uP2vD> zvURJ5to6ko6%BdeG^PA(6tX@lEPp_}{GW>q8E{Sv?k!o3yxOj)%ePL-*qW@)b5CMK zw=r%KNZe9yZ`Urz-?D@GWnv>7b2JJG+ddM`nTHd-#C`4MO28h3HV0CS+YeDs9AxL> zB<(b-b%+Pok>*#iYaH9q-hBy8HtDa&-CQV6D6=kaDf+(RxAsaLPk;uxV96j2=`=RxD z1L^Y^ws77s656tzvtn6&Fc4{Lqn+&0=@GF!v&BnGhdoyQ6ng!2H?ZCFC1RbIvuCSz z_4RZRQiXo-`1ApeZnNO&I|}95zRt<$s=ICDfEvy-E_uQ8W9aGWu_0EO$>?U=3SjW1 zeOj~biX@tcYPpCw(IOAMONJb)yvyVAIsg95jdJAM)d{R^1bRexsD|DvwJwT3I=3XN zzbmyKkNB5!WVdiIQ?`!mSN~1T?Q(Z?bmh~S=4*(vy5#VFKG&hGb@BCi-dp{X={;)l z_{H!9R@zI%pgGJdcpozu;99|4!k!UM%=QAMIKug;Gj5}<5OHS(A|GUvA4U3|E}1({ zSof^UCdW*t1{x?ZMVF`} z`{x_rJkrIF1_)fL(Lmz_#}qQVZW_Uf<$r6}JiV|}r9PK0d)Q(&#t7|VNwYM0j@+*T&7dXp%GAWIlR%zHZOJ}6kwm}) z^}yT)eVN(f{qDC(1MusYyu2mArv=o3uE(*5@1DwW_g__EoAjeEU%!_Q@tiSYGIdZp zV8v}Knc;Q&;7gFg+;9yv)rIB+M?ogoD zTv2s(mz$SOW_)xLbuzmI;WidByEhCN+_|EF`e9? z{PRg7HHdp;?b!-urR`r{C!syr!e~z0+0T!Ob!yd(sb0zE@U9JCAsOi!%U5!VBM0;n zpkQ<4&z|dpo|$0<4->Lr4S>u(k>UCLntTFKA@i9M|71-4P=GWP>E6l~=c^601awUw zN_U`-UsXDHPd3)1E)va} zK?F#)Ew+Nh6u98su#Z;X(!gx>HXn0iBnga~`=PjsPMs(UrbpWkW!$Eq*XBAHg#Lof z5^~yJQA>c?MVw!gsQ(gbxgMjSBD~3L2P0D8c8-Am<_S)-_{b(PkTrzqqq|Kw56cQv zgp?n)$btg+d7w!Q+L1>S5>!E+dFUjoS0_`8MxYZI9i}e>gMlU@1dpb&yR*j(EnIcT z-^C9gvunJ_&$~)c==j0|qR?7sT4mDHd=Ma@T-%E{*#W-dJU9 zrg3v-fr4|zo_p1EDvL}e+n2CdW;On5b^m$U(BX>eEQh;}c?LIOq8#n<+wM<%Zf6}| zj-$^c`Rzla%FRK71QC@EDwr6*p~lu-%)1)tEfl;WX1H%%=)8FJAWpb|0AyYZY3@w$ zd>jLNek-zgtYbKo)J(G^mM-o9ftvyOo}giOxgM;!E<2h`S54m<={QNh$ za~O)j1sp11#SE$ovhH28Yq{(5W%1D-n2jPbvWj&ZfOYyUD6rM7b3HqErdwsuwXIDk z(#!Wncn$x^MWgmL@%3_*>-(|%t@C>FNPwcQ*j|SfYc_Eb5ChxoR~ssLYhc|xq@#ogGpa7T{K=RRhz8r zfE*er;T2`WCzZ_P?r-B2y_}w}BTrz> z-Mq@!qdcF?5bWuLmnLB{{lJ-rpQ2eR7$6BB zG=-j7eXL~me6~d(1t&E3LG4IjUd-@{nd^cAtQ>>|jjXXZO+kzvpE?+x-3%1bG+uI8 z2J+wIX7S!GA~|kQSh~2}e0ZwFTq-yXIpI9B)|^gOwkv#`^c0CPxP{hZCJ|QQ>>uuD zOXF}|Qbr%xIBnCjE93eSf2>RJ?p)|S!2A#QUyT%+gCWrX3+~vsvf$EG$lhW$=BX6^qB!#M zi(l)!MNVceTQ9nnpM+c2EIlhegdZ`?Pl1+8`LmI9njUBrR8Euj&foq@jV&2XwrMot zRmUnq+w~nNK%61~4f#1&pou$FSMlvD5+Fz(0t)8UXG`N!K# z(9=Tgy``D?uQPN*nFFr;0qUrN%A*-0o%B!~s1oE)tJsbWeFp);S8Nhrm$)oXU_sko z_xyLmlD~w+_j1Xy(nr~_Pz0oR00KIO3b-OlDxo}r#b0u#zX?R7Qr$_)i>Ck2$1k|2 z@s1FD611e_q{^Qaf-yy+mYyOI_}&MB_=*`1O#b;O(n)JYPamZm9H7Qd2LOVu72Qn{ z*rKX^Dhd2e0x8*=uR9aY6n^ch>W9}7YW%lxSU*e67VjU5Da7WemGsMahSnBAv-gN3 z_~hzbS_Q>fA!SnQ5%IAJ;&vXaud2}k%in`yXI#N3t#nUK1H)Gk?eMa4T>OSWA`MxA zTlz=(T0;6rv{*4g)J{6?*a9_KEPtyP;E%*Od?diQOQg)OOag=tiS7jNsV~YGlu~4G z1@F@VM0#mlCZb$3sG!A&=pQhL+x9RA6aMXvRY6P2dsZPhkiR%_5}pt?Nl4uzy;HY*!=6-v6)*DQE|3H z*ye@)y{S3upABGxZ-sFyn$V^K5F6zBL5wofeEGsv+@BA!u-F<(sYO0_%XiwX`9wh< zrpp%DR}`}GCGCMh`X5@1O%7OI^NgI@?*8zd{d0P5pGBCrJ~$!9;-6%O1~k&GA>LxH zX6Ua{0DXCF8L6tu&H6Id)P_i`Lyg5q>Qh7*34C>s86gm}0~%O-P;rGatzlSr7^c#w}MapnwgWp9?IRJxo?z0twN?1GB`z7=tc` zl>*5e!>>P;_@$XnB=j}KL{aRXkBX>`eq3CpX!y#(=P%dnKkC4na>Pe#Pd<4FC`|Lo z4O-Pa&j)n|x>;gCc*m-J6=i|y_5gcxE#%d{fBQIj$Z9iDS26h97t#vm;CZ4zTWjn0 zok4;LTE*V%2kBGzV;;<0md^WObNOSmfL?IBF@xf~?O|LY)?jY@F1xi+pKU(Kkw2+H z$1rLFzpuOVcthZ84#I;F{Yt4+yrLb6peTFx7=w4hwMX5w4LUd{FZ(#hB*hAxvnv=U zyTJT7iAPAM^Q3VUE`9!^7E)<5!_RuX;tg)^hOBLB+m2>fO2%+-yF-^iXYb;Zk zrd}G~LaKVvXdGqyvu=+L{BO?1Sym0eLxwR~9^3TSIV;6W=K}zScJhCx^Z7jg2A#++ z=l3Zo!U{Qvccp?Cu915cm?lZ^86B^Sc1QaOPjGD+!u@+F>Q7Jx)mb)hMyV{I`IMO8DH7RN2mKj{wcn+^+v{#1}$&gxvrb7$wWMK(XwjxS58I+od?XZIBKba6% zXv0%xswP`?wqXVL1Q5S%4s%)(gMx13+M(um)4Ehv7#7e@(;$m{vkVa2eJKFRtM5Ve z?jvGUc~Y&{Q#V(sP9uj7?PAgdrW)_SfMv1{wchLrF=cJrmP7#-_S01q;J|dK(z!>c zAXN#y+X8wKa!jpmHbha?J5_J?+=>jn6{fGI8UEOM=kQYcAsR8bp~oo7x!k#(^b|yPcLZDVhFkEU@R%^T;)?< zt-W)kw@Qm-zGI`mU;`&8j<&;0p-lfb!lj9RK^J-RQIMu3eVR zUu|>XPeL>Dno;fXy0~d`KpCEl^TiOQKk`#jWmC$m+o;2<+-i+zMQqK@nZ3Ta%D*Uy zqVEpUthgc|zI2AUlG;Y(1DltSQN*7fz$|*-%dk)!gb-u4m{uC>H2gNYw7a^`1)uFY z#7ydDWREV;nUz|oJx+AqAEeRHJP*X(&4z7{cwBC;J3sZx4j6cm1FM!PAT{MlVHu=2 zr3fJ^N1%lVg)UhlMIo4J?iP@2Hw%r(1;%3=08|RZhc-2u2`gA5<-AsxEED68w@8xy61Ri%>a1 zOg5K8-sV0ud^Ft=ZzH6gj__G)YJh&H0hhc67&3H%*G(6Ib1FXzi7F1Im^q6wX)Qbf z+Q_2RR+UFB56$HwCiCyd+0E+rzN*vJ27D%>InSM}{Q(gkg!GF+mSEuEs7{2cF%NY`=xeM1yM+tm)aeDw`OAD4QUJE-}p&cXCnOT>a_f zg6k$zv2JbUO&a%J8-e!KdWA~!V!D#l7VZFL28HrX{C7* zbfyfwv%ZJepMUhE>Z2qi>zVC>OUO_HJRqwDS#(t?SmB&kj0P~QNt%9y(-^zWc>T_4 z)f20i$-91mpg;AQ>n?hO0KJ41tU=C_h9{nt=JwCGXM1S!96Ha{)rL#D`e45AzL*NYb)^S7xD!H^9^YMAy27>YBM#1^{PY0pOuOyZ zSFiII^Vu@vxVsPOltYC+s~!^kBWv5JY5h7dcrQywMcBXJa>-T0*Bt}8rn4?aXDWBs zyPSiekiFJGkncOxjDY}1o}XbCN>H>NIis80ylYJEUuAIFO5g$a&%5fh&<%~g|CY=; z`x_QW;qm?7f1B79N%|1^ykh>YvqB4z!!(cOVDzsD0DNbK-#GsHd(?J*9jpU z5?@@PLYvBNMEM?4^U8JbNE>sKz;_q2kW$C0>7Jk7$}j^^#IjbN7Z$T%dg8!}8RV0@~ zn3Eg75(BZ8JeNPdEFBe6P^y4xP{zbRUBClg zh172r+u$nz`j>uxH^3r2Ai@~jkcx_G8Z^b!P9)V!w!pwpd;6J9{$$x;>Jw{{M`iAh zG{$X%qbd-gHA|@>Y90u(FDHdh zE^>BteA|~F5zI3BX4vwc6ZP@(ZPNnXRxX8TQm~?nO8wNl=l^6Pp?094;~>)_t3a{r zu3^)-!cQZTw!2K@Y-7>ZN(Q1J5GTTB>hZwtIO@_%!C#1DENbe({l3OK){YSgkElMy?sGB z+*$M02P}WRV`$z|N4R*&TK#!n!A>}Wn-6;Q&dWPYyAlfaf{aT6mexPtVad%c3ts2V zo>@f>?*g7Zh!3L~T)y2PN@Kc+sx3ybziX|IAU_GQCmfVtuL|}6kD#yi zHx-3QHD}}A5Xg<9f{=@tmxsKtEk-3yAGJSMz8r$vM09iD$xjN?R>6;JeM|+0~|W zYwojd%*!=@ST00IEOd>>4_}8?UG;1u5C(qxv!ToN#<9%Jxja|TaFc1anOYaX$_!>?Ic7PMO|7|ZP=C>y@NaGJVWIWX2?7|}_ z7*$`lR|ttP%%f09gMc zrf50O4+vTjA(Akd_iQ*o4;~4-^~gf0p=AD1CS?EV_~$M=JTMUkwbAr=wn>4JM7CZECls=T`fWM}=tX|qjuN2J`Ec2` zXQ9H=G%J|?()~`dK4N@iht-#%DOOrbwfq5Q(tau_)S&U27CA*_1W(mZ{pCe4`4F`} z?CkF7>W-&!*&5L3`*R5|Wk?%DCa+Lt%Kl@@u|Ynv?DHUKa}^dG(u)n?^n{7uDxzn0 zQPn6|v&&lMe|D-Q(dci1vn`nHSSKkh>JR^CZ)cRu+VV71zxL&U-Uy~6iejxo@h2jr zaD!1un;ar!BNWR30sPtk6+EqHtr?O@2%lOb6wd%bEuUV&C5SU4nT!`J)kD1_Ob1vA z_SB0~F&eK-wDeh^a$?{d`?o}Zym+UO{b#7ZBQF~LVmzyl01r|;`*PLg?jYMz4R)1F@2AOWrGW6SmDT~E)~ z`u>7+h!8sbzZ2e;d(TPXGcRcHp@BkvP^+g9vjWXn*#ih92Ux)Yp#z9J5BE8rfEhS< zLQ-V1r`db{l+++l?D^bi(l{9i=1Kw0R6%&H^oCuX-$S6~!A~=>U<#`gA-`o&fHdDvZV76VP%qKe?A(o3MBS z0>zoU4bJTwhcoBbTaPtDKi`3VavYWxrC0MPJG+*PNZT53AMc!iVGeqikE{Z~`QrjM`TLlj3~!38bW|Z`VcinI&D>GHovV0@+nfKDFGxNxMnC8N zDD=x}!h-0rqJH%@`A79i;3>*3Y;q46v?*6Y$sq*GLnRZ{Ag2JIYa&1QqV9}~&Nq7S z4}TE;hDQpp>eKa@yW*z6l~01LNYbP<^RepPD+{zFY5!ZFJ~Q0v>~bekFk(+XR20Ah z`cx;VH-p21?tZ>$fJa0PrpScT9Se9^B(w7lkt>3oeYTus-J)Yo;hv%X99HH$&+V73 zYDN}KMVpwSp8P$;8Jm%*>_(Axgq{Oa!WC>9U@o^Ct~X9vdIRLt9?@|>_?|CKr^$>w z0GfEXlbPNM&^_Hjc+jx{R8WbU1o4#xD`-aJKr=}Fk3ed}nCtms3RE0$BtdQ;8R8eX8-Klol(Qz?nds%KNn>i#Mij2o$) zgQTcsbnQK4SAW+MZ4qDvZ$Y#y=)iv+n>a!?bTCQqBx1U*G%RxvLiwL0ikM$GhJ4*M zM&f@Xx4F(4U@JkX#SETNdyIo1(ZV4G@~Al)!Gynbrt4w3d7L6>QPc4?{zX#{0v!sG z;ycciAZ0m_;c3Rdg&0Elg?|qEoPhz*bWH$&S6{F^TV0BCxtcusWbdX^sY$HRJ} zdDR>epxY!b%O~yTLCYsD#4w9Awz@M5=6%=F6~ufz66;m7MvBND%2^rEHi> z)!6u&y`n>RXi)UzU4|Mb*afbBOB)BA`t%CRSe48``R z1~yaIBLeCjtv>WtOu(rC_{w4HQG!1L@wMw!?aVV#R(RAB-ZBff0yr*nwAoK`_EWeS zPmAp)V!;e=N;VIDpIqm4uuM*6J(IF{s%?MZg>qcBNj*Q5@Ts!tJLV<>h6Lz7&5vZni;Y2nJhSG_@89Ql*``5-+@4r9CVF;u7pWCvpi|(K?y5Z!? z^dg(7F@uN{^%cxfxK4nTpi zf~4~uG6ad0WFusRMrKKOb{Lz|47sTxp=JtKn{I2uH-e7k7`TzjEdg0 zD=9r!Rz6v8I=-FSazgabH_x)5rq(!!d1%;f7JjKy|HJ5pXkjX;@H^(>rO<|IR5bPx zu!7EccuN(z(Te9_Dy$^6+V&ZpVv^|S&zUED4Hzc#o!P}!R@(tysJ-%Al`lE(l$Vqb zX)N5H{wrlLSB6}+lKOb=(jXE>r0(WE##bWlFZo?Pq$ZFyY7B!?rkeuF&2_kj+#+Z# z@%GW3N1QP!sCQDWR0FRr#HkSIAT;zUBtMCYA~Bh8T0?51@bNe1F%!nhVYX3U&Uxf@ z?kM=XlhFVj42!gOqhmh3h5g9=9CBJ`hQ@}FQ~uP9hS1KU$z+;-3H@2(-k(fU+t`5< zp4Sc?bhPqKov(r%jnJn?d_a*+#}d|t53;0QtmNZ++v?;u%g8>K)Ti|YSwyEvspb)~ zg>cKq)1b!Z>VN(`K^v44{PW9)=y23)8rKf5YCM|otjjO1L}*8^bg=V1<#YJvV#0IX z6qI7Zcoek-4X`{uq97Dz{Uo2t+!3Im;JtcIvOArwg8=`3kxMBc!**=FV+4q*bL z!qdKIIB2(TuWjOnM9-YipbXDu@Kb!>#!}4slxq4>J^}Ed*ZU0JP2j9X#Bw9>p~jSJ zUn(FC?7$ydZF(y7d@Vztt}CU(J}$2uzT}*FnioDU`!Pyk*0*?aA;pc+D4u;^fElR> zS3GXP>9+jJM!AJtx?O_z%Jx)BXsdaIeJ8q*A{pHUb(z45^@-J;= z@U6mQ#4Xq7Rm(lhTcW$oaOdvV#&4@@;P;{AsF{57_zL2YFx%L1ph~UostmGo7zBDE zy?Im6HxsQ5Aq-ry8YapgHLAe_F1PK^#QN$Urju~&BKIrY{s?C6)fJ-R$kkS_C~}~yd`rkN7=Uo2iG5KXm_mq^Ioct)ZwuzA7C_fZfCBtdv%At7L?64=%(NSJ+FZ(^(`AHh260;&Mg_~jN zC9ooUC?Qn-n`D=jf`LS+v6fA|t`ob?p6O@2j**8OAh9IcoNsuTusSh7kbOR>!2ioP zRoZj-n|o2I@Rk|J)X>zLg!8 z&Ck=KQe--t8M*UXKk@4~xUXG!Lqh)lL&(w7&-I(I*!4&4HhYE{2!ID&; z*93NBt&O!2c=@&kQwipXx-qU;*wuw`@Fc>(-7&7sTPtz_+tA+C0zR7!Oe%~+usDx< zVVqGk@Uze#>~@V{IGoIf@#VZBY<34+UZEdonIrtqRIl&U zpPX3GZB!B!QO30?wX!cizMnWFfHtC@0ZT@tvY=-#utNMaIv+Gd#{>!LD7|7Lt@c5u zZ!f(cqqkNnCnCUuWhXro>GR5@zueQk5vro z<_NFRcG{nJ2N^tqE68s(d#%kvjXN;Cxs!Wuxj)fd8f&(70DQk%#lHgq{1TIfzF%+` zQqUIs*Vk7LZIA@RW|;6?NgY~BAt{G*(QZpDQzD}%qcr!WQXefEje*RBX9==IdrF=H z>jbys{Uc;3*^i~-m<1J?d!dIO`Sx**?||ZgAN1^C^hZrKdblArEBkl#y^^EQJYnY9 zS<>v33##nN1z23>C0T~@I9m|tdbp3q5Hig?cuPPDIL*w#ycLW>H;aFMJq9!Dy|ZD6 zf&)a|YtXVlPdh(i;kC~*dEfzXwR26-2JIzG%;3qKtWc~ZjRHCCSg%a>f#?;712^fE z7FLWfNi3f{zxVMe#TKk?q(fdJV;Z4o-K9bMla%kCnx^q zkhiDctqK_U=s!Utj+4qR#W6$@;VElnk1@+Oh&`SINV|3B7@Yeg}3c@{n1&UnIKl8)T^ybC6E>k*y)RKR0x zYb?+2!edIktnD1S+j`{#!P6k{kn!Q>I0(4kJaCw_V*x183AAajrgSR-s9E|_$+w^8 z?2sZ;t7n;x#+$Z#D+JXq{Bqt*8Te!Fg5Pk&DZCP4?^IAXAVO6<@8pl?BuTKZI&bd}9lsHd4|`pR7@F@y#e8hu$xrA~pa@*+ zxe>i}|N4BN@Pvu`BktUP>WzxE78=rvydn|nQ4svw#=bX8%+M0;IuXLa9F^{DW;7Dh zBMli`E7|D|+|oe{dWVpFCo*$*QGhS z(^dhpL@u2%^Ky7ijQ;$Ufp=ICh&)T*0@hfnXS|GehF2Tz*oq0&E)gf+rK5p2)3=NW z=d2Ig6CZZdG5bW{;)r-_G%KS~OFXyTfe|ACl69$%*>Y;lcecOGY;gYlzf8sjA3QRZ_8xgtQB=o zzM)KOalmL+$Dl&4NDiUMY*#rp)OQ7CY`n`VcaLf~>o1w_Kwa2dq?JEp=UwOU`RlRt zd-K2fzEA6ZP&9A*uy{*PmQ4tm6XkH9Ix&3%r`b*NOPeCOlWC3OF@tNnXIDci;BK=D z0Gi=hr#2Esrzqn7-bch=@Et)Eyta^07=|=t`}U-nHw(^N2Nc-l0wy#j8gPB8L!5=9 zZhd1c^qh~{cbJO_kG7nTLZ}2*xcW{efObMF!%N{{$#9{#_9wY~6Q2KgP_Ri>!yqC} zY3!Q06uIB@ki99yYu`BAOEYY;U!nytCon+9J9M_#GnSBmVMb#A^o&sPZ>D8v$XG1WJ0;3qm=~)~!u^H=rK0<0 z>xp3V*gQxGI;?)TJujNI59@DjK7j$7-5i-`vD7IDDg2oSp(#kYzEX7W;qn&ad}7&HMR*M$5_~e%hscDnV8|CV4U8_obj&<& zu*Yw9^pC~@QmD|Va0n=taUk~e|KX$`={w*bOWHhRK?n?7c2A%aifrpAhEkMbTaw;| znWyoJ|FR@)zN~}^db?I-dS>tEv-f?ci1P!Tv*}KgEdoVp%1(wW$`fq-W9m>GQz#hH zB=tL;FqJMYsDAOvGcl7Z==%-z8RlOj2=)HjtL)~$R$p1Q(8a&chdMFg=OqkKOH2;- z{(te(i}2N~9|&)9K`OKi<5fAJ2F}7YHvAG7Cg^o+Ern1GW@g&URRAdD?{C_bS℞ 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