netcdf-fortran-4.6.3+ds/0000775000175000017500000000000015205004127015222 5ustar alastairalastairnetcdf-fortran-4.6.3+ds/nf_test4/0000775000175000017500000000000015205004070016745 5ustar alastairalastairnetcdf-fortran-4.6.3+ds/nf_test4/ftst_parallel.F0000664000175000017500000001071615205004070021715 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett program ftst_parallel implicit none include 'netcdf.inc' include 'mpif.h' integer mode_flag ! file create mode integer p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, ' ' print *, '*** Testing netCDF-4 parallel I/O from Fortran 77.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'This test program must be run on 4 processors.' stop 2 endif #ifdef NF_HAS_PNETCDF mode_flag = IOR(nf_clobber, nf_mpiio) call parallel_io(mode_flag) #endif #ifdef NF_HAS_PARALLEL4 mode_flag = IOR(nf_netcdf4, nf_classic_model) mode_flag = IOR(mode_flag, nf_clobber) mode_flag = IOR(mode_flag, nf_mpiio) call parallel_io(mode_flag) #endif call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' end program ftst_parallel subroutine parallel_io(mode_flag) implicit none include 'netcdf.inc' include 'mpif.h' integer mode_flag ! file create mode character*(*) FILE_NAME parameter (FILE_NAME = 'ftst_parallel.nc') integer MAX_DIMS parameter (MAX_DIMS = 2) integer NX, NY parameter (NX = 16) parameter (NY = 16) integer NUM_PROC parameter (NUM_PROC = 4) integer ncid, varid, dimids(MAX_DIMS) integer x_dimid, y_dimid integer data_out(NY / 2, NX / 2), data_in(NY / 2, NX / 2) integer x, y, retval integer my_rank, ierr integer start(MAX_DIMS), count(MAX_DIMS) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) ! Create some pretend data. do x = 1, NX / 2 do y = 1, NY / 2 data_out(y, x) = my_rank end do end do ! Create the netCDF file. retval = nf_create_par(FILE_NAME, mode_flag, MPI_COMM_WORLD, $ MPI_INFO_NULL, ncid) if (retval .ne. nf_noerr) stop 3 ! Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 4 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 5 dimids(1) = y_dimid dimids(2) = x_dimid ! Define the variable. retval = nf_def_var(ncid, "data", NF_INT, MAX_DIMS, dimids, varid) if (retval .ne. nf_noerr) stop 6 ! With classic model netCDF-4 file, enddef must be called. retval = nf_enddef(ncid) if (retval .ne. nf_noerr) stop 7 ! Determine what part of the variable will be written for this ! processor. It's a checkerboard decomposition. count(1) = NX / 2 count(2) = NY / 2 if (my_rank .eq. 0) then start(1) = 1 start(2) = 1 else if (my_rank .eq. 1) then start(1) = NX / 2 + 1 start(2) = 1 else if (my_rank .eq. 2) then start(1) = 1 start(2) = NY / 2 + 1 else if (my_rank .eq. 3) then start(1) = NX / 2 + 1 start(2) = NY / 2 + 1 endif ! Write this processor's data. retval = nf_put_vara_int(ncid, varid, start, count, data_out) if (retval .ne. nf_noerr) stop 8 ! Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 9 ! Reopen the file. retval = nf_open_par(FILE_NAME, IOR(nf_nowrite, nf_mpiio), $ MPI_COMM_WORLD, MPI_INFO_NULL, ncid) if (retval .ne. nf_noerr) stop 10 ! Set collective access on this variable. This will cause all ! reads/writes to happen together on every processor. Fairly ! pointless, in this contexct, but I want to at least call this ! function once in my testing. retval = nf_var_par_access(ncid, varid, nf_collective) if (retval .ne. nf_noerr) stop 11 ! Read this processor's data. retval = nf_get_vara_int(ncid, varid, start, count, data_in) if (retval .ne. nf_noerr) stop 12 ! Check the data. do x = 1, NX / 2 do y = 1, NY / 2 if (data_in(y, x) .ne. my_rank) stop 13 end do end do ! Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 14 end subroutine parallel_io netcdf-fortran-4.6.3+ds/nf_test4/ftst_path.F0000664000175000017500000000537215205004070021057 0ustar alastairalastairC This is part of the netCDF package. Copyright 2006-2019 University C Corporation for Atmospheric Research/Unidata. See COPYRIGHT file C for conditions of use. C Tests new nf_inq_path function C Mimics tests in C tst_files5.c code C Russ Rew, 2014 program ftst_path implicit NONE include "netcdf.inc" character(len=*), parameter :: FILE_NAME="ftst_path.nc" integer :: path_len, ncid character(LEN=NF_MAX_NAME+1) :: path_in path_in = REPEAT(" ", LEN(path_in)) path_len = 0 print *,'' print *,'*** Testing netcdf file functions.' print *,'*** Checking the new inq_path function' C Test with classic mode nf_create call check(nf_create(FILE_NAME, nf_classic_model, ncid)) call check(nf_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. & & (FILE_NAME /= TRIM(path_in))) & & call check(-1) call check(nf_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 C Test with classic mode nf_open call check(nf_open(FILE_NAME, nf_classic_model, ncid)) call check(nf_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. & & (FILE_NAME /= TRIM(path_in))) & & call check(-1) call check(nf_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 C Test with netcdf4 mode nf_create call check(nf_create(FILE_NAME, nf_netcdf4, ncid)) call check(nf_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. & & (FILE_NAME /= TRIM(path_in))) & & call check(-1) call check(nf_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 C Test with netcdf4 mode nf_open call check(nf_open(FILE_NAME, nf_netcdf4, ncid)) call check(nf_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. & & (FILE_NAME /= TRIM(path_in))) & & call check(-1) call check(nf_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 print *,'*** SUCCESS! ' contains C This subroutine handles errors by printing an error message and C exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf_noerr) then print *, 'Error: ', trim(nf_strerror(errcode)) stop 2 endif end subroutine check end program ftst_path netcdf-fortran-4.6.3+ds/nf_test4/f03tst_v2.F0000664000175000017500000000733415205004070020615 0ustar alastairalastairC This is part of the netCDF package. Copyright 2009-2019 University C Corporation for Atmospheric Research/Unidata. See COPYRIGHT file C for conditions of use. C This program tests the fortran V2 API with netCDF-4. C Ed Hartnett 2009 program ftst_v2 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_v2.nc') integer ncid, timedim, londim, latdim, lonid, latid character*(3) lat_name parameter (lat_name = 'lat') character*(3) lon_name parameter (lon_name = 'lon') character*(4) time_name parameter (time_name = 'time') integer LON_LEN, LAT_LEN parameter (LON_LEN = 3, LAT_LEN = 5) integer NDIMS, NVARS parameter (NDIMS = 3, NVARS = 2) integer ndims_in, nvars_in, ngatts_in, recdim_in integer dimsize_in, natts_in integer xtype_in, dimids_in(NDIMS) character*(128) name_in integer rc print *, '' print *,'*** Testing v2 fortran API with netCDF-4.' C Create the file. ncid = nccre(FILE_NAME, NF_NETCDF4, rc) timedim = ncddef(ncid, time_name, NCUNLIM, rc) londim = ncddef(ncid, lon_name, LON_LEN, rc) latdim = ncddef(ncid, lat_name, LAT_LEN, rc) lonid = ncvdef(ncid, lon_name, NCFLOAT, 1, londim, rc) latid = ncvdef(ncid, lat_name, NCFLOAT, 1, latdim, rc) C Check the file. call ncinq(ncid, ndims_in, nvars_in, ngatts_in, recdim_in, rc) if (ndims_in .ne. NDIMS) stop 2 if (ndims_in .ne. NDIMS .or. nvars_in .ne. NVARS .or. $ ngatts_in .ne. 0 .or. recdim_in .ne. timedim) stop 2 call ncdinq(ncid, timedim, name_in, dimsize_in, rc) if (name_in .ne. time_name .or. dimsize_in .ne. 0) stop 2 call ncdinq(ncid, londim, name_in, dimsize_in, rc) if (name_in .ne. lon_name .or. dimsize_in .ne. LON_LEN) stop 2 call ncdinq(ncid, latdim, name_in, dimsize_in, rc) if (name_in .ne. lat_name .or. dimsize_in .ne. LAT_LEN) stop 2 call ncvinq(ncid, lonid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lon_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. londim) stop 2 call ncvinq(ncid, latid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lat_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. latdim) stop 2 C Close the file. call ncclos(ncid, rc) C Reopen, and check again. ncid = ncopn(FILE_NAME, NCNOWRIT, rc) C Check the file. call ncinq(ncid, ndims_in, nvars_in, ngatts_in, recdim_in, rc) if (ndims_in .ne. NDIMS) stop 2 if (ndims_in .ne. NDIMS .or. nvars_in .ne. NVARS .or. $ ngatts_in .ne. 0 .or. recdim_in .ne. timedim) stop 2 call ncdinq(ncid, timedim, name_in, dimsize_in, rc) if (name_in .ne. time_name .or. dimsize_in .ne. 0) stop 2 call ncdinq(ncid, londim, name_in, dimsize_in, rc) if (name_in .ne. lon_name .or. dimsize_in .ne. LON_LEN) stop 2 call ncdinq(ncid, latdim, name_in, dimsize_in, rc) if (name_in .ne. lat_name .or. dimsize_in .ne. LAT_LEN) stop 2 call ncvinq(ncid, lonid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lon_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. londim) stop 2 call ncvinq(ncid, latid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lat_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. latdim) stop 2 call ncclos(ncid, rc) print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_types2.F0000664000175000017500000000615315205004070021512 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2007 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 user defined types from fortran. C Ed Hartnett, 2009 program ftst_types2 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_types2.nc') C We are writing 2D data, a 3 x 2 grid. integer NDIMS parameter (NDIMS = 2) integer dim_sizes(NDIMS) integer NX, NY parameter (NX = 3, NY = 2) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer cmp_typeid integer x_dimid, y_dimid integer typeids(1) C Info about the type we'll create. integer size_in, base_type_in, nfields_in, class_in character*80 name_in character*(*) type_name, ary_name parameter (type_name = 'cmp_w_ary', ary_name = 'A') integer ntypes integer cmp_size parameter (cmp_size = 24) integer offset_in, field_typeid_in, ndims_in, dim_sizes_in(NDIMS) C Loop indexes, and error handling. integer x, y, retval print *, '' print *,'*** Testing netCDF-4 compound types from F77 some more.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define a compound type. retval = nf_def_compound(ncid, cmp_size, type_name, & cmp_typeid) if (retval .ne. nf_noerr) stop 1 C Include an array. dim_sizes(1) = NX dim_sizes(2) = NY retval = nf_insert_array_compound(ncid, cmp_typeid, ary_name, 0, & NF_INT, NDIMS, dim_sizes) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find the type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1 .or. typeids(1) .ne. cmp_typeid) stop 2 C Check the type. retval = nf_inq_user_type(ncid, typeids(1), name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. cmp_size .or. nfields_in .ne. 1 .or. & class_in .ne. NF_COMPOUND) stop 2 C Check the first field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 1, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(ary_name)) .ne. ary_name .or. & offset_in .ne. 0 .or. field_typeid_in .ne. NF_INT .or. & ndims_in .ne. NDIMS .or. & dim_sizes_in(1) .ne. dim_sizes(1) .or. & dim_sizes_in(2) .ne. dim_sizes(2)) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_types2.F0000664000175000017500000000615615205004070021352 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2007 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 user defined types from fortran. C Ed Hartnett, 2009 program ftst_types2 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_types2.nc') C We are writing 2D data, a 3 x 2 grid. integer NDIMS parameter (NDIMS = 2) integer dim_sizes(NDIMS) integer NX, NY parameter (NX = 3, NY = 2) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer cmp_typeid integer x_dimid, y_dimid integer typeids(1) C Info about the type we'll create. integer size_in, base_type_in, nfields_in, class_in character*80 name_in character*(*) type_name, ary_name parameter (type_name = 'cmp_w_ary', ary_name = 'A') integer ntypes integer cmp_size parameter (cmp_size = 24) integer offset_in, field_typeid_in, ndims_in, dim_sizes_in(NDIMS) C Loop indexes, and error handling. integer x, y, retval print *, '' print *,'*** Testing netCDF-4 compound types from F77 some more.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define a compound type. retval = nf_def_compound(ncid, cmp_size, type_name, & cmp_typeid) if (retval .ne. nf_noerr) stop 1 C Include an array. dim_sizes(1) = NX dim_sizes(2) = NY retval = nf_insert_array_compound(ncid, cmp_typeid, ary_name, 0, & NF_INT, NDIMS, dim_sizes) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find the type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1 .or. typeids(1) .ne. cmp_typeid) stop 2 C Check the type. retval = nf_inq_user_type(ncid, typeids(1), name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. cmp_size .or. nfields_in .ne. 1 .or. & class_in .ne. NF_COMPOUND) stop 2 C Check the first field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 1, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(ary_name)) .ne. ary_name .or. & offset_in .ne. 0 .or. field_typeid_in .ne. NF_INT .or. & ndims_in .ne. NDIMS .or. & dim_sizes_in(1) .ne. dim_sizes(1) .or. & dim_sizes_in(2) .ne. dim_sizes(2)) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_vars2.F0000664000175000017500000001042515205004070021153 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing new netCDF-4 atomic types. C Ed Hartnett, 2010 program ftst_vars2 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars2.nc') C We are writing 3D data, a 3 x 5 x 2 grid. Why do I use "x, y, z," C and then do everything in order "z, y, x?" Because I am a C C programmer, and everything in Fortran seems backwards! integer NDIMS, NTYPES parameter (NDIMS = 3, NTYPES = 5) integer NX, NY, NZ parameter (NX = 3, NY = 5, NZ = 2) C These will be used to set the per-variable chunk cache. integer CACHE_SIZE, CACHE_NELEMS, CACHE_PREEMPTION parameter (CACHE_SIZE = 8, CACHE_NELEMS = 571) parameter (CACHE_PREEMPTION = 42) C These will be used to check the setting of the per-variable chunk C cache. integer cache_size_in, cache_nelems_in, cache_preemption_in C NetCDF IDs. integer ncid, varid(NTYPES), dimids(NDIMS), typeid(NTYPES) C Name of the variable is stored here. character*80 var_name C This is the data array we will write, and a place to store it when C we read it back in. Z is the fastest varying dimension. integer data_out(NZ, NY, NX), data_in(NZ, NY, NX) C Loop indexes, and error handling. integer i, x, y, z, retval C Create some pretend data. do x = 1, NX do y = 1, NY do z = 1, NZ data_out(z, y, x) = (x-1) * NY * NZ + (y-1) * NZ + (z-1) end do end do end do print *, '' print *,'*** Testing netCDF-4 vars from F77 with new types.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "z", NZ, dimids(3)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, dimids(2)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "x", NX, dimids(1)) if (retval .ne. nf_noerr) stop 1 C These are the types of vars that will be written. typeid(1) = NF_UBYTE typeid(2) = NF_USHORT typeid(3) = NF_UINT typeid(4) = NF_INT64 typeid(5) = NF_UINT64 C Define the variables. do i = 1, NTYPES write(var_name, 1001) i 1001 format('var', I1) retval = nf_def_var(ncid, var_name, typeid(i), NDIMS, & dimids, varid(i)) if (retval .ne. nf_noerr) stop 1 C Set variable caches. retval = nf_set_var_chunk_cache(ncid, varid(i), CACHE_SIZE, & CACHE_NELEMS, CACHE_PREEMPTION) if (retval .ne. nf_noerr) stop 1 end do C Check the per-variable cache to make sure it is what we think it C is. do i = 1, NTYPES retval = nf_get_var_chunk_cache(ncid, varid(i), cache_size_in, & cache_nelems_in, cache_preemption_in) if (retval .ne. nf_noerr) stop 1 if (cache_size_in .ne. CACHE_SIZE .or. cache_nelems_in .ne. & CACHE_NELEMS .or. cache_preemption .ne. CACHE_PREEMPTION) & stop 8 end do C Write the pretend data to the file. do i = 1, NTYPES retval = nf_put_var_int(ncid, varid(i), data_out) if (retval .ne. nf_noerr) stop 1 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Read the data and check it. do i = 1, NTYPES retval = nf_get_var_int(ncid, varid(i), data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY do z = 1, NZ if (data_in(z, y, x) .ne. data_out(z, y, x)) stop 2 end do end do end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_groups.F0000664000175000017500000001232515205004070021601 0ustar alastairalastairC This is part of the netCDF package. Copyright 2006-2019 University C Corporation for Atmospheric Research/Unidata. See COPYRIGHT file C for conditions of use. C This program tests netCDF-4 group functions in the F77 API. C Ed Hartnett, 2009 program ftst_groups USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) file_name parameter (file_name='f03tst_groups.nc') C Info about the groups we'll create. character*(*) group_name, sub_group_name parameter (group_name = 'grp', sub_group_name = 'sub') character*80 name_in, name_in2 integer ngroups_in integer full_name_len C Dimensions and variables. character*(*) dim1_name, dim2_name parameter (dim1_name = 'd1', dim2_name = 'd2') character*(*) var1_name, var2_name parameter (var1_name = 'v1', var2_name = 'v2') integer nvars, ndims C NetCDF IDs. integer ncid, grpid, sub_grpid, subgrp_in integer grpids(1), grpid_in, dimids(2), varids(2) integer varids_in(2), dimids_in(2) C Error handling. integer retval print *, '' print *,'*** Testing netCDF-4 groups from F77.' C Create the netCDF file. retval = nf_create(file_name, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a group and a subgroup. retval = nf_def_grp(ncid, group_name, grpid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_grp(grpid, sub_group_name, sub_grpid) if (retval .ne. nf_noerr) stop 1 C Create a two dims and two vars. retval = nf_def_dim(sub_grpid, dim1_name, 0, dimids(1)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(sub_grpid, dim2_name, 0, dimids(2)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_var(sub_grpid, var1_name, NF_UINT64, 2, dimids, & varids(1)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_var(sub_grpid, var2_name, NF_UINT64, 2, dimids, & varids(2)) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(file_name, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check the name of the root group. retval = nf_inq_grpname(ncid, name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:1) .ne. '/') stop 2 C Check the full name of the root group (also "/"). retval = nf_inq_grpname_full(ncid, full_name_len, name_in) if (retval .ne. nf_noerr) stop 1 if (full_name_len .ne. 1 .or. name_in(1:1) .ne. '/') stop 2 C What groups are there from the root group? retval = nf_inq_grps(ncid, ngroups_in, grpids) if (retval .ne. nf_noerr) stop 1 if (ngroups_in .ne. 1) stop 2 C Check the name of this group. retval = nf_inq_grpname(grpids(1), name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(group_name)) .ne. group_name) stop 2 C Check the length of the full name. retval = nf_inq_grpname_len(grpids(1), full_name_len) if (retval .ne. nf_noerr) stop 1 if (full_name_len .ne. len(group_name) + 1) stop 2 C Check the full name. retval = nf_inq_grpname_full(grpids(1), full_name_len, name_in2) if (retval .ne. nf_noerr) stop 1 if (name_in2(1:1) .ne. '/' .or. & name_in2(2:len(group_name)+1) .ne. group_name .or. & full_name_len .ne. len(group_name) + 1) stop 2 C Check getting the grpid by full name retval = nf_inq_grp_full_ncid(ncid, name_in, grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. grpids(1)) stop 2 C Check the parent ncid. retval = nf_inq_grp_parent(grpids(1), grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. ncid) stop 2 C Check getting the group by name retval = nf_inq_ncid(ncid, group_name, grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. grpids(1)) stop 2 C Check getting the group by name retval = nf_inq_ncid(ncid, group_name, grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. grpids(1)) stop 2 C Get the sub group id, using its name. retval = nf_inq_ncid(grpid_in, sub_group_name, subgrp_in) if (retval .ne. nf_noerr) stop 1 C Check varids in subgroup. retval = nf_inq_varids(subgrp_in, nvars, varids_in) if (retval .ne. nf_noerr) stop 1 if (nvars .ne. 2 .or. varids_in(1) .ne. varids(1) .or. & varids_in(2) .ne. varids(2)) stop 2 C Check dimids in subgroup. retval = nf_inq_dimids(subgrp_in, ndims, dimids_in, 0) if (retval .ne. nf_noerr) stop 1 if (ndims .ne. 2 .or. dimids_in(1) .ne. dimids(1) .or. & dimids_in(2) .ne. dimids(2)) stop 2 C Check dimids including parents (will get same answers, since there C are no dims in parent group. retval = nf_inq_dimids(subgrp_in, ndims, dimids_in, 1) if (retval .ne. nf_noerr) stop 1 if (ndims .ne. 2 .or. dimids_in(1) .ne. dimids(1) .or. & dimids_in(2) .ne. dimids(2)) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_vars.F0000664000175000017500000001504015205004070021067 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2006 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing chunking and deflate settings. C Ed Hartnett program ftst_vars implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars.nc') C We are writing 2D data, a 6 x 12 grid. integer NDIMS parameter (NDIMS=2) integer NX, NY parameter (NX = 6, NY = 12) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer x_dimid, y_dimid C This is the data array we will write, and a place to store it when C we read it back in. integer data_out(NY, NX), data_in(NY, NX) C For checking our data file to make sure it's correct. integer chunks(NDIMS), chunks_in(NDIMS) integer shuffle, deflate, deflate_level, checksum, contiguous integer endianness C Cache size stuff. integer DEFAULT_CACHE_SIZE, DEFAULT_CACHE_NELEMS_OLD integer DEFAULT_CACHE_NELEMS_NEW integer DEFAULT_CACHE_PREEMPTION parameter (DEFAULT_CACHE_SIZE = 67108864) parameter (DEFAULT_CACHE_NELEMS_OLD = 4133) parameter (DEFAULT_CACHE_NELEMS_NEW = 1000) parameter (DEFAULT_CACHE_PREEMPTION = 75) integer CACHE_SIZE, CACHE_NELEMS, CACHE_PREEMPTION parameter (CACHE_SIZE = 8000, CACHE_NELEMS = 500) parameter (CACHE_PREEMPTION = 50) integer cache_size_in, cache_nelems_in, cache_preemption_in C Loop indexes, and error handling. integer x, y, retval C Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = 2147483646 + x * y end do end do print *, '' print *,'*** Testing definition of netCDF-4 vars from Fortran 77.' C Check default chunk cache sizes. retval = nf_get_chunk_cache(cache_size_in, cache_nelems_in, & cache_preemption_in) if (retval .ne. nf_noerr) stop 1 if (cache_size_in .ne. DEFAULT_CACHE_SIZE .or. & (cache_nelems_in .ne. DEFAULT_CACHE_NELEMS_OLD .and. & cache_nelems_in .ne. DEFAULT_CACHE_NELEMS_NEW) .or. & cache_preemption_in .ne. DEFAULT_CACHE_PREEMPTION) stop 4 C Change the cache size for the files created/opened in this program. retval = nf_set_chunk_cache(CACHE_SIZE, CACHE_NELEMS, & CACHE_PREEMPTION) if (retval .ne. nf_noerr) stop 1 C Check chunk cache sizes. retval = nf_get_chunk_cache(cache_size_in, cache_nelems_in, & cache_preemption_in) if (retval .ne. nf_noerr) stop 1 if (cache_size_in .ne. CACHE_SIZE .or. & cache_nelems_in .ne. CACHE_NELEMS .or. & cache_preemption_in .ne. CACHE_PREEMPTION) stop 4 C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 1 C Define the variable. dimids(1) = y_dimid dimids(2) = x_dimid retval = nf_def_var(ncid, "data", NF_INT64, NDIMS, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Turn on chunking. chunks(1) = NY chunks(2) = NX retval = nf_def_var_chunking(ncid, varid, 0, chunks) if (retval .ne. nf_noerr) stop 1 C Set variable to big-endian (default is whatever is native to C writing machine). retval = nf_def_var_endian(ncid, varid, NF_ENDIAN_BIG) if (retval .ne. nf_noerr) stop 1 C Turn on deflate, fletcher32. retval = nf_def_var_deflate(ncid, varid, 0, 1, 4) if (retval .ne. nf_noerr) stop 1 retval = nf_def_var_fletcher32(ncid, varid, NF_FLETCHER32) if (retval .ne. nf_noerr) stop 1 C Is everything set that is supposed to be? retval = nf_inq_var_deflate(ncid, varid, shuffle, deflate, + deflate_level) if (retval .ne. nf_noerr) stop 1 if (shuffle .ne. 0 .or. deflate .ne. 1 .or. + deflate_level .ne. 4) stop 2 retval = nf_inq_var_fletcher32(ncid, varid, checksum) if (retval .ne. nf_noerr) stop 1 if (checksum .ne. NF_FLETCHER32) stop 2 retval = nf_inq_var_chunking(ncid, varid, contiguous, chunks_in) if (retval .ne. nf_noerr) stop 1 if (contiguous .ne. 0) stop 2 if (chunks(1) .ne. chunks_in(1) .or. + chunks(2) .ne. chunks_in(2)) stop 2 retval = nf_inq_var_endian(ncid, varid, endianness) if (retval .ne. nf_noerr) stop 1 if (endianness .ne. NF_ENDIAN_BIG) stop 2 C Since this is a classic model file, we must call enddef retval = nf_enddef(ncid) if (retval .ne. nf_noerr) stop 1 C Write the pretend data to the file. retval = nf_put_var_int(ncid, varid, data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find our variable. retval = nf_inq_varid(ncid, "data", varid) if (retval .ne. nf_noerr) stop 1 if (varid .ne. 1) stop 2 C Check the deflate, fletcher32, chunking, and endianness. retval = nf_inq_var_deflate(ncid, varid, shuffle, deflate, + deflate_level) if (retval .ne. nf_noerr) stop 1 if (shuffle .ne. 0 .or. deflate .ne. 1 .or. + deflate_level .ne. 4) stop 2 retval = nf_inq_var_fletcher32(ncid, varid, checksum) if (retval .ne. nf_noerr) stop 1 if (checksum .ne. NF_FLETCHER32) stop 2 retval = nf_inq_var_chunking(ncid, varid, contiguous, chunks_in) if (retval .ne. nf_noerr) stop 1 if (contiguous .ne. 0) stop 2 if (chunks(1) .ne. chunks_in(1) .or. + chunks(2) .ne. chunks_in(2)) stop 2 retval = nf_inq_var_endian(ncid, varid, endianness) if (retval .ne. nf_noerr) stop 1 if (endianness .ne. NF_ENDIAN_BIG) stop 2 C Read the data and check it. retval = nf_get_var_int(ncid, varid, data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY if (data_in(y, x) .ne. data_out(y, x)) stop 2 end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/run_f77_par_test.sh0000775000175000017500000000036715205004070022502 0ustar alastairalastair#!/bin/sh # This shell runs some parallel I/O tests for the F77 API. # Ed Hartnett, 2009 set -e echo "Testing netCDF parallel I/O through the F77 API..." mpiexec -n 4 ./ftst_parallel mpiexec -n 4 ./ftst_parallel_nasa echo "SUCCESS!!!" exit 0 netcdf-fortran-4.6.3+ds/nf_test4/ftst_rengrps.F0000664000175000017500000000741015205004070021576 0ustar alastairalastairC This is part of the netCDF package. Copyright 2006-2019 University C Corporation for Atmospheric Research/Unidata. See COPYRIGHT file C for conditions of use. C This program tests netCDF-4 variable functions from fortran. C Russ Rew, 2009 program ftst_rengrps implicit none include "netcdf.inc" C This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "ftst_rengrps.nc" C We are writing 2D data, a 6 x 12 grid. integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 6, NY = 12 integer :: chunksizes(MAX_DIMS), chunksizes_in(MAX_DIMS) integer, parameter :: CACHE_NELEMS = 10000, CACHE_SIZE = 1000000 integer, parameter :: DEFLATE_LEVEL = 4 C We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, dimids(MAX_DIMS) integer :: x_dimid, y_dimid integer :: nvars, ngatts, ndims, unlimdimid, file_format character (len = *), parameter :: VAR1_NAME = "VarName1" character (len = *), parameter :: VAR2_NAME = "VarName2" character (len = *), parameter :: GRP1_NAME = "Old_Grp1_name" character (len = *), parameter :: GRP2_NAME = "Old_Grp2_name" character (len = *), parameter :: NEW_GRP1_NAME = "new_Grp1_name" character (len = *), parameter :: NEW_GRP2_NAME = "new_Grp2_name" character (len = NF_MAX_NAME) :: grp1_full_name integer :: ilen C Information read back from the file to check correctness. integer :: varid1_in, varid2_in integer :: grpid1, grpid2 integer :: xtype_in, ndims_in, natts_in, dimids_in(MAX_DIMS) character (len = nf_max_name) :: name_in print *, '' print *,'*** Testing netCDF-4 rename groups from Fortran 90.' C Create the netCDF file. call check(nf_create(FILE_NAME, NF_NETCDF4, ncid)) C Define the dimensions. call check(nf_def_dim(ncid, "x", NX, x_dimid)) call check(nf_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) C Define some nested groups. call check(nf_def_grp(ncid, GRP1_NAME, grpid1)) call check(nf_def_grp(grpid1, GRP2_NAME, grpid2)) C Define some variables. chunksizes = (/ NY, NX /) call check(nf_def_var(ncid, VAR1_NAME, NF_INT, MAX_DIMS, dimids, & & varid1)) call check(nf_def_var(grpid1, VAR2_NAME, NF_INT, MAX_DIMS, dimids,& & varid2)) C Close the file. call check(nf_close(ncid)) C Reopen the file. call check(nf_open(FILE_NAME, NF_WRITE, ncid)) C Get the group ids for the newly reopened file. call check(nf_inq_grp_ncid(ncid, GRP1_NAME, grpid1)) call check(nf_inq_grp_ncid(grpid1, GRP2_NAME, grpid2)) C Check for the groups with full group names. write(grp1_full_name, '(A,A)') '/', GRP1_NAME call check(nf_inq_grp_full_ncid(ncid, grp1_full_name, grpid1)) call check(nf_inq_grpname(grpid1, name_in)) if (name_in .ne. GRP1_NAME) stop 61 call check(nf_inq_grpname_full(grpid1, ilen, name_in)) if (name_in .ne. grp1_full_name) stop 62 Call check(nf_rename_grp(grpid1, NEW_GRP1_NAME)) name_in=REPEAT(" ",LEN(name_in)) Call check(nf_inq_grpname(grpid1, name_in)) If (name_in /= NEW_GRP1_NAME) Call check(-1) C Close the file. call check(nf_close(ncid)) print *,'*** SUCCESS!' contains C This subroutine handles errors by printing an error message and C exiting with a non-zero status. subroutine check(errcode) implicit none include "netcdf.inc" integer, intent(in) :: errcode if(errcode /= NF_NOERR) then print *, 'Error: ', trim(nf_strerror(errcode)) stop 2 endif end subroutine check end program ftst_rengrps netcdf-fortran-4.6.3+ds/nf_test4/ftst_filter.F0000664000175000017500000000725615205004070021413 0ustar alastairalastairC******************************************************************** C Copyright 1993, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: ftest.F,v 1.11 2009/01/25 14:33:45 ed Exp $ C******************************************************************** C This is part of the netCDF package. C Copyright 2006 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable Filter support from fortran. program ftst_filter implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_filter.nc') C We are writing 2D data, a 6 x 12 grid. integer NDIMS parameter (NDIMS=2) integer NX, NY parameter (NX = 6, NY = 12) integer DATAOFFSET C parameter (DATAOFFSET = 2147483646) parameter (DATAOFFSET = 0) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer x_dimid, y_dimid C This is the data array we will write, and a place to store it when C we read it back in. integer data_out(NY, NX), data_in(NY, NX) C For checking our data file to make sure it's correct. integer chunks(NDIMS), chunks_in(NDIMS) integer filterid, nparams, params(1) C Loop indexes, and error handling. integer x, y, retval C Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = DATAOFFSET + x * y end do end do print *, '' print *,'*** Testing definition netCDF-4 Filters' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_CLOBBER+NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 1 C Define the variable. dimids(1) = y_dimid dimids(2) = x_dimid retval = nf_def_var(ncid, "data", NF_INT64, NDIMS, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Turn on chunking. chunks(1) = NY chunks(2) = NX retval = nf_def_var_chunking(ncid, varid, 0, chunks) if (retval .ne. nf_noerr) stop 1 C Set bzip filter on variable params(1) = 9 retval = nf_def_var_filter(ncid, varid, 307, 1, params) if (retval .ne. nf_noerr) stop 1 retval = nf_enddef(ncid) if (retval .ne. nf_noerr) stop 1 C Write the pretend data to the file. retval = nf_put_var_int(ncid, varid, data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find our variable. retval = nf_inq_varid(ncid, "data", varid) if (retval .ne. nf_noerr) stop 1 if (varid .ne. 1) stop 2 C Check the filter params(1) = -1 retval = nf_inq_var_filter(ncid, varid, filterid, nparams, params) if (retval .ne. nf_noerr) stop 1 if (filterid .ne. 307) stop 2 if (nparams .ne. 1) stop 2 if (params(1) .ne. 9) stop 2 C Read the data and check it. retval = nf_get_var_int(ncid, varid, data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY if (data_in(y, x) .ne. data_out(y, x)) stop 2 end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_parallel.F0000664000175000017500000001070615205004070022057 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett program ftst_parallel USE netcdf4_f03 implicit none include 'mpif.h' integer mode_flag ! file create mode integer p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, ' ' print *, '*** Testing netCDF-4 parallel I/O from Fortran 77.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'This test program must be run on 4 processors.' stop 2 endif #ifdef NF_HAS_PNETCDF mode_flag = IOR(nf_clobber, nf_mpiio) call parallel_io(mode_flag) #endif #ifdef NF_HAS_PARALLEL4 mode_flag = IOR(nf_netcdf4, nf_classic_model) mode_flag = IOR(mode_flag, nf_clobber) mode_flag = IOR(mode_flag, nf_mpiio) call parallel_io(mode_flag) #endif call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' end program ftst_parallel subroutine parallel_io(mode_flag) USE netcdf4_f03 implicit none include 'mpif.h' integer mode_flag ! file create mode character*(*) FILE_NAME parameter (FILE_NAME = 'f03tst_parallel.nc') integer MAX_DIMS parameter (MAX_DIMS = 2) integer NX, NY parameter (NX = 16) parameter (NY = 16) integer NUM_PROC parameter (NUM_PROC = 4) integer ncid, varid, dimids(MAX_DIMS) integer x_dimid, y_dimid integer data_out(NY / 2, NX / 2), data_in(NY / 2, NX / 2) integer x, y, retval integer my_rank, ierr integer start(MAX_DIMS), count(MAX_DIMS) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) ! Create some pretend data. do x = 1, NX / 2 do y = 1, NY / 2 data_out(y, x) = my_rank end do end do ! Create the netCDF file. retval = nf_create_par(FILE_NAME, mode_flag, MPI_COMM_WORLD, $ MPI_INFO_NULL, ncid) if (retval .ne. nf_noerr) stop 3 ! Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 4 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 5 dimids(1) = y_dimid dimids(2) = x_dimid ! Define the variable. retval = nf_def_var(ncid, "data", NF_INT, MAX_DIMS, dimids, varid) if (retval .ne. nf_noerr) stop 6 ! With classic model netCDF-4 file, enddef must be called. retval = nf_enddef(ncid) if (retval .ne. nf_noerr) stop 7 ! Determine what part of the variable will be written for this ! processor. It's a checkerboard decomposition. count(1) = NX / 2 count(2) = NY / 2 if (my_rank .eq. 0) then start(1) = 1 start(2) = 1 else if (my_rank .eq. 1) then start(1) = NX / 2 + 1 start(2) = 1 else if (my_rank .eq. 2) then start(1) = 1 start(2) = NY / 2 + 1 else if (my_rank .eq. 3) then start(1) = NX / 2 + 1 start(2) = NY / 2 + 1 endif ! Write this processor's data. retval = nf_put_vara_int(ncid, varid, start, count, data_out) if (retval .ne. nf_noerr) stop 8 ! Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 9 ! Reopen the file. retval = nf_open_par(FILE_NAME, IOR(nf_nowrite, nf_mpiio), $ MPI_COMM_WORLD, MPI_INFO_NULL, ncid) if (retval .ne. nf_noerr) stop 10 ! Set collective access on this variable. This will cause all ! reads/writes to happen together on every processor. Fairly ! pointless, in this contexct, but I want to at least call this ! function once in my testing. retval = nf_var_par_access(ncid, varid, nf_collective) if (retval .ne. nf_noerr) stop 11 ! Read this processor's data. retval = nf_get_vara_int(ncid, varid, start, count, data_in) if (retval .ne. nf_noerr) stop 12 ! Check the data. do x = 1, NX / 2 do y = 1, NY / 2 if (data_in(y, x) .ne. my_rank) stop 13 end do end do ! Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 14 end subroutine parallel_io netcdf-fortran-4.6.3+ds/nf_test4/ftst_vars6.F0000664000175000017500000001455115205004070021163 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C checking fill value handling. C Ed Hartnett, 2009 program ftst_vars6 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars6.nc') integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 2) integer check_file integer ncid, varid(NVARS), dimids(NDIMS) integer data_len_in, offset parameter (offset = 20) integer data1(data_len), data1_in(data_len) character*(4) var_name(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer NO_FILL, MY_FILL_VALUE parameter (NO_FILL = 1) parameter (MY_FILL_VALUE = 42) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing fill values.' C Prepare some data to write. do x = 1, data_len data1(x) = x end do C Set up var names. var_name(1) = 'var1' var_name(2) = 'var2' var_name(3) = 'var3' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create a few integer variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), NF_INT, NDIMS, dimids, $ varid(x)) if (retval .ne. nf_noerr) stop 1 end do C Set no fill mode for the second variable. retval = nf_def_var_fill(ncid, varid(2), NO_FILL, 88) if (retval .ne. 0) stop 2 C Set an alternative fill value for the third variable. retval = nf_def_var_fill(ncid, varid(3), 0, MY_FILL_VALUE) if (retval .ne. 0) stop 3 C Check it out. c retval = check_file(ncid, var_name, dim_name) c if (retval .ne. 0) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check it out. retval = check_file(ncid, var_name, dim_name) if (retval .ne. 0) stop 4 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, dim_name) implicit none include 'netcdf.inc' C I need these in both here and the main program. integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 2) integer MY_FILL_VALUE parameter (MY_FILL_VALUE = 42) C Parameters integer ncid character*(4) var_name(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIMS), natts_in integer varid_in(NVARS), dimid_in, no_fill_in, fill_value_in character*(4) var_name_in integer int_data_in(DIM_LEN) integer x, retval C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 5 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 1 if (varid_in(x) .ne. x) stop 6 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 1 if (dimid_in .ne. 1) stop 7 C These things are the same for all three variables, except C natts_in.. do x = 1, NVARS retval = nf_inq_var(ncid, varid_in(x), var_name_in, xtype_in, $ ndims_in, dimids_in, natts_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. xtype_in .ne. NF_INT .or. dimids_in(1) $ .ne. dimid_in) stop 8 if (x .eq. 3 .and. natts_in .ne. 1) stop 9 if (x .lt. 3 .and. natts_in .ne. 0) stop 10 end do C Check the fill value for the first var. Nothing was set, so C no_fill should be off, and fill_value should be the default fill C value for this type. retval = nf_inq_var_fill(ncid, varid_in(1), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 0 .or. fill_value_in .ne. nf_fill_int) stop 11 C Check that no_fill mode is on for the second variable. retval = nf_inq_var_fill(ncid, varid_in(2), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 1 .or. fill_value_in .ne. nf_fill_int) stop 12 C Check that a non-default fill value is in use for the third variable. retval = nf_inq_var_fill(ncid, varid_in(3), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 0 .or. fill_value_in .ne. MY_FILL_VALUE) stop $ 2 C Get the data in var1. It will be all the default fill value. retval = nf_get_var_int(ncid, varid_in(1), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. nf_fill_int) stop 13 end do C Get the data in var2. What will it be? retval = nf_get_var_int(ncid, varid_in(2), int_data_in) if (retval .ne. nf_noerr) stop 1 C$$$ do x = 1, DIM_LEN C$$$ print *, int_data_in(x) C$$$ end do C Get the data in var3. It will be all the default fill value. retval = nf_get_var_int(ncid, varid_in(3), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN C print *, int_data_in(x) if (int_data_in(x) .ne. MY_FILL_VALUE) stop 14 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/ftst_var_szip.F0000664000175000017500000001321015205004070021746 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2020 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 szip compression. This test is only C run if nc_def_var_szip() is found in netcdf-c, and also the HDF5 C instance upon which the netcdf-c depends was built with szip. C Ed Hartnett, 1/31/20 program ftst_var_szip implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_var_szip.nc') integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 22) integer check_file integer ncid, varid(NVARS), dimids(NDIMS) integer data_len_in, offset parameter (offset = 20) integer data1(DATA_LEN), data1_in(DATA_LEN) character*(4) var_name(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer NO_FILL, MY_FILL_VALUE parameter (NO_FILL = 1) parameter (MY_FILL_VALUE = 42) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing szip compression.' C Prepare some data to write. do x = 1, DATA_LEN data1(x) = x end do C Set up var names. var_name(1) = 'var1' var_name(2) = 'var2' var_name(3) = 'var3' C retval = nf_set_log_level(3) C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create a few integer variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), NF_INT, NDIMS, dimids, $ varid(x)) if (retval .ne. nf_noerr) stop 1 end do C Set an alternative fill value for the third variable. retval = nf_def_var_fill(ncid, varid(3), 0, MY_FILL_VALUE) if (retval .ne. 0) stop 3 C Turn on szip compression for var 1. retval = nf_def_var_szip(ncid, varid(1), $ nf_szip_ec_option_mask, 4) if (retval .ne. 0) stop 3 C Turn on szip compression for var 3. retval = nf_def_var_szip(ncid, varid(3), $ nf_szip_nn_option_mask, 4) if (retval .ne. 0) stop 3 C Write some data. retval = nf_put_var_int(ncid, varid(1), data1) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check it out. retval = check_file(ncid, var_name, dim_name) if (retval .ne. 0) stop 4 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, dim_name) implicit none include 'netcdf.inc' C I need these in both here and the main program. integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 22) integer MY_FILL_VALUE parameter (MY_FILL_VALUE = 42) C Parameters integer ncid character*(4) var_name(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIMS), natts_in integer varid_in(NVARS), dimid_in, no_fill_in, fill_value_in character*(4) var_name_in integer int_data_in(DIM_LEN) integer options_mask_in, pixels_per_block_in integer x, retval C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 5 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 1 if (varid_in(x) .ne. x) stop 6 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 1 if (dimid_in .ne. 1) stop 7 C Get the data in var1. It will be values we have set. retval = nf_get_var_int(ncid, varid_in(1), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. x) stop 13 end do C Get the szip settings for var1. H5Zszip code will sometimes bump C the bits_per_pixel from 32 to 64 and may add other flags to the C options_mask, so we don't check these values in this test. retval = nf_inq_var_szip(ncid, varid_in(1), options_mask_in, $ pixels_per_block_in) C Get the data in var2. It will be default fill value. retval = nf_get_var_int(ncid, varid_in(2), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. NF_FILL_INT) stop 13 end do C Get the data in var3. It will be all the assigned fill value. retval = nf_get_var_int(ncid, varid_in(3), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. MY_FILL_VALUE) stop 14 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_vars2.F0000664000175000017500000001042215205004070021313 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing new netCDF-4 atomic types. C Ed Hartnett, 2010 program ftst_vars2 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_vars2.nc') C We are writing 3D data, a 3 x 5 x 2 grid. Why do I use "x, y, z," C and then do everything in order "z, y, x?" Because I am a C C programmer, and everything in Fortran seems backwards! integer NDIMS, NTYPES parameter (NDIMS = 3, NTYPES = 5) integer NX, NY, NZ parameter (NX = 3, NY = 5, NZ = 2) C These will be used to set the per-variable chunk cache. integer CACHE_SIZE, CACHE_NELEMS, CACHE_PREEMPTION parameter (CACHE_SIZE = 8, CACHE_NELEMS = 571) parameter (CACHE_PREEMPTION = 42) C These will be used to check the setting of the per-variable chunk C cache. integer cache_size_in, cache_nelems_in, cache_preemption_in C NetCDF IDs. integer ncid, varid(NTYPES), dimids(NDIMS), typeid(NTYPES) C Name of the variable is stored here. character*80 var_name C This is the data array we will write, and a place to store it when C we read it back in. Z is the fastest varying dimension. integer data_out(NZ, NY, NX), data_in(NZ, NY, NX) C Loop indexes, and error handling. integer i, x, y, z, retval C Create some pretend data. do x = 1, NX do y = 1, NY do z = 1, NZ data_out(z, y, x) = (x-1) * NY * NZ + (y-1) * NZ + (z-1) end do end do end do print *, '' print *,'*** Testing netCDF-4 vars from F77 with new types.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "z", NZ, dimids(3)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, dimids(2)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "x", NX, dimids(1)) if (retval .ne. nf_noerr) stop 1 C These are the types of vars that will be written. typeid(1) = NF_UBYTE typeid(2) = NF_USHORT typeid(3) = NF_UINT typeid(4) = NF_INT64 typeid(5) = NF_UINT64 C Define the variables. do i = 1, NTYPES write(var_name, 1001) i 1001 format('var', I1) retval = nf_def_var(ncid, var_name, typeid(i), NDIMS, & dimids, varid(i)) if (retval .ne. nf_noerr) stop 1 C Set variable caches. retval = nf_set_var_chunk_cache(ncid, varid(i), CACHE_SIZE, & CACHE_NELEMS, CACHE_PREEMPTION) if (retval .ne. nf_noerr) stop 1 end do C Check the per-variable cache to make sure it is what we think it C is. do i = 1, NTYPES retval = nf_get_var_chunk_cache(ncid, varid(i), cache_size_in, & cache_nelems_in, cache_preemption_in) if (retval .ne. nf_noerr) stop 1 if (cache_size_in .ne. CACHE_SIZE .or. cache_nelems_in .ne. & CACHE_NELEMS .or. cache_preemption .ne. CACHE_PREEMPTION) & stop 8 end do C Write the pretend data to the file. do i = 1, NTYPES retval = nf_put_var_int(ncid, varid(i), data_out) if (retval .ne. nf_noerr) stop 1 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Read the data and check it. do i = 1, NTYPES retval = nf_get_var_int(ncid, varid(i), data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY do z = 1, NZ if (data_in(z, y, x) .ne. data_out(z, y, x)) stop 2 end do end do end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_types3.F0000664000175000017500000001006315205004070021343 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2007 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 user defined types from fortran. C Ed Hartnett, 2009 program ftst_types3 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_types3.nc') C We are writing 2D data, a 3 x 2 grid. integer NDIMS parameter (NDIMS = 2) integer dim_sizes(NDIMS) integer NX, NY parameter (NX = 3, NY = 2) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer cmp_typeid, typeid_in integer x_dimid, y_dimid integer typeids(1) integer grpid, sub_grpid C Info about the groups we'll create. character*(*) group_name, sub_group_name parameter (group_name = 'you_drive_me_crazy') parameter (sub_group_name = 'baby_Im_so_into_you') C Info about the type we'll create. integer size_in, base_type_in, nfields_in, class_in character*80 name_in character*(*) type_name, field_name parameter (type_name = 'I_just_want_to_have_some_fun') parameter (field_name = 'Ill_tell_it_to_the_world') integer ntypes integer cmp_size parameter (cmp_size = 4) integer offset_in, field_typeid_in, ndims_in, dim_sizes_in(NDIMS) C Loop indexes, and error handling. integer x, y, retval print *, '' print *,'*** Testing netCDF-4 user-defined types and groups.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a group and a subgroup. retval = nf_def_grp(ncid, group_name, grpid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_grp(grpid, sub_group_name, sub_grpid) if (retval .ne. nf_noerr) stop 1 C Define a compound type in the root group. retval = nf_def_compound(ncid, cmp_size, type_name, & cmp_typeid) if (retval .ne. nf_noerr) stop 1 C Include a float. retval = nf_insert_compound(ncid, cmp_typeid, field_name, 0, & NF_FLOAT) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find the type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1 .or. typeids(1) .ne. cmp_typeid) stop 2 C Check the type. retval = nf_inq_user_type(ncid, typeids(1), name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. cmp_size .or. nfields_in .ne. 1 .or. & class_in .ne. NF_COMPOUND) stop 31 C Check the first field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 1, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(field_name)) .ne. field_name .or. & offset_in .ne. 0 .or. field_typeid_in .ne. NF_FLOAT .or. & ndims_in .ne. 0) stop 19 C Go to a child group and find the id of our type. retval = nf_inq_grp_ncid(ncid, group_name, sub_grpid) if (retval .ne. nf_noerr) stop 1 retval = nf_inq_typeid(sub_grpid, type_name, typeid_in) if (retval .ne. nf_noerr) stop 1 retval = nf_inq_user_type(sub_grpid, typeid_in, name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. cmp_size .or. nfields_in .ne. 1 .or. & class_in .ne. NF_COMPOUND) stop 22 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_types3.F0000664000175000017500000001006015205004070021503 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2007 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 user defined types from fortran. C Ed Hartnett, 2009 program ftst_types3 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_types3.nc') C We are writing 2D data, a 3 x 2 grid. integer NDIMS parameter (NDIMS = 2) integer dim_sizes(NDIMS) integer NX, NY parameter (NX = 3, NY = 2) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer cmp_typeid, typeid_in integer x_dimid, y_dimid integer typeids(1) integer grpid, sub_grpid C Info about the groups we'll create. character*(*) group_name, sub_group_name parameter (group_name = 'you_drive_me_crazy') parameter (sub_group_name = 'baby_Im_so_into_you') C Info about the type we'll create. integer size_in, base_type_in, nfields_in, class_in character*80 name_in character*(*) type_name, field_name parameter (type_name = 'I_just_want_to_have_some_fun') parameter (field_name = 'Ill_tell_it_to_the_world') integer ntypes integer cmp_size parameter (cmp_size = 4) integer offset_in, field_typeid_in, ndims_in, dim_sizes_in(NDIMS) C Loop indexes, and error handling. integer x, y, retval print *, '' print *,'*** Testing netCDF-4 user-defined types and groups.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a group and a subgroup. retval = nf_def_grp(ncid, group_name, grpid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_grp(grpid, sub_group_name, sub_grpid) if (retval .ne. nf_noerr) stop 1 C Define a compound type in the root group. retval = nf_def_compound(ncid, cmp_size, type_name, & cmp_typeid) if (retval .ne. nf_noerr) stop 1 C Include a float. retval = nf_insert_compound(ncid, cmp_typeid, field_name, 0, & NF_FLOAT) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find the type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1 .or. typeids(1) .ne. cmp_typeid) stop 2 C Check the type. retval = nf_inq_user_type(ncid, typeids(1), name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. cmp_size .or. nfields_in .ne. 1 .or. & class_in .ne. NF_COMPOUND) stop 31 C Check the first field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 1, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(field_name)) .ne. field_name .or. & offset_in .ne. 0 .or. field_typeid_in .ne. NF_FLOAT .or. & ndims_in .ne. 0) stop 19 C Go to a child group and find the id of our type. retval = nf_inq_grp_ncid(ncid, group_name, sub_grpid) if (retval .ne. nf_noerr) stop 1 retval = nf_inq_typeid(sub_grpid, type_name, typeid_in) if (retval .ne. nf_noerr) stop 1 retval = nf_inq_user_type(sub_grpid, typeid_in, name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. cmp_size .or. nfields_in .ne. 1 .or. & class_in .ne. NF_COMPOUND) stop 22 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_vars.F0000664000175000017500000001503515205004070021236 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2006 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing chunking and deflate settings. C Ed Hartnett program ftst_vars USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_vars.nc') C We are writing 2D data, a 6 x 12 grid. integer NDIMS parameter (NDIMS=2) integer NX, NY parameter (NX = 6, NY = 12) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer x_dimid, y_dimid C This is the data array we will write, and a place to store it when C we read it back in. integer data_out(NY, NX), data_in(NY, NX) C For checking our data file to make sure it's correct. integer chunks(NDIMS), chunks_in(NDIMS) integer shuffle, deflate, deflate_level, checksum, contiguous integer endianness C Cache size stuff. integer DEFAULT_CACHE_SIZE, DEFAULT_CACHE_NELEMS_OLD integer DEFAULT_CACHE_NELEMS_NEW integer DEFAULT_CACHE_PREEMPTION parameter (DEFAULT_CACHE_SIZE = 67108864) parameter (DEFAULT_CACHE_NELEMS_OLD = 4133) parameter (DEFAULT_CACHE_NELEMS_NEW = 1000) parameter (DEFAULT_CACHE_PREEMPTION = 75) integer CACHE_SIZE, CACHE_NELEMS, CACHE_PREEMPTION parameter (CACHE_SIZE = 8000, CACHE_NELEMS = 500) parameter (CACHE_PREEMPTION = 50) integer cache_size_in, cache_nelems_in, cache_preemption_in C Loop indexes, and error handling. integer x, y, retval C Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = 2147483646 + x * y end do end do print *, '' print *,'*** Testing definition of netCDF-4 vars from Fortran 77.' C Check default chunk cache sizes. retval = nf_get_chunk_cache(cache_size_in, cache_nelems_in, & cache_preemption_in) if (retval .ne. nf_noerr) stop 1 if (cache_size_in .ne. DEFAULT_CACHE_SIZE .or. & (cache_nelems_in .ne. DEFAULT_CACHE_NELEMS_OLD .and. & cache_nelems_in .ne. DEFAULT_CACHE_NELEMS_NEW) .or. & cache_preemption_in .ne. DEFAULT_CACHE_PREEMPTION) stop 4 C Change the cache size for the files created/opened in this program. retval = nf_set_chunk_cache(CACHE_SIZE, CACHE_NELEMS, & CACHE_PREEMPTION) if (retval .ne. nf_noerr) stop 1 C Check chunk cache sizes. retval = nf_get_chunk_cache(cache_size_in, cache_nelems_in, & cache_preemption_in) if (retval .ne. nf_noerr) stop 1 if (cache_size_in .ne. CACHE_SIZE .or. & cache_nelems_in .ne. CACHE_NELEMS .or. & cache_preemption_in .ne. CACHE_PREEMPTION) stop 4 C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 1 C Define the variable. dimids(1) = y_dimid dimids(2) = x_dimid retval = nf_def_var(ncid, "data", NF_INT64, NDIMS, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Turn on chunking. chunks(1) = NY chunks(2) = NX retval = nf_def_var_chunking(ncid, varid, 0, chunks) if (retval .ne. nf_noerr) stop 1 C Set variable to big-endian (default is whatever is native to C writing machine). retval = nf_def_var_endian(ncid, varid, NF_ENDIAN_BIG) if (retval .ne. nf_noerr) stop 1 C Turn on deflate, fletcher32. retval = nf_def_var_deflate(ncid, varid, 0, 1, 4) if (retval .ne. nf_noerr) stop 1 retval = nf_def_var_fletcher32(ncid, varid, NF_FLETCHER32) if (retval .ne. nf_noerr) stop 1 C Is everything set that is supposed to be? retval = nf_inq_var_deflate(ncid, varid, shuffle, deflate, + deflate_level) if (retval .ne. nf_noerr) stop 1 if (shuffle .ne. 0 .or. deflate .ne. 1 .or. + deflate_level .ne. 4) stop 2 retval = nf_inq_var_fletcher32(ncid, varid, checksum) if (retval .ne. nf_noerr) stop 1 if (checksum .ne. NF_FLETCHER32) stop 2 retval = nf_inq_var_chunking(ncid, varid, contiguous, chunks_in) if (retval .ne. nf_noerr) stop 1 if (contiguous .ne. 0) stop 2 if (chunks(1) .ne. chunks_in(1) .or. + chunks(2) .ne. chunks_in(2)) stop 2 retval = nf_inq_var_endian(ncid, varid, endianness) if (retval .ne. nf_noerr) stop 1 if (endianness .ne. NF_ENDIAN_BIG) stop 2 C Since this is a classic model file, we must call enddef retval = nf_enddef(ncid) if (retval .ne. nf_noerr) stop 1 C Write the pretend data to the file. retval = nf_put_var_int(ncid, varid, data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find our variable. retval = nf_inq_varid(ncid, "data", varid) if (retval .ne. nf_noerr) stop 1 if (varid .ne. 1) stop 2 C Check the deflate, fletcher32, chunking, and endianness. retval = nf_inq_var_deflate(ncid, varid, shuffle, deflate, + deflate_level) if (retval .ne. nf_noerr) stop 1 if (shuffle .ne. 0 .or. deflate .ne. 1 .or. + deflate_level .ne. 4) stop 2 retval = nf_inq_var_fletcher32(ncid, varid, checksum) if (retval .ne. nf_noerr) stop 1 if (checksum .ne. NF_FLETCHER32) stop 2 retval = nf_inq_var_chunking(ncid, varid, contiguous, chunks_in) if (retval .ne. nf_noerr) stop 1 if (contiguous .ne. 0) stop 2 if (chunks(1) .ne. chunks_in(1) .or. + chunks(2) .ne. chunks_in(2)) stop 2 retval = nf_inq_var_endian(ncid, varid, endianness) if (retval .ne. nf_noerr) stop 1 if (endianness .ne. NF_ENDIAN_BIG) stop 2 C Read the data and check it. retval = nf_get_var_int(ncid, varid, data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY if (data_in(y, x) .ne. data_out(y, x)) stop 2 end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_vars4.F0000664000175000017500000000732215205004070021157 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing VLEN types. C Ed Hartnett, 2009 program ftst_vars4 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars4.nc') C NetCDF IDs. integer ncid, vlen_typeid integer max_types parameter (max_types = 1) C Need these to read type information. integer num_types, typeids(max_types) integer base_type, base_size, num_members, member_value character*80 type_name, member_name integer type_size, nfields, class C Information for the vlen type we will define. character*(*) vlen_type_name parameter (vlen_type_name = 'vlen_type') C Some data about and for the vlen. integer vlen_len, vlen_len_in parameter (vlen_len = 5) integer data1(vlen_len), data1_in(vlen_len) C These must be big enough to hold the struct nc_vlen in netcdf.h. integer*8 vlen(10), vlen_in(10) C Loop indexes, and error handling. integer x, retval, index(1) print *, '' print *,'*** Testing VLEN types.' do x = 1, vlen_len data1(x) = x end do C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create the vlen type. retval = nf_def_vlen(ncid, vlen_type_name, nf_int, vlen_typeid) if (retval .ne. nf_noerr) stop 1 C Set up the vlen with this helper function, since F77 can't deal C with pointers. retval = nf_put_vlen_element(ncid, vlen_typeid, vlen, & vlen_len, data1) if (retval .ne. nf_noerr) stop 1 C Write the vlen attribute. retval = nf_put_att(ncid, NF_GLOBAL, 'att1', vlen_typeid, 1, vlen) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Get the typeids of all user defined types. retval = nf_inq_typeids(ncid, num_types, typeids) if (retval .ne. nf_noerr) stop 1 if (num_types .ne. max_types) stop 2 C Use nf_inq_user_type to confirm this is an vlen type, with base C type NF_INT. retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(vlen_type_name)) .ne. vlen_type_name .or. & base_type .ne. nf_int .or. & nfields .ne. 0 .or. class .ne. nf_vlen) stop 2 C Use nf_inq_vlen and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_vlen(ncid, typeids(1), type_name, base_size, & base_type) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(vlen_type_name)) .ne. vlen_type_name .or. & base_type .ne. nf_int) stop 2 C Read the vlen attribute. retval = nf_get_att(ncid, NF_GLOBAL, 'att1', vlen_in) if (retval .ne. nf_noerr) stop 1 C Get the data from the vlen we just read. retval = nf_get_vlen_element(ncid, vlen_typeid, vlen_in, & vlen_len_in, data1_in) if (retval .ne. nf_noerr) stop 1 if (vlen_len_in .ne. vlen_len) stop 2 C Check the data do x = 1, vlen_len if (data1(x) .ne. data1_in(x)) stop 2 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_vars5.F0000664000175000017500000000727515205004070021332 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing some compound type behavior. C Ed Hartnett, 2009 program ftst_vars5 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_vars5.nc') C NetCDF IDs. integer ncid, cmp_typeid integer max_types parameter (max_types = 1) C Need these to read type information. integer num_types, typeids(max_types) integer base_type, type_size, num_members, member_value character*80 type_name, member_name integer nfields, class C Information for the compound type we will define. character*(*) cmp_type_name, int1_name, int2_name parameter (cmp_type_name = 'compound_type') parameter (int1_name = 'int1', int2_name = 'int2') integer compound_len, compound_len_in parameter (compound_len = 2) integer data1(compound_len), data1_in(compound_len) character*(4) att_name parameter (att_name = 'att1') C Loop indexes, and error handling. integer x, retval, index(1) print *, '' print *,'*** Testing compound types.' C Prepare some data to write. do x = 1, compound_len data1(x) = x end do C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create the compound type. retval = nf_def_compound(ncid, 8, cmp_type_name, & cmp_typeid) if (retval .ne. nf_noerr) stop 1 C Insert two integers. retval = nf_insert_compound(ncid, cmp_typeid, int1_name, & 0, NF_INT) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_compound(ncid, cmp_typeid, int2_name, & 4, NF_INT) if (retval .ne. nf_noerr) stop 1 C Write the compound attribute. retval = nf_put_att(ncid, NF_GLOBAL, att_name, cmp_typeid, & 1, data1) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Get the typeids of all user defined types. retval = nf_inq_typeids(ncid, num_types, typeids) if (retval .ne. nf_noerr) stop 1 if (num_types .ne. max_types) stop 2 C Use nf_inq_user_type to confirm this is an compound type retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(cmp_type_name)) .ne. cmp_type_name .or. & type_size .ne. 8 .or. base_type .ne. 0 .or. & nfields .ne. 2 .or. class .ne. nf_compound) stop 2 C Use nf_inq_compound and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_compound(ncid, typeids(1), type_name, type_size, & nfields) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(cmp_type_name)) .ne. cmp_type_name .or. & base_type .ne. 0 .or. type_size .ne. 8 .or. & nfields .ne. 2) stop 2 C Read the compound attribute. retval = nf_get_att(ncid, NF_GLOBAL, att_name, data1_in) if (retval .ne. nf_noerr) stop 1 C Check the data do x = 1, compound_len if (data1(x) .ne. data1_in(x)) stop 2 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_parallel_nasa.F0000664000175000017500000001135015205004070022712 0ustar alastairalastair! This is part of the netCDF package. Copyright 2011 University ! Corporation for Atmospheric Research/Unidata. See COPYRIGHT file ! for conditions of use. ! This program tests netCDF-4 parallel I/O from fortran. This ! variation of the test was contributed by Dan at NASA. Thanks Dan! program ftst_parallel_nasa implicit none include 'netcdf.inc' include 'mpif.h' integer mode_flag ! file create mode integer p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, ' ' print *, '*** Testing netCDF-4 parallel I/O from F77 again.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'This test program must be run on 4 processors.' stop 2 endif #ifdef NF_HAS_PNETCDF mode_flag = IOR(nf_clobber, nf_mpiio) call parallel_io(mode_flag) #endif #ifdef NF_HAS_PARALLEL4 mode_flag = IOR(nf_netcdf4, nf_classic_model) mode_flag = IOR(mode_flag, nf_clobber) mode_flag = IOR(mode_flag, nf_mpiio) call parallel_io(mode_flag) #endif call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' end program ftst_parallel_nasa subroutine parallel_io(mode_flag) implicit none include 'netcdf.inc' include 'mpif.h' integer mode_flag ! file create mode character*(*) FILE_NAME parameter (FILE_NAME = 'ftst_parallel_nasa.nc') integer MAX_DIMS parameter (MAX_DIMS = 2) integer NX, NY parameter (NX = 16) parameter (NY = 16) integer NUM_PROC parameter (NUM_PROC = 4) integer ncid, varid, dimids(MAX_DIMS) integer x_dimid, y_dimid real data_out(NY / 2, NX / 2), data_in(NY / 2, NX / 2) integer x, y, retval integer my_rank, ierr integer start(MAX_DIMS), count(MAX_DIMS) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) ! Create some pretend data. do x = 1, NX / 2 do y = 1, NY / 2 data_out(y, x) = real(my_rank) end do end do ! Create the netCDF file. retval = nf_create_par(FILE_NAME, mode_flag, MPI_COMM_WORLD, $ MPI_INFO_NULL, ncid) if (retval .ne. nf_noerr) stop 3 ! Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 4 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 5 dimids(1) = x_dimid dimids(2) = y_dimid ! Define the variable. retval = nf_def_var(ncid, "data", NF_FLOAT, MAX_DIMS, dimids, $ varid) if (retval .ne. nf_noerr) stop 6 ! With classic model netCDF-4 file, enddef must be called. retval = nf_enddef(ncid) if (retval .ne. nf_noerr) stop 7 ! Determine what part of the variable will be written for this ! processor. It's a checkerboard decomposition. count(1) = NX / 2 count(2) = NY / 2 if (my_rank .eq. 0) then start(1) = 1 start(2) = 1 else if (my_rank .eq. 1) then start(1) = NX / 2 + 1 start(2) = 1 else if (my_rank .eq. 2) then start(1) = 1 start(2) = NY / 2 + 1 else if (my_rank .eq. 3) then start(1) = NX / 2 + 1 start(2) = NY / 2 + 1 endif ! Write this processor's data. retval = nf_put_vara_real(ncid, varid, start, count, data_out) if (retval .ne. nf_noerr) then print*,'Error writing data ', retval print*, NF_STRERROR(retval) stop 8 endif ! Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 9 ! Reopen the file. retval = nf_open_par(FILE_NAME, IOR(nf_nowrite, nf_mpiio), $ MPI_COMM_WORLD, MPI_INFO_NULL, ncid) if (retval .ne. nf_noerr) stop 10 ! Set collective access on this variable. This will cause all ! reads/writes to happen together on every processor. Fairly ! pointless, in this contexct, but I want to at least call this ! function once in my testing. retval = nf_var_par_access(ncid, varid, nf_collective) if (retval .ne. nf_noerr) stop 11 ! Read this processor's data. retval = nf_get_vara_real(ncid, varid, start, count, data_in) if (retval .ne. nf_noerr) stop 12 ! Check the data. do x = 1, NX / 2 do y = 1, NY / 2 if (data_in(y, x) .ne. my_rank) then print*,data_in(y, x), ' NE ', my_rank stop 13 endif end do end do ! Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 14 end subroutine parallel_io netcdf-fortran-4.6.3+ds/nf_test4/f03tst_open_mem.F0000775000175000017500000001773415205004070022075 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests prototype nf_open_mem and procedure for C creating an in memory netcdf file from an existing netcdf C file on a hard drive. The program will first use the logic C from f03tst_vars6.F to create a small netcdf file on C the hard drive. This file is then opened as a Fortran C unformatted, stream file and read into an allocatable C array of C_CHAR type. C Dennis Heimbigner, 2018 program ftst_open_mem use netcdf4_f03 use iso_c_binding, ONLY : C_CHAR implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_open_mem.nc') integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 2) integer check_file C C *** Specify an allocatable array of KIND=C_CHAR with TARGET C attribute to hold in-memory NC file. This is the closest C we can get to in Fortran >= 2003 to an array of bytes C that C will understand Character(KIND=C_CHAR), ALLOCATABLE, TARGET :: memfile(:) integer ncid, varid(NVARS), dimids(NDIMS) integer data_len_in, offset, ncsize, iostat, mode parameter (offset = 20) integer data1(data_len), data1_in(data_len) character*(4) var_name(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer NO_FILL, MY_FILL_VALUE parameter (NO_FILL = 1) parameter (MY_FILL_VALUE = 42) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing fill values.' C Prepare some data to write. do x = 1, data_len data1(x) = x end do C Set up var names. var_name(1) = 'var1' var_name(2) = 'var2' var_name(3) = 'var3' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create a few integer variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), NF_INT, NDIMS, dimids, $ varid(x)) if (retval .ne. nf_noerr) stop 1 end do C Set no fill mode for the second variable. retval = nf_def_var_fill(ncid, varid(2), NO_FILL, 88) if (retval .ne. 0) stop 2 C Set an alternative fill value for the third variable. retval = nf_def_var_fill(ncid, varid(3), 0, MY_FILL_VALUE) if (retval .ne. 0) stop 3 C Check it out. c retval = check_file(ncid, var_name, dim_name) c if (retval .ne. 0) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C C ***** TESTING OF nf_open_mem ****** C Print *,'' Print *,' testing nf_open_mem' Print *,'' C C First open external netcdf file with unformatted stream access C and get file size (hopefully in bytes) using INQUIRE intrinsic C Open(7, FILE=FILE_NAME, STATUS="UNKNOWN", ACCESS="STREAM", & & FORM="UNFORMATTED") INQUIRE(FILE=FILE_NAME, SIZE=ncsize) Print *,'' Print *,' FILE = ', TRIM(FILE_NAME), ' is ', ncsize, ' bytes' Print *,'' C For non-zero length files ALLOCATED memfile to size returned by INQUIRE C Then do an unformatted read on file. If no read errors (iostat==0) C then call nf_open_mem in NF_DISKLESS mode If (ncsize > 0) Then ALLOCATE(memfile(ncsize)) Read(7, iostat=iostat) memfile(1:ncsize) If (iostat == 0) then Close(7) mode = NF_INMEMORY retval = nf_open_mem(FILE_NAME, mode, ncsize, memfile, ncid) Else retval = iostat EndIf if (retval .ne. 0) stop 41 Else stop 42 EndIf retval = check_file(ncid, var_name, dim_name) if (retval .ne. 0) stop 4 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 If (ALLOCATED(memfile)) DEALLOCATE(memfile) print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, dim_name) use netcdf4_f03 implicit none C I need these in both here and the main program. integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 2) integer MY_FILL_VALUE parameter (MY_FILL_VALUE = 42) C Parameters integer ncid character*(4) var_name(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIMS), natts_in integer varid_in(NVARS), dimid_in, no_fill_in, fill_value_in character*(4) var_name_in integer int_data_in(DIM_LEN) integer x, retval C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 5 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 1 if (varid_in(x) .ne. x) stop 6 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 1 if (dimid_in .ne. 1) stop 7 C These things are the same for all three variables, except C natts_in.. do x = 1, NVARS retval = nf_inq_var(ncid, varid_in(x), var_name_in, xtype_in, $ ndims_in, dimids_in, natts_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. xtype_in .ne. NF_INT .or. dimids_in(1) $ .ne. dimid_in) stop 8 if (x .eq. 3 .and. natts_in .ne. 1) stop 9 if (x .lt. 3 .and. natts_in .ne. 0) stop 10 end do C Check the fill value for the first var. Nothing was set, so C no_fill should be off, and fill_value should be the default fill C value for this type. retval = nf_inq_var_fill(ncid, varid_in(1), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 0 .or. fill_value_in .ne. nf_fill_int) stop 11 C Check that no_fill mode is on for the second variable. retval = nf_inq_var_fill(ncid, varid_in(2), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 1 .or. fill_value_in .ne. nf_fill_int) stop 12 C Check that a non-default fill value is in use for the third variable. retval = nf_inq_var_fill(ncid, varid_in(3), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 0 .or. fill_value_in .ne. MY_FILL_VALUE) stop $ 2 C Get the data in var1. It will be all the default fill value. retval = nf_get_var_int(ncid, varid_in(1), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. nf_fill_int) stop 13 end do C Get the data in var2. What will it be? retval = nf_get_var_int(ncid, varid_in(2), int_data_in) if (retval .ne. nf_noerr) stop 1 C$$$ do x = 1, DIM_LEN C$$$ print *, int_data_in(x) C$$$ end do C Get the data in var3. It will be all the default fill value. retval = nf_get_var_int(ncid, varid_in(3), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN C print *, int_data_in(x) if (int_data_in(x) .ne. MY_FILL_VALUE) stop 14 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/ftst_v2.F0000664000175000017500000000733715205004070020455 0ustar alastairalastairC This is part of the netCDF package. Copyright 2009-2019 University C Corporation for Atmospheric Research/Unidata. See COPYRIGHT file C for conditions of use. C This program tests the fortran V2 API with netCDF-4. C Ed Hartnett 2009 program ftst_v2 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_v2.nc') integer ncid, timedim, londim, latdim, lonid, latid character*(3) lat_name parameter (lat_name = 'lat') character*(3) lon_name parameter (lon_name = 'lon') character*(4) time_name parameter (time_name = 'time') integer LON_LEN, LAT_LEN parameter (LON_LEN = 3, LAT_LEN = 5) integer NDIMS, NVARS parameter (NDIMS = 3, NVARS = 2) integer ndims_in, nvars_in, ngatts_in, recdim_in integer dimsize_in, natts_in integer xtype_in, dimids_in(NDIMS) character*(128) name_in integer rc print *, '' print *,'*** Testing v2 fortran API with netCDF-4.' C Create the file. ncid = nccre(FILE_NAME, NF_NETCDF4, rc) timedim = ncddef(ncid, time_name, NCUNLIM, rc) londim = ncddef(ncid, lon_name, LON_LEN, rc) latdim = ncddef(ncid, lat_name, LAT_LEN, rc) lonid = ncvdef(ncid, lon_name, NCFLOAT, 1, londim, rc) latid = ncvdef(ncid, lat_name, NCFLOAT, 1, latdim, rc) C Check the file. call ncinq(ncid, ndims_in, nvars_in, ngatts_in, recdim_in, rc) if (ndims_in .ne. NDIMS) stop 2 if (ndims_in .ne. NDIMS .or. nvars_in .ne. NVARS .or. $ ngatts_in .ne. 0 .or. recdim_in .ne. timedim) stop 2 call ncdinq(ncid, timedim, name_in, dimsize_in, rc) if (name_in .ne. time_name .or. dimsize_in .ne. 0) stop 2 call ncdinq(ncid, londim, name_in, dimsize_in, rc) if (name_in .ne. lon_name .or. dimsize_in .ne. LON_LEN) stop 2 call ncdinq(ncid, latdim, name_in, dimsize_in, rc) if (name_in .ne. lat_name .or. dimsize_in .ne. LAT_LEN) stop 2 call ncvinq(ncid, lonid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lon_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. londim) stop 2 call ncvinq(ncid, latid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lat_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. latdim) stop 2 C Close the file. call ncclos(ncid, rc) C Reopen, and check again. ncid = ncopn(FILE_NAME, NCNOWRIT, rc) C Check the file. call ncinq(ncid, ndims_in, nvars_in, ngatts_in, recdim_in, rc) if (ndims_in .ne. NDIMS) stop 2 if (ndims_in .ne. NDIMS .or. nvars_in .ne. NVARS .or. $ ngatts_in .ne. 0 .or. recdim_in .ne. timedim) stop 2 call ncdinq(ncid, timedim, name_in, dimsize_in, rc) if (name_in .ne. time_name .or. dimsize_in .ne. 0) stop 2 call ncdinq(ncid, londim, name_in, dimsize_in, rc) if (name_in .ne. lon_name .or. dimsize_in .ne. LON_LEN) stop 2 call ncdinq(ncid, latdim, name_in, dimsize_in, rc) if (name_in .ne. lat_name .or. dimsize_in .ne. LAT_LEN) stop 2 call ncvinq(ncid, lonid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lon_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. londim) stop 2 call ncvinq(ncid, latid, name_in, xtype_in, ndims_in, dimids_in, $ natts_in, rc) if (name_in .ne. lat_name .or. xtype_in .ne. NCFLOAT .or. $ ndims_in .ne. 1 .or. dimids_in(1) .ne. latdim) stop 2 call ncclos(ncid, rc) print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_types.F0000664000175000017500000001420515205004070021262 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2007 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 user defined types from fortran. C Ed Hartnett, 2009 program ftst_types implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_types.nc') C We are writing 2D data, a 6 x 12 grid. integer NDIMS parameter (NDIMS=2) integer NX, NY parameter (NX = 6, NY = 12) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer wind_typeid integer x_dimid, y_dimid integer typeids(1) C Info about the type we'll create. integer size_in, base_type_in, nfields_in, class_in character*80 name_in character*(*) type_name, u_name, v_name parameter (type_name = 'wind_t', u_name = 'U', v_name = 'V') integer ntypes integer WIND_T_SIZE parameter (WIND_T_SIZE = 8) integer offset_in, field_typeid_in, ndims_in, dim_sizes_in(1) C This is the data array we will write, and a place to store it when C we read it back in. integer data_out(NY, NX), data_in(NY, NX) C Loop indexes, and error handling. integer x, y, retval C Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do print *, '' print *,'*** Testing netCDF-4 compound type from F77.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 1 C Define a compound type. retval = nf_def_compound(ncid, WIND_T_SIZE, type_name, & wind_typeid) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_compound(ncid, wind_typeid, u_name, 0, NF_INT) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_compound(ncid, wind_typeid, v_name, 4, NF_INT) if (retval .ne. nf_noerr) stop 1 C Check out my new type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1) stop 2 if (typeids(1) .ne. wind_typeid) stop 2 C Define the variable. dimids(2) = x_dimid dimids(1) = y_dimid retval = nf_def_var(ncid, "data", NF_INT, NDIMS, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Write the pretend data to the file. retval = nf_put_var_int(ncid, varid, data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find the type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1 .or. typeids(1) .ne. wind_typeid) stop 2 C Check the type. retval = nf_inq_user_type(ncid, typeids(1), name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. WIND_T_SIZE .or. nfields_in .ne. 2 .or. & class_in .ne. NF_COMPOUND) stop 2 C Check it differently. retval = nf_inq_compound(ncid, typeids(1), name_in, size_in, & nfields_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. WIND_T_SIZE .or. nfields_in .ne. 2) stop 2 C Check it one piece at a time. retval = nf_inq_compound_nfields(ncid, typeids(1), nfields_in) if (retval .ne. nf_noerr) stop 1 if (nfields_in .ne. 2) stop 2 retval = nf_inq_compound_size(ncid, typeids(1), size_in) if (retval .ne. nf_noerr) stop 1 if (size_in .ne. WIND_T_SIZE) stop 2 retval = nf_inq_compound_name(ncid, typeids(1), name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name) stop 2 C Check the first field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 1, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(u_name)) .ne. u_name .or. offset_in .ne. 0 .or. & field_typeid_in .ne. NF_INT .or. ndims_in .ne. 0) stop 2 retval = nf_inq_compound_fieldname(ncid, typeids(1), 1, name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(u_name)) .ne. u_name) stop 2 retval = nf_inq_compound_fieldoffset(ncid, typeids(1), 1, & offset_in) if (retval .ne. nf_noerr) stop 1 if (offset_in .ne. 0) stop 2 retval = nf_inq_compound_fieldtype(ncid, typeids(1), 1, & field_typeid_in) if (retval .ne. nf_noerr) stop 1 if (field_typeid_in .ne. NF_INT) stop 2 retval = nf_inq_compound_fieldndims(ncid, typeids(1), 1, & ndims_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 0) stop 2 C Check the second field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 2, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(v_name)) .ne. v_name .or. offset_in .ne. 4 .or. & field_typeid_in .ne. NF_INT .or. ndims_in .ne. 0) stop 2 C Find our variable. retval = nf_inq_varid(ncid, "data", varid) if (retval .ne. nf_noerr) stop 1 if (varid .ne. 1) stop 2 C Read the data and check it. retval = nf_get_var_int(ncid, varid, data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY if (data_in(y, x) .ne. data_out(y, x)) stop 2 end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_vars5.F0000664000175000017500000000730015205004070021154 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing some compound type behavior. C Ed Hartnett, 2009 program ftst_vars5 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars5.nc') C NetCDF IDs. integer ncid, cmp_typeid integer max_types parameter (max_types = 1) C Need these to read type information. integer num_types, typeids(max_types) integer base_type, type_size, num_members, member_value character*80 type_name, member_name integer nfields, class C Information for the compound type we will define. character*(*) cmp_type_name, int1_name, int2_name parameter (cmp_type_name = 'compound_type') parameter (int1_name = 'int1', int2_name = 'int2') integer compound_len, compound_len_in parameter (compound_len = 2) integer data1(compound_len), data1_in(compound_len) character*(4) att_name parameter (att_name = 'att1') C Loop indexes, and error handling. integer x, retval, index(1) print *, '' print *,'*** Testing compound types.' C Prepare some data to write. do x = 1, compound_len data1(x) = x end do C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create the compound type. retval = nf_def_compound(ncid, 8, cmp_type_name, & cmp_typeid) if (retval .ne. nf_noerr) stop 1 C Insert two integers. retval = nf_insert_compound(ncid, cmp_typeid, int1_name, & 0, NF_INT) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_compound(ncid, cmp_typeid, int2_name, & 4, NF_INT) if (retval .ne. nf_noerr) stop 1 C Write the compound attribute. retval = nf_put_att(ncid, NF_GLOBAL, att_name, cmp_typeid, & 1, data1) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Get the typeids of all user defined types. retval = nf_inq_typeids(ncid, num_types, typeids) if (retval .ne. nf_noerr) stop 1 if (num_types .ne. max_types) stop 2 C Use nf_inq_user_type to confirm this is an compound type retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(cmp_type_name)) .ne. cmp_type_name .or. & type_size .ne. 8 .or. base_type .ne. 0 .or. & nfields .ne. 2 .or. class .ne. nf_compound) stop 2 C Use nf_inq_compound and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_compound(ncid, typeids(1), type_name, type_size, & nfields) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(cmp_type_name)) .ne. cmp_type_name .or. & base_type .ne. 0 .or. type_size .ne. 8 .or. & nfields .ne. 2) stop 2 C Read the compound attribute. retval = nf_get_att(ncid, NF_GLOBAL, att_name, data1_in) if (retval .ne. nf_noerr) stop 1 C Check the data do x = 1, compound_len if (data1(x) .ne. data1_in(x)) stop 2 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/Makefile.in0000664000175000017500000021423115205004070021015 0ustar alastairalastair# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This is a automake file, part of Unidata's netCDF package. # Copyright 2019, see the COPYRIGHT file for more information. # This file builds and runs tests for the netCDF-4 features in the F77 # API. # Ed Hartnett, 2019 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ # Only build and run this test if quantize feature is supported. @TEST_QUANTIZE_TRUE@am__append_1 = ftst_zstandard check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ $(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \ $(am__EXEEXT_12) TESTS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__append_5) \ $(am__append_7) $(am__EXEEXT_6) $(am__append_16) \ $(am__EXEEXT_12) # This is a netCDF-4 V2 F77 test program. @BUILD_V2_TRUE@am__append_2 = ftst_v2 @BUILD_V2_TRUE@am__append_3 = ftst_v2 # Test parallel I/O for F77. @TEST_PARALLEL_TRUE@am__append_4 = ftst_parallel ftst_parallel_nasa @TEST_PARALLEL_TRUE@am__append_5 = run_f77_par_test.sh # Test filters. @TEST_FILTERS_TRUE@am__append_6 = ftst_filter @TEST_FILTERS_TRUE@am__append_7 = run_tst_filter.sh # Test szip if write capability is present in C library. @TEST_SZIP_WRITE_TRUE@am__append_8 = ftst_var_szip @TEST_SZIP_WRITE_TRUE@am__append_9 = ftst_var_szip # If quantize is available, run this test. @TEST_QUANTIZE_TRUE@@USE_SED_TRUE@am__append_10 = f03tst_zstandard.F @TEST_QUANTIZE_TRUE@@USE_SED_TRUE@am__append_11 = f03tst_zstandard # This is a netCDF-4 V2 F77 test program. @BUILD_V2_TRUE@@USE_SED_TRUE@am__append_12 = f03tst_v2.F @BUILD_V2_TRUE@@USE_SED_TRUE@am__append_13 = f03tst_v2 # Convert the parallel test. @TEST_PARALLEL_TRUE@@USE_SED_TRUE@am__append_14 = f03tst_parallel.F @TEST_PARALLEL_TRUE@@USE_SED_TRUE@am__append_15 = f03tst_parallel @TEST_PARALLEL_TRUE@@USE_SED_TRUE@am__append_16 = run_f77_par_test_03.sh # Convert the szip test. @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@am__append_17 = f03tst_var_szip.F @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@am__append_18 = f03tst_var_szip # Compile and run the generated tests. @USE_SED_TRUE@am__append_19 = $(F03_TESTS) @USE_SED_TRUE@am__append_20 = $(F03_TESTS) subdir = nf_test4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @TEST_QUANTIZE_TRUE@am__EXEEXT_1 = ftst_zstandard$(EXEEXT) am__EXEEXT_2 = ftst_groups$(EXEEXT) ftst_vars$(EXEEXT) \ ftst_vars2$(EXEEXT) ftst_vars3$(EXEEXT) ftst_vars4$(EXEEXT) \ ftst_vars5$(EXEEXT) ftst_vars6$(EXEEXT) ftst_types$(EXEEXT) \ ftst_types2$(EXEEXT) ftst_types3$(EXEEXT) ftst_path$(EXEEXT) \ ftst_rengrps$(EXEEXT) f03tst_open_mem$(EXEEXT) \ ftst_var_compact$(EXEEXT) $(am__EXEEXT_1) @BUILD_V2_TRUE@am__EXEEXT_3 = ftst_v2$(EXEEXT) @TEST_PARALLEL_TRUE@am__EXEEXT_4 = ftst_parallel$(EXEEXT) \ @TEST_PARALLEL_TRUE@ ftst_parallel_nasa$(EXEEXT) @TEST_FILTERS_TRUE@am__EXEEXT_5 = ftst_filter$(EXEEXT) @TEST_SZIP_WRITE_TRUE@am__EXEEXT_6 = ftst_var_szip$(EXEEXT) @TEST_PARALLEL_TRUE@@USE_SED_TRUE@am__EXEEXT_7 = \ @TEST_PARALLEL_TRUE@@USE_SED_TRUE@ f03tst_parallel$(EXEEXT) @TEST_QUANTIZE_TRUE@@USE_SED_TRUE@am__EXEEXT_8 = \ @TEST_QUANTIZE_TRUE@@USE_SED_TRUE@ f03tst_zstandard$(EXEEXT) @BUILD_V2_TRUE@@USE_SED_TRUE@am__EXEEXT_9 = f03tst_v2$(EXEEXT) @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@am__EXEEXT_10 = \ @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@ f03tst_var_szip$(EXEEXT) @USE_SED_TRUE@am__EXEEXT_11 = f03tst_groups$(EXEEXT) \ @USE_SED_TRUE@ f03tst_vars$(EXEEXT) f03tst_vars2$(EXEEXT) \ @USE_SED_TRUE@ f03tst_vars3$(EXEEXT) f03tst_vars4$(EXEEXT) \ @USE_SED_TRUE@ f03tst_vars5$(EXEEXT) f03tst_vars6$(EXEEXT) \ @USE_SED_TRUE@ f03tst_types$(EXEEXT) f03tst_types2$(EXEEXT) \ @USE_SED_TRUE@ f03tst_types3$(EXEEXT) $(am__EXEEXT_8) \ @USE_SED_TRUE@ $(am__EXEEXT_9) $(am__EXEEXT_10) @USE_SED_TRUE@am__EXEEXT_12 = $(am__EXEEXT_11) am__f03tst_groups_SOURCES_DIST = f03tst_groups.F @USE_SED_TRUE@am_f03tst_groups_OBJECTS = f03tst_groups.$(OBJEXT) f03tst_groups_OBJECTS = $(am_f03tst_groups_OBJECTS) f03tst_groups_LDADD = $(LDADD) f03tst_groups_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_f03tst_open_mem_OBJECTS = f03tst_open_mem.$(OBJEXT) f03tst_open_mem_OBJECTS = $(am_f03tst_open_mem_OBJECTS) f03tst_open_mem_LDADD = $(LDADD) f03tst_open_mem_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_parallel_SOURCES_DIST = f03tst_parallel.F @TEST_PARALLEL_TRUE@@USE_SED_TRUE@am_f03tst_parallel_OBJECTS = \ @TEST_PARALLEL_TRUE@@USE_SED_TRUE@ f03tst_parallel.$(OBJEXT) f03tst_parallel_OBJECTS = $(am_f03tst_parallel_OBJECTS) f03tst_parallel_LDADD = $(LDADD) f03tst_parallel_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_types_SOURCES_DIST = f03tst_types.F @USE_SED_TRUE@am_f03tst_types_OBJECTS = f03tst_types.$(OBJEXT) f03tst_types_OBJECTS = $(am_f03tst_types_OBJECTS) f03tst_types_LDADD = $(LDADD) f03tst_types_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_types2_SOURCES_DIST = f03tst_types2.F @USE_SED_TRUE@am_f03tst_types2_OBJECTS = f03tst_types2.$(OBJEXT) f03tst_types2_OBJECTS = $(am_f03tst_types2_OBJECTS) f03tst_types2_LDADD = $(LDADD) f03tst_types2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_types3_SOURCES_DIST = f03tst_types3.F @USE_SED_TRUE@am_f03tst_types3_OBJECTS = f03tst_types3.$(OBJEXT) f03tst_types3_OBJECTS = $(am_f03tst_types3_OBJECTS) f03tst_types3_LDADD = $(LDADD) f03tst_types3_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_v2_SOURCES_DIST = f03tst_v2.F @BUILD_V2_TRUE@@USE_SED_TRUE@am_f03tst_v2_OBJECTS = \ @BUILD_V2_TRUE@@USE_SED_TRUE@ f03tst_v2.$(OBJEXT) f03tst_v2_OBJECTS = $(am_f03tst_v2_OBJECTS) f03tst_v2_LDADD = $(LDADD) f03tst_v2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_var_szip_SOURCES_DIST = f03tst_var_szip.F @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@am_f03tst_var_szip_OBJECTS = \ @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@ f03tst_var_szip.$(OBJEXT) f03tst_var_szip_OBJECTS = $(am_f03tst_var_szip_OBJECTS) f03tst_var_szip_LDADD = $(LDADD) f03tst_var_szip_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_vars_SOURCES_DIST = f03tst_vars.F @USE_SED_TRUE@am_f03tst_vars_OBJECTS = f03tst_vars.$(OBJEXT) f03tst_vars_OBJECTS = $(am_f03tst_vars_OBJECTS) f03tst_vars_LDADD = $(LDADD) f03tst_vars_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_vars2_SOURCES_DIST = f03tst_vars2.F @USE_SED_TRUE@am_f03tst_vars2_OBJECTS = f03tst_vars2.$(OBJEXT) f03tst_vars2_OBJECTS = $(am_f03tst_vars2_OBJECTS) f03tst_vars2_LDADD = $(LDADD) f03tst_vars2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_vars3_SOURCES_DIST = f03tst_vars3.F @USE_SED_TRUE@am_f03tst_vars3_OBJECTS = f03tst_vars3.$(OBJEXT) f03tst_vars3_OBJECTS = $(am_f03tst_vars3_OBJECTS) f03tst_vars3_LDADD = $(LDADD) f03tst_vars3_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_vars4_SOURCES_DIST = f03tst_vars4.F @USE_SED_TRUE@am_f03tst_vars4_OBJECTS = f03tst_vars4.$(OBJEXT) f03tst_vars4_OBJECTS = $(am_f03tst_vars4_OBJECTS) f03tst_vars4_LDADD = $(LDADD) f03tst_vars4_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_vars5_SOURCES_DIST = f03tst_vars5.F @USE_SED_TRUE@am_f03tst_vars5_OBJECTS = f03tst_vars5.$(OBJEXT) f03tst_vars5_OBJECTS = $(am_f03tst_vars5_OBJECTS) f03tst_vars5_LDADD = $(LDADD) f03tst_vars5_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_vars6_SOURCES_DIST = f03tst_vars6.F @USE_SED_TRUE@am_f03tst_vars6_OBJECTS = f03tst_vars6.$(OBJEXT) f03tst_vars6_OBJECTS = $(am_f03tst_vars6_OBJECTS) f03tst_vars6_LDADD = $(LDADD) f03tst_vars6_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f03tst_zstandard_SOURCES_DIST = f03tst_zstandard.F @USE_SED_TRUE@am_f03tst_zstandard_OBJECTS = \ @USE_SED_TRUE@ f03tst_zstandard.$(OBJEXT) f03tst_zstandard_OBJECTS = $(am_f03tst_zstandard_OBJECTS) f03tst_zstandard_LDADD = $(LDADD) f03tst_zstandard_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__ftst_filter_SOURCES_DIST = ftst_filter.F @TEST_FILTERS_TRUE@am_ftst_filter_OBJECTS = ftst_filter.$(OBJEXT) ftst_filter_OBJECTS = $(am_ftst_filter_OBJECTS) ftst_filter_LDADD = $(LDADD) ftst_filter_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_groups_OBJECTS = ftst_groups.$(OBJEXT) ftst_groups_OBJECTS = $(am_ftst_groups_OBJECTS) ftst_groups_LDADD = $(LDADD) ftst_groups_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__ftst_parallel_SOURCES_DIST = ftst_parallel.F @TEST_PARALLEL_TRUE@am_ftst_parallel_OBJECTS = \ @TEST_PARALLEL_TRUE@ ftst_parallel.$(OBJEXT) ftst_parallel_OBJECTS = $(am_ftst_parallel_OBJECTS) ftst_parallel_LDADD = $(LDADD) ftst_parallel_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__ftst_parallel_nasa_SOURCES_DIST = ftst_parallel_nasa.F @TEST_PARALLEL_TRUE@am_ftst_parallel_nasa_OBJECTS = \ @TEST_PARALLEL_TRUE@ ftst_parallel_nasa.$(OBJEXT) ftst_parallel_nasa_OBJECTS = $(am_ftst_parallel_nasa_OBJECTS) ftst_parallel_nasa_LDADD = $(LDADD) ftst_parallel_nasa_DEPENDENCIES = \ ${top_builddir}/fortran/libnetcdff.la am_ftst_path_OBJECTS = ftst_path.$(OBJEXT) ftst_path_OBJECTS = $(am_ftst_path_OBJECTS) ftst_path_LDADD = $(LDADD) ftst_path_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_rengrps_OBJECTS = ftst_rengrps.$(OBJEXT) ftst_rengrps_OBJECTS = $(am_ftst_rengrps_OBJECTS) ftst_rengrps_LDADD = $(LDADD) ftst_rengrps_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_types_OBJECTS = ftst_types.$(OBJEXT) ftst_types_OBJECTS = $(am_ftst_types_OBJECTS) ftst_types_LDADD = $(LDADD) ftst_types_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_types2_OBJECTS = ftst_types2.$(OBJEXT) ftst_types2_OBJECTS = $(am_ftst_types2_OBJECTS) ftst_types2_LDADD = $(LDADD) ftst_types2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_types3_OBJECTS = ftst_types3.$(OBJEXT) ftst_types3_OBJECTS = $(am_ftst_types3_OBJECTS) ftst_types3_LDADD = $(LDADD) ftst_types3_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__ftst_v2_SOURCES_DIST = ftst_v2.F @BUILD_V2_TRUE@am_ftst_v2_OBJECTS = ftst_v2.$(OBJEXT) ftst_v2_OBJECTS = $(am_ftst_v2_OBJECTS) ftst_v2_LDADD = $(LDADD) ftst_v2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_var_compact_OBJECTS = ftst_var_compact.$(OBJEXT) ftst_var_compact_OBJECTS = $(am_ftst_var_compact_OBJECTS) ftst_var_compact_LDADD = $(LDADD) ftst_var_compact_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__ftst_var_szip_SOURCES_DIST = ftst_var_szip.F @TEST_SZIP_WRITE_TRUE@am_ftst_var_szip_OBJECTS = \ @TEST_SZIP_WRITE_TRUE@ ftst_var_szip.$(OBJEXT) ftst_var_szip_OBJECTS = $(am_ftst_var_szip_OBJECTS) ftst_var_szip_LDADD = $(LDADD) ftst_var_szip_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_vars_OBJECTS = ftst_vars.$(OBJEXT) ftst_vars_OBJECTS = $(am_ftst_vars_OBJECTS) ftst_vars_LDADD = $(LDADD) ftst_vars_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_vars2_OBJECTS = ftst_vars2.$(OBJEXT) ftst_vars2_OBJECTS = $(am_ftst_vars2_OBJECTS) ftst_vars2_LDADD = $(LDADD) ftst_vars2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_vars3_OBJECTS = ftst_vars3.$(OBJEXT) ftst_vars3_OBJECTS = $(am_ftst_vars3_OBJECTS) ftst_vars3_LDADD = $(LDADD) ftst_vars3_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_vars4_OBJECTS = ftst_vars4.$(OBJEXT) ftst_vars4_OBJECTS = $(am_ftst_vars4_OBJECTS) ftst_vars4_LDADD = $(LDADD) ftst_vars4_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_vars5_OBJECTS = ftst_vars5.$(OBJEXT) ftst_vars5_OBJECTS = $(am_ftst_vars5_OBJECTS) ftst_vars5_LDADD = $(LDADD) ftst_vars5_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_vars6_OBJECTS = ftst_vars6.$(OBJEXT) ftst_vars6_OBJECTS = $(am_ftst_vars6_OBJECTS) ftst_vars6_LDADD = $(LDADD) ftst_vars6_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_ftst_zstandard_OBJECTS = ftst_zstandard.$(OBJEXT) ftst_zstandard_OBJECTS = $(am_ftst_zstandard_OBJECTS) ftst_zstandard_LDADD = $(LDADD) ftst_zstandard_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ PPF77COMPILE = $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_FFLAGS) $(FFLAGS) AM_V_PPF77 = $(am__v_PPF77_@AM_V@) am__v_PPF77_ = $(am__v_PPF77_@AM_DEFAULT_V@) am__v_PPF77_0 = @echo " PPF77 " $@; am__v_PPF77_1 = F77LD = $(F77) F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; am__v_F77LD_1 = SOURCES = $(f03tst_groups_SOURCES) $(f03tst_open_mem_SOURCES) \ $(f03tst_parallel_SOURCES) $(f03tst_types_SOURCES) \ $(f03tst_types2_SOURCES) $(f03tst_types3_SOURCES) \ $(f03tst_v2_SOURCES) $(f03tst_var_szip_SOURCES) \ $(f03tst_vars_SOURCES) $(f03tst_vars2_SOURCES) \ $(f03tst_vars3_SOURCES) $(f03tst_vars4_SOURCES) \ $(f03tst_vars5_SOURCES) $(f03tst_vars6_SOURCES) \ $(f03tst_zstandard_SOURCES) $(ftst_filter_SOURCES) \ $(ftst_groups_SOURCES) $(ftst_parallel_SOURCES) \ $(ftst_parallel_nasa_SOURCES) $(ftst_path_SOURCES) \ $(ftst_rengrps_SOURCES) $(ftst_types_SOURCES) \ $(ftst_types2_SOURCES) $(ftst_types3_SOURCES) \ $(ftst_v2_SOURCES) $(ftst_var_compact_SOURCES) \ $(ftst_var_szip_SOURCES) $(ftst_vars_SOURCES) \ $(ftst_vars2_SOURCES) $(ftst_vars3_SOURCES) \ $(ftst_vars4_SOURCES) $(ftst_vars5_SOURCES) \ $(ftst_vars6_SOURCES) $(ftst_zstandard_SOURCES) DIST_SOURCES = $(am__f03tst_groups_SOURCES_DIST) \ $(f03tst_open_mem_SOURCES) $(am__f03tst_parallel_SOURCES_DIST) \ $(am__f03tst_types_SOURCES_DIST) \ $(am__f03tst_types2_SOURCES_DIST) \ $(am__f03tst_types3_SOURCES_DIST) \ $(am__f03tst_v2_SOURCES_DIST) \ $(am__f03tst_var_szip_SOURCES_DIST) \ $(am__f03tst_vars_SOURCES_DIST) \ $(am__f03tst_vars2_SOURCES_DIST) \ $(am__f03tst_vars3_SOURCES_DIST) \ $(am__f03tst_vars4_SOURCES_DIST) \ $(am__f03tst_vars5_SOURCES_DIST) \ $(am__f03tst_vars6_SOURCES_DIST) \ $(am__f03tst_zstandard_SOURCES_DIST) \ $(am__ftst_filter_SOURCES_DIST) $(ftst_groups_SOURCES) \ $(am__ftst_parallel_SOURCES_DIST) \ $(am__ftst_parallel_nasa_SOURCES_DIST) $(ftst_path_SOURCES) \ $(ftst_rengrps_SOURCES) $(ftst_types_SOURCES) \ $(ftst_types2_SOURCES) $(ftst_types3_SOURCES) \ $(am__ftst_v2_SOURCES_DIST) $(ftst_var_compact_SOURCES) \ $(am__ftst_var_szip_SOURCES_DIST) $(ftst_vars_SOURCES) \ $(ftst_vars2_SOURCES) $(ftst_vars3_SOURCES) \ $(ftst_vars4_SOURCES) $(ftst_vars5_SOURCES) \ $(ftst_vars6_SOURCES) $(ftst_zstandard_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__extra_recursive_targets = check-valgrind-recursive \ check-valgrind-memcheck-recursive \ check-valgrind-helgrind-recursive check-valgrind-drd-recursive \ check-valgrind-sgcheck-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ $$am__collect_skipped_logs \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer-defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(IGNORE_SKIPPED_LOGS)'; then \ am__collect_skipped_logs='--collect-skipped-logs no'; \ else \ am__collect_skipped_logs=''; \ fi; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INTERNAL_DOCS = @BUILD_INTERNAL_DOCS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_VALGRIND_drd = @ENABLE_VALGRIND_drd@ ENABLE_VALGRIND_helgrind = @ENABLE_VALGRIND_helgrind@ ENABLE_VALGRIND_memcheck = @ENABLE_VALGRIND_memcheck@ ENABLE_VALGRIND_sgcheck = @ENABLE_VALGRIND_sgcheck@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_f90 = @FCFLAGS_f90@ FC_VERSION = @FC_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAS_CDF5 = @HAS_CDF5@ HAS_DAP = @HAS_DAP@ HAS_F03 = @HAS_F03@ HAS_F90 = @HAS_F90@ HAS_LOGGING = @HAS_LOGGING@ HAS_NC2 = @HAS_NC2@ HAS_NC4 = @HAS_NC4@ HAS_NC4_PARALLEL = @HAS_NC4_PARALLEL@ HAS_PARALLEL = @HAS_PARALLEL@ HAS_PNETCDF = @HAS_PNETCDF@ HAS_QUANTIZE = @HAS_QUANTIZE@ HAS_SZIP_WRITE = @HAS_SZIP_WRITE@ HAS_ZSTD = @HAS_ZSTD@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOD_FLAG = @MOD_FLAG@ MPIEXEC = @MPIEXEC@ NC_FLIBS = @NC_FLIBS@ NC_LIBS = @NC_LIBS@ NF_HDF5_PLUGIN_PATH = @NF_HDF5_PLUGIN_PATH@ NM = @NM@ NMEDIT = @NMEDIT@ NMFLAGS = @NMFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VALGRIND = @VALGRIND@ VALGRIND_ENABLED = @VALGRIND_ENABLED@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ enable_shared = @enable_shared@ enable_static = @enable_static@ exec_prefix = @exec_prefix@ fmoddir = @fmoddir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ valgrind_enabled_tools = @valgrind_enabled_tools@ valgrind_tools = @valgrind_tools@ AM_CPPFLAGS = -I../fortran # All tests need to link to fortran library. LDADD = ${top_builddir}/fortran/libnetcdff.la # These programs test the F77 netCDF-4 API using include netcdf.inc. NF77_TESTS = ftst_groups ftst_vars ftst_vars2 ftst_vars3 ftst_vars4 \ ftst_vars5 ftst_vars6 ftst_types ftst_types2 ftst_types3 \ ftst_path ftst_rengrps f03tst_open_mem ftst_var_compact \ $(am__append_1) # Each test depdends on its source. ftst_groups_SOURCES = ftst_groups.F ftst_vars_SOURCES = ftst_vars.F ftst_vars2_SOURCES = ftst_vars2.F ftst_vars3_SOURCES = ftst_vars3.F ftst_vars4_SOURCES = ftst_vars4.F ftst_vars5_SOURCES = ftst_vars5.F ftst_vars6_SOURCES = ftst_vars6.F ftst_zstandard_SOURCES = ftst_zstandard.F ftst_types_SOURCES = ftst_types.F ftst_types2_SOURCES = ftst_types2.F ftst_types3_SOURCES = ftst_types3.F ftst_path_SOURCES = ftst_path.F ftst_rengrps_SOURCES = ftst_rengrps.F f03tst_open_mem_SOURCES = f03tst_open_mem.F ftst_var_compact_SOURCES = ftst_var_compact.F @BUILD_V2_TRUE@ftst_v2_SOURCES = ftst_v2.F @TEST_PARALLEL_TRUE@ftst_parallel_SOURCES = ftst_parallel.F @TEST_PARALLEL_TRUE@ftst_parallel_nasa_SOURCES = ftst_parallel_nasa.F @TEST_FILTERS_TRUE@ftst_filter_SOURCES = ftst_filter.F @TEST_SZIP_WRITE_TRUE@ftst_var_szip_SOURCES = ftst_var_szip.F # If sed is present, generate these tests at build time. They are the # same tests as the F77 netCDF-4 tests above, but using the "use # netcdf4_f03" statement. # These test fortran codes will be created using sed. @USE_SED_TRUE@F03_TEST_CODES = f03tst_groups.F f03tst_vars.F \ @USE_SED_TRUE@ f03tst_vars2.F f03tst_vars3.F f03tst_vars4.F \ @USE_SED_TRUE@ f03tst_vars5.F f03tst_vars6.F f03tst_types.F \ @USE_SED_TRUE@ f03tst_types2.F f03tst_types3.F $(am__append_10) \ @USE_SED_TRUE@ $(am__append_12) $(am__append_14) \ @USE_SED_TRUE@ $(am__append_17) # The fortran codes will compile into these tests. @USE_SED_TRUE@F03_TESTS = f03tst_groups f03tst_vars f03tst_vars2 \ @USE_SED_TRUE@ f03tst_vars3 f03tst_vars4 f03tst_vars5 \ @USE_SED_TRUE@ f03tst_vars6 f03tst_types f03tst_types2 \ @USE_SED_TRUE@ f03tst_types3 $(am__append_11) $(am__append_13) \ @USE_SED_TRUE@ $(am__append_18) @BUILD_V2_TRUE@@USE_SED_TRUE@f03tst_v2_SOURCES = f03tst_v2.F @TEST_PARALLEL_TRUE@@USE_SED_TRUE@f03tst_parallel_SOURCES = f03tst_parallel.F @TEST_SZIP_WRITE_TRUE@@USE_SED_TRUE@f03tst_var_szip_SOURCES = f03tst_var_szip.F # Note that all these fortran programs are built at compile-time on # the user system. @USE_SED_TRUE@BUILT_SOURCES = $(F03_TEST_CODES) # Each generated test code depends on its source. @USE_SED_TRUE@f03tst_groups_SOURCES = f03tst_groups.F @USE_SED_TRUE@f03tst_vars_SOURCES = f03tst_vars.F @USE_SED_TRUE@f03tst_vars2_SOURCES = f03tst_vars2.F @USE_SED_TRUE@f03tst_vars3_SOURCES = f03tst_vars3.F @USE_SED_TRUE@f03tst_vars4_SOURCES = f03tst_vars4.F @USE_SED_TRUE@f03tst_vars5_SOURCES = f03tst_vars5.F @USE_SED_TRUE@f03tst_vars6_SOURCES = f03tst_vars6.F @USE_SED_TRUE@f03tst_zstandard_SOURCES = f03tst_zstandard.F @USE_SED_TRUE@f03tst_types_SOURCES = f03tst_types.F @USE_SED_TRUE@f03tst_types2_SOURCES = f03tst_types2.F @USE_SED_TRUE@f03tst_types3_SOURCES = f03tst_types3.F EXTRA_DIST = CMakeLists.txt run_f77_par_test.sh \ run_f77_par_test_03.sh # Cleaning up files created during the testing. CLEANFILES = ftst_*.nc f03tst_*.nc *.tmp *.tmp2 $(F03_TEST_CODES) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .F .f .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign nf_test4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign nf_test4/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: $(am__rm_f) $(check_PROGRAMS) test -z "$(EXEEXT)" || $(am__rm_f) $(check_PROGRAMS:$(EXEEXT)=) f03tst_groups$(EXEEXT): $(f03tst_groups_OBJECTS) $(f03tst_groups_DEPENDENCIES) $(EXTRA_f03tst_groups_DEPENDENCIES) @rm -f f03tst_groups$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_groups_OBJECTS) $(f03tst_groups_LDADD) $(LIBS) f03tst_open_mem$(EXEEXT): $(f03tst_open_mem_OBJECTS) $(f03tst_open_mem_DEPENDENCIES) $(EXTRA_f03tst_open_mem_DEPENDENCIES) @rm -f f03tst_open_mem$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_open_mem_OBJECTS) $(f03tst_open_mem_LDADD) $(LIBS) f03tst_parallel$(EXEEXT): $(f03tst_parallel_OBJECTS) $(f03tst_parallel_DEPENDENCIES) $(EXTRA_f03tst_parallel_DEPENDENCIES) @rm -f f03tst_parallel$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_parallel_OBJECTS) $(f03tst_parallel_LDADD) $(LIBS) f03tst_types$(EXEEXT): $(f03tst_types_OBJECTS) $(f03tst_types_DEPENDENCIES) $(EXTRA_f03tst_types_DEPENDENCIES) @rm -f f03tst_types$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_types_OBJECTS) $(f03tst_types_LDADD) $(LIBS) f03tst_types2$(EXEEXT): $(f03tst_types2_OBJECTS) $(f03tst_types2_DEPENDENCIES) $(EXTRA_f03tst_types2_DEPENDENCIES) @rm -f f03tst_types2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_types2_OBJECTS) $(f03tst_types2_LDADD) $(LIBS) f03tst_types3$(EXEEXT): $(f03tst_types3_OBJECTS) $(f03tst_types3_DEPENDENCIES) $(EXTRA_f03tst_types3_DEPENDENCIES) @rm -f f03tst_types3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_types3_OBJECTS) $(f03tst_types3_LDADD) $(LIBS) f03tst_v2$(EXEEXT): $(f03tst_v2_OBJECTS) $(f03tst_v2_DEPENDENCIES) $(EXTRA_f03tst_v2_DEPENDENCIES) @rm -f f03tst_v2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_v2_OBJECTS) $(f03tst_v2_LDADD) $(LIBS) f03tst_var_szip$(EXEEXT): $(f03tst_var_szip_OBJECTS) $(f03tst_var_szip_DEPENDENCIES) $(EXTRA_f03tst_var_szip_DEPENDENCIES) @rm -f f03tst_var_szip$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_var_szip_OBJECTS) $(f03tst_var_szip_LDADD) $(LIBS) f03tst_vars$(EXEEXT): $(f03tst_vars_OBJECTS) $(f03tst_vars_DEPENDENCIES) $(EXTRA_f03tst_vars_DEPENDENCIES) @rm -f f03tst_vars$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_vars_OBJECTS) $(f03tst_vars_LDADD) $(LIBS) f03tst_vars2$(EXEEXT): $(f03tst_vars2_OBJECTS) $(f03tst_vars2_DEPENDENCIES) $(EXTRA_f03tst_vars2_DEPENDENCIES) @rm -f f03tst_vars2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_vars2_OBJECTS) $(f03tst_vars2_LDADD) $(LIBS) f03tst_vars3$(EXEEXT): $(f03tst_vars3_OBJECTS) $(f03tst_vars3_DEPENDENCIES) $(EXTRA_f03tst_vars3_DEPENDENCIES) @rm -f f03tst_vars3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_vars3_OBJECTS) $(f03tst_vars3_LDADD) $(LIBS) f03tst_vars4$(EXEEXT): $(f03tst_vars4_OBJECTS) $(f03tst_vars4_DEPENDENCIES) $(EXTRA_f03tst_vars4_DEPENDENCIES) @rm -f f03tst_vars4$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_vars4_OBJECTS) $(f03tst_vars4_LDADD) $(LIBS) f03tst_vars5$(EXEEXT): $(f03tst_vars5_OBJECTS) $(f03tst_vars5_DEPENDENCIES) $(EXTRA_f03tst_vars5_DEPENDENCIES) @rm -f f03tst_vars5$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_vars5_OBJECTS) $(f03tst_vars5_LDADD) $(LIBS) f03tst_vars6$(EXEEXT): $(f03tst_vars6_OBJECTS) $(f03tst_vars6_DEPENDENCIES) $(EXTRA_f03tst_vars6_DEPENDENCIES) @rm -f f03tst_vars6$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_vars6_OBJECTS) $(f03tst_vars6_LDADD) $(LIBS) f03tst_zstandard$(EXEEXT): $(f03tst_zstandard_OBJECTS) $(f03tst_zstandard_DEPENDENCIES) $(EXTRA_f03tst_zstandard_DEPENDENCIES) @rm -f f03tst_zstandard$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03tst_zstandard_OBJECTS) $(f03tst_zstandard_LDADD) $(LIBS) ftst_filter$(EXEEXT): $(ftst_filter_OBJECTS) $(ftst_filter_DEPENDENCIES) $(EXTRA_ftst_filter_DEPENDENCIES) @rm -f ftst_filter$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_filter_OBJECTS) $(ftst_filter_LDADD) $(LIBS) ftst_groups$(EXEEXT): $(ftst_groups_OBJECTS) $(ftst_groups_DEPENDENCIES) $(EXTRA_ftst_groups_DEPENDENCIES) @rm -f ftst_groups$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_groups_OBJECTS) $(ftst_groups_LDADD) $(LIBS) ftst_parallel$(EXEEXT): $(ftst_parallel_OBJECTS) $(ftst_parallel_DEPENDENCIES) $(EXTRA_ftst_parallel_DEPENDENCIES) @rm -f ftst_parallel$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_parallel_OBJECTS) $(ftst_parallel_LDADD) $(LIBS) ftst_parallel_nasa$(EXEEXT): $(ftst_parallel_nasa_OBJECTS) $(ftst_parallel_nasa_DEPENDENCIES) $(EXTRA_ftst_parallel_nasa_DEPENDENCIES) @rm -f ftst_parallel_nasa$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_parallel_nasa_OBJECTS) $(ftst_parallel_nasa_LDADD) $(LIBS) ftst_path$(EXEEXT): $(ftst_path_OBJECTS) $(ftst_path_DEPENDENCIES) $(EXTRA_ftst_path_DEPENDENCIES) @rm -f ftst_path$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_path_OBJECTS) $(ftst_path_LDADD) $(LIBS) ftst_rengrps$(EXEEXT): $(ftst_rengrps_OBJECTS) $(ftst_rengrps_DEPENDENCIES) $(EXTRA_ftst_rengrps_DEPENDENCIES) @rm -f ftst_rengrps$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_rengrps_OBJECTS) $(ftst_rengrps_LDADD) $(LIBS) ftst_types$(EXEEXT): $(ftst_types_OBJECTS) $(ftst_types_DEPENDENCIES) $(EXTRA_ftst_types_DEPENDENCIES) @rm -f ftst_types$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_types_OBJECTS) $(ftst_types_LDADD) $(LIBS) ftst_types2$(EXEEXT): $(ftst_types2_OBJECTS) $(ftst_types2_DEPENDENCIES) $(EXTRA_ftst_types2_DEPENDENCIES) @rm -f ftst_types2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_types2_OBJECTS) $(ftst_types2_LDADD) $(LIBS) ftst_types3$(EXEEXT): $(ftst_types3_OBJECTS) $(ftst_types3_DEPENDENCIES) $(EXTRA_ftst_types3_DEPENDENCIES) @rm -f ftst_types3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_types3_OBJECTS) $(ftst_types3_LDADD) $(LIBS) ftst_v2$(EXEEXT): $(ftst_v2_OBJECTS) $(ftst_v2_DEPENDENCIES) $(EXTRA_ftst_v2_DEPENDENCIES) @rm -f ftst_v2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_v2_OBJECTS) $(ftst_v2_LDADD) $(LIBS) ftst_var_compact$(EXEEXT): $(ftst_var_compact_OBJECTS) $(ftst_var_compact_DEPENDENCIES) $(EXTRA_ftst_var_compact_DEPENDENCIES) @rm -f ftst_var_compact$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_var_compact_OBJECTS) $(ftst_var_compact_LDADD) $(LIBS) ftst_var_szip$(EXEEXT): $(ftst_var_szip_OBJECTS) $(ftst_var_szip_DEPENDENCIES) $(EXTRA_ftst_var_szip_DEPENDENCIES) @rm -f ftst_var_szip$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_var_szip_OBJECTS) $(ftst_var_szip_LDADD) $(LIBS) ftst_vars$(EXEEXT): $(ftst_vars_OBJECTS) $(ftst_vars_DEPENDENCIES) $(EXTRA_ftst_vars_DEPENDENCIES) @rm -f ftst_vars$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_vars_OBJECTS) $(ftst_vars_LDADD) $(LIBS) ftst_vars2$(EXEEXT): $(ftst_vars2_OBJECTS) $(ftst_vars2_DEPENDENCIES) $(EXTRA_ftst_vars2_DEPENDENCIES) @rm -f ftst_vars2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_vars2_OBJECTS) $(ftst_vars2_LDADD) $(LIBS) ftst_vars3$(EXEEXT): $(ftst_vars3_OBJECTS) $(ftst_vars3_DEPENDENCIES) $(EXTRA_ftst_vars3_DEPENDENCIES) @rm -f ftst_vars3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_vars3_OBJECTS) $(ftst_vars3_LDADD) $(LIBS) ftst_vars4$(EXEEXT): $(ftst_vars4_OBJECTS) $(ftst_vars4_DEPENDENCIES) $(EXTRA_ftst_vars4_DEPENDENCIES) @rm -f ftst_vars4$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_vars4_OBJECTS) $(ftst_vars4_LDADD) $(LIBS) ftst_vars5$(EXEEXT): $(ftst_vars5_OBJECTS) $(ftst_vars5_DEPENDENCIES) $(EXTRA_ftst_vars5_DEPENDENCIES) @rm -f ftst_vars5$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_vars5_OBJECTS) $(ftst_vars5_LDADD) $(LIBS) ftst_vars6$(EXEEXT): $(ftst_vars6_OBJECTS) $(ftst_vars6_DEPENDENCIES) $(EXTRA_ftst_vars6_DEPENDENCIES) @rm -f ftst_vars6$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_vars6_OBJECTS) $(ftst_vars6_LDADD) $(LIBS) ftst_zstandard$(EXEEXT): $(ftst_zstandard_OBJECTS) $(ftst_zstandard_DEPENDENCIES) $(EXTRA_ftst_zstandard_DEPENDENCIES) @rm -f ftst_zstandard$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftst_zstandard_OBJECTS) $(ftst_zstandard_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .F.o: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ $< .F.obj: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .F.lo: $(AM_V_PPF77)$(LTPPF77COMPILE) -c -o $@ $< .F.f: $(F77COMPILE) -F $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs check-valgrind-local: check-valgrind-memcheck-local: check-valgrind-helgrind-local: check-valgrind-drd-local: check-valgrind-sgcheck-local: ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ output_system_information () \ { \ echo; \ { uname -a | $(AWK) '{ \ printf "System information (uname -a):"; \ for (i = 1; i < NF; ++i) \ { \ if (i != 2) \ printf " %s", $$i; \ } \ printf "\n"; \ }'; } 2>&1; \ if test -r /etc/os-release; then \ echo "Distribution information (/etc/os-release):"; \ sed 8q /etc/os-release; \ elif test -r /etc/issue; then \ echo "Distribution information (/etc/issue):"; \ cat /etc/issue; \ fi; \ }; \ please_report () \ { \ echo "Some test(s) failed. Please report this to $(PACKAGE_BUGREPORT),"; \ echo "together with the test-suite.log file (gzipped) and your system"; \ echo "information. Thanks."; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ output_system_information; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG) for debugging.$${std}";\ if test -n "$(PACKAGE_BUGREPORT)"; then \ please_report | sed -e "s/^/$${col}/" -e s/'$$'/"$${std}"/; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @$(am__rm_f) $(RECHECK_LOGS) @$(am__rm_f) $(RECHECK_LOGS:.log=.trs) @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? ftst_groups.log: ftst_groups$(EXEEXT) @p='ftst_groups$(EXEEXT)'; \ b='ftst_groups'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_vars.log: ftst_vars$(EXEEXT) @p='ftst_vars$(EXEEXT)'; \ b='ftst_vars'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_vars2.log: ftst_vars2$(EXEEXT) @p='ftst_vars2$(EXEEXT)'; \ b='ftst_vars2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_vars3.log: ftst_vars3$(EXEEXT) @p='ftst_vars3$(EXEEXT)'; \ b='ftst_vars3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_vars4.log: ftst_vars4$(EXEEXT) @p='ftst_vars4$(EXEEXT)'; \ b='ftst_vars4'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_vars5.log: ftst_vars5$(EXEEXT) @p='ftst_vars5$(EXEEXT)'; \ b='ftst_vars5'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_vars6.log: ftst_vars6$(EXEEXT) @p='ftst_vars6$(EXEEXT)'; \ b='ftst_vars6'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_types.log: ftst_types$(EXEEXT) @p='ftst_types$(EXEEXT)'; \ b='ftst_types'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_types2.log: ftst_types2$(EXEEXT) @p='ftst_types2$(EXEEXT)'; \ b='ftst_types2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_types3.log: ftst_types3$(EXEEXT) @p='ftst_types3$(EXEEXT)'; \ b='ftst_types3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_path.log: ftst_path$(EXEEXT) @p='ftst_path$(EXEEXT)'; \ b='ftst_path'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_rengrps.log: ftst_rengrps$(EXEEXT) @p='ftst_rengrps$(EXEEXT)'; \ b='ftst_rengrps'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_open_mem.log: f03tst_open_mem$(EXEEXT) @p='f03tst_open_mem$(EXEEXT)'; \ b='f03tst_open_mem'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_var_compact.log: ftst_var_compact$(EXEEXT) @p='ftst_var_compact$(EXEEXT)'; \ b='ftst_var_compact'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_zstandard.log: ftst_zstandard$(EXEEXT) @p='ftst_zstandard$(EXEEXT)'; \ b='ftst_zstandard'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_v2.log: ftst_v2$(EXEEXT) @p='ftst_v2$(EXEEXT)'; \ b='ftst_v2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_f77_par_test.sh.log: run_f77_par_test.sh @p='run_f77_par_test.sh'; \ b='run_f77_par_test.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_tst_filter.sh.log: run_tst_filter.sh @p='run_tst_filter.sh'; \ b='run_tst_filter.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftst_var_szip.log: ftst_var_szip$(EXEEXT) @p='ftst_var_szip$(EXEEXT)'; \ b='ftst_var_szip'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_f77_par_test_03.sh.log: run_f77_par_test_03.sh @p='run_f77_par_test_03.sh'; \ b='run_f77_par_test_03.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_groups.log: f03tst_groups$(EXEEXT) @p='f03tst_groups$(EXEEXT)'; \ b='f03tst_groups'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_vars.log: f03tst_vars$(EXEEXT) @p='f03tst_vars$(EXEEXT)'; \ b='f03tst_vars'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_vars2.log: f03tst_vars2$(EXEEXT) @p='f03tst_vars2$(EXEEXT)'; \ b='f03tst_vars2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_vars3.log: f03tst_vars3$(EXEEXT) @p='f03tst_vars3$(EXEEXT)'; \ b='f03tst_vars3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_vars4.log: f03tst_vars4$(EXEEXT) @p='f03tst_vars4$(EXEEXT)'; \ b='f03tst_vars4'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_vars5.log: f03tst_vars5$(EXEEXT) @p='f03tst_vars5$(EXEEXT)'; \ b='f03tst_vars5'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_vars6.log: f03tst_vars6$(EXEEXT) @p='f03tst_vars6$(EXEEXT)'; \ b='f03tst_vars6'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_types.log: f03tst_types$(EXEEXT) @p='f03tst_types$(EXEEXT)'; \ b='f03tst_types'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_types2.log: f03tst_types2$(EXEEXT) @p='f03tst_types2$(EXEEXT)'; \ b='f03tst_types2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_types3.log: f03tst_types3$(EXEEXT) @p='f03tst_types3$(EXEEXT)'; \ b='f03tst_types3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_zstandard.log: f03tst_zstandard$(EXEEXT) @p='f03tst_zstandard$(EXEEXT)'; \ b='f03tst_zstandard'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_v2.log: f03tst_v2$(EXEEXT) @p='f03tst_v2$(EXEEXT)'; \ b='f03tst_v2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03tst_var_szip.log: f03tst_var_szip$(EXEEXT) @p='f03tst_var_szip$(EXEEXT)'; \ b='f03tst_var_szip'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -$(am__rm_f) $(TEST_LOGS) -$(am__rm_f) $(TEST_LOGS:.log=.trs) -$(am__rm_f) $(TEST_SUITE_LOG) clean-generic: -$(am__rm_f) $(CLEANFILES) distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -$(am__rm_f) $(BUILT_SOURCES) check-valgrind: check-valgrind-am check-valgrind-am: check-valgrind-local check-valgrind-drd: check-valgrind-drd-am check-valgrind-drd-am: check-valgrind-drd-local check-valgrind-helgrind: check-valgrind-helgrind-am check-valgrind-helgrind-am: check-valgrind-helgrind-local check-valgrind-memcheck: check-valgrind-memcheck-am check-valgrind-memcheck-am: check-valgrind-memcheck-local check-valgrind-sgcheck: check-valgrind-sgcheck-am check-valgrind-sgcheck-am: check-valgrind-sgcheck-local clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check check-am install install-am install-exec \ install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am \ check-valgrind-am check-valgrind-drd-am \ check-valgrind-drd-local check-valgrind-helgrind-am \ check-valgrind-helgrind-local check-valgrind-local \ check-valgrind-memcheck-am check-valgrind-memcheck-local \ check-valgrind-sgcheck-am check-valgrind-sgcheck-local clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Use sed to generate the f03 versions of the test codes. @USE_SED_TRUE@f03tst_groups.F: ftst_groups.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_groups.nc|f03tst_groups.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_vars.F: ftst_vars.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_vars.nc|f03tst_vars.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_vars2.F: ftst_vars2.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_vars2.nc|f03tst_vars2.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_vars3.F: ftst_vars3.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_vars3.nc|f03tst_vars3.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_vars4.F: ftst_vars4.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_vars4.nc|f03tst_vars4.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_vars5.F: ftst_vars5.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_vars5.nc|f03tst_vars5.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_vars6.F: ftst_vars6.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_vars6.nc|f03tst_vars6.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_zstandard.F: ftst_zstandard.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_zstandard.nc|f03tst_zstandard.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_types.F: ftst_types.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_types.nc|f03tst_types.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_types2.F: ftst_types2.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_types2.nc|f03tst_types2.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_types3.F: ftst_types3.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_types3.nc|f03tst_types3.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_v2.F: ftst_v2.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_v2.nc|f03tst_v2.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_parallel.F: ftst_parallel.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_parallel.nc|f03tst_parallel.nc|" $@.tmp2 > $@ @USE_SED_TRUE@f03tst_var_szip.F: ftst_var_szip.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|ftst_var_szip.nc|f03tst_var_szip.nc|" $@.tmp2 > $@ # If valgrind is present on this machine, this will enable # check-valgrind target, which runs all tests with valgrind. @VALGRIND_CHECK_RULES@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% netcdf-fortran-4.6.3+ds/nf_test4/f03tst_var_szip.F0000664000175000017500000001320015205004070022110 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2020 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 szip compression. This test is only C run if nc_def_var_szip() is found in netcdf-c, and also the HDF5 C instance upon which the netcdf-c depends was built with szip. C Ed Hartnett, 1/31/20 program ftst_var_szip USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_var_szip.nc') integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 22) integer check_file integer ncid, varid(NVARS), dimids(NDIMS) integer data_len_in, offset parameter (offset = 20) integer data1(DATA_LEN), data1_in(DATA_LEN) character*(4) var_name(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer NO_FILL, MY_FILL_VALUE parameter (NO_FILL = 1) parameter (MY_FILL_VALUE = 42) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing szip compression.' C Prepare some data to write. do x = 1, DATA_LEN data1(x) = x end do C Set up var names. var_name(1) = 'var1' var_name(2) = 'var2' var_name(3) = 'var3' C retval = nf_set_log_level(3) C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create a few integer variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), NF_INT, NDIMS, dimids, $ varid(x)) if (retval .ne. nf_noerr) stop 1 end do C Set an alternative fill value for the third variable. retval = nf_def_var_fill(ncid, varid(3), 0, MY_FILL_VALUE) if (retval .ne. 0) stop 3 C Turn on szip compression for var 1. retval = nf_def_var_szip(ncid, varid(1), $ nf_szip_ec_option_mask, 4) if (retval .ne. 0) stop 3 C Turn on szip compression for var 3. retval = nf_def_var_szip(ncid, varid(3), $ nf_szip_nn_option_mask, 4) if (retval .ne. 0) stop 3 C Write some data. retval = nf_put_var_int(ncid, varid(1), data1) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check it out. retval = check_file(ncid, var_name, dim_name) if (retval .ne. 0) stop 4 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, dim_name) USE netcdf4_f03 implicit none C I need these in both here and the main program. integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 22) integer MY_FILL_VALUE parameter (MY_FILL_VALUE = 42) C Parameters integer ncid character*(4) var_name(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIMS), natts_in integer varid_in(NVARS), dimid_in, no_fill_in, fill_value_in character*(4) var_name_in integer int_data_in(DIM_LEN) integer options_mask_in, pixels_per_block_in integer x, retval C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 5 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 1 if (varid_in(x) .ne. x) stop 6 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 1 if (dimid_in .ne. 1) stop 7 C Get the data in var1. It will be values we have set. retval = nf_get_var_int(ncid, varid_in(1), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. x) stop 13 end do C Get the szip settings for var1. H5Zszip code will sometimes bump C the bits_per_pixel from 32 to 64 and may add other flags to the C options_mask, so we don't check these values in this test. retval = nf_inq_var_szip(ncid, varid_in(1), options_mask_in, $ pixels_per_block_in) C Get the data in var2. It will be default fill value. retval = nf_get_var_int(ncid, varid_in(2), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. NF_FILL_INT) stop 13 end do C Get the data in var3. It will be all the assigned fill value. retval = nf_get_var_int(ncid, varid_in(3), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. MY_FILL_VALUE) stop 14 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/Makefile.am0000664000175000017500000001634115205004070021006 0ustar alastairalastair# This is a automake file, part of Unidata's netCDF package. # Copyright 2019, see the COPYRIGHT file for more information. # This file builds and runs tests for the netCDF-4 features in the F77 # API. # Ed Hartnett, 2019 AM_CPPFLAGS = -I../fortran # All tests need to link to fortran library. LDADD = ${top_builddir}/fortran/libnetcdff.la # These programs test the F77 netCDF-4 API using include netcdf.inc. NF77_TESTS = ftst_groups ftst_vars ftst_vars2 ftst_vars3 ftst_vars4 \ ftst_vars5 ftst_vars6 ftst_types ftst_types2 ftst_types3 ftst_path \ ftst_rengrps f03tst_open_mem ftst_var_compact # Only build and run this test if quantize feature is supported. if TEST_QUANTIZE NF77_TESTS += ftst_zstandard endif # Compile and run the F77 API tests. check_PROGRAMS = $(NF77_TESTS) TESTS = $(NF77_TESTS) # Each test depdends on its source. ftst_groups_SOURCES = ftst_groups.F ftst_vars_SOURCES = ftst_vars.F ftst_vars2_SOURCES = ftst_vars2.F ftst_vars3_SOURCES = ftst_vars3.F ftst_vars4_SOURCES = ftst_vars4.F ftst_vars5_SOURCES = ftst_vars5.F ftst_vars6_SOURCES = ftst_vars6.F ftst_zstandard_SOURCES = ftst_zstandard.F ftst_types_SOURCES = ftst_types.F ftst_types2_SOURCES = ftst_types2.F ftst_types3_SOURCES = ftst_types3.F ftst_path_SOURCES = ftst_path.F ftst_rengrps_SOURCES = ftst_rengrps.F f03tst_open_mem_SOURCES = f03tst_open_mem.F ftst_var_compact_SOURCES = ftst_var_compact.F # This is a netCDF-4 V2 F77 test program. if BUILD_V2 check_PROGRAMS += ftst_v2 TESTS += ftst_v2 ftst_v2_SOURCES = ftst_v2.F endif # BUILD_V2 # Test parallel I/O for F77. if TEST_PARALLEL check_PROGRAMS += ftst_parallel ftst_parallel_nasa TESTS += run_f77_par_test.sh ftst_parallel_SOURCES = ftst_parallel.F ftst_parallel_nasa_SOURCES = ftst_parallel_nasa.F endif # TEST_PARALLEL # Test filters. if TEST_FILTERS check_PROGRAMS += ftst_filter ftst_filter_SOURCES = ftst_filter.F TESTS += run_tst_filter.sh endif # Test szip if write capability is present in C library. if TEST_SZIP_WRITE check_PROGRAMS += ftst_var_szip ftst_var_szip_SOURCES = ftst_var_szip.F TESTS += ftst_var_szip endif # If sed is present, generate these tests at build time. They are the # same tests as the F77 netCDF-4 tests above, but using the "use # netcdf4_f03" statement. if USE_SED # These test fortran codes will be created using sed. F03_TEST_CODES = f03tst_groups.F f03tst_vars.F f03tst_vars2.F \ f03tst_vars3.F f03tst_vars4.F f03tst_vars5.F f03tst_vars6.F \ f03tst_types.F f03tst_types2.F f03tst_types3.F # The fortran codes will compile into these tests. F03_TESTS = f03tst_groups f03tst_vars f03tst_vars2 f03tst_vars3 \ f03tst_vars4 f03tst_vars5 f03tst_vars6 f03tst_types f03tst_types2 \ f03tst_types3 # If quantize is available, run this test. if TEST_QUANTIZE F03_TEST_CODES += f03tst_zstandard.F F03_TESTS += f03tst_zstandard endif # This is a netCDF-4 V2 F77 test program. if BUILD_V2 F03_TEST_CODES += f03tst_v2.F F03_TESTS += f03tst_v2 f03tst_v2_SOURCES = f03tst_v2.F endif # BUILD_V2 # Convert the parallel test. if TEST_PARALLEL F03_TEST_CODES += f03tst_parallel.F check_PROGRAMS += f03tst_parallel f03tst_parallel_SOURCES = f03tst_parallel.F TESTS += run_f77_par_test_03.sh endif # TEST_PARALLEL # Convert the szip test. if TEST_SZIP_WRITE F03_TEST_CODES += f03tst_var_szip.F F03_TESTS += f03tst_var_szip f03tst_var_szip_SOURCES = f03tst_var_szip.F endif # TEST_SZIP_WRITE # Note that all these fortran programs are built at compile-time on # the user system. BUILT_SOURCES = $(F03_TEST_CODES) # Compile and run the generated tests. check_PROGRAMS += $(F03_TESTS) TESTS += $(F03_TESTS) # Each generated test code depends on its source. f03tst_groups_SOURCES = f03tst_groups.F f03tst_vars_SOURCES = f03tst_vars.F f03tst_vars2_SOURCES = f03tst_vars2.F f03tst_vars3_SOURCES = f03tst_vars3.F f03tst_vars4_SOURCES = f03tst_vars4.F f03tst_vars5_SOURCES = f03tst_vars5.F f03tst_vars6_SOURCES = f03tst_vars6.F f03tst_zstandard_SOURCES = f03tst_zstandard.F f03tst_types_SOURCES = f03tst_types.F f03tst_types2_SOURCES = f03tst_types2.F f03tst_types3_SOURCES = f03tst_types3.F # Use sed to generate the f03 versions of the test codes. f03tst_groups.F: ftst_groups.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_groups.nc|f03tst_groups.nc|" $@.tmp2 > $@ f03tst_vars.F: ftst_vars.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_vars.nc|f03tst_vars.nc|" $@.tmp2 > $@ f03tst_vars2.F: ftst_vars2.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_vars2.nc|f03tst_vars2.nc|" $@.tmp2 > $@ f03tst_vars3.F: ftst_vars3.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_vars3.nc|f03tst_vars3.nc|" $@.tmp2 > $@ f03tst_vars4.F: ftst_vars4.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_vars4.nc|f03tst_vars4.nc|" $@.tmp2 > $@ f03tst_vars5.F: ftst_vars5.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_vars5.nc|f03tst_vars5.nc|" $@.tmp2 > $@ f03tst_vars6.F: ftst_vars6.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_vars6.nc|f03tst_vars6.nc|" $@.tmp2 > $@ f03tst_zstandard.F: ftst_zstandard.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_zstandard.nc|f03tst_zstandard.nc|" $@.tmp2 > $@ f03tst_types.F: ftst_types.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_types.nc|f03tst_types.nc|" $@.tmp2 > $@ f03tst_types2.F: ftst_types2.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_types2.nc|f03tst_types2.nc|" $@.tmp2 > $@ f03tst_types3.F: ftst_types3.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_types3.nc|f03tst_types3.nc|" $@.tmp2 > $@ f03tst_v2.F: ftst_v2.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_v2.nc|f03tst_v2.nc|" $@.tmp2 > $@ f03tst_parallel.F: ftst_parallel.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_parallel.nc|f03tst_parallel.nc|" $@.tmp2 > $@ f03tst_var_szip.F: ftst_var_szip.F $(SED) "s|implicit none|USE netcdf4_f03|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|ftst_var_szip.nc|f03tst_var_szip.nc|" $@.tmp2 > $@ endif #USE_SED # If valgrind is present on this machine, this will enable # check-valgrind target, which runs all tests with valgrind. @VALGRIND_CHECK_RULES@ EXTRA_DIST = CMakeLists.txt run_f77_par_test.sh \ run_f77_par_test_03.sh # Cleaning up files created during the testing. CLEANFILES = ftst_*.nc f03tst_*.nc *.tmp *.tmp2 $(F03_TEST_CODES) netcdf-fortran-4.6.3+ds/nf_test4/ftst_groups.F0000664000175000017500000001233015205004070021432 0ustar alastairalastairC This is part of the netCDF package. Copyright 2006-2019 University C Corporation for Atmospheric Research/Unidata. See COPYRIGHT file C for conditions of use. C This program tests netCDF-4 group functions in the F77 API. C Ed Hartnett, 2009 program ftst_groups implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) file_name parameter (file_name='ftst_groups.nc') C Info about the groups we'll create. character*(*) group_name, sub_group_name parameter (group_name = 'grp', sub_group_name = 'sub') character*80 name_in, name_in2 integer ngroups_in integer full_name_len C Dimensions and variables. character*(*) dim1_name, dim2_name parameter (dim1_name = 'd1', dim2_name = 'd2') character*(*) var1_name, var2_name parameter (var1_name = 'v1', var2_name = 'v2') integer nvars, ndims C NetCDF IDs. integer ncid, grpid, sub_grpid, subgrp_in integer grpids(1), grpid_in, dimids(2), varids(2) integer varids_in(2), dimids_in(2) C Error handling. integer retval print *, '' print *,'*** Testing netCDF-4 groups from F77.' C Create the netCDF file. retval = nf_create(file_name, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a group and a subgroup. retval = nf_def_grp(ncid, group_name, grpid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_grp(grpid, sub_group_name, sub_grpid) if (retval .ne. nf_noerr) stop 1 C Create a two dims and two vars. retval = nf_def_dim(sub_grpid, dim1_name, 0, dimids(1)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(sub_grpid, dim2_name, 0, dimids(2)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_var(sub_grpid, var1_name, NF_UINT64, 2, dimids, & varids(1)) if (retval .ne. nf_noerr) stop 1 retval = nf_def_var(sub_grpid, var2_name, NF_UINT64, 2, dimids, & varids(2)) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(file_name, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check the name of the root group. retval = nf_inq_grpname(ncid, name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:1) .ne. '/') stop 2 C Check the full name of the root group (also "/"). retval = nf_inq_grpname_full(ncid, full_name_len, name_in) if (retval .ne. nf_noerr) stop 1 if (full_name_len .ne. 1 .or. name_in(1:1) .ne. '/') stop 2 C What groups are there from the root group? retval = nf_inq_grps(ncid, ngroups_in, grpids) if (retval .ne. nf_noerr) stop 1 if (ngroups_in .ne. 1) stop 2 C Check the name of this group. retval = nf_inq_grpname(grpids(1), name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(group_name)) .ne. group_name) stop 2 C Check the length of the full name. retval = nf_inq_grpname_len(grpids(1), full_name_len) if (retval .ne. nf_noerr) stop 1 if (full_name_len .ne. len(group_name) + 1) stop 2 C Check the full name. retval = nf_inq_grpname_full(grpids(1), full_name_len, name_in2) if (retval .ne. nf_noerr) stop 1 if (name_in2(1:1) .ne. '/' .or. & name_in2(2:len(group_name)+1) .ne. group_name .or. & full_name_len .ne. len(group_name) + 1) stop 2 C Check getting the grpid by full name retval = nf_inq_grp_full_ncid(ncid, name_in, grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. grpids(1)) stop 2 C Check the parent ncid. retval = nf_inq_grp_parent(grpids(1), grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. ncid) stop 2 C Check getting the group by name retval = nf_inq_ncid(ncid, group_name, grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. grpids(1)) stop 2 C Check getting the group by name retval = nf_inq_ncid(ncid, group_name, grpid_in) if (retval .ne. nf_noerr) stop 1 if (grpid_in .ne. grpids(1)) stop 2 C Get the sub group id, using its name. retval = nf_inq_ncid(grpid_in, sub_group_name, subgrp_in) if (retval .ne. nf_noerr) stop 1 C Check varids in subgroup. retval = nf_inq_varids(subgrp_in, nvars, varids_in) if (retval .ne. nf_noerr) stop 1 if (nvars .ne. 2 .or. varids_in(1) .ne. varids(1) .or. & varids_in(2) .ne. varids(2)) stop 2 C Check dimids in subgroup. retval = nf_inq_dimids(subgrp_in, ndims, dimids_in, 0) if (retval .ne. nf_noerr) stop 1 if (ndims .ne. 2 .or. dimids_in(1) .ne. dimids(1) .or. & dimids_in(2) .ne. dimids(2)) stop 2 C Check dimids including parents (will get same answers, since there C are no dims in parent group. retval = nf_inq_dimids(subgrp_in, ndims, dimids_in, 1) if (retval .ne. nf_noerr) stop 1 if (ndims .ne. 2 .or. dimids_in(1) .ne. dimids(1) .or. & dimids_in(2) .ne. dimids(2)) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/run_f77_par_test_03.sh0000775000175000017500000000035115205004070022775 0ustar alastairalastair#!/bin/sh # This shell runs some parallel I/O tests for the F77 API. # Ed Hartnett, 2019 set -e echo "Testing netCDF parallel I/O through the F77 API with 03 interface..." mpiexec -n 4 ./f03tst_parallel echo "SUCCESS!!!" exit 0 netcdf-fortran-4.6.3+ds/nf_test4/f03tst_vars4.F0000664000175000017500000000731715205004070021326 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing VLEN types. C Ed Hartnett, 2009 program ftst_vars4 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_vars4.nc') C NetCDF IDs. integer ncid, vlen_typeid integer max_types parameter (max_types = 1) C Need these to read type information. integer num_types, typeids(max_types) integer base_type, base_size, num_members, member_value character*80 type_name, member_name integer type_size, nfields, class C Information for the vlen type we will define. character*(*) vlen_type_name parameter (vlen_type_name = 'vlen_type') C Some data about and for the vlen. integer vlen_len, vlen_len_in parameter (vlen_len = 5) integer data1(vlen_len), data1_in(vlen_len) C These must be big enough to hold the struct nc_vlen in netcdf.h. integer*8 vlen(10), vlen_in(10) C Loop indexes, and error handling. integer x, retval, index(1) print *, '' print *,'*** Testing VLEN types.' do x = 1, vlen_len data1(x) = x end do C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create the vlen type. retval = nf_def_vlen(ncid, vlen_type_name, nf_int, vlen_typeid) if (retval .ne. nf_noerr) stop 1 C Set up the vlen with this helper function, since F77 can't deal C with pointers. retval = nf_put_vlen_element(ncid, vlen_typeid, vlen, & vlen_len, data1) if (retval .ne. nf_noerr) stop 1 C Write the vlen attribute. retval = nf_put_att(ncid, NF_GLOBAL, 'att1', vlen_typeid, 1, vlen) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Get the typeids of all user defined types. retval = nf_inq_typeids(ncid, num_types, typeids) if (retval .ne. nf_noerr) stop 1 if (num_types .ne. max_types) stop 2 C Use nf_inq_user_type to confirm this is an vlen type, with base C type NF_INT. retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(vlen_type_name)) .ne. vlen_type_name .or. & base_type .ne. nf_int .or. & nfields .ne. 0 .or. class .ne. nf_vlen) stop 2 C Use nf_inq_vlen and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_vlen(ncid, typeids(1), type_name, base_size, & base_type) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(vlen_type_name)) .ne. vlen_type_name .or. & base_type .ne. nf_int) stop 2 C Read the vlen attribute. retval = nf_get_att(ncid, NF_GLOBAL, 'att1', vlen_in) if (retval .ne. nf_noerr) stop 1 C Get the data from the vlen we just read. retval = nf_get_vlen_element(ncid, vlen_typeid, vlen_in, & vlen_len_in, data1_in) if (retval .ne. nf_noerr) stop 1 if (vlen_len_in .ne. vlen_len) stop 2 C Check the data do x = 1, vlen_len if (data1(x) .ne. data1_in(x)) stop 2 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_zstandard.F0000664000175000017500000001742015205004070022255 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C checking the quantize and zstandard features. C Ed Hartnett, 9/3/21 program ftst_vars7 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars7.nc') integer NDIM1 parameter (NDIM1 = 1) integer DIM_LEN_5 parameter (DIM_LEN_5 = 5) integer NVARS parameter (NVARS = 2) integer check_file integer NSD_3 parameter (NSD_3 = 3) integer ZSTD_LEVEL parameter (ZSTD_LEVEL = 3) integer ncid, varid(NVARS), dimids(NDIM1) character*(10) var_name(NVARS) integer var_type(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer start(NDIM1), count(NDIM1) real real_data(DIM_LEN_5) real*8 double_data(DIM_LEN_5) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing quantize feature.' #ifdef ENABLE_ZSTD print *,'*** (and zstandard compression)' #endif C Set up var names. var_name(1) = 'var__float' var_type(1) = NF_FLOAT var_name(2) = 'var_double' var_type(2) = NF_DOUBLE C Set up data. C float real_data[DIM_LEN_5] = {1.11111111, 1.0, 9.99999999, 12345.67, .1234567}; C double double_data[DIM_LEN_5] = {1.1111111, 1.0, 9.999999999, 1234567890.12345, 123456789012345.0}; real_data(1) = 1.11111111 real_data(2) = 1.0 real_data(3) = 9.99999999 real_data(4) = 12345.67 real_data(5) = .1234567 double_data(1) = 1.1111111 double_data(2) = 1.0 double_data(3) = 9.999999999 double_data(4) = 1234567890.12345 double_data(5) = 1234567890 C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN_5, dimids(1)) if (retval .ne. nf_noerr) stop 2 C Create some variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), var_type(x), NDIM1, $ dimids, varid(x)) if (retval .ne. nf_noerr) stop 3 C Turn on quantize. retval = nf_def_var_quantize(ncid, varid(x), $ NF_QUANTIZE_BITGROOM, NSD_3) if (retval .ne. nf_noerr) stop 4 C Turn on zstandard compression if available, zlib otherwise. #ifdef ENABLE_ZSTD retval = nf_def_var_zstandard(ncid, varid(x), ZSTD_LEVEL) if (retval .ne. nf_noerr) then if (retval .eq. nf_enofilter) then print *, 'Zstandard filter not found.' print *, 'Set HDF5_PLUGIN_PATH and try again.' else print *, nf_strerror(retval) endif stop 5 endif #else retval = nf_def_var_deflate(ncid, varid(x), 0, 1, 1) if (retval .ne. nf_noerr) stop 6 #endif end do C Write some data (which automatically calls nf_enddef). start(1) = 1 count(1) = DIM_LEN_5 retval = nf_put_vara_real(ncid, varid(1), start, count, $ real_data) if (retval .ne. 0) stop 7 retval = nf_put_vara_double(ncid, varid(2), start, count, $ double_data) if (retval .ne. 0) stop 8 C Check it out. retval = check_file(ncid, var_name, var_type, dim_name) if (retval .ne. 0) stop 9 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 20 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 21 C Check it out. retval = check_file(ncid, var_name, var_type, dim_name) if (retval .ne. 0) stop 22 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 23 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, var_type, dim_name) USE netcdf4_f03 implicit none C I need these in both here and the main program. integer NDIM1 parameter (NDIM1 = 1) integer DIM_LEN_5 parameter (DIM_LEN_5 = 5) integer NVARS parameter (NVARS = 2) integer NSD_3 parameter (NSD_3 = 3) real EPSILON parameter (EPSILON = .01) C Parameters integer ncid character*(10) var_name(NVARS) integer var_type(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIM1), natts_in integer varid_in(NVARS), dimid_in, quantize_mode_in, nsd_in integer zstandard, zstandard_level_in character*(10) var_name_in real real_data_in(DIM_LEN_5) real*8 double_data_in(DIM_LEN_5) real real_data_expected(DIM_LEN_5) real*8 double_data_expected(DIM_LEN_5) real diff real*8 diff8 integer x, retval C What we expect to get back. real_data_expected(1) = 1.11084 real_data_expected(2) = 1.000488 real_data_expected(3) = 10 real_data_expected(4) = 12348 real_data_expected(5) = 0.1234436 double_data_expected(1) = 1.11083984375 double_data_expected(2) = 1.00048828125 double_data_expected(3) = 10 double_data_expected(4) = 1234698240 double_data_expected(5) = 1234173952 C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 30 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 31 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 32 if (varid_in(x) .ne. x) stop 33 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 34 if (dimid_in .ne. 1) stop 35 C These things are the same for all variables, except natts_in is C different for quantize vars after the file is written, there is an C extra attribute. do x = 1, NVARS C Check quantize settings. retval = nf_inq_var(ncid, varid_in(x), var_name_in, xtype_in, $ ndims_in, dimids_in, natts_in) if (retval .ne. nf_noerr) stop 40 if (ndims_in .ne. 1 .or. xtype_in .ne. var_type(x) .or. $ dimids_in(1).ne. dimid_in) stop 41 retval = nf_inq_var_quantize(ncid, varid_in(x), $ quantize_mode_in, nsd_in) if (retval .ne. nf_noerr) stop 42 if (quantize_mode_in .ne. nf_quantize_bitgroom) stop 43 if (nsd_in .ne. NSD_3) stop 44 C Check compression settings. #ifdef ENABLE_ZSTD retval = nf_inq_var_zstandard(ncid, varid_in(x), zstandard, $ zstandard_level_in) if (retval .ne. nf_noerr) stop 50 if (zstandard_level_in .ne. 3 .or. zstandard .eq. 0) stop 51 #endif end do C Get the data. retval = nf_get_var_real(ncid, varid_in(1), real_data_in) if (retval .ne. nf_noerr) stop 60 retval = nf_get_var_double(ncid, varid_in(2), double_data_in) if (retval .ne. nf_noerr) stop 61 C Check the data. do x = 1, DIM_LEN_5 diff = abs(real_data_in(x) - real_data_expected(x)) if (diff .gt. EPSILON) stop 70 diff = abs(double_data_in(x) - double_data_expected(x)) c$$$ print *, double_data_in(x), double_data_expected(x) c$$$ print *, 'x = ', x, ' diff = ', diff if (diff .gt. EPSILON) stop 71 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/ftst_var_compact.F0000664000175000017500000001305515205004070022416 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2020 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 compact variables. This is an C alternative to chunked or contiguous storage, which stores the C data in the HDF5 metadata. It is only allowed for small (64 KB or C less) vars with fixed dimensions. C Ed Hartnett, 2/24/20 program ftst_var_compact implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_var_compact.nc') integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 22) integer check_file integer ncid, varid(NVARS), dimids(NDIMS) integer offset parameter (offset = 20) integer data1(DATA_LEN) character*(4) var_name(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer NO_FILL, MY_FILL_VALUE parameter (NO_FILL = 1) parameter (MY_FILL_VALUE = 42) integer storage_in integer chunksizes_in(NDIMS) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing compact vars.' C Prepare some data to write. do x = 1, DATA_LEN data1(x) = x end do C Set up var names. var_name(1) = 'var1' var_name(2) = 'var2' var_name(3) = 'var3' C retval = nf_set_log_level(3) C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create a few integer variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), NF_INT, NDIMS, dimids, $ varid(x)) if (retval .ne. nf_noerr) stop 1 end do C Turn on compact storage for the first var. retval = nf_def_var_chunking(ncid, varid(1), nf_compact, 0) if (retval .ne. 0) stop 3 C Check compact storage for the first var. retval = nf_inq_var_chunking(ncid, varid(1), storage_in, $ chunksizes_in) if (retval .ne. 0) stop 3 if (storage_in .ne. nf_compact) stop 4 C Set an alternative fill value for the third variable. retval = nf_def_var_fill(ncid, varid(3), 0, MY_FILL_VALUE) if (retval .ne. 0) stop 3 C Write some data. retval = nf_put_var_int(ncid, varid(1), data1) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check it out. retval = check_file(ncid, var_name, dim_name) if (retval .ne. 0) stop 4 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, dim_name) implicit none include 'netcdf.inc' C I need these in both here and the main program. integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 22) integer MY_FILL_VALUE parameter (MY_FILL_VALUE = 42) C Parameters integer ncid character*(4) var_name(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer varid_in(NVARS), dimid_in integer int_data_in(DIM_LEN) C integer chunksizes_in(NDIMS) integer x, retval C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 5 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 1 if (varid_in(x) .ne. x) stop 6 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 1 if (dimid_in .ne. 1) stop 7 C Check compact storage for the first var. c$$$ retval = nf_inq_var_chunking(ncid, varid_in(1), storage_in, c$$$ $ chunksizes_in) c$$$ if (retval .ne. 0) stop 3 c$$$ if (storage_in .ne. nf_compact) stop 4 C Get the data in var1. It will be values we have set. retval = nf_get_var_int(ncid, varid_in(1), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. x) stop 13 end do C Get the data in var2. It will be default fill value. retval = nf_get_var_int(ncid, varid_in(2), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. NF_FILL_INT) stop 13 end do C Get the data in var3. It will be all the assigned fill value. retval = nf_get_var_int(ncid, varid_in(3), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. MY_FILL_VALUE) stop 14 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/CMakeLists.txt0000664000175000017500000000505115205004070021506 0ustar alastairalastairSET(CMAKE_VERBOSE_MAKEFILE OFF) SET(CMAKE_BUILD_TYPE "RelWithDebInfo") SET(CMAKE_INCLUDE_CURRENT_DIR ON) # Is the user building netCDF-4? if (USE_NETCDF4) # Add these netCDF-4 test programs. SET(nc4_check_PROGRAMS ftst_groups ftst_vars ftst_vars2 ftst_vars3 ftst_vars4 ftst_vars5 ftst_vars6 ftst_types ftst_types2 ftst_types3 ftst_path ftst_rengrps f03tst_open_mem ftst_var_compact) # Only run this test if quantize is present (i.e. netcdf-c is 4.9.0 or greater). IF (HAVE_QUANTIZE) SET(nc4_check_PROGRAMS ${nc4_check_PROGRAMS} ftst_zstandard) ENDIF() SET(check_PROGRAMS ${check_PROGRAMS} ${nc4_check_PROGRAMS}) SET(TESTS ${TESTS} ${nc4_check_PROGRAMS}) SET(ftst_groups_SOURCES ftst_groups.F) SET(ftst_vars_SOURCES ftst_vars.F) SET(ftst_vars2_SOURCES ftst_vars2.F) SET(ftst_vars3_SOURCES ftst_vars3.F) SET(ftst_vars4_SOURCES ftst_vars4.F) SET(ftst_vars5_SOURCES ftst_vars5.F) SET(ftst_vars6_SOURCES ftst_vars6.F) SET(ftst_zstandard_SOURCES ftst_zstandard.F) SET(ftst_types_SOURCES ftst_types.F) SET(ftst_types2_SOURCES ftst_types2.F) SET(ftst_types3_SOURCES ftst_types3.F) SET(ftst_path_SOURCES ftst_path.F) SET(ftst_rengrps_SOURCES ftst_rengrps.F) SET(f03tst_open_mem_SOURCES f03tst_open_mem.F) SET(ftst_var_compact_SOURCES ftst_var_compact.F) # This is a netCDF-4 V2 test program. IF (BUILD_V2) SET(nc4_v2_PROGRAMS ftst_v2) SET(check_PROGRAMS ${check_PROGRAMS} ${nc4_v2_PROGRAMS}) SET(TESTS ${TESTS} ${nc4_v2_PROGRAMS}) SET(ftst_v2_SOURCES ftst_v2.F) ENDIF (BUILD_V2) # Test parallel I/O for F77. IF (TEST_PARALLEL) SET(check_PROGRAMS ${check_PROGRAMS} ftst_parallel ftst_parallel_nasa) SET(SCRIPT_TESTS ${SCRIPT_TESTS} run_f77_par_test) # Add executables for f77_par_tst build_bin_test(ftst_parallel ".F") build_bin_test(ftst_parallel_nasa ".F") ENDIF (TEST_PARALLEL) IF(ENABLE_FILTER_TEST) SET(check_PROGRAMS ${check_PROGRAMS} ftst_filter) SET(SCRIPT_TESTS ${SCRIPT_TESTS} run_tst_filter) # Add executables build_bin_test(ftst_filter ".F") ENDIF(ENABLE_FILTER_TEST) endif(USE_NETCDF4) # If szip write capability exists in the C library, run the szip test. IF (HAVE_SZIP_WRITE) SET(check_PROGRAMS ${check_PROGRAMS} ftst_var_szip) SET(ftst_var_szip_SOURCES ftst_var_szip.F) SET(TESTS ${TESTS} ftst_var_szip) ENDIF() # Create pre-compiled tests. FOREACH(t IN LISTS TESTS) ADD_EXECUTABLE(${t} ${${t}_SOURCES}) TARGET_LINK_LIBRARIES(${t} netcdff) ADD_TEST(${t} ${t}) ENDFOREACH() # Cleaning up files created during the process. SET (CLEANFILES ftst_*.nc) netcdf-fortran-4.6.3+ds/nf_test4/ftst_zstandard.F0000664000175000017500000001743215205004070022115 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C checking the quantize and zstandard features. C Ed Hartnett, 9/3/21 program ftst_vars7 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars7.nc') integer NDIM1 parameter (NDIM1 = 1) integer DIM_LEN_5 parameter (DIM_LEN_5 = 5) integer NVARS parameter (NVARS = 2) integer check_file integer NSD_3 parameter (NSD_3 = 3) integer ZSTD_LEVEL parameter (ZSTD_LEVEL = 3) integer ncid, varid(NVARS), dimids(NDIM1) character*(10) var_name(NVARS) integer var_type(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer start(NDIM1), count(NDIM1) real real_data(DIM_LEN_5) real*8 double_data(DIM_LEN_5) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing quantize feature.' #ifdef ENABLE_ZSTD print *,'*** (and zstandard compression)' #endif C Set up var names. var_name(1) = 'var__float' var_type(1) = NF_FLOAT var_name(2) = 'var_double' var_type(2) = NF_DOUBLE C Set up data. C float real_data[DIM_LEN_5] = {1.11111111, 1.0, 9.99999999, 12345.67, .1234567}; C double double_data[DIM_LEN_5] = {1.1111111, 1.0, 9.999999999, 1234567890.12345, 123456789012345.0}; real_data(1) = 1.11111111 real_data(2) = 1.0 real_data(3) = 9.99999999 real_data(4) = 12345.67 real_data(5) = .1234567 double_data(1) = 1.1111111 double_data(2) = 1.0 double_data(3) = 9.999999999 double_data(4) = 1234567890.12345 double_data(5) = 1234567890 C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN_5, dimids(1)) if (retval .ne. nf_noerr) stop 2 C Create some variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), var_type(x), NDIM1, $ dimids, varid(x)) if (retval .ne. nf_noerr) stop 3 C Turn on quantize. retval = nf_def_var_quantize(ncid, varid(x), $ NF_QUANTIZE_BITGROOM, NSD_3) if (retval .ne. nf_noerr) stop 4 C Turn on zstandard compression if available, zlib otherwise. #ifdef ENABLE_ZSTD retval = nf_def_var_zstandard(ncid, varid(x), ZSTD_LEVEL) if (retval .ne. nf_noerr) then if (retval .eq. nf_enofilter) then print *, 'Zstandard filter not found.' print *, 'Set HDF5_PLUGIN_PATH and try again.' else print *, nf_strerror(retval) endif stop 5 endif #else retval = nf_def_var_deflate(ncid, varid(x), 0, 1, 1) if (retval .ne. nf_noerr) stop 6 #endif end do C Write some data (which automatically calls nf_enddef). start(1) = 1 count(1) = DIM_LEN_5 retval = nf_put_vara_real(ncid, varid(1), start, count, $ real_data) if (retval .ne. 0) stop 7 retval = nf_put_vara_double(ncid, varid(2), start, count, $ double_data) if (retval .ne. 0) stop 8 C Check it out. retval = check_file(ncid, var_name, var_type, dim_name) if (retval .ne. 0) stop 9 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 20 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 21 C Check it out. retval = check_file(ncid, var_name, var_type, dim_name) if (retval .ne. 0) stop 22 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 23 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, var_type, dim_name) implicit none include 'netcdf.inc' C I need these in both here and the main program. integer NDIM1 parameter (NDIM1 = 1) integer DIM_LEN_5 parameter (DIM_LEN_5 = 5) integer NVARS parameter (NVARS = 2) integer NSD_3 parameter (NSD_3 = 3) real EPSILON parameter (EPSILON = .01) C Parameters integer ncid character*(10) var_name(NVARS) integer var_type(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIM1), natts_in integer varid_in(NVARS), dimid_in, quantize_mode_in, nsd_in integer zstandard, zstandard_level_in character*(10) var_name_in real real_data_in(DIM_LEN_5) real*8 double_data_in(DIM_LEN_5) real real_data_expected(DIM_LEN_5) real*8 double_data_expected(DIM_LEN_5) real diff real*8 diff8 integer x, retval C What we expect to get back. real_data_expected(1) = 1.11084 real_data_expected(2) = 1.000488 real_data_expected(3) = 10 real_data_expected(4) = 12348 real_data_expected(5) = 0.1234436 double_data_expected(1) = 1.11083984375 double_data_expected(2) = 1.00048828125 double_data_expected(3) = 10 double_data_expected(4) = 1234698240 double_data_expected(5) = 1234173952 C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 30 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 31 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 32 if (varid_in(x) .ne. x) stop 33 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 34 if (dimid_in .ne. 1) stop 35 C These things are the same for all variables, except natts_in is C different for quantize vars after the file is written, there is an C extra attribute. do x = 1, NVARS C Check quantize settings. retval = nf_inq_var(ncid, varid_in(x), var_name_in, xtype_in, $ ndims_in, dimids_in, natts_in) if (retval .ne. nf_noerr) stop 40 if (ndims_in .ne. 1 .or. xtype_in .ne. var_type(x) .or. $ dimids_in(1).ne. dimid_in) stop 41 retval = nf_inq_var_quantize(ncid, varid_in(x), $ quantize_mode_in, nsd_in) if (retval .ne. nf_noerr) stop 42 if (quantize_mode_in .ne. nf_quantize_bitgroom) stop 43 if (nsd_in .ne. NSD_3) stop 44 C Check compression settings. #ifdef ENABLE_ZSTD retval = nf_inq_var_zstandard(ncid, varid_in(x), zstandard, $ zstandard_level_in) if (retval .ne. nf_noerr) stop 50 if (zstandard_level_in .ne. 3 .or. zstandard .eq. 0) stop 51 #endif end do C Get the data. retval = nf_get_var_real(ncid, varid_in(1), real_data_in) if (retval .ne. nf_noerr) stop 60 retval = nf_get_var_double(ncid, varid_in(2), double_data_in) if (retval .ne. nf_noerr) stop 61 C Check the data. do x = 1, DIM_LEN_5 diff = abs(real_data_in(x) - real_data_expected(x)) if (diff .gt. EPSILON) stop 70 diff = abs(double_data_in(x) - double_data_expected(x)) c$$$ print *, double_data_in(x), double_data_expected(x) c$$$ print *, 'x = ', x, ' diff = ', diff if (diff .gt. EPSILON) stop 71 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_types.F0000664000175000017500000001420215205004070021422 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2007 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 user defined types from fortran. C Ed Hartnett, 2009 program ftst_types USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_types.nc') C We are writing 2D data, a 6 x 12 grid. integer NDIMS parameter (NDIMS=2) integer NX, NY parameter (NX = 6, NY = 12) C NetCDF IDs. integer ncid, varid, dimids(NDIMS) integer wind_typeid integer x_dimid, y_dimid integer typeids(1) C Info about the type we'll create. integer size_in, base_type_in, nfields_in, class_in character*80 name_in character*(*) type_name, u_name, v_name parameter (type_name = 'wind_t', u_name = 'U', v_name = 'V') integer ntypes integer WIND_T_SIZE parameter (WIND_T_SIZE = 8) integer offset_in, field_typeid_in, ndims_in, dim_sizes_in(1) C This is the data array we will write, and a place to store it when C we read it back in. integer data_out(NY, NX), data_in(NY, NX) C Loop indexes, and error handling. integer x, y, retval C Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do print *, '' print *,'*** Testing netCDF-4 compound type from F77.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Define the dimensions. retval = nf_def_dim(ncid, "x", NX, x_dimid) if (retval .ne. nf_noerr) stop 1 retval = nf_def_dim(ncid, "y", NY, y_dimid) if (retval .ne. nf_noerr) stop 1 C Define a compound type. retval = nf_def_compound(ncid, WIND_T_SIZE, type_name, & wind_typeid) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_compound(ncid, wind_typeid, u_name, 0, NF_INT) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_compound(ncid, wind_typeid, v_name, 4, NF_INT) if (retval .ne. nf_noerr) stop 1 C Check out my new type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1) stop 2 if (typeids(1) .ne. wind_typeid) stop 2 C Define the variable. dimids(2) = x_dimid dimids(1) = y_dimid retval = nf_def_var(ncid, "data", NF_INT, NDIMS, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Write the pretend data to the file. retval = nf_put_var_int(ncid, varid, data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file and check again. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Find the type. retval = nf_inq_typeids(ncid, ntypes, typeids) if (retval .ne. nf_noerr) stop 1 if (ntypes .ne. 1 .or. typeids(1) .ne. wind_typeid) stop 2 C Check the type. retval = nf_inq_user_type(ncid, typeids(1), name_in, size_in, & base_type_in, nfields_in, class_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. WIND_T_SIZE .or. nfields_in .ne. 2 .or. & class_in .ne. NF_COMPOUND) stop 2 C Check it differently. retval = nf_inq_compound(ncid, typeids(1), name_in, size_in, & nfields_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name .or. & size_in .ne. WIND_T_SIZE .or. nfields_in .ne. 2) stop 2 C Check it one piece at a time. retval = nf_inq_compound_nfields(ncid, typeids(1), nfields_in) if (retval .ne. nf_noerr) stop 1 if (nfields_in .ne. 2) stop 2 retval = nf_inq_compound_size(ncid, typeids(1), size_in) if (retval .ne. nf_noerr) stop 1 if (size_in .ne. WIND_T_SIZE) stop 2 retval = nf_inq_compound_name(ncid, typeids(1), name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(type_name)) .ne. type_name) stop 2 C Check the first field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 1, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(u_name)) .ne. u_name .or. offset_in .ne. 0 .or. & field_typeid_in .ne. NF_INT .or. ndims_in .ne. 0) stop 2 retval = nf_inq_compound_fieldname(ncid, typeids(1), 1, name_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(u_name)) .ne. u_name) stop 2 retval = nf_inq_compound_fieldoffset(ncid, typeids(1), 1, & offset_in) if (retval .ne. nf_noerr) stop 1 if (offset_in .ne. 0) stop 2 retval = nf_inq_compound_fieldtype(ncid, typeids(1), 1, & field_typeid_in) if (retval .ne. nf_noerr) stop 1 if (field_typeid_in .ne. NF_INT) stop 2 retval = nf_inq_compound_fieldndims(ncid, typeids(1), 1, & ndims_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 0) stop 2 C Check the second field of the compound type. retval = nf_inq_compound_field(ncid, typeids(1), 2, name_in, & offset_in, field_typeid_in, ndims_in, dim_sizes_in) if (retval .ne. nf_noerr) stop 1 if (name_in(1:len(v_name)) .ne. v_name .or. offset_in .ne. 4 .or. & field_typeid_in .ne. NF_INT .or. ndims_in .ne. 0) stop 2 C Find our variable. retval = nf_inq_varid(ncid, "data", varid) if (retval .ne. nf_noerr) stop 1 if (varid .ne. 1) stop 2 C Read the data and check it. retval = nf_get_var_int(ncid, varid, data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, NX do y = 1, NY if (data_in(y, x) .ne. data_out(y, x)) stop 2 end do end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_vars3.F0000664000175000017500000001500115205004070021312 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing enum and opaque types. C Ed Hartnett, 2009 program ftst_vars3 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_vars3.nc') C We are writing an attribute, of length 3. integer NDIMS parameter (NDIMS = 1) integer NX parameter (NX = 3) C NetCDF IDs. integer ncid, varid, dimids(1) integer enum_typeid, opaque_typeid C This is the data array we will write as an enum attribute, and a C place to store it when we read it back in. Z is the fastest C varying dimension. integer data_out(NX), data_in(NX) integer max_types parameter (max_types = 2) C Need these to read type information. integer num_types, typeids(max_types) integer base_type, base_size, num_members, member_value character*80 type_name, member_name integer type_size, nfields, class C Information for the enum type we will define. character*(*) enum_type_name, one_name, zero_name parameter (enum_type_name = 'enum_type') parameter (zero_name = 'zero', one_name = 'one') integer one, zero C Information for the opaque type we will define. character*(*) opaque_type_name parameter (opaque_type_name = 'opaque_type') integer opaque_size parameter (opaque_size = 16) character*(opaque_size) opaque_data, opaque_data_in parameter (opaque_data = '0123456789012345') C Loop indexes, and error handling. integer x, retval, index(1) C Create some pretend data. do x = 1, NX data_out(x) = 0 end do data_out(1) = 1 print *, '' print *,'*** Testing enum and opaque types.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create the enum type. retval = nf_def_enum(ncid, NF_INT, enum_type_name, enum_typeid) if (retval .ne. nf_noerr) stop 1 one = 1 zero = 0 retval = nf_insert_enum(ncid, enum_typeid, zero_name, zero) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_enum(ncid, enum_typeid, one_name, one) if (retval .ne. nf_noerr) stop 1 C Create the opaque type. retval = nf_def_opaque(ncid, opaque_size, opaque_type_name, & opaque_typeid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, 'dim', 1, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create an opaque variable. retval = nf_def_var(ncid, 'var', opaque_typeid, 1, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Write the opaque scalar var. (Could also use nf_put_var). index(1) = 1 retval = nf_put_var1(ncid, varid, index, opaque_data) if (retval .ne. nf_noerr) stop 1 C Attach an enum attribute to the variable. retval = nf_put_att(ncid, varid, 'att', enum_typeid, NX, & data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Get the typeids of all user defined types. retval = nf_inq_typeids(ncid, num_types, typeids) if (retval .ne. nf_noerr) stop 1 if (num_types .ne. max_types) stop 2 C Use nf_inq_user_type to confirm this is an enum type. retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(enum_type_name)) .ne. enum_type_name .or. & type_size .ne. 4 .or. base_type .ne. NF_INT .or. & nfields .ne. 2 .or. class .ne. nf_enum) stop 2 C Use nf_inq_enum and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_enum(ncid, typeids(1), type_name, base_type, & base_size, num_members) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(enum_type_name)) .ne. enum_type_name .or. & base_type .ne. NF_INT .or. num_members .ne. 2) stop 2 C Check the members of the enum type. retval = nf_inq_enum_member(ncid, typeids(1), 1, member_name, & member_value) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(zero_name)) .ne. zero_name .or. & member_value .ne. 0) stop 2 retval = nf_inq_enum_member(ncid, typeids(1), 2, member_name, & member_value) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(one_name)) .ne. one_name .or. & member_value .ne. 1) stop 2 retval = nf_inq_enum_ident(ncid, typeids(1), 0, member_name) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(zero_name)) .ne. zero_name) stop 2 retval = nf_inq_enum_ident(ncid, typeids(1), 1, member_name) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(one_name)) .ne. one_name) stop 2 C Use nf_inq_user_type to confirm that the second typeid is an C opaque type. retval = nf_inq_user_type(ncid, typeids(2), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(opaque_type_name)) .ne. opaque_type_name .or. & type_size .ne. opaque_size .or. base_type .ne. 0 .or. & nfields .ne. 0 .or. class .ne. nf_opaque) stop 2 C Use nf_inq_opaque and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_opaque(ncid, typeids(2), type_name, base_size) if (retval .ne. nf_noerr) stop 1 if (base_size .ne. opaque_size .or. & type_name(1:len(opaque_type_name)) .ne. opaque_type_name) & stop 2 C Read the variable. index(1) = 1 retval = nf_get_var1(ncid, varid, index, opaque_data_in) if (retval .ne. nf_noerr) stop 1 if (opaque_data_in .ne. opaque_data) stop 2 C Read the attribute. retval = nf_get_att(ncid, varid, 'att', data_in) if (retval .ne. nf_noerr) stop 1 C Check the values. do x = 1, NX if (data_in(x) .ne. data_out(x)) stop 2 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/ftst_vars3.F0000664000175000017500000001500415205004070021152 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C testing enum and opaque types. C Ed Hartnett, 2009 program ftst_vars3 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='ftst_vars3.nc') C We are writing an attribute, of length 3. integer NDIMS parameter (NDIMS = 1) integer NX parameter (NX = 3) C NetCDF IDs. integer ncid, varid, dimids(1) integer enum_typeid, opaque_typeid C This is the data array we will write as an enum attribute, and a C place to store it when we read it back in. Z is the fastest C varying dimension. integer data_out(NX), data_in(NX) integer max_types parameter (max_types = 2) C Need these to read type information. integer num_types, typeids(max_types) integer base_type, base_size, num_members, member_value character*80 type_name, member_name integer type_size, nfields, class C Information for the enum type we will define. character*(*) enum_type_name, one_name, zero_name parameter (enum_type_name = 'enum_type') parameter (zero_name = 'zero', one_name = 'one') integer one, zero C Information for the opaque type we will define. character*(*) opaque_type_name parameter (opaque_type_name = 'opaque_type') integer opaque_size parameter (opaque_size = 16) character*(opaque_size) opaque_data, opaque_data_in parameter (opaque_data = '0123456789012345') C Loop indexes, and error handling. integer x, retval, index(1) C Create some pretend data. do x = 1, NX data_out(x) = 0 end do data_out(1) = 1 print *, '' print *,'*** Testing enum and opaque types.' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create the enum type. retval = nf_def_enum(ncid, NF_INT, enum_type_name, enum_typeid) if (retval .ne. nf_noerr) stop 1 one = 1 zero = 0 retval = nf_insert_enum(ncid, enum_typeid, zero_name, zero) if (retval .ne. nf_noerr) stop 1 retval = nf_insert_enum(ncid, enum_typeid, one_name, one) if (retval .ne. nf_noerr) stop 1 C Create the opaque type. retval = nf_def_opaque(ncid, opaque_size, opaque_type_name, & opaque_typeid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, 'dim', 1, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create an opaque variable. retval = nf_def_var(ncid, 'var', opaque_typeid, 1, dimids, varid) if (retval .ne. nf_noerr) stop 1 C Write the opaque scalar var. (Could also use nf_put_var). index(1) = 1 retval = nf_put_var1(ncid, varid, index, opaque_data) if (retval .ne. nf_noerr) stop 1 C Attach an enum attribute to the variable. retval = nf_put_att(ncid, varid, 'att', enum_typeid, NX, & data_out) if (retval .ne. nf_noerr) stop 1 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Get the typeids of all user defined types. retval = nf_inq_typeids(ncid, num_types, typeids) if (retval .ne. nf_noerr) stop 1 if (num_types .ne. max_types) stop 2 C Use nf_inq_user_type to confirm this is an enum type. retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(enum_type_name)) .ne. enum_type_name .or. & type_size .ne. 4 .or. base_type .ne. NF_INT .or. & nfields .ne. 2 .or. class .ne. nf_enum) stop 2 C Use nf_inq_enum and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_enum(ncid, typeids(1), type_name, base_type, & base_size, num_members) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(enum_type_name)) .ne. enum_type_name .or. & base_type .ne. NF_INT .or. num_members .ne. 2) stop 2 C Check the members of the enum type. retval = nf_inq_enum_member(ncid, typeids(1), 1, member_name, & member_value) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(zero_name)) .ne. zero_name .or. & member_value .ne. 0) stop 2 retval = nf_inq_enum_member(ncid, typeids(1), 2, member_name, & member_value) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(one_name)) .ne. one_name .or. & member_value .ne. 1) stop 2 retval = nf_inq_enum_ident(ncid, typeids(1), 0, member_name) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(zero_name)) .ne. zero_name) stop 2 retval = nf_inq_enum_ident(ncid, typeids(1), 1, member_name) if (retval .ne. nf_noerr) stop 1 if (member_name(1:len(one_name)) .ne. one_name) stop 2 C Use nf_inq_user_type to confirm that the second typeid is an C opaque type. retval = nf_inq_user_type(ncid, typeids(2), type_name, type_size, & base_type, nfields, class) if (retval .ne. nf_noerr) stop 1 if (type_name(1:len(opaque_type_name)) .ne. opaque_type_name .or. & type_size .ne. opaque_size .or. base_type .ne. 0 .or. & nfields .ne. 0 .or. class .ne. nf_opaque) stop 2 C Use nf_inq_opaque and make sure we get the same answers as we did C with nf_inq_user_type. retval = nf_inq_opaque(ncid, typeids(2), type_name, base_size) if (retval .ne. nf_noerr) stop 1 if (base_size .ne. opaque_size .or. & type_name(1:len(opaque_type_name)) .ne. opaque_type_name) & stop 2 C Read the variable. index(1) = 1 retval = nf_get_var1(ncid, varid, index, opaque_data_in) if (retval .ne. nf_noerr) stop 1 if (opaque_data_in .ne. opaque_data) stop 2 C Read the attribute. retval = nf_get_att(ncid, varid, 'att', data_in) if (retval .ne. nf_noerr) stop 1 C Check the values. do x = 1, NX if (data_in(x) .ne. data_out(x)) stop 2 end do C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test4/f03tst_vars6.F0000664000175000017500000001454115205004070021325 0ustar alastairalastairC This is part of the netCDF package. C Copyright 2008 University Corporation for Atmospheric Research/Unidata. C See COPYRIGHT file for conditions of use. C This program tests netCDF-4 variable functions from fortran, C checking fill value handling. C Ed Hartnett, 2009 program ftst_vars6 USE netcdf4_f03 implicit none C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='f03tst_vars6.nc') integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 2) integer check_file integer ncid, varid(NVARS), dimids(NDIMS) integer data_len_in, offset parameter (offset = 20) integer data1(data_len), data1_in(data_len) character*(4) var_name(NVARS) character*(4) dim_name parameter (dim_name = 'dim1') integer NO_FILL, MY_FILL_VALUE parameter (NO_FILL = 1) parameter (MY_FILL_VALUE = 42) C Loop index and error handling. integer x, retval print *, '' print *,'*** Testing fill values.' C Prepare some data to write. do x = 1, data_len data1(x) = x end do C Set up var names. var_name(1) = 'var1' var_name(2) = 'var2' var_name(3) = 'var3' C Create the netCDF file. retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) if (retval .ne. nf_noerr) stop 1 C Create a dimension. retval = nf_def_dim(ncid, dim_name, DIM_LEN, dimids(1)) if (retval .ne. nf_noerr) stop 1 C Create a few integer variables. do x = 1, NVARS retval = nf_def_var(ncid, var_name(x), NF_INT, NDIMS, dimids, $ varid(x)) if (retval .ne. nf_noerr) stop 1 end do C Set no fill mode for the second variable. retval = nf_def_var_fill(ncid, varid(2), NO_FILL, 88) if (retval .ne. 0) stop 2 C Set an alternative fill value for the third variable. retval = nf_def_var_fill(ncid, varid(3), 0, MY_FILL_VALUE) if (retval .ne. 0) stop 3 C Check it out. c retval = check_file(ncid, var_name, dim_name) c if (retval .ne. 0) stop 2 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 C Reopen the file. retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) if (retval .ne. nf_noerr) stop 1 C Check it out. retval = check_file(ncid, var_name, dim_name) if (retval .ne. 0) stop 4 C Close the file. retval = nf_close(ncid) if (retval .ne. nf_noerr) stop 1 print *,'*** SUCCESS!' end C This function check the file to make sure everything is OK. integer function check_file(ncid, var_name, dim_name) USE netcdf4_f03 implicit none C I need these in both here and the main program. integer NDIMS parameter (NDIMS = 1) integer DIM_LEN parameter (DIM_LEN = 22) integer NVARS parameter (NVARS = 3) integer DATA_LEN parameter (DATA_LEN = 2) integer MY_FILL_VALUE parameter (MY_FILL_VALUE = 42) C Parameters integer ncid character*(4) var_name(NVARS) character*(4) dim_name C Values that are read in, to check the file. integer ndims_in, nvars_in, ngatts_in, unlimdimid_in integer xtype_in, dimids_in(NDIMS), natts_in integer varid_in(NVARS), dimid_in, no_fill_in, fill_value_in character*(4) var_name_in integer int_data_in(DIM_LEN) integer x, retval C Check it out. retval = nf_inq(ncid, ndims_in, nvars_in, ngatts_in, $ unlimdimid_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. nvars_in .ne. NVARS .or. ngatts_in .ne. 0 $ .or. unlimdimid_in .ne. -1) stop 5 C Get the varids and the dimid. do x = 1, NVARS retval = nf_inq_varid(ncid, var_name(x), varid_in(x)) if (retval .ne. nf_noerr) stop 1 if (varid_in(x) .ne. x) stop 6 end do retval = nf_inq_dimid(ncid, dim_name, dimid_in) if (retval .ne. nf_noerr) stop 1 if (dimid_in .ne. 1) stop 7 C These things are the same for all three variables, except C natts_in.. do x = 1, NVARS retval = nf_inq_var(ncid, varid_in(x), var_name_in, xtype_in, $ ndims_in, dimids_in, natts_in) if (retval .ne. nf_noerr) stop 1 if (ndims_in .ne. 1 .or. xtype_in .ne. NF_INT .or. dimids_in(1) $ .ne. dimid_in) stop 8 if (x .eq. 3 .and. natts_in .ne. 1) stop 9 if (x .lt. 3 .and. natts_in .ne. 0) stop 10 end do C Check the fill value for the first var. Nothing was set, so C no_fill should be off, and fill_value should be the default fill C value for this type. retval = nf_inq_var_fill(ncid, varid_in(1), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 0 .or. fill_value_in .ne. nf_fill_int) stop 11 C Check that no_fill mode is on for the second variable. retval = nf_inq_var_fill(ncid, varid_in(2), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 1 .or. fill_value_in .ne. nf_fill_int) stop 12 C Check that a non-default fill value is in use for the third variable. retval = nf_inq_var_fill(ncid, varid_in(3), no_fill_in, $ fill_value_in) if (retval .ne. nf_noerr) stop 1 if (no_fill_in .ne. 0 .or. fill_value_in .ne. MY_FILL_VALUE) stop $ 2 C Get the data in var1. It will be all the default fill value. retval = nf_get_var_int(ncid, varid_in(1), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN if (int_data_in(x) .ne. nf_fill_int) stop 13 end do C Get the data in var2. What will it be? retval = nf_get_var_int(ncid, varid_in(2), int_data_in) if (retval .ne. nf_noerr) stop 1 C$$$ do x = 1, DIM_LEN C$$$ print *, int_data_in(x) C$$$ end do C Get the data in var3. It will be all the default fill value. retval = nf_get_var_int(ncid, varid_in(3), int_data_in) if (retval .ne. nf_noerr) stop 1 do x = 1, DIM_LEN C print *, int_data_in(x) if (int_data_in(x) .ne. MY_FILL_VALUE) stop 14 end do check_file = 0 end netcdf-fortran-4.6.3+ds/nf03_test4/0000775000175000017500000000000015205004070017110 5ustar alastairalastairnetcdf-fortran-4.6.3+ds/nf03_test4/f90tst_fill2.F900000664000175000017500000001436415205004070021621 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 fill values. ! Russ Rew, 2009 program f90tst_fill use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_fill2.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 16, NY = 16 integer, parameter :: HALF_NX = NX / 2, HALF_NY = NY / 2 integer, parameter :: ZERO_COUNT = 0 integer, parameter :: NUM_VARS = 8 character (len = *), parameter :: var_name(NUM_VARS) = & (/ 'byte ', 'short ', 'int ', 'float ', 'double', 'ubyte ', & 'ushort', 'uint ' /) integer :: ncid, varid(NUM_VARS), dimids(MAX_DIMS) integer :: var_type(NUM_VARS) = (/ nf90_byte, nf90_short, nf90_int, & nf90_float, nf90_double, nf90_ubyte, nf90_ushort, nf90_uint /) integer :: x_dimid, y_dimid integer :: byte_out(HALF_NY, HALF_NX), byte_in(NY, NX) integer :: short_out(HALF_NY, HALF_NX), short_in(NY, NX) integer :: int_out(HALF_NY, HALF_NX), int_in(NY, NX) real :: areal_out(HALF_NY, HALF_NX), areal_in(NY, NX) real :: double_out(HALF_NY, HALF_NX), double_in(NY, NX) integer :: ubyte_out(HALF_NY, HALF_NX), ubyte_in(NY, NX) integer :: ushort_out(HALF_NY, HALF_NX), ushort_in(NY, NX) integer (kind = EightByteInt) :: uint_out(HALF_NY, HALF_NX), uint_in(NY, NX) integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y, v integer :: start_out(MAX_DIMS), count_out(MAX_DIMS) integer :: start_in(MAX_DIMS), count_in(MAX_DIMS) print * print *, '*** Testing netCDF-4 fill values with unlimited dimension.' ! Create some pretend data. do x = 1, HALF_NX do y = 1, HALF_NY byte_out(y, x) = -1 short_out(y, x) = -2 int_out(y, x) = -4 areal_out(y, x) = 2.5 double_out(y, x) = -4.5 ubyte_out(y, x) = 1 ushort_out(y, x) = 2 uint_out(y, x) = 4 end do end do ! Create the netCDF file. call handle_err(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NF90_UNLIMITED, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variables. do v = 1, NUM_VARS call handle_err(nf90_def_var(ncid, var_name(v), var_type(v), dimids, varid(v))) end do ! Write one-quarter of the data. count_out = (/ HALF_NX, HALF_NY /) start_out = (/ HALF_NX + 1, HALF_NY + 1 /) call handle_err(nf90_put_var(ncid, varid(1), byte_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(2), short_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(3), int_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(4), areal_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(5), double_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(6), ubyte_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(7), ushort_out, start = start_out, count = count_out)) call handle_err(nf90_put_var(ncid, varid(8), uint_out, start = start_out, count = count_out)) ! Test when one dimension of count is 0 count_out = (/ HALF_NX, ZERO_COUNT /) call handle_err(nf90_put_var(ncid, varid(3), int_out, start = start_out, count = count_out)) count_out = (/ HALF_NX, HALF_NY /) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= NUM_VARS .or. ngatts /= 0 .or. unlimdimid /= 1 .or. & file_format /= nf90_format_netcdf4) stop 2 ! Read all the data. start_in = (/ 1, 1 /) count_in = (/ NX, NY /) call handle_err(nf90_get_var(ncid, varid(1), byte_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(2), short_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(3), int_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(4), areal_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(5), double_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(6), ubyte_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(7), ushort_in, start = start_in, count = count_in)) call handle_err(nf90_get_var(ncid, varid(8), uint_in, start = start_in, count = count_in)) ! Check the data. All the data except the third quadrant are fill ! value. do x = 1, NX do y = 1, NY if ((x .gt. HALF_NX) .and. (y .gt. HALF_NY)) then if (byte_in(y, x) .ne. -1) stop 13 if (short_in(y, x) .ne. -2) stop 14 if (int_in(y, x) .ne. -4) stop 15 if (areal_in(y, x) .ne. 2.5) stop 16 if (double_in(y, x) .ne. -4.5) stop 17 if (ubyte_in(y, x) .ne. 1) stop 18 if (ushort_in(y, x) .ne. 2) stop 19 if (uint_in(y, x) .ne. 4) stop 20 else if (byte_in(y, x) .ne. nf90_fill_byte) stop 3 if (short_in(y, x) .ne. nf90_fill_short) stop 4 if (int_in(y, x) .ne. nf90_fill_int) stop 5 if (areal_in(y, x) .ne. nf90_fill_real) stop 6 if (double_in(y, x) .ne. nf90_fill_double) stop 7 if (ubyte_in(y, x) .ne. nf90_fill_ubyte) stop 8 if (ushort_in(y, x) .ne. nf90_fill_ushort) stop 9 if (uint_in(y, x) .ne. nf90_fill_uint) stop 10 endif end do end do ! Close the file. call handle_err(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 99 endif end subroutine handle_err end program f90tst_fill netcdf-fortran-4.6.3+ds/nf03_test4/run_f90_par_test.sh.in0000664000175000017500000000061615205004070023237 0ustar alastairalastair#!/bin/sh # This shell runs some parallel I/O tests for the F90 API. # Ed Hartnett, 2009 set -e echo "Testing netCDF parallel I/O through the F90 API." @MPIEXEC@ -n 4 ./f90tst_parallel @MPIEXEC@ -n 4 ./f90tst_parallel2 @MPIEXEC@ -n 4 ./f90tst_parallel3 @MPIEXEC@ -n 8 ./f90tst_nc4_par @MPIEXEC@ -n 4 ./f90tst_parallel_fill @MPIEXEC@ -n 4 ./f90tst_parallel_compressed echo "SUCCESS!!!" exit 0 netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_types2.F900000664000175000017500000001754215205004070022040 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2008 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 int64 types from fortran 90. ! Ed Hartnett, 2009 program f90tst_types2 use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_types2.nc" integer :: ncid, varid1, varid2, varid3, varid4, varid5, varid6, varid7 integer :: dimid1, dimid2, dimid3, dimid4, dimid5, dimid6, dimid7 integer :: dimids1(1), dimids2(2), dimids3(3), dimids4(4), dimids5(5), dimids6(6), dimids7(7) integer :: i1, i2, i3, i4, i5, i6, i7 integer, parameter :: DLEN = 2 integer (kind = EightByteInt) :: data1_in(DLEN), data1_out(DLEN) integer (kind = EightByteInt) :: data2_in(DLEN, DLEN), data2_out(DLEN, DLEN) integer (kind = EightByteInt) :: data3_in(DLEN, DLEN, DLEN), data3_out(DLEN, DLEN, DLEN) integer (kind = EightByteInt) :: data4_in(DLEN, DLEN, DLEN, DLEN), data4_out(DLEN, DLEN, DLEN, DLEN) integer (kind = EightByteInt) :: data5_in(DLEN, DLEN, DLEN, DLEN, DLEN), data5_out(DLEN, DLEN, DLEN, DLEN, DLEN) integer (kind = EightByteInt) :: data6_in(DLEN, DLEN, DLEN, DLEN, DLEN, DLEN), data6_out(DLEN, DLEN, DLEN, DLEN, DLEN, DLEN) integer (kind = EightByteInt) :: data7_in(DLEN, DLEN, DLEN, DLEN, DLEN, DLEN, DLEN), & data7_out(DLEN, DLEN, DLEN, DLEN, DLEN, DLEN, DLEN) integer (kind = EightByteInt), parameter :: REALLY_BIG = 9223372036854775807_EightByteInt print *, '' print *,'*** Testing netCDF-4 64-bit integer types from Fortran 90.' do i1 = 1, DLEN data1_out(i1) = REALLY_BIG end do do i2 = 1, DLEN do i1 = 1, DLEN data2_out(i1, i2) = REALLY_BIG - i1 - i2 end do end do do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN data3_out(i1, i2, i3) = REALLY_BIG - i1 - i2 - i3 end do end do end do do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN data4_out(i1, i2, i3, i4) = REALLY_BIG - i1 - i2 - i3 - i4 end do end do end do end do do i5 = 1, DLEN do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN data5_out(i1, i2, i3, i4, i5) = REALLY_BIG - i1 - i2 - i3 - i4 - i5 end do end do end do end do end do do i6 = 1, DLEN do i5 = 1, DLEN do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN data6_out(i1, i2, i3, i4, i5, i6) = REALLY_BIG - i1 - i2 - i3 - i4 - i5 - i6 end do end do end do end do end do end do do i7 = 1, DLEN do i6 = 1, DLEN do i5 = 1, DLEN do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN data7_out(i1, i2, i3, i4, i5, i6, i7) = REALLY_BIG - i1 - i2 - i3 - i4 - i5 - i6 - i7 end do end do end do end do end do end do end do ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) ! Define dimensions. call check(nf90_def_dim(ncid, "d1", DLEN, dimid1)) call check(nf90_def_dim(ncid, "d2", DLEN, dimid2)) call check(nf90_def_dim(ncid, "d3", DLEN, dimid3)) call check(nf90_def_dim(ncid, "d4", DLEN, dimid4)) call check(nf90_def_dim(ncid, "d5", DLEN, dimid5)) call check(nf90_def_dim(ncid, "d6", DLEN, dimid6)) call check(nf90_def_dim(ncid, "d7", DLEN, dimid7)) ! Create some int64 variables, from 1 to 7D. dimids1(1) = dimid1 call check(nf90_def_var(ncid, "v1", nf90_int64, dimids1, varid1)) dimids2(1) = dimid1 dimids2(2) = dimid2 call check(nf90_def_var(ncid, "v2", nf90_int64, dimids2, varid2)) dimids3(1) = dimid1 dimids3(2) = dimid2 dimids3(3) = dimid3 call check(nf90_def_var(ncid, "v3", nf90_int64, dimids3, varid3)) dimids4(1) = dimid1 dimids4(2) = dimid2 dimids4(3) = dimid3 dimids4(4) = dimid4 call check(nf90_def_var(ncid, "v4", nf90_int64, dimids4, varid4)) dimids5(1) = dimid1 dimids5(2) = dimid2 dimids5(3) = dimid3 dimids5(4) = dimid4 dimids5(5) = dimid5 call check(nf90_def_var(ncid, "v5", nf90_int64, dimids5, varid5)) dimids6(1) = dimid1 dimids6(2) = dimid2 dimids6(3) = dimid3 dimids6(4) = dimid4 dimids6(5) = dimid5 dimids6(6) = dimid6 call check(nf90_def_var(ncid, "v6", nf90_int64, dimids6, varid6)) dimids7(1) = dimid1 dimids7(2) = dimid2 dimids7(3) = dimid3 dimids7(4) = dimid4 dimids7(5) = dimid5 dimids7(6) = dimid6 dimids7(7) = dimid7 call check(nf90_def_var(ncid, "v7", nf90_int64, dimids7, varid7)) ! Write some large integers. call check(nf90_put_var(ncid, varid1, data1_out)) call check(nf90_put_var(ncid, varid2, data2_out)) call check(nf90_put_var(ncid, varid3, data3_out)) call check(nf90_put_var(ncid, varid4, data4_out)) call check(nf90_put_var(ncid, varid5, data5_out)) call check(nf90_put_var(ncid, varid6, data6_out)) call check(nf90_put_var(ncid, varid7, data7_out)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the netCDF file. call check(nf90_open(FILE_NAME, 0, ncid)) ! Read in the large numbers. call check(nf90_get_var(ncid, varid1, data1_in)) call check(nf90_get_var(ncid, varid2, data2_in)) call check(nf90_get_var(ncid, varid3, data3_in)) call check(nf90_get_var(ncid, varid4, data4_in)) call check(nf90_get_var(ncid, varid5, data5_in)) call check(nf90_get_var(ncid, varid6, data6_in)) call check(nf90_get_var(ncid, varid7, data7_in)) ! Check the values for correctness. do i1 = 1, DLEN if (data1_in(i1) .ne. data1_out(i1)) stop 2 end do do i2 = 1, DLEN do i1 = 1, DLEN if (data2_in(i1, i2) .ne. data2_out(i1, i2)) stop 2 end do end do do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN if (data3_in(i1, i2, i3) .ne. data3_out(i1, i2, i3)) stop 2 end do end do end do do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN if (data4_in(i1, i2, i3, i4) .ne. & data4_out(i1, i2, i3, i4)) stop 2 end do end do end do end do do i5 = 1, DLEN do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN if (data5_in(i1, i2, i3, i4, i5) .ne. & data5_out(i1, i2, i3, i4, i5)) stop 2 end do end do end do end do end do do i6 = 1, DLEN do i5 = 1, DLEN do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN if (data6_in(i1, i2, i3, i4, i5, i6) .ne. & data6_out(i1, i2, i3, i4, i5, i6)) stop 2 end do end do end do end do end do end do do i7 = 1, DLEN do i6 = 1, DLEN do i5 = 1, DLEN do i4 = 1, DLEN do i3 = 1, DLEN do i2 = 1, DLEN do i1 = 1, DLEN if (data7_in(i1, i2, i3, i4, i5, i6, i7) .ne. & data7_out(i1, i2, i3, i4, i5, i6, i7)) stop 2 end do end do end do end do end do end do end do ! Close the file. call check(nf90_close(ncid)) print *,'*** SUCCESS!' ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. contains subroutine check(status) integer, intent ( in) :: status if(status /= nf90_noerr) then print *, trim(nf90_strerror(status)) stop 2 end if end subroutine check end program f90tst_types2 netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_vars5.F900000664000175000017500000001570115205004070021645 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett 2010/01/25 program f90tst_vars5 use typeSizes use netcdf implicit none include "netcdf.inc" ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_vars5.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: NDIM1 = 1 integer, parameter :: DIM_LEN_5 = 5 integer start(NDIM1), count(NDIM1) real real_data(DIM_LEN_5) real*8 double_data(DIM_LEN_5) ! We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, varid3, varid4, varid5, dimids(NDIM1) integer :: chunksizes(NDIM1), chunksizes_in(NDIM1) integer :: x_dimid, y_dimid integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer, parameter :: DEFLATE_LEVEL = 4 integer (kind = EightByteInt), parameter :: TOE_SAN_VALUE = 2147483648_EightByteInt character (len = *), parameter :: VAR1_NAME = "Chon-Ji" character (len = *), parameter :: VAR2_NAME = "Tan-Gun" character (len = *), parameter :: VAR3_NAME = "Toe-San" character (len = *), parameter :: VAR4_NAME = "Won-Hyo" character (len = *), parameter :: VAR5_NAME = "Yul-Guk" integer, parameter :: CACHE_SIZE = 8, CACHE_NELEMS = 571 integer, parameter :: CACHE_PREEMPTION = 66 integer :: ierr ! Information read back from the file to check correctness. integer :: varid1_in, varid2_in, varid3_in, varid4_in, varid5_in integer :: xtype_in, ndims_in, natts_in, dimids_in(NDIM1) character (len = nf90_max_name) :: name_in integer :: endianness_in, deflate_level_in logical :: shuffle_in, fletcher32_in, contiguous_in integer (kind = EightByteInt) :: toe_san_in integer :: cache_size_in, cache_nelems_in, cache_preemption_in integer :: quantize_mode_in, nsd_in real real_data_in(DIM_LEN_5) real*8 double_data_in(DIM_LEN_5) real diff real, parameter :: EPSILON = .01 ! Because values 4 and 5 of our data array are so large, a large ! epsilon is needed. real, parameter :: EPSILON_LARGE = 1450000 integer :: t, qmode, qnsd print *, '' print *,'*** Testing use of quantize feature on netCDF-4 vars from Fortran 90.' ! Create some pretend data. real_data(1) = 1.11111111 real_data(2) = 1.0 real_data(3) = 9.99999999 real_data(4) = 12345.67 real_data(5) = .1234567 double_data(1) = 1.1111111 double_data(2) = 1.0 double_data(3) = 9.999999999 double_data(4) = 1234567890.12345 double_data(5) = 1234567890 do t = 1, 3 ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid, cache_nelems = CACHE_NELEMS, & cache_size = CACHE_SIZE)) ! Define the dimension. call check(nf90_def_dim(ncid, "x", DIM_LEN_5, x_dimid)) dimids = (/ x_dimid /) ! Test with all three quantize modes. if (t .eq. 1) then qmode = nf90_quantize_bitgroom qnsd = 3 else if (t .eq. 2) then qmode = nf90_quantize_granularbr qnsd = 3 else qmode = nf90_quantize_bitround qnsd = 10 endif print *,'\t*** testing with quantize_mode ',qmode ! Define some variables. call check(nf90_def_var(ncid, VAR1_NAME, NF90_FLOAT, dimids, varid1& &, deflate_level = DEFLATE_LEVEL, quantize_mode =& & qmode, nsd = qnsd)) call check(nf90_def_var(ncid, VAR2_NAME, NF90_DOUBLE, dimids,& & varid2, contiguous = .TRUE., quantize_mode =& & qmode, nsd = qnsd)) ! Write the pretend data to the file. call check(nf90_put_var(ncid, varid1, real_data)) call check(nf90_put_var(ncid, varid2, double_data)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 1 .or. nvars /= 2 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4) stop 2 ! Get varids. call check(nf90_inq_varid(ncid, VAR1_NAME, varid1_in)) call check(nf90_inq_varid(ncid, VAR2_NAME, varid2_in)) ! Check variable 1. call check(nf90_inquire_variable(ncid, varid1_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, chunksizes = chunksizes_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in, cache_size = cache_size_in, & cache_nelems = cache_nelems_in, cache_preemption = cache_preemption_in, & quantize_mode = quantize_mode_in, nsd = nsd_in)) if (name_in .ne. VAR1_NAME .or. xtype_in .ne. NF90_FLOAT .or. ndims_in .ne. NDIM1 .or. & natts_in .ne. 1 .or. dimids_in(1) .ne. dimids(1)) stop 3 if (quantize_mode_in .ne. qmode .or. nsd_in .ne. qnsd) stop 3 ! Check variable 2. call check(nf90_inquire_variable(ncid, varid2_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in, & quantize_mode = quantize_mode_in, nsd = nsd_in)) if (name_in .ne. VAR2_NAME .or. xtype_in .ne. NF90_DOUBLE .or. ndims_in .ne. NDIM1 .or. & natts_in .ne. 1 .or. dimids_in(1) .ne. dimids(1)) stop 6 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 7 if (quantize_mode_in .ne. qmode .or. nsd_in .ne. qnsd) stop 3 ! Check the data. call check(nf90_get_var(ncid, varid1_in, real_data_in)) call check(nf90_get_var(ncid, varid2_in, double_data_in)) ! Check the data. do x = 1, DIM_LEN_5 ! Check the real. print *, 'real: ', real_data_in(x), real_data(x) diff = abs(real_data_in(x) - real_data(x)) print *, 'x = ', x, ' diff = ', diff if (x < 4) then if (diff .gt. EPSILON) stop 23 else if (diff .gt. EPSILON_LARGE) stop 24 endif ! Check the double. diff = abs(double_data_in(x) - double_data(x)) print *, 'double:', double_data_in(x), double_data(x) print *, 'x = ', x, ' diff = ', diff if (x < 4) then if (diff .gt. EPSILON) stop 25 else if (diff .gt. EPSILON_LARGE) stop 26 endif end do ! Close the file. call check(nf90_close(ncid)) end do print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_vars5 netcdf-fortran-4.6.3+ds/nf03_test4/ref_att.cdl0000664000175000017500000000120315205004070021214 0ustar alastairalastairnetcdf ref_att { dimensions: Location = UNLIMITED ; // (0 currently) // global attributes: string :author = "fake_author" ; :agency = "fake_agency" ; variables: int obstype(Location) ; string obstype:long_name = "observation type" ; obstype:units = "N/A"; group: MetaData { variables: float latitude(Location) ; string latitude:units = "degrees_north" ; } group: yobs { variables: float sst(Location) ; string sst:units = "C" ; } group: Hx { variables: float sst(Location) ; sst:units = "C" ; } } netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_parallel3.F900000664000175000017500000002164215205004070022465 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! This program tests netCDF-4 parallel I/O and fill values from ! fortran. It creates a file like this: ! netcdf f90tst_parallel3 { ! dimensions: ! x = 16 ; ! y = 16 ; ! variables: ! byte byte(x, y) ; ! short short(x, y) ; ! int int(x, y) ; ! float float(x, y) ; ! double double(x, y) ; ! ubyte ubyte(x, y) ; ! ushort ushort(x, y) ; ! uint uint(x, y) ; ! Ed Hartnett program f90tst_parallel3 use netcdf implicit none include 'mpif.h' integer :: mode_flag, cmode integer :: p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, ' ' print *, '*** Testing netCDF-4 parallel I/O with fill values.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'Sorry, this test program must be run on four processors.' stop 1 endif cmode = IOR(nf90_clobber, nf90_mpiio) #ifdef NF_HAS_PNETCDF ! test CDF-1 file call parallel_io(cmode) ! test CDF-2 file mode_flag = IOR(cmode, nf90_64bit_offset) call parallel_io(mode_flag) #ifdef ENABLE_CDF5 ! test CDF-5 file mode_flag = IOR(cmode, nf90_64bit_data) call parallel_io(mode_flag) #endif #endif #ifdef NF_HAS_PARALLEL4 mode_flag = IOR(cmode, nf90_netcdf4) call parallel_io(mode_flag) #endif call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 99 endif end subroutine check subroutine parallel_io(mode_flag) use typeSizes use netcdf implicit none include 'mpif.h' integer :: mode_flag ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_parallel3.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 16, NY = 16 integer, parameter :: HALF_NX = NX/2, HALF_NY = NY/2 integer, parameter :: NUM_PROC = 4 integer, parameter :: CACHE_SIZE = 4194304, CACHE_NELEMS = 1013 integer, parameter :: CACHE_PREEMPTION = 79 integer, parameter :: NUM_VARS = 8 character (len = *), parameter :: var_name(NUM_VARS) = & (/ 'byte__', 'short_', 'int___', 'float_', 'double', 'ubyte_', 'ushort', 'uint__' /) integer :: var_type(NUM_VARS) = (/ nf90_byte, nf90_short, nf90_int, & nf90_float, nf90_double, nf90_ubyte, nf90_ushort, nf90_uint /) integer :: ncid, varid(NUM_VARS), dimids(MAX_DIMS) integer :: x_dimid, y_dimid integer :: byte_out(HALF_NY, HALF_NX), byte_in(HALF_NY, HALF_NX) integer :: short_out(HALF_NY, HALF_NX), short_in(HALF_NY, HALF_NX) integer :: int_out(HALF_NY, HALF_NX), int_in(HALF_NY, HALF_NX) real :: areal_out(HALF_NY, HALF_NX), areal_in(HALF_NY, HALF_NX) real :: double_out(HALF_NY, HALF_NX), double_in(HALF_NY, HALF_NX) integer :: ubyte_out(HALF_NY, HALF_NX), ubyte_in(HALF_NY, HALF_NX) integer :: ushort_out(HALF_NY, HALF_NX), ushort_in(HALF_NY, HALF_NX) integer (kind = EightByteInt) :: uint_out(HALF_NY, HALF_NX), uint_in(HALF_NY, HALF_NX) integer :: nvars, ngatts, ndims, unlimdimid, file_format, tst_nvars integer :: x, y, v integer :: my_rank, ierr, old_mode integer :: start(MAX_DIMS), count(MAX_DIMS) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) ! Create some pretend data. do x = 1, HALF_NX do y = 1, HALF_NY byte_out(y, x) = my_rank * (-1) short_out(y, x) = my_rank * (-2) int_out(y, x) = my_rank * (-4) areal_out(y, x) = my_rank * 2.5 double_out(y, x) = my_rank * (-4.5) ubyte_out(y, x) = my_rank ushort_out(y, x) = my_rank * 2 uint_out(y, x) = my_rank * 4 end do end do ! Create the netCDF file. call check(nf90_create(FILE_NAME, mode_flag, ncid, & comm = MPI_COMM_WORLD, info = MPI_INFO_NULL, cache_size = CACHE_SIZE, & cache_nelems = CACHE_NELEMS, cache_preemption = CACHE_PREEMPTION)) ! Define the dimensions. call check(nf90_def_dim(ncid, "x", NX, x_dimid)) call check(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) if (IAND(mode_flag, nf90_netcdf4) .GT. 0) then tst_nvars = 8 else if (IAND(mode_flag, nf90_64bit_data) .GT. 0) then tst_nvars = 8 else tst_nvars = 5 end if ! Define the variables. do v = 1, tst_nvars call check(nf90_def_var(ncid, var_name(v), var_type(v), dimids, varid(v))) end do ! enable fill mode call check(nf90_set_fill(ncid, NF90_FILL, old_mode)) ! This will be the last collective operation. call check(nf90_enddef(ncid)) ! Determine what part of the variable will be written/read for this ! processor. It's a checkerboard decomposition. count = (/ HALF_NX, HALF_NY /) if (my_rank .eq. 0) then start = (/ 1, 1 /) else if (my_rank .eq. 1) then start = (/ HALF_NX + 1, 1 /) else if (my_rank .eq. 2) then start = (/ 1, HALF_NY + 1 /) else if (my_rank .eq. 3) then start = (/ HALF_NX + 1, HALF_NY + 1 /) endif ! Write this processor's data, except for processor zero. if (my_rank .ne. 0) then call check(nf90_put_var(ncid, varid(1), byte_out, start = start, count = count)) call check(nf90_put_var(ncid, varid(2), short_out, start = start, count = count)) call check(nf90_put_var(ncid, varid(3), int_out, start = start, count = count)) call check(nf90_put_var(ncid, varid(4), areal_out, start = start, count = count)) call check(nf90_put_var(ncid, varid(5), double_out, start = start, count = count)) if (tst_nvars .GT. 5) then call check(nf90_put_var(ncid, varid(6), ubyte_out, start = start, count = count)) call check(nf90_put_var(ncid, varid(7), ushort_out, start = start, count = count)) call check(nf90_put_var(ncid, varid(8), uint_out, start = start, count = count)) endif endif ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, IOR(nf90_nowrite, nf90_mpiio), ncid, & comm = MPI_COMM_WORLD, info = MPI_INFO_NULL)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= tst_nvars .or. ngatts /= 0 .or. unlimdimid /= -1) stop 2 if (IAND(mode_flag, nf90_netcdf4) .GT. 0) then if (file_format /= nf90_format_netcdf4) stop 3 else if (IAND(mode_flag, nf90_64bit_data) .GT. 0) then if (file_format /= nf90_format_cdf5) stop 4 else if (IAND(mode_flag, nf90_64bit_offset) .GT. 0) then if (file_format /= nf90_format_64bit_offset) stop 5 endif ! Read this processor's data. call check(nf90_get_var(ncid, varid(1), byte_in, start = start, count = count)) call check(nf90_get_var(ncid, varid(2), short_in, start = start, count = count)) call check(nf90_get_var(ncid, varid(3), int_in, start = start, count = count)) call check(nf90_get_var(ncid, varid(4), areal_in, start = start, count = count)) call check(nf90_get_var(ncid, varid(5), double_in, start = start, count = count)) if (tst_nvars .GT. 5) then call check(nf90_get_var(ncid, varid(6), ubyte_in, start = start, count = count)) call check(nf90_get_var(ncid, varid(7), ushort_in, start = start, count = count)) call check(nf90_get_var(ncid, varid(8), uint_in, start = start, count = count)) end if ! Check the data. All the data from the processor zero are fill ! value. do x = 1, HALF_NX do y = 1, HALF_NY if (my_rank .eq. 0) then if (byte_in(y, x) .ne. nf90_fill_byte) stop 6 if (short_in(y, x) .ne. nf90_fill_short) stop 7 if (int_in(y, x) .ne. nf90_fill_int) stop 8 if (areal_in(y, x) .ne. nf90_fill_real) stop 9 if (double_in(y, x) .ne. nf90_fill_double) stop 10 if (tst_nvars .GT. 5) then if (ubyte_in(y, x) .ne. nf90_fill_ubyte) stop 11 if (ushort_in(y, x) .ne. nf90_fill_ushort) stop 12 if (uint_in(y, x) .ne. nf90_fill_uint) stop 13 endif else if (byte_in(y, x) .ne. (my_rank * (-1))) stop 14 if (short_in(y, x) .ne. (my_rank * (-2))) stop 15 if (int_in(y, x) .ne. (my_rank * (-4))) stop 16 if (areal_in(y, x) .ne. (my_rank * (2.5))) stop 17 if (double_in(y, x) .ne. (my_rank * (-4.5))) stop 18 if (tst_nvars .GT. 5) then if (ubyte_in(y, x) .ne. (my_rank * (1))) stop 19 if (ushort_in(y, x) .ne. (my_rank * (2))) stop 20 if (uint_in(y, x) .ne. (my_rank * (4))) stop 21 endif endif end do end do ! Close the file. call check(nf90_close(ncid)) end subroutine parallel_io end program f90tst_parallel3 netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_vars3.F900000664000175000017500000002040415205004070021637 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett, 2009 program f90tst_vars3 use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_vars3.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 6, NY = 12 integer :: data_out(NY, NX), data_in(NY, NX) integer :: data_out_1d(NX), data_in_1d(NX) ! We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, varid3, varid4, varid5, dimids(MAX_DIMS) integer :: chunksizes(MAX_DIMS), chunksizes_in(MAX_DIMS) integer :: x_dimid, y_dimid integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer, parameter :: DEFAULT_CACHE_NELEMS = 10000, DEFAULT_CACHE_SIZE = 1000000 integer, parameter :: DEFAULT_CACHE_PREEMPTION = 22 integer, parameter :: DEFLATE_LEVEL = 4 integer (kind = EightByteInt), parameter :: TOE_SAN_VALUE = 2147483648_EightByteInt character (len = *), parameter :: VAR1_NAME = "Chon-Ji" character (len = *), parameter :: VAR2_NAME = "Tan-Gun" character (len = *), parameter :: VAR3_NAME = "Toe-San" character (len = *), parameter :: VAR4_NAME = "Won-Hyo" character (len = *), parameter :: VAR5_NAME = "Yul-Guk" integer, parameter :: CACHE_SIZE = 8, CACHE_NELEMS = 571, CACHE_PREEMPTION = 66 ! Information read back from the file to check correctness. integer :: varid1_in, varid2_in, varid3_in, varid4_in, varid5_in integer :: xtype_in, ndims_in, natts_in, dimids_in(MAX_DIMS) character (len = nf90_max_name) :: name_in integer :: endianness_in, deflate_level_in logical :: shuffle_in, fletcher32_in, contiguous_in integer (kind = EightByteInt) :: toe_san_in integer :: cache_size_in, cache_nelems_in, cache_preemption_in print *, '' print *,'*** Testing definition of netCDF-4 vars from Fortran 90.' ! Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do do x = 1, NX data_out_1d(x) = x end do ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid, cache_nelems = DEFAULT_CACHE_NELEMS, & cache_size = DEFAULT_CACHE_SIZE, cache_preemption = DEFAULT_CACHE_PREEMPTION)) ! Define the dimensions. call check(nf90_def_dim(ncid, "x", NX, x_dimid)) call check(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define some variables. chunksizes = (/ NY, NX /) call check(nf90_def_var(ncid, VAR1_NAME, NF90_INT, dimids, varid1, chunksizes = chunksizes, & shuffle = .TRUE., fletcher32 = .TRUE., endianness = nf90_endian_big, deflate_level = DEFLATE_LEVEL)) call check(nf90_def_var(ncid, VAR2_NAME, NF90_INT, dimids, varid2, contiguous = .TRUE.)) call check(nf90_def_var(ncid, VAR3_NAME, NF90_INT64, varid3)) call check(nf90_def_var(ncid, VAR4_NAME, NF90_INT, x_dimid, varid4, contiguous = .TRUE.)) call check(nf90_def_var(ncid, VAR5_NAME, NF90_INT, dimids, varid5, chunksizes = chunksizes, & deflate_level = DEFLATE_LEVEL, cache_size = CACHE_SIZE, cache_nelems = CACHE_NELEMS, & cache_preemption = CACHE_PREEMPTION)) call check(nf90_inquire_variable(ncid, varid1, cache_size = cache_size_in, & cache_nelems = cache_nelems_in, cache_preemption = cache_preemption_in)) ! if (cache_size_in .ne. DEFAULT_CACHE_SIZE .or. cache_nelems_in .ne. & ! DEFAULT_CACHE_NELEMS .or. cache_preemption_in .ne. DEFAULT_CACHE_PREEMPTION) stop 101 call check(nf90_inquire_variable(ncid, varid5, cache_size = cache_size_in, & cache_nelems = cache_nelems_in, cache_preemption = cache_preemption_in)) if (cache_size_in .ne. CACHE_SIZE .or. cache_nelems_in .ne. & CACHE_NELEMS .or. cache_preemption_in .ne. CACHE_PREEMPTION) stop 1 ! Write the pretend data to the file. call check(nf90_put_var(ncid, varid1, data_out)) call check(nf90_put_var(ncid, varid2, data_out)) call check(nf90_put_var(ncid, varid3, TOE_SAN_VALUE)) call check(nf90_put_var(ncid, varid4, data_out_1d)) call check(nf90_put_var(ncid, varid5, data_out)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 5 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4) stop 2 ! Get varids. call check(nf90_inq_varid(ncid, VAR1_NAME, varid1_in)) call check(nf90_inq_varid(ncid, VAR2_NAME, varid2_in)) call check(nf90_inq_varid(ncid, VAR3_NAME, varid3_in)) call check(nf90_inq_varid(ncid, VAR4_NAME, varid4_in)) call check(nf90_inq_varid(ncid, VAR5_NAME, varid5_in)) ! Check variable 1. call check(nf90_inquire_variable(ncid, varid1_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, chunksizes = chunksizes_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR1_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 3 if (chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2)) & stop 4 if (endianness_in .ne. nf90_endian_big) stop 5 ! Check variable 2. call check(nf90_inquire_variable(ncid, varid2_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR2_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 6 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 7 ! Check variable 3. call check(nf90_inquire_variable(ncid, varid3_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR3_NAME .or. xtype_in .ne. NF90_INT64 .or. ndims_in .ne. 0 .or. & natts_in .ne. 0) stop 8 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 9 ! Check variable 4. call check(nf90_inquire_variable(ncid, varid4_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR4_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. 1 .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. x_dimid) stop 10 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 11 ! Check the data. call check(nf90_get_var(ncid, varid1_in, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 12 end do end do call check(nf90_get_var(ncid, varid2_in, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 13 end do end do call check(nf90_get_var(ncid, varid3_in, toe_san_in)) if (toe_san_in .ne. TOE_SAN_VALUE) stop 14 call check(nf90_get_var(ncid, varid4_in, data_in_1d)) do x = 1, NX if (data_out_1d(x) .ne. data_in_1d(x)) stop 15 end do call check(nf90_get_var(ncid, varid5_in, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 12 end do end do ! Close the file. call check(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_vars3 netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_path.F900000664000175000017500000000447615205004070021550 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! Tests new nf90_inq_path function ! Mimics tests in C tst_files5.c code ! Russ Rew program f90tst_path use typeSizes use netcdf implicit NONE character(len=*), parameter :: FILE_NAME="f90tst_path.nc" integer :: path_len, ncid character(LEN=NF90_MAX_NAME+1) :: path_in path_in = REPEAT(" ", LEN(path_in)) path_len = 0 print *,'' print *,'*** Testing netcdf file functions.' print *,'*** Checking the new inq_path function' ! Test with classic mode nf90_create call check(nf90_create(FILE_NAME, nf90_classic_model, ncid)) call check(nf90_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. (FILE_NAME /= TRIM(path_in))) & call check(-1) call check(nf90_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 ! Test with classic mode nf90_open call check(nf90_open(FILE_NAME, nf90_classic_model, ncid)) call check(nf90_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. (FILE_NAME /= TRIM(path_in))) & call check(-1) call check(nf90_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 ! Test with netcdf4 mode nf90_create call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) call check(nf90_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. (FILE_NAME /= TRIM(path_in))) & call check(-1) call check(nf90_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 ! Test with netcdf4 mode nf90_open call check(nf90_open(FILE_NAME, nf90_netcdf4, ncid)) call check(nf90_inq_path(ncid, path_len, path_in)) if ((path_len /= LEN(FILE_NAME)) .OR. (FILE_NAME /= TRIM(path_in))) & call check(-1) call check(nf90_close(ncid)) path_in=REPEAT(" ", LEN(path_in)) path_len=0 Print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_path netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_parallel.F900000664000175000017500000001320115205004070022372 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 parallel I/O functions from fortran. ! We are writing 2D data, a 6 x 12 grid, on 4 processors. Each ! processor will write it's rank to it's quarter of the array. The ! result will be (in CDL): ! ! netcdf f90tst_parallel { ! dimensions: ! x = 16 ; ! y = 16 ; ! variables: ! int data(x, y) ; ! data: ! ! data = ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, ! 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 ; ! } ! Ed Hartnett program f90tst_parallel use netcdf implicit none include 'mpif.h' integer :: mode_flag integer :: p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, ' ' print *, '*** Testing netCDF-4 parallel I/O from Fortran 90.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'Sorry, this test program must be run on four processors.' stop 2 endif #ifdef NF_HAS_PNETCDF mode_flag = IOR(nf90_clobber, nf90_mpiio) call parallel_io(mode_flag) #endif #ifdef NF_HAS_PARALLEL4 mode_flag = IOR(nf90_netcdf4, nf90_classic_model) mode_flag = IOR(mode_flag, nf90_clobber) mode_flag = IOR(mode_flag, nf90_mpiio) call parallel_io(mode_flag) #endif call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine handle_err subroutine parallel_io(mode_flag) use typeSizes use netcdf implicit none include 'mpif.h' integer :: mode_flag ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_parallel.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 16, NY = 16 integer, parameter :: NUM_PROC = 4 integer :: ncid, varid, dimids(MAX_DIMS) integer :: x_dimid, y_dimid integer :: data_out(NY / 2, NX / 2), data_in(NY / 2, NX / 2) integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer :: my_rank, ierr integer :: start(MAX_DIMS), count(MAX_DIMS) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) ! Create some pretend data. do x = 1, NX / 2 do y = 1, NY / 2 data_out(y, x) = my_rank end do end do ! Create the netCDF file. call handle_err(nf90_create(FILE_NAME, mode_flag, ncid, comm = MPI_COMM_WORLD, & info = MPI_INFO_NULL)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NX, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variable. call handle_err(nf90_def_var(ncid, "data", NF90_INT, dimids, varid)) ! With classic model netCDF-4 file, enddef must be called. call handle_err(nf90_enddef(ncid)) ! Determine what part of the variable will be written for this ! processor. It's a checkerboard decomposition. count = (/ NX / 2, NY / 2 /) if (my_rank .eq. 0) then start = (/ 1, 1 /) else if (my_rank .eq. 1) then start = (/ NX / 2 + 1, 1 /) else if (my_rank .eq. 2) then start = (/ 1, NY / 2 + 1 /) else if (my_rank .eq. 3) then start = (/ NX / 2 + 1, NY / 2 + 1 /) endif ! Write this processor's data. call handle_err(nf90_put_var(ncid, varid, data_out, start = start, count = count)) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, IOR(nf90_nowrite, nf90_mpiio), ncid, & comm = MPI_COMM_WORLD, info = MPI_INFO_NULL)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 1 .or. ngatts /= 0 .or. unlimdimid /= -1) stop 3 if (IAND(mode_flag, nf90_netcdf4) .GT. 0) then if (file_format /= nf90_format_netcdf4_classic) stop 4 else if (file_format /= nf90_format_classic) stop 5 endif ! Set collective access on this variable. This will cause all ! reads/writes to happen together on every processor. Fairly ! pointless, in this contexct, but I want to at least call this ! function once in my testing. call handle_err(nf90_var_par_access(ncid, varid, nf90_collective)) ! Read this processor's data. call handle_err(nf90_get_var(ncid, varid, data_in, start = start, count = count)) ! Check the data. do x = 1, NX / 2 do y = 1, NY / 2 if (data_in(y, x) .ne. my_rank) stop 6 end do end do ! Close the file. call handle_err(nf90_close(ncid)) end subroutine parallel_io end program f90tst_parallel netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_types.F900000664000175000017500000000600715205004070021750 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2007 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 new types from fortran 90. ! Ed Hartnett, 2009 program f90tst_types use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_types.nc" ! Information for the types we create. character (len = *), parameter :: OPAQUE_TYPE_NAME = "Odessyus" character (len = *), parameter :: var_name = "Polyphemus" character (len = 80) :: name_in character (len = 10), parameter :: opaque_data = "0123456789" character (len = *), parameter :: att_name = "att1" integer, parameter :: OPAQUE_SIZE = 10 integer (kind = EightByteInt) BIG_NUMBER, num_in parameter (BIG_NUMBER = 4294967295_EightByteInt) integer :: ncid, opaque_typeid, varid integer :: size_in, base_typeid_in, nfields_in, class_in print *, '' print *,'*** Testing new netCDF-4 types from Fortran 90.' ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) ! Create an opaque type. call check(nf90_def_opaque(ncid, OPAQUE_SIZE, OPAQUE_TYPE_NAME, opaque_typeid)) ! Write an (global) opaque attribute. call check(nf90_put_att_any(ncid, NF90_GLOBAL, att_name, opaque_typeid, 1, opaque_data)) ! Create an int64 scalar variable. call check(nf90_def_var(ncid, var_name, nf90_int64, varid)) ! Write a large integer (too large to fit in 32-bit ints). call check(nf90_put_var(ncid, varid, BIG_NUMBER)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the netCDF file. call check(nf90_open(FILE_NAME, 0, ncid)) ! Check the opaque type. call check(nf90_inq_user_type(ncid, opaque_typeid, name_in, size_in, & base_typeid_in, nfields_in, class_in)) if (name_in(1:len(OPAQUE_TYPE_NAME)) .ne. OPAQUE_TYPE_NAME .or. & size_in .ne. OPAQUE_SIZE .or. base_typeid_in .ne. 0 .or. & nfields_in .ne. 0 .or. class_in .ne. NF90_OPAQUE) stop 2 ! Check it again with the inq_opaque call. call check(nf90_inq_opaque(ncid, opaque_typeid, name_in, size_in)) if (name_in(1:len(OPAQUE_TYPE_NAME)) .ne. OPAQUE_TYPE_NAME .or. & size_in .ne. OPAQUE_SIZE) stop 2 ! Check it again with the inq_type call !! call check(nf90_inq_type(ncid, opaque_typeid, name_in, size_in)) if (name_in(1:len(OPAQUE_TYPE_NAME)) .ne. OPAQUE_TYPE_NAME .or. & size_in .ne. OPAQUE_SIZE) stop 2 ! Read in the large number. call check(nf90_get_var(ncid, varid, num_in)) if (num_in .ne. BIG_NUMBER) stop 2 ! Close the file. call check(nf90_close(ncid)) print *,'*** SUCCESS!' ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. contains subroutine check(status) integer, intent ( in) :: status if(status /= nf90_noerr) then print *, trim(nf90_strerror(status)) stop 2 end if end subroutine check end program f90tst_types netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_vars.F900000664000175000017500000000626615205004070021566 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett 2009. program f90tst_vars use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_vars.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 6, NY = 12 integer :: data_out(NY, NX), data_in(NY, NX) ! We need these ids and other gunk for netcdf. integer :: ncid, varid, dimids(MAX_DIMS), chunksizes(MAX_DIMS), chunksizes_in(MAX_DIMS) integer :: x_dimid, y_dimid, contig integer :: mode_flag integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer :: CACHE_SIZE = 1000000; ! integer, parameter :: CACHE_SIZE = 1000000 print *, '' print *,'*** Testing definition of netCDF-4 vars from Fortran 90.' ! Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do ! Create the netCDF file. mode_flag = IOR(nf90_netcdf4, nf90_classic_model) ! call handle_err(nf90_create(FILE_NAME, mode_flag, ncid, cache_size = CACHE_SIZE)) call handle_err(nf90_create(FILE_NAME, mode_flag, ncid, 0, CACHE_SIZE)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NX, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variable. call handle_err(nf90_def_var(ncid, "data", NF90_INT, dimids, varid)) ! Set up chunking. chunksizes = (/ NY, NX /) call handle_err(nf90_def_var_chunking(ncid, varid, 0, chunksizes)) ! With classic model netCDF-4 file, enddef must be called. call handle_err(nf90_enddef(ncid)) ! Write the pretend data to the file. call handle_err(nf90_put_var(ncid, varid, data_out)) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 1 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4_classic) stop 2 call handle_err(nf90_inq_var_chunking(ncid, varid, contig, chunksizes_in)) if (chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2)) & stop 2 ! Check the data. call handle_err(nf90_get_var(ncid, varid, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 3 end do end do ! Close the file. call handle_err(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine handle_err end program f90tst_vars netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_nc4.F900000664000175000017500000000417415205004070021273 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! Tests new nf90_inq_path function ! Mimics tests in C tst_files5.c code ! Ed Hartnett, 2011 program f90tst_nc4 use typeSizes use netcdf implicit none integer :: fh, dimid, varid, ndim, nvar, fmt character (len = *), parameter :: FILE_NAME = "f90tst_nc4.nc" print *, '' print *,'*** testing simple netCDF-4 file.' call check(nf90_create(FILE_NAME, NF90_NETCDF4, fh)) call check(nf90_inq_format(fh, fmt)) if (fmt .ne. nf90_format_netcdf4) stop 4 call check(nf90_def_dim(fh, 'fred', 10, dimid)) call check(nf90_def_var(fh, 'john', NF90_INT, (/dimid/), varid)) call check(nf90_close(fh)) ! Check the file. call check(nf90_open(FILE_NAME, NF90_WRITE, fh)) call check(nf90_inq_format(fh, fmt)) if (fmt .ne. nf90_format_netcdf4) stop 5 call check(nf90_inquire(fh, nDimensions = ndim, nVariables = nvar)) if (nvar .ne. 1 .or. ndim .ne. 1) stop 3 call check(nf90_close(fh)) print *,'*** OK!' print *,'*** Testing simple classic file.' call check(nf90_create(FILE_NAME, NF90_CLOBBER, fh)) call check(nf90_inq_format(fh, fmt)) if (fmt .ne. nf90_format_classic) stop 6 call check(nf90_def_dim(fh, 'fred', 10, dimid)) call check(nf90_def_var(fh, 'john', NF90_INT, (/dimid/), varid)) call check(nf90_close(fh)) ! Check the file. call check(nf90_open(FILE_NAME, NF90_WRITE, fh)) call check(nf90_inq_format(fh, fmt)) if (fmt .ne. nf90_format_classic) stop 6 call check(nf90_inquire(fh, nDimensions = ndim, nVariables = nvar)) if (nvar .ne. 1 .or. ndim .ne. 1) stop 3 call check(nf90_close(fh)) print *,'*** OK!' print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_nc4 netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_flarge.F900000664000175000017500000000451315205004070022044 0ustar alastairalastair! Copyright 2007, UCAR/Unidata. See netcdf/COPYRIGHT file for copying ! and redistribution conditions. ! This program tests large files (> 4 GB) in netCDF-4. ! Russ Rew, 2007 program f90tst_flarge use typeSizes use netcdf implicit none integer :: ncFileID, dimID, varID1, varID2 integer, parameter :: BIG_DIMENSION = 300000000 character (len = *), parameter :: fileName = "f90tst_flarge.nc" character (len = *), parameter :: dimName = "really_big_dimension" character (len = *), parameter :: var1Name = "TweedleDum" character (len = *), parameter :: var2Name = "TweedleDee" double precision, parameter :: VAL1 = 42.5 double precision, parameter :: VAL2 = -42.5 double precision :: val1_in double precision :: val2_in print *,'*** Testing netCDF-4 large files from Fortran 90 API.' ! Create the file with 2 NF_DOUBLE vars, each with one really long dimension. call check(nf90_create(trim(fileName), nf90_netcdf4, ncFileID)) call check(nf90_def_dim(ncFileID, dimName, BIG_DIMENSION, dimID)) call check(nf90_def_var(ncFileID, var1Name, nf90_double, (/ dimID /), varID1) ) call check(nf90_def_var(ncFileID, var2Name, nf90_double, (/ dimID /), varID2) ) ! ! Write a value in each variable. call check(nf90_put_var(ncFileID, VarID1, (/ 42.5 /), & start = (/ 1 /), count = (/ 1 /)) ) call check(nf90_put_var(ncFileID, VarID2, (/ -42.5 /), & start = (/ BIG_DIMENSION /), count = (/ 1 /)) ) call check(nf90_close(ncFileID)) ! Now open the file to read and check a few values call check(nf90_open(trim(fileName), NF90_NOWRITE, ncFileID)) call check(nf90_get_var(ncFileID, VarID1, val1_in, start = (/ 1 /)) ) call check(nf90_get_var(ncFileID, VarID2, val2_in, start = (/ BIG_DIMENSION /)) ) if(val1_in /= VAL1 .or. val2_in /= VAL2) then print *, 'Variable value not what was written' stop 2 end if call check(nf90_close(ncFileID)) OPEN (UNIT=5, FILE=fileName, STATUS="OLD") CLOSE (UNIT=5, STATUS="DELETE") print *,'*** SUCCESS!' contains ! Internal subroutine - checks error status after each netcdf, prints out text message each time ! an error code is returned. subroutine check(status) integer, intent ( in) :: status if(status /= nf90_noerr) then print *, trim(nf90_strerror(status)) stop 2 end if end subroutine check end program f90tst_flarge netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_rengrps.F900000664000175000017500000001041215205004070022257 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! Modified version of f90tst_grps to add test for rename_grps. ! Russ Rew, 2014 program f90tst_rengrps use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_rengrps.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 6, NY = 12 integer :: chunksizes(MAX_DIMS) integer, parameter :: CACHE_NELEMS = 10000, CACHE_SIZE = 1000000 integer, parameter :: DEFLATE_LEVEL = 4 ! We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, dimids(MAX_DIMS) integer :: x_dimid, y_dimid character (len = *), parameter :: VAR1_NAME = "VarName1" character (len = *), parameter :: VAR2_NAME = "VarName2" character (len = *), parameter :: GRP1_NAME = "Old_Grp1_name" character (len = *), parameter :: GRP2_NAME = "Old_Grp2_name" character (len = *), parameter :: NEW_GRP1_NAME = "new_Grp1_name" character (len = *), parameter :: NEW_GRP2_NAME = "new_Grp2_name" character (len = NF90_MAX_NAME) :: grp1_full_name integer :: ilen ! Information read back from the file to check correctness. integer :: grpid1, grpid2 integer :: deflate_level_in, endianness_in logical :: shuffle_in, fletcher32_in integer :: xtype_in, ndims_in, natts_in, dimids_in(MAX_DIMS) character (len = nf90_max_name) :: name_in integer :: chunksizes_in(MAX_DIMS) print *, '' print *,'*** Testing netCDF-4 rename groups from Fortran 90.' ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) ! Define the dimensions. call check(nf90_def_dim(ncid, "x", NX, x_dimid)) call check(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define some nested groups. call check(nf90_def_grp(ncid, GRP1_NAME, grpid1)) call check(nf90_def_grp(grpid1, GRP2_NAME, grpid2)) ! Define some variables. chunksizes = (/ NY, NX /) call check(nf90_def_var(ncid, VAR1_NAME, NF90_INT, dimids, varid1, chunksizes = chunksizes, & shuffle = .TRUE., fletcher32 = .TRUE., endianness = nf90_endian_big, deflate_level = DEFLATE_LEVEL)) call check(nf90_def_var(grpid1, VAR2_NAME, NF90_INT, dimids, varid2, contiguous = .TRUE.)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_write, ncid)) ! Get the group ids for the newly reopened file. call check(nf90_inq_grp_ncid(ncid, GRP1_NAME, grpid1)) call check(nf90_inq_grp_ncid(grpid1, GRP2_NAME, grpid2)) ! Check for the groups with full group names. write(grp1_full_name, '(A,A)') '/', GRP1_NAME call check(nf90_inq_grp_full_ncid(ncid, grp1_full_name, grpid1)) call check(nf90_inq_grpname(grpid1, name_in)) if (name_in .ne. GRP1_NAME) stop 61 call check(nf90_inq_grpname_full(grpid1, ilen, name_in)) if (name_in .ne. grp1_full_name) stop 62 Call check(nf90_rename_grp(grpid1, NEW_GRP1_NAME)) name_in=REPEAT(" ", LEN(name_in)) Call check(nf90_inq_grpname(grpid1, name_in)) If (name_in /= NEW_GRP1_NAME) Call check(-1) ! Check variable 1. call check(nf90_inquire_variable(ncid, varid1, name_in, xtype_in, ndims_in, dimids_in, & natts_in, chunksizes = chunksizes_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR1_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 3 if (chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2)) & stop 4 if (endianness_in .ne. nf90_endian_big) stop 5 ! Close the file. call check(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_rengrps netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_io.F900000664000175000017500000001523415205004070021215 0ustar alastairalastair! Copyright 2007-2019, UCAR/Unidata. See netcdf/COPYRIGHT file for ! copying and redistribution conditions. ! This program tests io times with large files (> 4 GB) in ! netCDF-4. This is user-contributed code. This test creates a bunch ! of fort.* output files. ! Ed Hartnett, 2007 program f90tst_io use netcdf ! access to netcdf module implicit none integer, parameter :: prsz1 = 50, prsz2 = 50, & prsz3 = 50, prsz4 = 50, repct = 10 integer :: i1, i2, i3, i4, ticksPerSec real :: psr integer :: clockRate integer :: start, now, wrint1, ncint1, wrint2, ncint2, & wrint3, iosb, size real, dimension (prsz1, prsz2, prsz3, prsz4) :: x character(len = *), parameter :: nclFilenm1 = 'f90tst_io1.nc', & nclFilenm2 = 'f90tst_io2.nc', nclFilenm3 = 'f90tst_io3.nc', & nclFilenm4 = 'f90tst_io4.nc', nclFilenm5 = 'f90tst_io5.nc', & nclFilenm6 = 'f90tst_io6.nc', nclFilenm7 = 'f90tst_io7.nc', & nclFilenm8 = 'f90tst_io8.nc', nclFilenm9 = 'f90tst_io9.nc', & nclFilenm10 = 'f90tst_io10.nc', nclFilenm11 = 'f90tst_io11.nc' ! needed for netcdf integer :: ncid, x1id, x2id, x3id, x4id, vrid psr = 1.7/real(prsz1) print *, "Starting data initialization." size = (prsz1 * prsz2 * prsz3 * prsz4 )/ 250000 do i1 = 1, prsz1 do i2 = 1, prsz2 do i3 = 1, prsz3 ! Jackson Pollock it is not do i4 = 1, prsz4 x(i1, i2, i3, i4) = sin(i1*psr)*(0.5 + cos(i2*psr))+(psr/i3)+ i4/(10.0*prsz4) enddo enddo enddo enddo call system_clock(start, ticksPerSec) clockRate = 1000/ticksPerSec print 5, size, 1000.0/real(ticksPerSec) 5 format("Array sizes =", i4, "MB. Clock resolution = ", f6.3, " ms."/) ! First the binary writes call system_clock(start, ticksPerSec) write(1, iostat = iosb) x call system_clock(now) wrint1 = now - start call check (iosb, 1) print 1, size, "MB","binary write = ", wrint1 * clockRate 1 format("Time for", i5, a, a26, i6, " msec. ") call system_clock(start) do i1 = 1, repct rewind (2, iostat = iosb) call check (iosb, 2) write(2, iostat = iosb) x call check (iosb, 3) enddo call system_clock(now) wrint2 = now - start call check (iosb, 4) close(2, iostat = iosb) call check (iosb, 5) print 2, size, "MB", repct, " binary rewind/writes = ", wrint2 * clockRate 2 format("Time for", i5, a, i3, a23, i6," msec. ", a, i6) close(1, iostat = iosb) call system_clock(start) write(13, iostat = iosb) x call check (iosb, 6) write(14, iostat = iosb) x call check (iosb, 7) write(15, iostat = iosb) x call check (iosb, 8) write(16, iostat = iosb) x call check (iosb, 9) write(17, iostat = iosb) x call check (iosb, 10) write(18, iostat = iosb) x call check (iosb, 11) write(19, iostat = iosb) x call check (iosb, 12) write(20, iostat = iosb) x call check (iosb, 13) call system_clock(now) wrint3 = now - start print 2, size, "MB", 8, " binary file writes = ", wrint3 * clockRate do i1 = 1, 8 close(12 + i1, iostat = iosb) call check (iosb, 14) enddo ! Next the netCDF writes call setupNetCDF (nclFilenm1, ncid, vrid, prsz1, prsz2, prsz3, prsz4, & x1id, x2id, x3id, x4id, NF90_CLOBBER, 20) call system_clock(start) call check (NF90_PUT_VAR(ncid, vrid, x), 18) call system_clock(now) ncint1 = now - start print 3, size, "MB"," netcdf write = ", ncint1 * clockRate, & real(ncint1)/real (wrint1) 3 format("Time for", i5, a, a25, i7, " msec. Spd ratio = ", f5.2) call check (NF90_CLOSE(ncid), 14) call system_clock(start) do i1 = 1, repct call setupNetCDF (nclFilenm1, ncid, vrid, prsz1, prsz2, prsz3, prsz4, & x1id, x2id, x3id, x4id, NF90_CLOBBER, 130) call check (NF90_PUT_VAR(ncid, vrid, x), 23 + i1) call check (NF90_CLOSE(ncid), 15) enddo call system_clock(now) ncint2 = now - start print 4, size, repct, " repeated netcdf writes = ", ncint2 * clockRate, & real(ncint2)/real(wrint2); 4 format("Time for", i5, "MB", i3, a22, i7, " msec. Spd ratio = ", f5.2) ! call system_clock(start) ! call setupNetCDF (nclFilenm3, ncid, vrids, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 20) ! call setupNetCDF (nclFilenm4, ncid, vridt, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 30) ! call setupNetCDF (nclFilenm5, ncid, vridu, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 40) ! call setupNetCDF (nclFilenm6, ncid, vridv, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 50) ! call setupNetCDF (nclFilenm7, ncid, vridw, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 60) ! call setupNetCDF (nclFilenm8, ncid, vridx, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 70) ! call setupNetCDF (nclFilenm9, ncid, vridy, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 80) ! call setupNetCDF (nclFilenm10, ncid, vridz, prsz1, prsz2, prsz3, prsz4, & ! x1id, x2id, x3id, x4id, NF90_CLOBBER, 90) ! call check (NF90_PUT_VAR(ncid, vrids, s), 118) ! call check (NF90_PUT_VAR(ncid, vridt, t), 119) ! call check (NF90_PUT_VAR(ncid, vridu, u), 120) ! call check (NF90_PUT_VAR(ncid, vridv, v), 121) ! call check (NF90_PUT_VAR(ncid, vridw, w), 122) ! call check (NF90_PUT_VAR(ncid, vridx, x), 123) ! call check (NF90_PUT_VAR(ncid, vridy, y), 124) ! call check (NF90_PUT_VAR(ncid, vridz, z), 125) ! call system_clock(now) ! ncint3 = now - start ! call check (NF90_CLOSE(ncid), 16) ! print 4, size, 8, " netcdf file writes = ", ncint3 * clockRate, & ! real(ncint3)/real(wrint3); contains subroutine check (st, n) ! checks the return error code integer, intent (in) :: st, n if ((n < 10.and.st /= 0).or.(n > 10.and.st /= NF90_noerr))then print *, "I/O error at", n, " status = ", st stop 2 endif end subroutine check subroutine setupNetCDF(fn, nc, vr, d1, d2, d3, d4, do1, do2, & do3, do4, stat, deb) integer, intent(in) :: d1, d2, d3, d4, stat, deb integer, intent(out) :: do1, do2, do3, do4, vr integer, intent(inout) :: nc integer, dimension(4) :: dimids (4) character(len = *), intent(in) :: fn call check (NF90_CREATE (fn, stat, nc), deb + 1) call check (NF90_DEF_DIM(nc, "d1", d1, do1), deb + 2) call check (NF90_DEF_DIM(nc, "d2", d2, do2), deb + 3) call check (NF90_DEF_DIM(nc, "d3", d3, do3), deb + 4) call check (NF90_DEF_DIM(nc, "d4", d4, do4), deb + 5) dimids = (/ do1, do2, do3, do4 /) call check (NF90_DEF_VAR(nc, "data", NF90_REAL, dimids, vr), deb + 6) call check (NF90_ENDDEF (nc), deb + 7) end subroutine setupNetCDF end program f90tst_io netcdf-fortran-4.6.3+ds/nf03_test4/ref_att.nc0000664000175000017500000001721115205004070021060 0ustar alastairalastair‰HDF  ÿÿÿÿÿÿÿÿ‰0JmNøOHDR ´"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ MetaDataïyobs®,žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+ÿOHDR ´"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ latitude“]‹ãOHDR ´"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ sstŽbÃð08OHDR ´"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ sst™b’í¾OCHKÖD Hauthor  'agency fake_agencyèì§OHDR ÿÿÿÿÿÿÿÿ!  “ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +CLASSDIMENSION_SCALEh + _Netcdf4Dimid ’ƒôsOCHKŽCLocationÊÒ-OZOCHK ZNAME@This is a netCDF dimension but not a netCDF variable. 0ŒŒUOHDR ÿÿÿÿÿÿÿÿ   +€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ A _Netcdf4Coordinates Ñ« unitsN/AÞ[Î’OCHK|nobstype‚CòÑ5OCHK K long_name LDIMENSION_LIST2PdzOCHKHxm E_NCProperties"version=2,netcdf=4.9.3,hdf5=1.14.6âänGCOL fake_authorobservation typeÊ degrees_northÊCÊÊOCHKÿÿÿÿÿÿÿÿߪVÝñtJOHDR eÿÿÿÿÿÿÿÿ   +ð|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ A _Netcdf4Coordinates  Gunits  LDIMENSION_LIST·}OHDR eÿÿÿÿÿÿÿÿ   +ð|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ A _Netcdf4Coordinates  Gunits LDIMENSION_LIST6RçYOHDR :ÿÿÿÿÿÿÿÿ   +ð|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ A _Netcdf4Coordinates  unitsC LDIMENSION_LIST#POCHK œ0REFERENCE_LIST6datasetdimension ‚“Ž™ó%¥netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_att.F900000664000175000017500000000564115205004070021377 0ustar alastairalastair! This program tests reading NF90_STRING & NF90_CHAR attributes from fortran. ! The ref input data structure is shown in ref_att.cdl ! The ref input data can be generated by running "ncgen -o ref_att.nc ref_att.cdl" ! For the input of this program, rename ref input data as "att.nc" ! ! Cheng Da 2025/08/30 ! program f90tst_att use netcdf, only: NF90_NOWRITE,NF90_GLOBAL,nf90_open,nf90_close,& nf90_inq_ncid, nf90_inq_varid,nf90_get_att implicit none integer :: fid, gid, vid integer :: ierr character(len=256) :: fname, str fname = "att.nc" call check(NF90_Open(TRIM(fname), NF90_NOWRITE, fid)) ! read global att str=""; call check(nf90_get_att(fid, NF90_GLOBAL, "agency", str)) !NF90_CHAR att call verify_results(trim(str), "fake_agency", "get wrong global attr: agency", 10) str=""; call check(nf90_get_att(fid, NF90_GLOBAL, "author", str)) !NF90_STRING att call verify_results(trim(str), "fake_author", "get wrong global attr: author", 11) ! read var att call check(nf90_inq_varid(fid, "obstype", vid)) str=""; call check(nf90_get_att(fid, vid, "long_name", str)) !NF90_STRING att call verify_results(trim(str), "observation type", "get wrong obstype attr: long_name", 12) str=""; call check(nf90_get_att(fid, vid, "units", str)) !NF90_CHAR att call verify_results(trim(str), "N/A", "get wrong obstype attr: units", 13) ! read var atts under group MetaData call check(nf90_inq_ncid(fid, "MetaData", gid)) call check(nf90_inq_varid(gid,"latitude", vid)) str=""; call check(nf90_get_att(gid, vid, "units", str)) ! NF90_STRING att call verify_results(trim(str), "degrees_north", "get wrong MetaData/latitude attr: units", 14) ! read var atts group yobs call check(nf90_inq_ncid(fid, "yobs", gid)) call check(nf90_inq_varid(gid,"sst", vid)) str=""; call check(nf90_get_att(gid, vid, "units", str)) ! NF90_STRING att call verify_results(trim(str), "C", "get wrong yobs/sst attr: units", 15) ! read var atts group Hx call check(nf90_inq_ncid(fid, "Hx", gid)) call check(nf90_inq_varid(gid,"sst", vid)) str=""; call check(nf90_get_att(gid, vid, "units", str)) ! NF90_CHAR att call verify_results(trim(str), "C", "get wrong Hx/sst attr: units", 16) call check(nf90_close(fid)) print *,"*** SUCCESS!" contains subroutine check(errcode) use netcdf, only: NF90_NOERR, nf90_strerror implicit none integer, intent(in) :: errcode if(errcode /= NF90_NOERR) then print*, "Error: ", trim(nf90_strerror(errcode)) stop (1) endif end subroutine check subroutine verify_results(input, ref, errmsg, errcode) implicit none character(*),intent(in) :: input, ref, errmsg integer,intent(in) :: errcode if (trim(input) .ne. trim(ref)) then print*, "Error: "//trim(errmsg) print*, " expect to get:"//trim(ref) print*, " actually get:"//trim(input) stop (errcode) end if end subroutine verify_results end program f90tst_att netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_parallel_fill.F900000664000175000017500000001776515205004070023423 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 fill values with parallel I/O. It ! writes a checkerboard decomposition for a number of variables, ! but task 0 (of 4) does not write. The resulting data has fill ! value for the first quarter of each array. ! Ed Hartnett, started 2009, finished 2019. program f90tst_parallel_fill use typeSizes use netcdf implicit none include 'mpif.h' ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_parallel_fill.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 16, NY = 16 integer, parameter :: HALF_NX = NX / 2, HALF_NY = NY / 2 integer, parameter :: QUARTER_NX = NX / 4, QUARTER_NY = NY / 4 integer, parameter :: NUM_VARS = 8 character (len = *), parameter :: var_name(NUM_VARS) = & (/ 'byte__', 'short_', 'int___', 'float_', 'double', 'ubyte_', 'ushort', 'uint__' /) integer :: ncid, varid(NUM_VARS), dimids(MAX_DIMS) integer :: var_type(NUM_VARS) = (/ nf90_byte, nf90_short, nf90_int, & nf90_float, nf90_double, nf90_ubyte, nf90_ushort, nf90_uint /) integer :: x_dimid, y_dimid integer :: byte_out(HALF_NY, HALF_NX), byte_in(HALF_NY, HALF_NX) integer :: short_out(HALF_NY, HALF_NX), short_in(HALF_NY, HALF_NX) integer :: int_out(HALF_NY, HALF_NX), int_in(HALF_NY, HALF_NX) real :: areal_out(HALF_NY, HALF_NX), areal_in(HALF_NY, HALF_NX) real :: double_out(HALF_NY, HALF_NX), double_in(HALF_NY, HALF_NX) integer :: ubyte_out(HALF_NY, HALF_NX), ubyte_in(HALF_NY, HALF_NX) integer :: ushort_out(HALF_NY, HALF_NX), ushort_in(HALF_NY, HALF_NX) integer (kind = EightByteInt) :: uint_out(HALF_NY, HALF_NX), uint_in(HALF_NY, HALF_NX) integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y, v integer :: start_out(MAX_DIMS), count_out(MAX_DIMS) integer :: start_in(MAX_DIMS), count_in(MAX_DIMS) integer :: mode integer :: p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, '*** Testing fill values with parallel I/O.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'Sorry, this test program must be run on four processors.' stop 1 endif ! Create some pretend data. do x = 1, HALF_NX do y = 1, HALF_NY byte_out(y, x) = -1 short_out(y, x) = -2 int_out(y, x) = -4 areal_out(y, x) = 2.5 double_out(y, x) = -4.5 ubyte_out(y, x) = 1 ushort_out(y, x) = 2 uint_out(y, x) = 4 end do end do ! Create the netCDF file. nf90_mpiio flag not required starting with ! netcdf-c-4.6.1. mode = ior(nf90_netcdf4, nf90_mpiio) call check(nf90_create(FILE_NAME, mode, ncid, comm = MPI_COMM_WORLD, & info = MPI_INFO_NULL)) ! Define the dimensions. call check(nf90_def_dim(ncid, "x", NX, x_dimid)) call check(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variables. do v = 1, NUM_VARS call check(nf90_def_var(ncid, var_name(v), var_type(v), dimids, varid(v))) call check(nf90_var_par_access(ncid, varid(v), nf90_collective)) end do ! This will be the last collective operation. call check(nf90_enddef(ncid)) ! Determine what part of the variable will be written/read for this ! processor. It's a checkerboard decomposition. Only the third ! quadrant of data will be written, so each processor writes a ! quarter of the quadrant, or 1/16th of the total array. (And ! processor 0 doesn't write anyway.) count_out = (/ HALF_NX, HALF_NY /) if (my_rank .eq. 0) then start_out = (/ 1, 1 /) count_out = (/ 0, 0 /) else if (my_rank .eq. 1) then start_out = (/ HALF_NX + 1, 1 /) else if (my_rank .eq. 2) then start_out = (/ 1, HALF_NY + 1 /) else if (my_rank .eq. 3) then start_out = (/ HALF_NX + 1, HALF_NY + 1 /) endif ! print *, my_rank, start_out, count_out ! Write this processor's data, except for processor zero. call check(nf90_put_var(ncid, varid(1), byte_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(2), short_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(3), int_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(4), areal_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(5), double_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(6), ubyte_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(7), ushort_out, start = start_out, count = count_out)) call check(nf90_put_var(ncid, varid(8), uint_out, start = start_out, count = count_out)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. nf90_mpiio flag not required starting with ! netcdf-c-4.6.1. mode = ior(nf90_nowrite, nf90_mpiio) call check(nf90_open(FILE_NAME, mode, ncid, comm = MPI_COMM_WORLD, & info = MPI_INFO_NULL)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= NUM_VARS .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4) stop 2 ! Now each processor will read one quarter of the whole array. count_in = (/ HALF_NX, HALF_NY /) if (my_rank .eq. 0) then start_in = (/ 1, 1 /) else if (my_rank .eq. 1) then start_in = (/ HALF_NX + 1, 1 /) else if (my_rank .eq. 2) then start_in = (/ 1, HALF_NY + 1 /) else if (my_rank .eq. 3) then start_in = (/ HALF_NX + 1, HALF_NY + 1 /) endif ! Read this processor's data. call check(nf90_get_var(ncid, varid(1), byte_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(2), short_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(3), int_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(4), areal_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(5), double_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(6), ubyte_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(7), ushort_in, start = start_in, count = count_in)) call check(nf90_get_var(ncid, varid(8), uint_in, start = start_in, count = count_in)) ! Check the data. All the data from the processor zero are fill ! value. do x = 1, HALF_NX do y = 1, HALF_NY if (my_rank .ne. 0) then if (byte_in(y, x) .ne. -1) stop 13 if (short_in(y, x) .ne. -2) stop 14 if (int_in(y, x) .ne. -4) stop 15 if (areal_in(y, x) .ne. 2.5) stop 16 if (double_in(y, x) .ne. -4.5) stop 17 if (ubyte_in(y, x) .ne. 1) stop 18 if (ushort_in(y, x) .ne. 2) stop 19 if (uint_in(y, x) .ne. 4) stop 20 else if (byte_in(y, x) .ne. nf90_fill_byte) stop 3 if (short_in(y, x) .ne. nf90_fill_short) stop 4 if (int_in(y, x) .ne. nf90_fill_int) stop 5 if (areal_in(y, x) .ne. nf90_fill_real) stop 6 if (double_in(y, x) .ne. nf90_fill_double) stop 7 if (ubyte_in(y, x) .ne. nf90_fill_ubyte) stop 8 if (ushort_in(y, x) .ne. nf90_fill_ushort) stop 9 if (uint_in(y, x) .ne. nf90_fill_uint) stop 10 endif end do end do ! Close the file. call check(nf90_close(ncid)) call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 99 endif end subroutine check end program f90tst_parallel_fill netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_var_szip.F900000664000175000017500000000725015205004070022442 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2020 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett, 2/1/2020 program f90tst_var_szip use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_var_szip.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 40, NY = 4096 integer :: data_out(NY, NX), data_in(NY, NX) ! We need these ids and other gunk for netcdf. integer :: ncid, varid, dimids(MAX_DIMS), chunksizes(MAX_DIMS) integer :: x_dimid, y_dimid integer :: mode_flag integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer, parameter :: CACHE_SIZE = 1000000 integer :: xtype_in, natts_in, dimids_in(MAX_DIMS), chunksizes_in(MAX_DIMS) logical :: contiguous_in, shuffle_in, fletcher32_in integer :: deflate_level_in, endianness_in character (len = NF90_MAX_NAME) :: name_in print *, '' print *,'*** Testing szip writes of netCDF-4 var from Fortran 90.' ! Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do ! Create the netCDF file. mode_flag = IOR(nf90_netcdf4, nf90_classic_model) call handle_err(nf90_create(FILE_NAME, mode_flag, ncid, cache_size = CACHE_SIZE)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NX, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variable. chunksizes = (/ 256, 10 /) call handle_err(nf90_def_var(ncid, 'data', NF90_INT, dimids, & varid, chunksizes = chunksizes)) ! Turn on szip compression. call handle_err(nf90_def_var_szip(ncid, 1, 32, 4)) ! With classic model netCDF-4 file, enddef must be called. call handle_err(nf90_enddef(ncid)) ! Write the pretend data to the file. call handle_err(nf90_put_var(ncid, varid, data_out)) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 1 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4_classic) stop 3 call handle_err(nf90_inquire_variable(ncid, varid, name_in, xtype_in, ndims, dimids_in, & natts_in, contiguous_in, chunksizes_in, deflate_level_in, shuffle_in, fletcher32_in, & endianness_in)) if (name_in .ne. 'data' .or. xtype_in .ne. NF90_INT .or. ndims .ne. MAX_DIMS .or. & dimids_in(1) /= y_dimid .or. dimids_in(2) /= x_dimid .or. & natts_in .ne. 0 .or. contiguous_in .neqv. .false. .or. & chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2) .or. & shuffle_in .neqv. .false. .or. fletcher32_in .neqv. .false.) & stop 4 ! Check the data. call handle_err(nf90_get_var(ncid, varid, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 3 end do end do ! Close the file. call handle_err(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine handle_err end program f90tst_var_szip netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_parallel_compressed.F900000664000175000017500000003544215205004070024631 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2020 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 parallel I/O with compression. It ! was added to resolve this issue: ! https://github.com/Unidata/netcdf-fortran/issues/264 ! This code matches the code here: ! https://github.com/NOAA-EMC/fv3atm/blob/develop/io/module_write_netcdf_parallel.F90 ! Ed Hartnett, 6/16/20 ! Ward Fisher, 7/29/22 - Explicity assign values to an array, avoiding a ! platform-specific failure. program f90tst_parallel_compressed use typeSizes use netcdf implicit none include 'mpif.h' ! File info. character (len = *), parameter :: FILE_NAME = "f90tst_parallel_compressed.nc" integer :: ncid, oldMode ! Dimensions integer, parameter :: NUM_DIMS = 5 character (len = *), parameter :: dim_name(NUM_DIMS) = & (/ 'grid_xt', 'grid_yt', 'pfull ', 'phalf ', 'time ' /) integer, dimension(NUM_DIMS) :: dim_len = (/ 3072, 1536, 127, 128, 1 /) integer :: dimid(NUM_DIMS) ! Variables. integer, parameter :: NUM_VARS = 8 character (len = *), parameter :: var_name(NUM_VARS) = & (/ 'grid_xt', 'lon ', 'grid_yt', 'lat ', 'pfull ', 'phalf ', 'time ', 'clwmr ' /) integer ::varid(NUM_VARS) integer :: var_type(NUM_VARS) = (/ nf90_double, nf90_double, nf90_double, & nf90_double, nf90_float, nf90_float, nf90_double, nf90_float /) integer :: var_ndims(NUM_VARS) = (/ 1, 2, 1, 2, 1, 1, 1, 4 /) integer :: ideflate = 4 real*8 :: value_time = 2.0, value_time_in real, allocatable :: value_clwmr(:,:,:,:) integer :: phalf_loc_size, phalf_start real, allocatable :: value_phalf_loc(:), value_phalf_loc_in(:) integer :: pfull_loc_size, pfull_start real, allocatable :: value_pfull_loc(:), value_pfull_loc_in(:) integer :: grid_xt_loc_size, grid_xt_start real, allocatable :: value_grid_xt_loc(:), value_grid_xt_loc_in(:) integer :: grid_yt_loc_size, grid_yt_start real, allocatable :: value_grid_yt_loc(:), value_grid_yt_loc_in(:) integer :: lon_xt_loc_size, lon_xt_start, lon_yt_loc_size, lon_yt_start real, allocatable :: value_lon_loc(:,:), value_lon_loc_in(:,:) integer :: lat_xt_loc_size, lat_xt_start, lat_yt_loc_size, lat_yt_start real, allocatable :: value_lat_loc(:,:), value_lat_loc_in(:,:) real, allocatable :: value_clwmr_loc(:,:,:,:), value_clwmr_loc_in(:,:,:,:) ! These are for checking file contents. character (len = 128) :: name_in integer :: dim_len_in, xtype_in, ndims_in integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y, v integer :: npes, my_rank, i, j, k, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, npes, ierr) if (my_rank .eq. 0) then print *, '*** Testing compressed data writes with parallel I/O.' endif ! There must be 4 procs for this test. if (npes .ne. 4) then print *, 'Sorry, this test program must be run on 4 processors.' stop 1 endif ! Size of local (i.e. for this pe) grid_xt data. grid_xt_loc_size = dim_len(1)/npes; grid_xt_start = my_rank * grid_xt_loc_size + 1 if (my_rank .eq. npes - 1) then grid_xt_loc_size = grid_xt_loc_size + mod(dim_len(1), npes) endif !print *, my_rank, 'grid_xt', dim_len(3), grid_xt_start, grid_xt_loc_size ! Size of local (i.e. for this pe) grid_yt data. grid_yt_loc_size = dim_len(2)/npes; grid_yt_start = my_rank * grid_yt_loc_size + 1 if (my_rank .eq. npes - 1) then grid_yt_loc_size = grid_yt_loc_size + mod(dim_len(2), npes) endif !print *, my_rank, 'grid_yt', dim_len(3), grid_yt_start, grid_yt_loc_size ! Size of local (i.e. for this pe) pfull data. pfull_loc_size = dim_len(3)/npes; pfull_start = my_rank * pfull_loc_size + 1 if (my_rank .eq. npes - 1) then pfull_loc_size = pfull_loc_size + mod(dim_len(3), npes) endif !print *, my_rank, 'pfull', dim_len(3), pfull_start, pfull_loc_size ! Size of local (i.e. for this pe) phalf data. phalf_loc_size = dim_len(4)/npes; phalf_start = my_rank * phalf_loc_size + 1 if (my_rank .eq. npes - 1) then phalf_loc_size = phalf_loc_size + mod(dim_len(4), npes) endif !print *, my_rank, 'phalf', dim_len(4), phalf_start, phalf_loc_size ! Size of local arrays (i.e. for this pe) lon and lat data. This is ! specific to 4 pes. lon_xt_loc_size = 1536 lat_xt_loc_size = 1536 if (my_rank .eq. 0 .or. my_rank .eq. 2) then lon_xt_start = 1 lat_xt_start = 1 else lon_xt_start = 1537 lat_xt_start = 1537 endif lon_yt_loc_size = 768 lat_yt_loc_size = 768 if (my_rank .eq. 0 .or. my_rank .eq. 1) then lon_yt_start = 1 lat_yt_start = 1 else lon_yt_start = 769 lat_yt_start = 769 endif ! print *, my_rank, 'lon_xt_start', lon_xt_start, 'lon_yt_start', lon_yt_start ! print *, my_rank, 'lon_xt_loc_size', lon_xt_loc_size, 'lon_yt_loc_size', lon_yt_loc_size ! Allocate space on this pe to hold the data for this pe. allocate(value_grid_xt_loc(grid_xt_loc_size)) allocate(value_grid_xt_loc_in(grid_xt_loc_size)) allocate(value_grid_yt_loc(grid_yt_loc_size)) allocate(value_grid_yt_loc_in(grid_yt_loc_size)) allocate(value_pfull_loc(pfull_loc_size)) allocate(value_pfull_loc_in(pfull_loc_size)) allocate(value_phalf_loc(phalf_loc_size)) allocate(value_phalf_loc_in(phalf_loc_size)) allocate(value_lon_loc(lon_xt_loc_size, lon_yt_loc_size)) allocate(value_lon_loc_in(lon_xt_loc_size, lon_yt_loc_size)) allocate(value_lat_loc(lat_xt_loc_size, lat_yt_loc_size)) allocate(value_lat_loc_in(lat_xt_loc_size, lat_yt_loc_size)) allocate(value_clwmr_loc(lat_xt_loc_size, lat_yt_loc_size, pfull_loc_size, 1)) allocate(value_clwmr_loc_in(lat_xt_loc_size, lat_yt_loc_size, pfull_loc_size, 1)) ! Some fake data for this pe to write. do i = 1, grid_xt_loc_size value_grid_xt_loc(i) = i; end do do i = 1, pfull_loc_size value_pfull_loc(i) = my_rank * 100 + i; end do do i = 1, phalf_loc_size value_phalf_loc(i) = my_rank * 100 + i; end do do i = 1, lon_xt_loc_size do j = 1, lon_yt_loc_size value_lon_loc(i, j) = my_rank * 100 + i +j value_lat_loc(i, j) = my_rank * 100 + i +j do k = 1, pfull_loc_size value_clwmr_loc(i, j, k, 1) = my_rank * 100 + i + j + k end do end do end do ! Create the netCDF file using parallel I/O. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid, comm = MPI_COMM_WORLD, & info = MPI_INFO_NULL)) ! Turn off fill mode. call check(nf90_set_fill(ncid, NF90_NOFILL, oldMode)) ! Define dimension grid_xt. call check(nf90_def_dim(ncid, trim(dim_name(1)), dim_len(1), dimid(1))) ! Define dimension grid_yt. call check(nf90_def_dim(ncid, trim(dim_name(2)), dim_len(2), dimid(2))) ! Define variable grid_xt. call check(nf90_def_var(ncid, trim(var_name(1)), var_type(1), dimids=(/dimid(1)/), varid=varid(1))) call check(nf90_var_par_access(ncid, varid(1), NF90_INDEPENDENT)) ! Define variable lon. call check(nf90_def_var(ncid, trim(var_name(2)), var_type(2), dimids=(/dimid(1), dimid(2)/), varid=varid(2))) ! call check(nf90_var_par_access(ncid, varid(2), NF90_INDEPENDENT)) ! Define variable grid_yt. call check(nf90_def_var(ncid, trim(var_name(3)), var_type(3), dimids=(/dimid(2)/), varid=varid(3))) call check(nf90_var_par_access(ncid, varid(3), NF90_INDEPENDENT)) ! Define variable lat. call check(nf90_def_var(ncid, trim(var_name(4)), var_type(4), dimids=(/dimid(1), dimid(2)/), varid=varid(4))) call check(nf90_var_par_access(ncid, varid(4), NF90_INDEPENDENT)) ! Define dimension pfull. call check(nf90_def_dim(ncid, trim(dim_name(3)), dim_len(3), dimid(3))) ! Define variable pfull and write data. call check(nf90_def_var(ncid, trim(var_name(5)), var_type(5), dimids=(/dimid(3)/), varid=varid(5))) call check(nf90_var_par_access(ncid, varid(5), NF90_INDEPENDENT)) call check(nf90_enddef(ncid)) call check(nf90_put_var(ncid, varid(5), start=(/pfull_start/), count=(/pfull_loc_size/), values=value_pfull_loc)) call check(nf90_redef(ncid)) ! Define dimension phalf. call check(nf90_def_dim(ncid, trim(dim_name(4)), dim_len(4), dimid(4))) ! Define variable phalf and write data. call check(nf90_def_var(ncid, trim(var_name(6)), var_type(6), dimids=(/dimid(4)/), varid=varid(6))) call check(nf90_var_par_access(ncid, varid(6), NF90_INDEPENDENT)) call check(nf90_enddef(ncid)) call check(nf90_put_var(ncid, varid(6), start=(/phalf_start/), count=(/phalf_loc_size/), values=value_phalf_loc)) call check(nf90_redef(ncid)) ! Define dimension time. call check(nf90_def_dim(ncid, trim(dim_name(5)), dim_len(5), dimid(5))) ! Define variable time and write data. call check(nf90_def_var(ncid, trim(var_name(7)), var_type(7), dimids=(/dimid(5)/), varid=varid(7))) call check(nf90_var_par_access(ncid, varid(7), NF90_INDEPENDENT)) call check(nf90_enddef(ncid)) ! In NOAA code, do all processors write the single time value? if (my_rank .eq. 0) then call check(nf90_put_var(ncid, varid(7), values=value_time)) endif call check(nf90_redef(ncid)) ! Write variable grid_xt data. call check(nf90_enddef(ncid)) call check(nf90_put_var(ncid, varid(1), start=(/grid_xt_start/), count=(/grid_xt_loc_size/), values=value_grid_xt_loc)) call check(nf90_redef(ncid)) ! Write lon data. call check(nf90_enddef(ncid)) call check(nf90_put_var(ncid, varid(2), start=(/lon_xt_start, lon_yt_start/), count=(/lon_xt_loc_size, lon_yt_loc_size/), & values=value_lon_loc)) call check(nf90_redef(ncid)) ! Write grid_yt data. call check(nf90_enddef(ncid)) value_grid_yt_loc = 0.0 call check(nf90_put_var(ncid, varid(3), start=(/grid_yt_start/), count=(/grid_yt_loc_size/), values=value_grid_yt_loc)) call check(nf90_redef(ncid)) ! Write lat data. call check(nf90_enddef(ncid)) call check(nf90_put_var(ncid, varid(4), start=(/lat_xt_start, lat_yt_start/), count=(/lat_xt_loc_size, lat_yt_loc_size/), & values=value_lat_loc)) call check(nf90_redef(ncid)) ! Define variable clwmr and write data (?) call check(nf90_def_var(ncid, trim(var_name(8)), var_type(8), dimids=(/dimid(1), dimid(2), dimid(3), dimid(5)/), & varid=varid(8), shuffle=.true., deflate_level=ideflate)) call check(nf90_var_par_access(ncid, varid(8), NF90_COLLECTIVE)) call check(nf90_enddef(ncid)) ! call check(nf90_put_var(ncid, varid(8), values=value_clwmr)) call check(nf90_put_var(ncid, varid(8), start=(/lat_xt_start, lat_yt_start, pfull_start, 1/), & count=(/lat_xt_loc_size, lat_yt_loc_size, pfull_loc_size, 1/), values=value_clwmr_loc)) call check(nf90_redef(ncid)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_nowrite, ncid, comm = MPI_COMM_WORLD, & info = MPI_INFO_NULL)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= NUM_DIMS) stop 20 ! Check the dimensions for correctness. do i = 1, NUM_DIMS call check(nf90_inquire_dimension(ncid, i, name_in, dim_len_in)) if (name_in .ne. trim(dim_name(i))) stop 101 if (dim_len_in .ne. dim_len(i)) stop 102 end do ! Check the variables for correctness. do i = 1, NUM_VARS call check(nf90_inquire_variable(ncid, i, name_in, xtype=xtype_in, ndims=ndims_in)) if (name_in .ne. trim(var_name(i))) stop 110 if (xtype_in .ne. var_type(i)) stop 111 if (ndims_in .ne. var_ndims(i)) stop 112 end do ! Check the grid_xt data. call check(nf90_get_var(ncid, varid(1), start=(/grid_xt_start/), count=(/grid_xt_loc_size/), values=value_grid_xt_loc_in)) do i = 1, grid_xt_loc_size !print *, value_grid_xt_loc_in(i), value_grid_xt_loc(i) if (value_grid_xt_loc_in(i) .ne. value_grid_xt_loc(i)) stop 170 end do ! Check the lon data. call check(nf90_get_var(ncid, varid(2), start=(/lon_xt_start, lon_yt_start/), count=(/lon_xt_loc_size, lon_yt_loc_size/), & values=value_lon_loc_in)) do i = 1, lon_xt_loc_size do j = 1, lon_yt_loc_size if (value_lon_loc_in(i, j) .ne. value_lon_loc(i, j)) stop 180 end do end do ! Check the grid_yt data. call check(nf90_get_var(ncid, varid(3), start=(/grid_yt_start/), count=(/grid_yt_loc_size/), values=value_grid_yt_loc_in)) do i = 1, grid_yt_loc_size !print *, value_grid_yt_loc_in(i), value_grid_yt_loc(i) if (value_grid_yt_loc_in(i) .ne. value_grid_yt_loc(i)) stop 181 end do ! Check the lon data. call check(nf90_get_var(ncid, varid(4), start=(/lat_xt_start, lat_yt_start/), count=(/lat_xt_loc_size, lat_yt_loc_size/), & values=value_lat_loc_in)) do i = 1, lat_xt_loc_size do j = 1, lat_yt_loc_size if (value_lat_loc_in(i, j) .ne. value_lat_loc(i, j)) stop 180 end do end do ! Check the pfull data. call check(nf90_get_var(ncid, varid(5), start=(/pfull_start/), count=(/pfull_loc_size/), values=value_pfull_loc_in)) do i = 1, pfull_loc_size !print *, value_pfull_loc_in(i), value_pfull_loc(i) if (value_pfull_loc_in(i) .ne. value_pfull_loc(i)) stop 185 end do ! Check the phalf data. call check(nf90_get_var(ncid, varid(6), start=(/phalf_start/), count=(/phalf_loc_size/), values=value_phalf_loc_in)) do i = 1, phalf_loc_size if (value_phalf_loc_in(i) .ne. value_phalf_loc(i)) stop 200 end do ! Check the time value. call check(nf90_get_var(ncid, varid(7), values=value_time_in)) if (value_time_in .ne. value_time) stop 300 ! Check the clwmr value. call check(nf90_get_var(ncid, varid(8), start=(/lat_xt_start, lat_yt_start, pfull_start, 1/), & count=(/lat_xt_loc_size, lat_yt_loc_size, pfull_loc_size, 1/), values=value_clwmr_loc_in)) do i = 1, lat_xt_loc_size do j = 1, lat_yt_loc_size do k = 1, pfull_loc_size if (value_clwmr_loc_in(i, j, k, 1) .ne. value_clwmr_loc(i, j, k, 1)) stop 300 end do end do end do ! Close the file. call check(nf90_close(ncid)) ! Free resources. deallocate(value_grid_xt_loc) deallocate(value_grid_xt_loc_in) deallocate(value_grid_yt_loc) deallocate(value_grid_yt_loc_in) deallocate(value_pfull_loc) deallocate(value_pfull_loc_in) deallocate(value_phalf_loc) deallocate(value_phalf_loc_in) deallocate(value_lon_loc) deallocate(value_lon_loc_in) deallocate(value_lat_loc) deallocate(value_lat_loc_in) deallocate(value_clwmr_loc) deallocate(value_clwmr_loc_in) if (my_rank .eq. 0) print *,'*** SUCCESS!' call MPI_Finalize(ierr) contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 99 endif end subroutine check end program f90tst_parallel_compressed netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_vars4.F900000664000175000017500000000742215205004070021645 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett, 2009 program f90tst_vars4 use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_vars4.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 40, NY = 4096 integer, dimension(:,:), allocatable :: data_out, data_in ! We need these ids and other gunk for netcdf. integer :: ncid, varid, dimids(MAX_DIMS), chunksizes(MAX_DIMS) integer :: x_dimid, y_dimid integer :: mode_flag integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer, parameter :: CACHE_SIZE = 1000000 integer :: xtype_in, natts_in, dimids_in(MAX_DIMS), chunksizes_in(MAX_DIMS) logical :: contiguous_in, shuffle_in, fletcher32_in integer :: deflate_level_in, endianness_in character (len = NF90_MAX_NAME) :: name_in print *, '' print *,'*** Testing definition of netCDF-4 vars from Fortran 90.' allocate(data_out(NY, NX), data_in(NY, NX)) ! Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do ! Create the netCDF file. mode_flag = IOR(nf90_netcdf4, nf90_classic_model) call handle_err(nf90_create(FILE_NAME, mode_flag, ncid, cache_size = CACHE_SIZE)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NX, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variable. chunksizes = (/ 256, 10 /) call handle_err(nf90_def_var(ncid, 'data', NF90_INT, dimids, & varid, chunksizes = chunksizes, deflate_level = 4)) ! With classic model netCDF-4 file, enddef must be called. call handle_err(nf90_enddef(ncid)) ! Write the pretend data to the file. call handle_err(nf90_put_var(ncid, varid, data_out)) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 1 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4_classic) stop 3 call handle_err(nf90_inquire_variable(ncid, varid, name_in, xtype_in, ndims, dimids_in, & natts_in, contiguous_in, chunksizes_in, deflate_level_in, shuffle_in, fletcher32_in, & endianness_in)) if (name_in .ne. 'data' .or. xtype_in .ne. NF90_INT .or. ndims .ne. MAX_DIMS .or. & dimids_in(1) /= y_dimid .or. dimids_in(2) /= x_dimid .or. & natts_in .ne. 0 .or. contiguous_in .neqv. .false. .or. & chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2) .or. & deflate_level_in .ne. 4 .or. shuffle_in .neqv. .false. .or. fletcher32_in .neqv. .false.) & stop 4 ! Check the data. call handle_err(nf90_get_var(ncid, varid, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 3 end do end do ! Close the file. call handle_err(nf90_close(ncid)) print *,'*** SUCCESS!' if (allocated(data_in)) deallocate(data_in) if (allocated(data_out)) deallocate(data_out) contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine handle_err end program f90tst_vars4 netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_parallel2.F900000664000175000017500000001444015205004070022462 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 parallel I/O functions from fortran. ! We are writing 2D data, a 6 x 12 grid, on 4 processors. We only ! have half that amount of input data, because a stride is used so ! that only every other value is written to the file. Each ! processor will write it's rank to every other value in it's ! quarter of the array. The result will be (in CDL): ! ! netcdf f90tst_parallel2 { ! dimensions: ! x = 16 ; ! y = 16 ; ! variables: ! int data(x, y) ; ! data: ! data = ! 0, _, 0, _, 0, _, 0, _, 1, _, 1, _, 1, _, 1, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 0, _, 0, _, 0, _, 0, _, 1, _, 1, _, 1, _, 1, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 2, _, 2, _, 2, _, 2, _, 3, _, 3, _, 3, _, 3, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 2, _, 2, _, 2, _, 2, _, 3, _, 3, _, 3, _, 3, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, ! 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, 0, _, ! _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ; ! } ! Ed Hartnett program f90tst_parallel use netcdf implicit none include 'mpif.h' integer :: mode_flag, cmode integer :: p, my_rank, ierr call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) if (my_rank .eq. 0) then print *, ' ' print *, '*** Testing netCDF-4 parallel I/O with strided access.' endif ! There must be 4 procs for this test. if (p .ne. 4) then print *, 'Sorry, this test program must be run on four processors.' stop 2 endif cmode = IOR(nf90_clobber, nf90_mpiio) #ifdef NF_HAS_PNETCDF ! test CDF-1 file call parallel_io(cmode) ! test CDF-2 file mode_flag = IOR(cmode, nf90_64bit_offset) call parallel_io(mode_flag) #ifdef ENABLE_CDF5 ! test CDF-5 file mode_flag = IOR(cmode, nf90_64bit_data) call parallel_io(mode_flag) #endif #endif #ifdef NF_HAS_PARALLEL4 mode_flag = IOR(cmode, nf90_netcdf4) mode_flag = IOR(mode_flag, nf90_classic_model) call parallel_io(mode_flag) #endif call MPI_Finalize(ierr) if (my_rank .eq. 0) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 9 endif end subroutine handle_err subroutine parallel_io(mode_flag) use typeSizes use netcdf implicit none include 'mpif.h' integer :: mode_flag ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_parallel2.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 16, NY = 16 integer, parameter :: NUM_PROC = 4 integer :: ncid, varid, dimids(MAX_DIMS) integer :: x_dimid, y_dimid integer :: data_out(NY / 4, NX / 4), data_in(NY / 4, NX / 4) integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer :: my_rank, ierr integer :: start(MAX_DIMS), count(MAX_DIMS), stride(MAX_DIMS) call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierr) ! Create some pretend data. do x = 1, NX / 4 do y = 1, NY / 4 data_out(y, x) = my_rank end do end do ! Create the netCDF file. call handle_err(nf90_create(FILE_NAME, mode_flag, ncid, comm = MPI_COMM_WORLD, & info = MPI_INFO_NULL)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NX, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variable. call handle_err(nf90_def_var(ncid, "data", NF90_INT, dimids, varid)) ! With classic model netCDF-4 file, enddef must be called. call handle_err(nf90_enddef(ncid)) ! Determine what part of the variable will be written for this ! processor. It's a checkerboard decomposition. count = (/ NX / 4, NY / 4 /) stride = (/ 2, 2 /) if (my_rank .eq. 0) then start = (/ 1, 1 /) else if (my_rank .eq. 1) then start = (/ NX / 2 + 1, 1 /) else if (my_rank .eq. 2) then start = (/ 1, NY / 2 + 1 /) else if (my_rank .eq. 3) then start = (/ NX / 2 + 1, NY / 2 + 1 /) endif ! Write this processor's data. call handle_err(nf90_put_var(ncid, varid, data_out, start = start, & count = count, stride = stride)) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, IOR(nf90_nowrite, nf90_mpiio), ncid, & comm = MPI_COMM_WORLD, info = MPI_INFO_NULL)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 1 .or. ngatts /= 0 .or. unlimdimid /= -1) stop 3 if (IAND(mode_flag, nf90_netcdf4) .GT. 0) then if (file_format /= nf90_format_netcdf4_classic) stop 4 else if (IAND(mode_flag, nf90_64bit_offset) .GT. 0) then if (file_format /= nf90_format_64bit_offset) stop 5 else if (IAND(mode_flag, nf90_64bit_data) .GT. 0) then if (file_format /= nf90_format_64bit_data) stop 6 else if (file_format /= nf90_format_classic) stop 7 endif ! Set collective access on this variable. This will cause all ! reads/writes to happen together on every processor. Fairly ! pointless, in this contexct, but I want to at least call this ! function once in my testing. call handle_err(nf90_var_par_access(ncid, varid, nf90_collective)) ! Read this processor's data. call handle_err(nf90_get_var(ncid, varid, data_in, start = start, count = count, & stride = stride)) ! Check the data. do x = 1, NX / 4 do y = 1, NY / 4 if (data_in(y, x) .ne. my_rank) stop 8 end do end do ! Close the file. call handle_err(nf90_close(ncid)) end subroutine parallel_io end program f90tst_parallel netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_vars_vlen.F900000664000175000017500000001033515205004070022602 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2009 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 vlen variable functions from fortran 90. ! $Id: f90tst_vars_vlen.f90,v 1.3 2009/02/02 19:31:25 ed Exp $ program f90tst_vars_vlen use typeSizes use netcdf implicit none ! include 'netcdf.inc' ! ! This is the name of the data file we will create. ! character*(*) FILE_NAME ! parameter (FILE_NAME='f90tst_vars_vlen.nc') ! ! NetCDF IDs. ! integer ncid, vlen_typeid ! integer max_types ! parameter (max_types = 1) ! ! Need these to read type information. ! integer num_types, typeids(max_types) ! integer base_type, base_size ! character*80 type_name ! integer type_size, nfields, class ! ! Information for the vlen type we will define. ! character*(*) vlen_type_name ! parameter (vlen_type_name = 'vlen_type') ! ! Some data about and for the vlen. ! integer vlen_len, vlen_len_in ! parameter (vlen_len = 5) ! integer data1(vlen_len), data1_in(vlen_len) ! ! These must be big enough to hold the stuct nc_vlen in netcdf.h. ! integer vlen(10), vlen_in(10) ! ! Loop indexes, and error handling. ! integer x, retval ! print *, '' ! print *,'*** Testing VLEN types.' ! do x = 1, vlen_len ! data1(x) = x ! end do ! ! Create the netCDF file. ! retval = nf_create(FILE_NAME, NF_NETCDF4, ncid) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Create the vlen type. ! retval = nf_def_vlen(ncid, vlen_type_name, nf_int, vlen_typeid) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Set up the vlen with this helper function, since F77 can't deal ! ! with pointers. ! retval = nf_put_vlen_element(ncid, vlen_typeid, vlen, vlen_len, data1) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Write the vlen attribute. ! retval = nf_put_att(ncid, NF_GLOBAL, 'att1', vlen_typeid, 1, vlen) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Close the file. ! retval = nf_close(ncid) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Reopen the file. ! retval = nf_open(FILE_NAME, NF_NOWRITE, ncid) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Get the typeids of all user defined types. ! retval = nf_inq_typeids(ncid, num_types, typeids) ! if (retval .ne. nf_noerr) call handle_err(retval) ! if (num_types .ne. max_types) stop 2 ! ! Use nf_inq_user_type to confirm this is an vlen type, with vlen ! ! size 16, base type NF_INT. ! retval = nf_inq_user_type(ncid, typeids(1), type_name, type_size, & ! base_type, nfields, class) ! if (retval .ne. nf_noerr) call handle_err(retval) ! if (type_name(1:len(vlen_type_name)) .ne. vlen_type_name .or. & ! type_size .ne. 16 .or. base_type .ne. nf_int .or. & ! nfields .ne. 0 .or. class .ne. nf_vlen) stop 3 ! ! Use nf_inq_vlen and make sure we get the same answers as we did ! ! with nf_inq_user_type. ! retval = nf_inq_vlen(ncid, typeids(1), type_name, base_size, base_type) ! if (retval .ne. nf_noerr) call handle_err(retval) ! if (type_name(1:len(vlen_type_name)) .ne. vlen_type_name .or. & ! base_type .ne. nf_int .or. base_size .ne. 16) stop 4 ! ! Read the vlen attribute. ! retval = nf_get_att(ncid, NF_GLOBAL, 'att1', vlen_in) ! if (retval .ne. nf_noerr) call handle_err(retval) ! ! Get the data from the vlen we just read. ! retval = nf_get_vlen_element(ncid, vlen_typeid, vlen_in, & ! vlen_len_in, data1_in) ! if (retval .ne. nf_noerr) call handle_err(retval) ! if (vlen_len_in .ne. vlen_len) stop 5 ! ! Check the data ! do x = 1, vlen_len ! if (data1(x) .ne. data1_in(x)) stop 6 ! end do ! ! Close the file. ! retval = nf_close(ncid) ! if (retval .ne. nf_noerr) call handle_err(retval) ! print *,'*** SUCCESS!' ! contains ! ! This subroutine handles errors by printing an error message and ! ! exiting with a non-zero status. ! subroutine handle_err(errcode) ! use netcdf ! implicit none ! integer, intent(in) :: errcode ! if(errcode /= nf90_noerr) then ! print *, 'Error: ', trim(nf90_strerror(errcode)) ! stop 1 ! endif ! end subroutine handle_err end program f90tst_vars_vlen netcdf-fortran-4.6.3+ds/nf03_test4/Makefile.in0000664000175000017500000015723415205004070021171 0ustar alastairalastair# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This is a automake file, part of Unidata's netCDF package. # Copyright 2019, see the COPYRIGHT file for more information. # This file builds and runs the tests for netCDF-4 functions in the # F90 API. # Ed Hartnett, 2019 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @TEST_QUANTIZE_TRUE@am__append_1 = f90tst_vars5 check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ $(am__EXEEXT_5) $(am__EXEEXT_6) TESTS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ $(am__append_7) $(am__EXEEXT_6) # This is the netCDF-4 F90 large file test. @LARGE_FILE_TESTS_TRUE@am__append_2 = f90tst_flarge @LARGE_FILE_TESTS_TRUE@am__append_3 = f90tst_flarge # This is an f90 benchmark. @BUILD_BENCHMARKS_TRUE@am__append_4 = f90tst_io @BUILD_BENCHMARKS_TRUE@am__append_5 = f90tst_io # Test parallel I/O. @TEST_PARALLEL_TRUE@am__append_6 = f90tst_parallel f90tst_parallel2 f90tst_parallel3 \ @TEST_PARALLEL_TRUE@f90tst_nc4_par f90tst_parallel_fill f90tst_parallel_compressed @TEST_PARALLEL_TRUE@am__append_7 = run_f90_par_test.sh # Test szip if write capability is present in C library. @TEST_SZIP_WRITE_TRUE@am__append_8 = f90tst_var_szip @TEST_SZIP_WRITE_TRUE@am__append_9 = f90tst_var_szip subdir = nf03_test4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = run_f90_par_test.sh att.nc CONFIG_CLEAN_VPATH_FILES = @TEST_QUANTIZE_TRUE@am__EXEEXT_1 = f90tst_vars5$(EXEEXT) am__EXEEXT_2 = f90tst_vars$(EXEEXT) f90tst_vars_vlen$(EXEEXT) \ f90tst_grps$(EXEEXT) f90tst_fill$(EXEEXT) \ f90tst_fill2$(EXEEXT) f90tst_vars2$(EXEEXT) \ f90tst_vars3$(EXEEXT) f90tst_vars4$(EXEEXT) \ f90tst_path$(EXEEXT) f90tst_rengrps$(EXEEXT) \ f90tst_nc4$(EXEEXT) f90tst_types$(EXEEXT) \ f90tst_types2$(EXEEXT) f90tst_zstandard$(EXEEXT) \ f90tst_att$(EXEEXT) $(am__EXEEXT_1) @LARGE_FILE_TESTS_TRUE@am__EXEEXT_3 = f90tst_flarge$(EXEEXT) @BUILD_BENCHMARKS_TRUE@am__EXEEXT_4 = f90tst_io$(EXEEXT) @TEST_PARALLEL_TRUE@am__EXEEXT_5 = f90tst_parallel$(EXEEXT) \ @TEST_PARALLEL_TRUE@ f90tst_parallel2$(EXEEXT) \ @TEST_PARALLEL_TRUE@ f90tst_parallel3$(EXEEXT) \ @TEST_PARALLEL_TRUE@ f90tst_nc4_par$(EXEEXT) \ @TEST_PARALLEL_TRUE@ f90tst_parallel_fill$(EXEEXT) \ @TEST_PARALLEL_TRUE@ f90tst_parallel_compressed$(EXEEXT) @TEST_SZIP_WRITE_TRUE@am__EXEEXT_6 = f90tst_var_szip$(EXEEXT) am_f90tst_att_OBJECTS = f90tst_att.$(OBJEXT) f90tst_att_OBJECTS = $(am_f90tst_att_OBJECTS) f90tst_att_LDADD = $(LDADD) f90tst_att_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_f90tst_fill_OBJECTS = f90tst_fill.$(OBJEXT) f90tst_fill_OBJECTS = $(am_f90tst_fill_OBJECTS) f90tst_fill_LDADD = $(LDADD) f90tst_fill_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_fill2_OBJECTS = f90tst_fill2.$(OBJEXT) f90tst_fill2_OBJECTS = $(am_f90tst_fill2_OBJECTS) f90tst_fill2_LDADD = $(LDADD) f90tst_fill2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_flarge_SOURCES_DIST = f90tst_flarge.F90 @LARGE_FILE_TESTS_TRUE@am_f90tst_flarge_OBJECTS = \ @LARGE_FILE_TESTS_TRUE@ f90tst_flarge.$(OBJEXT) f90tst_flarge_OBJECTS = $(am_f90tst_flarge_OBJECTS) f90tst_flarge_LDADD = $(LDADD) f90tst_flarge_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_grps_OBJECTS = f90tst_grps.$(OBJEXT) f90tst_grps_OBJECTS = $(am_f90tst_grps_OBJECTS) f90tst_grps_LDADD = $(LDADD) f90tst_grps_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_io_SOURCES_DIST = f90tst_io.F90 @BUILD_BENCHMARKS_TRUE@am_f90tst_io_OBJECTS = f90tst_io.$(OBJEXT) f90tst_io_OBJECTS = $(am_f90tst_io_OBJECTS) f90tst_io_LDADD = $(LDADD) f90tst_io_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_nc4_OBJECTS = f90tst_nc4.$(OBJEXT) f90tst_nc4_OBJECTS = $(am_f90tst_nc4_OBJECTS) f90tst_nc4_LDADD = $(LDADD) f90tst_nc4_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_nc4_par_SOURCES_DIST = f90tst_nc4_par.F90 @TEST_PARALLEL_TRUE@am_f90tst_nc4_par_OBJECTS = \ @TEST_PARALLEL_TRUE@ f90tst_nc4_par.$(OBJEXT) f90tst_nc4_par_OBJECTS = $(am_f90tst_nc4_par_OBJECTS) f90tst_nc4_par_LDADD = $(LDADD) f90tst_nc4_par_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_parallel_SOURCES_DIST = f90tst_parallel.F90 @TEST_PARALLEL_TRUE@am_f90tst_parallel_OBJECTS = \ @TEST_PARALLEL_TRUE@ f90tst_parallel.$(OBJEXT) f90tst_parallel_OBJECTS = $(am_f90tst_parallel_OBJECTS) f90tst_parallel_LDADD = $(LDADD) f90tst_parallel_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_parallel2_SOURCES_DIST = f90tst_parallel2.F90 @TEST_PARALLEL_TRUE@am_f90tst_parallel2_OBJECTS = \ @TEST_PARALLEL_TRUE@ f90tst_parallel2.$(OBJEXT) f90tst_parallel2_OBJECTS = $(am_f90tst_parallel2_OBJECTS) f90tst_parallel2_LDADD = $(LDADD) f90tst_parallel2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_parallel3_SOURCES_DIST = f90tst_parallel3.F90 @TEST_PARALLEL_TRUE@am_f90tst_parallel3_OBJECTS = \ @TEST_PARALLEL_TRUE@ f90tst_parallel3.$(OBJEXT) f90tst_parallel3_OBJECTS = $(am_f90tst_parallel3_OBJECTS) f90tst_parallel3_LDADD = $(LDADD) f90tst_parallel3_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_parallel_compressed_SOURCES_DIST = \ f90tst_parallel_compressed.F90 @TEST_PARALLEL_TRUE@am_f90tst_parallel_compressed_OBJECTS = \ @TEST_PARALLEL_TRUE@ f90tst_parallel_compressed.$(OBJEXT) f90tst_parallel_compressed_OBJECTS = \ $(am_f90tst_parallel_compressed_OBJECTS) f90tst_parallel_compressed_LDADD = $(LDADD) f90tst_parallel_compressed_DEPENDENCIES = \ ${top_builddir}/fortran/libnetcdff.la am__f90tst_parallel_fill_SOURCES_DIST = f90tst_parallel_fill.F90 @TEST_PARALLEL_TRUE@am_f90tst_parallel_fill_OBJECTS = \ @TEST_PARALLEL_TRUE@ f90tst_parallel_fill.$(OBJEXT) f90tst_parallel_fill_OBJECTS = $(am_f90tst_parallel_fill_OBJECTS) f90tst_parallel_fill_LDADD = $(LDADD) f90tst_parallel_fill_DEPENDENCIES = \ ${top_builddir}/fortran/libnetcdff.la am_f90tst_path_OBJECTS = f90tst_path.$(OBJEXT) f90tst_path_OBJECTS = $(am_f90tst_path_OBJECTS) f90tst_path_LDADD = $(LDADD) f90tst_path_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_rengrps_OBJECTS = f90tst_rengrps.$(OBJEXT) f90tst_rengrps_OBJECTS = $(am_f90tst_rengrps_OBJECTS) f90tst_rengrps_LDADD = $(LDADD) f90tst_rengrps_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_types_OBJECTS = f90tst_types.$(OBJEXT) f90tst_types_OBJECTS = $(am_f90tst_types_OBJECTS) f90tst_types_LDADD = $(LDADD) f90tst_types_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_types2_OBJECTS = f90tst_types2.$(OBJEXT) f90tst_types2_OBJECTS = $(am_f90tst_types2_OBJECTS) f90tst_types2_LDADD = $(LDADD) f90tst_types2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__f90tst_var_szip_SOURCES_DIST = f90tst_var_szip.F90 @TEST_SZIP_WRITE_TRUE@am_f90tst_var_szip_OBJECTS = \ @TEST_SZIP_WRITE_TRUE@ f90tst_var_szip.$(OBJEXT) f90tst_var_szip_OBJECTS = $(am_f90tst_var_szip_OBJECTS) f90tst_var_szip_LDADD = $(LDADD) f90tst_var_szip_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_vars_OBJECTS = f90tst_vars.$(OBJEXT) f90tst_vars_OBJECTS = $(am_f90tst_vars_OBJECTS) f90tst_vars_LDADD = $(LDADD) f90tst_vars_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_vars2_OBJECTS = f90tst_vars2.$(OBJEXT) f90tst_vars2_OBJECTS = $(am_f90tst_vars2_OBJECTS) f90tst_vars2_LDADD = $(LDADD) f90tst_vars2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_vars3_OBJECTS = f90tst_vars3.$(OBJEXT) f90tst_vars3_OBJECTS = $(am_f90tst_vars3_OBJECTS) f90tst_vars3_LDADD = $(LDADD) f90tst_vars3_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_vars4_OBJECTS = f90tst_vars4.$(OBJEXT) f90tst_vars4_OBJECTS = $(am_f90tst_vars4_OBJECTS) f90tst_vars4_LDADD = $(LDADD) f90tst_vars4_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_vars5_OBJECTS = f90tst_vars5.$(OBJEXT) f90tst_vars5_OBJECTS = $(am_f90tst_vars5_OBJECTS) f90tst_vars5_LDADD = $(LDADD) f90tst_vars5_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_vars_vlen_OBJECTS = f90tst_vars_vlen.$(OBJEXT) f90tst_vars_vlen_OBJECTS = $(am_f90tst_vars_vlen_OBJECTS) f90tst_vars_vlen_LDADD = $(LDADD) f90tst_vars_vlen_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_f90tst_zstandard_OBJECTS = f90tst_zstandard.$(OBJEXT) f90tst_zstandard_OBJECTS = $(am_f90tst_zstandard_OBJECTS) f90tst_zstandard_LDADD = $(LDADD) f90tst_zstandard_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(FC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_FCFLAGS) $(FCFLAGS) AM_V_PPFC = $(am__v_PPFC_@AM_V@) am__v_PPFC_ = $(am__v_PPFC_@AM_DEFAULT_V@) am__v_PPFC_0 = @echo " PPFC " $@; am__v_PPFC_1 = FCLD = $(FC) FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_FCLD = $(am__v_FCLD_@AM_V@) am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) am__v_FCLD_0 = @echo " FCLD " $@; am__v_FCLD_1 = SOURCES = $(f90tst_att_SOURCES) $(f90tst_fill_SOURCES) \ $(f90tst_fill2_SOURCES) $(f90tst_flarge_SOURCES) \ $(f90tst_grps_SOURCES) $(f90tst_io_SOURCES) \ $(f90tst_nc4_SOURCES) $(f90tst_nc4_par_SOURCES) \ $(f90tst_parallel_SOURCES) $(f90tst_parallel2_SOURCES) \ $(f90tst_parallel3_SOURCES) \ $(f90tst_parallel_compressed_SOURCES) \ $(f90tst_parallel_fill_SOURCES) $(f90tst_path_SOURCES) \ $(f90tst_rengrps_SOURCES) $(f90tst_types_SOURCES) \ $(f90tst_types2_SOURCES) $(f90tst_var_szip_SOURCES) \ $(f90tst_vars_SOURCES) $(f90tst_vars2_SOURCES) \ $(f90tst_vars3_SOURCES) $(f90tst_vars4_SOURCES) \ $(f90tst_vars5_SOURCES) $(f90tst_vars_vlen_SOURCES) \ $(f90tst_zstandard_SOURCES) DIST_SOURCES = $(f90tst_att_SOURCES) $(f90tst_fill_SOURCES) \ $(f90tst_fill2_SOURCES) $(am__f90tst_flarge_SOURCES_DIST) \ $(f90tst_grps_SOURCES) $(am__f90tst_io_SOURCES_DIST) \ $(f90tst_nc4_SOURCES) $(am__f90tst_nc4_par_SOURCES_DIST) \ $(am__f90tst_parallel_SOURCES_DIST) \ $(am__f90tst_parallel2_SOURCES_DIST) \ $(am__f90tst_parallel3_SOURCES_DIST) \ $(am__f90tst_parallel_compressed_SOURCES_DIST) \ $(am__f90tst_parallel_fill_SOURCES_DIST) \ $(f90tst_path_SOURCES) $(f90tst_rengrps_SOURCES) \ $(f90tst_types_SOURCES) $(f90tst_types2_SOURCES) \ $(am__f90tst_var_szip_SOURCES_DIST) $(f90tst_vars_SOURCES) \ $(f90tst_vars2_SOURCES) $(f90tst_vars3_SOURCES) \ $(f90tst_vars4_SOURCES) $(f90tst_vars5_SOURCES) \ $(f90tst_vars_vlen_SOURCES) $(f90tst_zstandard_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__extra_recursive_targets = check-valgrind-recursive \ check-valgrind-memcheck-recursive \ check-valgrind-helgrind-recursive check-valgrind-drd-recursive \ check-valgrind-sgcheck-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ $$am__collect_skipped_logs \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer-defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(IGNORE_SKIPPED_LOGS)'; then \ am__collect_skipped_logs='--collect-skipped-logs no'; \ else \ am__collect_skipped_logs=''; \ fi; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ref_att.nc \ $(srcdir)/run_f90_par_test.sh.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INTERNAL_DOCS = @BUILD_INTERNAL_DOCS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_VALGRIND_drd = @ENABLE_VALGRIND_drd@ ENABLE_VALGRIND_helgrind = @ENABLE_VALGRIND_helgrind@ ENABLE_VALGRIND_memcheck = @ENABLE_VALGRIND_memcheck@ ENABLE_VALGRIND_sgcheck = @ENABLE_VALGRIND_sgcheck@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_f90 = @FCFLAGS_f90@ FC_VERSION = @FC_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAS_CDF5 = @HAS_CDF5@ HAS_DAP = @HAS_DAP@ HAS_F03 = @HAS_F03@ HAS_F90 = @HAS_F90@ HAS_LOGGING = @HAS_LOGGING@ HAS_NC2 = @HAS_NC2@ HAS_NC4 = @HAS_NC4@ HAS_NC4_PARALLEL = @HAS_NC4_PARALLEL@ HAS_PARALLEL = @HAS_PARALLEL@ HAS_PNETCDF = @HAS_PNETCDF@ HAS_QUANTIZE = @HAS_QUANTIZE@ HAS_SZIP_WRITE = @HAS_SZIP_WRITE@ HAS_ZSTD = @HAS_ZSTD@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOD_FLAG = @MOD_FLAG@ MPIEXEC = @MPIEXEC@ NC_FLIBS = @NC_FLIBS@ NC_LIBS = @NC_LIBS@ NF_HDF5_PLUGIN_PATH = @NF_HDF5_PLUGIN_PATH@ NM = @NM@ NMEDIT = @NMEDIT@ NMFLAGS = @NMFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VALGRIND = @VALGRIND@ VALGRIND_ENABLED = @VALGRIND_ENABLED@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ enable_shared = @enable_shared@ enable_static = @enable_static@ exec_prefix = @exec_prefix@ fmoddir = @fmoddir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ valgrind_enabled_tools = @valgrind_enabled_tools@ valgrind_tools = @valgrind_tools@ # Find the .mod files for netcdf-4. AM_FCFLAGS = -I$(top_builddir)/fortran # All tests need to link to fortran library. LDADD = ${top_builddir}/fortran/libnetcdff.la # tst_f90_nc4 NC4_F90_TESTS = f90tst_vars f90tst_vars_vlen f90tst_grps f90tst_fill \ f90tst_fill2 f90tst_vars2 f90tst_vars3 f90tst_vars4 \ f90tst_path f90tst_rengrps f90tst_nc4 f90tst_types \ f90tst_types2 f90tst_zstandard f90tst_att $(am__append_1) f90tst_vars_SOURCES = f90tst_vars.F90 f90tst_vars_vlen_SOURCES = f90tst_vars_vlen.F90 f90tst_grps_SOURCES = f90tst_grps.F90 f90tst_fill_SOURCES = f90tst_fill.F90 f90tst_fill2_SOURCES = f90tst_fill2.F90 f90tst_vars2_SOURCES = f90tst_vars2.F90 f90tst_vars3_SOURCES = f90tst_vars3.F90 f90tst_vars4_SOURCES = f90tst_vars4.F90 f90tst_vars5_SOURCES = f90tst_vars5.F90 f90tst_att_SOURCES = f90tst_att.F90 f90tst_path_SOURCES = f90tst_path.F90 f90tst_rengrps_SOURCES = f90tst_rengrps.F90 f90tst_nc4_SOURCES = f90tst_nc4.F90 f90tst_types_SOURCES = f90tst_types.F90 f90tst_types2_SOURCES = f90tst_types2.F90 f90tst_zstandard_SOURCES = f90tst_zstandard.F90 @LARGE_FILE_TESTS_TRUE@f90tst_flarge_SOURCES = f90tst_flarge.F90 @BUILD_BENCHMARKS_TRUE@f90tst_io_SOURCES = f90tst_io.F90 # These files are .F90 instead of .F90 because they use ifdefs. @TEST_PARALLEL_TRUE@f90tst_parallel_SOURCES = f90tst_parallel.F90 @TEST_PARALLEL_TRUE@f90tst_parallel2_SOURCES = f90tst_parallel2.F90 @TEST_PARALLEL_TRUE@f90tst_parallel3_SOURCES = f90tst_parallel3.F90 @TEST_PARALLEL_TRUE@f90tst_nc4_par_SOURCES = f90tst_nc4_par.F90 @TEST_PARALLEL_TRUE@f90tst_parallel_fill_SOURCES = f90tst_parallel_fill.F90 @TEST_PARALLEL_TRUE@f90tst_parallel_compressed_SOURCES = f90tst_parallel_compressed.F90 @TEST_SZIP_WRITE_TRUE@f90tst_var_szip_SOURCES = f90tst_var_szip.F90 EXTRA_DIST = CMakeLists.txt f90tst_flarge.F90 \ run_f90_par_test.sh.in \ ref_att.cdl ref_att.nc # Cleaning up files created during the testing. CLEANFILES = f90tst_*.nc fort.* # This file gets copied to build dir by configure. DISTCLEANFILES = att.nc all: all-am .SUFFIXES: .SUFFIXES: .F90 .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign nf03_test4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign nf03_test4/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): run_f90_par_test.sh: $(top_builddir)/config.status $(srcdir)/run_f90_par_test.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkPROGRAMS: $(am__rm_f) $(check_PROGRAMS) test -z "$(EXEEXT)" || $(am__rm_f) $(check_PROGRAMS:$(EXEEXT)=) f90tst_att$(EXEEXT): $(f90tst_att_OBJECTS) $(f90tst_att_DEPENDENCIES) $(EXTRA_f90tst_att_DEPENDENCIES) @rm -f f90tst_att$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_att_OBJECTS) $(f90tst_att_LDADD) $(LIBS) f90tst_fill$(EXEEXT): $(f90tst_fill_OBJECTS) $(f90tst_fill_DEPENDENCIES) $(EXTRA_f90tst_fill_DEPENDENCIES) @rm -f f90tst_fill$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_fill_OBJECTS) $(f90tst_fill_LDADD) $(LIBS) f90tst_fill2$(EXEEXT): $(f90tst_fill2_OBJECTS) $(f90tst_fill2_DEPENDENCIES) $(EXTRA_f90tst_fill2_DEPENDENCIES) @rm -f f90tst_fill2$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_fill2_OBJECTS) $(f90tst_fill2_LDADD) $(LIBS) f90tst_flarge$(EXEEXT): $(f90tst_flarge_OBJECTS) $(f90tst_flarge_DEPENDENCIES) $(EXTRA_f90tst_flarge_DEPENDENCIES) @rm -f f90tst_flarge$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_flarge_OBJECTS) $(f90tst_flarge_LDADD) $(LIBS) f90tst_grps$(EXEEXT): $(f90tst_grps_OBJECTS) $(f90tst_grps_DEPENDENCIES) $(EXTRA_f90tst_grps_DEPENDENCIES) @rm -f f90tst_grps$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_grps_OBJECTS) $(f90tst_grps_LDADD) $(LIBS) f90tst_io$(EXEEXT): $(f90tst_io_OBJECTS) $(f90tst_io_DEPENDENCIES) $(EXTRA_f90tst_io_DEPENDENCIES) @rm -f f90tst_io$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_io_OBJECTS) $(f90tst_io_LDADD) $(LIBS) f90tst_nc4$(EXEEXT): $(f90tst_nc4_OBJECTS) $(f90tst_nc4_DEPENDENCIES) $(EXTRA_f90tst_nc4_DEPENDENCIES) @rm -f f90tst_nc4$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_nc4_OBJECTS) $(f90tst_nc4_LDADD) $(LIBS) f90tst_nc4_par$(EXEEXT): $(f90tst_nc4_par_OBJECTS) $(f90tst_nc4_par_DEPENDENCIES) $(EXTRA_f90tst_nc4_par_DEPENDENCIES) @rm -f f90tst_nc4_par$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_nc4_par_OBJECTS) $(f90tst_nc4_par_LDADD) $(LIBS) f90tst_parallel$(EXEEXT): $(f90tst_parallel_OBJECTS) $(f90tst_parallel_DEPENDENCIES) $(EXTRA_f90tst_parallel_DEPENDENCIES) @rm -f f90tst_parallel$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_parallel_OBJECTS) $(f90tst_parallel_LDADD) $(LIBS) f90tst_parallel2$(EXEEXT): $(f90tst_parallel2_OBJECTS) $(f90tst_parallel2_DEPENDENCIES) $(EXTRA_f90tst_parallel2_DEPENDENCIES) @rm -f f90tst_parallel2$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_parallel2_OBJECTS) $(f90tst_parallel2_LDADD) $(LIBS) f90tst_parallel3$(EXEEXT): $(f90tst_parallel3_OBJECTS) $(f90tst_parallel3_DEPENDENCIES) $(EXTRA_f90tst_parallel3_DEPENDENCIES) @rm -f f90tst_parallel3$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_parallel3_OBJECTS) $(f90tst_parallel3_LDADD) $(LIBS) f90tst_parallel_compressed$(EXEEXT): $(f90tst_parallel_compressed_OBJECTS) $(f90tst_parallel_compressed_DEPENDENCIES) $(EXTRA_f90tst_parallel_compressed_DEPENDENCIES) @rm -f f90tst_parallel_compressed$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_parallel_compressed_OBJECTS) $(f90tst_parallel_compressed_LDADD) $(LIBS) f90tst_parallel_fill$(EXEEXT): $(f90tst_parallel_fill_OBJECTS) $(f90tst_parallel_fill_DEPENDENCIES) $(EXTRA_f90tst_parallel_fill_DEPENDENCIES) @rm -f f90tst_parallel_fill$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_parallel_fill_OBJECTS) $(f90tst_parallel_fill_LDADD) $(LIBS) f90tst_path$(EXEEXT): $(f90tst_path_OBJECTS) $(f90tst_path_DEPENDENCIES) $(EXTRA_f90tst_path_DEPENDENCIES) @rm -f f90tst_path$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_path_OBJECTS) $(f90tst_path_LDADD) $(LIBS) f90tst_rengrps$(EXEEXT): $(f90tst_rengrps_OBJECTS) $(f90tst_rengrps_DEPENDENCIES) $(EXTRA_f90tst_rengrps_DEPENDENCIES) @rm -f f90tst_rengrps$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_rengrps_OBJECTS) $(f90tst_rengrps_LDADD) $(LIBS) f90tst_types$(EXEEXT): $(f90tst_types_OBJECTS) $(f90tst_types_DEPENDENCIES) $(EXTRA_f90tst_types_DEPENDENCIES) @rm -f f90tst_types$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_types_OBJECTS) $(f90tst_types_LDADD) $(LIBS) f90tst_types2$(EXEEXT): $(f90tst_types2_OBJECTS) $(f90tst_types2_DEPENDENCIES) $(EXTRA_f90tst_types2_DEPENDENCIES) @rm -f f90tst_types2$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_types2_OBJECTS) $(f90tst_types2_LDADD) $(LIBS) f90tst_var_szip$(EXEEXT): $(f90tst_var_szip_OBJECTS) $(f90tst_var_szip_DEPENDENCIES) $(EXTRA_f90tst_var_szip_DEPENDENCIES) @rm -f f90tst_var_szip$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_var_szip_OBJECTS) $(f90tst_var_szip_LDADD) $(LIBS) f90tst_vars$(EXEEXT): $(f90tst_vars_OBJECTS) $(f90tst_vars_DEPENDENCIES) $(EXTRA_f90tst_vars_DEPENDENCIES) @rm -f f90tst_vars$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_vars_OBJECTS) $(f90tst_vars_LDADD) $(LIBS) f90tst_vars2$(EXEEXT): $(f90tst_vars2_OBJECTS) $(f90tst_vars2_DEPENDENCIES) $(EXTRA_f90tst_vars2_DEPENDENCIES) @rm -f f90tst_vars2$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_vars2_OBJECTS) $(f90tst_vars2_LDADD) $(LIBS) f90tst_vars3$(EXEEXT): $(f90tst_vars3_OBJECTS) $(f90tst_vars3_DEPENDENCIES) $(EXTRA_f90tst_vars3_DEPENDENCIES) @rm -f f90tst_vars3$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_vars3_OBJECTS) $(f90tst_vars3_LDADD) $(LIBS) f90tst_vars4$(EXEEXT): $(f90tst_vars4_OBJECTS) $(f90tst_vars4_DEPENDENCIES) $(EXTRA_f90tst_vars4_DEPENDENCIES) @rm -f f90tst_vars4$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_vars4_OBJECTS) $(f90tst_vars4_LDADD) $(LIBS) f90tst_vars5$(EXEEXT): $(f90tst_vars5_OBJECTS) $(f90tst_vars5_DEPENDENCIES) $(EXTRA_f90tst_vars5_DEPENDENCIES) @rm -f f90tst_vars5$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_vars5_OBJECTS) $(f90tst_vars5_LDADD) $(LIBS) f90tst_vars_vlen$(EXEEXT): $(f90tst_vars_vlen_OBJECTS) $(f90tst_vars_vlen_DEPENDENCIES) $(EXTRA_f90tst_vars_vlen_DEPENDENCIES) @rm -f f90tst_vars_vlen$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_vars_vlen_OBJECTS) $(f90tst_vars_vlen_LDADD) $(LIBS) f90tst_zstandard$(EXEEXT): $(f90tst_zstandard_OBJECTS) $(f90tst_zstandard_DEPENDENCIES) $(EXTRA_f90tst_zstandard_DEPENDENCIES) @rm -f f90tst_zstandard$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(f90tst_zstandard_OBJECTS) $(f90tst_zstandard_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .F90.o: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $< .F90.obj: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .F90.lo: $(AM_V_PPFC)$(LTPPFCCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs check-valgrind-local: check-valgrind-memcheck-local: check-valgrind-helgrind-local: check-valgrind-drd-local: check-valgrind-sgcheck-local: ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ output_system_information () \ { \ echo; \ { uname -a | $(AWK) '{ \ printf "System information (uname -a):"; \ for (i = 1; i < NF; ++i) \ { \ if (i != 2) \ printf " %s", $$i; \ } \ printf "\n"; \ }'; } 2>&1; \ if test -r /etc/os-release; then \ echo "Distribution information (/etc/os-release):"; \ sed 8q /etc/os-release; \ elif test -r /etc/issue; then \ echo "Distribution information (/etc/issue):"; \ cat /etc/issue; \ fi; \ }; \ please_report () \ { \ echo "Some test(s) failed. Please report this to $(PACKAGE_BUGREPORT),"; \ echo "together with the test-suite.log file (gzipped) and your system"; \ echo "information. Thanks."; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ output_system_information; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG) for debugging.$${std}";\ if test -n "$(PACKAGE_BUGREPORT)"; then \ please_report | sed -e "s/^/$${col}/" -e s/'$$'/"$${std}"/; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @$(am__rm_f) $(RECHECK_LOGS) @$(am__rm_f) $(RECHECK_LOGS:.log=.trs) @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? f90tst_vars.log: f90tst_vars$(EXEEXT) @p='f90tst_vars$(EXEEXT)'; \ b='f90tst_vars'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_vars_vlen.log: f90tst_vars_vlen$(EXEEXT) @p='f90tst_vars_vlen$(EXEEXT)'; \ b='f90tst_vars_vlen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_grps.log: f90tst_grps$(EXEEXT) @p='f90tst_grps$(EXEEXT)'; \ b='f90tst_grps'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_fill.log: f90tst_fill$(EXEEXT) @p='f90tst_fill$(EXEEXT)'; \ b='f90tst_fill'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_fill2.log: f90tst_fill2$(EXEEXT) @p='f90tst_fill2$(EXEEXT)'; \ b='f90tst_fill2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_vars2.log: f90tst_vars2$(EXEEXT) @p='f90tst_vars2$(EXEEXT)'; \ b='f90tst_vars2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_vars3.log: f90tst_vars3$(EXEEXT) @p='f90tst_vars3$(EXEEXT)'; \ b='f90tst_vars3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_vars4.log: f90tst_vars4$(EXEEXT) @p='f90tst_vars4$(EXEEXT)'; \ b='f90tst_vars4'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_path.log: f90tst_path$(EXEEXT) @p='f90tst_path$(EXEEXT)'; \ b='f90tst_path'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_rengrps.log: f90tst_rengrps$(EXEEXT) @p='f90tst_rengrps$(EXEEXT)'; \ b='f90tst_rengrps'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_nc4.log: f90tst_nc4$(EXEEXT) @p='f90tst_nc4$(EXEEXT)'; \ b='f90tst_nc4'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_types.log: f90tst_types$(EXEEXT) @p='f90tst_types$(EXEEXT)'; \ b='f90tst_types'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_types2.log: f90tst_types2$(EXEEXT) @p='f90tst_types2$(EXEEXT)'; \ b='f90tst_types2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_zstandard.log: f90tst_zstandard$(EXEEXT) @p='f90tst_zstandard$(EXEEXT)'; \ b='f90tst_zstandard'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_att.log: f90tst_att$(EXEEXT) @p='f90tst_att$(EXEEXT)'; \ b='f90tst_att'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_vars5.log: f90tst_vars5$(EXEEXT) @p='f90tst_vars5$(EXEEXT)'; \ b='f90tst_vars5'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_flarge.log: f90tst_flarge$(EXEEXT) @p='f90tst_flarge$(EXEEXT)'; \ b='f90tst_flarge'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_io.log: f90tst_io$(EXEEXT) @p='f90tst_io$(EXEEXT)'; \ b='f90tst_io'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run_f90_par_test.sh.log: run_f90_par_test.sh @p='run_f90_par_test.sh'; \ b='run_f90_par_test.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f90tst_var_szip.log: f90tst_var_szip$(EXEEXT) @p='f90tst_var_szip$(EXEEXT)'; \ b='f90tst_var_szip'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -$(am__rm_f) $(TEST_LOGS) -$(am__rm_f) $(TEST_LOGS:.log=.trs) -$(am__rm_f) $(TEST_SUITE_LOG) clean-generic: -$(am__rm_f) $(CLEANFILES) distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) -$(am__rm_f) $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." check-valgrind: check-valgrind-am check-valgrind-am: check-valgrind-local check-valgrind-drd: check-valgrind-drd-am check-valgrind-drd-am: check-valgrind-drd-local check-valgrind-helgrind: check-valgrind-helgrind-am check-valgrind-helgrind-am: check-valgrind-helgrind-local check-valgrind-memcheck: check-valgrind-memcheck-am check-valgrind-memcheck-am: check-valgrind-memcheck-local check-valgrind-sgcheck: check-valgrind-sgcheck-am check-valgrind-sgcheck-am: check-valgrind-sgcheck-local clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am \ check-valgrind-am check-valgrind-drd-am \ check-valgrind-drd-local check-valgrind-helgrind-am \ check-valgrind-helgrind-local check-valgrind-local \ check-valgrind-memcheck-am check-valgrind-memcheck-local \ check-valgrind-sgcheck-am check-valgrind-sgcheck-local clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # If valgrind is present on this machine, this will enable # check-valgrind target, which runs all tests with valgrind. @VALGRIND_CHECK_RULES@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% netcdf-fortran-4.6.3+ds/nf03_test4/Makefile.am0000664000175000017500000000556615205004070021160 0ustar alastairalastair# This is a automake file, part of Unidata's netCDF package. # Copyright 2019, see the COPYRIGHT file for more information. # This file builds and runs the tests for netCDF-4 functions in the # F90 API. # Ed Hartnett, 2019 # Find the .mod files for netcdf-4. AM_FCFLAGS = -I$(top_builddir)/fortran # All tests need to link to fortran library. LDADD = ${top_builddir}/fortran/libnetcdff.la # tst_f90_nc4 NC4_F90_TESTS = f90tst_vars f90tst_vars_vlen f90tst_grps f90tst_fill \ f90tst_fill2 f90tst_vars2 f90tst_vars3 f90tst_vars4 f90tst_path \ f90tst_rengrps f90tst_nc4 f90tst_types f90tst_types2 f90tst_zstandard \ f90tst_att if TEST_QUANTIZE NC4_F90_TESTS += f90tst_vars5 endif check_PROGRAMS = $(NC4_F90_TESTS) TESTS = $(NC4_F90_TESTS) f90tst_vars_SOURCES = f90tst_vars.F90 f90tst_vars_vlen_SOURCES = f90tst_vars_vlen.F90 f90tst_grps_SOURCES = f90tst_grps.F90 f90tst_fill_SOURCES = f90tst_fill.F90 f90tst_fill2_SOURCES = f90tst_fill2.F90 f90tst_vars2_SOURCES = f90tst_vars2.F90 f90tst_vars3_SOURCES = f90tst_vars3.F90 f90tst_vars4_SOURCES = f90tst_vars4.F90 f90tst_vars5_SOURCES = f90tst_vars5.F90 f90tst_att_SOURCES = f90tst_att.F90 f90tst_path_SOURCES = f90tst_path.F90 f90tst_rengrps_SOURCES = f90tst_rengrps.F90 f90tst_nc4_SOURCES = f90tst_nc4.F90 f90tst_types_SOURCES = f90tst_types.F90 f90tst_types2_SOURCES = f90tst_types2.F90 f90tst_zstandard_SOURCES = f90tst_zstandard.F90 # This is the netCDF-4 F90 large file test. if LARGE_FILE_TESTS check_PROGRAMS += f90tst_flarge TESTS += f90tst_flarge f90tst_flarge_SOURCES = f90tst_flarge.F90 endif # LARGE_FILE_TESTS # This is an f90 benchmark. if BUILD_BENCHMARKS check_PROGRAMS += f90tst_io TESTS += f90tst_io f90tst_io_SOURCES = f90tst_io.F90 endif #BUILD_BENCHMARKS # Test parallel I/O. if TEST_PARALLEL check_PROGRAMS += f90tst_parallel f90tst_parallel2 f90tst_parallel3 \ f90tst_nc4_par f90tst_parallel_fill f90tst_parallel_compressed TESTS += run_f90_par_test.sh # These files are .F90 instead of .F90 because they use ifdefs. f90tst_parallel_SOURCES = f90tst_parallel.F90 f90tst_parallel2_SOURCES = f90tst_parallel2.F90 f90tst_parallel3_SOURCES = f90tst_parallel3.F90 f90tst_nc4_par_SOURCES = f90tst_nc4_par.F90 f90tst_parallel_fill_SOURCES = f90tst_parallel_fill.F90 f90tst_parallel_compressed_SOURCES = f90tst_parallel_compressed.F90 endif # TEST_PARALLEL # Test szip if write capability is present in C library. if TEST_SZIP_WRITE check_PROGRAMS += f90tst_var_szip TESTS += f90tst_var_szip f90tst_var_szip_SOURCES = f90tst_var_szip.F90 endif # TEST_SZIP_WRITE # If valgrind is present on this machine, this will enable # check-valgrind target, which runs all tests with valgrind. @VALGRIND_CHECK_RULES@ EXTRA_DIST = CMakeLists.txt f90tst_flarge.F90 \ run_f90_par_test.sh.in \ ref_att.cdl ref_att.nc # Cleaning up files created during the testing. CLEANFILES = f90tst_*.nc fort.* # This file gets copied to build dir by configure. DISTCLEANFILES = att.nc netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_nc4_par.F900000664000175000017500000000453215205004070022133 0ustar alastairalastair! This parallel test was contributed by Jim Edwards at UCAR. Thanks Jim! program f90tst_nc4_par use netcdf use mpi implicit none integer :: ierr, my_task, nprocs, nmode call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, my_task, ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierr) if(nprocs/=8)then stop 'requires 8 tasks' end if #ifdef NF_HAS_PNETCDF nmode = IOR(nf90_clobber, nf90_mpiio) call parallel_io(nmode) #endif #ifdef NF_HAS_PARALLEL4 nmode = ior(NF90_CLOBBER, NF90_NETCDF4) nmode = IOR(nmode, nf90_mpiio) call parallel_io(nmode) #endif call MPI_Finalize(ierr) contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine handle_err subroutine parallel_io(nmode) use netcdf use mpi implicit none character (len = *), parameter :: FILE_NAME = "f90tst_nc4_par.nc" integer :: nmode, fill_mode, ierr, fh, my_task, i, varid integer :: dimid(3), start(3), count(3) real :: f(3) call MPI_COMM_RANK(MPI_COMM_WORLD, my_task, ierr) call handle_err(nf90_create(FILE_NAME, nmode, fh, & comm = MPI_COMM_WORLD, info = MPI_INFO_NULL)) call handle_err(nf90_set_fill(fh, NF90_NOFILL, fill_mode)) call handle_err(nf90_def_dim(fh, 'dim1', 6, dimid(1))) call handle_err(nf90_def_dim(fh, 'dim2', 4, dimid(2))) call handle_err(nf90_def_dim(fh, 'dim3', 1, dimid(3))) call handle_err(nf90_def_var(fh, 'var1', NF90_DOUBLE, dimid, varid)) call handle_err(nf90_enddef(fh)) do i=1,3 f(i) = my_task*3+i end do count = (/3,1,1/) start(1) = mod(my_task,2)*3+1 start(2) = my_task/2+1 start(3) = 1 print *,my_task, start, count, f call handle_err(nf90_put_var(fh, varid, f,start=start,count=count)) call handle_err(nf90_close(fh)) ! Reopen the file and check it. call handle_err(nf90_open(FILE_NAME, NF90_MPIIO, fh, & comm = MPI_COMM_WORLD, info = MPI_INFO_NULL)) call handle_err(nf90_get_var(fh, varid, f, start=start, count=count)) do i=1,3 if (f(i) .ne. my_task*3+i) stop 3 end do call handle_err(nf90_close(fh)) end subroutine parallel_io end program f90tst_nc4_par netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_zstandard.F900000664000175000017500000001502415205004070022575 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2022 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! This program tests zstandard compression. ! Ed Hartnett 7/6/22 program f90tst_zstandard use typeSizes use netcdf implicit none include "netcdf.inc" ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_zstandard.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: NDIM1 = 1 integer, parameter :: DIM_LEN_5 = 5 integer start(NDIM1), count(NDIM1) real real_data(DIM_LEN_5) real*8 double_data(DIM_LEN_5) ! We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, varid3, varid4, varid5, dimids(NDIM1) integer :: chunksizes(NDIM1), chunksizes_in(NDIM1) integer :: x_dimid, y_dimid integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer, parameter :: DEFLATE_LEVEL = 4 integer (kind = EightByteInt), parameter :: BAM_BAM_VALUE = 2147483648_EightByteInt character (len = *), parameter :: VAR1_NAME = "Fred_Flintstone" character (len = *), parameter :: VAR2_NAME = "Barney_Rubble" integer :: ierr ! Information read back from the file to check correctness. integer :: varid1_in, varid2_in, varid3_in, varid4_in, varid5_in integer :: xtype_in, ndims_in, natts_in, dimids_in(NDIM1) character (len = nf90_max_name) :: name_in integer :: endianness_in, deflate_level_in logical :: shuffle_in, fletcher32_in, contiguous_in integer (kind = EightByteInt) :: bam_bam_in integer :: quantize_mode_in, nsd_in integer :: zstandard_in, zstandard_level_in real real_data_in(DIM_LEN_5) real*8 double_data_in(DIM_LEN_5) real diff real, parameter :: EPSILON = .01 integer :: m, cflags, s logical :: shuffle print *, '' print *,'*** Testing use of zstandard feature on netCDF-4 vars from Fortran 90.' ! Create some pretend data. real_data(1) = 1.11111111 real_data(2) = 1.0 real_data(3) = 9.99999999 real_data(4) = 12345.67 real_data(5) = .1234567 double_data(1) = 1.1111111 double_data(2) = 1.0 double_data(3) = 9.999999999 double_data(4) = 1234567890.12345 double_data(5) = 1234567890 ! Check without and with shuffle. do s = 0, 1 shuffle = .false. ! Check with and without nf90_classic_model flag. cflags = ior(nf90_netcdf4, nf90_clobber) do m = 1, 2 if (m .eq. 2) cflags = ior(cflags, nf90_classic_model) ! Create the netCDF file. call check(nf90_create(FILE_NAME, cflags, ncid)) ! Define the dimension. call check(nf90_def_dim(ncid, "x", DIM_LEN_5, x_dimid)) dimids = (/ x_dimid /) ! Define some variables. #ifdef ENABLE_ZSTD if (s .eq. 1) shuffle = .true. call check(nf90_def_var(ncid, VAR1_NAME, NF90_FLOAT, dimids, varid1, & zstandard_level = 4, shuffle = shuffle)) #else ! This will fail because we don't have zstandard. But the var will ! be created, only without zstandard compression. ierr = nf90_def_var(ncid, VAR1_NAME, NF90_FLOAT, dimids, varid1, & zstandard_level = 4) if (ierr .ne. nf90_enotbuilt) stop 55 #endif call check(nf90_def_var(ncid, VAR2_NAME, NF90_DOUBLE, dimids, varid2)) call check(nf90_enddef(ncid)) ! Write the pretend data to the file. call check(nf90_put_var(ncid, varid1, real_data)) call check(nf90_put_var(ncid, varid2, double_data)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 1 .or. nvars /= 2 .or. ngatts /= 0 .or. unlimdimid /= -1) stop 200 if (m .eq. 1 .and. file_format /= nf90_format_netcdf4) stop 200 if (m .eq. 2 .and. file_format /= nf90_format_netcdf4_classic) stop 200 ! Get varids. call check(nf90_inq_varid(ncid, VAR1_NAME, varid1_in)) call check(nf90_inq_varid(ncid, VAR2_NAME, varid2_in)) ! Check variable 1. call check(nf90_inquire_variable(ncid, varid1_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, chunksizes = chunksizes_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in, & zstandard = zstandard_in, zstandard_level = zstandard_level_in)) #ifdef ENABLE_ZSTD if (zstandard_in .eq. 0 .or. zstandard_level_in .ne. 4) stop 4 #else if (zstandard_in .ne. 0) stop 4 #endif if (natts_in .ne. 0) stop 301 if (name_in .ne. VAR1_NAME .or. xtype_in .ne. NF90_FLOAT .or. ndims_in .ne. NDIM1 .or. & dimids_in(1) .ne. dimids(1)) stop 302 ! Check variable 2. call check(nf90_inquire_variable(ncid, varid2_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in, & quantize_mode = quantize_mode_in, nsd = nsd_in, zstandard = zstandard_in, & zstandard_level = zstandard_level_in)) if (name_in .ne. VAR2_NAME .or. xtype_in .ne. NF90_DOUBLE .or. ndims_in .ne. NDIM1 .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1)) stop 6 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 7 if (quantize_mode_in .ne. 0) stop 303 if (zstandard_in .ne. 0) stop 14 ! Check the data. call check(nf90_get_var(ncid, varid1_in, real_data_in)) call check(nf90_get_var(ncid, varid2_in, double_data_in)) ! Check the data. do x = 1, DIM_LEN_5 diff = abs(real_data_in(x) - real_data(x)) if (diff .gt. EPSILON) stop 23 diff = abs(double_data_in(x) - double_data(x)) if (diff .gt. EPSILON) stop 24 end do ! Close the file. call check(nf90_close(ncid)) end do end do print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_zstandard netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_fill.F900000664000175000017500000001347515205004070021541 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 fill values. ! Russ Rew, 2009 program f90tst_fill use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_fill.nc" integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 16, NY = 16 integer, parameter :: HALF_NX = NX / 2, HALF_NY = NY / 2 integer, parameter :: NUM_VARS = 8 character (len = *), parameter :: var_name(NUM_VARS) = & (/ 'byte ', 'short ', 'int ', 'float ', 'double', 'ubyte ', & 'ushort', 'uint ' /) integer :: ncid, varid(NUM_VARS), dimids(MAX_DIMS) integer :: var_type(NUM_VARS) = (/ nf90_byte, nf90_short, nf90_int, & nf90_float, nf90_double, nf90_ubyte, nf90_ushort, nf90_uint /) integer :: x_dimid, y_dimid integer :: byte_out(HALF_NY, HALF_NX), byte_in(NY, NX) integer :: short_out(HALF_NY, HALF_NX), short_in(NY, NX) integer :: int_out(HALF_NY, HALF_NX), int_in(NY, NX) real :: areal_out(HALF_NY, HALF_NX), areal_in(NY, NX) real :: double_out(HALF_NY, HALF_NX), double_in(NY, NX) integer :: ubyte_out(HALF_NY, HALF_NX), ubyte_in(NY, NX) integer :: ushort_out(HALF_NY, HALF_NX), ushort_in(NY, NX) integer (kind = EightByteInt) :: uint_out(HALF_NY, HALF_NX), uint_in(NY, NX) integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y, v integer :: start(MAX_DIMS), count_out(MAX_DIMS), count_in(MAX_DIMS) print * print *, '*** Testing netCDF-4 fill values.' ! Create some pretend data. do x = 1, HALF_NX do y = 1, HALF_NY byte_out(y, x) = -1 short_out(y, x) = -2 int_out(y, x) = -4 areal_out(y, x) = 2.5 double_out(y, x) = -4.5 ubyte_out(y, x) = 1 ushort_out(y, x) = 2 uint_out(y, x) = 4 end do end do ! Create the netCDF file. call handle_err(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) ! Define the dimensions. call handle_err(nf90_def_dim(ncid, "x", NX, x_dimid)) call handle_err(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define the variables. do v = 1, NUM_VARS call handle_err(nf90_def_var(ncid, var_name(v), var_type(v), dimids, varid(v))) end do ! Write one-quarter of the data. count_out = (/ HALF_NX, HALF_NY /) start = (/ 1, 1 /) call handle_err(nf90_put_var(ncid, varid(1), byte_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(2), short_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(3), int_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(4), areal_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(5), double_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(6), ubyte_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(7), ushort_out, start = start, count = count_out)) call handle_err(nf90_put_var(ncid, varid(8), uint_out, start = start, count = count_out)) ! Close the file. call handle_err(nf90_close(ncid)) ! Reopen the file. call handle_err(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call handle_err(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= NUM_VARS .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4) stop 2 ! Read all the data. count_in = (/ NX, NY /) call handle_err(nf90_get_var(ncid, varid(1), byte_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(2), short_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(3), int_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(4), areal_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(5), double_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(6), ubyte_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(7), ushort_in, start = start, count = count_in)) call handle_err(nf90_get_var(ncid, varid(8), uint_in, start = start, count = count_in)) ! Check the data. All the data in the first quadrant are fill value. do x = 1, NX do y = 1, NY if ((x .le. HALF_NX) .and. (y .le. HALF_NY)) then if (byte_in(y, x) .ne. -1) stop 13 if (short_in(y, x) .ne. -2) stop 14 if (int_in(y, x) .ne. -4) stop 15 if (areal_in(y, x) .ne. 2.5) stop 16 if (double_in(y, x) .ne. -4.5) stop 17 if (ubyte_in(y, x) .ne. 1) stop 18 if (ushort_in(y, x) .ne. 2) stop 19 if (uint_in(y, x) .ne. 4) stop 20 else if (byte_in(y, x) .ne. nf90_fill_byte) stop 3 if (short_in(y, x) .ne. nf90_fill_short) stop 4 if (int_in(y, x) .ne. nf90_fill_int) stop 5 if (areal_in(y, x) .ne. nf90_fill_real) stop 6 if (double_in(y, x) .ne. nf90_fill_double) stop 7 if (ubyte_in(y, x) .ne. nf90_fill_ubyte) stop 8 if (ushort_in(y, x) .ne. nf90_fill_ushort) stop 9 if (uint_in(y, x) .ne. nf90_fill_uint) stop 10 endif end do end do ! Close the file. call handle_err(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine handle_err(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 99 endif end subroutine handle_err end program f90tst_fill netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_vars2.F900000664000175000017500000001765115205004070021650 0ustar alastairalastair! This is part of the netCDF package. Copyright 2006-2019 ! University Corporation for Atmospheric Research/Unidata. See ! COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! $Id: f90tst_vars2.f90,v 1.7 2010/01/25 21:01:07 ed Exp $ program f90tst_vars2 use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_vars2.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 6, NY = 12 integer :: data_out(NY, NX), data_in(NY, NX) integer :: data_out_1d(NX), data_in_1d(NX) ! We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, varid3, varid4, varid5, dimids(MAX_DIMS) integer :: chunksizes(MAX_DIMS), chunksizes_in(MAX_DIMS) integer :: x_dimid, y_dimid integer :: nvars, ngatts, ndims, unlimdimid, file_format integer :: x, y integer, parameter :: DEFLATE_LEVEL = 4 integer (kind = EightByteInt), parameter :: TOE_SAN_VALUE = 2147483648_EightByteInt character (len = *), parameter :: VAR1_NAME = "Chon-Ji" character (len = *), parameter :: VAR2_NAME = "Tan-Gun" character (len = *), parameter :: VAR3_NAME = "Toe-San" character (len = *), parameter :: VAR4_NAME = "Won-Hyo" character (len = *), parameter :: VAR5_NAME = "Yul-Guk" integer, parameter :: CACHE_SIZE = 8, CACHE_NELEMS = 571 integer, parameter :: CACHE_PREEMPTION = 66 ! Information read back from the file to check correctness. integer :: varid1_in, varid2_in, varid3_in, varid4_in, varid5_in integer :: xtype_in, ndims_in, natts_in, dimids_in(MAX_DIMS) character (len = nf90_max_name) :: name_in integer :: endianness_in, deflate_level_in logical :: shuffle_in, fletcher32_in, contiguous_in integer (kind = EightByteInt) :: toe_san_in integer :: cache_size_in, cache_nelems_in, cache_preemption_in print *, '' print *,'*** Testing definition of netCDF-4 vars from Fortran 90.' ! Create some pretend data. do x = 1, NX do y = 1, NY data_out(y, x) = (x - 1) * NY + (y - 1) end do end do do x = 1, NX data_out_1d(x) = x end do ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid, cache_nelems = CACHE_NELEMS, & cache_size = CACHE_SIZE)) ! Define the dimensions. call check(nf90_def_dim(ncid, "x", NX, x_dimid)) call check(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define some variables. chunksizes = (/ NY, NX /) call check(nf90_def_var(ncid, VAR1_NAME, NF90_INT, dimids, varid1, chunksizes = chunksizes, & shuffle = .TRUE., fletcher32 = .TRUE., endianness = nf90_endian_big, deflate_level = DEFLATE_LEVEL)) call check(nf90_def_var(ncid, VAR2_NAME, NF90_INT, dimids, varid2, contiguous = .TRUE.)) call check(nf90_def_var(ncid, VAR3_NAME, NF90_INT64, varid3)) call check(nf90_def_var(ncid, VAR4_NAME, NF90_INT, x_dimid, varid4, contiguous = .TRUE.)) call check(nf90_def_var(ncid, VAR5_NAME, NF90_INT, dimids, varid5, chunksizes = chunksizes)) ! Write the pretend data to the file. call check(nf90_put_var(ncid, varid1, data_out)) call check(nf90_put_var(ncid, varid2, data_out)) call check(nf90_put_var(ncid, varid3, TOE_SAN_VALUE)) call check(nf90_put_var(ncid, varid4, data_out_1d)) call check(nf90_put_var(ncid, varid5, data_out)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 5 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4) stop 2 ! Get varids. call check(nf90_inq_varid(ncid, VAR1_NAME, varid1_in)) call check(nf90_inq_varid(ncid, VAR2_NAME, varid2_in)) call check(nf90_inq_varid(ncid, VAR3_NAME, varid3_in)) call check(nf90_inq_varid(ncid, VAR4_NAME, varid4_in)) call check(nf90_inq_varid(ncid, VAR5_NAME, varid5_in)) ! Check variable 1. call check(nf90_inquire_variable(ncid, varid1_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, chunksizes = chunksizes_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in, cache_size = cache_size_in, & cache_nelems = cache_nelems_in, cache_preemption = cache_preemption_in)) if (name_in .ne. VAR1_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 3 if (chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2)) & stop 4 if (endianness_in .ne. nf90_endian_big) stop 5 ! This test code commented out because it fails parallel builds, ! which don't use the cache, so don't get the same size ! settings. Since we are not (yet) using a preprocessor on the ! fortran code, there's no way to ifdef out these tests. ! print *, cache_size_in, cache_nelems_in, cache_preemption ! if (cache_size_in .ne. 16 .or. cache_nelems_in .ne. 4133 .or. & ! cache_preemption .ne. CACHE_PREEMPTION) stop 555 ! Check variable 2. call check(nf90_inquire_variable(ncid, varid2_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR2_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 6 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 7 ! Check variable 3. call check(nf90_inquire_variable(ncid, varid3_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR3_NAME .or. xtype_in .ne. NF90_INT64 .or. ndims_in .ne. 0 .or. & natts_in .ne. 0) stop 8 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 9 ! Check variable 4. call check(nf90_inquire_variable(ncid, varid4_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR4_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. 1 .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. x_dimid) stop 10 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 11 ! Check the data. call check(nf90_get_var(ncid, varid1_in, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 12 end do end do call check(nf90_get_var(ncid, varid2_in, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 13 end do end do call check(nf90_get_var(ncid, varid3_in, toe_san_in)) if (toe_san_in .ne. TOE_SAN_VALUE) stop 14 call check(nf90_get_var(ncid, varid4_in, data_in_1d)) do x = 1, NX if (data_out_1d(x) .ne. data_in_1d(x)) stop 15 end do call check(nf90_get_var(ncid, varid5_in, data_in)) do x = 1, NX do y = 1, NY if (data_out(y, x) .ne. data_in(y, x)) stop 12 end do end do ! Close the file. call check(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_vars2 netcdf-fortran-4.6.3+ds/nf03_test4/CMakeLists.txt0000664000175000017500000000647315205004070021662 0ustar alastairalastairSET(CMAKE_VERBOSE_MAKEFILE OFF) SET(CMAKE_BUILD_TYPE "RelWithDebInfo") SET(CMAKE_INCLUDE_CURRENT_DIR ON) # Is the user building netCDF-4? if (USE_NETCDF4) # Add these netCDF-4 test programs. SET(nc4_check_PROGRAMS f90tst_vars f90tst_vars_vlen f90tst_grps f90tst_fill f90tst_fill2 f90tst_vars3 f90tst_vars4 f90tst_vars2 f90tst_path f90tst_rengrps f90tst_nc4 f90tst_types f90tst_types2 f90tst_zstandard f90tst_att) # Only run this test if quantize is present (i.e. netcdf-c is 4.9.0 or greater). IF (HAVE_QUANTIZE) SET(nc4_check_PROGRAMS ${nc4_check_PROGRAMS} f90tst_vars5) ENDIF() SET(check_PROGRAMS ${check_PROGRAMS} ${nc4_check_PROGRAMS}) SET(TESTS ${TESTS} ${nc4_check_PROGRAMS}) SET(f90tst_vars_SOURCES f90tst_vars.F90) SET(f90tst_vars_vlen_SOURCES f90tst_vars_vlen.F90) SET(f90tst_grps_SOURCES f90tst_grps.F90) SET(f90tst_fill_SOURCES f90tst_fill.F90) SET(f90tst_fill2_SOURCES f90tst_fill2.F90) SET(f90tst_vars2_SOURCES f90tst_vars2.F90) SET(f90tst_vars3_SOURCES f90tst_vars3.F90) SET(f90tst_vars4_SOURCES f90tst_vars4.F90) SET(f90tst_vars5_SOURCES f90tst_vars5.F90) SET(f90tst_path_SOURCES f90tst_path.F90) SET(f90tst_rengrps_SOURCES f90tst_rengrps.F90) SET(f90tst_nc4_SOURCES f90tst_nc4.F90) SET(f90tst_types_SOURCES f90tst_types.F90) SET(f90tst_types2_SOURCES f90tst_types2.F90) SET(f90tst_zstandard_SOURCES f90tst_zstandard.F90) SET(f90tst_att_SOURCES f90tst_att.F90) # Need a copy of ref_atts.nc for f90tst_att file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/ref_att.nc DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/ref_att.nc ${CMAKE_CURRENT_BINARY_DIR}/att.nc) # Test parallel I/O. IF (TEST_PARALLEL) SET(check_PROGRAMS ${check_PROGRAMS} f90tst_parallel f90tst_parallel2 f90tst_parallel3 f90tst_nc4_par f90tst_parallel_fill f90tst_parallel_compressed) CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/run_f90_par_test.sh.in" "${CMAKE_CURRENT_SOURCE_DIR}/run_f90_par_test.sh" @ONLY) FILE(COPY "${CMAKE_CURRENT_SOURCE_DIR}/run_f90_par_test.sh" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE) build_bin_test(f90tst_parallel ".F90") build_bin_test(f90tst_parallel2 ".F90") build_bin_test(f90tst_parallel3 ".F90") build_bin_test(f90tst_nc4_par ".F90") build_bin_test(f90tst_parallel_fill ".F90") build_bin_test(f90tst_parallel_compressed ".F90") add_sh_test(F90_tests run_f90_par_test) ENDIF (TEST_PARALLEL) # This is the netCDF-4 F90 large file test. IF (LARGE_FILE_TESTS) SET(nc4_largefile_PROGRAMS f90tst_flarge) SET(check_PROGRAMS ${check_PROGRAMS} ${nc4_largefile_PROGRAMS}) SET(TESTS ${TESTS} ${nc4_largefile_PROGRAMS}) SET(f90tst_flarge_SOURCES f90tst_flarge.F90) ENDIF(LARGE_FILE_TESTS) # This is an f90 benchmark. IF(BUILD_BENCHMARKS) SET(nc4_io_PROGRAMS f90tst_io) SET(check_PROGRAMS ${check_PROGRAMS} ${nc4_io_PROGRAMS}) SET(TESTS ${TESTS} ${nc4_io_PROGRAMS}) SET(f90tst_io_SOURCES f90tst_io.F90) ENDIF(BUILD_BENCHMARKS) endif(USE_NETCDF4) # Create pre-compiled tests. FOREACH(t IN LISTS TESTS) ADD_EXECUTABLE(${t} ${${t}_SOURCES}) TARGET_LINK_LIBRARIES(${t} netcdff) ADD_TEST(${t} ${t}) ENDFOREACH() # Cleaning up files created during the process. SET (CLEANFILES f90tst_*.nc) netcdf-fortran-4.6.3+ds/nf03_test4/f90tst_grps.F900000664000175000017500000001555115205004070021563 0ustar alastairalastair! This is part of the netCDF package. ! Copyright 2006 University Corporation for Atmospheric Research/Unidata. ! See COPYRIGHT file for conditions of use. ! This program tests netCDF-4 variable functions from fortran. ! Ed Hartnett program f90tst_grps use typeSizes use netcdf implicit none ! This is the name of the data file we will create. character (len = *), parameter :: FILE_NAME = "f90tst_grps.nc" ! We are writing 2D data, a 6 x 12 grid. integer, parameter :: MAX_DIMS = 2 integer, parameter :: NX = 6, NY = 12 ! We need these ids and other gunk for netcdf. integer :: ncid, varid1, varid2, varid3, varid4, dimids(MAX_DIMS) integer :: chunksizes(MAX_DIMS), chunksizes_in(MAX_DIMS) integer :: x_dimid, y_dimid integer :: nvars, ngatts, ndims, unlimdimid, file_format integer, parameter :: CACHE_NELEMS = 10000, CACHE_SIZE = 1000000 integer, parameter :: DEFLATE_LEVEL = 4 integer (kind = EightByteInt), parameter :: TOE_SAN_VALUE = 2147483648_EightByteInt character (len = *), parameter :: VAR1_NAME = "Payroll" character (len = *), parameter :: VAR2_NAME = "Spies" character (len = *), parameter :: VAR3_NAME = "Propaganda" character (len = *), parameter :: VAR4_NAME = "Arms" character (len = *), parameter :: GRP1_NAME = "Irish_Republican_Brotherhood" character (len = *), parameter :: GRP2_NAME = "Sinn_Fein" character (len = *), parameter :: GRP3_NAME = "Gaelic_Athletic_Association" character (len = *), parameter :: GRP4_NAME = "Provisional_Government" character (len = NF90_MAX_NAME) :: grp1_full_name integer :: len ! Information read back from the file to check correctness. integer :: varid1_in, varid2_in, varid3_in, varid4_in integer :: grpid1, grpid2, grpid3, grpid4 integer :: xtype_in, ndims_in, natts_in, dimids_in(MAX_DIMS) character (len = nf90_max_name) :: name_in integer :: endianness_in, deflate_level_in logical :: shuffle_in, fletcher32_in, contiguous_in print *, '' print *,'*** Testing netCDF-4 groups from Fortran 90.' ! Create the netCDF file. call check(nf90_create(FILE_NAME, nf90_netcdf4, ncid)) ! Define the dimensions. call check(nf90_def_dim(ncid, "x", NX, x_dimid)) call check(nf90_def_dim(ncid, "y", NY, y_dimid)) dimids = (/ y_dimid, x_dimid /) ! Define some nested groups. call check(nf90_def_grp(ncid, GRP1_NAME, grpid1)) call check(nf90_def_grp(grpid1, GRP2_NAME, grpid2)) call check(nf90_def_grp(grpid2, GRP3_NAME, grpid3)) call check(nf90_def_grp(grpid3, GRP4_NAME, grpid4)) ! Define some variables. chunksizes = (/ NY, NX /) call check(nf90_def_var(ncid, VAR1_NAME, NF90_INT, dimids, varid1, chunksizes = chunksizes, & shuffle = .TRUE., fletcher32 = .TRUE., endianness = nf90_endian_big, deflate_level = DEFLATE_LEVEL)) call check(nf90_def_var(grpid1, VAR2_NAME, NF90_INT, dimids, varid2, contiguous = .TRUE.)) call check(nf90_def_var(grpid2, VAR3_NAME, NF90_INT64, varid3)) call check(nf90_def_var(grpid3, VAR4_NAME, NF90_INT, x_dimid, varid4, contiguous = .TRUE.)) ! Close the file. call check(nf90_close(ncid)) ! Reopen the file. call check(nf90_open(FILE_NAME, nf90_nowrite, ncid)) ! Check some stuff out. call check(nf90_inquire(ncid, ndims, nvars, ngatts, unlimdimid, file_format)) if (ndims /= 2 .or. nvars /= 1 .or. ngatts /= 0 .or. unlimdimid /= -1 .or. & file_format /= nf90_format_netcdf4) stop 21 ! Get the group ids for the newly reopened file. call check(nf90_inq_grp_ncid(ncid, GRP1_NAME, grpid1)) call check(nf90_inq_grp_ncid(grpid1, GRP2_NAME, grpid2)) call check(nf90_inq_grp_ncid(grpid2, GRP3_NAME, grpid3)) call check(nf90_inq_grp_ncid(grpid3, GRP4_NAME, grpid4)) ! Check for the groups with full group names. write(grp1_full_name, '(A,A)') '/', GRP1_NAME call check(nf90_inq_grp_full_ncid(ncid, grp1_full_name, grpid1)) call check(nf90_inq_grpname(grpid1, name_in)) if (name_in .ne. GRP1_NAME) stop 61 call check(nf90_inq_grpname_full(grpid1, len, name_in)) if (name_in .ne. grp1_full_name) stop 62 ! Get varids. call check(nf90_inq_varid(ncid, VAR1_NAME, varid1_in)) call check(nf90_inq_varid(grpid1, VAR2_NAME, varid2_in)) call check(nf90_inq_varid(grpid2, VAR3_NAME, varid3_in)) call check(nf90_inq_varid(grpid3, VAR4_NAME, varid4_in)) ! Check variable 1. call check(nf90_inquire_variable(ncid, varid1_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, chunksizes = chunksizes_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR1_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 3 if (chunksizes_in(1) /= chunksizes(1) .or. chunksizes_in(2) /= chunksizes(2)) & stop 4 if (endianness_in .ne. nf90_endian_big) stop 5 ! Check variable 2. call check(nf90_inquire_variable(grpid1, varid2_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR2_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. MAX_DIMS .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. dimids(1) .or. dimids_in(2) .ne. dimids(2)) stop 6 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 7 ! Check variable 3. call check(nf90_inquire_variable(grpid2, varid3_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR3_NAME .or. xtype_in .ne. NF90_INT64 .or. ndims_in .ne. 0 .or. & natts_in .ne. 0) stop 8 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 9 ! Check variable 4. call check(nf90_inquire_variable(grpid3, varid4_in, name_in, xtype_in, ndims_in, dimids_in, & natts_in, contiguous = contiguous_in, endianness = endianness_in, fletcher32 = fletcher32_in, & deflate_level = deflate_level_in, shuffle = shuffle_in)) if (name_in .ne. VAR4_NAME .or. xtype_in .ne. NF90_INT .or. ndims_in .ne. 1 .or. & natts_in .ne. 0 .or. dimids_in(1) .ne. x_dimid) stop 10 if (deflate_level_in .ne. 0 .or. .not. contiguous_in .or. fletcher32_in .or. shuffle_in) stop 11 ! Close the file. call check(nf90_close(ncid)) print *,'*** SUCCESS!' contains ! This subroutine handles errors by printing an error message and ! exiting with a non-zero status. subroutine check(errcode) use netcdf implicit none integer, intent(in) :: errcode if(errcode /= nf90_noerr) then print *, 'Error: ', trim(nf90_strerror(errcode)) stop 2 endif end subroutine check end program f90tst_grps netcdf-fortran-4.6.3+ds/nf_test/0000775000175000017500000000000015205004070016661 5ustar alastairalastairnetcdf-fortran-4.6.3+ds/nf_test/test_put.m40000664000175000017500000013664415205004070021010 0ustar alastairalastairdivert(-1) dnl This is m4 source. dnl Process using m4 to produce FORTRAN language file. changequote([,]) dnl undefine([index])dnl dnl Macros dnl Upcase(str) dnl define([Upcase],[dnl translit($1, abcdefghijklmnopqrstuvwxyz, ABCDEFGHIJKLMNOPQRSTUVWXYZ)]) dnl NFT_ITYPE(type) dnl define([NFT_ITYPE], [NFT_[]Upcase($1)]) dnl ARITH(itype, value) dnl define([ARITH], [ifelse($1, text, ichar($2), $2)]) dnl DATATYPE(funf_suffix) dnl define([DATATYPE], [dnl ifelse($1, text, character, ifelse($1, int1, NF_INT1_T, ifelse($1, int2, NF_INT2_T, ifelse($1, int, integer, ifelse($1, real, real, ifelse($1, double, doubleprecision)[]dnl )[]dnl )[]dnl )[]dnl )[]dnl )[]dnl ]) dnl MAKE_ARITH(funf_suffix, var) dnl define([MAKE_ARITH], [dnl ifelse($1, text, ichar($2), $2)[]dnl ]) dnl MAKE_DOUBLE(funf_suffix, var) dnl define([MAKE_DOUBLE], [dnl ifelse($1, text, dble(ichar($2)), dble($2))[]dnl ]) dnl MAKE_TYPE(funf_suffix, var) dnl define([MAKE_TYPE], [dnl ifelse($1, text, char(int($2)), $2)[]dnl ]) dnl HASH(TYPE) dnl define([HASH], [dnl C C ensure hash value within range for internal TYPE C function hash_$1(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_$1 = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end ])dnl dnl CHECK_VARS(TYPE) dnl define([CHECK_VARS],dnl [dnl C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_$1(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j DATATYPE($1) value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_ITYPE($1)) err = nf_get_var1_$1(ncid, i, index, value) if (inRange3(expect,datatype,NFT_ITYPE($1))) then if (in_internal_range(NFT_ITYPE($1), + expect)) then if (err .ne. 0) then call errore('nf_get_var1_$1: ', err) else val = MAKE_ARITH($1,value) if (.not.equal( + val, + expect,var_type(i), + NFT_ITYPE($1))) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end ])dnl dnl CHECK_ATTS(TYPE) numeric only dnl define([CHECK_ATTS],dnl [dnl C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_$1(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) DATATYPE($1) value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_ITYPE($1)) if (inRange3(expect(k), datatype, + NFT_ITYPE($1))) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_ITYPE($1), + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_$1(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_ITYPE($1)) + .and. + in_internal_range(NFT_ITYPE($1), + expect(k))) then val = MAKE_ARITH($1,value(k)) if (.not.equal( + val, + expect(k),datatype, + NFT_ITYPE($1))) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end ])dnl dnl TEST_NF_PUT_VAR1(TYPE) dnl define([TEST_NF_PUT_VAR1],dnl [dnl subroutine test_nf_put_var1_$1() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ DATATYPE($1) value doubleprecision val value = MAKE_TYPE($1, 5)!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_$1(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_$1(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_$1(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = MAKE_TYPE($1, hash_$1(var_type(i),var_rank(i), + index, NFT_ITYPE($1))) err = nf_put_var1_$1(ncid, i, index, value) if (canConvert) then val = ARITH($1, value) if (inRange3(val, var_type(i), NFT_ITYPE($1))) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_$1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end ])dnl dnl TEST_NF_PUT_VAR(TYPE) dnl define([TEST_NF_PUT_VAR],dnl [dnl subroutine test_nf_put_var_$1() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ DATATYPE($1) value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) err = nf_put_var_$1(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_$1(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = MAKE_TYPE($1, hash_$1(var_type(i), + var_rank(i), + index, NFT_ITYPE($1))) val = ARITH($1, value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_ITYPE($1)) 4 continue err = nf_put_var_$1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_$1(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = MAKE_TYPE($1, hash_$1(var_type(i), + var_rank(i), + index, NFT_ITYPE($1))) val = ARITH($1, value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_ITYPE($1)) 7 continue err = nf_put_var_$1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_$1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end ])dnl dnl TEST_NF_PUT_VARA(TYPE) dnl define([TEST_NF_PUT_VARA],dnl [dnl subroutine test_nf_put_vara_$1() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ DATATYPE($1) value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_$1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_$1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_$1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_$1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_$1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_$1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_$1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_$1(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= MAKE_TYPE($1, hash_$1(var_type(i), + var_rank(i), index, + NFT_ITYPE($1))) val = ARITH($1, value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_ITYPE($1)) 7 continue err = nf_put_vara_$1(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_$1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end ])dnl dnl TEST_NF_PUT_VARS(TYPE) dnl define([TEST_NF_PUT_VARS],dnl [dnl subroutine test_nf_put_vars_$1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ DATATYPE($1) value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_$1(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_$1(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_$1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_$1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_$1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = MAKE_TYPE($1, hash_$1(var_type(i), + var_rank(i), + index2, NFT_ITYPE($1))) val = ARITH($1, value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_ITYPE($1)) 9 continue err = nf_put_vars_$1(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_$1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end ])dnl dnl TEST_NF_PUT_VARM(TYPE) dnl define([TEST_NF_PUT_VARM],dnl [dnl subroutine test_nf_put_varm_$1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ DATATYPE($1) value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_$1(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_$1(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_$1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_$1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_$1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = MAKE_TYPE($1, hash_$1(var_type(i), + var_rank(i), + index2, NFT_ITYPE($1))) val = ARITH($1, value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_ITYPE($1)) 11 continue err = nf_put_varm_$1(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_$1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end ])dnl dnl TEST_NF_PUT_ATT(TYPE) numeric only dnl define([TEST_NF_PUT_ATT],dnl [dnl subroutine test_nf_put_att_$1() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer ndx(1) integer err DATATYPE($1) value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_$1(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_$1(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_$1(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_$1(ATT_TYPE(j,i), -1, ndx, + NFT_ITYPE($1)) val = ARITH($1, value(k)) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_ITYPE($1)) 3 continue err = nf_put_att_$1(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_$1(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end ])dnl divert(0)dnl dnl If you see this line, you can ignore the next one. C Do not edit this file. It is produced from the corresponding .m4 source */ C******************************************************************** C Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: test_put.m4,v 1.16 2008/04/30 16:50:45 ed Exp $ C******************************************************************** HASH(text) #ifdef NF_INT1_T HASH(int1) #endif #ifdef NF_INT2_T HASH(int2) #endif HASH(int) HASH(real) HASH(double) CHECK_VARS(text) #ifdef NF_INT1_T CHECK_VARS(int1) #endif #ifdef NF_INT2_T CHECK_VARS(int2) #endif CHECK_VARS(int) CHECK_VARS(real) CHECK_VARS(double) CHECK_ATTS(text) #ifdef NF_INT1_T CHECK_ATTS(int1) #endif #ifdef NF_INT2_T CHECK_ATTS(int2) #endif CHECK_ATTS(int) CHECK_ATTS(real) CHECK_ATTS(double) TEST_NF_PUT_VAR1(text) #ifdef NF_INT1_T TEST_NF_PUT_VAR1(int1) #endif #ifdef NF_INT2_T TEST_NF_PUT_VAR1(int2) #endif TEST_NF_PUT_VAR1(int) TEST_NF_PUT_VAR1(real) TEST_NF_PUT_VAR1(double) TEST_NF_PUT_VAR(text) #ifdef NF_INT1_T TEST_NF_PUT_VAR(int1) #endif #ifdef NF_INT2_T TEST_NF_PUT_VAR(int2) #endif TEST_NF_PUT_VAR(int) TEST_NF_PUT_VAR(real) TEST_NF_PUT_VAR(double) TEST_NF_PUT_VARA(text) #ifdef NF_INT1_T TEST_NF_PUT_VARA(int1) #endif #ifdef NF_INT2_T TEST_NF_PUT_VARA(int2) #endif TEST_NF_PUT_VARA(int) TEST_NF_PUT_VARA(real) TEST_NF_PUT_VARA(double) TEST_NF_PUT_VARS(text) #ifdef NF_INT1_T TEST_NF_PUT_VARS(int1) #endif #ifdef NF_INT2_T TEST_NF_PUT_VARS(int2) #endif TEST_NF_PUT_VARS(int) TEST_NF_PUT_VARS(real) TEST_NF_PUT_VARS(double) TEST_NF_PUT_VARM(text) #ifdef NF_INT1_T TEST_NF_PUT_VARM(int1) #endif #ifdef NF_INT2_T TEST_NF_PUT_VARM(int2) #endif TEST_NF_PUT_VARM(int) TEST_NF_PUT_VARM(real) TEST_NF_PUT_VARM(double) subroutine test_nf_put_att_text() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err character value(MAX_NELS) err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('NF_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (ATT_TYPE(j,i) .eq. NF_CHAR) then if (.not.(ATT_LEN(j,i) .le. MAX_NELS)) + stop 2 err = nf_put_att_text(BAD_ID, i, + ATT_NAME(j,i), ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_text(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, k = 1, ATT_LEN(j,i) value(k) = char(int(hash(ATT_TYPE(j,i), -1, k))) 3 continue err = nf_put_att_text(ncid, i, ATT_NAME(j,i), + ATT_LEN(j,i), value) if (err .ne. 0) + call error(NF_strerror(err)) end if 2 continue 1 continue call check_atts_text(ncid) err = NF_close(ncid) if (err .ne. 0) + call errore('NF_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T TEST_NF_PUT_ATT(int1) #endif #ifdef NF_INT2_T TEST_NF_PUT_ATT(int2) #endif TEST_NF_PUT_ATT(int) TEST_NF_PUT_ATT(real) TEST_NF_PUT_ATT(double) netcdf-fortran-4.6.3+ds/nf_test/nf03_test.F0000664000175000017500000003563315205004070020607 0ustar alastairalastairC Copyright 1996-2019, UCAR/Unidata C See COPYRIGHT file for copying and redistribution conditions. C Test driver for netCDF-3 interface. This program performs tests against C the netCDF-3 specification for all user-level functions in an C implementation of the netCDF library. C Steve Emmerson, Ed Hartnett subroutine test(name, func) USE tests implicit none character*(*) name external func write(*, 1) name 1 format(' *** testing ', a, ' ... ') nfails = 0 call func() nfailsTotal = nfailsTotal + nfails if ( nfails .ne. 0) then print *, ' ' print *, ' ### ', nfails, ' FAILURES TESTING ', name, + '! ###' C continue the remaining tests, uncomment below to stop now C stop 2 end if end program nf_test USE tests implicit none integer status integer i, num_cmode, err, dft_fmt integer cmode(3) external test_nf_strerror external test_nf_open external test_nf_close external test_nf_inq external test_nf_inq_dimid external test_nf_inq_dim external test_nf_inq_dimlen external test_nf_inq_dimname external test_nf_inq_varid external test_nf_inq_var external test_nf_inq_natts external test_nf_inq_ndims external test_nf_inq_nvars external test_nf_inq_unlimdim external test_nf_inq_format external test_nf_inq_vardimid external test_nf_inq_varname external test_nf_inq_varnatts external test_nf_inq_varndims external test_nf_inq_vartype external test_nf_get_var1_text #if defined(NF_INT1_T) external test_nf_get_var1_int1 #endif #if defined(NF_INT2_T) external test_nf_get_var1_int2 #endif external test_nf_get_var1_int external test_nf_get_var1_real external test_nf_get_var1_double external test_nf_get_var_text #if defined(NF_INT1_T) external test_nf_get_var_int1 #endif #if defined(NF_INT2_T) external test_nf_get_var_int2 #endif external test_nf_get_var_int external test_nf_get_var_real external test_nf_get_var_double external test_nf_get_vara_text #if defined(NF_INT1_T) external test_nf_get_vara_int1 #endif #if defined(NF_INT2_T) external test_nf_get_vara_int2 #endif external test_nf_get_vara_int external test_nf_get_vara_real external test_nf_get_vara_double external test_nf_get_vars_text #if defined(NF_INT1_T) external test_nf_get_vars_int1 #endif #if defined(NF_INT2_T) external test_nf_get_vars_int2 #endif external test_nf_get_vars_int external test_nf_get_vars_real external test_nf_get_vars_double external test_nf_get_varm_text #if defined(NF_INT1_T) external test_nf_get_varm_int1 #endif #if defined(NF_INT2_T) external test_nf_get_varm_int2 #endif external test_nf_get_varm_int external test_nf_get_varm_real external test_nf_get_varm_double external test_nf_get_att_text #if defined(NF_INT1_T) external test_nf_get_att_int1 #endif #if defined(NF_INT2_T) external test_nf_get_att_int2 #endif external test_nf_get_att_int external test_nf_get_att_real external test_nf_get_att_double external test_nf_inq_att external test_nf_inq_attname external test_nf_inq_attid external test_nf_inq_attlen external test_nf_inq_atttype external test_nf_create external test_nf_redef external test_nf_enddef external test_nf_sync external test_nf_abort external test_nf_def_dim external test_nf_rename_dim external test_nf_def_var external test_nf_put_var1_text #if defined(NF_INT1_T) external test_nf_put_var1_int1 #endif #if defined(NF_INT2_T) external test_nf_put_var1_int2 #endif external test_nf_put_var1_int external test_nf_put_var1_real external test_nf_put_var1_double external test_nf_put_var_text #if defined(NF_INT1_T) external test_nf_put_var_int1 #endif #if defined(NF_INT2_T) external test_nf_put_var_int2 #endif external test_nf_put_var_int external test_nf_put_var_real external test_nf_put_var_double external test_nf_put_vara_text #if defined(NF_INT1_T) external test_nf_put_vara_int1 #endif #if defined(NF_INT2_T) external test_nf_put_vara_int2 #endif external test_nf_put_vara_int external test_nf_put_vara_real external test_nf_put_vara_double external test_nf_put_vars_text #if defined(NF_INT1_T) external test_nf_put_vars_int1 #endif #if defined(NF_INT2_T) external test_nf_put_vars_int2 #endif external test_nf_put_vars_int external test_nf_put_vars_real external test_nf_put_vars_double external test_nf_put_varm_text #if defined(NF_INT1_T) external test_nf_put_varm_int1 #endif #if defined(NF_INT2_T) external test_nf_put_varm_int2 #endif external test_nf_put_varm_int external test_nf_put_varm_real external test_nf_put_varm_double external test_nf_rename_var external test_nf_put_att_text #if defined(NF_INT1_T) external test_nf_put_att_int1 #endif #if defined(NF_INT2_T) external test_nf_put_att_int2 #endif external test_nf_put_att_int external test_nf_put_att_real external test_nf_put_att_double external test_nf_copy_att external test_nf_rename_att external test_nf_del_att external test_nf_set_fill external test_nf_set_default_format external ignorefpe print *, '' print *, '*** Testing netCDF-3 Fortran 77 API.' call ignorefpe(1) testfile = 'test03.nc' scratch = 'scratch03.nc' nfailsTotal = 0 progname = 'nf_test' max_nmpt = 8 write(*, *) 'NetCDF version: ', nf_inq_libvers() num_cmode = 1 cmode(1) = 0 #ifdef ENABLE_CDF5 num_cmode = num_cmode + 1 cmode(num_cmode) = nf_cdf5 #endif #ifdef USE_NETCDF4 num_cmode = num_cmode + 1 cmode(num_cmode) = nf_netcdf4 #endif do i = 1, num_cmode if (cmode(i) .EQ. 0) then print*,"testing classic CDF-1 format" #ifdef ENABLE_CDF5 elseif (cmode(i) .EQ. nf_cdf5) then print*,"testing CDF-5 format" #endif #ifdef USE_NETCDF4 elseif (cmode(i) .EQ. nf_netcdf4) then print*,"testing NetCDF-4 format" #endif endif C /* Initialize global variables defining test file */ call init_gvars call write_file(testfile) if (nfailsTotal .gt. 0) call udexit(1) C /* delete any existing scratch netCDF file */ status = nf_delete(scratch) C /* Test read-only functions, using pregenerated test-file */ call test('nf_strerror', test_nf_strerror) call test('nf_open', test_nf_open) call test('nf_close', test_nf_close) call test('nf_inq', test_nf_inq) call test('nf_inq_dimid', test_nf_inq_dimid) call test('nf_inq_dim', test_nf_inq_dim) call test('nf_inq_dimlen', test_nf_inq_dimlen) call test('nf_inq_dimname', test_nf_inq_dimname) call test('nf_inq_varid', test_nf_inq_varid) call test('nf_inq_var', test_nf_inq_var) call test('nf_inq_natts', test_nf_inq_natts) call test('nf_inq_ndims', test_nf_inq_ndims) call test('nf_inq_nvars', test_nf_inq_nvars) call test('nf_inq_unlimdim', test_nf_inq_unlimdim) call test('nf_inq_format', test_nf_inq_format) call test('nf_inq_vardimid', test_nf_inq_vardimid) call test('nf_inq_varname', test_nf_inq_varname) call test('nf_inq_varnatts', test_nf_inq_varnatts) call test('nf_inq_varndims', test_nf_inq_varndims) call test('nf_inq_vartype', test_nf_inq_vartype) call test('nf_get_var1_text', test_nf_get_var1_text) #if defined(NF_INT1_T) call test('nf_get_var1_int1', test_nf_get_var1_int1) #endif #if defined(NF_INT2_T) call test('nf_get_var1_int2', test_nf_get_var1_int2) #endif call test('nf_get_var1_int', test_nf_get_var1_int) call test('nf_get_var1_real', test_nf_get_var1_real) call test('nf_get_var1_double', test_nf_get_var1_double) call test('nf_get_var_text', test_nf_get_var_text) #if defined(NF_INT1_T) call test('nf_get_var_int1', test_nf_get_var_int1) #endif #if defined(NF_INT2_T) call test('nf_get_var_int2', test_nf_get_var_int2) #endif call test('nf_get_var_int', test_nf_get_var_int) call test('nf_get_var_real', test_nf_get_var_real) call test('nf_get_var_double', test_nf_get_var_double) call test('nf_get_vara_text', test_nf_get_vara_text) #if defined(NF_INT1_T) call test('nf_get_vara_int1', test_nf_get_vara_int1) #endif #if defined(NF_INT2_T) call test('nf_get_vara_int2', test_nf_get_vara_int2) #endif call test('nf_get_vara_int', test_nf_get_vara_int) call test('nf_get_vara_real', test_nf_get_vara_real) call test('nf_get_vara_double', test_nf_get_vara_double) call test('nf_get_vars_text', test_nf_get_vars_text) #if defined(NF_INT1_T) call test('nf_get_vars_int1', test_nf_get_vars_int1) #endif #if defined(NF_INT2_T) call test('nf_get_vars_int2', test_nf_get_vars_int2) #endif call test('nf_get_vars_int', test_nf_get_vars_int) call test('nf_get_vars_real', test_nf_get_vars_real) call test('nf_get_vars_double', test_nf_get_vars_double) call test('nf_get_varm_text', test_nf_get_varm_text) #if defined(NF_INT1_T) call test('nf_get_varm_int1', test_nf_get_varm_int1) #endif #if defined(NF_INT2_T) call test('nf_get_varm_int2', test_nf_get_varm_int2) #endif call test('nf_get_varm_int', test_nf_get_varm_int) call test('nf_get_varm_real', test_nf_get_varm_real) call test('nf_get_varm_double', test_nf_get_varm_double) call test('nf_get_att_text', test_nf_get_att_text) #if defined(NF_INT1_T) call test('nf_get_att_int1', test_nf_get_att_int1) #endif #if defined(NF_INT2_T) call test('nf_get_att_int2', test_nf_get_att_int2) #endif call test('nf_get_att_int', test_nf_get_att_int) call test('nf_get_att_real', test_nf_get_att_real) call test('nf_get_att_double', test_nf_get_att_double) call test('nf_inq_att', test_nf_inq_att) call test('nf_inq_attname', test_nf_inq_attname) call test('nf_inq_attid', test_nf_inq_attid) call test('nf_inq_attlen', test_nf_inq_attlen) call test('nf_inq_atttype', test_nf_inq_atttype) C /* Test write functions */ call test('nf_create', test_nf_create) call test('nf_redef', test_nf_redef) call test('nf_enddef', test_nf_enddef) call test('nf_sync', test_nf_sync) call test('nf_abort', test_nf_abort) call test('nf_def_dim', test_nf_def_dim) call test('nf_rename_dim', test_nf_rename_dim) call test('nf_def_var', test_nf_def_var) call test('nf_put_var1_text', test_nf_put_var1_text) #if defined(NF_INT1_T) call test('nf_put_var1_int1', test_nf_put_var1_int1) #endif #if defined(NF_INT2_T) call test('nf_put_var1_int2', test_nf_put_var1_int2) #endif call test('nf_put_var1_int', test_nf_put_var1_int) call test('nf_put_var1_real', test_nf_put_var1_real) call test('nf_put_var1_double', test_nf_put_var1_double) call test('nf_put_var_text', test_nf_put_var_text) #if defined(NF_INT1_T) call test('nf_put_var_int1', test_nf_put_var_int1) #endif #if defined(NF_INT2_T) call test('nf_put_var_int2', test_nf_put_var_int2) #endif call test('nf_put_var_int', test_nf_put_var_int) call test('nf_put_var_real', test_nf_put_var_real) call test('nf_put_var_double', test_nf_put_var_double) call test('nf_put_vara_text', test_nf_put_vara_text) #if defined(NF_INT1_T) call test('nf_put_vara_int1', test_nf_put_vara_int1) #endif #if defined(NF_INT2_T) call test('nf_put_vara_int2', test_nf_put_vara_int2) #endif call test('nf_put_vara_int', test_nf_put_vara_int) call test('nf_put_vara_real', test_nf_put_vara_real) call test('nf_put_vara_double', test_nf_put_vara_double) call test('nf_put_vars_text', test_nf_put_vars_text) #if defined(NF_INT1_T) call test('nf_put_vars_int1', test_nf_put_vars_int1) #endif #if defined(NF_INT2_T) call test('nf_put_vars_int2', test_nf_put_vars_int2) #endif call test('nf_put_vars_int', test_nf_put_vars_int) call test('nf_put_vars_real', test_nf_put_vars_real) call test('nf_put_vars_double', test_nf_put_vars_double) call test('nf_put_varm_text', test_nf_put_varm_text) #if defined(NF_INT1_T) call test('nf_put_varm_int1', test_nf_put_varm_int1) #endif #if defined(NF_INT2_T) call test('nf_put_varm_int2', test_nf_put_varm_int2) #endif call test('nf_put_varm_int', test_nf_put_varm_int) call test('nf_put_varm_real', test_nf_put_varm_real) call test('nf_put_varm_double', test_nf_put_varm_double) call test('nf_rename_var', test_nf_rename_var) call test('nf_put_att_text', test_nf_put_att_text) #if defined(NF_INT1_T) call test('nf_put_att_int1', test_nf_put_att_int1) #endif #if defined(NF_INT2_T) call test('nf_put_att_int2', test_nf_put_att_int2) #endif call test('nf_put_att_int', test_nf_put_att_int) call test('nf_put_att_real', test_nf_put_att_real) call test('nf_put_att_double', test_nf_put_att_double) call test('nf_copy_att', test_nf_copy_att) call test('nf_rename_att', test_nf_rename_att) call test('nf_del_att', test_nf_del_att) call test('nf_set_fill', test_nf_set_fill) call test('nf_set_default_format', + test_nf_set_default_format) ! reset default format, otherwise the remaining tests will use ! the one set in the last test err = nf_set_default_format(NF_FORMAT_CLASSIC, dft_fmt) enddo print *,'Total number of failures: ', nfailsTotal if (nfailsTotal .ne. 0) stop 2 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test/test03_get.F0000664000175000017500000067574515205004070021001 0ustar alastairalastairC Do not edit this file. It is produced from the corresponding .m4 source */ C********************************************************************* C Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: test_get.m4,v 1.11 2008/04/30 16:50:46 ed Exp $ C********************************************************************* subroutine test_nf_get_var1_text() USE tests implicit none integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert character value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_text(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_text(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_text(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_TEXT ) err = nf_get_var1_text(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_TEXT)) then if (in_internal_range(NFT_TEXT, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = ichar(value) if (.not. equal(val, expect, + var_type(i), + NFT_TEXT)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_var1_int1() USE tests implicit none integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert NF_INT1_T value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_int1(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_int1(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_int1(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT1 ) err = nf_get_var1_int1(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_INT1)) then if (in_internal_range(NFT_INT1, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_INT1)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_var1_int2() USE tests implicit none integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert NF_INT2_T value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_int2(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_int2(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_int2(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT2 ) err = nf_get_var1_int2(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_INT2)) then if (in_internal_range(NFT_INT2, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_INT2)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_var1_int() USE tests implicit none integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert integer value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_int(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_int(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_int(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT ) err = nf_get_var1_int(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_INT)) then if (in_internal_range(NFT_INT, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_INT)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var1_real() USE tests implicit none integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert real value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_real(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_real(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_real(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_REAL ) err = nf_get_var1_real(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_REAL)) then if (in_internal_range(NFT_REAL, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_REAL)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var1_double() USE tests implicit none integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert doubleprecision value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_double(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_double(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_double(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_DOUBLE ) err = nf_get_var1_double(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_DOUBLE)) then if (in_internal_range(NFT_DOUBLE, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_DOUBLE)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var_text() USE tests implicit none integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert character value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) err = nf_get_var_text(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_text(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_TEXT ) if (inRange3(expect(j),var_type(i), NFT_TEXT)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_TEXT, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_text(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(j))) then val = ichar(value(j)) if (.not. equal(val, expect(j), + var_type(i), + NFT_TEXT)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_var_int1() USE tests implicit none integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) err = nf_get_var_int1(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_int1(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_INT1 ) if (inRange3(expect(j),var_type(i), NFT_INT1)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_INT1, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_int1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_INT1)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_var_int2() USE tests implicit none integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) err = nf_get_var_int2(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_int2(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_INT2 ) if (inRange3(expect(j),var_type(i), NFT_INT2)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_INT2, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_int2(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_INT2)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_var_int() USE tests implicit none integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert integer value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) err = nf_get_var_int(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_int(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_INT ) if (inRange3(expect(j),var_type(i), NFT_INT)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_INT, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_int(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_INT)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var_real() USE tests implicit none integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert real value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) err = nf_get_var_real(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_real(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_REAL ) if (inRange3(expect(j),var_type(i), NFT_REAL)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_REAL, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_real(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_REAL)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var_double() USE tests implicit none integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert doubleprecision value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) err = nf_get_var_double(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_double(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_DOUBLE ) if (inRange3(expect(j),var_type(i), NFT_DOUBLE)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_DOUBLE, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_double(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_DOUBLE)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_vara_text() USE tests implicit none integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_text(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_text(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_text(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_TEXT) if (inRange3(expect(j),var_type(i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_text:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, expect(j))) + then val = ichar(value(j)) if (.not.equal(val,expect(j), + var_type(i),NFT_TEXT)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_vara_int1() USE tests implicit none integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int1(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_int1(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_INT1) if (inRange3(expect(j),var_type(i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_int1:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_INT1)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_vara_int2() USE tests implicit none integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int2(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int2(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_int2(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_INT2) if (inRange3(expect(j),var_type(i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_int2:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_INT2)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end #endif subroutine test_nf_get_vara_int() USE tests implicit none integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_int(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_INT) if (inRange3(expect(j),var_type(i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_int:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_INT)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end subroutine test_nf_get_vara_real() USE tests implicit none integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_real(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_real(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_real(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_REAL) if (inRange3(expect(j),var_type(i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_real:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_REAL)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end subroutine test_nf_get_vara_double() USE tests implicit none integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_double(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_double(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_double(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_DOUBLE) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_double:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_DOUBLE)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end subroutine test_nf_get_vars_text() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_text(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_text(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_TEXT) if (inRange3(expect(j),var_type(i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_text(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(j))) then val = ichar(value(j)) if (.not.equal(val, expect(j), + var_type(i), NFT_TEXT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_vars_int1() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_int1(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_int1(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT1) if (inRange3(expect(j),var_type(i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_int1(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_INT1)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_vars_int2() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_int2(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_int2(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT2) if (inRange3(expect(j),var_type(i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_int2(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_INT2)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_vars_int() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_int(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_int(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT) if (inRange3(expect(j),var_type(i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_int(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_INT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_vars_real() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_real(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_real(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_REAL) if (inRange3(expect(j),var_type(i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_real(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_REAL)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_vars_double() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_double(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_double(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_DOUBLE) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_double(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_DOUBLE)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_varm_text() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_text(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_text(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_TEXT) if (inRange3(expect(j),var_type(i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_text(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(j))) then val = ichar(value(j)) if (.not.equal(val, expect(j), + var_type(i), + NFT_TEXT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_varm_int1() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_int1(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_int1(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT1) if (inRange3(expect(j),var_type(i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_int1(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_INT1)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_varm_int2() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_int2(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_int2(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT2) if (inRange3(expect(j),var_type(i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_int2(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_INT2)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_varm_int() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_int(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_int(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT) if (inRange3(expect(j),var_type(i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_int(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_INT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_varm_real() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_real(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_real(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_REAL) if (inRange3(expect(j),var_type(i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_real(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_REAL)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_varm_double() USE tests implicit none integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_double(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_double(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_DOUBLE) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_double(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_DOUBLE)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_att_text() USE tests implicit none integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) err = nf_get_att_text(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_text(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_text(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_TEXT) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_text(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_text: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(k))) then val = ichar(value(k)) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_TEXT))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_att_int1() USE tests implicit none integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) err = nf_get_att_int1(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_int1(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_int1(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_INT1) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_int1(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_int1: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_INT1))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_att_int2() USE tests implicit none integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) err = nf_get_att_int2(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_int2(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_int2(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_INT2) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_int2(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_int2: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_INT2))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_att_int() USE tests implicit none integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) err = nf_get_att_int(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_int(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_int(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_INT) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_int(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_int: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_INT))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_att_real() USE tests implicit none integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) err = nf_get_att_real(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_real(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_real(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_REAL) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_real(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_real: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_REAL))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_att_double() USE tests implicit none integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) err = nf_get_att_double(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_double(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_double(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_DOUBLE) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_double(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_double: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_DOUBLE))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end netcdf-fortran-4.6.3+ds/nf_test/test_put.F0000664000175000017500000076557115205004070020664 0ustar alastairalastairC Do not edit this file. It is produced from the corresponding .m4 source */ C******************************************************************** C Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: test_put.m4,v 1.16 2008/04/30 16:50:45 ed Exp $ C******************************************************************** C C ensure hash value within range for internal TYPE C function hash_text(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_text = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end #ifdef NF_INT1_T C C ensure hash value within range for internal TYPE C function hash_int1(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_int1 = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end #endif #ifdef NF_INT2_T C C ensure hash value within range for internal TYPE C function hash_int2(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_int2 = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end #endif C C ensure hash value within range for internal TYPE C function hash_int(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_int = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end C C ensure hash value within range for internal TYPE C function hash_real(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_real = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end C C ensure hash value within range for internal TYPE C function hash_double(type, rank, index, itype) implicit none #include "tests.inc" integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_double = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_text(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j character value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_TEXT) err = nf_get_var1_text(ncid, i, index, value) if (inRange3(expect,datatype,NFT_TEXT)) then if (in_internal_range(NFT_TEXT, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_text: ', err) else val = ichar(value) if (.not.equal( + val, + expect,var_type(i), + NFT_TEXT)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_int1(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j NF_INT1_T value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT1) err = nf_get_var1_int1(ncid, i, index, value) if (inRange3(expect,datatype,NFT_INT1)) then if (in_internal_range(NFT_INT1, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_int1: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_INT1)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_int2(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j NF_INT2_T value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT2) err = nf_get_var1_int2(ncid, i, index, value) if (inRange3(expect,datatype,NFT_INT2)) then if (in_internal_range(NFT_INT2, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_int2: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_INT2)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_int(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j integer value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT) err = nf_get_var1_int(ncid, i, index, value) if (inRange3(expect,datatype,NFT_INT)) then if (in_internal_range(NFT_INT, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_int: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_INT)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_real(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j real value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_REAL) err = nf_get_var1_real(ncid, i, index, value) if (inRange3(expect,datatype,NFT_REAL)) then if (in_internal_range(NFT_REAL, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_real: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_REAL)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_double(filename) implicit none #include "tests.inc" character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j doubleprecision value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_DOUBLE) err = nf_get_var1_double(ncid, i, index, value) if (inRange3(expect,datatype,NFT_DOUBLE)) then if (in_internal_range(NFT_DOUBLE, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_double: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_DOUBLE)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_text(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) character value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_TEXT) if (inRange3(expect(k), datatype, + NFT_TEXT)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_TEXT, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_text(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_TEXT) + .and. + in_internal_range(NFT_TEXT, + expect(k))) then val = ichar(value(k)) if (.not.equal( + val, + expect(k),datatype, + NFT_TEXT)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end #ifdef NF_INT1_T C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_int1(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) NF_INT1_T value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_INT1) if (inRange3(expect(k), datatype, + NFT_INT1)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_INT1, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_int1(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_INT1) + .and. + in_internal_range(NFT_INT1, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_INT1)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end #endif #ifdef NF_INT2_T C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_int2(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) NF_INT2_T value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_INT2) if (inRange3(expect(k), datatype, + NFT_INT2)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_INT2, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_int2(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_INT2) + .and. + in_internal_range(NFT_INT2, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_INT2)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end #endif C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_int(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) integer value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_INT) if (inRange3(expect(k), datatype, + NFT_INT)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_INT, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_int(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_INT) + .and. + in_internal_range(NFT_INT, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_INT)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_real(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) real value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_REAL) if (inRange3(expect(k), datatype, + NFT_REAL)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_REAL, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_real(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_REAL) + .and. + in_internal_range(NFT_REAL, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_REAL)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_double(ncid) implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) doubleprecision value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_DOUBLE) if (inRange3(expect(k), datatype, + NFT_DOUBLE)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_DOUBLE, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_double(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_DOUBLE) + .and. + in_internal_range(NFT_DOUBLE, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_DOUBLE)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end subroutine test_nf_put_var1_text() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ character value doubleprecision val value = char(int(5))!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_text(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_text(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_text(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = char(int(hash_text(var_type(i),var_rank(i), + index, NFT_TEXT))) err = nf_put_var1_text(ncid, i, index, value) if (canConvert) then val = ichar(value) if (inRange3(val, var_type(i), NFT_TEXT)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_var1_int1() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ NF_INT1_T value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_int1(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_int1(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_int1(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_int1(var_type(i),var_rank(i), + index, NFT_INT1) err = nf_put_var1_int1(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_INT1)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_var1_int2() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ NF_INT2_T value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_int2(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_int2(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_int2(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_int2(var_type(i),var_rank(i), + index, NFT_INT2) err = nf_put_var1_int2(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_INT2)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif subroutine test_nf_put_var1_int() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ integer value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_int(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_int(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_int(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_int(var_type(i),var_rank(i), + index, NFT_INT) err = nf_put_var1_int(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_INT)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var1_real() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ real value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_real(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_real(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_real(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_real(var_type(i),var_rank(i), + index, NFT_REAL) err = nf_put_var1_real(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_REAL)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var1_double() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ doubleprecision value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_double(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_double(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_double(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_double(var_type(i),var_rank(i), + index, NFT_DOUBLE) err = nf_put_var1_double(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_DOUBLE)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var_text() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ character value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) err = nf_put_var_text(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_text(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_TEXT) 4 continue err = nf_put_var_text(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_text(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_TEXT) 7 continue err = nf_put_var_text(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_var_int1() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ NF_INT1_T value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) err = nf_put_var_int1(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_int1(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_int1(var_type(i), + var_rank(i), + index, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT1) 4 continue err = nf_put_var_int1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_int1(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_int1(var_type(i), + var_rank(i), + index, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT1) 7 continue err = nf_put_var_int1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_var_int2() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ NF_INT2_T value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) err = nf_put_var_int2(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_int2(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_int2(var_type(i), + var_rank(i), + index, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT2) 4 continue err = nf_put_var_int2(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_int2(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_int2(var_type(i), + var_rank(i), + index, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT2) 7 continue err = nf_put_var_int2(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif subroutine test_nf_put_var_int() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ integer value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) err = nf_put_var_int(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_int(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_int(var_type(i), + var_rank(i), + index, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT) 4 continue err = nf_put_var_int(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_int(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_int(var_type(i), + var_rank(i), + index, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT) 7 continue err = nf_put_var_int(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var_real() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ real value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) err = nf_put_var_real(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_real(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_real(var_type(i), + var_rank(i), + index, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_REAL) 4 continue err = nf_put_var_real(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_real(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_real(var_type(i), + var_rank(i), + index, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_REAL) 7 continue err = nf_put_var_real(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var_double() implicit none #include "tests.inc" integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ doubleprecision value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) err = nf_put_var_double(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_double(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_double(var_type(i), + var_rank(i), + index, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_DOUBLE) 4 continue err = nf_put_var_double(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_double(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_double(var_type(i), + var_rank(i), + index, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_DOUBLE) 7 continue err = nf_put_var_double(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vara_text() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ character value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_text(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_text(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_text(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_text(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_text(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_text(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= char(int(hash_text(var_type(i), + var_rank(i), index, + NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_TEXT) 7 continue err = nf_put_vara_text(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_vara_int1() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT1_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_int1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_int1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_int1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_int1(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_int1(var_type(i), + var_rank(i), index, + NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT1) 7 continue err = nf_put_vara_int1(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_vara_int2() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT2_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int2(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_int2(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_int2(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int2(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_int2(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_int2(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_int2(var_type(i), + var_rank(i), index, + NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT2) 7 continue err = nf_put_vara_int2(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif subroutine test_nf_put_vara_int() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ integer value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_int(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_int(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_int(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_int(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_int(var_type(i), + var_rank(i), index, + NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT) 7 continue err = nf_put_vara_int(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vara_real() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ real value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_real(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_real(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_real(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_real(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_real(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_real(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_real(var_type(i), + var_rank(i), index, + NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_REAL) 7 continue err = nf_put_vara_real(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vara_double() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ doubleprecision value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_double(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_double(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_double(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_double(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_double(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_double(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_double(var_type(i), + var_rank(i), index, + NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_DOUBLE) 7 continue err = nf_put_vara_double(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vars_text() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ character value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_text(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_text(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index2, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_TEXT) 9 continue err = nf_put_vars_text(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_vars_int1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT1_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_int1(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_int1(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_int1(var_type(i), + var_rank(i), + index2, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT1) 9 continue err = nf_put_vars_int1(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_vars_int2() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT2_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_int2(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_int2(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_int2(var_type(i), + var_rank(i), + index2, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT2) 9 continue err = nf_put_vars_int2(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif subroutine test_nf_put_vars_int() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ integer value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_int(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_int(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_int(var_type(i), + var_rank(i), + index2, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT) 9 continue err = nf_put_vars_int(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_vars_real() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ real value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_real(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_real(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_real(var_type(i), + var_rank(i), + index2, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_REAL) 9 continue err = nf_put_vars_real(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_vars_double() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ doubleprecision value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_double(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_double(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_double(var_type(i), + var_rank(i), + index2, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_DOUBLE) 9 continue err = nf_put_vars_double(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_varm_text() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ character value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_text(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_text(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index2, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_TEXT) 11 continue err = nf_put_varm_text(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_varm_int1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT1_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_int1(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_int1(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_int1(var_type(i), + var_rank(i), + index2, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT1) 11 continue err = nf_put_varm_int1(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_varm_int2() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT2_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_int2(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_int2(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_int2(var_type(i), + var_rank(i), + index2, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT2) 11 continue err = nf_put_varm_int2(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif subroutine test_nf_put_varm_int() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ integer value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_int(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_int(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_int(var_type(i), + var_rank(i), + index2, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT) 11 continue err = nf_put_varm_int(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_varm_real() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ real value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_real(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_real(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_real(var_type(i), + var_rank(i), + index2, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_REAL) 11 continue err = nf_put_varm_real(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_varm_double() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ doubleprecision value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_double(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_double(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_double(var_type(i), + var_rank(i), + index2, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_DOUBLE) 11 continue err = nf_put_varm_double(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_att_text() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err character value(MAX_NELS) err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('NF_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (ATT_TYPE(j,i) .eq. NF_CHAR) then if (.not.(ATT_LEN(j,i) .le. MAX_NELS)) + stop 2 err = nf_put_att_text(BAD_ID, i, + ATT_NAME(j,i), ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_text(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, k = 1, ATT_LEN(j,i) value(k) = char(int(hash(ATT_TYPE(j,i), -1, k))) 3 continue err = nf_put_att_text(ncid, i, ATT_NAME(j,i), + ATT_LEN(j,i), value) if (err .ne. 0) + call error(NF_strerror(err)) end if 2 continue 1 continue call check_atts_text(ncid) err = NF_close(ncid) if (err .ne. 0) + call errore('NF_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_att_int1() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer ndx(1) integer err NF_INT1_T value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_int1(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_int1(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_int1(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_int1(ATT_TYPE(j,i), -1, ndx, + NFT_INT1) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_INT1) 3 continue err = nf_put_att_int1(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_int1(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_att_int2() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer ndx(1) integer err NF_INT2_T value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_int2(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_int2(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_int2(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_int2(ATT_TYPE(j,i), -1, ndx, + NFT_INT2) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_INT2) 3 continue err = nf_put_att_int2(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_int2(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif subroutine test_nf_put_att_int() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer ndx(1) integer err integer value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_int(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_int(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_int(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_int(ATT_TYPE(j,i), -1, ndx, + NFT_INT) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_INT) 3 continue err = nf_put_att_int(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_int(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_att_real() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer ndx(1) integer err real value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_real(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_real(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_real(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_real(ATT_TYPE(j,i), -1, ndx, + NFT_REAL) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_REAL) 3 continue err = nf_put_att_real(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_real(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_att_double() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer ndx(1) integer err doubleprecision value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_double(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_double(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_double(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_double(ATT_TYPE(j,i), -1, ndx, + NFT_DOUBLE) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_DOUBLE) 3 continue err = nf_put_att_double(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_double(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end netcdf-fortran-4.6.3+ds/nf_test/tst03_f77_v2.F0000664000175000017500000001122615205004070021041 0ustar alastairalastairC This is part of netCDF, Copyright 2006, UCAR C This test program uses the fortran 77 v2 API to create a simple C data file with some phony data in it. This program was originally C based on one contributed by Jeremy Kepner, C jvkepner@astro.Princeton.EDU. C Also test the char array bug reported in C https://github.com/Unidata/netcdf-fortran/issues/329. C This program will bail out in the event of a netcdf error. C Ed Hartnett, 2009 C MODS C Leon Benjamin, 2022 -- Add test multi-dimensional char variables PROGRAM tst_f77_v2 USE tests implicit none INTEGER n_dim, x_dim, y_dim, z_dim PARAMETER(n_dim = 3, x_dim = 20, y_dim = 10, z_dim = 5) INTEGER dim_array(n_dim) INTEGER start(n_dim), count(n_dim) integer char_len parameter(char_len = 14) character*14 char_string(2) INTEGER start_1d(2), count_1d(2) INTEGER ncid, errcode INTEGER x_id, y_id, z_id, arr_id, char_id, char_dim_id REAL array(x_dim,y_dim,z_dim) INTEGER i,j,k character*10 char_dim_name_in integer char_dim_size_in character*11 char_var_name_in integer var_type_in, nvdims_in integer vdims_in(3) integer natts_in character*14 char_string_in(2) integer char_len_in char_len_in = 14 C Put something into the array. DO i=1,x_dim DO j=1,y_dim DO k=1,z_dim array(i,j,k) = (i-1) + x_dim*(j-1) + x_dim*y_dim*(k-1) ENDDO ENDDO ENDDO C Put something into the character string. char_string(1) = 'dirty_old_town' char_string(2) = 'clean_new_town' print *, '' print *, ' *** Testing netCDF v2 api for F77.' C Create file. ncid = NCCRE('tst03_f77_v2.nc', NCCLOB, errcode) if (errcode .ne. 0) stop 2 C Create Dimensions for floating point data. x_id = NCDDEF(ncid, 'X', x_dim, errcode) y_id = NCDDEF(ncid, 'Y', y_dim, errcode) z_id = NCDDEF(ncid, 'Z', z_dim, errcode) C Assign dimensions to array. dim_array(1) = z_id dim_array(2) = y_id dim_array(3) = x_id C Create a float variable. arr_id = NCVDEF(ncid, 'array', NCFLOAT, n_dim, dim_array, errcode) if (errcode .ne. 0) stop 2 C Create Dimension for char array. char_dim_id = NCDDEF(ncid, 'string_len', char_len, errcode) if (errcode .ne. 0) stop 2 dim_array(1) = char_dim_id C Create Dimension for char array. dim_array(2) = NCDDEF(ncid, 'list_size', 2, errcode) if (errcode .ne. 0) stop 2 char_id = NCVDEF(ncid, 'Dublin_song', NCCHAR, 2, dim_array, & errcode) if (errcode .ne. 0) stop 2 C Leave define mode. CALL NCENDF(ncid, errcode) if (errcode .ne. 0) stop 2 C Write float data to file. start(1) = 1 start(2) = 1 start(3) = 1 count(1) = z_dim count(2) = y_dim count(3) = x_dim CALL NCVPT(ncid, arr_id, start, count, array, errcode) if (errcode .ne. 0) stop 2 C Write char data to file. start_1d(1) = 1 count_1d(1) = char_len start_1d(2) = 1 count_1d(2) = 2 CALL NCVPTC(ncid, char_id, start_1d, count_1d, char_string, & char_len*2, errcode) if (errcode .ne. 0) stop 2 C Close the file. CALL NCCLOS(ncid, errcode) if (errcode .ne. 0) stop 2 C Reopen the file. ncid = NCOPN('tst03_f77_v2.nc', NCNOWRIT, errcode) if (errcode .ne. 0) stop 2 C Learn about char array dimension. call NCDINQ(NCID, 4, char_dim_name_in, char_dim_size_in, errcode) if (errcode .ne. 0) stop 2 if (char_dim_size_in .ne. char_len) stop 3 if (char_dim_name_in .ne. 'string_len') stop 4 C Learn about the char array data. call NCVINQ(NCID, 2, char_var_name_in, var_type_in, nvdims_in, & vdims_in, natts_in, errcode) if (errcode .ne. 0) stop 2 if (char_var_name_in .ne. 'Dublin_song') stop 5 if (var_type_in .ne. NCCHAR) stop 6 if (nvdims_in .ne. 2) stop 7 if (vdims_in(1) .ne. 4) stop 8 if (natts_in .ne. 0) stop 9 C Read the data in the char array. start_1d(1) = 1 count_1d(1) = char_len start_1d(2) = 1 count_1d(2) = 2 char_len_in = char_len*2 CALL NCVGTC(ncid, char_id, start_1d, count_1d, char_string_in, & char_len_in, errcode) if (errcode .ne. 0) stop 2 if (char_string_in(1) .ne. 'dirty_old_town') stop 10 if (char_string_in(2) .ne. 'clean_new_town') stop 11 C Close the file. CALL NCCLOS(ncid, errcode) if (errcode .ne. 0) stop 2 print *, ' *** SUCCESS!' END netcdf-fortran-4.6.3+ds/nf_test/test_read.F0000664000175000017500000010405515205004070020747 0ustar alastairalastairC Copyright 1996-2019, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C Steve Emmerson, Ed Hartnett C Test nf_strerror. C Try on a bad error status. C Test for each defined error status. C subroutine test_nf_strerror() implicit none #include "tests.inc" integer number_of_messages parameter (number_of_messages = 27) integer i integer status(number_of_messages) character*80 message character*80 msg(number_of_messages) data status(1) / NF_NOERR/ data status(2) / NF_EBADID / data status(3) / NF_EEXIST / data status(4) / NF_EINVAL / data status(5) / NF_EPERM / data status(6) / NF_ENOTINDEFINE / data status(7) / NF_EINDEFINE / data status(8) / NF_EINVALCOORDS / data status(9) / NF_EMAXDIMS / data status(10) / NF_ENAMEINUSE / data status(11) / NF_ENOTATT / data status(12) / NF_EMAXATTS / data status(13) / NF_EBADTYPE / data status(14) / NF_EBADDIM / data status(15) / NF_EUNLIMPOS / data status(16) / NF_EMAXVARS / data status(17) / NF_ENOTVAR / data status(18) / NF_EGLOBAL / data status(19) / NF_ENOTNC / data status(20) / NF_ESTS / data status(21) / NF_EMAXNAME / data status(22) / NF_EUNLIMIT / data status(23) / NF_ENORECVARS / data status(24) / NF_ECHAR / data status(25) / NF_EEDGE / data status(26) / NF_ESTRIDE / data status(27) / NF_EBADNAME / data msg(1) / 'No error' / data msg(2) / 'NetCDF: Not a valid ID' / data msg(3) / 'NetCDF: File exists && NC_NOCLOBBER' / data msg(4) / 'NetCDF: Invalid argument' / data msg(5) / 'NetCDF: Write to read only' / data msg(6) / 'NetCDF: Operation not allowed in data mode' / data msg(7) / 'NetCDF: Operation not allowed in define mode' / data msg(8) / 'NetCDF: Index exceeds dimension bound' / data msg(9) / 'NetCDF: NC_MAX_DIMS exceeded' / data msg(10) / 'NetCDF: String match to name in use' / data msg(11) / 'NetCDF: Attribute not found' / data msg(12) / 'NetCDF: NC_MAX_ATTRS exceeded' / data msg(13) + / 'NetCDF: Not a valid data type or _FillValue type mismatch' / data msg(14) / 'NetCDF: Invalid dimension ID or name' / data msg(15) / 'NetCDF: NC_UNLIMITED in the wrong index' / data msg(16) / 'NetCDF: NC_MAX_VARS exceeded' / data msg(17) / 'NetCDF: Variable not found' / data msg(18) / 'NetCDF: Action prohibited on NC_GLOBAL varid' / data msg(19) / 'NetCDF: Unknown file format' / data msg(20) / 'NetCDF: In Fortran, string too short' / data msg(21) / 'NetCDF: NC_MAX_NAME exceeded' / data msg(22) / 'NetCDF: NC_UNLIMITED size already in use' / data msg(23) + / 'NetCDF: nc_rec op when there are no record vars' / data msg(24) + /'NetCDF: Attempt to convert between text & numbers'/ data msg(25) / 'NetCDF: Start+count exceeds dimension bound' / data msg(26) / 'NetCDF: Illegal stride' / data msg(27) / 'NetCDF: Name contains illegal characters' / C /* Try on a bad error status */ message = nf_strerror(-666) !/* should fail */ if (message(1:13) .ne. 'Unknown Error') + call errorc('nf_strerror on bad error status returned: ', + message) C /* Try on each legitimate error status */ do 1, i=1, number_of_messages message = nf_strerror(status(i)) if (message .ne. msg(i)) + call error('nf_strerror() should return "' // msg(i) // + '"') 1 continue end C Test nf_open. C If in read-only section of tests, C Try to open a non-existent netCDF file, check error return. C Open a file that is not a netCDF file, check error return. C Open a netCDF file with a bad mode argument, check error return. C Open a netCDF file with NF_NOWRITE mode, try to write, check error. C Try to open a netcdf twice, check whether returned netcdf ids different. C If in writable section of tests, C Open a netCDF file with NF_WRITE mode, write something, close it. C On exit, any open netCDF files are closed. subroutine test_nf_open() implicit none #include "tests.inc" integer err integer ncid integer ncid2 character TEMPFILE*8 integer unit51 C /* Create a non-netCDF file named 'temp.tmp' */ unit51 = 51 TEMPFILE = 'temp.tmp' OPEN(unit51, FILE=TEMPFILE) WRITE(51,*) 'text' CLOSE(51) C /* Try to open a nonexistent file */ err = nf_open('tooth-fairy.nc', NF_NOWRITE, ncid) !/* should fail */ if (err .eq. NF_NOERR) + call error('nf_open of nonexistent file should have failed') if (.not. NF_ISSYSERR(err)) + call error( + 'nf_open of nonexistent file should have returned system error') C /* Open a file that is not a netCDF file. */ err = nf_open(TEMPFILE, NF_NOWRITE, ncid) !/* should fail */ if (err .ne. NF_ENOTNC) + call errore('nf_open of non-netCDF file: ', err) C /* Open a netCDF file in read-only mode, check that write fails */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_redef(ncid) !/* should fail */ if (err .ne. NF_EPERM) + call error('nf_redef of read-only file should fail') C /* Opened OK, see if can open again and get a different netCDF ID */ err = nf_open(testfile, NF_NOWRITE, ncid2) if (err .ne. 0) then call errore('nf_open: ', err) else err = nf_close(ncid2) end if if (ncid2 .eq. ncid) + call error( + 'netCDF IDs for first and second nf_open calls should differ') if (.not. readonly) then !/* tests using netCDF scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid2) if (err .ne. 0) then call errore('nf_create: ', err) else err = nf_close(ncid2) end if err = nf_open(scratch, NF_WRITE, ncid2) if (err .ne. 0) then call errore('nf_open: ', err) else err = nf_close(ncid2) end if err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed', scratch) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end C C Test nf_close. C Try to close a netCDF file twice, check whether second close fails. C Try on bad handle, check error return. C Try in define mode and data mode. C / subroutine test_nf_close() implicit none #include "tests.inc" integer ncid integer err err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) C /* Close a netCDF file twice, second time should fail */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close failed: ', err) err = nf_close(ncid) if (err .ne. NF_EBADID) + call error('nf_close of closed file should have failed') C /* Try with a bad netCDF ID */ err = nf_close(BAD_ID) !/* should fail */ if (err .ne. NF_EBADID) + call errore( + 'nf_close with bad netCDF ID returned wrong error: ', + err) C /* Close in data mode */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close in data mode failed: ', err) if (.not. readonly) then !/* tests using netCDF scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) + call errore('nf_create: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close in define mode: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end if end C Test nf_inq. C Try on bad handle, check error return. C Try in data mode, check returned values. C Try asking for subsets of info. C If in writable section of tests, C Try in define mode, after adding an unlimited dimension, variable. C On exit, any open netCDF files are closed. subroutine test_nf_inq() implicit none #include "tests.inc" integer ncid integer ncid2 !/* for scratch netCDF dataset */ integer ndims1 !/* number of dimensions */ integer nvars1 !/* number of variables */ integer ngatts1 !/* number of global attributes */ integer recdim1 !/* id of unlimited dimension */ integer err integer ndims0 integer nvars0 integer ngatts0 integer recdim0 integer did integer vid err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) C /* Try on bad handle */ err = nf_inq(BAD_ID, ndims1, nvars1, ngatts1, recdim1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq(ncid, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq: ', err) else if (ndims1 .ne. NDIMS) then call errori('nf_inq: wrong number of dimensions returned: ', + ndims1) else if (nvars1 .ne. NVARS) then call errori('nf_inq: wrong number of variables returned: ', + nvars1) else if (ngatts1 .ne. NGATTS) then call errori( + 'nf_inq: wrong number of global atts returned: ', + ngatts1) else if (recdim1 .ne. RECDIM) then call errori('nf_inq: wrong record dimension ID returned: ', + recdim1) end if if (.not. readonly) then !/* tests using netCDF scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid2) if (err .ne. 0) then call errore('nf_create: ', err) else !/* add dim, var, gatt, check inq */ err = nf_enddef(ncid2) !/* enter data mode */ err = nf_inq(ncid2, ndims0, nvars0, ngatts0, recdim0) if (err .ne. 0) + call errore('nf_inq: ', err) err = nf_redef(ncid2) !/* enter define mode */ C /* Check that inquire still works in define mode */ err = nf_inq(ncid2, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq in define mode: ', err) else if (ndims1 .ne. ndims0) then call errori('nf_inq in define mode: ndims1 wrong, ', + ndims1) else if (nvars1 .ne. nvars0) then call errori('nf_inq in define mode: nvars1 wrong, ', + nvars1) else if (ngatts1 .ne. ngatts0) then call errori( + 'nf_inq in define mode: ngatts wrong, ', ngatts1) else if (recdim1 .ne. recdim0) then call errori('nf_inq in define mode: recdim1 wrong, ', + recdim1) end if C /* Add dim, var, global att */ err = nf_def_dim(ncid2, 'inqd', 1, did) if (err .ne. 0) + call errore('nf_def_dim: ', err) err = nf_def_var(ncid2, 'inqv', NF_FLOAT, 0, (/0/), vid) if (err .ne. 0) + call errore('nf_def_var: ', err) err = nf_put_att_text(ncid2, NF_GLOBAL, 'inqa', + len('stuff'), 'stuff') if (err .ne. 0) + call errore('nf_put_att_text: ', err) C /* Make sure nf_inq sees the additions while in define mode */ err = nf_inq(ncid2, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq in define mode: ', err) else if (ndims1 .ne. ndims0 + 1) then call errori('nf_inq in define mode: ndims1 wrong, ', + ndims1) else if (nvars1 .ne. nvars0 + 1) then call errori('nf_inq in define mode: nvars wrong, ', + nvars1) else if (ngatts1 .ne. ngatts0 + 1) then call errori('nf_inq in define mode: ngatts1 wrong, ', + ngatts1) end if err = nf_enddef(ncid2) if (err .ne. 0) + call errore('nf_enddef: ', err) C /* Make sure nf_inq stills sees additions in data mode */ err = nf_inq(ncid2, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq failed in data mode: ',err) else if (ndims1 .ne. ndims0 + 1) then call errori('nf_inq in define mode: ndims1 wrong, ', + ndims1) else if (nvars1 .ne. nvars0 + 1) then call errori('nf_inq in define mode: nvars wrong, ', + nvars1) else if (ngatts1 .ne. ngatts0 + 1) then call errori('nf_inq in define mode: ngatts1 wrong, ', + ngatts1) end if err = nf_close(ncid2) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end if end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_natts() implicit none #include "tests.inc" integer ncid integer ngatts1 !/* number of global attributes */ integer err err = nf_inq_natts(BAD_ID, ngatts1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_natts(ncid, ngatts1) if (err .ne. 0) then call errore('nf_inq_natts: ', err) else if (ngatts1 .ne. NGATTS) then call errori( + 'nf_inq_natts: wrong number of global atts returned, ', + ngatts1) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_ndims() implicit none #include "tests.inc" integer ncid integer ndims1 integer err err = nf_inq_ndims(BAD_ID, ndims1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_ndims(ncid, ndims1) if (err .ne. 0) then call errore('nf_inq_ndims: ', err) else if (ndims1 .ne. NDIMS) then call errori('nf_inq_ndims: wrong number returned, ', ndims1) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_nvars() implicit none #include "tests.inc" integer ncid integer nvars1 integer err err = nf_inq_nvars(BAD_ID, nvars1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_nvars(ncid, nvars1) if (err .ne. 0) then call errore('nf_inq_nvars: ', err) else if (nvars1 .ne. NVARS) then call errori('nf_inq_nvars: wrong number returned, ', nvars1) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_unlimdim() implicit none #include "tests.inc" integer ncid integer unlimdim integer err err = nf_inq_unlimdim(BAD_ID, unlimdim) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_unlimdim(ncid, unlimdim) if (err .ne. 0) then call errore('nf_inq_unlimdim: ', err) else if (unlimdim .ne. RECDIM) then call errori('nf_inq_unlimdim: wrong number returned, ', + unlimdim) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_format() implicit none #include "tests.inc" integer ncid integer nformat integer err err = nf_inq_format(BAD_ID, nformat) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_format(ncid, nformat) if (err .ne. 0) then call errore('nf_inq_format: ', err) else if (nformat .ne. nf_format_classic .and. #ifdef ENABLE_CDF5 + nformat .ne. nf_format_cdf5 .and. #endif #ifdef USE_NETCDF4 + nformat .ne. nf_format_netcdf4 .and. #endif + nformat .ne. nf_format_64bit) then call errori('nf_inq_format: wrong format number returned, ', + nformat) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dimid() implicit none #include "tests.inc" integer ncid integer dimid integer i integer err err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_dimid(ncid, 'noSuch', dimid) if (err .ne. NF_EBADDIM) + call errore('bad dim name: ', err) do 1, i = 1, NDIMS err = nf_inq_dimid(BAD_ID, dim_name(i), dimid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dimid(ncid, dim_name(i), dimid) if (err .ne. 0) then call errore('nf_inq_dimid: ', err) else if (dimid .ne. i) then call errori('expected ', i) call errori('got ', dimid) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dim() implicit none #include "tests.inc" integer ncid integer i integer err character*(NF_MAX_NAME) name integer length err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NDIMS err = nf_inq_dim(BAD_ID, i, name, length) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dim(ncid, BAD_DIMID, name, length) if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_inq_dim(ncid, i, name, length) if (err .ne. 0) then call errore('nf_inq_dim: ', err) else if (dim_name(i) .ne. name) then call errorc('name unexpected: ', name) else if (dim_len(i) .ne. length) then call errori('size unexpected: ', length) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dimlen() implicit none #include "tests.inc" integer ncid integer i integer err integer length err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NDIMS err = nf_inq_dimlen(BAD_ID, i, length) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dimlen(ncid, BAD_DIMID, length) if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_inq_dimlen(ncid, i, length) if (err .ne. 0) then call errore('nf_inq_dimlen: ', err) else if (dim_len(i) .ne. length) then call errori('size unexpected: ', length) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dimname() implicit none #include "tests.inc" integer ncid integer i integer err character*(NF_MAX_NAME) name err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NDIMS err = nf_inq_dimname(BAD_ID, i, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dimname(ncid, BAD_DIMID, name) if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_inq_dimname(ncid, i, name) if (err .ne. 0) then call errore('nf_inq_dimname: ', err) else if (dim_name(i) .ne. name) then call errorc('name unexpected: ', name) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varid() implicit none #include "tests.inc" integer ncid integer vid integer i integer err err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_varid(ncid, 'noSuch', vid) if (err .ne. NF_ENOTVAR) + call errore('bad ncid: ', err) do 1, i = 1, NVARS err = nf_inq_varid(BAD_ID, var_name(i), vid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varid(ncid, var_name(i), vid) if (err .ne. 0) then call errore('nf_inq_varid: ', err) else if (vid .ne. i) then call errori('varid unexpected: ', vid) endif 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_var() implicit none #include "tests.inc" integer ncid integer i integer err character*(NF_MAX_NAME) name integer datatype integer ndims1 integer dimids(MAX_RANK) integer na err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_var(BAD_ID, i, name, datatype, ndims1, dimids, + na) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_var(ncid,BAD_VARID,name,datatype,ndims1,dimids, + na) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_var(ncid, i, name, datatype, ndims1, dimids, + na) if (err .ne. 0) then call errore('nf_inq_var: ', err) else if (var_name(i) .ne. name) then call errorc('name unexpected: ', name) else if (var_type(i) .ne. datatype) then call errori('type unexpected: ', datatype) else if (var_rank(i) .ne. ndims1) then call errori('ndims1 expected: ', ndims1) else if (.not.int_vec_eq(var_dimid(1,i),dimids,ndims1)) then call error('unexpected dimid') else if (var_natts(i) .ne. na) then call errori('natts unexpected: ', na) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_vardimid() implicit none #include "tests.inc" integer ncid integer i integer err integer dimids(MAX_RANK) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_vardimid(BAD_ID, i, dimids) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_vardimid(ncid, BAD_VARID, dimids) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_vardimid(ncid, i, dimids) if (err .ne. 0) then call errore('nf_inq_vardimid: ', err) else if (.not.int_vec_eq(var_dimid(1,i), dimids, + var_rank(i))) then call error('unexpected dimid') end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varname() implicit none #include "tests.inc" integer ncid integer i integer err character*(NF_MAX_NAME) name err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_varname(BAD_ID, i, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varname(ncid, BAD_VARID, name) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_varname(ncid, i, name) if (err .ne. 0) then call errore('nf_inq_varname: ', err) else if (var_name(i) .ne. name) then call errorc('name unexpected: ', name) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varnatts() implicit none #include "tests.inc" integer ncid integer i integer err integer na err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS ! start with global attributes err = nf_inq_varnatts(BAD_ID, i, na) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varnatts(ncid, BAD_VARID, na) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_varnatts(ncid, VARID(i), na) if (err .ne. 0) then call errore('nf_inq_varnatts: ', err) else if (NATTS(i) .ne. na) then ! works for global attributes call errori('natts unexpected: ', na) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varndims() implicit none #include "tests.inc" integer ncid integer i integer err integer ndims1 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_varndims(BAD_ID, i, ndims1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varndims(ncid, BAD_VARID, ndims1) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_varndims(ncid, i, ndims1) if (err .ne. 0) then call errore('nf_inq_varndims: ', err) else if (var_rank(i) .ne. ndims1) then call errori('ndims1 unexpected: ', ndims1) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_vartype() implicit none #include "tests.inc" integer ncid integer i integer err integer datatype err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_vartype(BAD_ID, i, datatype) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_vartype(ncid, BAD_VARID, datatype) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_vartype(ncid, i, datatype) if (err .ne. 0) then call errore('nf_inq_vartype: ', err) else if (var_type(i) .ne. datatype) then call errori('type unexpected: ', datatype) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_att() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer t integer n err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) err = nf_inq_att(BAD_ID, i, ATT_NAME(j,i), t, n) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_att(ncid, BAD_VARID, ATT_NAME(j,i), t, n) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_att(ncid, i, 'noSuch', t, n) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) err = nf_inq_att(ncid, i, ATT_NAME(j,i), t, n) if (err .ne. 0) then call error(nf_strerror(err)) else if (t .ne. ATT_TYPE(j,i)) + call error('type not that expected') if (n .ne. ATT_LEN(j,i)) + call error('length not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_attlen() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer len err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_attlen(ncid, i, 'noSuch', len) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) do 2, j = 1, NATTS(i) err = nf_inq_attlen(BAD_ID, i, ATT_NAME(j,i), len) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_attlen(ncid, BAD_VARID, ATT_NAME(j,i), len) if (err .ne. NF_ENOTVAR) + call errore('bad varid: ', err) err = nf_inq_attlen(ncid, i, ATT_NAME(j,i), len) if (err .ne. 0) then call error(nf_strerror(err)) else if (len .ne. ATT_LEN(j,i)) + call error('len not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_atttype() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer datatype err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_atttype(ncid, i, 'noSuch', datatype) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) do 2, j = 1, NATTS(i) err = nf_inq_atttype(BAD_ID, i, ATT_NAME(j,i), datatype) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_atttype(ncid, BAD_VARID, ATT_NAME(j,i), + datatype) if (err .ne. NF_ENOTVAR) + call errore('bad varid: ', err) err = nf_inq_atttype(ncid, i, ATT_NAME(j,i), datatype) if (err .ne. 0) then call error(nf_strerror(err)) else if (datatype .ne. ATT_TYPE(j,i)) + call error('type not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_attname() implicit none #include "tests.inc" integer ncid integer i integer j integer err character*(NF_MAX_NAME) name err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_attname(ncid, i, BAD_ATTNUM, name) if (err .ne. NF_ENOTATT) + call errore('Bad attribute number: ', err) err = nf_inq_attname(ncid, i, NATTS(i)+1, name) if (err .ne. NF_ENOTATT) + call errore('Bad attribute number: ', err) do 2, j = 1, NATTS(i) err = nf_inq_attname(BAD_ID, i, j, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_attname(ncid, BAD_VARID, j, name) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_attname(ncid, i, j, name) if (err .ne. 0) then call error(nf_strerror(err)) else if (ATT_NAME(j,i) .ne. name) + call error('name not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_attid() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer attnum err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_attid(ncid, i, 'noSuch', attnum) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) do 2, j = 1, NATTS(i) err = nf_inq_attid(BAD_ID, i, ATT_NAME(j,i), attnum) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_attid(ncid, BAD_VARID, ATT_NAME(j,i), + attnum) if (err .ne. NF_ENOTVAR) + call errore('bad varid: ', err) err = nf_inq_attid(ncid, i, ATT_NAME(j,i), attnum) if (err .ne. 0) then call error(nf_strerror(err)) else if (attnum .ne. j) + call error('attnum not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end netcdf-fortran-4.6.3+ds/nf_test/f03lib_f_interfaces.F900000775000175000017500000002056115205004070022737 0ustar alastairalastair! FORTRAN interfaces to the C utilties defined in fortlib.c ! ! Written by: Richard Weed, Ph.D ! Center for Advanced Vehicular Systems ! Mississippi State University ! rweed@cavs.msstate.edu ! License (and other Lawyer Language) ! This software is released under the Apache 2.0 Open Source License. The ! full text of the License can be viewed at : ! ! http:www.apache.org/licenses/LICENSE-2.0.html ! ! The author grants to the University Corporation for Atmospheric Research ! (UCAR), Boulder, CO, USA the right to revise and extend the software ! without restriction. However, the author retains all copyrights and ! intellectual property rights explicitly stated in or implied by the ! Apache license ! Version 1. June 2006 ! Unchanged for netCDF 4.1.1 !------------------------------- udexit -------------------------------------- Subroutine udexit(status) ! USE ISO_C_BINDING, ONLY: C_INT Implicit NONE Integer, Intent(IN) :: status Integer(KIND=C_INT) :: cstatus Interface Subroutine exit(status) BIND(C) USE ISO_C_BINDING, ONLY: C_INT Integer(KIND=C_INT), VALUE :: status End Subroutine exit End Interface cstatus = status Call exit(cstatus) End Subroutine udexit !------------------------------- udabort -------------------------------------- Subroutine udabort() USE ISO_C_BINDING Implicit NONE Interface Subroutine abort() BIND(C) End Subroutine abort End Interface Call abort() End Subroutine udabort !------------------------------- udrand ------------------------------------- Function udrand(iflag) RESULT(rannum) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Integer, Intent(IN) :: iflag Real(RK8) :: rannum Integer(KIND=C_INT) :: ciflag Real(KIND=C_DOUBLE) :: crannum Interface Function myrand(iflag) BIND(C) USE ISO_C_BINDING, ONLY: C_INT, C_DOUBLE Integer(KIND=C_INT), VALUE :: iflag Real(KIND=C_DOUBLE) :: myrand End Function myrand End Interface ciflag = iflag crannum = myrand(ciflag) rannum = crannum End Function udrand !------------------------------- udshift ------------------------------------- Function udshift(ivalue, amount) RESULT(shiftval) USE ISO_C_BINDING Implicit NONE Integer, Intent(IN) :: ivalue, amount Integer(KIND=C_INT) :: cvalue, camount Integer :: shiftval Integer(KIND=C_INT) :: cshiftval Interface Function myshift(cvalue, camount) BIND(C) USE ISO_C_BINDING, ONLY: C_INT Integer(KIND=C_INT), VALUE :: cvalue, camount Integer(KIND=C_INT) :: myshift End Function myshift End Interface cvalue = ivalue camount = amount cshiftval = myshift(cvalue, camount) shiftval = cshiftval End Function udshift !------------------------------- ignorefpe ---------------------------------- Subroutine ignorefpe(idoit) USE ISO_C_BINDING Implicit NONE Integer, Intent(IN) :: idoit Integer(KIND=C_INT) :: cdoit Interface Subroutine nc_ignorefpe(cdoit) BIND(C) USE ISO_C_BINDING, ONLY: C_INT Integer(KIND=C_INT), VALUE :: cdoit End Subroutine nc_ignorefpe End Interface cdoit = idoit Call nc_ignorefpe(cdoit) End Subroutine ignorefpe !------------------------------- max_uchar ---------------------------------- Function max_uchar() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_uchar() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_uchar End Function cmax_uchar End Interface ccmax = cmax_uchar() cmax = ccmax End Function max_uchar !------------------------------- min_schar ---------------------------------- Function min_schar() RESULT(cmin) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmin Real(KIND=C_DOUBLE) :: ccmin Interface Function cmin_schar() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmin_schar End Function cmin_schar End Interface ccmin = cmin_schar() cmin = ccmin End Function min_schar !------------------------------- max_schar ---------------------------------- Function max_schar() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_schar() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_schar End Function cmax_schar End Interface ccmax = cmax_schar() cmax = ccmax End Function max_schar !------------------------------- min_short ---------------------------------- Function min_short() RESULT(cmin) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmin Real(KIND=C_DOUBLE) :: ccmin Interface Function cmin_short() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmin_short End Function cmin_short End Interface ccmin = cmin_short() cmin = ccmin End Function min_short !------------------------------- max_short ---------------------------------- Function max_short() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_short() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_short End Function cmax_short End Interface ccmax = cmax_short() cmax = ccmax End Function max_short !------------------------------- min_int ---------------------------------- Function min_int() RESULT(cmin) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmin Real(KIND=C_DOUBLE) :: ccmin Interface Function cmin_int() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmin_int End Function cmin_int End Interface ccmin = cmin_int() cmin = ccmin End Function min_int !------------------------------- max_int ---------------------------------- Function max_int() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_int() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_int End Function cmax_int End Interface ccmax = cmax_int() cmax = ccmax End Function max_int !------------------------------- min_long ---------------------------------- Function min_long() RESULT(cmin) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmin Real(KIND=C_DOUBLE) :: ccmin Interface Function cmin_long() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmin_long End Function cmin_long End Interface ccmin = cmin_long() cmin = ccmin End Function min_long !------------------------------- max_long ---------------------------------- Function max_long() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_long() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_long End Function cmax_long End Interface ccmax = cmax_long() cmax = ccmax End Function max_long !------------------------------- max_float ---------------------------------- Function max_float() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_float() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_float End Function cmax_float End Interface ccmax = cmax_float() cmax = ccmax End Function max_float !------------------------------- max_double ---------------------------------- Function max_double() RESULT(cmax) USE ISO_C_BINDING Implicit NONE Integer, Parameter :: RK8=SELECTED_REAL_KIND(P=13, R=307) ! double Real(RK8) :: cmax Real(KIND=C_DOUBLE) :: ccmax Interface Function cmax_double() BIND(C) USE ISO_C_BINDING, ONLY: C_DOUBLE Real(KIND=C_DOUBLE) :: cmax_double End Function cmax_double End Interface ccmax = cmax_double() cmax = ccmax End Function max_double netcdf-fortran-4.6.3+ds/nf_test/test_write.F0000664000175000017500000013453415205004070021173 0ustar alastairalastairC Copyright 1996-2019, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C Steve Emmerson, Ed Hartnett C Test nf_create C For mode in NF_NOCLOBBER, NF_CLOBBER do: C create netcdf file 'scratch.nc' with no data, close it C test that it can be opened, do nf_inq to check nvars = 0, etc. C Try again in NF_NOCLOBBER mode, check error return C On exit, delete this file subroutine test_nf_create() implicit none #include "tests.inc" integer clobber !/* 0 for NF_NOCLOBBER, 1 for NF_CLOBBER */ integer err integer ncid integer ndims1 !/* number of dimensions */ integer nvars1 !/* number of variables */ integer ngatts1 !/* number of global attributes */ integer recdim1 !/* id of unlimited dimension */ integer flags flags = NF_NOCLOBBER do 1, clobber = 0, 1 err = nf_create(scratch, flags, ncid) if (err .ne. 0) then call errore('nf_create: ', err) end if err = nf_close(ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if err = nf_open(scratch, NF_NOWRITE, ncid) if (err .ne. 0) then call errore('nf_open: ', err) end if err = nf_inq(ncid, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq: ', err) else if (ndims1 .ne. 0) then call errori( + 'nf_inq: wrong number of dimensions returned, ', + ndims1) else if (nvars1 .ne. 0) then call errori( + 'nf_inq: wrong number of variables returned, ', + nvars1) else if (ngatts1 .ne. 0) then call errori( + 'nf_inq: wrong number of global atts returned, ', + ngatts1) else if (recdim1 .ge. 1) then call errori( + 'nf_inq: wrong record dimension ID returned, ', + recdim1) end if err = nf_close(ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if flags = NF_CLOBBER 1 continue err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. NF_EEXIST) then call errore('attempt to overwrite file: ', err) end if err = nf_delete(scratch) if (err .ne. 0) then call errori('delete of scratch file failed: ', err) end if end C Test nf_redef C (In fact also tests nf_enddef - called from test_nf_enddef) C BAD_ID C attempt redef (error) & enddef on read-only file C create file, define dims & vars. C attempt put var (error) C attempt redef (error) & enddef. C put vars C attempt def new dims (error) C redef C def new dims, vars. C put atts C enddef C put vars C close C check file: vars & atts subroutine test_nf_redef() implicit none #include "tests.inc" integer title_len parameter (title_len = 9) integer ncid !/* netcdf id */ integer dimid !/* dimension id */ integer vid !/* variable id */ integer err character*(title_len) title doubleprecision var character*(NF_MAX_NAME) name integer length title = 'Not funny' C /* BAD_ID tests */ err = nf_redef(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_enddef(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* read-only tests */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_redef(ncid) if (err .ne. NF_EPERM) + call errore('nf_redef in NF_NOWRITE mode: ', err) err = nf_enddef(ncid) if (err .ne. NF_ENOTINDEFINE) + call errore('nf_redef in NF_NOWRITE mode: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* tests using scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_inq_varid(ncid, 'd', vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) var = 1.0 err = nf_put_var1_double(ncid, vid, (/0/), var) if (err .ne. NF_EINDEFINE) + call errore('nf_put_var... in define mode: ', err) err = nf_redef(ncid) if (err .ne. NF_EINDEFINE) + call errore('nf_redef in define mode: ', err) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncid) err = nf_def_dim(ncid, 'abc', 8, dimid) if (err .ne. NF_ENOTINDEFINE) + call errore('nf_def_dim in define mode: ', err) err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) err = nf_def_dim(ncid, 'abc', 8, dimid) if (err .ne. 0) + call errore('nf_def_dim: ', err) err = nf_def_var(ncid, 'abc', NF_INT, 0, (/0/), vid) if (err .ne. 0) + call errore('nf_def_var: ', err) err = nf_put_att_text(ncid, NF_GLOBAL, 'title', len(title), + title) if (err .ne .0) + call errore('nf_put_att_text: ', err) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) var = 1.0 err = nf_put_var1_double(ncid, vid, (/0/), var) if (err .ne. 0) + call errore('nf_put_var1_double: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* check scratch file written as expected */ call check_file(scratch) err = nf_open(scratch, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_dim(ncid, dimid, name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (name .ne. "abc") + call errori('Unexpected dim name in netCDF ', ncid) if (length .ne. 8) + call errori('Unexpected dim length: ', length) err = nf_get_var1_double(ncid, vid, (/0/), var) if (err .ne. 0) + call errore('nf_get_var1_double: ', err) if (var .ne. 1.0) + call errori( + 'nf_get_var1_double: unexpected value in netCDF ', ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete failed for netCDF: ', err) end C Test nf_enddef C Simply calls test_nf_redef which tests both nf_redef & nf_enddef subroutine test_nf_enddef() implicit none #include "tests.inc" call test_nf_redef end C Test nf_sync C try with bad handle, check error C try in define mode, check error C try writing with one handle, reading with another on same netCDF subroutine test_nf_sync() implicit none #include "tests.inc" integer ncidw !/* netcdf id for writing */ integer ncidr !/* netcdf id for reading */ integer err C /* BAD_ID test */ err = nf_sync(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* create scratch file & try nf_sync in define mode */ err = nf_create(scratch, NF_NOCLOBBER, ncidw) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_sync(ncidw) if (err .ne. NF_EINDEFINE) + call errore('nf_sync called in define mode: ', err) C /* write using same handle */ call def_dims(ncidw) call def_vars(ncidw) call put_atts(ncidw) err = nf_enddef(ncidw) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncidw) err = nf_sync(ncidw) if (err .ne. 0) + call errore('nf_sync of ncidw failed: ', err) C /* open another handle, nf_sync, read (check) */ err = nf_open(scratch, NF_NOWRITE, ncidr) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_sync(ncidr) if (err .ne. 0) + call errore('nf_sync of ncidr failed: ', err) call check_dims(ncidr) call check_atts(ncidr) call check_vars(ncidr) C /* close both handles */ err = nf_close(ncidr) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_close(ncidw) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_abort C try with bad handle, check error C try in define mode before anything written, check that file was deleted C try after nf_enddef, nf_redef, define new dims, vars, atts C try after writing variable subroutine test_nf_abort() implicit none #include "tests.inc" integer ncid !/* netcdf id */ integer err integer ndims1 integer nvars1 integer ngatts1 integer recdim1 C /* BAD_ID test */ err = nf_abort(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: status = ', err) C /* create scratch file & try nf_abort in define mode */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_abort(ncid) if (err .ne. 0) + call errore('nf_abort of ncid failed: ', err) err = nf_close(ncid) !/* should already be closed */ if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_delete(scratch) !/* should already be deleted */ if (err .eq. 0) + call errori('scratch file should not exist: ', err) C create scratch file C do nf_enddef & nf_redef C define new dims, vars, atts C try nf_abort: should restore previous state (no dims, vars, atts) err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_abort(ncid) if (err .ne. 0) + call errore('nf_abort of ncid failed: ', err) err = nf_close(ncid) !/* should already be closed */ if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(scratch, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq (ncid, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) + call errore('nf_inq: ', err) if (ndims1 .ne. 0) + call errori('ndims1 should be ', 0) if (nvars1 .ne. 0) + call errori('nvars1 should be ', 0) if (ngatts1 .ne. 0) + call errori('ngatts1 should be ', 0) err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* try nf_abort in data mode - should just close */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncid) err = nf_abort(ncid) if (err .ne. 0) + call errore('nf_abort of ncid failed: ', err) err = nf_close(ncid) !/* should already be closed */ if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) call check_file(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_def_dim C try with bad netCDF handle, check error C try in data mode, check error C check that returned id is one more than previous id C try adding same dimension twice, check error C try with illegal sizes, check error C make sure unlimited size works, shows up in nf_inq_unlimdim C try to define a second unlimited dimension, check error subroutine test_nf_def_dim() implicit none #include "tests.inc" integer ncid integer err !/* status */ integer i integer dimid !/* dimension id */ integer length C /* BAD_ID test */ err = nf_def_dim(BAD_ID, 'abc', 8, dimid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* data mode test */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_def_dim(ncid, 'abc', 8, dimid) if (err .ne. NF_ENOTINDEFINE) + call errore('bad ncid: ', err) C /* define-mode tests: unlimited dim */ err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) err = nf_def_dim(ncid, dim_name(1), NF_UNLIMITED, dimid) if (err .ne. 0) + call errore('nf_def_dim: ', err) if (dimid .ne. 1) + call errori('Unexpected dimid: ', dimid) err = nf_inq_unlimdim(ncid, dimid) if (err .ne. 0) + call errore('nf_inq_unlimdim: ', err) if (dimid .ne. RECDIM) + call error('Unexpected recdim1: ') err = nf_inq_dimlen(ncid, dimid, length) if (length .ne. 0) + call errori('Unexpected length: ', 0) err = nf_def_dim(ncid, 'abc', NF_UNLIMITED, dimid) if (err .ne. NF_EUNLIMIT) + call errore('2nd unlimited dimension: ', err) C /* define-mode tests: remaining dims */ do 1, i = 2, NDIMS err = nf_def_dim(ncid, dim_name(i-1), dim_len(i), + dimid) if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) err = nf_def_dim(ncid, BAD_NAME, dim_len(i), dimid) if (err .ne. NF_EBADNAME) + call errore('bad name: ', err) err = nf_def_dim(ncid, dim_name(i), NF_UNLIMITED-1, + dimid) if (err .ne. NF_EDIMSIZE) + call errore('bad size: ', err) err = nf_def_dim(ncid, dim_name(i), dim_len(i), dimid) if (err .ne. 0) + call errore('nf_def_dim: ', err) if (dimid .ne. i) + call errori('Unexpected dimid: ', 0) 1 continue C /* Following just to expand unlimited dim */ call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncid) C /* Check all dims */ call check_dims(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_rename_dim C try with bad netCDF handle, check error C check that proper rename worked with nf_inq_dim C try renaming to existing dimension name, check error C try with bad dimension handle, check error subroutine test_nf_rename_dim() implicit none #include "tests.inc" integer ncid integer err !/* status */ character*(NF_MAX_NAME) name C /* BAD_ID test */ err = nf_rename_dim(BAD_ID, 1, 'abc') if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* main tests */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) err = nf_rename_dim(ncid, BAD_DIMID, 'abc') if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_rename_dim(ncid, 3, 'abc') if (err .ne. 0) + call errore('nf_rename_dim: ', err) err = nf_inq_dimname(ncid, 3, name) if (name .ne. 'abc') + call errorc('Unexpected name: ', name) err = nf_rename_dim(ncid, 1, 'abc') if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_def_var C try with bad netCDF handle, check error C try with bad name, check error C scalar tests: C check that proper define worked with nf_inq_var C try redefining an existing variable, check error C try with bad datatype, check error C try with bad number of dimensions, check error C try in data mode, check error C check that returned id is one more than previous id C try with bad dimension ids, check error subroutine test_nf_def_var() implicit none #include "tests.inc" integer ncid integer vid integer err !/* status */ integer i integer ndims1 integer na character*(NF_MAX_NAME) name integer dimids(MAX_RANK) integer datatype C /* BAD_ID test */ err = nf_def_var(BAD_ID, 'abc', NF_SHORT, 0, dimids, vid) if (err .ne. NF_EBADID) + call errore('bad ncid: status = ', err) C /* scalar tests */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_def_var(ncid, 'abc', NF_SHORT, 0, dimids, vid) if (err .ne. 0) + call errore('nf_def_var: ', err) err = nf_inq_var(ncid, vid, name, datatype, ndims1, dimids, + na) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. 'abc') + call errorc('Unexpected name: ', name) if (datatype .ne. NF_SHORT) + call error('Unexpected datatype') if (ndims1 .ne. 0) + call error('Unexpected rank') err = nf_def_var(ncid, BAD_NAME, NF_SHORT, 0, dimids, vid) if (err .ne. NF_EBADNAME) + call errore('bad name: ', err) err = nf_def_var(ncid, 'abc', NF_SHORT, 0, dimids, vid) if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) err = nf_def_var(ncid, 'ABC', BAD_TYPE, -1, dimids, vid) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) err = nf_def_var(ncid, 'ABC', NF_SHORT, -1, dimids, vid) if (err .ne. NF_EINVAL) + call errore('bad rank: ', err) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_def_var(ncid, 'ABC', NF_SHORT, 0, dimids, vid) if (err .ne. NF_ENOTINDEFINE) + call errore('nf_def_var called in data mode: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', scratch) C /* general tests using global vars */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) do 1, i = 1, NVARS err = nf_def_var(ncid, var_name(i), var_type(i), + var_rank(i), var_dimid(1,i), vid) if (err .ne. 0) + call errore('nf_def_var: ', err) if (vid .ne. i) + call error('Unexpected varid') 1 continue C /* try bad dim ids */ dimids(1) = BAD_DIMID err = nf_def_var(ncid, 'abc', NF_SHORT, 1, dimids, vid) if (err .ne. NF_EBADDIM) + call errore('bad dim ids: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', scratch) end C Test nf_rename_var C try with bad netCDF handle, check error C try with bad variable handle, check error C try renaming to existing variable name, check error C check that proper rename worked with nf_inq_varid C try in data mode, check error subroutine test_nf_rename_var() implicit none #include "tests.inc" integer ncid integer vid integer err integer i character*(NF_MAX_NAME) name err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_rename_var(ncid, BAD_VARID, 'newName') if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) call def_dims(ncid) call def_vars(ncid) C /* Prefix "new_" to each name */ do 1, i = 1, NVARS err = nf_rename_var(BAD_ID, i, 'newName') if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_rename_var(ncid, i, var_name(NVARS)) if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) name = 'new_' // var_name(i) err = nf_rename_var(ncid, i, name) if (err .ne. 0) + call errore('nf_rename_var: ', err) err = nf_inq_varid(ncid, name, vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) if (vid .ne. i) + call error('Unexpected varid') 1 continue C /* Change to data mode */ C /* Try making names even longer. Then restore original names */ err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 2, i = 1, NVARS name = 'even_longer_' // var_name(i) err = nf_rename_var(ncid, i, name) if (err .ne. NF_ENOTINDEFINE) + call errore('longer name in data mode: ', err) err = nf_rename_var(ncid, i, var_name(i)) if (err .ne. 0) + call errore('nf_rename_var: ', err) err = nf_inq_varid(ncid, var_name(i), vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) if (vid .ne. i) + call error('Unexpected varid') 2 continue call put_vars(ncid) call check_vars(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', scratch) end C Test nf_copy_att C try with bad source or target netCDF handles, check error C try with bad source or target variable handle, check error C try with nonexisting attribute, check error C check that NF_GLOBAL variable for source or target works C check that new attribute put works with target in define mode C check that old attribute put works with target in data mode C check that changing type and length of an attribute work OK C try with same ncid for source and target, different variables C try with same ncid for source and target, same variable subroutine test_nf_copy_att() implicit none #include "tests.inc" integer ncid_in integer ncid_out integer vid integer err integer i integer j character*(NF_MAX_NAME) name !/* of att */ integer datatype !/* of att */ integer length !/* of att */ character*1 value err = nf_open(testfile, NF_NOWRITE, ncid_in) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_create(scratch, NF_NOCLOBBER, ncid_out) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid_out) call def_vars(ncid_out) do 1, i = 0, NVARS vid = VARID(i) do 2, j = 1, NATTS(i) name = ATT_NAME(j,i) err = nf_copy_att(ncid_in, BAD_VARID, name, ncid_out, + vid) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_copy_att(ncid_in, vid, name, ncid_out, + BAD_VARID) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_copy_att(BAD_ID, vid, name, ncid_out, vid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_copy_att(ncid_in, vid, name, BAD_ID, vid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_copy_att(ncid_in, vid, 'noSuch', ncid_out, vid) if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) err = nf_copy_att(ncid_in, vid, name, ncid_out, vid) if (err .ne. 0) + call errore('nf_copy_att: ', err) err = nf_copy_att(ncid_out, vid, name, ncid_out, vid) if (err .ne. 0) + call errore('source = target: ', err) 2 continue 1 continue err = nf_close(ncid_in) if (err .ne. 0) + call errore('nf_close: ', err) C /* Close scratch. Reopen & check attributes */ err = nf_close(ncid_out) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_open(scratch, NF_WRITE, ncid_out) if (err .ne. 0) + call errore('nf_open: ', err) call check_atts(ncid_out) C change to define mode C define single char. global att. ':a' with value 'A' C This will be used as source for following copies err = nf_redef(ncid_out) if (err .ne. 0) + call errore('nf_redef: ', err) err = nf_put_att_text(ncid_out, NF_GLOBAL, 'a', 1, 'A') if (err .ne. 0) + call errore('nf_put_att_text: ', err) C change to data mode C Use scratch as both source & dest. C try copy to existing att. change type & decrease length C rename 1st existing att of each var (if any) 'a' C if this att. exists them copy ':a' to it err = nf_enddef(ncid_out) if (err .ne. 0) + call errore('nf_enddef: ', err) do 3, i = 1, NVARS if (NATTS(i) .gt. 0 .and. ATT_LEN(1,i) .gt. 0) then err = nf_rename_att(ncid_out, i, att_name(1,i), 'a') if (err .ne. 0) + call errore('nf_rename_att: ', err) err = nf_copy_att(ncid_out, NF_GLOBAL, 'a', ncid_out, + i) if (err .ne. 0) + call errore('nf_copy_att: ', err) end if 3 continue err = nf_close(ncid_out) if (err .ne. 0) + call errore('nf_close: ', err) C /* Reopen & check */ err = nf_open(scratch, NF_WRITE, ncid_out) if (err .ne. 0) + call errore('nf_open: ', err) do 4, i = 1, NVARS if (NATTS(i) .gt. 0 .and. ATT_LEN(1,i) .gt. 0) then err = nf_inq_att(ncid_out, i, 'a', datatype, length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. NF_CHAR) + call error('Unexpected type') if (length .ne. 1) + call error('Unexpected length') err = nf_get_att_text(ncid_out, i, 'a', value) if (err .ne. 0) + call errore('nf_get_att_text: ', err) if (value .ne. 'A') + call error('Unexpected value') end if 4 continue err = nf_close(ncid_out) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed', scratch) end C Test nf_rename_att C try with bad netCDF handle, check error C try with bad variable handle, check error C try with nonexisting att name, check error C try renaming to existing att name, check error C check that proper rename worked with nf_inq_attid C try in data mode, check error subroutine test_nf_rename_att() implicit none #include "tests.inc" integer ncid integer vid integer err integer i integer j integer k integer attnum character*(NF_MAX_NAME) atnam character*(NF_MAX_NAME) name character*(NF_MAX_NAME) oldname character*(NF_MAX_NAME) newname integer nok !/* count of valid comparisons */ integer datatype integer attyp integer length integer attlength integer ndx(1) character*(MAX_NELS) text doubleprecision value(MAX_NELS) doubleprecision expect nok = 0 err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_rename_att(ncid, BAD_VARID, 'abc', 'newName') if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) do 1, i = 0, NVARS vid = VARID(i) do 2, j = 1, NATTS(i) atnam = ATT_NAME(j,i) err = nf_rename_att(BAD_ID, vid, atnam, 'newName') if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_rename_att(ncid, vid, 'noSuch', 'newName') if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) newname = 'new_' // atnam err = nf_rename_att(ncid, vid, atnam, newname) if (err .ne. 0) + call errore('nf_rename_att: ', err) err = nf_inq_attid(ncid, vid, newname, attnum) if (err .ne. 0) + call errore('nf_inq_attid: ', err) if (attnum .ne. j) + call error('Unexpected attnum') 2 continue 1 continue C /* Close. Reopen & check */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_open(scratch, NF_WRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 3, i = 0, NVARS vid = VARID(i) do 4, j = 1, NATTS(i) atnam = ATT_NAME(j,i) attyp = ATT_TYPE(j,i) attlength = ATT_LEN(j,i) newname = 'new_' // atnam err = nf_inq_attname(ncid, vid, j, name) if (err .ne. 0) + call errore('nf_inq_attname: ', err) if (name .ne. newname) + call error('nf_inq_attname: unexpected name') err = nf_inq_att(ncid, vid, name, datatype, length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. attyp) + call error('nf_inq_att: unexpected type') if (length .ne. attlength) + call error('nf_inq_att: unexpected length') if (datatype .eq. NF_CHAR) then err = nf_get_att_text(ncid, vid, name, text) if (err .ne. 0) + call errore('nf_get_att_text: ', err) do 5, k = 1, attlength ndx(1) = k expect = hash(datatype, -1, ndx) if (ichar(text(k:k)) .ne. expect) then call error( + 'nf_get_att_text: unexpected value') else nok = nok + 1 end if 5 continue else err = nf_get_att_double(ncid, vid, name, value) if (err .ne. 0) + call errore('nf_get_att_double: ', err) do 6, k = 1, attlength ndx(1) = k expect = hash(datatype, -1, ndx) if (inRange(expect, datatype)) then if (.not. equal(value(k),expect,datatype, + NF_DOUBLE)) then call error( + 'nf_get_att_double: unexpected value') else nok = nok + 1 end if end if 6 continue end if 4 continue 3 continue call print_nok(nok) C /* Now in data mode */ C /* Try making names even longer. Then restore original names */ do 7, i = 0, NVARS vid = VARID(i) do 8, j = 1, NATTS(i) atnam = ATT_NAME(j,i) oldname = 'new_' // atnam newname = 'even_longer_' // atnam err = nf_rename_att(ncid, vid, oldname, newname) if (err .ne. NF_ENOTINDEFINE) + call errore('longer name in data mode: ', err) err = nf_rename_att(ncid, vid, oldname, atnam) if (err .ne. 0) + call errore('nf_rename_att: ', err) err = nf_inq_attid(ncid, vid, atnam, attnum) if (err .ne. 0) + call errore('nf_inq_attid: ', err) if (attnum .ne. j) + call error('Unexpected attnum') 8 continue 7 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_del_att C try with bad netCDF handle, check error C try with bad variable handle, check error C try with nonexisting att name, check error C check that proper delete worked using: C nf_inq_attid, nf_inq_natts, nf_inq_varnatts subroutine test_nf_del_att() implicit none #include "tests.inc" integer ncid integer err integer i integer j integer attnum integer na integer numatts integer vid character*(NF_MAX_NAME) name !/* of att */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_del_att(ncid, BAD_VARID, 'abc') if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) do 1, i = 0, NVARS vid = VARID(i) numatts = NATTS(i) do 2, j = 1, numatts name = ATT_NAME(j,i) err = nf_del_att(BAD_ID, vid, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_del_att(ncid, vid, 'noSuch') if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) err = nf_del_att(ncid, vid, name) if (err .ne. 0) + call errore('nf_del_att: ', err) err = nf_inq_attid(ncid, vid, name, attnum) if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) if (i .lt. 1) then err = nf_inq_natts(ncid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. numatts-j) then call errori('natts: expected: ', numatts-j) call errori('natts: got: ', na) end if end if err = nf_inq_varnatts(ncid, vid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. numatts-j) then call errori('natts: expected: ', numatts-j) call errori('natts: got: ', na) end if 2 continue 1 continue C /* Close. Reopen & check no attributes left */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_open(scratch, NF_WRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_natts(ncid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. 0) + call errori('natts: expected 0, got ', na) do 3, i = 0, NVARS vid = VARID(i) err = nf_inq_varnatts(ncid, vid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. 0) + call errori('natts: expected 0, got ', na) 3 continue C /* restore attributes. change to data mode. try to delete */ err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) call put_atts(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 4, i = 0, NVARS vid = VARID(i) numatts = NATTS(i) do 5, j = 1, numatts name = ATT_NAME(j,i) err = nf_del_att(ncid, vid, name) if (err .ne. NF_ENOTINDEFINE) + call errore('in data mode: ', err) 5 continue 4 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_set_fill C try with bad netCDF handle, check error C try in read-only mode, check error C try with bad new_fillmode, check error C try in data mode, check error C check that proper set to NF_FILL works for record & non-record variables C (note that it is not possible to test NF_NOFILL mode!) C close file & create again for test using attribute _FillValue subroutine test_nf_set_fill() implicit none #include "tests.inc" integer ncid integer vid integer err integer i integer j integer old_fillmode integer nok !/* count of valid comparisons */ character*1 text doubleprecision value doubleprecision fill doubleprecision fill_array(1) integer index(MAX_RANK) nok = 0 value = 0 C /* bad ncid */ err = nf_set_fill(BAD_ID, NF_NOFILL, old_fillmode) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* try in read-only mode */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_set_fill(ncid, NF_NOFILL, old_fillmode) if (err .ne. NF_EPERM) + call errore('read-only: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* create scratch */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if C /* BAD_FILLMODE */ err = nf_set_fill(ncid, BAD_FILLMODE, old_fillmode) if (err .ne. NF_EINVAL) + call errore('bad fillmode: ', err) C /* proper calls */ err = nf_set_fill(ncid, NF_NOFILL, old_fillmode) if (err .ne. 0) + call errore('nf_set_fill: ', err) if (old_fillmode .ne. NF_FILL) + call errori('Unexpected old fill mode: ', old_fillmode) err = nf_set_fill(ncid, NF_FILL, old_fillmode) if (err .ne. 0) + call errore('nf_set_fill: ', err) if (old_fillmode .ne. NF_NOFILL) + call errori('Unexpected old fill mode: ', old_fillmode) C /* define dims & vars */ call def_dims(ncid) call def_vars(ncid) C /* Change to data mode. Set fillmode again */ err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_set_fill(ncid, NF_FILL, old_fillmode) if (err .ne. 0) + call errore('nf_set_fill: ', err) if (old_fillmode .ne. NF_FILL) + call errori('Unexpected old fill mode: ', old_fillmode) C /* Write record number NRECS to force writing of preceding records */ C /* Assumes variable cr is char vector with UNLIMITED dimension */ err = nf_inq_varid(ncid, 'cr', vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS text = char(NF_FILL_CHAR) err = nf_put_var1_text(ncid, vid, index, text) if (err .ne. 0) + call errore('nf_put_var1_text: ', err) C /* get all variables & check all values equal default fill */ do 1, i = 1, NVARS if (var_type(i) .eq. NF_CHAR) then fill = NF_FILL_CHAR else if (var_type(i) .eq. NF_BYTE) then fill = NF_FILL_BYTE else if (var_type(i) .eq. NF_SHORT) then fill = NF_FILL_SHORT else if (var_type(i) .eq. NF_INT) then fill = NF_FILL_INT else if (var_type(i) .eq. NF_FLOAT) then fill = NF_FILL_FLOAT else if (var_type(i) .eq. NF_DOUBLE) then fill = NF_FILL_DOUBLE else stop 2 end if do 2, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') if (var_type(i) .eq. NF_CHAR) then err = nf_get_var1_text(ncid, i, index, text) if (err .ne. 0) + call errore('nf_get_var1_text failed: ',err) value = ichar(text) else err = nf_get_var1_double(ncid, i, index, value) if (err .ne. 0) + call errore('nf_get_var1_double failed: ',err) end if if (value .ne. fill .and. + abs((fill - value)/fill) .gt. 1.0e-9) then call errord('Unexpected fill value: ', value) else nok = nok + 1 end if 2 continue 1 continue C /* close scratch & create again for test using attribute _FillValue */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) C /* set _FillValue = 42 for all vars */ fill = 42 fill_array(1) = fill text = char(int(fill)) do 3, i = 1, NVARS if (var_type(i) .eq. NF_CHAR) then err = nf_put_att_text(ncid, i, '_FillValue', 1, text) if (err .ne. 0) + call errore('nf_put_att_text: ', err) else err = nf_put_att_double(ncid, i, '_FillValue', + var_type(i),1,fill_array) if (err .ne. 0) + call errore('nf_put_att_double: ', err) end if 3 continue C /* data mode. write records */ err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, text) if (err .ne. 0) + call errore('nf_put_var1_text: ', err) C /* get all variables & check all values equal 42 */ do 4, i = 1, NVARS do 5, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes') if (var_type(i) .eq. NF_CHAR) then err = nf_get_var1_text(ncid, i, index, text) if (err .ne. 0) + call errore('nf_get_var1_text failed: ',err) value = ichar(text) else err = nf_get_var1_double(ncid, i, index, value) if (err .ne. 0) + call errore('nf_get_var1_double failed: ', err) end if if (value .ne. fill) then call errord(' Value expected: ', fill) call errord(' Value read: ', value) else nok = nok + 1 end if 5 continue 4 continue call print_nok(nok) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C * Test nc_set_default_format C * try with bad default format C * try with NULL old_formatp C * try in data mode, check error C * check that proper set to NC_FILL works for record & non-record variables C * (note that it is not possible to test NC_NOFILL mode!) C * close file & create again for test using attribute _FillValue subroutine test_nf_set_default_format() implicit none #include "tests.inc" integer ncid integer err integer i integer version integer old_format integer nf_get_file_version C /* bad format */ err = nf_set_default_format(99, old_format) IF (err .ne. NF_EINVAL) + call errore("bad default format: status = %d", err) C /* Cycle through available formats. (actually netcdf-4 formats are C ignored for the moment - ed 5/15/5) */ do 1 i=1, 2 err = nf_set_default_format(i, old_format) if (err .ne. 0) + call errore("setting classic format: status = %d", err) err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) call errore("bad nf_create: status = %d", err) err = nf_put_att_text(ncid, NF_GLOBAL, "testatt", + 4, "blah") if (err .ne. 0) call errore("bad put_att: status = %d", err) err = nf_close(ncid) if (err .ne. 0) call errore("bad close: status = %d", err) err = nf_get_file_version(scratch, version) if (err .ne. 0) call errore("bad file version = %d", err) if (version .ne. i) + call errore("bad file version = %d", err) 1 continue C /* Remove the left-over file. */ C err = nf_delete(scratch) if (err .ne. 0) call errore("remove failed", err) end C This function looks in a file for the netCDF magic number. integer function nf_get_file_version(path, version) implicit none #include "tests.inc" character*(*) path integer version, iosnum character magic*4 integer ver integer f parameter (f = 10) open(f, file=path, status='OLD', form='UNFORMATTED', + access='DIRECT', recl=4) C Assume this is not a netcdf file. nf_get_file_version = NF_ENOTNC version = 0 C Read the magic number, the first 4 bytes of the file. read(f, rec=1, err = 1) magic C If the first three characters are not "CDF" we're done. if (index(magic, 'CDF') .eq. 1) then ver = ichar(magic(4:4)) if (ver .eq. 1) then version = 1 nf_get_file_version = NF_NOERR elseif (ver .eq. 2) then version = 2 nf_get_file_version = NF_NOERR endif endif 1 close(f) return end netcdf-fortran-4.6.3+ds/nf_test/util03.F0000775000175000017500000013636515205004070020131 0ustar alastairalastair!********************************************************************* ! Copyright 1996, UCAR/Unidata ! See netcdf/COPYRIGHT file for copying and redistribution conditions. ! $Id: util.F,v 1.16 2008/12/31 17:54:10 ed Exp $ !********************************************************************/ ! Implementation of util.F for F03 interfaces SUBROUTINE PRINT_NOK(NOK) use tests, ONLY: NFAILS, VERBOSE IMPLICIT NONE INTEGER NOK IF (VERBOSE .OR. NFAILS .GT. 0) PRINT *, ' ' IF (VERBOSE) PRINT *, NOK, ' good comparisons.' END ! Is value within external type range? */ FUNCTION INRANGE(VALUE, DATATYPE) use tests, ONLY: NF_CHAR, NF_BYTE, NF_SHORT, NF_INT, NF_FLOAT, & & NF_DOUBLE, X_CHAR_MIN, X_CHAR_MAX, X_BYTE_MIN, & & X_BYTE_MAX, X_SHORT_MIN, X_SHORT_MAX, X_INT_MIN, & & X_INT_MAX, X_FLOAT_MIN, X_FLOAT_MAX, & & X_DOUBLE_MIN, X_DOUBLE_MAX IMPLICIT NONE DOUBLEPRECISION VALUE INTEGER DATATYPE LOGICAL INRANGE DOUBLEPRECISION MIN DOUBLEPRECISION MAX IF (DATATYPE .EQ. NF_CHAR) THEN MIN = X_CHAR_MIN MAX = X_CHAR_MAX ELSE IF (DATATYPE .EQ. NF_BYTE) THEN MIN = X_BYTE_MIN MAX = X_BYTE_MAX ELSE IF (DATATYPE .EQ. NF_SHORT) THEN MIN = X_SHORT_MIN MAX = X_SHORT_MAX ELSE IF (DATATYPE .EQ. NF_INT) THEN MIN = X_INT_MIN MAX = X_INT_MAX ELSE IF (DATATYPE .EQ. NF_FLOAT) THEN MIN = X_FLOAT_MIN MAX = X_FLOAT_MAX ELSE IF (DATATYPE .EQ. NF_DOUBLE) THEN MIN = X_DOUBLE_MIN MAX = X_DOUBLE_MAX ELSE CALL UDABORT END IF INRANGE = (VALUE .GE. MIN) .AND. (VALUE .LE. MAX) END FUNCTION INRANGE_UCHAR(VALUE, DATATYPE) use tests, ONLY: NF_BYTE, INRANGE IMPLICIT NONE DOUBLEPRECISION VALUE INTEGER DATATYPE LOGICAL INRANGE_UCHAR IF (DATATYPE .EQ. NF_BYTE) THEN INRANGE_UCHAR = (VALUE .GE. 0) .AND. (VALUE .LE. 255) ELSE INRANGE_UCHAR = INRANGE(VALUE, DATATYPE) END IF END FUNCTION INRANGE_FLOAT(VALUE, DATATYPE) use tests, ONLY: NF_CHAR, NF_BYTE, NF_SHORT, NF_INT, NF_FLOAT, & & NF_DOUBLE, X_CHAR_MIN, X_CHAR_MAX, X_BYTE_MIN, & & X_BYTE_MAX, X_SHORT_MIN, X_SHORT_MAX, X_INT_MIN, & & X_INT_MAX, X_FLOAT_MIN, X_FLOAT_MAX, NFT_REAL, & & X_DOUBLE_MIN, X_DOUBLE_MAX, internal_max IMPLICIT NONE DOUBLEPRECISION VALUE INTEGER DATATYPE LOGICAL INRANGE_FLOAT DOUBLEPRECISION MIN DOUBLEPRECISION MAX REAL FVALUE IF (DATATYPE .EQ. NF_CHAR) THEN MIN = X_CHAR_MIN MAX = X_CHAR_MAX ELSE IF (DATATYPE .EQ. NF_BYTE) THEN MIN = X_BYTE_MIN MAX = X_BYTE_MAX ELSE IF (DATATYPE .EQ. NF_SHORT) THEN MIN = X_SHORT_MIN MAX = X_SHORT_MAX ELSE IF (DATATYPE .EQ. NF_INT) THEN MIN = X_INT_MIN MAX = X_INT_MAX ELSE IF (DATATYPE .EQ. NF_FLOAT) THEN IF (internal_max(NFT_REAL) .LT. X_FLOAT_MAX) THEN MIN = -internal_max(NFT_REAL) MAX = internal_max(NFT_REAL) ELSE MIN = X_FLOAT_MIN MAX = X_FLOAT_MAX END IF ELSE IF (DATATYPE .EQ. NF_DOUBLE) THEN IF (internal_max(NFT_REAL) .LT. X_DOUBLE_MAX) THEN MIN = -internal_max(NFT_REAL) MAX = internal_max(NFT_REAL) ELSE MIN = X_DOUBLE_MIN MAX = X_DOUBLE_MAX END IF ELSE CALL UDABORT END IF IF (.NOT.((VALUE .GE. MIN) .AND. (VALUE .LE. MAX))) THEN INRANGE_FLOAT = .FALSE. ELSE FVALUE = VALUE INRANGE_FLOAT = (FVALUE .GE. MIN) .AND. (FVALUE .LE. MAX) END IF END ! wrapper for inrange to handle special NF_BYTE/uchar adjustment */ function inrange3(value, datatype, itype) use tests, ONLY: NFT_REAL, inrange, inrange_float implicit none doubleprecision value integer datatype integer itype logical inrange3 if (itype .eq. NFT_REAL) then inrange3 = inrange_float(value, datatype) else inrange3 = inrange(value, datatype) end if end ! ! Does x == y, where one is internal and other external (netCDF)? ! Use tolerant comparison based on IEEE FLT_EPSILON or DBL_EPSILON. ! function equal(x, y, extType, itype) use tests, ONLY: NF_REAL, NFT_REAL implicit none doubleprecision x doubleprecision y integer extType !!/* external data type */ integer itype logical equal doubleprecision epsilon if ((extType .eq. NF_REAL) .or. (itype .eq. NFT_REAL)) then epsilon = 1.19209290E-07 else epsilon = 2.2204460492503131E-16 end if equal = abs(x-y) .le. epsilon * max( abs(x), abs(y)) end ! Test whether two int vectors are equal. If so return 1, else 0 */ function int_vec_eq(v1, v2, n) ! use tests implicit none integer n integer v1(n) integer v2(n) integer i logical int_vec_eq int_vec_eq = .true. if (n .le. 0) + return do 1, i=1, n if (v1(i) .ne. v2(i)) then int_vec_eq = .false. return end if 1 continue end ! ! Generate random integer from 0 through n-1 ! Like throwing an n-sided dice marked 0, 1, 2, ..., n-1 ! function roll(n) ! use tests implicit none integer n integer roll doubleprecision udrand external udrand 1 roll = (udrand(0) * (n-1)) + 0.5 if (roll .ge. n) goto 1 end ! ! Convert an origin-1 cumulative index to a netCDF index vector. ! Grosset dimension first; finest dimension last. ! ! Authors: Harvey Davies, Unidata/UCAR, Boulder, Colorado ! Steve Emmerson, (same place) ! function index2ncindexes(index, rank, base, indexes) ! use tests implicit none integer index !!/* index to be converted */ integer rank !/* number of dimensions */ integer base(rank) !/* base(rank) ignored */ integer indexes(rank) !/* returned FORTRAN indexes */ integer i integer offset integer index2ncindexes if (rank .gt. 0) then offset = index - 1 do 1, i = rank, 1, -1 if (base(i) .eq. 0) then index2ncindexes = 1 return end if indexes(i) = 1 + mod(offset, base(i)) offset = offset / base(i) 1 continue end if index2ncindexes = 0 end ! ! Convert an origin-1 cumulative index to a FORTRAN index vector. ! Finest dimension first; grossest dimension last. ! ! Authors: Harvey Davies, Unidata/UCAR, Boulder, Colorado ! Steve Emmerson, (same place) ! function index2indexes(index, rank, base, indexes) ! use tests implicit none integer index !/* index to be converted */ integer rank !/* number of dimensions */ integer base(rank) !/* base(rank) ignored */ integer indexes(rank) !/* returned FORTRAN indexes */ integer index2indexes integer i integer offset if (rank .gt. 0) then offset = index - 1 do 1, i = 1, rank if (base(i) .eq. 0) then index2indexes = 1 return end if indexes(i) = 1 + mod(offset, base(i)) offset = offset / base(i) 1 continue end if index2indexes = 0 end ! ! Convert a FORTRAN index vector to an origin-1 cumulative index. ! Finest dimension first; grossest dimension last. ! ! Authors: Harvey Davies, Unidata/UCAR, Boulder, Colorado ! Steve Emmerson, (same place) ! function indexes2index(rank, indexes, base) ! use tests implicit none integer rank !/* number of dimensions */ integer indexes(rank) !/* FORTRAN indexes */ integer base(rank) !/* base(rank) ignored */ integer indexes2index integer i indexes2index = 0 if (rank .gt. 0) then do 1, i = rank, 1, -1 indexes2index = (indexes2index-1) * base(i) + indexes(i) 1 continue end if end #ifdef USE_EXTREME_NUMBERS ! Generate data values as function of type, rank (-1 for attribute), index */ function hash(type, rank, index) use tests, ONLY: NF_CHAR, NF_BYTE, NF_SHORT, NF_INT, NF_FLOAT, & & NF_DOUBLE, X_CHAR_MIN, X_CHAR_MAX, X_BYTE_MIN, & & X_BYTE_MAX, X_SHORT_MIN, X_SHORT_MAX, X_INT_MIN, & & X_INT_MAX, X_FLOAT_MIN, X_FLOAT_MAX, & & X_DOUBLE_MIN, X_DOUBLE_MAX, RK8 implicit none integer type integer rank integer index(*) real(RK8) hash doubleprecision base doubleprecision result integer d !/* index of dimension */ !/* If vector then elements 1 & 2 are min & max. Elements 3 & 4 are */ !/* just < min & > max (except for NF_CHAR & NF_DOUBLE) */ if (abs(rank) .eq. 1 .and. index(1) .le. 4) then if (index(1) .eq. 1) then if (type .eq. NF_CHAR) then hash = X_CHAR_MIN else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN else if (type .eq. NF_SHORT) then hash = X_SHORT_MIN else if (type .eq. NF_INT) then hash = X_INT_MIN else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MIN else if (type .eq. NF_DOUBLE) then hash = X_DOUBLE_MIN else call udabort end if else if (index(1) .eq. 2) then if (type .eq. NF_CHAR) then hash = X_CHAR_MAX else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX else if (type .eq. NF_SHORT) then hash = X_SHORT_MAX else if (type .eq. NF_INT) then hash = X_INT_MAX else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MAX else if (type .eq. NF_DOUBLE) then hash = X_DOUBLE_MAX else call udabort end if else if (index(1) .eq. 3) then if (type .eq. NF_CHAR) then hash = ichar('A') else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN-1.0 else if (type .eq. NF_SHORT) then hash = X_SHORT_MIN-1.0 else if (type .eq. NF_INT) then hash = X_INT_MIN else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MIN else if (type .eq. NF_DOUBLE) then hash = -1.0 else call udabort end if else if (index(1) .eq. 4) then if (type .eq. NF_CHAR) then hash = ichar('Z') else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX+1.0 else if (type .eq. NF_SHORT) then hash = X_SHORT_MAX+1.0 else if (type .eq. NF_INT) then hash = X_INT_MAX+1.0 else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MAX else if (type .eq. NF_DOUBLE) then hash = 1.0 else call udabort end if end if else if (type .eq. NF_CHAR) then base = 2 else if (type .eq. NF_BYTE) then base = -2 else if (type .eq. NF_SHORT) then base = -5 else if (type .eq. NF_INT) then base = -20 else if (type .eq. NF_FLOAT) then base = -9 else if (type .eq. NF_DOUBLE) then base = -10 else stop 2 end if if (rank .lt. 0) then result = base * 7 else result = base * (rank + 1) end if ! /* ! * NB: Finest netCDF dimension assumed first. ! */ do 1, d = abs(rank), 1, -1 result = base * (result + index(d) - 1) 1 continue hash = result end if end #else /* USE_EXTREME_NUMBERS */ #define SANE_SHORT 3333 #define SANE_INT 2222 #define SANE_FLOAT 300.0 #define SANE_DOUBLE 1000.0 ! Generate data values as function of type, rank (-1 for attribute), index */ function hash(type, rank, index) use tests, ONLY: NF_CHAR, NF_BYTE, NF_SHORT, NF_INT, NF_FLOAT, & & NF_DOUBLE, X_CHAR_MIN, X_CHAR_MAX, X_BYTE_MIN, & & X_BYTE_MAX, X_SHORT_MIN, X_SHORT_MAX, X_INT_MIN, & & X_INT_MAX, X_FLOAT_MIN, X_FLOAT_MAX, & & X_DOUBLE_MIN, X_DOUBLE_MAX, RK8 implicit none integer type integer rank integer index(*) real(RK8) hash doubleprecision base doubleprecision result integer d !/* index of dimension */ !/* If vector then elements 1 & 2 are min & max. Elements 3 & 4 are */ !/* just < min & > max (except for NF_CHAR & NF_DOUBLE) */ if (abs(rank) .eq. 1 .and. index(1) .le. 4) then if (index(1) .eq. 1) then if (type .eq. NF_CHAR) then hash = X_CHAR_MIN else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN else if (type .eq. NF_SHORT) then hash = SANE_SHORT else if (type .eq. NF_INT) then hash = SANE_INT else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = SANE_DOUBLE else call udabort end if else if (index(1) .eq. 2) then if (type .eq. NF_CHAR) then hash = X_CHAR_MAX else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX else if (type .eq. NF_SHORT) then hash = SANE_SHORT else if (type .eq. NF_INT) then hash = SANE_INT else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = SANE_DOUBLE else call udabort end if else if (index(1) .eq. 3) then if (type .eq. NF_CHAR) then hash = ichar('A') else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN-1.0 else if (type .eq. NF_SHORT) then hash = SANE_SHORT-1.0 else if (type .eq. NF_INT) then hash = SANE_INT else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = -1.0 else call udabort end if else if (index(1) .eq. 4) then if (type .eq. NF_CHAR) then hash = ichar('Z') else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX+1.0 else if (type .eq. NF_SHORT) then hash = SANE_SHORT+1.0 else if (type .eq. NF_INT) then hash = SANE_INT+1.0 else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = 1.0 else call udabort end if end if else if (type .eq. NF_CHAR) then base = 2 else if (type .eq. NF_BYTE) then base = -2 else if (type .eq. NF_SHORT) then base = -5 else if (type .eq. NF_INT) then base = -20 else if (type .eq. NF_FLOAT) then base = -9 else if (type .eq. NF_DOUBLE) then base = -10 else stop 2 end if if (rank .lt. 0) then result = base * 7 else result = base * (rank + 1) end if ! /* ! * NB: Finest netCDF dimension assumed first. ! */ do 1, d = abs(rank), 1, -1 result = base * (result + index(d) - 1) 1 continue hash = result end if end #endif ! wrapper for hash to handle special NC_BYTE/uchar adjustment */ function hash4(type, rank, index, itype) use tests, ONLY: NFT_CHAR, NF_BYTE, RK8, hash implicit none integer type integer rank integer index(*) integer itype real(RK8) hash4 hash4 = hash( type, rank, index ) if ((itype .eq. NFT_CHAR) .and. (type .eq. NF_BYTE) .and. + (hash4 .ge. -128) .and. (hash4 .lt. 0)) hash4 = hash4 + 256 end integer function char2type(letter) use tests, ONLY: NF_CHAR, NF_SHORT, NF_BYTE, NF_INT, NF_FLOAT, & & NF_DOUBLE implicit none character*1 letter if (letter .eq. 'c') then char2type = NF_CHAR else if (letter .eq. 'b') then char2type = NF_BYTE else if (letter .eq. 's') then char2type = NF_SHORT else if (letter .eq. 'i') then char2type = NF_INT else if (letter .eq. 'f') then char2type = NF_FLOAT else if (letter .eq. 'd') then char2type = NF_DOUBLE else stop 2 end if end subroutine init_dims(digit) use tests, ONLY: NDIMS, RECDIM, NRECS, DIM_LEN, DIM_NAME implicit none character*1 digit(NDIMS) integer dimid !/* index of dimension */ do 1, dimid = 1, NDIMS if (dimid .eq. RECDIM) then dim_len(dimid) = NRECS else dim_len(dimid) = dimid - 1 endif dim_name(dimid) = 'D' // digit(dimid) 1 continue end subroutine init_gatts(type_letter) use tests, ONLY: NTYPES, gatt_name, gatt_len, gatt_type implicit none character*1 type_letter(NTYPES) integer attid integer char2type do 1, attid = 1, NTYPES gatt_name(attid) = 'G' // type_letter(attid) gatt_len(attid) = attid gatt_type(attid) = char2type(type_letter(attid)) 1 continue end integer function prod(nn, sp) use tests, ONLY: MAX_RANK implicit none integer nn integer sp(MAX_RANK) integer i prod = 1 do 1, i = 1, nn prod = prod * sp(i) 1 continue end ! ! define global variables: ! dim_name, dim_len, ! var_name, var_type, var_rank, var_shape, var_natts, var_dimid, var_nels ! att_name, gatt_name, att_type, gatt_type, att_len, gatt_len ! subroutine init_gvars use tests, NTYPESP=>NTYPES, MAX_DIM_LENP=>MAX_DIM_LEN, & & NVARSP=>NVARS implicit none integer max_dim_len(MAX_RANK) character*1 type_letter(NTYPESP) character*1 digit(10) integer rank integer vn !/* var number */ integer xtype !/* index of type */ integer an !/* origin-0 cumulative attribute index */ integer nvars integer jj integer ntypes integer tc integer tmp(MAX_RANK) integer ac !/* attribute index */ integer dn !/* dimension number */ integer prod !/* function */ integer char2type !/* function */ integer err data max_dim_len /0, MAX_DIM_LENP, MAX_DIM_LENP/ data type_letter /'c', 'b', 's', 'i', 'f', 'd'/ data digit /'r', '1', '2', '3', '4', '5', + '6', '7', '8', '9'/ max_dim_len(1) = MAX_DIM_LENP + 1 call init_dims(digit) vn = 1 xtype = 1 an = 0 ! /* Loop over variable ranks */ do 1, rank = 0, MAX_RANK nvars = prod(rank, max_dim_len) !/* Loop over variable shape vectors */ do 2, jj = 1, nvars !/* 1, 5, 20, 80 */ !/* number types of this shape */ if (rank .lt. 2) then ntypes = NTYPESP !/* 6 */ else ntypes = 1 end if !/* Loop over external data types */ do 3, tc = 1, ntypes !/* 6, 1 */ var_name(vn) = type_letter(xtype) var_type(vn) = char2type(type_letter(xtype)) var_rank(vn) = rank if (rank .eq. 0) then var_natts(vn) = mod(vn - 1, MAX_NATTS + 1) else var_natts(vn) = 0 end if do 4, ac = 1, var_natts(vn) attname(ac,vn) = + type_letter(1+mod(an, NTYPESP)) attlen(ac,vn) = an atttype(ac,vn) = + char2type(type_letter(1+mod(an, NTYPESP))) an = an + 1 4 continue !/* Construct initial shape vector */ err = index2ncindexes(jj, rank, max_dim_len, tmp) do 5, dn = 1, rank var_dimid(dn,vn) = tmp(1+rank-dn) 5 continue var_nels(vn) = 1 do 6, dn = 1, rank if (dn .lt. rank) then var_dimid(dn,vn) = var_dimid(dn,vn) + 1 end if if (var_dimid(dn,vn) .gt. 9) then stop 2 end if var_name(vn)(rank+2-dn:rank+2-dn) = + digit(var_dimid(dn,vn)) if (var_dimid(dn,vn) .ne. RECDIM) then var_shape(dn,vn) = var_dimid(dn,vn) - 1 else var_shape(dn,vn) = NRECS end if var_nels(vn) = var_nels(vn) * var_shape(dn,vn) 6 continue vn = vn + 1 xtype = 1 + mod(xtype, NTYPESP) 3 continue 2 continue 1 continue call init_gatts(type_letter) end ! define dims defined by global variables */ subroutine def_dims(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer dimid !/* dimension id */ do 1, i = 1, NDIMS if (i .eq. RECDIM) then err = nf_def_dim(ncid, dim_name(i), NF_UNLIMITED, + dimid) else err = nf_def_dim(ncid, dim_name(i), dim_len(i), + dimid) end if if (err .ne. 0) then call errore('nf_def_dim: ', err) end if 1 continue end ! define vars defined by global variables */ subroutine def_vars(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer var_id do 1, i = 1, NVARS err = nf_def_var(ncid, var_name(i), var_type(i), + var_rank(i), var_dimid(1,i), var_id) if (err .ne. 0) then call errore('nf_def_var: ', err) end if 1 continue end ! put attributes defined by global variables */ subroutine put_atts(ncid) use tests implicit none integer ncid integer err !/* netCDF status */ integer i !/* variable index (0 => global ! * attribute */ integer k !/* attribute index */ integer j !/* index of attribute */ integer ndx(1) logical allInRange doubleprecision att(MAX_NELS) character*(MAX_NELS+2) catt do 1, i = 0, NVARS !/* var 0 => NF_GLOBAL attributes */ do 2, j = 1, NATTS(i) if (NF_CHAR .eq. ATT_TYPE(j,i)) then catt = ' ' do 3, k = 1, ATT_LEN(j,i) ndx(1) = k catt(k:k) = char(int(hash(ATT_TYPE(j,i), -1, + ndx))) 3 continue ! /* ! * The following ensures that the text buffer doesn't ! * start with 4 zeros (which is a CFORTRAN NULL pointer ! * indicator) yet contains a zero (which causes the ! * CFORTRAN interface to pass the address of the ! * actual text buffer). ! */ catt(ATT_LEN(j,i)+1:ATT_LEN(j,i)+1) = char(1) catt(ATT_LEN(j,i)+2:ATT_LEN(j,i)+2) = char(0) err = nf_put_att_text(ncid, varid(i), + ATT_NAME(j,i), + ATT_LEN(j,i), catt) if (err .ne. 0) then call errore('nf_put_att_text: ', err) end if else allInRange = .true. do 4, k = 1, ATT_LEN(j,i) ndx(1) = k att(k) = hash(ATT_TYPE(j,i), -1, ndx) allInRange = allInRange .and. + inRange(att(k), ATT_TYPE(j,i)) 4 continue err = nf_put_att_double(ncid, varid(i), + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), att) if (allInRange) then if (err .ne. 0) then call errore('nf_put_att_double: ', err) end if else if (err .ne. NF_ERANGE) then call errore( + 'type-conversion range error: status = ', + err) end if end if end if 2 continue 1 continue end ! put variables defined by global variables */ subroutine put_vars(ncid) use tests implicit none integer ncid integer start(MAX_RANK) integer index(MAX_RANK) integer err !/* netCDF status */ integer i integer j doubleprecision value(MAX_NELS) character*(MAX_NELS+2) text logical allInRange do 1, j = 1, MAX_RANK start(j) = 1 1 continue do 2, i = 1, NVARS allInRange = .true. do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) then call errori( + 'Error calling index2indexes() for var ', j) end if if (var_name(i)(1:1) .eq. 'c') then text(j:j) = + char(int(hash(var_type(i), var_rank(i), index))) else value(j) = hash(var_type(i), var_rank(i), index) allInRange = allInRange .and. + inRange(value(j), var_type(i)) end if 3 continue if (var_name(i)(1:1) .eq. 'c') then ! /* ! * The following statement ensures that the first 4 ! * characters in 'text' are not all zeros (which is ! * a cfortran.h NULL indicator) and that the string ! * contains a zero (which will cause the address of the ! * actual string buffer to be passed). ! */ text(var_nels(i)+1:var_nels(i)+1) = char(1) text(var_nels(i)+2:var_nels(i)+2) = char(0) err = nf_put_vara_text(ncid, i, start, var_shape(1:,i), & & text) if (err .ne. 0) then call errore('nf_put_vara_text: ', err) end if else err = nf_put_vara_double(ncid, i, start,var_shape(1:,i),& & value) if (allInRange) then if (err .ne. 0) then call errore('nf_put_vara_double: ', err) end if else if (err .ne. NF_ERANGE) then & call errore( & & 'type-conversion range error: status = ', & & err) end if end if end if 2 continue end ! Create & write all of specified file using global variables */ subroutine write_file(filename) use tests implicit none character*(*) filename integer ncid !/* netCDF id */ integer err !/* netCDF status */ err = nf_create(filename, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_enddef(ncid) if (err .ne. 0) then call errore('nf_enddef: ', err) end if call put_vars(ncid) err = nf_close(ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if end ! ! check dimensions of specified file have expected name & length ! subroutine check_dims(ncid) use tests implicit none integer ncid character*(NF_MAX_NAME) name integer length integer i integer err !/* netCDF status */ do 1, i = 1, NDIMS err = nf_inq_dim(ncid, i, name, length) if (err .ne. 0) then call errore('nf_inq_dim: ', err) end if if (name .ne. dim_name(i)) then call errori('Unexpected name of dimension ', i) end if if (length .ne. dim_len(i)) then call errori('Unexpected length of dimension ', i) end if 1 continue end ! ! check variables of specified file have expected name, type, shape & values ! subroutine check_vars(ncid) use tests, NDIMSP=>NDIMS implicit none integer ncid integer index(MAX_RANK) integer err !/* netCDF status */ integer i integer j character*1 text doubleprecision value integer datatype integer ndims integer natt integer dimids(MAX_RANK) logical isChar doubleprecision expect character*(NF_MAX_NAME) name integer length integer nok !/* count of valid comparisons */ nok = 0 do 1, i = 1, NVARS isChar = var_type(i) .eq. NF_CHAR err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + natt) if (err .ne. 0) then call errore('nf_inq_var: ', err) end if if (name .ne. var_name(i)) then call errori('Unexpected var_name for variable ', i) end if if (datatype .ne. var_type(i)) then call errori('Unexpected type for variable ', i) end if if (ndims .ne. var_rank(i)) then call errori('Unexpected rank for variable ', i) end if do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) then call errore('nf_inq_dim: ', err) end if if (length .ne. var_shape(j,i)) then call errori('Unexpected shape for variable ', i) end if 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) then call errori('error in index2indexes() 2, variable ', + i) end if expect = hash(var_type(i), var_rank(i), index ) if (isChar) then err = nf_get_var1_text(ncid, i, index, text) if (err .ne. 0) then call errore('nf_get_var1_text: ', err) end if if (ichar(text) .ne. expect) then call errori( + 'Var value read not that expected for variable ', i) else nok = nok + 1 end if else err = nf_get_var1_double(ncid, i, index, value) if (inRange(expect,var_type(i))) then if (err .ne. 0) then call errore('nf_get_var1_double: ', err) else if (.not. equal(value,expect,var_type(i), + NFT_DOUBLE)) then call errori( + 'Var value read not that expected for variable ', i) else nok = nok + 1 end if end if end if end if 3 continue 1 continue call print_nok(nok) end ! ! check attributes of specified file have expected name, type, length & values ! subroutine check_atts(ncid) use tests implicit none integer ncid integer err !/* netCDF status */ integer i integer j integer k integer vid !/* "variable" ID */ integer datatype integer ndx(1) character*(NF_MAX_NAME) name integer length character*(MAX_NELS) text doubleprecision value(MAX_NELS) doubleprecision expect integer nok !/* count of valid comparisons */ nok = 0 do 1, vid = 0, NVARS i = varid(vid) do 2, j = 1, NATTS(i) err = nf_inq_attname(ncid, i, j, name) if (err .ne. 0) then call errore('nf_inq_attname: ', err) end if if (name .ne. ATT_NAME(j,i)) then call errori( + 'nf_inq_attname: unexpected name for var ', i) end if err = nf_inq_att(ncid, i, name, datatype, length) if (err .ne. 0) then call errore('nf_inq_att: ', err) end if if (datatype .ne. ATT_TYPE(j,i)) then call errori('nf_inq_att: unexpected type for var ', + i) end if if (length .ne. ATT_LEN(j,i)) then call errori( + 'nf_inq_att: unexpected length for var ', i) end if if (datatype .eq. NF_CHAR) then err = nf_get_att_text(ncid, i, name, text) if (err .ne. 0) then call errore('nf_get_att_text: ', err) end if do 3, k = 1, ATT_LEN(j,i) ndx(1) = k if (ichar(text(k:k)) .ne. hash(datatype, -1, + ndx)) + then call errori( + 'nf_get_att_text: unexpected value for var ', i) else nok = nok + 1 end if 3 continue else err = nf_get_att_double(ncid, i, name, value) do 4, k = 1, ATT_LEN(j,i) ndx(1) = k expect = hash(datatype, -1, ndx) if (inRange(expect,ATT_TYPE(j,i))) then if (err .ne. 0) then call errore('nf_get_att_double: ', err) end if if (.not. equal(value(k), expect, + ATT_TYPE(j,i), NFT_DOUBLE)) then call errori( + 'Att value read not that expected for var ', i) else nok = nok + 1 end if end if 4 continue end if 2 continue 1 continue call print_nok(nok) end ! Check file (dims, vars, atts) corresponds to global variables */ subroutine check_file(filename) use tests implicit none character*(*) filename integer ncid !/* netCDF id */ integer err !/* netCDF status */ err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) then call errore('nf_open: ', err) else call check_dims(ncid) call check_vars(ncid) call check_atts(ncid) err = nf_close (ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if end if end ! ! Functions for accessing attribute test data. ! ! NB: 'varid' is 0 for global attributes; thus, global attributes can ! be handled in the same loop as variable attributes. ! FUNCTION VARID(VID) use tests, ONLY: NF_GLOBAL IMPLICIT NONE INTEGER VID INTEGER VARID IF (VID .LT. 1) THEN VARID = NF_GLOBAL ELSE VARID = VID ENDIF end FUNCTION NATTS(VID) use tests, ONLY: NGATTS, VAR_NATTS IMPLICIT NONE INTEGER VID Integer NATTS IF (VID .LT. 1) THEN NATTS = NGATTS ELSE NATTS = VAR_NATTS(VID) ENDIF END FUNCTION ATT_NAME(J,VID) use tests, ONLY: GATT_NAME, ATTNAME IMPLICIT NONE INTEGER J INTEGER VID CHARACTER*2 ATT_NAME IF (VID .LT. 1) THEN ATT_NAME = GATT_NAME(J) ELSE ATT_NAME = ATTNAME(J,VID) ENDIF END FUNCTION ATT_TYPE(J,VID) use tests, ONLY :GATT_TYPE, ATTTYPE IMPLICIT NONE INTEGER J INTEGER VID INTEGER ATT_TYPE IF (VID .LT. 1) THEN ATT_TYPE = GATT_TYPE(J) ELSE ATT_TYPE = ATTTYPE(J,VID) ENDIF END FUNCTION ATT_LEN(J,VID) use tests, ONLY: GATT_LEN, ATTLEN IMPLICIT NONE INTEGER J INTEGER VID INTEGER ATT_LEN IF (VID .LT. 1) THEN ATT_LEN = GATT_LEN(J) ELSE ATT_LEN = ATTLEN(J,VID) ENDIF END ! ! Return the minimum value of an internal type. ! function internal_min(type) use tests, ONLY: RK8, NFT_CHAR, NFT_INT1, NFT_INT2, NFT_INT, & & NFT_REAL, NFT_DOUBLE implicit none integer type real(RK8) internal_min doubleprecision min_schar doubleprecision min_short doubleprecision min_int doubleprecision min_long doubleprecision max_float doubleprecision max_double if (type .eq. NFT_CHAR) then internal_min = 0 else if (type .eq. NFT_INT1) then #if NF_INT1_IS_C_SIGNED_CHAR internal_min = min_schar() #endif #if NF_INT1_IS_C_SHORT internal_min = min_short() #endif #if NF_INT1_IS_C_INT internal_min = min_int() #endif #if NF_INT1_IS_C_LONG internal_min = min_long() #endif else if (type .eq. NFT_INT2) then #if NF_INT2_IS_C_SHORT internal_min = min_short() #endif #if NF_INT2_IS_C_INT internal_min = min_int() #endif #if NF_INT2_IS_C_LONG internal_min = min_long() #endif else if (type .eq. NFT_INT) then #if NF_INT_IS_C_INT internal_min = min_int() #endif #if NF_INT_IS_C_LONG internal_min = min_long() #endif else if (type .eq. NFT_REAL) then #if NF_REAL_IS_C_FLOAT internal_min = -max_float() #endif #if NF_REAL_IS_C_DOUBLE internal_min = -max_double() #endif else if (type .eq. NFT_DOUBLE) then #if NF_DOUBLEPRECISION_IS_C_DOUBLE internal_min = -max_double() #endif #if NF_DOUBLEPRECISION_IS_C_FLOAT internal_min = -max_float() #endif else stop 2 end if end ! ! Return the maximum value of an internal type. ! function internal_max(type) use tests, ONLY: RK8, NFT_CHAR, NFT_INT1, NFT_INT2, NFT_INT, & & NFT_REAL, NFT_DOUBLE implicit none integer type doubleprecision max_schar doubleprecision max_short doubleprecision max_int doubleprecision max_long doubleprecision max_float doubleprecision max_double real(RK8) internal_max if (type .eq. NFT_CHAR) then internal_max = 255 else if (type .eq. NFT_INT1) then #if NF_INT1_IS_C_SIGNED_CHAR internal_max = max_schar() #endif #if NF_INT1_IS_C_SHORT internal_max = max_short() #endif #if NF_INT1_IS_C_INT internal_max = max_int() #endif #if NF_INT1_IS_C_LONG internal_max = max_long() #endif else if (type .eq. NFT_INT2) then #if NF_INT2_IS_C_SHORT internal_max = max_short() #endif #if NF_INT2_IS_C_INT internal_max = max_int() #endif #if NF_INT2_IS_C_LONG internal_max = max_long() #endif else if (type .eq. NFT_INT) then #if NF_INT_IS_C_INT internal_max = max_int() #endif #if NF_INT_IS_C_LONG internal_max = max_long() #endif else if (type .eq. NFT_REAL) then #if NF_REAL_IS_C_FLOAT internal_max = max_float() #endif #if NF_REAL_IS_C_DOUBLE internal_max = max_double() #endif else if (type .eq. NFT_DOUBLE) then #if NF_DOUBLEPRECISION_IS_C_DOUBLE internal_max = max_double() #endif #if NF_DOUBLEPRECISION_IS_C_FLOAT internal_max = max_float() #endif else stop 2 end if end ! ! Return the minimum value of an external type. ! function external_min(type) use tests, ONLY: RK8, NF_CHAR, NF_SHORT, NF_INT, NF_FLOAT, & & NF_DOUBLE, X_BYTE_MIN, X_CHAR_MIN, X_SHORT_MIN,& & X_INT_MIN, X_FLOAT_MIN, X_DOUBLE_MIN , NF_BYTE implicit none integer type real(rk8) external_min if (type .eq. NF_BYTE) then external_min = X_BYTE_MIN else if (type .eq. NF_CHAR) then external_min = X_CHAR_MIN else if (type .eq. NF_SHORT) then external_min = X_SHORT_MIN else if (type .eq. NF_INT) then external_min = X_INT_MIN else if (type .eq. NF_FLOAT) then external_min = X_FLOAT_MIN else if (type .eq. NF_DOUBLE) then external_min = X_DOUBLE_MIN else stop 2 end if end ! ! Return the maximum value of an internal type. ! function external_max(type) use tests, ONLY: RK8, NF_CHAR, NF_SHORT, NF_INT, NF_FLOAT, & & NF_DOUBLE, X_BYTE_MAX, X_CHAR_MAX, X_SHORT_MAX,& & X_INT_MAX, X_FLOAT_MAX, X_DOUBLE_MAX, NF_BYTE implicit none integer type real(RK8) external_max if (type .eq. NF_BYTE) then external_max = X_BYTE_MAX else if (type .eq. NF_CHAR) then external_max = X_CHAR_MAX else if (type .eq. NF_SHORT) then external_max = X_SHORT_MAX else if (type .eq. NF_INT) then external_max = X_INT_MAX else if (type .eq. NF_FLOAT) then external_max = X_FLOAT_MAX else if (type .eq. NF_DOUBLE) then external_max = X_DOUBLE_MAX else stop 2 end if end ! ! Indicate whether or not a value lies in the range of an internal type. ! function in_internal_range(itype, value) use tests, ONLY: RK8 implicit none integer itype doubleprecision value logical in_internal_range real(rk8), external :: internal_min, internal_max in_internal_range = value .ge. internal_min(itype) .and. + value .le. internal_max(itype) end ! ! Return the length of a character variable minus any trailing blanks. ! not needed for Fortran 90/95/2003 which have an intrinsic LEN_TRIM ! ! function len_trim(string) ! use tests ! implicit none ! character*(*) string ! do 1, len_trim = len(string), 1, -1 ! if (string(len_trim:len_trim) .ne. ' ') ! + goto 2 !1 continue !2 return ! end netcdf-fortran-4.6.3+ds/nf_test/test03_read.F0000664000175000017500000010366015205004070021113 0ustar alastairalastairC Copyright 1996-2019, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C Steve Emmerson, Ed Hartnett C Test nf_strerror. C Try on a bad error status. C Test for each defined error status. C subroutine test_nf_strerror() USE tests implicit none integer number_of_messages parameter (number_of_messages = 27) integer i integer status(number_of_messages) character*80 message character*80 msg(number_of_messages) data status(1) / NF_NOERR/ data status(2) / NF_EBADID / data status(3) / NF_EEXIST / data status(4) / NF_EINVAL / data status(5) / NF_EPERM / data status(6) / NF_ENOTINDEFINE / data status(7) / NF_EINDEFINE / data status(8) / NF_EINVALCOORDS / data status(9) / NF_EMAXDIMS / data status(10) / NF_ENAMEINUSE / data status(11) / NF_ENOTATT / data status(12) / NF_EMAXATTS / data status(13) / NF_EBADTYPE / data status(14) / NF_EBADDIM / data status(15) / NF_EUNLIMPOS / data status(16) / NF_EMAXVARS / data status(17) / NF_ENOTVAR / data status(18) / NF_EGLOBAL / data status(19) / NF_ENOTNC / data status(20) / NF_ESTS / data status(21) / NF_EMAXNAME / data status(22) / NF_EUNLIMIT / data status(23) / NF_ENORECVARS / data status(24) / NF_ECHAR / data status(25) / NF_EEDGE / data status(26) / NF_ESTRIDE / data status(27) / NF_EBADNAME / data msg(1) / 'No error' / data msg(2) / 'NetCDF: Not a valid ID' / data msg(3) / 'NetCDF: File exists && NC_NOCLOBBER' / data msg(4) / 'NetCDF: Invalid argument' / data msg(5) / 'NetCDF: Write to read only' / data msg(6) / 'NetCDF: Operation not allowed in data mode' / data msg(7) / 'NetCDF: Operation not allowed in define mode' / data msg(8) / 'NetCDF: Index exceeds dimension bound' / data msg(9) / 'NetCDF: NC_MAX_DIMS exceeded' / data msg(10) / 'NetCDF: String match to name in use' / data msg(11) / 'NetCDF: Attribute not found' / data msg(12) / 'NetCDF: NC_MAX_ATTRS exceeded' / data msg(13) + / 'NetCDF: Not a valid data type or _FillValue type mismatch' / data msg(14) / 'NetCDF: Invalid dimension ID or name' / data msg(15) / 'NetCDF: NC_UNLIMITED in the wrong index' / data msg(16) / 'NetCDF: NC_MAX_VARS exceeded' / data msg(17) / 'NetCDF: Variable not found' / data msg(18) / 'NetCDF: Action prohibited on NC_GLOBAL varid' / data msg(19) / 'NetCDF: Unknown file format' / data msg(20) / 'NetCDF: In Fortran, string too short' / data msg(21) / 'NetCDF: NC_MAX_NAME exceeded' / data msg(22) / 'NetCDF: NC_UNLIMITED size already in use' / data msg(23) + / 'NetCDF: nc_rec op when there are no record vars' / data msg(24) + /'NetCDF: Attempt to convert between text & numbers'/ data msg(25) / 'NetCDF: Start+count exceeds dimension bound' / data msg(26) / 'NetCDF: Illegal stride' / data msg(27) / 'NetCDF: Name contains illegal characters' / C /* Try on a bad error status */ message = nf_strerror(-666) !/* should fail */ if (message(1:13) .ne. 'Unknown Error') + call errorc('nf_strerror on bad error status returned: ', + message) C /* Try on each legitimate error status */ do 1, i=1, number_of_messages message = nf_strerror(status(i)) if (message .ne. msg(i)) + call error('nf_strerror() should return "' // msg(i) // + '"') 1 continue end C Test nf_open. C If in read-only section of tests, C Try to open a non-existent netCDF file, check error return. C Open a file that is not a netCDF file, check error return. C Open a netCDF file with a bad mode argument, check error return. C Open a netCDF file with NF_NOWRITE mode, try to write, check error. C Try to open a netcdf twice, check whether returned netcdf ids different. C If in writable section of tests, C Open a netCDF file with NF_WRITE mode, write something, close it. C On exit, any open netCDF files are closed. subroutine test_nf_open() USE tests implicit none integer err integer ncid integer ncid2 character TEMPFILE*8 integer unit51 C /* Create a non-netCDF file named 'temp.tmp' */ unit51 = 51 TEMPFILE = 'temp.tmp' OPEN(unit51, FILE=TEMPFILE) WRITE(51,*) 'text' CLOSE(51) C /* Try to open a nonexistent file */ err = nf_open('tooth-fairy.nc', NF_NOWRITE, ncid) !/* should fail */ if (err .eq. NF_NOERR) + call error('nf_open of nonexistent file should have failed') if (.not. NF_ISSYSERR(err)) + call error( + 'nf_open of nonexistent file should have returned system error') C /* Open a file that is not a netCDF file. */ err = nf_open(TEMPFILE, NF_NOWRITE, ncid) !/* should fail */ if (err .ne. NF_ENOTNC) + call errore('nf_open of non-netCDF file: ', err) C /* Open a netCDF file in read-only mode, check that write fails */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_redef(ncid) !/* should fail */ if (err .ne. NF_EPERM) + call error('nf_redef of read-only file should fail') C /* Opened OK, see if can open again and get a different netCDF ID */ err = nf_open(testfile, NF_NOWRITE, ncid2) if (err .ne. 0) then call errore('nf_open: ', err) else err = nf_close(ncid2) end if if (ncid2 .eq. ncid) + call error( + 'netCDF IDs for first and second nf_open calls should differ') if (.not. readonly) then !/* tests using netCDF scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid2) if (err .ne. 0) then call errore('nf_create: ', err) else err = nf_close(ncid2) end if err = nf_open(scratch, NF_WRITE, ncid2) if (err .ne. 0) then call errore('nf_open: ', err) else err = nf_close(ncid2) end if err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed', scratch) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end C C Test nf_close. C Try to close a netCDF file twice, check whether second close fails. C Try on bad handle, check error return. C Try in define mode and data mode. C / subroutine test_nf_close() USE tests implicit none integer ncid integer err err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) C /* Close a netCDF file twice, second time should fail */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close failed: ', err) err = nf_close(ncid) if (err .ne. NF_EBADID) + call error('nf_close of closed file should have failed') C /* Try with a bad netCDF ID */ err = nf_close(BAD_ID) !/* should fail */ if (err .ne. NF_EBADID) + call errore( + 'nf_close with bad netCDF ID returned wrong error: ', + err) C /* Close in data mode */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close in data mode failed: ', err) if (.not. readonly) then !/* tests using netCDF scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) + call errore('nf_create: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close in define mode: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end if end C Test nf_inq. C Try on bad handle, check error return. C Try in data mode, check returned values. C Try asking for subsets of info. C If in writable section of tests, C Try in define mode, after adding an unlimited dimension, variable. C On exit, any open netCDF files are closed. subroutine test_nf_inq() USE tests implicit none integer ncid integer ncid2 !/* for scratch netCDF dataset */ integer ndims1 !/* number of dimensions */ integer nvars1 !/* number of variables */ integer ngatts1 !/* number of global attributes */ integer recdim1 !/* id of unlimited dimension */ integer err integer ndims0 integer nvars0 integer ngatts0 integer recdim0 integer did integer vid err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) C /* Try on bad handle */ err = nf_inq(BAD_ID, ndims1, nvars1, ngatts1, recdim1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq(ncid, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq: ', err) else if (ndims1 .ne. NDIMS) then call errori('nf_inq: wrong number of dimensions returned: ', + ndims1) else if (nvars1 .ne. NVARS) then call errori('nf_inq: wrong number of variables returned: ', + nvars1) else if (ngatts1 .ne. NGATTS) then call errori( + 'nf_inq: wrong number of global atts returned: ', + ngatts1) else if (recdim1 .ne. RECDIM) then call errori('nf_inq: wrong record dimension ID returned: ', + recdim1) end if if (.not. readonly) then !/* tests using netCDF scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid2) if (err .ne. 0) then call errore('nf_create: ', err) else !/* add dim, var, gatt, check inq */ err = nf_enddef(ncid2) !/* enter data mode */ err = nf_inq(ncid2, ndims0, nvars0, ngatts0, recdim0) if (err .ne. 0) + call errore('nf_inq: ', err) err = nf_redef(ncid2) !/* enter define mode */ C /* Check that inquire still works in define mode */ err = nf_inq(ncid2, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq in define mode: ', err) else if (ndims1 .ne. ndims0) then call errori('nf_inq in define mode: ndims1 wrong, ', + ndims1) else if (nvars1 .ne. nvars0) then call errori('nf_inq in define mode: nvars1 wrong, ', + nvars1) else if (ngatts1 .ne. ngatts0) then call errori( + 'nf_inq in define mode: ngatts wrong, ', ngatts1) else if (recdim1 .ne. recdim0) then call errori('nf_inq in define mode: recdim1 wrong, ', + recdim1) end if C /* Add dim, var, global att */ err = nf_def_dim(ncid2, 'inqd', 1, did) if (err .ne. 0) + call errore('nf_def_dim: ', err) err = nf_def_var(ncid2, 'inqv', NF_FLOAT, 0, (/0/), vid) if (err .ne. 0) + call errore('nf_def_var: ', err) err = nf_put_att_text(ncid2, NF_GLOBAL, 'inqa', + len('stuff'), 'stuff') if (err .ne. 0) + call errore('nf_put_att_text: ', err) C /* Make sure nf_inq sees the additions while in define mode */ err = nf_inq(ncid2, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq in define mode: ', err) else if (ndims1 .ne. ndims0 + 1) then call errori('nf_inq in define mode: ndims1 wrong, ', + ndims1) else if (nvars1 .ne. nvars0 + 1) then call errori('nf_inq in define mode: nvars wrong, ', + nvars1) else if (ngatts1 .ne. ngatts0 + 1) then call errori('nf_inq in define mode: ngatts1 wrong, ', + ngatts1) end if err = nf_enddef(ncid2) if (err .ne. 0) + call errore('nf_enddef: ', err) C /* Make sure nf_inq stills sees additions in data mode */ err = nf_inq(ncid2, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq failed in data mode: ',err) else if (ndims1 .ne. ndims0 + 1) then call errori('nf_inq in define mode: ndims1 wrong, ', + ndims1) else if (nvars1 .ne. nvars0 + 1) then call errori('nf_inq in define mode: nvars wrong, ', + nvars1) else if (ngatts1 .ne. ngatts0 + 1) then call errori('nf_inq in define mode: ngatts1 wrong, ', + ngatts1) end if err = nf_close(ncid2) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end if end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_natts() USE tests implicit none integer ncid integer ngatts1 !/* number of global attributes */ integer err err = nf_inq_natts(BAD_ID, ngatts1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_natts(ncid, ngatts1) if (err .ne. 0) then call errore('nf_inq_natts: ', err) else if (ngatts1 .ne. NGATTS) then call errori( + 'nf_inq_natts: wrong number of global atts returned, ', + ngatts1) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_ndims() USE tests implicit none integer ncid integer ndims1 integer err err = nf_inq_ndims(BAD_ID, ndims1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_ndims(ncid, ndims1) if (err .ne. 0) then call errore('nf_inq_ndims: ', err) else if (ndims1 .ne. NDIMS) then call errori('nf_inq_ndims: wrong number returned, ', ndims1) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_nvars() USE tests implicit none integer ncid integer nvars1 integer err err = nf_inq_nvars(BAD_ID, nvars1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_nvars(ncid, nvars1) if (err .ne. 0) then call errore('nf_inq_nvars: ', err) else if (nvars1 .ne. NVARS) then call errori('nf_inq_nvars: wrong number returned, ', nvars1) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_unlimdim() USE tests implicit none integer ncid integer unlimdim integer err err = nf_inq_unlimdim(BAD_ID, unlimdim) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_unlimdim(ncid, unlimdim) if (err .ne. 0) then call errore('nf_inq_unlimdim: ', err) else if (unlimdim .ne. RECDIM) then call errori('nf_inq_unlimdim: wrong number returned, ', + unlimdim) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_format() USE tests implicit none integer ncid integer nformat integer err err = nf_inq_format(BAD_ID, nformat) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_format(ncid, nformat) if (err .ne. 0) then call errore('nf_inq_format: ', err) else if (nformat .ne. nf_format_classic .and. #ifdef ENABLE_CDF5 + nformat .ne. nf_format_cdf5 .and. #endif #ifdef USE_NETCDF4 + nformat .ne. nf_format_netcdf4 .and. #endif + nformat .ne. nf_format_64bit) then call errori('nf_inq_format: wrong format number returned, ', + nformat) end if err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dimid() USE tests implicit none integer ncid integer dimid integer i integer err err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_dimid(ncid, 'noSuch', dimid) if (err .ne. NF_EBADDIM) + call errore('bad dim name: ', err) do 1, i = 1, NDIMS err = nf_inq_dimid(BAD_ID, dim_name(i), dimid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dimid(ncid, dim_name(i), dimid) if (err .ne. 0) then call errore('nf_inq_dimid: ', err) else if (dimid .ne. i) then call errori('expected ', i) call errori('got ', dimid) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dim() USE tests implicit none integer ncid integer i integer err character*(NF_MAX_NAME) name integer length err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NDIMS err = nf_inq_dim(BAD_ID, i, name, length) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dim(ncid, BAD_DIMID, name, length) if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_inq_dim(ncid, i, name, length) if (err .ne. 0) then call errore('nf_inq_dim: ', err) else if (dim_name(i) .ne. name) then call errorc('name unexpected: ', name) else if (dim_len(i) .ne. length) then call errori('size unexpected: ', length) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dimlen() USE tests implicit none integer ncid integer i integer err integer length err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NDIMS err = nf_inq_dimlen(BAD_ID, i, length) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dimlen(ncid, BAD_DIMID, length) if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_inq_dimlen(ncid, i, length) if (err .ne. 0) then call errore('nf_inq_dimlen: ', err) else if (dim_len(i) .ne. length) then call errori('size unexpected: ', length) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_dimname() USE tests implicit none integer ncid integer i integer err character*(NF_MAX_NAME) name err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NDIMS err = nf_inq_dimname(BAD_ID, i, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_dimname(ncid, BAD_DIMID, name) if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_inq_dimname(ncid, i, name) if (err .ne. 0) then call errore('nf_inq_dimname: ', err) else if (dim_name(i) .ne. name) then call errorc('name unexpected: ', name) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varid() USE tests implicit none integer ncid integer vid integer i integer err err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_varid(ncid, 'noSuch', vid) if (err .ne. NF_ENOTVAR) + call errore('bad ncid: ', err) do 1, i = 1, NVARS err = nf_inq_varid(BAD_ID, var_name(i), vid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varid(ncid, var_name(i), vid) if (err .ne. 0) then call errore('nf_inq_varid: ', err) else if (vid .ne. i) then call errori('varid unexpected: ', vid) endif 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_var() USE tests implicit none integer ncid integer i integer err character*(NF_MAX_NAME) name integer datatype integer ndims1 integer dimids(MAX_RANK) integer na err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_var(BAD_ID, i, name, datatype, ndims1, dimids, + na) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_var(ncid,BAD_VARID,name,datatype,ndims1,dimids, + na) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_var(ncid, i, name, datatype, ndims1, dimids, + na) if (err .ne. 0) then call errore('nf_inq_var: ', err) else if (var_name(i) .ne. name) then call errorc('name unexpected: ', name) else if (var_type(i) .ne. datatype) then call errori('type unexpected: ', datatype) else if (var_rank(i) .ne. ndims1) then call errori('ndims1 expected: ', ndims1) else if (.not.int_vec_eq(var_dimid(1,i),dimids,ndims1)) then call error('unexpected dimid') else if (var_natts(i) .ne. na) then call errori('natts unexpected: ', na) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_vardimid() USE tests implicit none integer ncid integer i integer err integer dimids(MAX_RANK) err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_vardimid(BAD_ID, i, dimids) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_vardimid(ncid, BAD_VARID, dimids) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_vardimid(ncid, i, dimids) if (err .ne. 0) then call errore('nf_inq_vardimid: ', err) else if (.not.int_vec_eq(var_dimid(1,i), dimids, + var_rank(i))) then call error('unexpected dimid') end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varname() USE tests implicit none integer ncid integer i integer err character*(NF_MAX_NAME) name err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_varname(BAD_ID, i, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varname(ncid, BAD_VARID, name) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_varname(ncid, i, name) if (err .ne. 0) then call errore('nf_inq_varname: ', err) else if (var_name(i) .ne. name) then call errorc('name unexpected: ', name) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varnatts() USE tests implicit none integer ncid integer i integer err integer na err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS ! start with global attributes err = nf_inq_varnatts(BAD_ID, i, na) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varnatts(ncid, BAD_VARID, na) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_varnatts(ncid, VARID(i), na) if (err .ne. 0) then call errore('nf_inq_varnatts: ', err) else if (NATTS(i) .ne. na) then ! works for global attributes call errori('natts unexpected: ', na) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_varndims() USE tests implicit none integer ncid integer i integer err integer ndims1 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_varndims(BAD_ID, i, ndims1) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_varndims(ncid, BAD_VARID, ndims1) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_varndims(ncid, i, ndims1) if (err .ne. 0) then call errore('nf_inq_varndims: ', err) else if (var_rank(i) .ne. ndims1) then call errori('ndims1 unexpected: ', ndims1) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_vartype() USE tests implicit none integer ncid integer i integer err integer datatype err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS err = nf_inq_vartype(BAD_ID, i, datatype) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_vartype(ncid, BAD_VARID, datatype) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_vartype(ncid, i, datatype) if (err .ne. 0) then call errore('nf_inq_vartype: ', err) else if (var_type(i) .ne. datatype) then call errori('type unexpected: ', datatype) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_att() USE tests implicit none integer ncid integer i integer j integer err integer t integer n err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) err = nf_inq_att(BAD_ID, i, ATT_NAME(j,i), t, n) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_att(ncid, BAD_VARID, ATT_NAME(j,i), t, n) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_att(ncid, i, 'noSuch', t, n) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) err = nf_inq_att(ncid, i, ATT_NAME(j,i), t, n) if (err .ne. 0) then call error(nf_strerror(err)) else if (t .ne. ATT_TYPE(j,i)) + call error('type not that expected') if (n .ne. ATT_LEN(j,i)) + call error('length not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_attlen() USE tests implicit none integer ncid integer i integer j integer err integer len err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_attlen(ncid, i, 'noSuch', len) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) do 2, j = 1, NATTS(i) err = nf_inq_attlen(BAD_ID, i, ATT_NAME(j,i), len) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_attlen(ncid, BAD_VARID, ATT_NAME(j,i), len) if (err .ne. NF_ENOTVAR) + call errore('bad varid: ', err) err = nf_inq_attlen(ncid, i, ATT_NAME(j,i), len) if (err .ne. 0) then call error(nf_strerror(err)) else if (len .ne. ATT_LEN(j,i)) + call error('len not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_atttype() USE tests implicit none integer ncid integer i integer j integer err integer datatype err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_atttype(ncid, i, 'noSuch', datatype) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) do 2, j = 1, NATTS(i) err = nf_inq_atttype(BAD_ID, i, ATT_NAME(j,i), datatype) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_atttype(ncid, BAD_VARID, ATT_NAME(j,i), + datatype) if (err .ne. NF_ENOTVAR) + call errore('bad varid: ', err) err = nf_inq_atttype(ncid, i, ATT_NAME(j,i), datatype) if (err .ne. 0) then call error(nf_strerror(err)) else if (datatype .ne. ATT_TYPE(j,i)) + call error('type not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_attname() USE tests implicit none integer ncid integer i integer j integer err character*(NF_MAX_NAME) name err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_attname(ncid, i, BAD_ATTNUM, name) if (err .ne. NF_ENOTATT) + call errore('Bad attribute number: ', err) err = nf_inq_attname(ncid, i, NATTS(i)+1, name) if (err .ne. NF_ENOTATT) + call errore('Bad attribute number: ', err) do 2, j = 1, NATTS(i) err = nf_inq_attname(BAD_ID, i, j, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_attname(ncid, BAD_VARID, j, name) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_inq_attname(ncid, i, j, name) if (err .ne. 0) then call error(nf_strerror(err)) else if (ATT_NAME(j,i) .ne. name) + call error('name not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end subroutine test_nf_inq_attid() USE tests implicit none integer ncid integer i integer j integer err integer attnum err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS err = nf_inq_attid(ncid, i, 'noSuch', attnum) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) do 2, j = 1, NATTS(i) err = nf_inq_attid(BAD_ID, i, ATT_NAME(j,i), attnum) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_inq_attid(ncid, BAD_VARID, ATT_NAME(j,i), + attnum) if (err .ne. NF_ENOTVAR) + call errore('bad varid: ', err) err = nf_inq_attid(ncid, i, ATT_NAME(j,i), attnum) if (err .ne. 0) then call error(nf_strerror(err)) else if (attnum .ne. j) + call error('attnum not that expected') end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) end netcdf-fortran-4.6.3+ds/nf_test/tst_f77_v2.F0000664000175000017500000001124115205004070020673 0ustar alastairalastairC This is part of netCDF, Copyright 2006, UCAR C This test program uses the fortran 77 v2 API to create a simple C data file with some phony data in it. This program was originally C based on one contributed by Jeremy Kepner, C jvkepner@astro.Princeton.EDU. C Also test the char array bug reported in C https://github.com/Unidata/netcdf-fortran/issues/329. C This program will bail out in the event of a netcdf error. C Ed Hartnett, 2009 C MODS C Leon Benjamin, 2022 -- Add test multi-dimensional char variables PROGRAM tst_f77_v2 IMPLICIT NONE include 'netcdf.inc' INTEGER n_dim, x_dim, y_dim, z_dim PARAMETER(n_dim = 3, x_dim = 20, y_dim = 10, z_dim = 5) INTEGER dim_array(n_dim) INTEGER start(n_dim), count(n_dim) integer char_len parameter(char_len = 14) character*14 char_string(2) INTEGER start_1d(2), count_1d(2) INTEGER ncid, errcode INTEGER x_id, y_id, z_id, arr_id, char_id, char_dim_id REAL array(x_dim,y_dim,z_dim) INTEGER i,j,k character*10 char_dim_name_in integer char_dim_size_in character*11 char_var_name_in integer var_type_in, nvdims_in integer vdims_in(3) integer natts_in character*14 char_string_in(2) integer char_len_in char_len_in = 14 C Put something into the array. DO i=1,x_dim DO j=1,y_dim DO k=1,z_dim array(i,j,k) = (i-1) + x_dim*(j-1) + x_dim*y_dim*(k-1) ENDDO ENDDO ENDDO C Put something into the character string. char_string(1) = 'dirty_old_town' char_string(2) = 'clean_new_town' print *, '' print *, ' *** Testing netCDF v2 api for F77.' C Create file. ncid = NCCRE('tst03_f77_v2.nc', NCCLOB, errcode) if (errcode .ne. 0) stop 2 C Create Dimensions for floating point data. x_id = NCDDEF(ncid, 'X', x_dim, errcode) y_id = NCDDEF(ncid, 'Y', y_dim, errcode) z_id = NCDDEF(ncid, 'Z', z_dim, errcode) C Assign dimensions to array. dim_array(1) = z_id dim_array(2) = y_id dim_array(3) = x_id C Create a float variable. arr_id = NCVDEF(ncid, 'array', NCFLOAT, n_dim, dim_array, errcode) if (errcode .ne. 0) stop 2 C Create Dimension for char array. char_dim_id = NCDDEF(ncid, 'string_len', char_len, errcode) if (errcode .ne. 0) stop 2 dim_array(1) = char_dim_id C Create Dimension for char array. dim_array(2) = NCDDEF(ncid, 'list_size', 2, errcode) if (errcode .ne. 0) stop 2 char_id = NCVDEF(ncid, 'Dublin_song', NCCHAR, 2, dim_array, & errcode) if (errcode .ne. 0) stop 2 C Leave define mode. CALL NCENDF(ncid, errcode) if (errcode .ne. 0) stop 2 C Write float data to file. start(1) = 1 start(2) = 1 start(3) = 1 count(1) = z_dim count(2) = y_dim count(3) = x_dim CALL NCVPT(ncid, arr_id, start, count, array, errcode) if (errcode .ne. 0) stop 2 C Write char data to file. start_1d(1) = 1 count_1d(1) = char_len start_1d(2) = 1 count_1d(2) = 2 CALL NCVPTC(ncid, char_id, start_1d, count_1d, char_string, & char_len*2, errcode) if (errcode .ne. 0) stop 2 C Close the file. CALL NCCLOS(ncid, errcode) if (errcode .ne. 0) stop 2 C Reopen the file. ncid = NCOPN('tst03_f77_v2.nc', NCNOWRIT, errcode) if (errcode .ne. 0) stop 2 C Learn about char array dimension. call NCDINQ(NCID, 4, char_dim_name_in, char_dim_size_in, errcode) if (errcode .ne. 0) stop 2 if (char_dim_size_in .ne. char_len) stop 3 if (char_dim_name_in .ne. 'string_len') stop 4 C Learn about the char array data. call NCVINQ(NCID, 2, char_var_name_in, var_type_in, nvdims_in, & vdims_in, natts_in, errcode) if (errcode .ne. 0) stop 2 if (char_var_name_in .ne. 'Dublin_song') stop 5 if (var_type_in .ne. NCCHAR) stop 6 if (nvdims_in .ne. 2) stop 7 if (vdims_in(1) .ne. 4) stop 8 if (natts_in .ne. 0) stop 9 C Read the data in the char array. start_1d(1) = 1 count_1d(1) = char_len start_1d(2) = 1 count_1d(2) = 2 char_len_in = char_len*2 CALL NCVGTC(ncid, char_id, start_1d, count_1d, char_string_in, & char_len_in, errcode) if (errcode .ne. 0) stop 2 if (char_string_in(1) .ne. 'dirty_old_town') stop 10 if (char_string_in(2) .ne. 'clean_new_town') stop 11 C Close the file. CALL NCCLOS(ncid, errcode) if (errcode .ne. 0) stop 2 print *, ' *** SUCCESS!' END netcdf-fortran-4.6.3+ds/nf_test/nf_test.F0000664000175000017500000003564115205004070020443 0ustar alastairalastairC Copyright 1996-2019, UCAR/Unidata C See COPYRIGHT file for copying and redistribution conditions. C Test driver for netCDF-3 interface. This program performs tests against C the netCDF-3 specification for all user-level functions in an C implementation of the netCDF library. C Steve Emmerson, Ed Hartnett subroutine test(name, func) implicit none #include "tests.inc" character*(*) name external func write(*, 1) name 1 format(' *** testing ', a, ' ... ') nfails = 0 call func() nfailsTotal = nfailsTotal + nfails if ( nfails .ne. 0) then print *, ' ' print *, ' ### ', nfails, ' FAILURES TESTING ', name, + '! ###' C continue the remaining tests, uncomment below to stop now C stop 2 end if end program nf_test implicit none #include "tests.inc" integer status integer i, num_cmode, err, dft_fmt integer cmode(3) external test_nf_strerror external test_nf_open external test_nf_close external test_nf_inq external test_nf_inq_dimid external test_nf_inq_dim external test_nf_inq_dimlen external test_nf_inq_dimname external test_nf_inq_varid external test_nf_inq_var external test_nf_inq_natts external test_nf_inq_ndims external test_nf_inq_nvars external test_nf_inq_unlimdim external test_nf_inq_format external test_nf_inq_vardimid external test_nf_inq_varname external test_nf_inq_varnatts external test_nf_inq_varndims external test_nf_inq_vartype external test_nf_get_var1_text #if defined(NF_INT1_T) external test_nf_get_var1_int1 #endif #if defined(NF_INT2_T) external test_nf_get_var1_int2 #endif external test_nf_get_var1_int external test_nf_get_var1_real external test_nf_get_var1_double external test_nf_get_var_text #if defined(NF_INT1_T) external test_nf_get_var_int1 #endif #if defined(NF_INT2_T) external test_nf_get_var_int2 #endif external test_nf_get_var_int external test_nf_get_var_real external test_nf_get_var_double external test_nf_get_vara_text #if defined(NF_INT1_T) external test_nf_get_vara_int1 #endif #if defined(NF_INT2_T) external test_nf_get_vara_int2 #endif external test_nf_get_vara_int external test_nf_get_vara_real external test_nf_get_vara_double external test_nf_get_vars_text #if defined(NF_INT1_T) external test_nf_get_vars_int1 #endif #if defined(NF_INT2_T) external test_nf_get_vars_int2 #endif external test_nf_get_vars_int external test_nf_get_vars_real external test_nf_get_vars_double external test_nf_get_varm_text #if defined(NF_INT1_T) external test_nf_get_varm_int1 #endif #if defined(NF_INT2_T) external test_nf_get_varm_int2 #endif external test_nf_get_varm_int external test_nf_get_varm_real external test_nf_get_varm_double external test_nf_get_att_text #if defined(NF_INT1_T) external test_nf_get_att_int1 #endif #if defined(NF_INT2_T) external test_nf_get_att_int2 #endif external test_nf_get_att_int external test_nf_get_att_real external test_nf_get_att_double external test_nf_inq_att external test_nf_inq_attname external test_nf_inq_attid external test_nf_inq_attlen external test_nf_inq_atttype external test_nf_create external test_nf_redef external test_nf_enddef external test_nf_sync external test_nf_abort external test_nf_def_dim external test_nf_rename_dim external test_nf_def_var external test_nf_put_var1_text #if defined(NF_INT1_T) external test_nf_put_var1_int1 #endif #if defined(NF_INT2_T) external test_nf_put_var1_int2 #endif external test_nf_put_var1_int external test_nf_put_var1_real external test_nf_put_var1_double external test_nf_put_var_text #if defined(NF_INT1_T) external test_nf_put_var_int1 #endif #if defined(NF_INT2_T) external test_nf_put_var_int2 #endif external test_nf_put_var_int external test_nf_put_var_real external test_nf_put_var_double external test_nf_put_vara_text #if defined(NF_INT1_T) external test_nf_put_vara_int1 #endif #if defined(NF_INT2_T) external test_nf_put_vara_int2 #endif external test_nf_put_vara_int external test_nf_put_vara_real external test_nf_put_vara_double external test_nf_put_vars_text #if defined(NF_INT1_T) external test_nf_put_vars_int1 #endif #if defined(NF_INT2_T) external test_nf_put_vars_int2 #endif external test_nf_put_vars_int external test_nf_put_vars_real external test_nf_put_vars_double external test_nf_put_varm_text #if defined(NF_INT1_T) external test_nf_put_varm_int1 #endif #if defined(NF_INT2_T) external test_nf_put_varm_int2 #endif external test_nf_put_varm_int external test_nf_put_varm_real external test_nf_put_varm_double external test_nf_rename_var external test_nf_put_att_text #if defined(NF_INT1_T) external test_nf_put_att_int1 #endif #if defined(NF_INT2_T) external test_nf_put_att_int2 #endif external test_nf_put_att_int external test_nf_put_att_real external test_nf_put_att_double external test_nf_copy_att external test_nf_rename_att external test_nf_del_att external test_nf_set_fill external test_nf_set_default_format external ignorefpe print *, '' print *, '*** Testing netCDF-3 Fortran 77 API.' call ignorefpe(1) testfile = 'test.nc' scratch = 'scratch.nc' nfailsTotal = 0 progname = 'nf_test' max_nmpt = 8 write(*, *) 'NetCDF version: ', nf_inq_libvers() num_cmode = 1 cmode(1) = 0 #ifdef ENABLE_CDF5 num_cmode = num_cmode + 1 cmode(num_cmode) = nf_cdf5 #endif #ifdef USE_NETCDF4 num_cmode = num_cmode + 1 cmode(num_cmode) = nf_netcdf4 #endif do i = 1, num_cmode if (cmode(i) .EQ. 0) then print*,"testing classic CDF-1 format" #ifdef ENABLE_CDF5 elseif (cmode(i) .EQ. nf_cdf5) then print*,"testing CDF-5 format" #endif #ifdef USE_NETCDF4 elseif (cmode(i) .EQ. nf_netcdf4) then print*,"testing NetCDF-4 format" #endif endif C /* Initialize global variables defining test file */ call init_gvars call write_file(testfile) if (nfailsTotal .gt. 0) call udexit(1) C /* delete any existing scratch netCDF file */ status = nf_delete(scratch) C /* Test read-only functions, using pregenerated test-file */ call test('nf_strerror', test_nf_strerror) call test('nf_open', test_nf_open) call test('nf_close', test_nf_close) call test('nf_inq', test_nf_inq) call test('nf_inq_dimid', test_nf_inq_dimid) call test('nf_inq_dim', test_nf_inq_dim) call test('nf_inq_dimlen', test_nf_inq_dimlen) call test('nf_inq_dimname', test_nf_inq_dimname) call test('nf_inq_varid', test_nf_inq_varid) call test('nf_inq_var', test_nf_inq_var) call test('nf_inq_natts', test_nf_inq_natts) call test('nf_inq_ndims', test_nf_inq_ndims) call test('nf_inq_nvars', test_nf_inq_nvars) call test('nf_inq_unlimdim', test_nf_inq_unlimdim) call test('nf_inq_format', test_nf_inq_format) call test('nf_inq_vardimid', test_nf_inq_vardimid) call test('nf_inq_varname', test_nf_inq_varname) call test('nf_inq_varnatts', test_nf_inq_varnatts) call test('nf_inq_varndims', test_nf_inq_varndims) call test('nf_inq_vartype', test_nf_inq_vartype) call test('nf_get_var1_text', test_nf_get_var1_text) #if defined(NF_INT1_T) call test('nf_get_var1_int1', test_nf_get_var1_int1) #endif #if defined(NF_INT2_T) call test('nf_get_var1_int2', test_nf_get_var1_int2) #endif call test('nf_get_var1_int', test_nf_get_var1_int) call test('nf_get_var1_real', test_nf_get_var1_real) call test('nf_get_var1_double', test_nf_get_var1_double) call test('nf_get_var_text', test_nf_get_var_text) #if defined(NF_INT1_T) call test('nf_get_var_int1', test_nf_get_var_int1) #endif #if defined(NF_INT2_T) call test('nf_get_var_int2', test_nf_get_var_int2) #endif call test('nf_get_var_int', test_nf_get_var_int) call test('nf_get_var_real', test_nf_get_var_real) call test('nf_get_var_double', test_nf_get_var_double) call test('nf_get_vara_text', test_nf_get_vara_text) #if defined(NF_INT1_T) call test('nf_get_vara_int1', test_nf_get_vara_int1) #endif #if defined(NF_INT2_T) call test('nf_get_vara_int2', test_nf_get_vara_int2) #endif call test('nf_get_vara_int', test_nf_get_vara_int) call test('nf_get_vara_real', test_nf_get_vara_real) call test('nf_get_vara_double', test_nf_get_vara_double) call test('nf_get_vars_text', test_nf_get_vars_text) #if defined(NF_INT1_T) call test('nf_get_vars_int1', test_nf_get_vars_int1) #endif #if defined(NF_INT2_T) call test('nf_get_vars_int2', test_nf_get_vars_int2) #endif call test('nf_get_vars_int', test_nf_get_vars_int) call test('nf_get_vars_real', test_nf_get_vars_real) call test('nf_get_vars_double', test_nf_get_vars_double) call test('nf_get_varm_text', test_nf_get_varm_text) #if defined(NF_INT1_T) call test('nf_get_varm_int1', test_nf_get_varm_int1) #endif #if defined(NF_INT2_T) call test('nf_get_varm_int2', test_nf_get_varm_int2) #endif call test('nf_get_varm_int', test_nf_get_varm_int) call test('nf_get_varm_real', test_nf_get_varm_real) call test('nf_get_varm_double', test_nf_get_varm_double) call test('nf_get_att_text', test_nf_get_att_text) #if defined(NF_INT1_T) call test('nf_get_att_int1', test_nf_get_att_int1) #endif #if defined(NF_INT2_T) call test('nf_get_att_int2', test_nf_get_att_int2) #endif call test('nf_get_att_int', test_nf_get_att_int) call test('nf_get_att_real', test_nf_get_att_real) call test('nf_get_att_double', test_nf_get_att_double) call test('nf_inq_att', test_nf_inq_att) call test('nf_inq_attname', test_nf_inq_attname) call test('nf_inq_attid', test_nf_inq_attid) call test('nf_inq_attlen', test_nf_inq_attlen) call test('nf_inq_atttype', test_nf_inq_atttype) C /* Test write functions */ call test('nf_create', test_nf_create) call test('nf_redef', test_nf_redef) call test('nf_enddef', test_nf_enddef) call test('nf_sync', test_nf_sync) call test('nf_abort', test_nf_abort) call test('nf_def_dim', test_nf_def_dim) call test('nf_rename_dim', test_nf_rename_dim) call test('nf_def_var', test_nf_def_var) call test('nf_put_var1_text', test_nf_put_var1_text) #if defined(NF_INT1_T) call test('nf_put_var1_int1', test_nf_put_var1_int1) #endif #if defined(NF_INT2_T) call test('nf_put_var1_int2', test_nf_put_var1_int2) #endif call test('nf_put_var1_int', test_nf_put_var1_int) call test('nf_put_var1_real', test_nf_put_var1_real) call test('nf_put_var1_double', test_nf_put_var1_double) call test('nf_put_var_text', test_nf_put_var_text) #if defined(NF_INT1_T) call test('nf_put_var_int1', test_nf_put_var_int1) #endif #if defined(NF_INT2_T) call test('nf_put_var_int2', test_nf_put_var_int2) #endif call test('nf_put_var_int', test_nf_put_var_int) call test('nf_put_var_real', test_nf_put_var_real) call test('nf_put_var_double', test_nf_put_var_double) call test('nf_put_vara_text', test_nf_put_vara_text) #if defined(NF_INT1_T) call test('nf_put_vara_int1', test_nf_put_vara_int1) #endif #if defined(NF_INT2_T) call test('nf_put_vara_int2', test_nf_put_vara_int2) #endif call test('nf_put_vara_int', test_nf_put_vara_int) call test('nf_put_vara_real', test_nf_put_vara_real) call test('nf_put_vara_double', test_nf_put_vara_double) call test('nf_put_vars_text', test_nf_put_vars_text) #if defined(NF_INT1_T) call test('nf_put_vars_int1', test_nf_put_vars_int1) #endif #if defined(NF_INT2_T) call test('nf_put_vars_int2', test_nf_put_vars_int2) #endif call test('nf_put_vars_int', test_nf_put_vars_int) call test('nf_put_vars_real', test_nf_put_vars_real) call test('nf_put_vars_double', test_nf_put_vars_double) call test('nf_put_varm_text', test_nf_put_varm_text) #if defined(NF_INT1_T) call test('nf_put_varm_int1', test_nf_put_varm_int1) #endif #if defined(NF_INT2_T) call test('nf_put_varm_int2', test_nf_put_varm_int2) #endif call test('nf_put_varm_int', test_nf_put_varm_int) call test('nf_put_varm_real', test_nf_put_varm_real) call test('nf_put_varm_double', test_nf_put_varm_double) call test('nf_rename_var', test_nf_rename_var) call test('nf_put_att_text', test_nf_put_att_text) #if defined(NF_INT1_T) call test('nf_put_att_int1', test_nf_put_att_int1) #endif #if defined(NF_INT2_T) call test('nf_put_att_int2', test_nf_put_att_int2) #endif call test('nf_put_att_int', test_nf_put_att_int) call test('nf_put_att_real', test_nf_put_att_real) call test('nf_put_att_double', test_nf_put_att_double) call test('nf_copy_att', test_nf_copy_att) call test('nf_rename_att', test_nf_rename_att) call test('nf_del_att', test_nf_del_att) call test('nf_set_fill', test_nf_set_fill) call test('nf_set_default_format', + test_nf_set_default_format) ! reset default format, otherwise the remaining tests will use ! the one set in the last test err = nf_set_default_format(NF_FORMAT_CLASSIC, dft_fmt) enddo print *,'Total number of failures: ', nfailsTotal if (nfailsTotal .ne. 0) stop 2 print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test/test03_put.F0000775000175000017500000076654415205004070021033 0ustar alastairalastairC Do not edit this file. It is produced from the corresponding .m4 source */ C******************************************************************** C Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: test_put.m4,v 1.16 2008/04/30 16:50:45 ed Exp $ C******************************************************************** C C ensure hash value within range for internal TYPE C function hash_text(type, rank, index, itype) use tests, ONLY: internal_min, internal_max, RK8, hash4 implicit none integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum real(RK8) hash_text minimum = internal_min(itype) maximum = internal_max(itype) hash_text = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end #ifdef NF_INT1_T C C ensure hash value within range for internal TYPE C function hash_int1(type, rank, index, itype) use tests, ONLY: internal_min, internal_max, RK8, hash4 implicit none integer type integer rank integer index(1) integer itype real(RK8) hash_int1 doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_int1 = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end #endif #ifdef NF_INT2_T C C ensure hash value within range for internal TYPE C function hash_int2(type, rank, index, itype) use tests, ONLY: internal_min, internal_max, RK8, hash4 implicit none integer type integer rank integer index(1) integer itype doubleprecision minimum doubleprecision maximum real(RK8) hash_int2 minimum = internal_min(itype) maximum = internal_max(itype) hash_int2 = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end #endif C C ensure hash value within range for internal TYPE C function hash_int(type, rank, index, itype) use tests, ONLY: internal_min, internal_max, RK8, hash4 implicit none integer type integer rank integer index(1) integer itype real(RK8) hash_int doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_int = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end C C ensure hash value within range for internal TYPE C function hash_real(type, rank, index, itype) use tests, ONLY: internal_min, internal_max, RK8, hash4 implicit none integer type integer rank integer index(1) integer itype real(RK8) hash_real doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_real = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end C C ensure hash value within range for internal TYPE C function hash_double(type, rank, index, itype) use tests, ONLY: internal_min, internal_max, RK8, hash4 implicit none integer type integer rank integer index(1) integer itype real(RK8) hash_double doubleprecision minimum doubleprecision maximum minimum = internal_min(itype) maximum = internal_max(itype) hash_double = max(minimum, min(maximum, hash4( type, rank, + index, itype))) end C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_text(filename) use tests, NDIMSG=>NDIMS, NGATTSG=>NGATTS implicit none character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j character value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_TEXT) err = nf_get_var1_text(ncid, i, index, value) if (inRange3(expect,datatype,NFT_TEXT)) then if (in_internal_range(NFT_TEXT, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_text: ', err) else val = ichar(value) if (.not.equal( + val, + expect,var_type(i), + NFT_TEXT)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_int1(filename) use tests, NDIMSG=>NDIMS, NGATTSG=>NGATTS implicit none character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j NF_INT1_T value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT1) err = nf_get_var1_int1(ncid, i, index, value) if (inRange3(expect,datatype,NFT_INT1)) then if (in_internal_range(NFT_INT1, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_int1: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_INT1)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_int2(filename) use tests, NDIMSG=>NDIMS, NGATTSG=>NGATTS implicit none character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j NF_INT2_T value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT2) err = nf_get_var1_int2(ncid, i, index, value) if (inRange3(expect,datatype,NFT_INT2)) then if (in_internal_range(NFT_INT2, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_int2: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_INT2)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_int(filename) use tests, NDIMSG=>NDIMS, NGATTSG=>NGATTS implicit none character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j integer value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT) err = nf_get_var1_int(ncid, i, index, value) if (inRange3(expect,datatype,NFT_INT)) then if (in_internal_range(NFT_INT, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_int: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_INT)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_real(filename) use tests, NDIMSG=>NDIMS, NGATTSG=>NGATTS use tests implicit none character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j real value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_REAL) err = nf_get_var1_real(ncid, i, index, value) if (inRange3(expect,datatype,NFT_REAL)) then if (in_internal_range(NFT_REAL, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_real: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_REAL)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end C C check all vars in file which are (text/numeric) compatible with TYPE C subroutine check_vars_double(filename) use tests, NDIMSG=>NDIMS, NGATTSG=>NGATTS implicit none character*(*) filename integer ncid !/* netCDF id */ integer index(MAX_RANK) integer err !/* status */ integer d integer i integer j doubleprecision value integer datatype integer ndims integer dimids(MAX_RANK) integer ngatts doubleprecision expect character*(NF_MAX_NAME) name integer length logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (canConvert) then err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + ngatts) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. var_name(i)) + call error('Unexpected var_name') if (datatype .ne. var_type(i)) + call error('Unexpected type') if (ndims .ne. var_rank(i)) + call error('Unexpected rank') do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (length .ne. var_shape(j,i)) + call error('Unexpected shape') 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') expect = hash4( var_type(i), var_rank(i), index, + NFT_DOUBLE) err = nf_get_var1_double(ncid, i, index, value) if (inRange3(expect,datatype,NFT_DOUBLE)) then if (in_internal_range(NFT_DOUBLE, + expect)) then if (err .ne. 0) then call errore('nf_get_var1_double: ', err) else val = value if (.not.equal( + val, + expect,var_type(i), + NFT_DOUBLE)) then call error( + 'Var value read not that expected') if (verbose) then call error(' ') call errori('varid: %d', i) call errorc('var_name: ', + var_name(i)) call error('index:') do 4, d = 1, var_rank(i) call errori(' ', index(d)) 4 continue call errord('expect: ', expect) call errord('got: ', val) end if else nok = nok + 1 end if end if end if end if 3 continue end if 1 continue err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_text(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) character value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_TEXT) if (inRange3(expect(k), datatype, + NFT_TEXT)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_TEXT, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_text(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_TEXT) + .and. + in_internal_range(NFT_TEXT, + expect(k))) then val = ichar(value(k)) if (.not.equal( + val, + expect(k),datatype, + NFT_TEXT)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end #ifdef NF_INT1_T C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_int1(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) NF_INT1_T value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_INT1) if (inRange3(expect(k), datatype, + NFT_INT1)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_INT1, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_int1(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_INT1) + .and. + in_internal_range(NFT_INT1, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_INT1)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end #endif #ifdef NF_INT2_T C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_int2(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) NF_INT2_T value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_INT2) if (inRange3(expect(k), datatype, + NFT_INT2)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_INT2, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_int2(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_INT2) + .and. + in_internal_range(NFT_INT2, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_INT2)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end #endif C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_int(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) integer value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_INT) if (inRange3(expect(k), datatype, + NFT_INT)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_INT, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_int(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_INT) + .and. + in_internal_range(NFT_INT, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_INT)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_real(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) real value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_REAL) if (inRange3(expect(k), datatype, + NFT_REAL)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_REAL, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_real(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_REAL) + .and. + in_internal_range(NFT_REAL, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_REAL)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end C/* C * check all attributes in file which are (text/numeric) compatible with TYPE C * ignore any attributes containing values outside range of TYPE C */ subroutine check_atts_double(ncid) use tests implicit none integer ncid integer err !/* status */ integer i integer j integer k integer ndx(1) doubleprecision value(MAX_NELS) integer datatype doubleprecision expect(MAX_NELS) integer length integer nInExtRange !/* number values within external range */ integer nInIntRange !/* number values within internal range */ logical canConvert !/* Both text or both numeric */ integer nok !/* count of valid comparisons */ doubleprecision val nok = 0 do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (canConvert) then err = nf_inq_att(ncid, i, ATT_NAME(j,i), datatype, + length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. ATT_TYPE(j,i)) + call error('nf_inq_att: unexpected type') if (length .ne. ATT_LEN(j,i)) + call error('nf_inq_att: unexpected length') if (.not.(length .le. MAX_NELS)) + stop 2 nInIntRange = 0 nInExtRange = 0 do 4, k = 1, length ndx(1) = k expect(k) = hash4( datatype, -1, ndx, + NFT_DOUBLE) if (inRange3(expect(k), datatype, + NFT_DOUBLE)) then nInExtRange = nInExtRange + 1 if (in_internal_range(NFT_DOUBLE, + expect(k))) + nInIntRange = nInIntRange + 1 end if 4 continue err = nf_get_att_double(ncid, i, + ATT_NAME(j,i), value) if (nInExtRange .eq. length .and. + nInIntRange .eq. length) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 3, k = 1, length if (inRange3(expect(k),datatype,NFT_DOUBLE) + .and. + in_internal_range(NFT_DOUBLE, + expect(k))) then val = value(k) if (.not.equal( + val, + expect(k),datatype, + NFT_DOUBLE)) then call error( + 'att. value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 3 continue end if 2 continue 1 continue call print_nok(nok) end subroutine test_nf_put_var1_text() use tests implicit none integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ character value doubleprecision val value = char(int(5))!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_text(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_text(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_text(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = char(int(hash_text(var_type(i),var_rank(i), + index, NFT_TEXT))) err = nf_put_var1_text(ncid, i, index, value) if (canConvert) then val = ichar(value) if (inRange3(val, var_type(i), NFT_TEXT)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_var1_int1() use tests implicit none integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ NF_INT1_T value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_int1(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_int1(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_int1(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_int1(var_type(i),var_rank(i), + index, NFT_INT1) err = nf_put_var1_int1(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_INT1)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_var1_int2() use tests implicit none integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ NF_INT2_T value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_int2(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_int2(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_int2(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_int2(var_type(i),var_rank(i), + index, NFT_INT2) err = nf_put_var1_int2(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_INT2)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif subroutine test_nf_put_var1_int() use tests implicit none integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ integer value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_int(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_int(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_int(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_int(var_type(i),var_rank(i), + index, NFT_INT) err = nf_put_var1_int(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_INT)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var1_real() use tests implicit none integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ real value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_real(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_real(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_real(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_real(var_type(i),var_rank(i), + index, NFT_REAL) err = nf_put_var1_real(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_REAL)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var1_double() use tests implicit none integer ncid integer i integer j integer err integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ doubleprecision value doubleprecision val value = 5!/* any value would do - only for error cases */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_put_var1_double(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var1_double(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ index(j) = var_shape(j,i) + 1 err = nf_put_var1_double(ncid, i, + index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 0 end if 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value = hash_double(var_type(i),var_rank(i), + index, NFT_DOUBLE) err = nf_put_var1_double(ncid, i, index, value) if (canConvert) then val = value if (inRange3(val, var_type(i), NFT_DOUBLE)) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var_text() use tests implicit none integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ character value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) err = nf_put_var_text(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_text(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_TEXT) 4 continue err = nf_put_var_text(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_text(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_TEXT) 7 continue err = nf_put_var_text(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_var_int1() use tests implicit none integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ NF_INT1_T value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) err = nf_put_var_int1(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_int1(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_int1(var_type(i), + var_rank(i), + index, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT1) 4 continue err = nf_put_var_int1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_int1(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_int1(var_type(i), + var_rank(i), + index, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT1) 7 continue err = nf_put_var_int1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_var_int2() use tests implicit none integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ NF_INT2_T value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) err = nf_put_var_int2(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_int2(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_int2(var_type(i), + var_rank(i), + index, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT2) 4 continue err = nf_put_var_int2(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_int2(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_int2(var_type(i), + var_rank(i), + index, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT2) 7 continue err = nf_put_var_int2(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif subroutine test_nf_put_var_int() use tests implicit none integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ integer value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) err = nf_put_var_int(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_int(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_int(var_type(i), + var_rank(i), + index, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT) 4 continue err = nf_put_var_int(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_int(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_int(var_type(i), + var_rank(i), + index, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT) 7 continue err = nf_put_var_int(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var_real() use tests implicit none integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ real value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) err = nf_put_var_real(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_real(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_real(var_type(i), + var_rank(i), + index, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_REAL) 4 continue err = nf_put_var_real(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_real(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_real(var_type(i), + var_rank(i), + index, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_REAL) 7 continue err = nf_put_var_real(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_var_double() use tests implicit none integer ncid integer vid integer i integer j integer err integer nels integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* All values within external range?*/ doubleprecision value(MAX_NELS) doubleprecision val err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) err = nf_put_var_double(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_var_double(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') value(j) = hash_double(var_type(i), + var_rank(i), + index, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_DOUBLE) 4 continue err = nf_put_var_double(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE .and. + var_dimid(var_rank(i),i) .ne. RECDIM) + call errore('Range error: ', err) endif else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif 1 continue C The preceeding has written nothing for record variables, now try C again with more than 0 records. C Write record number NRECS to force writing of preceding records. C Assumes variable cr is char vector with UNLIMITED dimension. err = nf_inq_varid(ncid, "cr", vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, 'x') if (err .ne. 0) + call errore('nf_put_var1_text: ', err) do 5 i = 1, NVARS C Only test record variables here if (var_rank(i) .ge. 1 .and. + var_dimid(var_rank(i),i) .eq. RECDIM) then canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (var_rank(i) .gt. MAX_RANK) + stop 2 if (var_nels(i) .gt. MAX_NELS) + stop 2 err = nf_put_var_double(BAD_ID, i, value) nels = 1 do 6 j = 1, var_rank(i) nels = nels * var_shape(j,i) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') value(j) = hash_double(var_type(i), + var_rank(i), + index, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_DOUBLE) 7 continue err = nf_put_var_double(ncid, i, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) endif else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif endif 5 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vara_text() use tests implicit none integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ character value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_text(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_text(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_text(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_text(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_text(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_text(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= char(int(hash_text(var_type(i), + var_rank(i), index, + NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_TEXT) 7 continue err = nf_put_vara_text(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_vara_int1() use tests implicit none integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT1_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_int1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_int1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_int1(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_int1(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_int1(var_type(i), + var_rank(i), index, + NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT1) 7 continue err = nf_put_vara_int1(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_vara_int2() use tests implicit none integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT2_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int2(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_int2(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_int2(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int2(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_int2(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_int2(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_int2(var_type(i), + var_rank(i), index, + NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT2) 7 continue err = nf_put_vara_int2(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end #endif subroutine test_nf_put_vara_int() use tests implicit none integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ integer value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_int(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_int(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_int(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_int(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_int(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_int(var_type(i), + var_rank(i), index, + NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_INT) 7 continue err = nf_put_vara_int(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vara_real() use tests implicit none integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ real value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_real(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_real(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_real(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_real(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_real(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_real(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_real(var_type(i), + var_rank(i), index, + NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_REAL) 7 continue err = nf_put_vara_real(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vara_double() use tests implicit none integer ncid integer i integer j integer k integer d integer err integer nslabs integer nels integer start(MAX_RANK) integer edge(MAX_RANK) integer mid(MAX_RANK) integer index(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ doubleprecision value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_put_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_double(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_put_vara_double(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vara_double(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 end if 3 continue C /* Check correct error returned even when nothing to put */ do 20, j = 1, var_rank(i) edge(j) = 0 20 continue err = nf_put_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vara_double(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 21, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vara_double(ncid, i, start, + edge, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 endif 21 continue err = nf_put_vara_double(ncid, i, start, edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 22, j = 1, var_rank(i) edge(j) = 1 22 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue value(j)= hash_double(var_type(i), + var_rank(i), index, + NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), NFT_DOUBLE) 7 continue err = nf_put_vara_double(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', + scratch) end subroutine test_nf_put_vars_text() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ character value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_text(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_text(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index2, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_TEXT) 9 continue err = nf_put_vars_text(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_vars_int1() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT1_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_int1(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_int1(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_int1(var_type(i), + var_rank(i), + index2, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT1) 9 continue err = nf_put_vars_int1(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_vars_int2() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT2_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_int2(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_int2(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_int2(var_type(i), + var_rank(i), + index2, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT2) 9 continue err = nf_put_vars_int2(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif subroutine test_nf_put_vars_int() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ integer value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_int(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_int(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_int(var_type(i), + var_rank(i), + index2, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT) 9 continue err = nf_put_vars_int(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_vars_real() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ real value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_real(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_real(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_real(var_type(i), + var_rank(i), + index2, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_REAL) 9 continue err = nf_put_vars_real(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_vars_double() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ doubleprecision value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_put_vars_double(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_vars_double(ncid, BAD_VARID, start, + edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then ! skip record dim start(j) = var_shape(j,i) + 2 err = nf_put_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) { C for (j = 1 j .lt. var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C } C*/ allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 10, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 10 continue value(j) = hash_double(var_type(i), + var_rank(i), + index2, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_DOUBLE) 9 continue err = nf_put_vars_double(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_varm_text() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ character value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_text(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_text(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = char(int(hash_text(var_type(i), + var_rank(i), + index2, NFT_TEXT))) val = ichar(value(j)) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_TEXT) 11 continue err = nf_put_varm_text(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_text(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_varm_int1() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT1_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_int1(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_int1(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_int1(var_type(i), + var_rank(i), + index2, NFT_INT1) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT1) 11 continue err = nf_put_varm_int1(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int1(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_varm_int2() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ NF_INT2_T value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_int2(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_int2(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_int2(var_type(i), + var_rank(i), + index2, NFT_INT2) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT2) 11 continue err = nf_put_varm_int2(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int2(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif subroutine test_nf_put_varm_int() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ integer value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_int(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_int(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_int(var_type(i), + var_rank(i), + index2, NFT_INT) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_INT) 11 continue err = nf_put_varm_int(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_int(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_varm_real() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ real value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_real(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_real(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_real(var_type(i), + var_rank(i), + index2, NFT_REAL) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_REAL) 11 continue err = nf_put_varm_real(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_real(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_varm_double() use tests implicit none integer ncid integer d integer i integer j integer k integer m integer err integer nels integer nslabs integer nstarts !/* number of different starts */ integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert !/* Both text or both numeric */ logical allInExtRange !/* all values within external range? */ doubleprecision value(MAX_NELS) doubleprecision val integer udshift err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) + stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) + stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_put_varm_double(BAD_ID, i, start, + edge, stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_varm_double(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) if (var_dimid(j,i) .ne. RECDIM) then !/* skip record dim */ start(j) = var_shape(j,i) + 2 err = nf_put_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_put_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_put_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 end if 3 continue !/* Choose a random point dividing each dim into 2 parts */ !/* Put 2^rank (nslabs) slabs so defined */ nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue !/* bits of k determine whether to put lower or upper part of dim */ !/* choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue !/* Random choice of forward or backward */ C/* TODO C if ( roll(2) ) then C do 9, j = 1, var_rank(i) C index(j) = index(j) + C + (count(j) - 1) * stride(j) C stride(j) = -stride(j) C9 continue C end if C*/ if (var_rank(i) .gt. 0) then imap(1) = 1 do 10, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 10 continue end if allInExtRange = .true. do 11 j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes') do 12, d = 1, var_rank(i) index2(d) = index(d) + + (index2(d)-1) * stride(d) 12 continue value(j) = hash_double(var_type(i), + var_rank(i), + index2, NFT_DOUBLE) val = value(j) allInExtRange = allInExtRange .and. + inRange3(val, var_type(i), + NFT_DOUBLE) 11 continue err = nf_put_varm_double(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call check_vars_double(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_att_text() use tests implicit none integer ncid integer i integer j integer k integer err character value(MAX_NELS) err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('NF_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (ATT_TYPE(j,i) .eq. NF_CHAR) then if (.not.(ATT_LEN(j,i) .le. MAX_NELS)) + stop 2 err = nf_put_att_text(BAD_ID, i, + ATT_NAME(j,i), ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_text(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, k = 1, ATT_LEN(j,i) value(k) = char(int(hash(ATT_TYPE(j,i), -1, k))) 3 continue err = nf_put_att_text(ncid, i, ATT_NAME(j,i), + ATT_LEN(j,i), value) if (err .ne. 0) + call error(NF_strerror(err)) end if 2 continue 1 continue call check_atts_text(ncid) err = NF_close(ncid) if (err .ne. 0) + call errore('NF_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #ifdef NF_INT1_T subroutine test_nf_put_att_int1() use tests implicit none integer ncid integer i integer j integer k integer ndx(1) integer err NF_INT1_T value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_int1(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_int1(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_int1(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_int1(ATT_TYPE(j,i), -1, ndx, + NFT_INT1) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_INT1) 3 continue err = nf_put_att_int1(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_int1(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif #ifdef NF_INT2_T subroutine test_nf_put_att_int2() use tests implicit none integer ncid integer i integer j integer k integer ndx(1) integer err NF_INT2_T value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_int2(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_int2(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_int2(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_int2(ATT_TYPE(j,i), -1, ndx, + NFT_INT2) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_INT2) 3 continue err = nf_put_att_int2(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_int2(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end #endif subroutine test_nf_put_att_int() use tests implicit none integer ncid integer i integer j integer k integer ndx(1) integer err integer value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_int(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_int(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_int(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_int(ATT_TYPE(j,i), -1, ndx, + NFT_INT) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_INT) 3 continue err = nf_put_att_int(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_int(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_att_real() use tests implicit none integer ncid integer i integer j integer k integer ndx(1) integer err real value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_real(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_real(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_real(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_real(ATT_TYPE(j,i), -1, ndx, + NFT_REAL) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_REAL) 3 continue err = nf_put_att_real(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_real(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end subroutine test_nf_put_att_double() use tests implicit none integer ncid integer i integer j integer k integer ndx(1) integer err doubleprecision value(MAX_NELS) logical allInExtRange !/* all values within external range? */ doubleprecision val err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) if (.not.(ATT_TYPE(j,i) .eq. NF_CHAR)) then if (.not.((ATT_LEN(j,i) .le. MAX_NELS))) + stop 2 err = nf_put_att_double(BAD_ID, i, + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_put_att_double(ncid, BAD_VARID, + ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_put_att_double(ncid, i, + ATT_NAME(j,i), BAD_TYPE, + ATT_LEN(j,i), value) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k value(k) = hash_double(ATT_TYPE(j,i), -1, ndx, + NFT_DOUBLE) val = value(k) allInExtRange = allInExtRange .and. + inRange3(val, ATT_TYPE(j,i), + NFT_DOUBLE) 3 continue err = nf_put_att_double(ncid, i, ATT_NAME(j,i), + ATT_TYPE(j,i), ATT_LEN(j,i), + value) if (allInExtRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('range error: ', err) end if end if 2 continue 1 continue call check_atts_double(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed:', + scratch) end netcdf-fortran-4.6.3+ds/nf_test/tests.inc0000664000175000017500000001444415205004070020525 0ustar alastairalastair!/********************************************************************* ! * Copyright 1996, UCAR/Unidata ! * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Id: tests.inc,v 1.16 2009/04/02 18:29:21 dmh Exp $ ! *********************************************************************/ !!!! ! Do not tabify this unless you like hitting the 72 char limit !!! !!! #ifndef UD_TESTS_INC #define UD_TESTS_INC !/* The following prevents non-FORTRAN code from appearing in the output. */ #if defined(__osf__) # undef _POSIX_SOURCE # define _POSIX_SOURCE #endif #define NO_NETCDF_2 1 !/* Parameters of test data */ #ifdef NF_INT1_T # define NF_B 1 #else # define NF_B 0 #endif #ifdef NF_INT2_T # define NF_S 1 #else # define NF_S 0 #endif ! Total number of FORTRAN types: #define NUM_FORTRAN_TYPES (3 + NF_S + NF_B) #undef NF_B #undef NF_S #define NTYPES 6 #define NDIMS 5 #define NVARS 136 #define NRECS 2 #define NGATTS NTYPES #define RECDIM 1 #define MAX_RANK 3 #define MAX_NELS 64 #define MAX_DIM_LEN 4 #define MAX_NATTS 3 !/* ! * Limits of external types (based on those in ncx.h): ! */ #define X_CHAR_MIN 0 #define X_CHAR_MAX 127 #define X_INT1_MIN (-128) #define X_INT1_MAX 127 #define X_INT2_MIN (-32768) #define X_INT2_MAX 32767 #define X_INT_MIN (-2147483647-1) #define X_INT_MAX 2147483647 #if 0 #define X_REAL_MAX 3.4028234663852886e+38 #else #define X_REAL_MAX 3.4028234663852886e+37 #endif #define X_REAL_MIN (-X_FLOAT_MAX) #if 0 #define X_DOUBLE_MAX 1.7976931348623157E+308 #else #define X_DOUBLE_MAX 1.7976931348623157D+200 #endif #define X_DOUBLE_MIN (-X_DOUBLE_MAX) #define X_BYTE_MIN X_INT1_MIN #define X_BYTE_MAX X_INT1_MAX #define X_SHORT_MIN X_INT2_MIN #define X_SHORT_MAX X_INT2_MAX #define X_FLOAT_MIN X_REAL_MIN #define X_FLOAT_MAX X_REAL_MAX !/* ! * Examples of invalid argument values: ! */ #define BAD_ID -1 #define BAD_DIMID -1 #define BAD_VARID -2 #define BAD_ATTNUM -1 #define BAD_TYPE 0 #define BAD_FILLMODE -1 #define BAD_NAME 'a/b' !/* ! * Internal data types: ! */ #define NFT_UNSPECIFIED 0 #define NFT_TEXT 16 #define NFT_CHAR NFT_TEXT #define NFT_INT1 17 #define NFT_INT2 18 #define NFT_INT 20 #define NFT_REAL 36 #define NFT_DOUBLE 40 !/* ! * Define a macro for trimming trailing blanks from character variables. ! */ #define TRIM(string) string(1:len_trim(string)) ! ! FORTRAN GETARG() subroutine: ! #ifdef __hpux # define getarg getarg_ #endif #endif /* UD_TESTS_INC */ #include "netcdf.inc" ! /* Global variables - filenames */ CHARACTER*80 testfile !/* netCDF read-only test data */ CHARACTER*80 scratch !/* netCDF test file for writing */ ! /* Global variables - command-line arguments */ LOGICAL CREATE_FILE LOGICAL READONLY LOGICAL VERBOSE INTEGER NFAILS INTEGER MAX_NMPT !/* max num messages per test */ ! /* Global variables - test data */ CHARACTER*2 DIM_NAME(NDIMS) INTEGER DIM_LEN(NDIMS) CHARACTER*(2+MAX_RANK) VAR_NAME(NVARS) INTEGER VAR_TYPE(NVARS) INTEGER VAR_RANK(NVARS) INTEGER VAR_DIMID(MAX_RANK,NVARS) INTEGER VAR_SHAPE(MAX_RANK,NVARS) INTEGER VAR_NELS(NVARS) INTEGER VAR_NATTS(NVARS) CHARACTER*2 ATTNAME(MAX_NATTS,NVARS) CHARACTER*2 GATT_NAME(NGATTS) INTEGER ATTTYPE(NGATTS,NVARS) INTEGER GATT_TYPE(NGATTS) INTEGER ATTLEN(MAX_NATTS,NVARS) INTEGER GATT_LEN(NGATTS) INTEGER FILE_CMODE ! /* Miscellaneous global variables: */ CHARACTER*80 PROGNAME !/* name of the program */ INTEGER NFAILSTOTAL ! /* Common blocks for global variables: */ COMMON /LOGCOM/ CREATE_FILE, * READONLY, !/* don't try to change files */ * VERBOSE !/* print details of tests */ COMMON /TXTCOM/ TESTFILE, * SCRATCH, * DIM_NAME, * VAR_NAME, * ATTNAME, * GATT_NAME, * PROGNAME COMMON /INTCOM/ NFAILS, !/* number of failures in * ! * specific test */ * DIM_LEN, * VAR_TYPE, * VAR_RANK, * VAR_DIMID, * VAR_SHAPE, * VAR_NELS, * VAR_NATTS, * ATTTYPE, * GATT_TYPE, * ATTLEN, * GATT_LEN, * MAX_NMPT, * NFAILSTOTAL, * FILE_CMODE ! /* Functions for accessing attribute test data */ ! /* varid is -1 for NC_GLOBAL so can do global atts in same loop */ !/* EXTERNAL ATT_NAME */ INTEGER VARID INTEGER NATTS CHARACTER*2 ATT_NAME INTEGER ATT_TYPE INTEGER ATT_LEN LOGICAL INRANGE LOGICAL INRANGE_UCHAR LOGICAL INRANGE_FLOAT LOGICAL INRANGE3 LOGICAL IN_INTERNAL_RANGE LOGICAL EQUAL LOGICAL INT_VEC_EQ INTEGER ROLL INTEGER INDEX2INDEXES INTEGER INDEX2NCINDEXES INTEGER INDEXES2INDEX INTEGER NC2DBL INTEGER DBL2NC INTEGER LEN_TRIM DOUBLEPRECISION HASH DOUBLEPRECISION HASH4 DOUBLEPRECISION HASH_TEXT DOUBLEPRECISION HASH_INT1 DOUBLEPRECISION HASH_INT2 DOUBLEPRECISION HASH_INT DOUBLEPRECISION HASH_REAL DOUBLEPRECISION HASH_DOUBLE DOUBLEPRECISION INTERNAL_MIN DOUBLEPRECISION INTERNAL_MAX DOUBLEPRECISION EXTERNAL_MIN DOUBLEPRECISION EXTERNAL_MAX netcdf-fortran-4.6.3+ds/nf_test/test03_write.F0000664000175000017500000013442115205004070021331 0ustar alastairalastairC Copyright 1996-2019, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C Steve Emmerson, Ed Hartnett C Test nf_create C For mode in NF_NOCLOBBER, NF_CLOBBER do: C create netcdf file 'scratch.nc' with no data, close it C test that it can be opened, do nf_inq to check nvars = 0, etc. C Try again in NF_NOCLOBBER mode, check error return C On exit, delete this file subroutine test_nf_create() USE tests implicit none integer clobber !/* 0 for NF_NOCLOBBER, 1 for NF_CLOBBER */ integer err integer ncid integer ndims1 !/* number of dimensions */ integer nvars1 !/* number of variables */ integer ngatts1 !/* number of global attributes */ integer recdim1 !/* id of unlimited dimension */ integer flags flags = NF_NOCLOBBER do 1, clobber = 0, 1 err = nf_create(scratch, flags, ncid) if (err .ne. 0) then call errore('nf_create: ', err) end if err = nf_close(ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if err = nf_open(scratch, NF_NOWRITE, ncid) if (err .ne. 0) then call errore('nf_open: ', err) end if err = nf_inq(ncid, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) then call errore('nf_inq: ', err) else if (ndims1 .ne. 0) then call errori( + 'nf_inq: wrong number of dimensions returned, ', + ndims1) else if (nvars1 .ne. 0) then call errori( + 'nf_inq: wrong number of variables returned, ', + nvars1) else if (ngatts1 .ne. 0) then call errori( + 'nf_inq: wrong number of global atts returned, ', + ngatts1) else if (recdim1 .ge. 1) then call errori( + 'nf_inq: wrong record dimension ID returned, ', + recdim1) end if err = nf_close(ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if flags = NF_CLOBBER 1 continue err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. NF_EEXIST) then call errore('attempt to overwrite file: ', err) end if err = nf_delete(scratch) if (err .ne. 0) then call errori('delete of scratch file failed: ', err) end if end C Test nf_redef C (In fact also tests nf_enddef - called from test_nf_enddef) C BAD_ID C attempt redef (error) & enddef on read-only file C create file, define dims & vars. C attempt put var (error) C attempt redef (error) & enddef. C put vars C attempt def new dims (error) C redef C def new dims, vars. C put atts C enddef C put vars C close C check file: vars & atts subroutine test_nf_redef() USE tests implicit none integer title_len parameter (title_len = 9) integer ncid !/* netcdf id */ integer dimid !/* dimension id */ integer vid !/* variable id */ integer err character*(title_len) title doubleprecision var character*(NF_MAX_NAME) name integer length title = 'Not funny' C /* BAD_ID tests */ err = nf_redef(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_enddef(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* read-only tests */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_redef(ncid) if (err .ne. NF_EPERM) + call errore('nf_redef in NF_NOWRITE mode: ', err) err = nf_enddef(ncid) if (err .ne. NF_ENOTINDEFINE) + call errore('nf_redef in NF_NOWRITE mode: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* tests using scratch file */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_inq_varid(ncid, 'd', vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) var = 1.0 err = nf_put_var1_double(ncid, vid, (/0/), var) if (err .ne. NF_EINDEFINE) + call errore('nf_put_var... in define mode: ', err) err = nf_redef(ncid) if (err .ne. NF_EINDEFINE) + call errore('nf_redef in define mode: ', err) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncid) err = nf_def_dim(ncid, 'abc', 8, dimid) if (err .ne. NF_ENOTINDEFINE) + call errore('nf_def_dim in define mode: ', err) err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) err = nf_def_dim(ncid, 'abc', 8, dimid) if (err .ne. 0) + call errore('nf_def_dim: ', err) err = nf_def_var(ncid, 'abc', NF_INT, 0, (/0/), vid) if (err .ne. 0) + call errore('nf_def_var: ', err) err = nf_put_att_text(ncid, NF_GLOBAL, 'title', len(title), + title) if (err .ne .0) + call errore('nf_put_att_text: ', err) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) var = 1.0 err = nf_put_var1_double(ncid, vid, (/0/), var) if (err .ne. 0) + call errore('nf_put_var1_double: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* check scratch file written as expected */ call check_file(scratch) err = nf_open(scratch, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_dim(ncid, dimid, name, length) if (err .ne. 0) + call errore('nf_inq_dim: ', err) if (name .ne. "abc") + call errori('Unexpected dim name in netCDF ', ncid) if (length .ne. 8) + call errori('Unexpected dim length: ', length) err = nf_get_var1_double(ncid, vid, (/0/), var) if (err .ne. 0) + call errore('nf_get_var1_double: ', err) if (var .ne. 1.0) + call errori( + 'nf_get_var1_double: unexpected value in netCDF ', ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete failed for netCDF: ', err) end C Test nf_enddef C Simply calls test_nf_redef which tests both nf_redef & nf_enddef subroutine test_nf_enddef() USE tests implicit none call test_nf_redef end C Test nf_sync C try with bad handle, check error C try in define mode, check error C try writing with one handle, reading with another on same netCDF subroutine test_nf_sync() USE tests implicit none integer ncidw !/* netcdf id for writing */ integer ncidr !/* netcdf id for reading */ integer err C /* BAD_ID test */ err = nf_sync(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* create scratch file & try nf_sync in define mode */ err = nf_create(scratch, NF_NOCLOBBER, ncidw) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_sync(ncidw) if (err .ne. NF_EINDEFINE) + call errore('nf_sync called in define mode: ', err) C /* write using same handle */ call def_dims(ncidw) call def_vars(ncidw) call put_atts(ncidw) err = nf_enddef(ncidw) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncidw) err = nf_sync(ncidw) if (err .ne. 0) + call errore('nf_sync of ncidw failed: ', err) C /* open another handle, nf_sync, read (check) */ err = nf_open(scratch, NF_NOWRITE, ncidr) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_sync(ncidr) if (err .ne. 0) + call errore('nf_sync of ncidr failed: ', err) call check_dims(ncidr) call check_atts(ncidr) call check_vars(ncidr) C /* close both handles */ err = nf_close(ncidr) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_close(ncidw) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_abort C try with bad handle, check error C try in define mode before anything written, check that file was deleted C try after nf_enddef, nf_redef, define new dims, vars, atts C try after writing variable subroutine test_nf_abort() USE tests implicit none integer ncid !/* netcdf id */ integer err integer ndims1 integer nvars1 integer ngatts1 integer recdim1 C /* BAD_ID test */ err = nf_abort(BAD_ID) if (err .ne. NF_EBADID) + call errore('bad ncid: status = ', err) C /* create scratch file & try nf_abort in define mode */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_abort(ncid) if (err .ne. 0) + call errore('nf_abort of ncid failed: ', err) err = nf_close(ncid) !/* should already be closed */ if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_delete(scratch) !/* should already be deleted */ if (err .eq. 0) + call errori('scratch file should not exist: ', err) C create scratch file C do nf_enddef & nf_redef C define new dims, vars, atts C try nf_abort: should restore previous state (no dims, vars, atts) err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_abort(ncid) if (err .ne. 0) + call errore('nf_abort of ncid failed: ', err) err = nf_close(ncid) !/* should already be closed */ if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_open(scratch, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq (ncid, ndims1, nvars1, ngatts1, recdim1) if (err .ne. 0) + call errore('nf_inq: ', err) if (ndims1 .ne. 0) + call errori('ndims1 should be ', 0) if (nvars1 .ne. 0) + call errori('nvars1 should be ', 0) if (ngatts1 .ne. 0) + call errori('ngatts1 should be ', 0) err = nf_close (ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* try nf_abort in data mode - should just close */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncid) err = nf_abort(ncid) if (err .ne. 0) + call errore('nf_abort of ncid failed: ', err) err = nf_close(ncid) !/* should already be closed */ if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) call check_file(scratch) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_def_dim C try with bad netCDF handle, check error C try in data mode, check error C check that returned id is one more than previous id C try adding same dimension twice, check error C try with illegal sizes, check error C make sure unlimited size works, shows up in nf_inq_unlimdim C try to define a second unlimited dimension, check error subroutine test_nf_def_dim() USE tests implicit none integer ncid integer err !/* status */ integer i integer dimid !/* dimension id */ integer length C /* BAD_ID test */ err = nf_def_dim(BAD_ID, 'abc', 8, dimid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* data mode test */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_def_dim(ncid, 'abc', 8, dimid) if (err .ne. NF_ENOTINDEFINE) + call errore('bad ncid: ', err) C /* define-mode tests: unlimited dim */ err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) err = nf_def_dim(ncid, dim_name(1), NF_UNLIMITED, dimid) if (err .ne. 0) + call errore('nf_def_dim: ', err) if (dimid .ne. 1) + call errori('Unexpected dimid: ', dimid) err = nf_inq_unlimdim(ncid, dimid) if (err .ne. 0) + call errore('nf_inq_unlimdim: ', err) if (dimid .ne. RECDIM) + call error('Unexpected recdim1: ') err = nf_inq_dimlen(ncid, dimid, length) if (length .ne. 0) + call errori('Unexpected length: ', 0) err = nf_def_dim(ncid, 'abc', NF_UNLIMITED, dimid) if (err .ne. NF_EUNLIMIT) + call errore('2nd unlimited dimension: ', err) C /* define-mode tests: remaining dims */ do 1, i = 2, NDIMS err = nf_def_dim(ncid, dim_name(i-1), dim_len(i), + dimid) if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) err = nf_def_dim(ncid, BAD_NAME, dim_len(i), dimid) if (err .ne. NF_EBADNAME) + call errore('bad name: ', err) err = nf_def_dim(ncid, dim_name(i), NF_UNLIMITED-1, + dimid) if (err .ne. NF_EDIMSIZE) + call errore('bad size: ', err) err = nf_def_dim(ncid, dim_name(i), dim_len(i), dimid) if (err .ne. 0) + call errore('nf_def_dim: ', err) if (dimid .ne. i) + call errori('Unexpected dimid: ', 0) 1 continue C /* Following just to expand unlimited dim */ call def_vars(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) call put_vars(ncid) C /* Check all dims */ call check_dims(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_rename_dim C try with bad netCDF handle, check error C check that proper rename worked with nf_inq_dim C try renaming to existing dimension name, check error C try with bad dimension handle, check error subroutine test_nf_rename_dim() USE tests implicit none integer ncid integer err !/* status */ character*(NF_MAX_NAME) name C /* BAD_ID test */ err = nf_rename_dim(BAD_ID, 1, 'abc') if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* main tests */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) err = nf_rename_dim(ncid, BAD_DIMID, 'abc') if (err .ne. NF_EBADDIM) + call errore('bad dimid: ', err) err = nf_rename_dim(ncid, 3, 'abc') if (err .ne. 0) + call errore('nf_rename_dim: ', err) err = nf_inq_dimname(ncid, 3, name) if (name .ne. 'abc') + call errorc('Unexpected name: ', name) err = nf_rename_dim(ncid, 1, 'abc') if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_def_var C try with bad netCDF handle, check error C try with bad name, check error C scalar tests: C check that proper define worked with nf_inq_var C try redefining an existing variable, check error C try with bad datatype, check error C try with bad number of dimensions, check error C try in data mode, check error C check that returned id is one more than previous id C try with bad dimension ids, check error subroutine test_nf_def_var() USE tests implicit none integer ncid integer vid integer err !/* status */ integer i integer ndims1 integer na character*(NF_MAX_NAME) name integer dimids(MAX_RANK) integer datatype C /* BAD_ID test */ err = nf_def_var(BAD_ID, 'abc', NF_SHORT, 0, dimids, vid) if (err .ne. NF_EBADID) + call errore('bad ncid: status = ', err) C /* scalar tests */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_def_var(ncid, 'abc', NF_SHORT, 0, dimids, vid) if (err .ne. 0) + call errore('nf_def_var: ', err) err = nf_inq_var(ncid, vid, name, datatype, ndims1, dimids, + na) if (err .ne. 0) + call errore('nf_inq_var: ', err) if (name .ne. 'abc') + call errorc('Unexpected name: ', name) if (datatype .ne. NF_SHORT) + call error('Unexpected datatype') if (ndims1 .ne. 0) + call error('Unexpected rank') err = nf_def_var(ncid, BAD_NAME, NF_SHORT, 0, dimids, vid) if (err .ne. NF_EBADNAME) + call errore('bad name: ', err) err = nf_def_var(ncid, 'abc', NF_SHORT, 0, dimids, vid) if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) err = nf_def_var(ncid, 'ABC', BAD_TYPE, -1, dimids, vid) if (err .ne. NF_EBADTYPE) + call errore('bad type: ', err) err = nf_def_var(ncid, 'ABC', NF_SHORT, -1, dimids, vid) if (err .ne. NF_EINVAL) + call errore('bad rank: ', err) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_def_var(ncid, 'ABC', NF_SHORT, 0, dimids, vid) if (err .ne. NF_ENOTINDEFINE) + call errore('nf_def_var called in data mode: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', scratch) C /* general tests using global vars */ err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) do 1, i = 1, NVARS err = nf_def_var(ncid, var_name(i), var_type(i), + var_rank(i), var_dimid(1,i), vid) if (err .ne. 0) + call errore('nf_def_var: ', err) if (vid .ne. i) + call error('Unexpected varid') 1 continue C /* try bad dim ids */ dimids(1) = BAD_DIMID err = nf_def_var(ncid, 'abc', NF_SHORT, 1, dimids, vid) if (err .ne. NF_EBADDIM) + call errore('bad dim ids: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', scratch) end C Test nf_rename_var C try with bad netCDF handle, check error C try with bad variable handle, check error C try renaming to existing variable name, check error C check that proper rename worked with nf_inq_varid C try in data mode, check error subroutine test_nf_rename_var() USE tests implicit none integer ncid integer vid integer err integer i character*(NF_MAX_NAME) name err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_rename_var(ncid, BAD_VARID, 'newName') if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) call def_dims(ncid) call def_vars(ncid) C /* Prefix "new_" to each name */ do 1, i = 1, NVARS err = nf_rename_var(BAD_ID, i, 'newName') if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_rename_var(ncid, i, var_name(NVARS)) if (err .ne. NF_ENAMEINUSE) + call errore('duplicate name: ', err) name = 'new_' // var_name(i) err = nf_rename_var(ncid, i, name) if (err .ne. 0) + call errore('nf_rename_var: ', err) err = nf_inq_varid(ncid, name, vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) if (vid .ne. i) + call error('Unexpected varid') 1 continue C /* Change to data mode */ C /* Try making names even longer. Then restore original names */ err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 2, i = 1, NVARS name = 'even_longer_' // var_name(i) err = nf_rename_var(ncid, i, name) if (err .ne. NF_ENOTINDEFINE) + call errore('longer name in data mode: ', err) err = nf_rename_var(ncid, i, var_name(i)) if (err .ne. 0) + call errore('nf_rename_var: ', err) err = nf_inq_varid(ncid, var_name(i), vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) if (vid .ne. i) + call error('Unexpected varid') 2 continue call put_vars(ncid) call check_vars(ncid) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed: ', scratch) end C Test nf_copy_att C try with bad source or target netCDF handles, check error C try with bad source or target variable handle, check error C try with nonexisting attribute, check error C check that NF_GLOBAL variable for source or target works C check that new attribute put works with target in define mode C check that old attribute put works with target in data mode C check that changing type and length of an attribute work OK C try with same ncid for source and target, different variables C try with same ncid for source and target, same variable subroutine test_nf_copy_att() USE tests implicit none integer ncid_in integer ncid_out integer vid integer err integer i integer j character*(NF_MAX_NAME) name !/* of att */ integer datatype !/* of att */ integer length !/* of att */ character*1 value err = nf_open(testfile, NF_NOWRITE, ncid_in) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_create(scratch, NF_NOCLOBBER, ncid_out) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid_out) call def_vars(ncid_out) do 1, i = 0, NVARS vid = VARID(i) do 2, j = 1, NATTS(i) name = ATT_NAME(j,i) err = nf_copy_att(ncid_in, BAD_VARID, name, ncid_out, + vid) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_copy_att(ncid_in, vid, name, ncid_out, + BAD_VARID) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_copy_att(BAD_ID, vid, name, ncid_out, vid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_copy_att(ncid_in, vid, name, BAD_ID, vid) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_copy_att(ncid_in, vid, 'noSuch', ncid_out, vid) if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) err = nf_copy_att(ncid_in, vid, name, ncid_out, vid) if (err .ne. 0) + call errore('nf_copy_att: ', err) err = nf_copy_att(ncid_out, vid, name, ncid_out, vid) if (err .ne. 0) + call errore('source = target: ', err) 2 continue 1 continue err = nf_close(ncid_in) if (err .ne. 0) + call errore('nf_close: ', err) C /* Close scratch. Reopen & check attributes */ err = nf_close(ncid_out) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_open(scratch, NF_WRITE, ncid_out) if (err .ne. 0) + call errore('nf_open: ', err) call check_atts(ncid_out) C change to define mode C define single char. global att. ':a' with value 'A' C This will be used as source for following copies err = nf_redef(ncid_out) if (err .ne. 0) + call errore('nf_redef: ', err) err = nf_put_att_text(ncid_out, NF_GLOBAL, 'a', 1, 'A') if (err .ne. 0) + call errore('nf_put_att_text: ', err) C change to data mode C Use scratch as both source & dest. C try copy to existing att. change type & decrease length C rename 1st existing att of each var (if any) 'a' C if this att. exists them copy ':a' to it err = nf_enddef(ncid_out) if (err .ne. 0) + call errore('nf_enddef: ', err) do 3, i = 1, NVARS if (NATTS(i) .gt. 0 .and. ATT_LEN(1,i) .gt. 0) then err = nf_rename_att(ncid_out, i, att_name(1,i), 'a') if (err .ne. 0) + call errore('nf_rename_att: ', err) err = nf_copy_att(ncid_out, NF_GLOBAL, 'a', ncid_out, + i) if (err .ne. 0) + call errore('nf_copy_att: ', err) end if 3 continue err = nf_close(ncid_out) if (err .ne. 0) + call errore('nf_close: ', err) C /* Reopen & check */ err = nf_open(scratch, NF_WRITE, ncid_out) if (err .ne. 0) + call errore('nf_open: ', err) do 4, i = 1, NVARS if (NATTS(i) .gt. 0 .and. ATT_LEN(1,i) .gt. 0) then err = nf_inq_att(ncid_out, i, 'a', datatype, length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. NF_CHAR) + call error('Unexpected type') if (length .ne. 1) + call error('Unexpected length') err = nf_get_att_text(ncid_out, i, 'a', value) if (err .ne. 0) + call errore('nf_get_att_text: ', err) if (value .ne. 'A') + call error('Unexpected value') end if 4 continue err = nf_close(ncid_out) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errorc('delete of scratch file failed', scratch) end C Test nf_rename_att C try with bad netCDF handle, check error C try with bad variable handle, check error C try with nonexisting att name, check error C try renaming to existing att name, check error C check that proper rename worked with nf_inq_attid C try in data mode, check error subroutine test_nf_rename_att() USE tests implicit none integer ncid integer vid integer err integer i integer j integer k integer attnum character*(NF_MAX_NAME) atnam character*(NF_MAX_NAME) name character*(NF_MAX_NAME) oldname character*(NF_MAX_NAME) newname integer nok !/* count of valid comparisons */ integer datatype integer attyp integer length integer attlength integer ndx(1) character*(MAX_NELS) text doubleprecision value(MAX_NELS) doubleprecision expect nok = 0 err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_rename_att(ncid, BAD_VARID, 'abc', 'newName') if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) do 1, i = 0, NVARS vid = VARID(i) do 2, j = 1, NATTS(i) atnam = ATT_NAME(j,i) err = nf_rename_att(BAD_ID, vid, atnam, 'newName') if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_rename_att(ncid, vid, 'noSuch', 'newName') if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) newname = 'new_' // atnam err = nf_rename_att(ncid, vid, atnam, newname) if (err .ne. 0) + call errore('nf_rename_att: ', err) err = nf_inq_attid(ncid, vid, newname, attnum) if (err .ne. 0) + call errore('nf_inq_attid: ', err) if (attnum .ne. j) + call error('Unexpected attnum') 2 continue 1 continue C /* Close. Reopen & check */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_open(scratch, NF_WRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 3, i = 0, NVARS vid = VARID(i) do 4, j = 1, NATTS(i) atnam = ATT_NAME(j,i) attyp = ATT_TYPE(j,i) attlength = ATT_LEN(j,i) newname = 'new_' // atnam err = nf_inq_attname(ncid, vid, j, name) if (err .ne. 0) + call errore('nf_inq_attname: ', err) if (name .ne. newname) + call error('nf_inq_attname: unexpected name') err = nf_inq_att(ncid, vid, name, datatype, length) if (err .ne. 0) + call errore('nf_inq_att: ', err) if (datatype .ne. attyp) + call error('nf_inq_att: unexpected type') if (length .ne. attlength) + call error('nf_inq_att: unexpected length') if (datatype .eq. NF_CHAR) then err = nf_get_att_text(ncid, vid, name, text) if (err .ne. 0) + call errore('nf_get_att_text: ', err) do 5, k = 1, attlength ndx(1) = k expect = hash(datatype, -1, ndx) if (ichar(text(k:k)) .ne. expect) then call error( + 'nf_get_att_text: unexpected value') else nok = nok + 1 end if 5 continue else err = nf_get_att_double(ncid, vid, name, value) if (err .ne. 0) + call errore('nf_get_att_double: ', err) do 6, k = 1, attlength ndx(1) = k expect = hash(datatype, -1, ndx) if (inRange(expect, datatype)) then if (.not. equal(value(k),expect,datatype, + NF_DOUBLE)) then call error( + 'nf_get_att_double: unexpected value') else nok = nok + 1 end if end if 6 continue end if 4 continue 3 continue call print_nok(nok) C /* Now in data mode */ C /* Try making names even longer. Then restore original names */ do 7, i = 0, NVARS vid = VARID(i) do 8, j = 1, NATTS(i) atnam = ATT_NAME(j,i) oldname = 'new_' // atnam newname = 'even_longer_' // atnam err = nf_rename_att(ncid, vid, oldname, newname) if (err .ne. NF_ENOTINDEFINE) + call errore('longer name in data mode: ', err) err = nf_rename_att(ncid, vid, oldname, atnam) if (err .ne. 0) + call errore('nf_rename_att: ', err) err = nf_inq_attid(ncid, vid, atnam, attnum) if (err .ne. 0) + call errore('nf_inq_attid: ', err) if (attnum .ne. j) + call error('Unexpected attnum') 8 continue 7 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_del_att C try with bad netCDF handle, check error C try with bad variable handle, check error C try with nonexisting att name, check error C check that proper delete worked using: C nf_inq_attid, nf_inq_natts, nf_inq_varnatts subroutine test_nf_del_att() USE tests implicit none integer ncid integer err integer i integer j integer attnum integer na integer numatts integer vid character*(NF_MAX_NAME) name !/* of att */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if err = nf_del_att(ncid, BAD_VARID, 'abc') if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) do 1, i = 0, NVARS vid = VARID(i) numatts = NATTS(i) do 2, j = 1, numatts name = ATT_NAME(j,i) err = nf_del_att(BAD_ID, vid, name) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_del_att(ncid, vid, 'noSuch') if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) err = nf_del_att(ncid, vid, name) if (err .ne. 0) + call errore('nf_del_att: ', err) err = nf_inq_attid(ncid, vid, name, attnum) if (err .ne. NF_ENOTATT) + call errore('bad attname: ', err) if (i .lt. 1) then err = nf_inq_natts(ncid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. numatts-j) then call errori('natts: expected: ', numatts-j) call errori('natts: got: ', na) end if end if err = nf_inq_varnatts(ncid, vid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. numatts-j) then call errori('natts: expected: ', numatts-j) call errori('natts: got: ', na) end if 2 continue 1 continue C /* Close. Reopen & check no attributes left */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_open(scratch, NF_WRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_inq_natts(ncid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. 0) + call errori('natts: expected 0, got ', na) do 3, i = 0, NVARS vid = VARID(i) err = nf_inq_varnatts(ncid, vid, na) if (err .ne. 0) + call errore('nf_inq_natts: ', err) if (na .ne. 0) + call errori('natts: expected 0, got ', na) 3 continue C /* restore attributes. change to data mode. try to delete */ err = nf_redef(ncid) if (err .ne. 0) + call errore('nf_redef: ', err) call put_atts(ncid) err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) do 4, i = 0, NVARS vid = VARID(i) numatts = NATTS(i) do 5, j = 1, numatts name = ATT_NAME(j,i) err = nf_del_att(ncid, vid, name) if (err .ne. NF_ENOTINDEFINE) + call errore('in data mode: ', err) 5 continue 4 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C Test nf_set_fill C try with bad netCDF handle, check error C try in read-only mode, check error C try with bad new_fillmode, check error C try in data mode, check error C check that proper set to NF_FILL works for record & non-record variables C (note that it is not possible to test NF_NOFILL mode!) C close file & create again for test using attribute _FillValue subroutine test_nf_set_fill() USE tests implicit none integer ncid integer vid integer err integer i integer j integer old_fillmode integer nok !/* count of valid comparisons */ character*1 text doubleprecision value doubleprecision fill doubleprecision fill_array(1) integer index(MAX_RANK) nok = 0 value = 0 C /* bad ncid */ err = nf_set_fill(BAD_ID, NF_NOFILL, old_fillmode) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) C /* try in read-only mode */ err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) err = nf_set_fill(ncid, NF_NOFILL, old_fillmode) if (err .ne. NF_EPERM) + call errore('read-only: ', err) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) C /* create scratch */ err = nf_create(scratch, NF_NOCLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if C /* BAD_FILLMODE */ err = nf_set_fill(ncid, BAD_FILLMODE, old_fillmode) if (err .ne. NF_EINVAL) + call errore('bad fillmode: ', err) C /* proper calls */ err = nf_set_fill(ncid, NF_NOFILL, old_fillmode) if (err .ne. 0) + call errore('nf_set_fill: ', err) if (old_fillmode .ne. NF_FILL) + call errori('Unexpected old fill mode: ', old_fillmode) err = nf_set_fill(ncid, NF_FILL, old_fillmode) if (err .ne. 0) + call errore('nf_set_fill: ', err) if (old_fillmode .ne. NF_NOFILL) + call errori('Unexpected old fill mode: ', old_fillmode) C /* define dims & vars */ call def_dims(ncid) call def_vars(ncid) C /* Change to data mode. Set fillmode again */ err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) err = nf_set_fill(ncid, NF_FILL, old_fillmode) if (err .ne. 0) + call errore('nf_set_fill: ', err) if (old_fillmode .ne. NF_FILL) + call errori('Unexpected old fill mode: ', old_fillmode) C /* Write record number NRECS to force writing of preceding records */ C /* Assumes variable cr is char vector with UNLIMITED dimension */ err = nf_inq_varid(ncid, 'cr', vid) if (err .ne. 0) + call errore('nf_inq_varid: ', err) index(1) = NRECS text = char(NF_FILL_CHAR) err = nf_put_var1_text(ncid, vid, index, text) if (err .ne. 0) + call errore('nf_put_var1_text: ', err) C /* get all variables & check all values equal default fill */ do 1, i = 1, NVARS if (var_type(i) .eq. NF_CHAR) then fill = NF_FILL_CHAR else if (var_type(i) .eq. NF_BYTE) then fill = NF_FILL_BYTE else if (var_type(i) .eq. NF_SHORT) then fill = NF_FILL_SHORT else if (var_type(i) .eq. NF_INT) then fill = NF_FILL_INT else if (var_type(i) .eq. NF_FLOAT) then fill = NF_FILL_FLOAT else if (var_type(i) .eq. NF_DOUBLE) then fill = NF_FILL_DOUBLE else stop 2 end if do 2, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes()') if (var_type(i) .eq. NF_CHAR) then err = nf_get_var1_text(ncid, i, index, text) if (err .ne. 0) + call errore('nf_get_var1_text failed: ',err) value = ichar(text) else err = nf_get_var1_double(ncid, i, index, value) if (err .ne. 0) + call errore('nf_get_var1_double failed: ',err) end if if (value .ne. fill .and. + abs((fill - value)/fill) .gt. 1.0e-9) then call errord('Unexpected fill value: ', value) else nok = nok + 1 end if 2 continue 1 continue C /* close scratch & create again for test using attribute _FillValue */ err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) then call errore('nf_create: ', err) return end if call def_dims(ncid) call def_vars(ncid) C /* set _FillValue = 42 for all vars */ fill = 42 fill_array(1) = fill text = char(int(fill)) do 3, i = 1, NVARS if (var_type(i) .eq. NF_CHAR) then err = nf_put_att_text(ncid, i, '_FillValue', 1, text) if (err .ne. 0) + call errore('nf_put_att_text: ', err) else err = nf_put_att_double(ncid, i, '_FillValue', + var_type(i),1,fill_array) if (err .ne. 0) + call errore('nf_put_att_double: ', err) end if 3 continue C /* data mode. write records */ err = nf_enddef(ncid) if (err .ne. 0) + call errore('nf_enddef: ', err) index(1) = NRECS err = nf_put_var1_text(ncid, vid, index, text) if (err .ne. 0) + call errore('nf_put_var1_text: ', err) C /* get all variables & check all values equal 42 */ do 4, i = 1, NVARS do 5, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes') if (var_type(i) .eq. NF_CHAR) then err = nf_get_var1_text(ncid, i, index, text) if (err .ne. 0) + call errore('nf_get_var1_text failed: ',err) value = ichar(text) else err = nf_get_var1_double(ncid, i, index, value) if (err .ne. 0) + call errore('nf_get_var1_double failed: ', err) end if if (value .ne. fill) then call errord(' Value expected: ', fill) call errord(' Value read: ', value) else nok = nok + 1 end if 5 continue 4 continue call print_nok(nok) err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) err = nf_delete(scratch) if (err .ne. 0) + call errori('delete of scratch file failed: ', err) end C * Test nc_set_default_format C * try with bad default format C * try with NULL old_formatp C * try in data mode, check error C * check that proper set to NC_FILL works for record & non-record variables C * (note that it is not possible to test NC_NOFILL mode!) C * close file & create again for test using attribute _FillValue subroutine test_nf_set_default_format() USE tests implicit none integer ncid integer err integer i integer version integer old_format integer nf_get_file_version C /* bad format */ err = nf_set_default_format(99, old_format) IF (err .ne. NF_EINVAL) + call errore("bad default format: status = %d", err) C /* Cycle through available formats. (actually netcdf-4 formats are C ignored for the moment - ed 5/15/5) */ do 1 i=1, 2 err = nf_set_default_format(i, old_format) if (err .ne. 0) + call errore("setting classic format: status = %d", err) err = nf_create(scratch, NF_CLOBBER, ncid) if (err .ne. 0) call errore("bad nf_create: status = %d", err) err = nf_put_att_text(ncid, NF_GLOBAL, "testatt", + 4, "blah") if (err .ne. 0) call errore("bad put_att: status = %d", err) err = nf_close(ncid) if (err .ne. 0) call errore("bad close: status = %d", err) err = nf_get_file_version(scratch, version) if (err .ne. 0) call errore("bad file version = %d", err) if (version .ne. i) + call errore("bad file version = %d", err) 1 continue C /* Remove the left-over file. */ C err = nf_delete(scratch) if (err .ne. 0) call errore("remove failed", err) end C This function looks in a file for the netCDF magic number. integer function nf_get_file_version(path, version) USE tests implicit none character*(*) path integer version, iosnum character magic*4 integer ver integer f parameter (f = 10) open(f, file=path, status='OLD', form='UNFORMATTED', + access='DIRECT', recl=4) C Assume this is not a netcdf file. nf_get_file_version = NF_ENOTNC version = 0 C Read the magic number, the first 4 bytes of the file. read(f, rec=1, err = 1) magic C If the first three characters are not "CDF" we're done. if (index(magic, 'CDF') .eq. 1) then ver = ichar(magic(4:4)) if (ver .eq. 1) then version = 1 nf_get_file_version = NF_NOERR elseif (ver .eq. 2) then version = 2 nf_get_file_version = NF_NOERR endif endif 1 close(f) return end netcdf-fortran-4.6.3+ds/nf_test/util.F0000664000175000017500000012122315205004070017746 0ustar alastairalastair! Copyright 1996-2019, UCAR/Unidata ! See netcdf/COPYRIGHT file for copying and redistribution conditions. ! Steve Emmerson, Ed Hartnett SUBROUTINE PRINT_NOK(NOK) IMPLICIT NONE INTEGER NOK #include "tests.inc" IF (VERBOSE .OR. NFAILS .GT. 0) PRINT *, ' ' IF (VERBOSE) PRINT *, NOK, ' good comparisons.' END ! Is value within external type range? */ FUNCTION INRANGE(VALUE, DATATYPE) IMPLICIT NONE DOUBLEPRECISION VALUE INTEGER DATATYPE #include "tests.inc" DOUBLEPRECISION MIN DOUBLEPRECISION MAX IF (DATATYPE .EQ. NF_CHAR) THEN MIN = X_CHAR_MIN MAX = X_CHAR_MAX ELSE IF (DATATYPE .EQ. NF_BYTE) THEN MIN = X_BYTE_MIN MAX = X_BYTE_MAX ELSE IF (DATATYPE .EQ. NF_SHORT) THEN MIN = X_SHORT_MIN MAX = X_SHORT_MAX ELSE IF (DATATYPE .EQ. NF_INT) THEN MIN = X_INT_MIN MAX = X_INT_MAX ELSE IF (DATATYPE .EQ. NF_FLOAT) THEN MIN = X_FLOAT_MIN MAX = X_FLOAT_MAX ELSE IF (DATATYPE .EQ. NF_DOUBLE) THEN MIN = X_DOUBLE_MIN MAX = X_DOUBLE_MAX ELSE CALL UDABORT END IF INRANGE = (VALUE .GE. MIN) .AND. (VALUE .LE. MAX) END FUNCTION INRANGE_UCHAR(VALUE, DATATYPE) IMPLICIT NONE DOUBLEPRECISION VALUE INTEGER DATATYPE #include "tests.inc" IF (DATATYPE .EQ. NF_BYTE) THEN INRANGE_UCHAR = (VALUE .GE. 0) .AND. (VALUE .LE. 255) ELSE INRANGE_UCHAR = INRANGE(VALUE, DATATYPE) END IF END FUNCTION INRANGE_FLOAT(VALUE, DATATYPE) IMPLICIT NONE DOUBLEPRECISION VALUE INTEGER DATATYPE #include "tests.inc" DOUBLEPRECISION MIN DOUBLEPRECISION MAX REAL FVALUE IF (DATATYPE .EQ. NF_CHAR) THEN MIN = X_CHAR_MIN MAX = X_CHAR_MAX ELSE IF (DATATYPE .EQ. NF_BYTE) THEN MIN = X_BYTE_MIN MAX = X_BYTE_MAX ELSE IF (DATATYPE .EQ. NF_SHORT) THEN MIN = X_SHORT_MIN MAX = X_SHORT_MAX ELSE IF (DATATYPE .EQ. NF_INT) THEN MIN = X_INT_MIN MAX = X_INT_MAX ELSE IF (DATATYPE .EQ. NF_FLOAT) THEN IF (internal_max(NFT_REAL) .LT. X_FLOAT_MAX) THEN MIN = -internal_max(NFT_REAL) MAX = internal_max(NFT_REAL) ELSE MIN = X_FLOAT_MIN MAX = X_FLOAT_MAX END IF ELSE IF (DATATYPE .EQ. NF_DOUBLE) THEN IF (internal_max(NFT_REAL) .LT. X_DOUBLE_MAX) THEN MIN = -internal_max(NFT_REAL) MAX = internal_max(NFT_REAL) ELSE MIN = X_DOUBLE_MIN MAX = X_DOUBLE_MAX END IF ELSE CALL UDABORT END IF IF (.NOT.((VALUE .GE. MIN) .AND. (VALUE .LE. MAX))) THEN INRANGE_FLOAT = .FALSE. ELSE FVALUE = VALUE INRANGE_FLOAT = (FVALUE .GE. MIN) .AND. (FVALUE .LE. MAX) END IF END ! wrapper for inrange to handle special NF_BYTE/uchar adjustment */ function inrange3(value, datatype, itype) implicit none doubleprecision value integer datatype integer itype #include "tests.inc" if (itype .eq. NFT_REAL) then inrange3 = inrange_float(value, datatype) else inrange3 = inrange(value, datatype) end if end ! ! Does x == y, where one is internal and other external (netCDF)? ! Use tolerant comparison based on IEEE FLT_EPSILON or DBL_EPSILON. ! function equal(x, y, extType, itype) implicit none doubleprecision x doubleprecision y integer extType !!/* external data type */ integer itype #include "tests.inc" doubleprecision epsilon if ((extType .eq. NF_REAL) .or. (itype .eq. NFT_REAL)) then epsilon = 1.19209290E-07 else epsilon = 2.2204460492503131E-16 end if equal = abs(x-y) .le. epsilon * max( abs(x), abs(y)) end ! Test whether two int vectors are equal. If so return 1, else 0 */ function int_vec_eq(v1, v2, n) implicit none integer n integer v1(n) integer v2(n) #include "tests.inc" integer i int_vec_eq = .true. if (n .le. 0) + return do 1, i=1, n if (v1(i) .ne. v2(i)) then int_vec_eq = .false. return end if 1 continue end ! ! Generate random integer from 0 through n-1 ! Like throwing an n-sided dice marked 0, 1, 2, ..., n-1 ! function roll(n) implicit none integer n #include "tests.inc" doubleprecision udrand external udrand 1 roll = (udrand(0) * (n-1)) + 0.5 if (roll .ge. n) goto 1 end ! ! Convert an origin-1 cumulative index to a netCDF index vector. ! Grosset dimension first; finest dimension last. ! ! Authors: Harvey Davies, Unidata/UCAR, Boulder, Colorado ! Steve Emmerson, (same place) ! function index2ncindexes(index, rank, base, indexes) implicit none integer index !!/* index to be converted */ integer rank !/* number of dimensions */ integer base(rank) !/* base(rank) ignored */ integer indexes(rank) !/* returned FORTRAN indexes */ #include "tests.inc" integer i integer offset if (rank .gt. 0) then offset = index - 1 do 1, i = rank, 1, -1 if (base(i) .eq. 0) then index2ncindexes = 1 return end if indexes(i) = 1 + mod(offset, base(i)) offset = offset / base(i) 1 continue end if index2ncindexes = 0 end ! ! Convert an origin-1 cumulative index to a FORTRAN index vector. ! Finest dimension first; grossest dimension last. ! ! Authors: Harvey Davies, Unidata/UCAR, Boulder, Colorado ! Steve Emmerson, (same place) ! function index2indexes(index, rank, base, indexes) implicit none integer index !/* index to be converted */ integer rank !/* number of dimensions */ integer base(rank) !/* base(rank) ignored */ integer indexes(rank) !/* returned FORTRAN indexes */ #include "tests.inc" integer i integer offset if (rank .gt. 0) then offset = index - 1 do 1, i = 1, rank if (base(i) .eq. 0) then index2indexes = 1 return end if indexes(i) = 1 + mod(offset, base(i)) offset = offset / base(i) 1 continue end if index2indexes = 0 end ! ! Convert a FORTRAN index vector to an origin-1 cumulative index. ! Finest dimension first; grossest dimension last. ! ! Authors: Harvey Davies, Unidata/UCAR, Boulder, Colorado ! Steve Emmerson, (same place) ! function indexes2index(rank, indexes, base) implicit none integer rank !/* number of dimensions */ integer indexes(rank) !/* FORTRAN indexes */ integer base(rank) !/* base(rank) ignored */ #include "tests.inc" integer i indexes2index = 0 if (rank .gt. 0) then do 1, i = rank, 1, -1 indexes2index = (indexes2index-1) * base(i) + indexes(i) 1 continue end if end #ifdef USE_EXTREME_NUMBERS ! Generate data values as function of type, rank (-1 for attribute), index */ function hash(type, rank, index) implicit none integer type integer rank integer index(*) #include "tests.inc" doubleprecision base doubleprecision result integer d !/* index of dimension */ !/* If vector then elements 1 & 2 are min & max. Elements 3 & 4 are */ !/* just < min & > max (except for NF_CHAR & NF_DOUBLE) */ if (abs(rank) .eq. 1 .and. index(1) .le. 4) then if (index(1) .eq. 1) then if (type .eq. NF_CHAR) then hash = X_CHAR_MIN else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN else if (type .eq. NF_SHORT) then hash = X_SHORT_MIN else if (type .eq. NF_INT) then hash = X_INT_MIN else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MIN else if (type .eq. NF_DOUBLE) then hash = X_DOUBLE_MIN else call udabort end if else if (index(1) .eq. 2) then if (type .eq. NF_CHAR) then hash = X_CHAR_MAX else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX else if (type .eq. NF_SHORT) then hash = X_SHORT_MAX else if (type .eq. NF_INT) then hash = X_INT_MAX else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MAX else if (type .eq. NF_DOUBLE) then hash = X_DOUBLE_MAX else call udabort end if else if (index(1) .eq. 3) then if (type .eq. NF_CHAR) then hash = ichar('A') else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN-1.0 else if (type .eq. NF_SHORT) then hash = X_SHORT_MIN-1.0 else if (type .eq. NF_INT) then hash = X_INT_MIN else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MIN else if (type .eq. NF_DOUBLE) then hash = -1.0 else call udabort end if else if (index(1) .eq. 4) then if (type .eq. NF_CHAR) then hash = ichar('Z') else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX+1.0 else if (type .eq. NF_SHORT) then hash = X_SHORT_MAX+1.0 else if (type .eq. NF_INT) then hash = X_INT_MAX+1.0 else if (type .eq. NF_FLOAT) then hash = X_FLOAT_MAX else if (type .eq. NF_DOUBLE) then hash = 1.0 else call udabort end if end if else if (type .eq. NF_CHAR) then base = 2 else if (type .eq. NF_BYTE) then base = -2 else if (type .eq. NF_SHORT) then base = -5 else if (type .eq. NF_INT) then base = -20 else if (type .eq. NF_FLOAT) then base = -9 else if (type .eq. NF_DOUBLE) then base = -10 else stop 2 end if if (rank .lt. 0) then result = base * 7 else result = base * (rank + 1) end if ! /* ! * NB: Finest netCDF dimension assumed first. ! */ do 1, d = abs(rank), 1, -1 result = base * (result + index(d) - 1) 1 continue hash = result end if end #else /* USE_EXTREME_NUMBERS */ #define SANE_SHORT 3333 #define SANE_INT 2222 #define SANE_FLOAT 300.0 #define SANE_DOUBLE 1000.0 ! Generate data values as function of type, rank (-1 for attribute), index */ function hash(type, rank, index) implicit none integer type integer rank integer index(*) #include "tests.inc" doubleprecision base doubleprecision result integer d !/* index of dimension */ !/* If vector then elements 1 & 2 are min & max. Elements 3 & 4 are */ !/* just < min & > max (except for NF_CHAR & NF_DOUBLE) */ if (abs(rank) .eq. 1 .and. index(1) .le. 4) then if (index(1) .eq. 1) then if (type .eq. NF_CHAR) then hash = X_CHAR_MIN else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN else if (type .eq. NF_SHORT) then hash = SANE_SHORT else if (type .eq. NF_INT) then hash = SANE_INT else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = SANE_DOUBLE else call udabort end if else if (index(1) .eq. 2) then if (type .eq. NF_CHAR) then hash = X_CHAR_MAX else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX else if (type .eq. NF_SHORT) then hash = SANE_SHORT else if (type .eq. NF_INT) then hash = SANE_INT else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = SANE_DOUBLE else call udabort end if else if (index(1) .eq. 3) then if (type .eq. NF_CHAR) then hash = ichar('A') else if (type .eq. NF_BYTE) then hash = X_BYTE_MIN-1.0 else if (type .eq. NF_SHORT) then hash = SANE_SHORT-1.0 else if (type .eq. NF_INT) then hash = SANE_INT else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = -1.0 else call udabort end if else if (index(1) .eq. 4) then if (type .eq. NF_CHAR) then hash = ichar('Z') else if (type .eq. NF_BYTE) then hash = X_BYTE_MAX+1.0 else if (type .eq. NF_SHORT) then hash = SANE_SHORT+1.0 else if (type .eq. NF_INT) then hash = SANE_INT+1.0 else if (type .eq. NF_FLOAT) then hash = SANE_FLOAT else if (type .eq. NF_DOUBLE) then hash = 1.0 else call udabort end if end if else if (type .eq. NF_CHAR) then base = 2 else if (type .eq. NF_BYTE) then base = -2 else if (type .eq. NF_SHORT) then base = -5 else if (type .eq. NF_INT) then base = -20 else if (type .eq. NF_FLOAT) then base = -9 else if (type .eq. NF_DOUBLE) then base = -10 else stop 2 end if if (rank .lt. 0) then result = base * 7 else result = base * (rank + 1) end if ! /* ! * NB: Finest netCDF dimension assumed first. ! */ do 1, d = abs(rank), 1, -1 result = base * (result + index(d) - 1) 1 continue hash = result end if end #endif ! wrapper for hash to handle special NC_BYTE/uchar adjustment */ function hash4(type, rank, index, itype) implicit none integer type integer rank integer index(*) integer itype #include "tests.inc" hash4 = hash( type, rank, index ) if ((itype .eq. NFT_CHAR) .and. (type .eq. NF_BYTE) .and. + (hash4 .ge. -128) .and. (hash4 .lt. 0)) hash4 = hash4 + 256 end integer function char2type(letter) implicit none character*1 letter #include "tests.inc" if (letter .eq. 'c') then char2type = NF_CHAR else if (letter .eq. 'b') then char2type = NF_BYTE else if (letter .eq. 's') then char2type = NF_SHORT else if (letter .eq. 'i') then char2type = NF_INT else if (letter .eq. 'f') then char2type = NF_FLOAT else if (letter .eq. 'd') then char2type = NF_DOUBLE else stop 2 end if end subroutine init_dims(digit) implicit none character*1 digit(NDIMS) #include "tests.inc" integer dimid !/* index of dimension */ do 1, dimid = 1, NDIMS if (dimid .eq. RECDIM) then dim_len(dimid) = NRECS else dim_len(dimid) = dimid - 1 endif dim_name(dimid) = 'D' // digit(dimid) 1 continue end subroutine init_gatts(type_letter) implicit none character*1 type_letter(NTYPES) #include "tests.inc" integer attid integer char2type do 1, attid = 1, NTYPES gatt_name(attid) = 'G' // type_letter(attid) gatt_len(attid) = attid gatt_type(attid) = char2type(type_letter(attid)) 1 continue end integer function prod(nn, sp) implicit none integer nn integer sp(MAX_RANK) #include "tests.inc" integer i prod = 1 do 1, i = 1, nn prod = prod * sp(i) 1 continue end ! ! define global variables: ! dim_name, dim_len, ! var_name, var_type, var_rank, var_shape, var_natts, var_dimid, var_nels ! att_name, gatt_name, att_type, gatt_type, att_len, gatt_len ! subroutine init_gvars implicit none #include "tests.inc" integer max_dim_len(MAX_RANK) character*1 type_letter(NTYPES) character*1 digit(10) integer rank integer vn !/* var number */ integer xtype !/* index of type */ integer an !/* origin-0 cumulative attribute index */ integer nvars integer jj integer ntypes integer tc integer tmp(MAX_RANK) integer ac !/* attribute index */ integer dn !/* dimension number */ integer prod !/* function */ integer char2type !/* function */ integer err data max_dim_len /0, MAX_DIM_LEN, MAX_DIM_LEN/ data type_letter /'c', 'b', 's', 'i', 'f', 'd'/ data digit /'r', '1', '2', '3', '4', '5', + '6', '7', '8', '9'/ max_dim_len(1) = MAX_DIM_LEN + 1 call init_dims(digit) vn = 1 xtype = 1 an = 0 ! /* Loop over variable ranks */ do 1, rank = 0, MAX_RANK nvars = prod(rank, max_dim_len) !/* Loop over variable shape vectors */ do 2, jj = 1, nvars !/* 1, 5, 20, 80 */ !/* number types of this shape */ if (rank .lt. 2) then ntypes = NTYPES !/* 6 */ else ntypes = 1 end if !/* Loop over external data types */ do 3, tc = 1, ntypes !/* 6, 1 */ var_name(vn) = type_letter(xtype) var_type(vn) = char2type(type_letter(xtype)) var_rank(vn) = rank if (rank .eq. 0) then var_natts(vn) = mod(vn - 1, MAX_NATTS + 1) else var_natts(vn) = 0 end if do 4, ac = 1, var_natts(vn) attname(ac,vn) = + type_letter(1+mod(an, NTYPES)) attlen(ac,vn) = an atttype(ac,vn) = + char2type(type_letter(1+mod(an, NTYPES))) an = an + 1 4 continue !/* Construct initial shape vector */ err = index2ncindexes(jj, rank, max_dim_len, tmp) do 5, dn = 1, rank var_dimid(dn,vn) = tmp(1+rank-dn) 5 continue var_nels(vn) = 1 do 6, dn = 1, rank if (dn .lt. rank) then var_dimid(dn,vn) = var_dimid(dn,vn) + 1 end if if (var_dimid(dn,vn) .gt. 9) then stop 2 end if var_name(vn)(rank+2-dn:rank+2-dn) = + digit(var_dimid(dn,vn)) if (var_dimid(dn,vn) .ne. RECDIM) then var_shape(dn,vn) = var_dimid(dn,vn) - 1 else var_shape(dn,vn) = NRECS end if var_nels(vn) = var_nels(vn) * var_shape(dn,vn) 6 continue vn = vn + 1 xtype = 1 + mod(xtype, NTYPES) 3 continue 2 continue 1 continue call init_gatts(type_letter) end ! define dims defined by global variables */ subroutine def_dims(ncid) implicit none integer ncid #include "tests.inc" integer err !/* status */ integer i integer dimid !/* dimension id */ do 1, i = 1, NDIMS if (i .eq. RECDIM) then err = nf_def_dim(ncid, dim_name(i), NF_UNLIMITED, + dimid) else err = nf_def_dim(ncid, dim_name(i), dim_len(i), + dimid) end if if (err .ne. 0) then call errore('nf_def_dim: ', err) end if 1 continue end ! define vars defined by global variables */ subroutine def_vars(ncid) implicit none integer ncid #include "tests.inc" integer err !/* status */ integer i integer var_id do 1, i = 1, NVARS err = nf_def_var(ncid, var_name(i), var_type(i), + var_rank(i), var_dimid(1,i), var_id) if (err .ne. 0) then call errore('nf_def_var: ', err) end if 1 continue end ! put attributes defined by global variables */ subroutine put_atts(ncid) implicit none integer ncid #include "tests.inc" integer err !/* netCDF status */ integer i !/* variable index (0 => global ! * attribute */ integer k !/* attribute index */ integer j !/* index of attribute */ integer ndx(1) logical allInRange doubleprecision att(MAX_NELS) character*(MAX_NELS+2) catt do 1, i = 0, NVARS !/* var 0 => NF_GLOBAL attributes */ do 2, j = 1, NATTS(i) if (NF_CHAR .eq. ATT_TYPE(j,i)) then catt = ' ' do 3, k = 1, ATT_LEN(j,i) ndx(1) = k catt(k:k) = char(int(hash(ATT_TYPE(j,i), -1, + ndx))) 3 continue ! /* ! * The following ensures that the text buffer doesn't ! * start with 4 zeros (which is a CFORTRAN NULL pointer ! * indicator) yet contains a zero (which causes the ! * CFORTRAN interface to pass the address of the ! * actual text buffer). ! */ catt(ATT_LEN(j,i)+1:ATT_LEN(j,i)+1) = char(1) catt(ATT_LEN(j,i)+2:ATT_LEN(j,i)+2) = char(0) err = nf_put_att_text(ncid, varid(i), + ATT_NAME(j,i), + ATT_LEN(j,i), catt) if (err .ne. 0) then call errore('nf_put_att_text: ', err) end if else allInRange = .true. do 4, k = 1, ATT_LEN(j,i) ndx(1) = k att(k) = hash(ATT_TYPE(j,i), -1, ndx) allInRange = allInRange .and. + inRange(att(k), ATT_TYPE(j,i)) 4 continue err = nf_put_att_double(ncid, varid(i), + ATT_NAME(j,i), + ATT_TYPE(j,i), + ATT_LEN(j,i), att) if (allInRange) then if (err .ne. 0) then call errore('nf_put_att_double: ', err) end if else if (err .ne. NF_ERANGE) then call errore( + 'type-conversion range error: status = ', + err) end if end if end if 2 continue 1 continue end ! put variables defined by global variables */ subroutine put_vars(ncid) implicit none integer ncid #include "tests.inc" integer start(MAX_RANK) integer index(MAX_RANK) integer err !/* netCDF status */ integer i integer j doubleprecision value(MAX_NELS) character*(MAX_NELS+2) text logical allInRange do 1, j = 1, MAX_RANK start(j) = 1 1 continue do 2, i = 1, NVARS allInRange = .true. do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) then call errori( + 'Error calling index2indexes() for var ', j) end if if (var_name(i)(1:1) .eq. 'c') then text(j:j) = + char(int(hash(var_type(i), var_rank(i), index))) else value(j) = hash(var_type(i), var_rank(i), index) allInRange = allInRange .and. + inRange(value(j), var_type(i)) end if 3 continue if (var_name(i)(1:1) .eq. 'c') then ! /* ! * The following statement ensures that the first 4 ! * characters in 'text' are not all zeros (which is ! * a cfortran.h NULL indicator) and that the string ! * contains a zero (which will cause the address of the ! * actual string buffer to be passed). ! */ text(var_nels(i)+1:var_nels(i)+1) = char(1) text(var_nels(i)+2:var_nels(i)+2) = char(0) err = nf_put_vara_text(ncid, i, start, var_shape(1,i), + text) if (err .ne. 0) then call errore('nf_put_vara_text: ', err) end if else err = nf_put_vara_double(ncid, i, start, var_shape(1,i), + value) if (allInRange) then if (err .ne. 0) then call errore('nf_put_vara_double: ', err) end if else if (err .ne. NF_ERANGE) then call errore( + 'type-conversion range error: status = ', + err) end if end if end if 2 continue end ! Create & write all of specified file using global variables */ subroutine write_file(filename) implicit none character*(*) filename #include "tests.inc" integer ncid !/* netCDF id */ integer err !/* netCDF status */ integer cmode cmode = IOR(NF_CLOBBER, FILE_CMODE) err = nf_create(filename, cmode, ncid) if (err .ne. 0) then call errore('nf_create: ', err) end if call def_dims(ncid) call def_vars(ncid) call put_atts(ncid) err = nf_enddef(ncid) if (err .ne. 0) then call errore('nf_enddef: ', err) end if call put_vars(ncid) err = nf_close(ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if end ! ! check dimensions of specified file have expected name & length ! subroutine check_dims(ncid) implicit none integer ncid #include "tests.inc" character*(NF_MAX_NAME) name integer length integer i integer err !/* netCDF status */ do 1, i = 1, NDIMS err = nf_inq_dim(ncid, i, name, length) if (err .ne. 0) then call errore('nf_inq_dim: ', err) end if if (name .ne. dim_name(i)) then call errori('Unexpected name of dimension ', i) end if if (length .ne. dim_len(i)) then call errori('Unexpected length of dimension ', i) end if 1 continue end ! ! check variables of specified file have expected name, type, shape & values ! subroutine check_vars(ncid) implicit none integer ncid #include "tests.inc" integer index(MAX_RANK) integer err !/* netCDF status */ integer i integer j character*1 text doubleprecision value integer datatype integer ndims integer natt integer dimids(MAX_RANK) logical isChar doubleprecision expect character*(NF_MAX_NAME) name integer length integer nok !/* count of valid comparisons */ nok = 0 do 1, i = 1, NVARS isChar = var_type(i) .eq. NF_CHAR err = nf_inq_var(ncid, i, name, datatype, ndims, dimids, + natt) if (err .ne. 0) then call errore('nf_inq_var: ', err) end if if (name .ne. var_name(i)) then call errori('Unexpected var_name for variable ', i) end if if (datatype .ne. var_type(i)) then call errori('Unexpected type for variable ', i) end if if (ndims .ne. var_rank(i)) then call errori('Unexpected rank for variable ', i) end if do 2, j = 1, ndims err = nf_inq_dim(ncid, dimids(j), name, length) if (err .ne. 0) then call errore('nf_inq_dim: ', err) end if if (length .ne. var_shape(j,i)) then call errori('Unexpected shape for variable ', i) end if 2 continue do 3, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) then call errori('error in index2indexes() 2, variable ', + i) end if expect = hash(var_type(i), var_rank(i), index ) if (isChar) then err = nf_get_var1_text(ncid, i, index, text) if (err .ne. 0) then call errore('nf_get_var1_text: ', err) end if if (ichar(text) .ne. expect) then call errori( + 'Var value read not expected for variable ', i) else nok = nok + 1 end if else err = nf_get_var1_double(ncid, i, index, value) if (inRange(expect,var_type(i))) then if (err .ne. 0) then call errore('nf_get_var1_double: ', err) else if (.not. equal(value,expect,var_type(i), + NFT_DOUBLE)) then call errori( + 'Var value read not expected ', i) else nok = nok + 1 end if end if end if end if 3 continue 1 continue call print_nok(nok) end ! ! check attributes of specified file have expected name, type, length & values ! subroutine check_atts(ncid) implicit none integer ncid #include "tests.inc" integer err !/* netCDF status */ integer i integer j integer k integer vid !/* "variable" ID */ integer datatype integer ndx(1) character*(NF_MAX_NAME) name integer length character*(MAX_NELS) text doubleprecision value(MAX_NELS) doubleprecision expect integer nok !/* count of valid comparisons */ nok = 0 do 1, vid = 0, NVARS i = varid(vid) do 2, j = 1, NATTS(i) err = nf_inq_attname(ncid, i, j, name) if (err .ne. 0) then call errore('nf_inq_attname: ', err) end if if (name .ne. ATT_NAME(j,i)) then call errori( + 'nf_inq_attname: unexpected name for var ', i) end if err = nf_inq_att(ncid, i, name, datatype, length) if (err .ne. 0) then call errore('nf_inq_att: ', err) end if if (datatype .ne. ATT_TYPE(j,i)) then call errori('nf_inq_att: unexpected type for var ', + i) end if if (length .ne. ATT_LEN(j,i)) then call errori( + 'nf_inq_att: unexpected length for var ', i) end if if (datatype .eq. NF_CHAR) then err = nf_get_att_text(ncid, i, name, text) if (err .ne. 0) then call errore('nf_get_att_text: ', err) end if do 3, k = 1, ATT_LEN(j,i) ndx(1) = k if (ichar(text(k:k)) .ne. hash(datatype, -1, + ndx)) + then call errori( + 'nf_get_att_text: unexpected value ', i) else nok = nok + 1 end if 3 continue else err = nf_get_att_double(ncid, i, name, value) do 4, k = 1, ATT_LEN(j,i) ndx(1) = k expect = hash(datatype, -1, ndx) if (inRange(expect,ATT_TYPE(j,i))) then if (err .ne. 0) then call errore('nf_get_att_double: ', err) end if if (.not. equal(value(k), expect, + ATT_TYPE(j,i), NFT_DOUBLE)) then call errori( + 'Att value read not expected for var ', i) else nok = nok + 1 end if end if 4 continue end if 2 continue 1 continue call print_nok(nok) end ! Check file (dims, vars, atts) corresponds to global variables */ subroutine check_file(filename) implicit none character*(*) filename #include "tests.inc" integer ncid !/* netCDF id */ integer err !/* netCDF status */ err = nf_open(filename, NF_NOWRITE, ncid) if (err .ne. 0) then call errore('nf_open: ', err) else call check_dims(ncid) call check_vars(ncid) call check_atts(ncid) err = nf_close (ncid) if (err .ne. 0) then call errore('nf_close: ', err) end if end if end ! ! Functions for accessing attribute test data. ! ! NB: 'varid' is 0 for global attributes; thus, global attributes can ! be handled in the same loop as variable attributes. ! FUNCTION VARID(VID) IMPLICIT NONE INTEGER VID #include "tests.inc" IF (VID .LT. 1) THEN VARID = NF_GLOBAL ELSE VARID = VID ENDIF end FUNCTION NATTS(VID) IMPLICIT NONE INTEGER VID #include "tests.inc" IF (VID .LT. 1) THEN NATTS = NGATTS ELSE NATTS = VAR_NATTS(VID) ENDIF END FUNCTION ATT_NAME(J,VID) IMPLICIT NONE INTEGER J INTEGER VID #include "tests.inc" IF (VID .LT. 1) THEN ATT_NAME = GATT_NAME(J) ELSE ATT_NAME = ATTNAME(J,VID) ENDIF END FUNCTION ATT_TYPE(J,VID) IMPLICIT NONE INTEGER J INTEGER VID #include "tests.inc" IF (VID .LT. 1) THEN ATT_TYPE = GATT_TYPE(J) ELSE ATT_TYPE = ATTTYPE(J,VID) ENDIF END FUNCTION ATT_LEN(J,VID) IMPLICIT NONE INTEGER J INTEGER VID #include "tests.inc" IF (VID .LT. 1) THEN ATT_LEN = GATT_LEN(J) ELSE ATT_LEN = ATTLEN(J,VID) ENDIF END ! ! Return the minimum value of an internal type. ! function internal_min(type) implicit none integer type doubleprecision min_schar doubleprecision min_short doubleprecision min_int doubleprecision min_long doubleprecision max_float doubleprecision max_double #include "tests.inc" if (type .eq. NFT_CHAR) then internal_min = 0 else if (type .eq. NFT_INT1) then #if NF_INT1_IS_C_SIGNED_CHAR internal_min = min_schar() #endif #if NF_INT1_IS_C_SHORT internal_min = min_short() #endif #if NF_INT1_IS_C_INT internal_min = min_int() #endif #if NF_INT1_IS_C_LONG internal_min = min_long() #endif else if (type .eq. NFT_INT2) then #if NF_INT2_IS_C_SHORT internal_min = min_short() #endif #if NF_INT2_IS_C_INT internal_min = min_int() #endif #if NF_INT2_IS_C_LONG internal_min = min_long() #endif else if (type .eq. NFT_INT) then #if NF_INT_IS_C_INT internal_min = min_int() #endif #if NF_INT_IS_C_LONG internal_min = min_long() #endif else if (type .eq. NFT_REAL) then #if NF_REAL_IS_C_FLOAT internal_min = -max_float() #endif #if NF_REAL_IS_C_DOUBLE internal_min = -max_double() #endif else if (type .eq. NFT_DOUBLE) then #if NF_DOUBLEPRECISION_IS_C_DOUBLE internal_min = -max_double() #endif #if NF_DOUBLEPRECISION_IS_C_FLOAT internal_min = -max_float() #endif else stop 2 end if end ! ! Return the maximum value of an internal type. ! function internal_max(type) implicit none integer type doubleprecision max_schar doubleprecision max_short doubleprecision max_int doubleprecision max_long doubleprecision max_float doubleprecision max_double #include "tests.inc" if (type .eq. NFT_CHAR) then internal_max = 255 else if (type .eq. NFT_INT1) then #if NF_INT1_IS_C_SIGNED_CHAR internal_max = max_schar() #endif #if NF_INT1_IS_C_SHORT internal_max = max_short() #endif #if NF_INT1_IS_C_INT internal_max = max_int() #endif #if NF_INT1_IS_C_LONG internal_max = max_long() #endif else if (type .eq. NFT_INT2) then #if NF_INT2_IS_C_SHORT internal_max = max_short() #endif #if NF_INT2_IS_C_INT internal_max = max_int() #endif #if NF_INT2_IS_C_LONG internal_max = max_long() #endif else if (type .eq. NFT_INT) then #if NF_INT_IS_C_INT internal_max = max_int() #endif #if NF_INT_IS_C_LONG internal_max = max_long() #endif else if (type .eq. NFT_REAL) then #if NF_REAL_IS_C_FLOAT internal_max = max_float() #endif #if NF_REAL_IS_C_DOUBLE internal_max = max_double() #endif else if (type .eq. NFT_DOUBLE) then #if NF_DOUBLEPRECISION_IS_C_DOUBLE internal_max = max_double() #endif #if NF_DOUBLEPRECISION_IS_C_FLOAT internal_max = max_float() #endif else stop 2 end if end ! ! Return the minimum value of an external type. ! function external_min(type) implicit none integer type #include "tests.inc" if (type .eq. NF_BYTE) then external_min = X_BYTE_MIN else if (type .eq. NF_CHAR) then external_min = X_CHAR_MIN else if (type .eq. NF_SHORT) then external_min = X_SHORT_MIN else if (type .eq. NF_INT) then external_min = X_INT_MIN else if (type .eq. NF_FLOAT) then external_min = X_FLOAT_MIN else if (type .eq. NF_DOUBLE) then external_min = X_DOUBLE_MIN else stop 2 end if end ! ! Return the maximum value of an internal type. ! function external_max(type) implicit none integer type #include "tests.inc" if (type .eq. NF_BYTE) then external_max = X_BYTE_MAX else if (type .eq. NF_CHAR) then external_max = X_CHAR_MAX else if (type .eq. NF_SHORT) then external_max = X_SHORT_MAX else if (type .eq. NF_INT) then external_max = X_INT_MAX else if (type .eq. NF_FLOAT) then external_max = X_FLOAT_MAX else if (type .eq. NF_DOUBLE) then external_max = X_DOUBLE_MAX else stop 2 end if end ! ! Indicate whether or not a value lies in the range of an internal type. ! function in_internal_range(itype, value) implicit none integer itype doubleprecision value #include "tests.inc" in_internal_range = value .ge. internal_min(itype) .and. + value .le. internal_max(itype) end ! ! Return the length of a character variable minus any trailing blanks. ! function len_trim(string) implicit none character*(*) string #include "tests.inc" do 1, len_trim = len(string), 1, -1 if (string(len_trim:len_trim) .ne. ' ') + goto 2 1 continue 2 return end netcdf-fortran-4.6.3+ds/nf_test/tst_int64.F0000664000175000017500000002060115205004070020625 0ustar alastairalastairC This program tests CDF-5 file format, with int64 data type subroutine check(err, message) implicit none include 'netcdf.inc' integer err character message*(*) if (err .NE. NF_NOERR) then write(6,*) message//' '//nf_strerror(err) stop 1 end if end program tst_int64 implicit none include 'netcdf.inc' C This is the name of the data file we will create. character*(*) FILE_NAME parameter (FILE_NAME='tst_int64.nc') C We are writing 2D data, a 6 x 12 grid. integer NDIMS parameter (NDIMS=2) integer NX, NY parameter (NX = 6, NY = 12) C NetCDF IDs. integer ncid, varid(2), dimids(NDIMS) integer x_dimid, y_dimid integer xtype, attr_len, cmode integer start(2), count(2), stride(2), imap(2) C This is the data array we will write, and a place to store it when C we read it back in. integer*8 i64buf_out(NY, NX), i64buf_in(NY, NX), attr(1), twoG C Loop indexes, and error handling. integer x, y, err twoG = 2147483647 twoG = twoG + 1 print *, '' print *,'*** Testing NF_INT64 data type for CDF-5 file.' C Check error code NF_EBADTYPE C Create a CDF-2 netCDF file. cmode = IOR(NF_CLOBBER, NF_64BIT_OFFSET) err = nf_create(FILE_NAME, cmode, ncid) call check(err, 'In nf_create: ') C Put a global attribute. Expect NF_EBADTYPE. attr(1) = twoG + 123456789 err = nf_put_att_int64(ncid, NF_GLOBAL, "gatt", NF_INT64, 1, attr) if (err .NE. NF_EBADTYPE) then write(6,*) 'Error: expect NF_EBADTYPE but got ', err stop 2 end if C Write a data of type integer*8 to a global attribute of type NF_INT. attr(1) = 123456789 err = nf_put_att_int64(ncid, NF_GLOBAL, "gatt", NF_INT, 1, attr) call check(err, 'In nf_put_att_int64: ') C Define the dimensions. err = nf_def_dim(ncid, "x", NX, x_dimid) call check(err, 'In nf_def_dim: ') err = nf_def_dim(ncid, "y", NY, y_dimid) call check(err, 'In nf_def_dim: ') dimids(1) = y_dimid dimids(2) = x_dimid C Define a variable of type NF_INT64 in a CDF-2 file. Expect NF_EBADTYPE. dimids(1) = x_dimid err = nf_def_var(ncid, "data", NF_INT64, 1, dimids, varid(1)) if (err .NE. NF_EBADTYPE) then write(6,*) 'Error: expect NF_EBADTYPE but got ', err stop 3 end if C Define a variable of type NF_INT. err = nf_def_var(ncid, "var_int", NF_INT, NDIMS, dimids, varid(1)) call check(err, 'In nf_def_var: ') C Since this is a classic model file, we must call enddef err = nf_enddef(ncid) call check(err, 'In nf_enddef: ') C Initialize write buffer do x = 1, NX do y = 1, NY i64buf_out(y, x) = x * y end do end do C Set start(:) and count(:) start(1) = 2 start(2) = 3 count(1) = 2 count(2) = 2 stride(1) = 2 stride(2) = 2 imap(1) = NX imap(2) = 1 C Write to the file using all kinds of put APIs. err = nf_put_var1_int64(ncid, varid(1), start, i64buf_out) call check(err, 'In nf_put_var1_int64: ') err = nf_put_vara_int64(ncid, varid(1), start, count, i64buf_out) call check(err, 'In nf_put_vara_int64: ') err = nf_put_vars_int64(ncid, varid(1), start, count, stride, + i64buf_out) call check(err, 'In nf_put_vars_int64: ') err = nf_put_varm_int64(ncid, varid(1), start, count, stride, + imap, i64buf_out) call check(err, 'In nf_put_varm_int64: ') err = nf_put_var_int64(ncid, varid(1), i64buf_out) call check(err, 'In nf_put_var_int64: ') C Close the CDF-2 file. err = nf_close(ncid) call check(err, 'In nf_close: ') #ifdef ENABLE_CDF5 C Create a CDF-5 netCDF file. cmode = IOR(NF_CLOBBER, NF_64BIT_DATA) err = nf_create(FILE_NAME, cmode, ncid) call check(err, 'In nf_create: ') C Put a value of type integer*8 to a global attribute of type NF_INT64. attr(1) = twoG + 123456789 err = nf_put_att_int64(ncid, NF_GLOBAL, "gatt", NF_INT64, 1, attr) call check(err, 'In nf_put_att_int64: ') C Define the dimensions. err = nf_def_dim(ncid, "x", NX, x_dimid) call check(err, 'In nf_def_dim: ') err = nf_def_dim(ncid, "y", NY, y_dimid) call check(err, 'In nf_def_dim: ') dimids(1) = y_dimid dimids(2) = x_dimid C Define a variable of type NF_INT64. err = nf_def_var(ncid, "var_int64",NF_INT64,NDIMS,dimids,varid(1)) call check(err, 'In nf_def_var: ') C Define a variable of type NF_INT. err = nf_def_var(ncid, "var_int", NF_INT, NDIMS, dimids, varid(2)) call check(err, 'In nf_def_var: ') C Since this is a classic model file, we must call enddef err = nf_enddef(ncid) call check(err, 'In nf_enddef: ') C Write a buffer of type integer*8 to a variable of type NF_INT. err = nf_put_var_int64(ncid, varid(2), i64buf_out) call check(err, 'In nf_put_var_int64: ') C Use large values for write data. do x = 1, NX do y = 1, NY i64buf_out(y, x) = twoG + x * y end do end do C Write the data to the file using different kinds of put APIs. err = nf_put_var1_int64(ncid, varid(1), start, i64buf_out) call check(err, 'In nf_put_var1_int64: ') err = nf_put_vara_int64(ncid, varid(1), start, count, i64buf_out) call check(err, 'In nf_put_vara_int64: ') err = nf_put_vars_int64(ncid, varid(1), start, count, stride, + i64buf_out) call check(err, 'In nf_put_vars_int64: ') err = nf_put_varm_int64(ncid, varid(1), start, count, stride, + imap, i64buf_out) call check(err, 'In nf_put_varm_int64: ') err = nf_put_var_int64(ncid, varid(1), i64buf_out) call check(err, 'In nf_put_var_int64: ') C Close the CDF-5 file. err = nf_close(ncid) call check(err, 'In nf_close: ') C Reopen the CDF-5 file and check again. err = nf_open(FILE_NAME, NF_NOWRITE, ncid) call check(err, 'In nf_open: ') C read the global attribute and check value err = nf_inq_att(ncid, NF_GLOBAL, "gatt", xtype, attr_len) call check(err, 'In nf_inq_att: ') if (xtype .NE. NF_INT64) then print *,'Error: unepected xtype ', xtype end if if (attr_len .NE. 1) then print *,'Error: unepected attribute length ', attr_len end if attr(1) = 0 err = nf_get_att_int64(ncid, NF_GLOBAL, "gatt", attr) call check(err, 'In nf_get_att_int64: ') if (attr(1) .NE. twoG + 123456789) then print *,'Error: unepected attribute value ', attr(1) end if C Find variable ID. err = nf_inq_varid(ncid, "var_int64", varid(1)) call check(err, 'In nf_inq_varid: ') if (varid(1) .ne. 1) stop 4 C Read the data err = nf_get_var1_int64(ncid, varid(1), start, i64buf_in) call check(err, 'In nf_get_var1_int64: ') err = nf_get_vara_int64(ncid, varid(1), start, count, i64buf_in) call check(err, 'In nf_get_vara_int64: ') err = nf_get_vars_int64(ncid, varid(1), start, count, stride, + i64buf_in) call check(err, 'In nf_get_vars_int64: ') err = nf_get_varm_int64(ncid, varid(1), start, count, stride, + imap, i64buf_in) call check(err, 'In nf_get_varm_int64: ') C Read the whole data and check it. err = nf_get_var_int64(ncid, varid(1), i64buf_in) call check(err, 'In nf_get_var_int64: ') do x = 1, NX do y = 1, NY if (i64buf_in(y, x) .ne. i64buf_out(y, x)) stop 5 end do end do C Find variable ID of type NF_INT. err = nf_inq_varid(ncid, "var_int", varid(2)) call check(err, 'In nf_inq_varid: ') if (varid(2) .ne. 2) stop 6 C Read the whole data of type NF_INT into a buffer of type integer*8. err = nf_get_var_int64(ncid, varid(2), i64buf_in) call check(err, 'In nf_get_var_int64: ') do x = 1, NX do y = 1, NY if (i64buf_in(y, x) .ne. x * y) stop 7 end do end do C Close the file. err = nf_close(ncid) call check(err, 'In nf_close: ') #endif print *,'*** SUCCESS!' end netcdf-fortran-4.6.3+ds/nf_test/ref_fills.nc0000664000175000017500000000041015205004070021143 0ustar alastairalastairCDF n dàfðløsb?ðGž?€|ð€€netcdf-fortran-4.6.3+ds/nf_test/f03lib.c0000775000175000017500000000344315205004070020113 0ustar alastairalastair/* * This file contains support functions for FORTRAN code. For example, * under HP-UX A.09.05, the U77 library doesn't contain the exit() * routine -- so we create one here. */ /* Modified fortlib.c - We remove all cfortran.h stuff to make compiling easier. Also functions are modified to be extern and not static so FORTRAN can see them Version 1. July 2007 first vesion Version 2. April 2009 - modified for netCDF 4.0.1 Modified by: Richard Weed, Ph.D Center for Advanced Vehicular Systems Misssissippi State University rweed@.cavs.msstate.edu */ #include #include #include extern double myrand(int iflag) { if (iflag != 0) srand(iflag); /* * Return a pseudo-random value between 0.0 and 1.0. * * We don't use RAND_MAX here because not all compilation * environments define it (e.g. gcc(1) under SunOS 4.1.3). */ return (rand() % 32768) / 32767.0; } extern int myshift(int value, int amount) { if (amount < 0) value >>= -amount; else if (amount > 0) value <<= amount; return value; } #include extern void nc_ignorefpe(int doit) { if(doit) (void) signal(SIGFPE, SIG_IGN); } extern double cmax_uchar() { return UCHAR_MAX; } extern double cmin_schar() { return SCHAR_MIN; } extern double cmax_schar() { return SCHAR_MAX; } extern double cmin_short() { return SHRT_MIN; } extern double cmax_short() { return SHRT_MAX; } extern double cmin_int() { return INT_MIN; } extern double cmax_int() { return INT_MAX; } extern double cmin_long() { return LONG_MIN; } extern double cmax_long() { return LONG_MAX; } extern double cmax_float() { return FLT_MAX; } extern double cmax_double() { return DBL_MAX; } netcdf-fortran-4.6.3+ds/nf_test/fills.cdl0000664000175000017500000000027715205004070020464 0ustar alastairalastairnetcdf fills { dimensions: n = 2 ; variables: double d(n) ; float f(n) ; int l(n) ; short s(n) ; byte b(n) ; data: d = 1, _ ; f = 1, _ ; l = 1, _ ; s = 1, _ ; b = 1, -127 ; } netcdf-fortran-4.6.3+ds/nf_test/nf_error.F0000664000175000017500000000256115205004070020610 0ustar alastairalastairC Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C Steve Emmerson, Ed Hartnett C C Use for logging error messages C subroutine error(msg) implicit none #include "tests.inc" character*(*) msg nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg end C C Use for logging error conditions C subroutine errori(msg, i) implicit none #include "tests.inc" character*(*) msg integer i nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg, i end C C Use for logging error conditions C subroutine errord(msg, d) implicit none #include "tests.inc" character*(*) msg doubleprecision d nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg, d end C C Use for logging error conditions C subroutine errorc(msg, string) implicit none #include "tests.inc" character*(*) msg character*(*) string nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg, + string(1:len_trim(string)) end C C Use for logging error conditions C subroutine errore(msg, err) implicit none #include "tests.inc" character*(*) msg integer err call errorc(msg, nf_strerror(err)) end netcdf-fortran-4.6.3+ds/nf_test/Makefile.in0000664000175000017500000014300215205004070020726 0ustar alastairalastair# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This is a automake file, part of Unidata's netCDF package. # Copyright 2005-2019, see the COPYRIGHT file for more information. # This file builds and runs the tests for the netCDF classic F77 # API. Tests are run using traditional include netcdf.inc, and then # again using the F77 API through its Fortran mod file. To achieve # this, sed is used to modify the tests using include, to create the # tests using the fortran module. # Ed Hartnett, Russ Rew, Dennis Heimbigner, Ward Fisher VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = nf_test$(EXEEXT) tst_int64$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_4) TESTS = nf_test$(EXEEXT) tst_int64$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_4) # Add these two V2 test programs, if V2 API is being built. @BUILD_V2_TRUE@am__append_1 = tst_f77_v2 ftest @BUILD_V2_TRUE@am__append_2 = tst_f77_v2 ftest # If the V2 API is being built, then make copies of the two V2 F77 API # tests, modified to use the fortran module. @BUILD_V2_TRUE@@USE_SED_TRUE@am__append_3 = f03test.F tst03_f77_v2.F @BUILD_V2_TRUE@@USE_SED_TRUE@am__append_4 = f03test tst03_f77_v2 # Compile and run the generated tests. @USE_SED_TRUE@am__append_5 = $(F03_TESTS) @USE_SED_TRUE@am__append_6 = $(F03_TESTS) subdir = nf_test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = fills.nc CONFIG_CLEAN_VPATH_FILES = @BUILD_V2_TRUE@am__EXEEXT_1 = tst_f77_v2$(EXEEXT) ftest$(EXEEXT) @BUILD_V2_TRUE@@USE_SED_TRUE@am__EXEEXT_2 = f03test$(EXEEXT) \ @BUILD_V2_TRUE@@USE_SED_TRUE@ tst03_f77_v2$(EXEEXT) @USE_SED_TRUE@am__EXEEXT_3 = nf03_test$(EXEEXT) $(am__EXEEXT_2) @USE_SED_TRUE@am__EXEEXT_4 = $(am__EXEEXT_3) LTLIBRARIES = $(noinst_LTLIBRARIES) libtests_la_LIBADD = am__libtests_la_SOURCES_DIST = module_tests.F90 @USE_SED_TRUE@am_libtests_la_OBJECTS = module_tests.lo libtests_la_OBJECTS = $(am_libtests_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @USE_SED_TRUE@am_libtests_la_rpath = am__f03test_SOURCES_DIST = f03test.F @BUILD_V2_TRUE@@USE_SED_TRUE@am_f03test_OBJECTS = f03test.$(OBJEXT) f03test_OBJECTS = $(am_f03test_OBJECTS) @BUILD_V2_TRUE@@USE_SED_TRUE@f03test_DEPENDENCIES = libtests.la \ @BUILD_V2_TRUE@@USE_SED_TRUE@ ${top_builddir}/fortran/libnetcdff.la am__ftest_SOURCES_DIST = ftest.F f03lib.c @BUILD_V2_TRUE@am_ftest_OBJECTS = ftest.$(OBJEXT) f03lib.$(OBJEXT) ftest_OBJECTS = $(am_ftest_OBJECTS) ftest_LDADD = $(LDADD) ftest_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__nf03_test_SOURCES_DIST = f03lib_f_interfaces.F90 test03_get.F \ test03_put.F nf03_error.F nf03_test.F test03_read.F \ test03_write.F util03.F f03lib.c @USE_SED_TRUE@am_nf03_test_OBJECTS = f03lib_f_interfaces.$(OBJEXT) \ @USE_SED_TRUE@ test03_get.$(OBJEXT) test03_put.$(OBJEXT) \ @USE_SED_TRUE@ nf03_error.$(OBJEXT) nf03_test.$(OBJEXT) \ @USE_SED_TRUE@ test03_read.$(OBJEXT) test03_write.$(OBJEXT) \ @USE_SED_TRUE@ util03.$(OBJEXT) f03lib.$(OBJEXT) nf03_test_OBJECTS = $(am_nf03_test_OBJECTS) @USE_SED_TRUE@nf03_test_DEPENDENCIES = libtests.la \ @USE_SED_TRUE@ ${top_builddir}/fortran/libnetcdff.la am_nf_test_OBJECTS = f03lib_f_interfaces.$(OBJEXT) test_get.$(OBJEXT) \ test_put.$(OBJEXT) nf_error.$(OBJEXT) nf_test.$(OBJEXT) \ test_read.$(OBJEXT) test_write.$(OBJEXT) util.$(OBJEXT) \ f03lib.$(OBJEXT) nf_test_OBJECTS = $(am_nf_test_OBJECTS) nf_test_LDADD = $(LDADD) nf_test_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am__tst03_f77_v2_SOURCES_DIST = tst03_f77_v2.F @BUILD_V2_TRUE@@USE_SED_TRUE@am_tst03_f77_v2_OBJECTS = \ @BUILD_V2_TRUE@@USE_SED_TRUE@ tst03_f77_v2.$(OBJEXT) tst03_f77_v2_OBJECTS = $(am_tst03_f77_v2_OBJECTS) @BUILD_V2_TRUE@@USE_SED_TRUE@tst03_f77_v2_DEPENDENCIES = libtests.la \ @BUILD_V2_TRUE@@USE_SED_TRUE@ ${top_builddir}/fortran/libnetcdff.la am__tst_f77_v2_SOURCES_DIST = tst_f77_v2.F @BUILD_V2_TRUE@am_tst_f77_v2_OBJECTS = tst_f77_v2.$(OBJEXT) tst_f77_v2_OBJECTS = $(am_tst_f77_v2_OBJECTS) tst_f77_v2_LDADD = $(LDADD) tst_f77_v2_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la am_tst_int64_OBJECTS = tst_int64.$(OBJEXT) tst_int64_OBJECTS = $(am_tst_int64_OBJECTS) tst_int64_LDADD = $(LDADD) tst_int64_DEPENDENCIES = ${top_builddir}/fortran/libnetcdff.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/f03lib.Po am__mv = mv -f PPF77COMPILE = $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_FFLAGS) $(FFLAGS) AM_V_PPF77 = $(am__v_PPF77_@AM_V@) am__v_PPF77_ = $(am__v_PPF77_@AM_DEFAULT_V@) am__v_PPF77_0 = @echo " PPF77 " $@; am__v_PPF77_1 = F77LD = $(F77) F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; am__v_F77LD_1 = PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(FC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_FCFLAGS) $(FCFLAGS) AM_V_PPFC = $(am__v_PPFC_@AM_V@) am__v_PPFC_ = $(am__v_PPFC_@AM_DEFAULT_V@) am__v_PPFC_0 = @echo " PPFC " $@; am__v_PPFC_1 = FCLD = $(FC) FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_FCLD = $(am__v_FCLD_@AM_V@) am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) am__v_FCLD_0 = @echo " FCLD " $@; am__v_FCLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtests_la_SOURCES) $(f03test_SOURCES) $(ftest_SOURCES) \ $(nf03_test_SOURCES) $(nf_test_SOURCES) \ $(tst03_f77_v2_SOURCES) $(tst_f77_v2_SOURCES) \ $(tst_int64_SOURCES) DIST_SOURCES = $(am__libtests_la_SOURCES_DIST) \ $(am__f03test_SOURCES_DIST) $(am__ftest_SOURCES_DIST) \ $(am__nf03_test_SOURCES_DIST) $(nf_test_SOURCES) \ $(am__tst03_f77_v2_SOURCES_DIST) \ $(am__tst_f77_v2_SOURCES_DIST) $(tst_int64_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__extra_recursive_targets = check-valgrind-recursive \ check-valgrind-memcheck-recursive \ check-valgrind-helgrind-recursive check-valgrind-drd-recursive \ check-valgrind-sgcheck-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ $$am__collect_skipped_logs \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer-defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(IGNORE_SKIPPED_LOGS)'; then \ am__collect_skipped_logs='--collect-skipped-logs no'; \ else \ am__collect_skipped_logs=''; \ fi; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ref_fills.nc \ $(top_srcdir)/depcomp $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INTERNAL_DOCS = @BUILD_INTERNAL_DOCS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_VALGRIND_drd = @ENABLE_VALGRIND_drd@ ENABLE_VALGRIND_helgrind = @ENABLE_VALGRIND_helgrind@ ENABLE_VALGRIND_memcheck = @ENABLE_VALGRIND_memcheck@ ENABLE_VALGRIND_sgcheck = @ENABLE_VALGRIND_sgcheck@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_f90 = @FCFLAGS_f90@ FC_VERSION = @FC_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAS_CDF5 = @HAS_CDF5@ HAS_DAP = @HAS_DAP@ HAS_F03 = @HAS_F03@ HAS_F90 = @HAS_F90@ HAS_LOGGING = @HAS_LOGGING@ HAS_NC2 = @HAS_NC2@ HAS_NC4 = @HAS_NC4@ HAS_NC4_PARALLEL = @HAS_NC4_PARALLEL@ HAS_PARALLEL = @HAS_PARALLEL@ HAS_PNETCDF = @HAS_PNETCDF@ HAS_QUANTIZE = @HAS_QUANTIZE@ HAS_SZIP_WRITE = @HAS_SZIP_WRITE@ HAS_ZSTD = @HAS_ZSTD@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOD_FLAG = @MOD_FLAG@ MPIEXEC = @MPIEXEC@ NC_FLIBS = @NC_FLIBS@ NC_LIBS = @NC_LIBS@ NF_HDF5_PLUGIN_PATH = @NF_HDF5_PLUGIN_PATH@ NM = @NM@ NMEDIT = @NMEDIT@ NMFLAGS = @NMFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VALGRIND = @VALGRIND@ VALGRIND_ENABLED = @VALGRIND_ENABLED@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ enable_shared = @enable_shared@ enable_static = @enable_static@ exec_prefix = @exec_prefix@ fmoddir = @fmoddir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ valgrind_enabled_tools = @valgrind_enabled_tools@ valgrind_tools = @valgrind_tools@ # FFLAGS is used when compiling *.F AM_FFLAGS = -I$(top_builddir)/fortran # FCFLAGS is used when compiling *.F90. AM_FCFLAGS = $(AM_FFLAGS) # All tests need to link to the netcdf fortran library. LDADD = ${top_builddir}/fortran/libnetcdff.la nf_test_SOURCES = f03lib_f_interfaces.F90 test_get.m4 test_put.m4 \ nf_error.F nf_test.F test_read.F test_write.F util.F f03lib.c \ tests.inc tst_int64_SOURCES = tst_int64.F @BUILD_V2_TRUE@tst_f77_v2_SOURCES = tst_f77_v2.F @BUILD_V2_TRUE@ftest_SOURCES = ftest.F f03lib.c # If sed is present, generate these tests at build time. They are the # same tests as the F77 netCDF-4 tests above, but using the "use # netcdf4_f03" statement. # Build this uninstalled convenience library, tests.mod. @USE_SED_TRUE@noinst_LTLIBRARIES = libtests.la # Each convenience library depends on its source. @USE_SED_TRUE@libtests_la_SOURCES = module_tests.F90 # Mod files are built sources. # Note that all these fortran programs are built at compile-time on # the user system. @USE_SED_TRUE@BUILT_SOURCES = tests.mod $(F03_TEST_CODES) # The fortran codes will compile into these tests. @USE_SED_TRUE@F03_TESTS = nf03_test $(am__append_4) # These test fortran codes will be created using sed. @USE_SED_TRUE@F03_TEST_CODES = nf03_error.F test03_read.F \ @USE_SED_TRUE@ test03_write.F nf03_test.F test03_get.F \ @USE_SED_TRUE@ $(am__append_3) # test03_put.F and util03.F are copies of similarly named test # codes, but with "use" instead of "include", as well as some other # changes to make them work with the tests.mod file instead of # tests.inc. These files proved too difficult to generate with sed, # so, we just store slightly modified copies of these codes in the # repo. @USE_SED_TRUE@nf03_test_SOURCES = f03lib_f_interfaces.F90 test03_get.F test03_put.F \ @USE_SED_TRUE@nf03_error.F nf03_test.F test03_read.F test03_write.F util03.F \ @USE_SED_TRUE@f03lib.c @USE_SED_TRUE@nf03_test_LDADD = libtests.la ${top_builddir}/fortran/libnetcdff.la @BUILD_V2_TRUE@@USE_SED_TRUE@f03test_SOURCES = f03test.F @BUILD_V2_TRUE@@USE_SED_TRUE@f03test_LDADD = libtests.la ${top_builddir}/fortran/libnetcdff.la @BUILD_V2_TRUE@@USE_SED_TRUE@tst03_f77_v2_SOURCES = tst03_f77_v2.F @BUILD_V2_TRUE@@USE_SED_TRUE@tst03_f77_v2_LDADD = libtests.la ${top_builddir}/fortran/libnetcdff.la # test_get.F and test_put.f need to be distributed, so that the user # need not have m4. ref_fills.nc is copied to fills.nc by configure # and used by test program ftest. EXTRA_DIST = test_get.F test_put.F fills.cdl ref_fills.nc \ CMakeLists.txt # As per autotools convention, mod files get mostly cleaned. MOSTLYCLEANFILES = *.mod # Cleaning up files created during the process. CLEANFILES = scratch*.nc test*.nc copy*.nc tst_*.nc ftst_*.nc \ f90tst_*.nc f03test*.nc *.tmp *.tmp2 fort.* tst03*.nc f03tst*.nc \ ftest.nc fcopy.nc $(F03_TEST_CODES) # This file gets copied to build dir by configure. DISTCLEANFILES = fills.nc # These are shipped with code, but can be rebuilt from m4 if needed. MAINTAINERCLEANFILES = test_get.F test_put.F all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .F .F90 .c .f .lo .log .m4 .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign nf_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign nf_test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: $(am__rm_f) $(check_PROGRAMS) test -z "$(EXEEXT)" || $(am__rm_f) $(check_PROGRAMS:$(EXEEXT)=) clean-noinstLTLIBRARIES: -$(am__rm_f) $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ echo rm -f $${locs}; \ $(am__rm_f) $${locs} libtests.la: $(libtests_la_OBJECTS) $(libtests_la_DEPENDENCIES) $(EXTRA_libtests_la_DEPENDENCIES) $(AM_V_FCLD)$(FCLINK) $(am_libtests_la_rpath) $(libtests_la_OBJECTS) $(libtests_la_LIBADD) $(LIBS) f03test$(EXEEXT): $(f03test_OBJECTS) $(f03test_DEPENDENCIES) $(EXTRA_f03test_DEPENDENCIES) @rm -f f03test$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(f03test_OBJECTS) $(f03test_LDADD) $(LIBS) ftest$(EXEEXT): $(ftest_OBJECTS) $(ftest_DEPENDENCIES) $(EXTRA_ftest_DEPENDENCIES) @rm -f ftest$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ftest_OBJECTS) $(ftest_LDADD) $(LIBS) nf03_test$(EXEEXT): $(nf03_test_OBJECTS) $(nf03_test_DEPENDENCIES) $(EXTRA_nf03_test_DEPENDENCIES) @rm -f nf03_test$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(nf03_test_OBJECTS) $(nf03_test_LDADD) $(LIBS) nf_test$(EXEEXT): $(nf_test_OBJECTS) $(nf_test_DEPENDENCIES) $(EXTRA_nf_test_DEPENDENCIES) @rm -f nf_test$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(nf_test_OBJECTS) $(nf_test_LDADD) $(LIBS) tst03_f77_v2$(EXEEXT): $(tst03_f77_v2_OBJECTS) $(tst03_f77_v2_DEPENDENCIES) $(EXTRA_tst03_f77_v2_DEPENDENCIES) @rm -f tst03_f77_v2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(tst03_f77_v2_OBJECTS) $(tst03_f77_v2_LDADD) $(LIBS) tst_f77_v2$(EXEEXT): $(tst_f77_v2_OBJECTS) $(tst_f77_v2_DEPENDENCIES) $(EXTRA_tst_f77_v2_DEPENDENCIES) @rm -f tst_f77_v2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(tst_f77_v2_OBJECTS) $(tst_f77_v2_LDADD) $(LIBS) tst_int64$(EXEEXT): $(tst_int64_OBJECTS) $(tst_int64_DEPENDENCIES) $(EXTRA_tst_int64_DEPENDENCIES) @rm -f tst_int64$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(tst_int64_OBJECTS) $(tst_int64_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/f03lib.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @: >>$@ am--depfiles: $(am__depfiles_remade) .F.o: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ $< .F.obj: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .F.lo: $(AM_V_PPF77)$(LTPPF77COMPILE) -c -o $@ $< .F.f: $(F77COMPILE) -F $< .F90.o: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $< .F90.obj: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .F90.lo: $(AM_V_PPFC)$(LTPPFCCOMPILE) -c -o $@ $< .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs check-valgrind-local: check-valgrind-memcheck-local: check-valgrind-helgrind-local: check-valgrind-drd-local: check-valgrind-sgcheck-local: ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ output_system_information () \ { \ echo; \ { uname -a | $(AWK) '{ \ printf "System information (uname -a):"; \ for (i = 1; i < NF; ++i) \ { \ if (i != 2) \ printf " %s", $$i; \ } \ printf "\n"; \ }'; } 2>&1; \ if test -r /etc/os-release; then \ echo "Distribution information (/etc/os-release):"; \ sed 8q /etc/os-release; \ elif test -r /etc/issue; then \ echo "Distribution information (/etc/issue):"; \ cat /etc/issue; \ fi; \ }; \ please_report () \ { \ echo "Some test(s) failed. Please report this to $(PACKAGE_BUGREPORT),"; \ echo "together with the test-suite.log file (gzipped) and your system"; \ echo "information. Thanks."; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ output_system_information; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG) for debugging.$${std}";\ if test -n "$(PACKAGE_BUGREPORT)"; then \ please_report | sed -e "s/^/$${col}/" -e s/'$$'/"$${std}"/; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @$(am__rm_f) $(RECHECK_LOGS) @$(am__rm_f) $(RECHECK_LOGS:.log=.trs) @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? nf_test.log: nf_test$(EXEEXT) @p='nf_test$(EXEEXT)'; \ b='nf_test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) tst_int64.log: tst_int64$(EXEEXT) @p='tst_int64$(EXEEXT)'; \ b='tst_int64'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) tst_f77_v2.log: tst_f77_v2$(EXEEXT) @p='tst_f77_v2$(EXEEXT)'; \ b='tst_f77_v2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ftest.log: ftest$(EXEEXT) @p='ftest$(EXEEXT)'; \ b='ftest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) nf03_test.log: nf03_test$(EXEEXT) @p='nf03_test$(EXEEXT)'; \ b='nf03_test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) f03test.log: f03test$(EXEEXT) @p='f03test$(EXEEXT)'; \ b='f03test'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) tst03_f77_v2.log: tst03_f77_v2$(EXEEXT) @p='tst03_f77_v2$(EXEEXT)'; \ b='tst03_f77_v2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -$(am__rm_f) $(MOSTLYCLEANFILES) -$(am__rm_f) $(TEST_LOGS) -$(am__rm_f) $(TEST_LOGS:.log=.trs) -$(am__rm_f) $(TEST_SUITE_LOG) clean-generic: -$(am__rm_f) $(CLEANFILES) distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) -$(am__rm_f) $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -$(am__rm_f) $(BUILT_SOURCES) -$(am__rm_f) $(MAINTAINERCLEANFILES) check-valgrind: check-valgrind-am check-valgrind-am: check-valgrind-local check-valgrind-drd: check-valgrind-drd-am check-valgrind-drd-am: check-valgrind-drd-local check-valgrind-helgrind: check-valgrind-helgrind-am check-valgrind-helgrind-am: check-valgrind-helgrind-local check-valgrind-memcheck: check-valgrind-memcheck-am check-valgrind-memcheck-am: check-valgrind-memcheck-local check-valgrind-sgcheck: check-valgrind-sgcheck-am check-valgrind-sgcheck-am: check-valgrind-sgcheck-local clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/f03lib.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/f03lib.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check check-am install install-am install-exec \ install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am check-valgrind-am check-valgrind-drd-am \ check-valgrind-drd-local check-valgrind-helgrind-am \ check-valgrind-helgrind-local check-valgrind-local \ check-valgrind-memcheck-am check-valgrind-memcheck-local \ check-valgrind-sgcheck-am check-valgrind-sgcheck-local clean \ clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # Rebuild the tests.mod file if needed. @USE_SED_TRUE@tests.mod: module_tests.$(OBJEXT) @USE_SED_TRUE@ @if test ! -f $@; then rm -f $<; $(MAKE) $<; fi @USE_SED_TRUE@test03_get.$(OBJEXT) test03_put.$(OBJEXT) nf03_error.$(OBJEXT) \ @USE_SED_TRUE@nf03_test.$(OBJEXT) test03_read.$(OBJEXT) test03_write.$(OBJEXT) \ @USE_SED_TRUE@util03.$(OBJEXT): tests.mod @BUILD_V2_TRUE@@USE_SED_TRUE@tst03_f77_v2.$(OBJEXT): tests.mod # Use sed to generate the f03 versions of some test codes. @USE_SED_TRUE@f03test.F: ftest.F @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|use netcdf_f03|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|ftest.nc|f03test_test.nc|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|fcopy.nc|f03test_copy.nc|" $@.tmp2 > $@ @USE_SED_TRUE@tst03_f77_v2.F: tst_f77_v2.F @USE_SED_TRUE@ $(SED) "s|IMPLICIT NONE|USE tests|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|tst_f77_v2.nc|tst03_f77_v2.nc|" $@.tmp2 > $@ @USE_SED_TRUE@nf03_error.F: nf_error.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE tests|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ @USE_SED_TRUE@nf03_test.F: nf_test.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE tests|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@.tmp2 @USE_SED_TRUE@ $(SED) "s|scratch.nc|scratch03.nc|" $@.tmp2 > $@.tmp @USE_SED_TRUE@ $(SED) "s|test.nc|test03.nc|" $@.tmp > $@ @USE_SED_TRUE@test03_read.F: test_read.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE tests|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ @USE_SED_TRUE@test03_write.F: test_write.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE tests|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ @USE_SED_TRUE@test03_get.F: test_get.F @USE_SED_TRUE@ $(SED) "s|implicit none|USE tests|" $< > $@.tmp @USE_SED_TRUE@ $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ # Tell make how to turn .m4 files into .F files. .m4.F: m4 $(M4FLAGS) $< >$@ # If valgrind is present on this machine, this will enable # check-valgrind target, which runs all tests with valgrind. @VALGRIND_CHECK_RULES@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% netcdf-fortran-4.6.3+ds/nf_test/Makefile.am0000664000175000017500000001304515205004070020720 0ustar alastairalastair# This is a automake file, part of Unidata's netCDF package. # Copyright 2005-2019, see the COPYRIGHT file for more information. # This file builds and runs the tests for the netCDF classic F77 # API. Tests are run using traditional include netcdf.inc, and then # again using the F77 API through its Fortran mod file. To achieve # this, sed is used to modify the tests using include, to create the # tests using the fortran module. # Ed Hartnett, Russ Rew, Dennis Heimbigner, Ward Fisher # FFLAGS is used when compiling *.F AM_FFLAGS = -I$(top_builddir)/fortran # FCFLAGS is used when compiling *.F90. AM_FCFLAGS = $(AM_FFLAGS) # All tests need to link to the netcdf fortran library. LDADD = ${top_builddir}/fortran/libnetcdff.la # nf_test is the main test program for classic netCDF F77 API. check_PROGRAMS = nf_test tst_int64 TESTS = nf_test tst_int64 nf_test_SOURCES = f03lib_f_interfaces.F90 test_get.m4 test_put.m4 \ nf_error.F nf_test.F test_read.F test_write.F util.F f03lib.c \ tests.inc tst_int64_SOURCES = tst_int64.F # Add these two V2 test programs, if V2 API is being built. if BUILD_V2 check_PROGRAMS += tst_f77_v2 ftest TESTS += tst_f77_v2 ftest tst_f77_v2_SOURCES = tst_f77_v2.F ftest_SOURCES = ftest.F f03lib.c endif # BUILD_V2 # If sed is present, generate these tests at build time. They are the # same tests as the F77 netCDF-4 tests above, but using the "use # netcdf4_f03" statement. if USE_SED # Build this uninstalled convenience library, tests.mod. noinst_LTLIBRARIES = libtests.la # Each convenience library depends on its source. libtests_la_SOURCES = module_tests.F90 # Rebuild the tests.mod file if needed. tests.mod: module_tests.$(OBJEXT) @if test ! -f $@; then rm -f $<; $(MAKE) $<; fi # Mod files are built sources. BUILT_SOURCES = tests.mod # The fortran codes will compile into these tests. F03_TESTS = nf03_test # These test fortran codes will be created using sed. F03_TEST_CODES = nf03_error.F test03_read.F test03_write.F \ nf03_test.F test03_get.F # test03_put.F and util03.F are copies of similarly named test # codes, but with "use" instead of "include", as well as some other # changes to make them work with the tests.mod file instead of # tests.inc. These files proved too difficult to generate with sed, # so, we just store slightly modified copies of these codes in the # repo. nf03_test_SOURCES = f03lib_f_interfaces.F90 test03_get.F test03_put.F \ nf03_error.F nf03_test.F test03_read.F test03_write.F util03.F \ f03lib.c nf03_test_LDADD = libtests.la ${top_builddir}/fortran/libnetcdff.la test03_get.$(OBJEXT) test03_put.$(OBJEXT) nf03_error.$(OBJEXT) \ nf03_test.$(OBJEXT) test03_read.$(OBJEXT) test03_write.$(OBJEXT) \ util03.$(OBJEXT): tests.mod # If the V2 API is being built, then make copies of the two V2 F77 API # tests, modified to use the fortran module. if BUILD_V2 F03_TEST_CODES += f03test.F tst03_f77_v2.F F03_TESTS += f03test tst03_f77_v2 f03test_SOURCES = f03test.F f03test_LDADD = libtests.la ${top_builddir}/fortran/libnetcdff.la tst03_f77_v2_SOURCES = tst03_f77_v2.F tst03_f77_v2_LDADD = libtests.la ${top_builddir}/fortran/libnetcdff.la tst03_f77_v2.$(OBJEXT): tests.mod endif # BUILD_V2 # Note that all these fortran programs are built at compile-time on # the user system. BUILT_SOURCES += $(F03_TEST_CODES) # Compile and run the generated tests. check_PROGRAMS += $(F03_TESTS) TESTS += $(F03_TESTS) # Use sed to generate the f03 versions of some test codes. f03test.F: ftest.F $(SED) "s|include 'netcdf.inc'|use netcdf_f03|" $< > $@.tmp $(SED) "s|ftest.nc|f03test_test.nc|" $@.tmp > $@.tmp2 $(SED) "s|fcopy.nc|f03test_copy.nc|" $@.tmp2 > $@ tst03_f77_v2.F: tst_f77_v2.F $(SED) "s|IMPLICIT NONE|USE tests|" $< > $@.tmp $(SED) "s|include 'netcdf.inc'|implicit none|" $@.tmp > $@.tmp2 $(SED) "s|tst_f77_v2.nc|tst03_f77_v2.nc|" $@.tmp2 > $@ nf03_error.F: nf_error.F $(SED) "s|implicit none|USE tests|" $< > $@.tmp $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ nf03_test.F: nf_test.F $(SED) "s|implicit none|USE tests|" $< > $@.tmp $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@.tmp2 $(SED) "s|scratch.nc|scratch03.nc|" $@.tmp2 > $@.tmp $(SED) "s|test.nc|test03.nc|" $@.tmp > $@ test03_read.F: test_read.F $(SED) "s|implicit none|USE tests|" $< > $@.tmp $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ test03_write.F: test_write.F $(SED) "s|implicit none|USE tests|" $< > $@.tmp $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ test03_get.F: test_get.F $(SED) "s|implicit none|USE tests|" $< > $@.tmp $(SED) "s|#include \"tests.inc\"| implicit none|" $@.tmp > $@ endif #USE_SED # Tell make how to turn .m4 files into .F files. .m4.F: m4 $(M4FLAGS) $< >$@ # If valgrind is present on this machine, this will enable # check-valgrind target, which runs all tests with valgrind. @VALGRIND_CHECK_RULES@ # test_get.F and test_put.f need to be distributed, so that the user # need not have m4. ref_fills.nc is copied to fills.nc by configure # and used by test program ftest. EXTRA_DIST = test_get.F test_put.F fills.cdl ref_fills.nc \ CMakeLists.txt # As per autotools convention, mod files get mostly cleaned. MOSTLYCLEANFILES = *.mod # Cleaning up files created during the process. CLEANFILES = scratch*.nc test*.nc copy*.nc tst_*.nc ftst_*.nc \ f90tst_*.nc f03test*.nc *.tmp *.tmp2 fort.* tst03*.nc f03tst*.nc \ ftest.nc fcopy.nc $(F03_TEST_CODES) # This file gets copied to build dir by configure. DISTCLEANFILES = fills.nc # These are shipped with code, but can be rebuilt from m4 if needed. MAINTAINERCLEANFILES = test_get.F test_put.F netcdf-fortran-4.6.3+ds/nf_test/module_tests.F900000775000175000017500000002050715205004070021657 0ustar alastairalastair Module tests !/********************************************************************* ! * Copyright 1996, UCAR/Unidata ! * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Id: tests.inc,v 1.15 2007/01/19 16:08:47 ed Exp $ ! *********************************************************************/ ! Implementation of test.inc in a module ! Modified by: Richard Weed,Ph.D ! Center for Advanced Vehicular Systems ! Mississippi State University ! rweed@cavs.msstate.edu !!!! ! Do not tabify this unless you like hitting the 72 char limit !!! !!! #ifndef UD_TESTS_INC #define UD_TESTS_INC !/* The following prevents non-FORTRAN code from appearing in the output. */ #if defined(__osf__) # undef _POSIX_SOURCE # define _POSIX_SOURCE #endif #if defined(NO_NETCDF_2) # undef NO_NETCDF_2 # define NO_NETCDF_2 1 #else #define NO_NETCDF_2 1 #endif #ifdef USE_NETCDF4 USE netcdf4_f03 #else USE netcdf_f03 #endif Implicit NONE SAVE !/* Parameters of test data */ #ifdef NF_INT1_T # define NF_B 1 #else # define NF_B 0 #endif #ifdef NF_INT2_T # define NF_S 1 #else # define NF_S 0 #endif ! Total number of FORTRAN types: Integer, Parameter :: NUM_FORTRAN_TYPES = (3 + NF_S + NF_B) #undef NF_B #undef NF_S Integer, Parameter :: NTYPES=6 Integer, Parameter :: NDIMS=5 Integer, Parameter :: NVARS=136 Integer, Parameter :: NRECS=2 Integer, Parameter :: NGATTS=NTYPES Integer, Parameter :: RECDIM=1 Integer, Parameter :: MAX_RANK=3 Integer, Parameter :: MAX_NELS=64 Integer, Parameter :: MAX_DIM_LEN=4 Integer, Parameter :: MAX_NATTS=3 !/* ! * Limits of external types (based on those in ncx.h): ! */ Integer, Parameter :: X_CHAR_MIN=0 Integer, Parameter :: X_CHAR_MAX=127 Integer, Parameter :: X_INT1_MIN=(-128) Integer, Parameter :: X_INT1_MAX=127 Integer, Parameter :: X_INT2_MIN=(-32768) Integer, Parameter :: X_INT2_MAX=32767 Integer, Parameter :: X_INT_MIN=(-2147483647-1) Integer, Parameter :: X_INT_MAX=2147483647 #if 0 Real(RK4), Parameter :: X_REAL_MAX=3.4028234663852886e+38 #else Real(RK4), Parameter :: X_REAL_MAX=3.4028234663852886e+37 #endif Real(RK4), Parameter :: X_REAL_MIN=(-X_REAL_MAX) #if 0 Real(RK8), Parameter :: X_DOUBLE_MAX=1.7976931348623157E+308 #else Real(RK8), Parameter :: X_DOUBLE_MAX=1.7976931348623157D+200 #endif Real(RK8), Parameter :: X_DOUBLE_MIN=(-X_DOUBLE_MAX) Integer, Parameter :: X_BYTE_MIN=X_INT1_MIN Integer, Parameter :: X_BYTE_MAX=X_INT1_MAX Integer, Parameter :: X_SHORT_MIN=X_INT2_MIN Integer, Parameter :: X_SHORT_MAX=X_INT2_MAX Real(RK4), Parameter :: X_FLOAT_MIN=X_REAL_MIN Real(RK4), Parameter :: X_FLOAT_MAX=X_REAL_MAX !/* ! * Examples of invalid argument values: ! */ Integer, Parameter :: BAD_ID=-1 Integer, Parameter :: BAD_DIMID=-1 Integer, Parameter :: BAD_VARID=-2 Integer, Parameter :: BAD_ATTNUM=-1 Integer, Parameter :: BAD_TYPE=0 Integer, Parameter :: BAD_FILLMODE=-1 Character*3, Parameter :: BAD_NAME='a/b' !/* ! * Internal data types: ! */ Integer, Parameter :: NFT_UNSPECIFIED=0 Integer, Parameter :: NFT_TEXT=16 Integer, Parameter :: NFT_CHAR=NFT_TEXT Integer, Parameter :: NFT_INT1=17 Integer, Parameter :: NFT_INT2=18 Integer, Parameter :: NFT_INT=20 Integer, Parameter :: NFT_REAL=36 Integer, Parameter :: NFT_DOUBLE=40 !/* ! * Define a macro for trimming trailing blanks from character variables. ! */ #define TRIM(string) string(1:len_trim(string)) ! ! FORTRAN GETARG() subroutine: ! #ifdef __hpux # define getarg getarg_ #endif #endif /* UD_TESTS_INC */ ! #include "../fortran/netcdf.inc" ! /* Global variables - filenames */ CHARACTER(LEN=80) :: testfile !/* netCDF read-only test data */ CHARACTER(LEN=80) :: scratch !/* netCDF test file for writing */ ! /* Global variables - command-line arguments */ LOGICAL :: CREATE_FILE LOGICAL :: READONLY LOGICAL :: VERBOSE INTEGER :: NFAILS INTEGER :: MAX_NMPT !/* max num messages per test */ ! /* Global variables - test data */ CHARACTER(LEN=2) :: DIM_NAME(NDIMS) INTEGER :: DIM_LEN(NDIMS) CHARACTER(LEN=(2+MAX_RANK)) :: VAR_NAME(NVARS) INTEGER :: VAR_TYPE(NVARS) INTEGER :: VAR_RANK(NVARS) INTEGER :: VAR_DIMID(MAX_RANK,NVARS) INTEGER :: VAR_SHAPE(MAX_RANK,NVARS) INTEGER :: VAR_NELS(NVARS) INTEGER :: VAR_NATTS(NVARS) CHARACTER(LEN=2) :: ATTNAME(MAX_NATTS,NVARS) CHARACTER(LEN=2) :: GATT_NAME(NGATTS) INTEGER :: ATTTYPE(NGATTS,NVARS) INTEGER :: GATT_TYPE(NGATTS) INTEGER :: ATTLEN(MAX_NATTS,NVARS) INTEGER :: GATT_LEN(NGATTS) ! /* Miscellaneous global variables: */ CHARACTER(LEN=80) :: PROGNAME !/* name of the program */ INTEGER :: NFAILSTOTAL ! /* Common blocks for global variables: */ ! COMMON /LOGCOM/ CREATE_FILE, & ! & READONLY, & ! & VERBOSE ! COMMON /TXTCOM/ TESTFILE, & ! & SCRATCH, & ! & DIM_NAME, & ! & VAR_NAME, & ! & ATTNAME, & ! & GATT_NAME, & ! & PROGNAME ! COMMON /INTCOM/ NFAILS, & ! & DIM_LEN, & ! & VAR_TYPE, & ! & VAR_RANK, & ! & VAR_DIMID, & ! & VAR_SHAPE, & ! & VAR_NELS, & ! & VAR_NATTS, & ! & ATTTYPE, & ! & GATT_TYPE, & ! & ATTLEN, & ! & GATT_LEN, & ! & MAX_NMPT, & ! & NFAILSTOTAL ! /* Functions for accessing attribute test data */ ! /* varid is -1 for NC_GLOBAL so can do global atts in same loop */ !/* EXTERNAL ATT_NAME */ INTEGER, EXTERNAL :: VARID INTEGER, EXTERNAL :: NATTS CHARACTER(LEN=2), EXTERNAL :: ATT_NAME INTEGER, EXTERNAL :: ATT_TYPE INTEGER, EXTERNAL :: ATT_LEN LOGICAL, EXTERNAL :: INRANGE LOGICAL, EXTERNAL :: INRANGE_UCHAR LOGICAL, EXTERNAL :: INRANGE_FLOAT LOGICAL, EXTERNAL :: INRANGE3 LOGICAL, EXTERNAL :: IN_INTERNAL_RANGE LOGICAL, EXTERNAL :: EQUAL LOGICAL, EXTERNAL :: INT_VEC_EQ INTEGER, EXTERNAL :: ROLL INTEGER, EXTERNAL :: INDEX2INDEXES INTEGER, EXTERNAL :: INDEX2NCINDEXES INTEGER, EXTERNAL :: INDEXES2INDEX INTEGER, EXTERNAL :: NC2DBL INTEGER, EXTERNAL :: DBL2NC ! INTEGER, EXTERNAL :: LEN_TRIM REAL(RK8), EXTERNAL :: HASH REAL(RK8), EXTERNAL :: HASH4 REAL(RK8), EXTERNAL :: HASH_TEXT REAL(RK8), EXTERNAL :: HASH_INT1 REAL(RK8), EXTERNAL :: HASH_INT2 REAL(RK8), EXTERNAL :: HASH_INT REAL(RK8), EXTERNAL :: HASH_REAL REAL(RK8), EXTERNAL :: HASH_DOUBLE REAL(RK8), EXTERNAL :: INTERNAL_MIN REAL(RK8), EXTERNAL :: INTERNAL_MAX REAL(RK8), EXTERNAL :: EXTERNAL_MIN REAL(RK8), EXTERNAL :: EXTERNAL_MAX End Module tests netcdf-fortran-4.6.3+ds/nf_test/nf03_error.F0000664000175000017500000000253015205004070020747 0ustar alastairalastairC Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C Steve Emmerson, Ed Hartnett C C Use for logging error messages C subroutine error(msg) USE tests implicit none character*(*) msg nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg end C C Use for logging error conditions C subroutine errori(msg, i) USE tests implicit none character*(*) msg integer i nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg, i end C C Use for logging error conditions C subroutine errord(msg, d) USE tests implicit none character*(*) msg doubleprecision d nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg, d end C C Use for logging error conditions C subroutine errorc(msg, string) USE tests implicit none character*(*) msg character*(*) string nfails = nfails + 1 if (nfails .le. max_nmpt) print *, msg, + string(1:len_trim(string)) end C C Use for logging error conditions C subroutine errore(msg, err) USE tests implicit none character*(*) msg integer err call errorc(msg, nf_strerror(err)) end netcdf-fortran-4.6.3+ds/nf_test/test_get.m40000664000175000017500000011761715205004070020756 0ustar alastairalastairdivert(-1) dnl This is m4 source. dnl Process using m4 to produce FORTRAN language file. changequote([,]) undefine([index])dnl dnl Macros dnl Upcase(str) dnl define([Upcase],[dnl translit($1, abcdefghijklmnopqrstuvwxyz, ABCDEFGHIJKLMNOPQRSTUVWXYZ)]) dnl NFT_ITYPE(type) dnl define([NFT_ITYPE], [NFT_[]Upcase($1)]) dnl ARITH(itype, value) dnl define([ARITH], [ifelse($1, text, ichar($2), $2)]) dnl DATATYPE(funf_suffix) dnl define([DATATYPE], [dnl ifelse($1, text, character, ifelse($1, int1, NF_INT1_T, ifelse($1, int2, NF_INT2_T, ifelse($1, int, integer, ifelse($1, real, real, ifelse($1, double, doubleprecision)[]dnl )[]dnl )[]dnl )[]dnl )[]dnl )[]dnl ]) dnl TEST_NF_GET_VAR1(TYPE) dnl define([TEST_NF_GET_VAR1],[dnl subroutine test_nf_get_var1_$1() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert DATATYPE($1) value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_$1(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_$1(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_$1(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_ITYPE($1) ) err = nf_get_var1_$1(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_ITYPE($1))) then if (in_internal_range(NFT_ITYPE($1), + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = ARITH($1, value) if (.not. equal(val, expect, + var_type(i), + NFT_ITYPE($1))) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end ]) dnl TEST_NF_GET_VAR(TYPE) dnl define([TEST_NF_GET_VAR],[dnl subroutine test_nf_get_var_$1() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert DATATYPE($1) value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) err = nf_get_var_$1(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_$1(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_ITYPE($1) ) if (inRange3(expect(j),var_type(i), NFT_ITYPE($1))) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_ITYPE($1), expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_$1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1)) .and. + in_internal_range(NFT_ITYPE($1), + expect(j))) then val = ARITH($1, value(j)) if (.not. equal(val, expect(j), + var_type(i), + NFT_ITYPE($1))) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end ]) dnl TEST_NF_GET_VARA(TYPE) dnl define([TEST_NF_GET_VARA],[dnl subroutine test_nf_get_vara_$1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert DATATYPE($1) value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_$1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_$1(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_$1(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_$1(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_$1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_$1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_$1(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_$1(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_ITYPE($1)) if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1))) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_ITYPE($1), expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_$1(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_$1:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1)) .and. + in_internal_range(NFT_ITYPE($1), expect(j))) + then val = ARITH($1, value(j)) if (.not.equal(val,expect(j), + var_type(i),NFT_ITYPE($1))) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end ])dnl dnl TEST_NF_GET_VARS(TYPE) dnl define([TEST_NF_GET_VARS],dnl [dnl subroutine test_nf_get_vars_$1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert DATATYPE($1) value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_$1(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_$1(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_$1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_$1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_$1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_ITYPE($1)) if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1))) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_ITYPE($1), + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_$1(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1)) .and. + in_internal_range(NFT_ITYPE($1), + expect(j))) then val = ARITH($1, value(j)) if (.not.equal(val, expect(j), + var_type(i), NFT_ITYPE($1))) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end ])dnl dnl TEST_NF_GET_VARM(TYPE) dnl define([TEST_NF_GET_VARM],dnl [dnl subroutine test_nf_get_varm_$1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert DATATYPE($1) value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_$1(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_$1(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_$1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_$1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_$1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_ITYPE($1)) if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1))) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_ITYPE($1), + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_$1(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_ITYPE($1)) .and. + in_internal_range(NFT_ITYPE($1), + expect(j))) then val = ARITH($1, value(j)) if (.not.equal(val, expect(j), + var_type(i), + NFT_ITYPE($1))) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end ])dnl dnl TEST_NF_GET_ATT(TYPE) dnl define([TEST_NF_GET_ATT],dnl [dnl subroutine test_nf_get_att_$1() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert DATATYPE($1) value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_ITYPE($1) .eq. NFT_TEXT) err = nf_get_att_$1(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_$1(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_$1(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_ITYPE($1)) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_ITYPE($1))) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_ITYPE($1), expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_$1(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_$1: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_ITYPE($1)) .and. + in_internal_range(NFT_ITYPE($1), + expect(k))) then val = ARITH($1, value(k)) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_ITYPE($1)))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end ])dnl divert(0)dnl dnl If you see this line, you can ignore the next one. C Do not edit this file. It is produced from the corresponding .m4 source */ C********************************************************************* C Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: test_get.m4,v 1.11 2008/04/30 16:50:46 ed Exp $ C********************************************************************* TEST_NF_GET_VAR1(text) #ifdef NF_INT1_T TEST_NF_GET_VAR1(int1) #endif #ifdef NF_INT2_T TEST_NF_GET_VAR1(int2) #endif TEST_NF_GET_VAR1(int) TEST_NF_GET_VAR1(real) TEST_NF_GET_VAR1(double) TEST_NF_GET_VAR(text) #ifdef NF_INT1_T TEST_NF_GET_VAR(int1) #endif #ifdef NF_INT2_T TEST_NF_GET_VAR(int2) #endif TEST_NF_GET_VAR(int) TEST_NF_GET_VAR(real) TEST_NF_GET_VAR(double) TEST_NF_GET_VARA(text) #ifdef NF_INT1_T TEST_NF_GET_VARA(int1) #endif #ifdef NF_INT2_T TEST_NF_GET_VARA(int2) #endif TEST_NF_GET_VARA(int) TEST_NF_GET_VARA(real) TEST_NF_GET_VARA(double) TEST_NF_GET_VARS(text) #ifdef NF_INT1_T TEST_NF_GET_VARS(int1) #endif #ifdef NF_INT2_T TEST_NF_GET_VARS(int2) #endif TEST_NF_GET_VARS(int) TEST_NF_GET_VARS(real) TEST_NF_GET_VARS(double) TEST_NF_GET_VARM(text) #ifdef NF_INT1_T TEST_NF_GET_VARM(int1) #endif #ifdef NF_INT2_T TEST_NF_GET_VARM(int2) #endif TEST_NF_GET_VARM(int) TEST_NF_GET_VARM(real) TEST_NF_GET_VARM(double) TEST_NF_GET_ATT(text) #ifdef NF_INT1_T TEST_NF_GET_ATT(int1) #endif #ifdef NF_INT2_T TEST_NF_GET_ATT(int2) #endif TEST_NF_GET_ATT(int) TEST_NF_GET_ATT(real) TEST_NF_GET_ATT(double) netcdf-fortran-4.6.3+ds/nf_test/ftest.F0000664000175000017500000013006515205004070020122 0ustar alastairalastair!******************************************************************** ! Copyright 1993, UCAR/Unidata ! See netcdf/COPYRIGHT file for copying and redistribution conditions. ! Russ Rew 1993 !******************************************************************** ! ! program to test the netCDF-2 Fortran API ! program ftest include 'netcdf.inc' ! name of first test cdf character*31 name ! name of second test cdf character*31 name2 ! Returned error code. integer iret ! netCDF ID integer ncid ! ID of dimension lat integer latdim ! ID of dimension lon integer londim ! ID of dimension level integer leveldim ! ID of dimension time integer timedim ! ID of dimension len integer lendim ! Count the errors. integer nfails ! variable used to control error-handling behavior integer ncopts integer dimsiz(MAXNCDIM) ! allowable roundoff common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz data name/'ftest.nc'/ data name2/'fcopy.nc'/ print *, '' print *,'*** Testing netCDF-2 Fortran 77 API.' 100 format(' *** testing ', a, ' ...') ! set error-handling to verbose and non-fatal ncopts = NCVERBOS call ncpopt(ncopts) ! This will be a count of how many failures we experience. nfails = 0 ! create a netCDF named 'test.nc' write(*,100) 'nccre' ncid = nccre(name, NCCLOB, iret) if (ncid .eq. -1) then nfails = nfails + 1 ! test ncddef write(*,100) 'ncddef' call tncddef(ncid, nfails) ! test ncvdef write(*,100) 'ncvdef' call tncvdef(ncid, nfails) ! test ncapt write(*, 100) 'ncapt, ncaptc' call tncapt(ncid, nfails) ! close 'test.nc' write(*, 100) 'ncclos' call ncclos(ncid, iret) if (ncid .eq. -1) then nfails = nfails + 1 ! test ncvpt1 write(*, 100) 'ncvpt1' call tncvpt1(name, nfails) ! test ncvgt1 write(*, 100) 'ncvgt1' call tncvgt1(name, nfails) ! test ncvpt write(*, 100) 'ncvpt' call tncvpt(name, nfails) ! test ncinq write(*, 100) 'ncopn, ncinq, ncdinq, ncvinq, ncanam, ncainq' call tncinq(name, nfails) ! test ncvgt write(*, 100) 'ncvgt, ncvgtc' call tncvgt(name, nfails) ! test ncagt write(*, 100) 'ncagt, ncagtc' call tncagt(name, nfails) ! test ncredf write(*, 100) 'ncredf, ncdren, ncvren, ncaren, ncendf' call tncredf(name, nfails) call tncinq(name, nfails) ! test ncacpy write(*, 100) 'ncacpy' call tncacpy(name, name2, nfails) ! test ncadel write(*, 100) 'ncadel' call tncadel(name2, nfails) ! test fill values write(*, 100) 'fill values' call tfills(nfails) print *,'Total number of failures: ', nfails if (nfails .ne. 0) stop 2 print *,'*** SUCCESS!' end ! ! subroutine to test ncacpy ! subroutine tncacpy(iname, oname, nfails) include 'netcdf.inc' character*31 iname, oname integer ndims, nvars, natts, recdim, iret character*31 vname, attnam integer attype, attlen integer vartyp, nvdims, vdims(MAXVDIMS), nvatts integer lenstr ! existing netCDF id integer incdf ! netCDF id of the output netCDF file to which the attribute ! will be copied integer outcdf integer mattlen parameter (mattlen = 80) character*80 charval doubleprecision doubval(2) real flval(2) integer lngval(2) NCSHORT_T shval(2) integer i, j, k character*31 varnam, attname(2,7), gattnam(2) NCBYTE_T bytval(2) common /atts/attname, gattnam NCSHORT_T svalidrg(2) real rvalidrg(2) integer lvalidrg(2) doubleprecision dvalidrg(2) NCBYTE_T bvalidrg(2) character*31 gavalue(2), cavalue(2) real epsilon data bvalidrg/-127,127/ data svalidrg/-100,100/ data lvalidrg/0,360/ data rvalidrg/0.0, 5000.0/ data dvalidrg/0D0,500D0/ data gavalue/'NWS', '88/10/25 12:00:00'/ data cavalue/'test string', 'a'/ data lenstr/80/ data epsilon /.000001/ incdf = ncopn(iname, NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 outcdf = nccre(oname, NCCLOB, iret) if (iret .ne. 0) nfails = nfails + 1 call tncddef(outcdf, nfails) call tncvdef(outcdf, nfails) call ncinq (incdf, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 do 5 j = 1, natts call ncanam (incdf, NCGLOBAL, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncacpy (incdf, NCGLOBAL, attnam, outcdf, NCGLOBAL, iret) if (iret .ne. 0) nfails = nfails + 1 5 continue do 10 i = 1, nvars call ncvinq (incdf, i, vname, vartyp, nvdims, + vdims, nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 20 k = 1, nvatts call ncanam (incdf, i, k, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncacpy (incdf, i, attnam, outcdf, i, iret) if (iret .ne. 0) nfails = nfails + 1 20 continue 10 continue ! ! get global attributes first ! do 100 i = 1, natts call ncanam (outcdf, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (outcdf, NCGLOBAL, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'global attribute too big!', attlen, mattlen stop 2 else if (attype .eq. NCBYTE) then call ncagt (outcdf, NCBYTE, attnam, bytval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCCHAR) then call ncagtc (outcdf, NCGLOBAL, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. gattnam(i)) write(*,*) 'error in ncagt G' if (charval .ne. gavalue(i)) + write(*,*) 'error in ncagt G2', lenstr, charval, gavalue(i) charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (outcdf, NCGLOBAL, attnam, shval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCLONG) then call ncagt (outcdf, NCGLOBAL, attnam, lngval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCFLOAT) then call ncagt (outcdf, NCGLOBAL, attnam, flval, iret) if (iret .ne. 0) nfails = nfails + 1 else call ncagt (outcdf, NCGLOBAL, attnam, doubval,iret) if (iret .ne. 0) nfails = nfails + 1 end if 100 continue ! ! get variable attributes ! do 200 i = 1, nvars call ncvinq (outcdf, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 250 j = 1, nvatts call ncanam (outcdf, i, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (outcdf, i, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'variable ', i, 'attribute too big !' stop 2 else if (attype .eq. NCBYTE) then call ncagt (outcdf, i, attnam, bytval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt BYTE N' if (bytval(j) .ne. bvalidrg(j)) write(*,*) + 'ncacpy: byte ', bytval(j), ' .ne. ', bvalidrg(j) else if (attype .eq. NCCHAR) then call ncagtc (outcdf, i, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt CHAR N' if (charval .ne. cavalue(j)) + write(*,*) 'error in ncagt' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (outcdf, i, attnam, shval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt SHORT N' if (shval(j) .ne. svalidrg(j)) then write(*,*) 'error in ncagt SHORT' end if else if (attype .eq. NCLONG) then call ncagt (outcdf, i, attnam, lngval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt LONG N' if (lngval(j) .ne. lvalidrg(j)) + write(*,*) 'error in ncagt LONG' else if (attype .eq. NCFLOAT) then call ncagt (outcdf, i, attnam, flval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt FLOAT N' if (flval(j) .ne. rvalidrg(j)) + write(*,*) 'error in ncagt FLOAT' else if (attype .eq. NCDOUBLE) then call ncagt (outcdf, i, attnam, doubval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt DOUBLE N' if ( abs(doubval(j) - dvalidrg(j)) .gt. epsilon) + write(*,*) 'error in ncagt DOUBLE' end if end if 250 continue 200 continue call ncclos(incdf, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos(outcdf, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncadel ! subroutine tncadel (cdfname, nfails) include 'netcdf.inc' character*31 cdfname integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer ncid, iret, i, j integer ndims, nvars, natts, recdim integer vartyp, nvdims, vdims(MAXVDIMS), nvatts character*31 varnam, attnam ncid = ncopn(cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! put cdf in define mode call ncredf (ncid,iret) if (iret .ne. 0) nfails = nfails + 1 ! get number of global attributes call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 do 10 i = natts, 1, -1 ! get name of global attribute call ncanam (ncid, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 ! delete global attribute call ncadel (ncid, NCGLOBAL, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 10 continue do 100 i = 1, nvars ! get number of variable attributes call ncvinq (ncid, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 200 j = nvatts, 1, -1 call ncanam (ncid, i, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncadel (ncid, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 200 continue 100 continue call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 if (natts .ne. 0) write(*,*) 'error in ncadel' ! put netCDF into data mode call ncendf (ncid, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos (ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncagt and ncagtc subroutine tncagt(cdfname, nfails) include 'netcdf.inc' character*31 cdfname ! maximum length of an attribute integer mattlen parameter (mattlen = 80) integer ncid, ndims, nvars, natts, recdim integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer i, j integer attype, attlen, lenstr, iret character*31 attnam character*80 charval doubleprecision doubval(2) real flval(2) integer lngval(2) NCSHORT_T shval(2) NCBYTE_T bytval(2) integer vartyp, nvdims, vdims(MAXVDIMS), nvatts character*31 varnam, attname(2,7), gattnam(2) common /atts/attname, gattnam NCSHORT_T svalidrg(2) real rvalidrg(2) integer lvalidrg(2) doubleprecision dvalidrg(2) NCBYTE_T bvalidrg(2) character*31 gavalue(2), cavalue(2) real epsilon data bvalidrg/-127,127/ data svalidrg/-100,100/ data lvalidrg/0,360/ data rvalidrg/0.0, 5000.0/ data dvalidrg/0D0,500D0/ data gavalue/'NWS', '88/10/25 12:00:00'/ data cavalue/'test string', 'a'/ data lenstr/80/ data epsilon /.000001/ ncid = ncopn (cdfname, NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! get global attributes first ! do 10 i = 1, natts ! get name of attribute call ncanam (ncid, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 ! get attribute type and length call ncainq (ncid, NCGLOBAL, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'global attribute too big!' stop 2 else if (attype .eq. NCBYTE) then call ncagt (ncid, NCBYTE, attnam, bytval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCCHAR) then call ncagtc (ncid, NCGLOBAL, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. gattnam(i)) write(*,*) 'error in ncagt' if (charval .ne. gavalue(i)) write(*,*) 'error in ncagt' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (ncid, NCGLOBAL, attnam, shval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCLONG) then call ncagt (ncid, NCGLOBAL, attnam, lngval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCFLOAT) then call ncagt (ncid, NCGLOBAL, attnam, flval, iret) if (iret .ne. 0) nfails = nfails + 1 else call ncagt (ncid, NCGLOBAL, attnam, doubval,iret) if (iret .ne. 0) nfails = nfails + 1 end if 10 continue ! ! get variable attributes ! do 20 i = 1, nvars call ncvinq (ncid, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 25 j = 1, nvatts call ncanam (ncid, i, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (ncid, i, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'variable ', i, 'attribute too big !' stop 2 else if (attype .eq. NCBYTE) then call ncagt (ncid, i, attnam, bytval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt BYTE name' if (bytval(j) .ne. bvalidrg(j)) write(*,*) + 'ncacpy: byte ', bytval(j), ' .ne. ', bvalidrg(j) else if (attype .eq. NCCHAR) then call ncagtc (ncid, i, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt CHAR name' if (charval .ne. cavalue(j)) + write(*,*) 'error in ncagt CHAR name' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (ncid, i, attnam, shval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt SHORT name' if (shval(j) .ne. svalidrg(j)) then write(*,*) 'error in ncagt SHORT' end if else if (attype .eq. NCLONG) then call ncagt (ncid, i, attnam, lngval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt LONG name' if (lngval(j) .ne. lvalidrg(j)) + write(*,*) 'error in ncagt LONG' else if (attype .eq. NCFLOAT) then call ncagt (ncid, i, attnam, flval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt FLOAT name' if (flval(j) .ne. rvalidrg(j)) + write(*,*) 'error in ncagt FLOAT' else if (attype .eq. NCDOUBLE) then call ncagt (ncid, i, attnam, doubval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt DOUBLE name' if ( abs(doubval(j) - dvalidrg(j)) .gt. epsilon) + write(*,*) 'error in ncagt DOUBLE' end if end if 25 continue 20 continue call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncapt ! subroutine tncapt (ncid, nfails) include 'netcdf.inc' integer ncid, iret ! attribute vectors NCSHORT_T svalidrg(2) real rvalidrg(2) integer lvalidrg(2) doubleprecision dvalidrg(2) NCBYTE_T bvalidrg(2) ! variable ids integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid ! assign attributes ! ! byte ! bvalidrg(1) = -127 bvalidrg(2) = 127 call ncapt (ncid, bid, 'validrange', NCBYTE, 2, +bvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! short ! svalidrg(1) = -100 svalidrg(2) = 100 call ncapt (ncid, sid, 'validrange', NCSHORT, 2, +svalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! long ! lvalidrg(1) = 0 lvalidrg(2) = 360 call ncapt (ncid, lid, 'validrange', NCLONG, 2, +lvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! float ! rvalidrg(1) = 0.0 rvalidrg(2) = 5000.0 call ncapt (ncid, fid, 'validrange', NCFLOAT, 2, +rvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! double ! dvalidrg(1) = 0D0 dvalidrg(2) = 500D0 call ncapt (ncid, did, 'validrange', NCDOUBLE, 2, +dvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! global ! call ncaptc (ncid, NCGLOBAL, 'source', NCCHAR, 3, +'NWS', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaptc (ncid, NCGLOBAL, 'basetime', NCCHAR, 17, +'88/10/25 12:00:00', iret) if (iret .ne. 0) nfails = nfails + 1 ! ! char ! call ncaptc (ncid, chid, 'longname', NCCHAR, 11, +'test string', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaptc (ncid, chid, 'id', NCCHAR, 1, +'a', iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! initialize variables in labelled common blocks ! block data common /cdims/ dimnam common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /varn/varnam common /atts/attname, gattnam integer latdim, londim, leveldim, timedim, lendim ! should include 'netcdf.inc' for MAXNCDIM, but it has EXTERNAL ! declaration, which is not permitted in a BLOCK DATA unit. integer dimsiz(1024) character*31 dimnam(1024) character*31 varnam(7) character*31 attname(2,7) character*31 gattnam(2) data dimnam /'time', 'lat', 'lon', 'level', + 'length', 1019*'0'/ data dimsiz /4, 5, 5, 4, 80, 1019*0/ data varnam/'bytev', 'shortv', 'longv', 'floatv', 'doublev', + 'chv', 'cv'/ data attname/'validrange', '0', 'validrange', '0', 'validrange', + '0', 'validrange', '0', 'validrange', '0', 'longname', 'id', + '0', '0'/ data gattnam/'source','basetime'/ end ! ! subroutine to test ncddef ! subroutine tncddef(ncid, nfails) include 'netcdf.inc' integer ncid ! sizes of dimensions of 'test.nc' and 'copy.nc' integer ndims parameter(ndims=5) ! dimension ids integer latdim, londim, leveldim, timedim, lendim integer iret ! function to define a netCDF dimension integer dimsiz(MAXNCDIM) character*31 dimnam(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /cdims/ dimnam ! define dimensions timedim = ncddef(ncid, dimnam(1), NCUNLIM, iret) if (iret .ne. 0) nfails = nfails + 1 latdim = ncddef(ncid, dimnam(2), dimsiz(2), iret) if (iret .ne. 0) nfails = nfails + 1 londim = ncddef(ncid, dimnam(3), dimsiz(3), iret) if (iret .ne. 0) nfails = nfails + 1 leveldim = ncddef(ncid, dimnam(4), dimsiz(4), iret) if (iret .ne. 0) nfails = nfails + 1 lendim = ncddef(ncid, dimnam(5), dimsiz(5), iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncinq, ncdinq, ncdid, ncvinq, ncanam ! and ncainq ! subroutine tncinq(cdfname, nfails) include 'netcdf.inc' character*31 cdfname ! netCDF id integer ncid ! returned number of dimensions integer ndims ! returned number of variables integer nvars ! returned number of global attributes integer natts ! returned id of the unlimited dimension integer recdim ! returned error code integer iret ! returned name of record dimension character*31 recnam ! returned size of record dimension integer recsiz ! loop control variables integer i, j, k ! returned size of dimension integer dsize ! returned dimension ID integer dimid ! returned dimension name character*31 dname ! returned variable name character*31 vname ! returned attribute name character*31 attnam ! returned netCDF datatype of variable integer vartyp ! returned number of variable dimensions integer nvdims ! returned number of variable attributes integer nvatts ! returned vector of nvdims dimension IDS corresponding to the ! variable dimensions integer vdims(MAXNCDIM) ! returned attribute length integer attlen ! returned attribute type integer attype character*31 dimnam(MAXNCDIM) character*31 varnam(7) character*31 attname(2,7) character*31 gattnam(2) integer vdlist(5,7), vtyp(7), vndims(7), vnatts(7) integer attyp(2,7),atlen(2,7),gattyp(2),gatlen(2) integer timedim,latdim,londim,leveldim,lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /varn/varnam common /atts/attname, gattnam common /cdims/ dimnam data vdlist/1,0,0,0,0,1,0,0,0,0,2,0,0,0,0,4,3,2,1,0,4,3,2,1,0, + 5,1,0,0,0,1,0,0,0,0/ data vtyp/NCBYTE, NCSHORT, NCLONG, NCFLOAT, NCDOUBLE, NCCHAR, + NCCHAR/ data vndims/1,1,1,4,4,2,1/ data vnatts/1,1,1,1,1,2,0/ data attyp/NCBYTE, 0, NCSHORT, 0, NCLONG, 0, NCFLOAT, 0, + NCDOUBLE, 0, NCCHAR, NCCHAR, 0, 0/ data atlen/2,0,2,0,2,0,2,0,2,0,11,1, 0, 0/ data gattyp/NCCHAR,NCCHAR/ data gatlen/3,17/ ncid = ncopn (cdfname, NCNOWRIT, iret) call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 if (ndims .ne. 5) write(*,*) 'error in ncinq or ncddef' if (nvars .ne. 7) write(*,*) 'error in ncinq or ncvdef' if (natts .ne. 2) write(*,*) 'error in ncinq or ncapt' call ncdinq (ncid, recdim, recnam, recsiz, iret) if (iret .ne. 0) nfails = nfails + 1 if (recnam .ne. 'time') write(*,*) 'error: bad recdim from ncinq' ! ! dimensions ! do 10 i = 1, ndims call ncdinq (ncid, i, dname, dsize, iret) if (iret .ne. 0) nfails = nfails + 1 if (dname .ne. dimnam(i)) + write(*,*) 'error in ncdinq or ncddef, dname=', dname if (dsize .ne. dimsiz(i)) + write(*,*) 'error in ncdinq or ncddef, dsize=',dsize dimid = ncdid (ncid, dname, iret) if (dimid .ne. i) write(*,*) + 'error in ncdinq or ncddef, dimid=', dimid 10 continue ! ! variables ! do 30 i = 1, nvars call ncvinq (ncid, i, vname, vartyp, nvdims, + vdims, nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 if (vname .ne. varnam(i)) + write(*,*) 'error: from ncvinq, wrong name returned: ', + vname, ' .ne. ', varnam(i) if (vartyp .ne. vtyp(i)) + write(*,*) 'error: from ncvinq, wrong type returned: ', + vartyp, ' .ne. ', vtyp(i) if (nvdims .ne. vndims(i)) + write(*,*) 'error: from ncvinq, wrong num dims returned: ', + vdims, ' .ne. ', vndims(i) do 35 j = 1, nvdims if (vdims(j) .ne. vdlist(j,i)) + write(*,*) 'error: from ncvinq wrong dimids: ', + vdims(j), ' .ne. ', vdlist(j,i) 35 continue if (nvatts .ne. vnatts(i)) + write(*,*) 'error in ncvinq or ncvdef' ! ! attributes ! do 45 k = 1, nvatts call ncanam (ncid, i, k, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (ncid, i, attnam, attype, attlen, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(k,i)) + write(*,*) 'error in ncanam or ncapt' if (attype .ne. attyp(k,i)) + write(*,*) 'error in ncainq or ncapt' if (attlen .ne. atlen(k,i)) + write(*,*) 'error in ncainq or ncapt' 45 continue 30 continue do 40 i = 1, natts call ncanam (ncid, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (ncid, NCGLOBAL, attnam, attype, attlen, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. gattnam(i)) + write(*,*) 'error in ncanam or ncapt' if (attype .ne. gattyp(i)) + write(*,*) 'error in ncainq or ncapt' if (attlen .ne. gatlen(i)) + write(*,*) 'error in ncainq or ncapt' 40 continue call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! subroutine to test ncredf, ncdren, ncvren, ncaren, and ! ncendf subroutine tncredf(cdfname, nfails) include 'netcdf.inc' character*31 cdfname character*31 attname(2,7) character*31 gattnam(2) common /atts/attname, gattnam common /cdims/ dimnam character*31 dimnam(MAXNCDIM) character*31 varnam(7) common /varn/varnam integer ncid, iret, latid, varid dimnam(2) = 'latitude' varnam(4) = 'realv' attname(1,6) = 'stringname' gattnam(1) = 'agency' ncid = ncopn(cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 call ncredf(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 latid = ncdid(ncid, 'lat', iret) call ncdren(ncid, latid, 'latitude', iret) if (iret .ne. 0) nfails = nfails + 1 varid = ncvid(ncid, 'floatv', iret) call ncvren(ncid, varid, 'realv', iret) if (iret .ne. 0) nfails = nfails + 1 varid = ncvid(ncid, 'chv', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaren(ncid, varid, 'longname', 'stringname', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaren(ncid, NCGLOBAL, 'source', 'agency', iret) if (iret .ne. 0) nfails = nfails + 1 call ncendf(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncvdef ! subroutine tncvdef(ncid, nfails) include 'netcdf.inc' integer ncid ! function to define a netCDF variable integer dimsiz(MAXNCDIM) integer latdim, londim, leveldim, timedim, lendim common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz ! variable ids integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid ! variable shapes integer bdims(1), fdims(4), ddims(4), ldims(1), sdims(1) integer chdims(2), cdims(1) integer iret ! ! define variables ! ! byte ! bdims(1) = timedim bid = ncvdef(ncid, 'bytev', NCBYTE, 1, bdims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! short ! sdims(1) = timedim sid = ncvdef (ncid, 'shortv', NCSHORT, 1, sdims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! long ! ldims(1) = latdim lid = ncvdef (ncid, 'longv', NCLONG, 1, ldims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! float ! fdims(4) = timedim fdims(1) = leveldim fdims(2) = londim fdims(3) = latdim fid = ncvdef (ncid, 'floatv', NCFLOAT, 4, fdims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! double ! ddims(4) = timedim ddims(1) = leveldim ddims(2) = londim ddims(3) = latdim did = ncvdef (ncid, 'doublev', NCDOUBLE, 4, ddims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! char ! chdims(2) = timedim chdims(1) = lendim chid = ncvdef (ncid, 'chv', NCCHAR, 2, chdims, iret) if (iret .ne. 0) nfails = nfails + 1 cdims(1) = timedim cid = ncvdef (ncid, 'cv', NCCHAR, 1, cdims, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncvgt and ncvgtc ! subroutine tncvgt(cdfname, nfails) include 'netcdf.inc' character*31 cdfname integer ndims, times, lats, lons, levels, lenstr parameter (times=4, lats=5, lons=5, levels=4) integer start(4), count(4) integer ncid, iret, i, m integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer itime, ilev, ilat, ilon ! arrays of data values to be read NCBYTE_T barray(times), byval(times) NCSHORT_T sarray(times), shval(times) integer larray(lats) real farray(levels, lats, lons, times) doubleprecision darray(levels, lats, lons, times) ! character array of data values to be read character*31 string character*31 varnam integer nvars, natts, recdim integer vartyp, nvdims, vdims(MAXVDIMS), nvatts data start/1,1,1,1/ data count/levels, lats, lons, times/ data byval /97, 98, 99, 100/ data shval /10, 11, 12, 13/ ncid = ncopn (cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! get number of variables in netCDF call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 do 5 m = 1, nvars-1 ! get variable name, datatype, number of dimensions ! vector of dimension ids, and number of variable attributes call ncvinq (ncid, m, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 if (vartyp .eq. NCBYTE) then ! ! byte ! count(1) = times call ncvgt (ncid, m, start, count, barray, iret) if (iret .ne. 0) nfails = nfails + 1 do 10 i = 1, times if (barray(i) .ne. byval(i)) then write(*,*) 'ncvgt of bytes, got ', barray(i), ' .ne. ' + , byval(i) end if 10 continue else if (vartyp .eq. NCSHORT) then ! ! short ! count(1) = times call ncvgt (ncid, m, start, count, sarray, iret) if (iret .ne. 0) nfails = nfails + 1 do 20 i = 1, times if (sarray(i) .ne. shval(i)) then write(*,*) 'ncvgt of short, got ', sarray(i), ' .ne. ' + , shval(i) end if 20 continue else if (vartyp .eq. NCLONG) then ! ! long ! count(1) = lats call ncvgt (ncid, m, start, count, larray, iret) if (iret .ne. 0) nfails = nfails + 1 do 30 i = 1, lats if (larray(i) .ne. 1000) then write(*,*) 'long error in ncvgt' end if 30 continue else if (vartyp .eq. NCFLOAT) then ! ! float ! count(1) = levels call ncvgt (ncid, m, start, count, farray, iret) if (iret .ne. 0) nfails = nfails + 1 i = 0 do 40 itime = 1,times do 41 ilon = 1, lons do 42 ilat = 1, lats do 43 ilev = 1, levels i = i + 1 if (farray(ilev, ilat, ilon, itime) .ne. + real(i)) then write (*,*) 'float error in ncvgt' end if 43 continue 42 continue 41 continue 40 continue else if (vartyp .eq. NCDOUBLE) then ! ! double ! count(1) = levels call ncvgt (ncid, m, start, count, darray, iret) if (iret .ne. 0) nfails = nfails + 1 i = 0 do 50 itime = 1, times do 51 ilon = 1, lons do 52 ilat = 1, lats do 53 ilev = 1, levels i = i + 1 if (darray(ilev, ilat, ilon, itime) .ne. + real (i)) then write(*,*) 'double error in ncvgt:', i, + darray(ilev, ilat, ilon, itime), '.ne.', + real (i) end if 53 continue 52 continue 51 continue 50 continue else ! ! char ! count(1) = 3 count(2) = 4 lenstr = 31 call ncvgtc (ncid, m, start, count, string, lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (string .ne. 'testhikin of') then write(*,*) 'error in ncvgt, returned string =', string end if end if 5 continue call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end subroutine tncvgt1(cdfname, nfails) include 'netcdf.inc' character*31 cdfname integer ncid, iret integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bindx(1), sindx(1), lindx(1), findx(4), dindx(4), cindx(1) integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid NCBYTE_T bvalue NCSHORT_T svalue integer lvalue real fvalue doubleprecision dvalue character*1 c real epsilon doubleprecision onethird data epsilon /.000001/ data lindx/1/, bindx/1/, sindx/1/, findx/1,1,1,1/ +dindx/1,1,1,1/, cindx/1/ data onethird/0.3333333333D0/ ncid = ncopn (cdfname, NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvgt1 for byte ! call ncvgt1 (ncid, bid, bindx, bvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (bvalue .ne. ichar('z')) write(*,*) 'error in ncvgt1 byte:', + bvalue, ' .ne.', ichar('z') ! ! test ncvgt1 for short ! call ncvgt1 (ncid, sid, sindx, svalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (svalue .ne. 10) write(*,*) 'error in ncvgt1 short:', + svalue, ' .ne.', 10 ! ! test ncvgt1 for long ! call ncvgt1 (ncid, lid, lindx, lvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (lvalue .ne. 1000) write(*,*) 'error in ncvgt1 long:', + lvalue, ' .ne.', 1000 ! ! test ncvgt1 for float ! call ncvgt1 (ncid, fid, findx, fvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (abs(fvalue - 3.14159) .gt. epsilon) + write(*,*) 'error in ncvgt 1 float:', fvalue, + ' not close to', 3.14159 ! ! test ncvgt1 for double ! call ncvgt1 (ncid, did, dindx, dvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (abs(dvalue - onethird) .gt. epsilon) write(*,*) + 'error in ncvgt1 double:', dvalue, ' not close to', + onethird ! ! test ncvg1c for char ! call ncvg1c (ncid, cid, cindx, c, iret) if (iret .ne. 0) nfails = nfails + 1 if (c .ne. 'a') write(*,*) 'error in ncvg1c' call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncvpt and ncvptc ! subroutine tncvpt(cdfname, nfails) include 'netcdf.inc' character*31 cdfname ! size of dimensions integer times, lats, lons, levels parameter (times=4, lats=5, lons=5, levels=4) integer ncid, iret ! loop control variables integer itime, ilev, ilon, ilat, i integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer lenstr integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid ! vector of integers specifying the corner of the hypercube ! where the first of the data values will be written integer start(4) ! vector of integers specifying the edge lengths from the ! corner of the hypercube where the first of the data values ! will be written integer count(4) ! arrays of data values to be written NCBYTE_T barray(times) NCSHORT_T sarray(times) integer larray(lats) real farray(levels, lats, lons, times) doubleprecision darray(levels, lats, lons, times) character*31 string data start/1,1,1,1/ data count/levels, lats, lons, times/ data barray /97, 98, 99, 100/ data sarray /10, 11, 12, 13/ ncid = ncopn (cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! byte ! count(1) = times call ncvpt (ncid, bid, start, count, barray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! short ! count(1) = times call ncvpt (ncid, sid, start, count, sarray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! long ! do 30 i = 1,lats larray(i) = 1000 30 continue count(1) = lats call ncvpt (ncid, lid, start, count, larray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! float ! i = 0 do 40 itime = 1,times do 41 ilon = 1, lons do 42 ilat = 1, lats do 43 ilev = 1, levels i = i + 1 farray(ilev, ilat, ilon, itime) = real (i) 43 continue 42 continue 41 continue 40 continue count(1) = levels call ncvpt (ncid, fid, start, count, farray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! double ! i = 0 do 50 itime = 1, times do 51 ilon = 1, lons do 52 ilat = 1, lats do 53 ilev = 1, levels i = i + 1 darray(ilev, ilat, ilon, itime) = real (i) 53 continue 52 continue 51 continue 50 continue count(1) = levels call ncvpt (ncid, did, start, count, darray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! char ! start(1) = 1 start(2) = 1 count(1) = 4 count(2) = 4 lenstr = 31 string = 'testthiskind of ' call ncvptc (ncid, chid,start, count, string, lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end subroutine tncvpt1(cdfname, nfails) include 'netcdf.inc' character*31 cdfname integer iret, ncid integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bindx(1), sindx(1), lindx(1), findx(4), dindx(4), cindx(1) integer lvalue NCSHORT_T svalue NCBYTE_T bvalue doubleprecision onethird integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid data lindx/1/, bindx/1/, sindx/1/, findx/1,1,1,1/ +dindx/1,1,1,1/, cindx/1/ data lvalue /1000/ data svalue/10/ data onethird/0.3333333333D0/ bvalue = ichar('z') ncid = ncopn (cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for byte ! call ncvpt1 (ncid, bid, bindx, bvalue, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for short ! call ncvpt1 (ncid, sid, sindx, svalue, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for long ! call ncvpt1 (ncid, lid, lindx, lvalue, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for float ! call ncvpt1 (ncid, fid, findx, 3.14159, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for double ! call ncvpt1 (ncid, did, dindx, onethird, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvp1c for char ! call ncvp1c (ncid, cid, cindx, 'a', iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos (ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test default fill values ! subroutine tfills(nfails) include 'netcdf.inc' integer ncid integer bid, sid, lid, fid, did integer ix(1) integer l NCSHORT_T s doubleprecision d real f NCBYTE_T b ncid = NCOPN('fills.nc', NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 bid = ncvid(ncid, 'b', iret) if (iret .ne. 0) nfails = nfails + 1 sid = ncvid(ncid, 's', iret) if (iret .ne. 0) nfails = nfails + 1 lid = ncvid(ncid, 'l', iret) if (iret .ne. 0) nfails = nfails + 1 fid = ncvid(ncid, 'f', iret) if (iret .ne. 0) nfails = nfails + 1 did = ncvid(ncid, 'd', iret) if (iret .ne. 0) nfails = nfails + 1 ix(1) = 2 call ncvgt1(ncid, bid, ix, b, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, sid, ix, s, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, lid, ix, l, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, fid, ix, f, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, did, ix, d, iret) if (iret .ne. 0) nfails = nfails + 1 if (b .ne. FILBYTE) write(*,*) 'error in byte fill value' if (d .ne. FILDOUB) write(*,*) 'error in double fill value' if (f .ne. FILFLOAT) write(*,*) 'error in float fill value' if (l .ne. FILLONG) write(*,*) 'error in long fill value' if (s .ne. FILSHORT) write(*,*) 'error in short fill value' return end netcdf-fortran-4.6.3+ds/nf_test/CMakeLists.txt0000664000175000017500000000556415205004070021433 0ustar alastairalastairSET(CMAKE_VERBOSE_MAKEFILE OFF) SET(CMAKE_BUILD_TYPE "RelWithDebInfo") SET(CMAKE_INCLUDE_CURRENT_DIR ON) # Process these files with m4. SET(m4_SOURCES test_get test_put) foreach (f IN LISTS m4_SOURCES) GEN_m4(${f}) endforeach(f) # Separate C and Fortran Sources SET(nf_test_SOURCES f03lib_f_interfaces.F90 test_get.F test_put.F nf_error.F nf_test.F test_read.F test_write.F util.F tests.inc) SET(nf_test_C_SOURCES f03lib.c) SET(tst_int64_SOURCES tst_int64.F) SET(TESTS nf_test tst_int64) IF (BUILD_V2) SET(check_PROGRAMS tst_f77_v2) SET(tst_f77_v2_SOURCES tst_f77_v2.F) SET(TESTS ${TESTS} tst_f77_v2) # This is the fortran v2 test. It depends on the utilities being built # to generate its input file. SET(check_PROGRAMS ${check_PROGRAMS} ftest) SET(TESTS ${TESTS} ftest) SET(ftest_SOURCES ftest.F) SET(ftest_C_SOURCES f03lib.c) ENDIF(BUILD_V2) FIND_LIBRARY(NETCDF_C_LIBRARY NAMES netcdf libnetcdf) FIND_PATH(NETCDF_C_INCLUDE_DIR netcdf.h) IF(NOT NETCDF_C_LIBRARY) MESSAGE(FATAL_ERROR "Cannot find netCDF C library, needed for netCDF Fortran tests.") ENDIF() # Need a copy of ref_fills.nc for ftest file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/ref_fills.nc DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/ref_fills.nc ${CMAKE_CURRENT_BINARY_DIR}/fills.nc) INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/fortran ${CMAKE_BINARY_DIR}/libsrc ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/fortran ${CMAKE_SOURCE_DIR}/libsrc) INCLUDE_DIRECTORIES( ${CMAKE_CPP_FLAGS} ${NETCDF_C_INCLUDE_DIR}) LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/fortran ${CMAKE_SOURCE_DIR}/libsrc ${NC4F_BINARY_DIR}/fortran) # Create pre-compiled tests. message ("Create pre-compiled tests.") FOREACH(t IN LISTS TESTS) ADD_EXECUTABLE(${t} ${${t}_SOURCES}) message(" " ${t} " C_SOURCES: " ${${t}_C_SOURCES}) IF(${t}_C_SOURCES) message ("Adding C code for Test ${t} to Library") ADD_LIBRARY(${t}_c OBJECT ${${t}_C_SOURCES}) install(TARGETS ${t}_c DESTINATION lib) SET(${t}_C_LIBRARY ${t}_c) TARGET_LINK_LIBRARIES(${t} ${${t}_C_LIBRARY}) ENDIF() TARGET_LINK_LIBRARIES(${t} netcdff) ADD_TEST(${t} ${t}) ENDFOREACH() # Copy test scripts in to current directory. FILE(GLOB COPY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.sh) FILE(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE) # Add script-based tests. FOREACH(t IN LISTS SCRIPT_TESTS) add_sh_test(nf_test ${t}) ENDFOREACH() # test_get.F and test_put.f need to be distributed, so that the user # need not have m4. fills.nc is used by test program ftest. SET (EXTRA_DIST test_get.F test_put.F fills.cdl create_fills.sh ref_fills.nc) # Cleaning up files created during the process. SET (CLEANFILES scratch.nc test.nc copy.nc fills.nc tst_*.nc ftst_*.nc) SET (MAINTAINERCLEANFILES test_get.F test_put.F) netcdf-fortran-4.6.3+ds/nf_test/f03test.F0000664000175000017500000012775115205004070020275 0ustar alastairalastair!******************************************************************** ! Copyright 1993, UCAR/Unidata ! See netcdf/COPYRIGHT file for copying and redistribution conditions. ! Russ Rew 1993 !******************************************************************** ! ! program to test the netCDF-2 Fortran API ! program ftest use netcdf_f03 ! name of first test cdf character*31 name ! name of second test cdf character*31 name2 ! Returned error code. integer iret ! netCDF ID integer ncid ! ID of dimension lat integer latdim ! ID of dimension lon integer londim ! ID of dimension level integer leveldim ! ID of dimension time integer timedim ! ID of dimension len integer lendim ! Count the errors. integer nfails ! variable used to control error-handling behavior integer ncopts integer dimsiz(MAXNCDIM) ! allowable roundoff common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz data name/'f03test_test.nc'/ data name2/'f03test_copy.nc'/ print *, '' print *,'*** Testing netCDF-2 Fortran 77 API.' 100 format(' *** testing ', a, ' ...') ! set error-handling to verbose and non-fatal ncopts = NCVERBOS call ncpopt(ncopts) ! This will be a count of how many failures we experience. nfails = 0 ! create a netCDF named 'test.nc' write(*,100) 'nccre' ncid = nccre(name, NCCLOB, iret) if (ncid .eq. -1) then nfails = nfails + 1 ! test ncddef write(*,100) 'ncddef' call tncddef(ncid, nfails) ! test ncvdef write(*,100) 'ncvdef' call tncvdef(ncid, nfails) ! test ncapt write(*, 100) 'ncapt, ncaptc' call tncapt(ncid, nfails) ! close 'test.nc' write(*, 100) 'ncclos' call ncclos(ncid, iret) if (ncid .eq. -1) then nfails = nfails + 1 ! test ncvpt1 write(*, 100) 'ncvpt1' call tncvpt1(name, nfails) ! test ncvgt1 write(*, 100) 'ncvgt1' call tncvgt1(name, nfails) ! test ncvpt write(*, 100) 'ncvpt' call tncvpt(name, nfails) ! test ncinq write(*, 100) 'ncopn, ncinq, ncdinq, ncvinq, ncanam, ncainq' call tncinq(name, nfails) ! test ncvgt write(*, 100) 'ncvgt, ncvgtc' call tncvgt(name, nfails) ! test ncagt write(*, 100) 'ncagt, ncagtc' call tncagt(name, nfails) ! test ncredf write(*, 100) 'ncredf, ncdren, ncvren, ncaren, ncendf' call tncredf(name, nfails) call tncinq(name, nfails) ! test ncacpy write(*, 100) 'ncacpy' call tncacpy(name, name2, nfails) ! test ncadel write(*, 100) 'ncadel' call tncadel(name2, nfails) ! test fill values write(*, 100) 'fill values' call tfills(nfails) print *,'Total number of failures: ', nfails if (nfails .ne. 0) stop 2 print *,'*** SUCCESS!' end ! ! subroutine to test ncacpy ! subroutine tncacpy(iname, oname, nfails) use netcdf_f03 character*31 iname, oname integer ndims, nvars, natts, recdim, iret character*31 vname, attnam integer attype, attlen integer vartyp, nvdims, vdims(MAXVDIMS), nvatts integer lenstr ! existing netCDF id integer incdf ! netCDF id of the output netCDF file to which the attribute ! will be copied integer outcdf integer mattlen parameter (mattlen = 80) character*80 charval doubleprecision doubval(2) real flval(2) integer lngval(2) NCSHORT_T shval(2) integer i, j, k character*31 varnam, attname(2,7), gattnam(2) NCBYTE_T bytval(2) common /atts/attname, gattnam NCSHORT_T svalidrg(2) real rvalidrg(2) integer lvalidrg(2) doubleprecision dvalidrg(2) NCBYTE_T bvalidrg(2) character*31 gavalue(2), cavalue(2) real epsilon data bvalidrg/-127,127/ data svalidrg/-100,100/ data lvalidrg/0,360/ data rvalidrg/0.0, 5000.0/ data dvalidrg/0D0,500D0/ data gavalue/'NWS', '88/10/25 12:00:00'/ data cavalue/'test string', 'a'/ data lenstr/80/ data epsilon /.000001/ incdf = ncopn(iname, NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 outcdf = nccre(oname, NCCLOB, iret) if (iret .ne. 0) nfails = nfails + 1 call tncddef(outcdf, nfails) call tncvdef(outcdf, nfails) call ncinq (incdf, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 do 5 j = 1, natts call ncanam (incdf, NCGLOBAL, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncacpy (incdf, NCGLOBAL, attnam, outcdf, NCGLOBAL, iret) if (iret .ne. 0) nfails = nfails + 1 5 continue do 10 i = 1, nvars call ncvinq (incdf, i, vname, vartyp, nvdims, + vdims, nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 20 k = 1, nvatts call ncanam (incdf, i, k, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncacpy (incdf, i, attnam, outcdf, i, iret) if (iret .ne. 0) nfails = nfails + 1 20 continue 10 continue ! ! get global attributes first ! do 100 i = 1, natts call ncanam (outcdf, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (outcdf, NCGLOBAL, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'global attribute too big!', attlen, mattlen stop 2 else if (attype .eq. NCBYTE) then call ncagt (outcdf, NCBYTE, attnam, bytval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCCHAR) then call ncagtc (outcdf, NCGLOBAL, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. gattnam(i)) write(*,*) 'error in ncagt G' if (charval .ne. gavalue(i)) + write(*,*) 'error in ncagt G2', lenstr, charval, gavalue(i) charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (outcdf, NCGLOBAL, attnam, shval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCLONG) then call ncagt (outcdf, NCGLOBAL, attnam, lngval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCFLOAT) then call ncagt (outcdf, NCGLOBAL, attnam, flval, iret) if (iret .ne. 0) nfails = nfails + 1 else call ncagt (outcdf, NCGLOBAL, attnam, doubval,iret) if (iret .ne. 0) nfails = nfails + 1 end if 100 continue ! ! get variable attributes ! do 200 i = 1, nvars call ncvinq (outcdf, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 250 j = 1, nvatts call ncanam (outcdf, i, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (outcdf, i, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'variable ', i, 'attribute too big !' stop 2 else if (attype .eq. NCBYTE) then call ncagt (outcdf, i, attnam, bytval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt BYTE N' if (bytval(j) .ne. bvalidrg(j)) write(*,*) + 'ncacpy: byte ', bytval(j), ' .ne. ', bvalidrg(j) else if (attype .eq. NCCHAR) then call ncagtc (outcdf, i, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt CHAR N' if (charval .ne. cavalue(j)) + write(*,*) 'error in ncagt' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (outcdf, i, attnam, shval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt SHORT N' if (shval(j) .ne. svalidrg(j)) then write(*,*) 'error in ncagt SHORT' end if else if (attype .eq. NCLONG) then call ncagt (outcdf, i, attnam, lngval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt LONG N' if (lngval(j) .ne. lvalidrg(j)) + write(*,*) 'error in ncagt LONG' else if (attype .eq. NCFLOAT) then call ncagt (outcdf, i, attnam, flval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt FLOAT N' if (flval(j) .ne. rvalidrg(j)) + write(*,*) 'error in ncagt FLOAT' else if (attype .eq. NCDOUBLE) then call ncagt (outcdf, i, attnam, doubval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt DOUBLE N' if ( abs(doubval(j) - dvalidrg(j)) .gt. epsilon) + write(*,*) 'error in ncagt DOUBLE' end if end if 250 continue 200 continue call ncclos(incdf, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos(outcdf, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncadel ! subroutine tncadel (cdfname, nfails) use netcdf_f03 character*31 cdfname integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer ncid, iret, i, j integer ndims, nvars, natts, recdim integer vartyp, nvdims, vdims(MAXVDIMS), nvatts character*31 varnam, attnam ncid = ncopn(cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! put cdf in define mode call ncredf (ncid,iret) if (iret .ne. 0) nfails = nfails + 1 ! get number of global attributes call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 do 10 i = natts, 1, -1 ! get name of global attribute call ncanam (ncid, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 ! delete global attribute call ncadel (ncid, NCGLOBAL, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 10 continue do 100 i = 1, nvars ! get number of variable attributes call ncvinq (ncid, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 200 j = nvatts, 1, -1 call ncanam (ncid, i, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncadel (ncid, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 200 continue 100 continue call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 if (natts .ne. 0) write(*,*) 'error in ncadel' ! put netCDF into data mode call ncendf (ncid, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos (ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncagt and ncagtc subroutine tncagt(cdfname, nfails) use netcdf_f03 character*31 cdfname ! maximum length of an attribute integer mattlen parameter (mattlen = 80) integer ncid, ndims, nvars, natts, recdim integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer i, j integer attype, attlen, lenstr, iret character*31 attnam character*80 charval doubleprecision doubval(2) real flval(2) integer lngval(2) NCSHORT_T shval(2) NCBYTE_T bytval(2) integer vartyp, nvdims, vdims(MAXVDIMS), nvatts character*31 varnam, attname(2,7), gattnam(2) common /atts/attname, gattnam NCSHORT_T svalidrg(2) real rvalidrg(2) integer lvalidrg(2) doubleprecision dvalidrg(2) NCBYTE_T bvalidrg(2) character*31 gavalue(2), cavalue(2) real epsilon data bvalidrg/-127,127/ data svalidrg/-100,100/ data lvalidrg/0,360/ data rvalidrg/0.0, 5000.0/ data dvalidrg/0D0,500D0/ data gavalue/'NWS', '88/10/25 12:00:00'/ data cavalue/'test string', 'a'/ data lenstr/80/ data epsilon /.000001/ ncid = ncopn (cdfname, NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! get global attributes first ! do 10 i = 1, natts ! get name of attribute call ncanam (ncid, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 ! get attribute type and length call ncainq (ncid, NCGLOBAL, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'global attribute too big!' stop 2 else if (attype .eq. NCBYTE) then call ncagt (ncid, NCBYTE, attnam, bytval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCCHAR) then call ncagtc (ncid, NCGLOBAL, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. gattnam(i)) write(*,*) 'error in ncagt' if (charval .ne. gavalue(i)) write(*,*) 'error in ncagt' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (ncid, NCGLOBAL, attnam, shval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCLONG) then call ncagt (ncid, NCGLOBAL, attnam, lngval, iret) if (iret .ne. 0) nfails = nfails + 1 else if (attype .eq. NCFLOAT) then call ncagt (ncid, NCGLOBAL, attnam, flval, iret) if (iret .ne. 0) nfails = nfails + 1 else call ncagt (ncid, NCGLOBAL, attnam, doubval,iret) if (iret .ne. 0) nfails = nfails + 1 end if 10 continue ! ! get variable attributes ! do 20 i = 1, nvars call ncvinq (ncid, i, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 do 25 j = 1, nvatts call ncanam (ncid, i, j, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (ncid, i, attnam, attype, attlen, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attlen .gt. mattlen) then write (*,*) 'variable ', i, 'attribute too big !' stop 2 else if (attype .eq. NCBYTE) then call ncagt (ncid, i, attnam, bytval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt BYTE name' if (bytval(j) .ne. bvalidrg(j)) write(*,*) + 'ncacpy: byte ', bytval(j), ' .ne. ', bvalidrg(j) else if (attype .eq. NCCHAR) then call ncagtc (ncid, i, attnam, charval, + lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt CHAR name' if (charval .ne. cavalue(j)) + write(*,*) 'error in ncagt CHAR name' charval = ' ' else if (attype .eq. NCSHORT) then call ncagt (ncid, i, attnam, shval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt SHORT name' if (shval(j) .ne. svalidrg(j)) then write(*,*) 'error in ncagt SHORT' end if else if (attype .eq. NCLONG) then call ncagt (ncid, i, attnam, lngval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt LONG name' if (lngval(j) .ne. lvalidrg(j)) + write(*,*) 'error in ncagt LONG' else if (attype .eq. NCFLOAT) then call ncagt (ncid, i, attnam, flval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt FLOAT name' if (flval(j) .ne. rvalidrg(j)) + write(*,*) 'error in ncagt FLOAT' else if (attype .eq. NCDOUBLE) then call ncagt (ncid, i, attnam, doubval, + iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(j,i)) + write(*,*) 'error in ncagt DOUBLE name' if ( abs(doubval(j) - dvalidrg(j)) .gt. epsilon) + write(*,*) 'error in ncagt DOUBLE' end if end if 25 continue 20 continue call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncapt ! subroutine tncapt (ncid, nfails) use netcdf_f03 integer ncid, iret ! attribute vectors NCSHORT_T svalidrg(2) real rvalidrg(2) integer lvalidrg(2) doubleprecision dvalidrg(2) NCBYTE_T bvalidrg(2) ! variable ids integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid ! assign attributes ! ! byte ! bvalidrg(1) = -127 bvalidrg(2) = 127 call ncapt (ncid, bid, 'validrange', NCBYTE, 2, +bvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! short ! svalidrg(1) = -100 svalidrg(2) = 100 call ncapt (ncid, sid, 'validrange', NCSHORT, 2, +svalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! long ! lvalidrg(1) = 0 lvalidrg(2) = 360 call ncapt (ncid, lid, 'validrange', NCLONG, 2, +lvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! float ! rvalidrg(1) = 0.0 rvalidrg(2) = 5000.0 call ncapt (ncid, fid, 'validrange', NCFLOAT, 2, +rvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! double ! dvalidrg(1) = 0D0 dvalidrg(2) = 500D0 call ncapt (ncid, did, 'validrange', NCDOUBLE, 2, +dvalidrg, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! global ! call ncaptc (ncid, NCGLOBAL, 'source', NCCHAR, 3, +'NWS', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaptc (ncid, NCGLOBAL, 'basetime', NCCHAR, 17, +'88/10/25 12:00:00', iret) if (iret .ne. 0) nfails = nfails + 1 ! ! char ! call ncaptc (ncid, chid, 'longname', NCCHAR, 11, +'test string', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaptc (ncid, chid, 'id', NCCHAR, 1, +'a', iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! initialize variables in labelled common blocks ! block data common /cdims/ dimnam common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /varn/varnam common /atts/attname, gattnam integer latdim, londim, leveldim, timedim, lendim ! should use netcdf_f03 for MAXNCDIM, but it has EXTERNAL ! declaration, which is not permitted in a BLOCK DATA unit. integer dimsiz(1024) character*31 dimnam(1024) character*31 varnam(7) character*31 attname(2,7) character*31 gattnam(2) data dimnam /'time', 'lat', 'lon', 'level', + 'length', 1019*'0'/ data dimsiz /4, 5, 5, 4, 80, 1019*0/ data varnam/'bytev', 'shortv', 'longv', 'floatv', 'doublev', + 'chv', 'cv'/ data attname/'validrange', '0', 'validrange', '0', 'validrange', + '0', 'validrange', '0', 'validrange', '0', 'longname', 'id', + '0', '0'/ data gattnam/'source','basetime'/ end ! ! subroutine to test ncddef ! subroutine tncddef(ncid, nfails) use netcdf_f03 integer ncid ! sizes of dimensions of 'test.nc' and 'copy.nc' integer ndims parameter(ndims=5) ! dimension ids integer latdim, londim, leveldim, timedim, lendim integer iret ! function to define a netCDF dimension integer dimsiz(MAXNCDIM) character*31 dimnam(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /cdims/ dimnam ! define dimensions timedim = ncddef(ncid, dimnam(1), NCUNLIM, iret) if (iret .ne. 0) nfails = nfails + 1 latdim = ncddef(ncid, dimnam(2), dimsiz(2), iret) if (iret .ne. 0) nfails = nfails + 1 londim = ncddef(ncid, dimnam(3), dimsiz(3), iret) if (iret .ne. 0) nfails = nfails + 1 leveldim = ncddef(ncid, dimnam(4), dimsiz(4), iret) if (iret .ne. 0) nfails = nfails + 1 lendim = ncddef(ncid, dimnam(5), dimsiz(5), iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncinq, ncdinq, ncdid, ncvinq, ncanam ! and ncainq ! subroutine tncinq(cdfname, nfails) use netcdf_f03 character*31 cdfname ! netCDF id integer ncid ! returned number of dimensions integer ndims ! returned number of variables integer nvars ! returned number of global attributes integer natts ! returned id of the unlimited dimension integer recdim ! returned error code integer iret ! returned name of record dimension character*31 recnam ! returned size of record dimension integer recsiz ! loop control variables integer i, j, k ! returned size of dimension integer dsize ! returned dimension ID integer dimid ! returned dimension name character*31 dname ! returned variable name character*31 vname ! returned attribute name character*31 attnam ! returned netCDF datatype of variable integer vartyp ! returned number of variable dimensions integer nvdims ! returned number of variable attributes integer nvatts ! returned vector of nvdims dimension IDS corresponding to the ! variable dimensions integer vdims(MAXNCDIM) ! returned attribute length integer attlen ! returned attribute type integer attype character*31 dimnam(MAXNCDIM) character*31 varnam(7) character*31 attname(2,7) character*31 gattnam(2) integer vdlist(5,7), vtyp(7), vndims(7), vnatts(7) integer attyp(2,7),atlen(2,7),gattyp(2),gatlen(2) integer timedim,latdim,londim,leveldim,lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz common /varn/varnam common /atts/attname, gattnam common /cdims/ dimnam data vdlist/1,0,0,0,0,1,0,0,0,0,2,0,0,0,0,4,3,2,1,0,4,3,2,1,0, + 5,1,0,0,0,1,0,0,0,0/ data vtyp/NCBYTE, NCSHORT, NCLONG, NCFLOAT, NCDOUBLE, NCCHAR, + NCCHAR/ data vndims/1,1,1,4,4,2,1/ data vnatts/1,1,1,1,1,2,0/ data attyp/NCBYTE, 0, NCSHORT, 0, NCLONG, 0, NCFLOAT, 0, + NCDOUBLE, 0, NCCHAR, NCCHAR, 0, 0/ data atlen/2,0,2,0,2,0,2,0,2,0,11,1, 0, 0/ data gattyp/NCCHAR,NCCHAR/ data gatlen/3,17/ ncid = ncopn (cdfname, NCNOWRIT, iret) call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 if (ndims .ne. 5) write(*,*) 'error in ncinq or ncddef' if (nvars .ne. 7) write(*,*) 'error in ncinq or ncvdef' if (natts .ne. 2) write(*,*) 'error in ncinq or ncapt' call ncdinq (ncid, recdim, recnam, recsiz, iret) if (iret .ne. 0) nfails = nfails + 1 if (recnam .ne. 'time') write(*,*) 'error: bad recdim from ncinq' ! ! dimensions ! do 10 i = 1, ndims call ncdinq (ncid, i, dname, dsize, iret) if (iret .ne. 0) nfails = nfails + 1 if (dname .ne. dimnam(i)) + write(*,*) 'error in ncdinq or ncddef, dname=', dname if (dsize .ne. dimsiz(i)) + write(*,*) 'error in ncdinq or ncddef, dsize=',dsize dimid = ncdid (ncid, dname, iret) if (dimid .ne. i) write(*,*) + 'error in ncdinq or ncddef, dimid=', dimid 10 continue ! ! variables ! do 30 i = 1, nvars call ncvinq (ncid, i, vname, vartyp, nvdims, + vdims, nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 if (vname .ne. varnam(i)) + write(*,*) 'error: from ncvinq, wrong name returned: ', + vname, ' .ne. ', varnam(i) if (vartyp .ne. vtyp(i)) + write(*,*) 'error: from ncvinq, wrong type returned: ', + vartyp, ' .ne. ', vtyp(i) if (nvdims .ne. vndims(i)) + write(*,*) 'error: from ncvinq, wrong num dims returned: ', + vdims, ' .ne. ', vndims(i) do 35 j = 1, nvdims if (vdims(j) .ne. vdlist(j,i)) + write(*,*) 'error: from ncvinq wrong dimids: ', + vdims(j), ' .ne. ', vdlist(j,i) 35 continue if (nvatts .ne. vnatts(i)) + write(*,*) 'error in ncvinq or ncvdef' ! ! attributes ! do 45 k = 1, nvatts call ncanam (ncid, i, k, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (ncid, i, attnam, attype, attlen, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. attname(k,i)) + write(*,*) 'error in ncanam or ncapt' if (attype .ne. attyp(k,i)) + write(*,*) 'error in ncainq or ncapt' if (attlen .ne. atlen(k,i)) + write(*,*) 'error in ncainq or ncapt' 45 continue 30 continue do 40 i = 1, natts call ncanam (ncid, NCGLOBAL, i, attnam, iret) if (iret .ne. 0) nfails = nfails + 1 call ncainq (ncid, NCGLOBAL, attnam, attype, attlen, iret) if (iret .ne. 0) nfails = nfails + 1 if (attnam .ne. gattnam(i)) + write(*,*) 'error in ncanam or ncapt' if (attype .ne. gattyp(i)) + write(*,*) 'error in ncainq or ncapt' if (attlen .ne. gatlen(i)) + write(*,*) 'error in ncainq or ncapt' 40 continue call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! subroutine to test ncredf, ncdren, ncvren, ncaren, and ! ncendf subroutine tncredf(cdfname, nfails) use netcdf_f03 character*31 cdfname character*31 attname(2,7) character*31 gattnam(2) common /atts/attname, gattnam common /cdims/ dimnam character*31 dimnam(MAXNCDIM) character*31 varnam(7) common /varn/varnam integer ncid, iret, latid, varid dimnam(2) = 'latitude' varnam(4) = 'realv' attname(1,6) = 'stringname' gattnam(1) = 'agency' ncid = ncopn(cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 call ncredf(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 latid = ncdid(ncid, 'lat', iret) call ncdren(ncid, latid, 'latitude', iret) if (iret .ne. 0) nfails = nfails + 1 varid = ncvid(ncid, 'floatv', iret) call ncvren(ncid, varid, 'realv', iret) if (iret .ne. 0) nfails = nfails + 1 varid = ncvid(ncid, 'chv', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaren(ncid, varid, 'longname', 'stringname', iret) if (iret .ne. 0) nfails = nfails + 1 call ncaren(ncid, NCGLOBAL, 'source', 'agency', iret) if (iret .ne. 0) nfails = nfails + 1 call ncendf(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncvdef ! subroutine tncvdef(ncid, nfails) use netcdf_f03 integer ncid ! function to define a netCDF variable integer dimsiz(MAXNCDIM) integer latdim, londim, leveldim, timedim, lendim common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz ! variable ids integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid ! variable shapes integer bdims(1), fdims(4), ddims(4), ldims(1), sdims(1) integer chdims(2), cdims(1) integer iret ! ! define variables ! ! byte ! bdims(1) = timedim bid = ncvdef(ncid, 'bytev', NCBYTE, 1, bdims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! short ! sdims(1) = timedim sid = ncvdef (ncid, 'shortv', NCSHORT, 1, sdims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! long ! ldims(1) = latdim lid = ncvdef (ncid, 'longv', NCLONG, 1, ldims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! float ! fdims(4) = timedim fdims(1) = leveldim fdims(2) = londim fdims(3) = latdim fid = ncvdef (ncid, 'floatv', NCFLOAT, 4, fdims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! double ! ddims(4) = timedim ddims(1) = leveldim ddims(2) = londim ddims(3) = latdim did = ncvdef (ncid, 'doublev', NCDOUBLE, 4, ddims, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! char ! chdims(2) = timedim chdims(1) = lendim chid = ncvdef (ncid, 'chv', NCCHAR, 2, chdims, iret) if (iret .ne. 0) nfails = nfails + 1 cdims(1) = timedim cid = ncvdef (ncid, 'cv', NCCHAR, 1, cdims, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncvgt and ncvgtc ! subroutine tncvgt(cdfname, nfails) use netcdf_f03 character*31 cdfname integer ndims, times, lats, lons, levels, lenstr parameter (times=4, lats=5, lons=5, levels=4) integer start(4), count(4) integer ncid, iret, i, m integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid integer itime, ilev, ilat, ilon ! arrays of data values to be read NCBYTE_T barray(times), byval(times) NCSHORT_T sarray(times), shval(times) integer larray(lats) real farray(levels, lats, lons, times) doubleprecision darray(levels, lats, lons, times) ! character array of data values to be read character*31 string character*31 varnam integer nvars, natts, recdim integer vartyp, nvdims, vdims(MAXVDIMS), nvatts data start/1,1,1,1/ data count/levels, lats, lons, times/ data byval /97, 98, 99, 100/ data shval /10, 11, 12, 13/ ncid = ncopn (cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! get number of variables in netCDF call ncinq (ncid, ndims, nvars, natts, recdim, iret) if (iret .ne. 0) nfails = nfails + 1 do 5 m = 1, nvars-1 ! get variable name, datatype, number of dimensions ! vector of dimension ids, and number of variable attributes call ncvinq (ncid, m, varnam, vartyp, nvdims, vdims, + nvatts, iret) if (iret .ne. 0) nfails = nfails + 1 if (vartyp .eq. NCBYTE) then ! ! byte ! count(1) = times call ncvgt (ncid, m, start, count, barray, iret) if (iret .ne. 0) nfails = nfails + 1 do 10 i = 1, times if (barray(i) .ne. byval(i)) then write(*,*) 'ncvgt of bytes, got ', barray(i), ' .ne. ' + , byval(i) end if 10 continue else if (vartyp .eq. NCSHORT) then ! ! short ! count(1) = times call ncvgt (ncid, m, start, count, sarray, iret) if (iret .ne. 0) nfails = nfails + 1 do 20 i = 1, times if (sarray(i) .ne. shval(i)) then write(*,*) 'ncvgt of short, got ', sarray(i), ' .ne. ' + , shval(i) end if 20 continue else if (vartyp .eq. NCLONG) then ! ! long ! count(1) = lats call ncvgt (ncid, m, start, count, larray, iret) if (iret .ne. 0) nfails = nfails + 1 do 30 i = 1, lats if (larray(i) .ne. 1000) then write(*,*) 'long error in ncvgt' end if 30 continue else if (vartyp .eq. NCFLOAT) then ! ! float ! count(1) = levels call ncvgt (ncid, m, start, count, farray, iret) if (iret .ne. 0) nfails = nfails + 1 i = 0 do 40 itime = 1,times do 41 ilon = 1, lons do 42 ilat = 1, lats do 43 ilev = 1, levels i = i + 1 if (farray(ilev, ilat, ilon, itime) .ne. + real(i)) then write (*,*) 'float error in ncvgt' end if 43 continue 42 continue 41 continue 40 continue else if (vartyp .eq. NCDOUBLE) then ! ! double ! count(1) = levels call ncvgt (ncid, m, start, count, darray, iret) if (iret .ne. 0) nfails = nfails + 1 i = 0 do 50 itime = 1, times do 51 ilon = 1, lons do 52 ilat = 1, lats do 53 ilev = 1, levels i = i + 1 if (darray(ilev, ilat, ilon, itime) .ne. + real (i)) then write(*,*) 'double error in ncvgt:', i, + darray(ilev, ilat, ilon, itime), '.ne.', + real (i) end if 53 continue 52 continue 51 continue 50 continue else ! ! char ! count(1) = 3 count(2) = 4 lenstr = 31 call ncvgtc (ncid, m, start, count, string, lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 if (string .ne. 'testhikin of') then write(*,*) 'error in ncvgt, returned string =', string end if end if 5 continue call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end subroutine tncvgt1(cdfname, nfails) use netcdf_f03 character*31 cdfname integer ncid, iret integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bindx(1), sindx(1), lindx(1), findx(4), dindx(4), cindx(1) integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid NCBYTE_T bvalue NCSHORT_T svalue integer lvalue real fvalue doubleprecision dvalue character*1 c real epsilon doubleprecision onethird data epsilon /.000001/ data lindx/1/, bindx/1/, sindx/1/, findx/1,1,1,1/ +dindx/1,1,1,1/, cindx/1/ data onethird/0.3333333333D0/ ncid = ncopn (cdfname, NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvgt1 for byte ! call ncvgt1 (ncid, bid, bindx, bvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (bvalue .ne. ichar('z')) write(*,*) 'error in ncvgt1 byte:', + bvalue, ' .ne.', ichar('z') ! ! test ncvgt1 for short ! call ncvgt1 (ncid, sid, sindx, svalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (svalue .ne. 10) write(*,*) 'error in ncvgt1 short:', + svalue, ' .ne.', 10 ! ! test ncvgt1 for long ! call ncvgt1 (ncid, lid, lindx, lvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (lvalue .ne. 1000) write(*,*) 'error in ncvgt1 long:', + lvalue, ' .ne.', 1000 ! ! test ncvgt1 for float ! call ncvgt1 (ncid, fid, findx, fvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (abs(fvalue - 3.14159) .gt. epsilon) + write(*,*) 'error in ncvgt 1 float:', fvalue, + ' not close to', 3.14159 ! ! test ncvgt1 for double ! call ncvgt1 (ncid, did, dindx, dvalue, iret) if (iret .ne. 0) nfails = nfails + 1 if (abs(dvalue - onethird) .gt. epsilon) write(*,*) + 'error in ncvgt1 double:', dvalue, ' not close to', + onethird ! ! test ncvg1c for char ! call ncvg1c (ncid, cid, cindx, c, iret) if (iret .ne. 0) nfails = nfails + 1 if (c .ne. 'a') write(*,*) 'error in ncvg1c' call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test ncvpt and ncvptc ! subroutine tncvpt(cdfname, nfails) use netcdf_f03 character*31 cdfname ! size of dimensions integer times, lats, lons, levels parameter (times=4, lats=5, lons=5, levels=4) integer ncid, iret ! loop control variables integer itime, ilev, ilon, ilat, i integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer lenstr integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid ! vector of integers specifying the corner of the hypercube ! where the first of the data values will be written integer start(4) ! vector of integers specifying the edge lengths from the ! corner of the hypercube where the first of the data values ! will be written integer count(4) ! arrays of data values to be written NCBYTE_T barray(times) NCSHORT_T sarray(times) integer larray(lats) real farray(levels, lats, lons, times) doubleprecision darray(levels, lats, lons, times) character*31 string data start/1,1,1,1/ data count/levels, lats, lons, times/ data barray /97, 98, 99, 100/ data sarray /10, 11, 12, 13/ ncid = ncopn (cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! byte ! count(1) = times call ncvpt (ncid, bid, start, count, barray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! short ! count(1) = times call ncvpt (ncid, sid, start, count, sarray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! long ! do 30 i = 1,lats larray(i) = 1000 30 continue count(1) = lats call ncvpt (ncid, lid, start, count, larray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! float ! i = 0 do 40 itime = 1,times do 41 ilon = 1, lons do 42 ilat = 1, lats do 43 ilev = 1, levels i = i + 1 farray(ilev, ilat, ilon, itime) = real (i) 43 continue 42 continue 41 continue 40 continue count(1) = levels call ncvpt (ncid, fid, start, count, farray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! double ! i = 0 do 50 itime = 1, times do 51 ilon = 1, lons do 52 ilat = 1, lats do 53 ilev = 1, levels i = i + 1 darray(ilev, ilat, ilon, itime) = real (i) 53 continue 52 continue 51 continue 50 continue count(1) = levels call ncvpt (ncid, did, start, count, darray, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! char ! start(1) = 1 start(2) = 1 count(1) = 4 count(2) = 4 lenstr = 31 string = 'testthiskind of ' call ncvptc (ncid, chid,start, count, string, lenstr, iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos(ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end subroutine tncvpt1(cdfname, nfails) use netcdf_f03 character*31 cdfname integer iret, ncid integer latdim, londim, leveldim, timedim, lendim integer dimsiz(MAXNCDIM) common /dims/timedim, latdim, londim, leveldim, lendim, + dimsiz integer bindx(1), sindx(1), lindx(1), findx(4), dindx(4), cindx(1) integer lvalue NCSHORT_T svalue NCBYTE_T bvalue doubleprecision onethird integer bid, sid, lid, fid, did, cid, chid common /vars/bid, sid, lid, fid, did, cid, chid data lindx/1/, bindx/1/, sindx/1/, findx/1,1,1,1/ +dindx/1,1,1,1/, cindx/1/ data lvalue /1000/ data svalue/10/ data onethird/0.3333333333D0/ bvalue = ichar('z') ncid = ncopn (cdfname, NCWRITE, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for byte ! call ncvpt1 (ncid, bid, bindx, bvalue, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for short ! call ncvpt1 (ncid, sid, sindx, svalue, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for long ! call ncvpt1 (ncid, lid, lindx, lvalue, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for float ! call ncvpt1 (ncid, fid, findx, 3.14159, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvpt1 for double ! call ncvpt1 (ncid, did, dindx, onethird, iret) if (iret .ne. 0) nfails = nfails + 1 ! ! test ncvp1c for char ! call ncvp1c (ncid, cid, cindx, 'a', iret) if (iret .ne. 0) nfails = nfails + 1 call ncclos (ncid, iret) if (iret .ne. 0) nfails = nfails + 1 return end ! ! subroutine to test default fill values ! subroutine tfills(nfails) use netcdf_f03 integer ncid integer bid, sid, lid, fid, did integer ix(1) integer l NCSHORT_T s doubleprecision d real f NCBYTE_T b ncid = NCOPN('fills.nc', NCNOWRIT, iret) if (iret .ne. 0) nfails = nfails + 1 bid = ncvid(ncid, 'b', iret) if (iret .ne. 0) nfails = nfails + 1 sid = ncvid(ncid, 's', iret) if (iret .ne. 0) nfails = nfails + 1 lid = ncvid(ncid, 'l', iret) if (iret .ne. 0) nfails = nfails + 1 fid = ncvid(ncid, 'f', iret) if (iret .ne. 0) nfails = nfails + 1 did = ncvid(ncid, 'd', iret) if (iret .ne. 0) nfails = nfails + 1 ix(1) = 2 call ncvgt1(ncid, bid, ix, b, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, sid, ix, s, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, lid, ix, l, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, fid, ix, f, iret) if (iret .ne. 0) nfails = nfails + 1 call ncvgt1(ncid, did, ix, d, iret) if (iret .ne. 0) nfails = nfails + 1 if (b .ne. FILBYTE) write(*,*) 'error in byte fill value' if (d .ne. FILDOUB) write(*,*) 'error in double fill value' if (f .ne. FILFLOAT) write(*,*) 'error in float fill value' if (l .ne. FILLONG) write(*,*) 'error in long fill value' if (s .ne. FILSHORT) write(*,*) 'error in short fill value' return end netcdf-fortran-4.6.3+ds/nf_test/test_get.F0000664000175000017500000067662515205004070020634 0ustar alastairalastairC Do not edit this file. It is produced from the corresponding .m4 source */ C********************************************************************* C Copyright 1996, UCAR/Unidata C See netcdf/COPYRIGHT file for copying and redistribution conditions. C $Id: test_get.m4,v 1.11 2008/04/30 16:50:46 ed Exp $ C********************************************************************* subroutine test_nf_get_var1_text() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert character value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_text(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_text(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_text(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_TEXT ) err = nf_get_var1_text(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_TEXT)) then if (in_internal_range(NFT_TEXT, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = ichar(value) if (.not. equal(val, expect, + var_type(i), + NFT_TEXT)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_var1_int1() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert NF_INT1_T value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_int1(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_int1(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_int1(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT1 ) err = nf_get_var1_int1(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_INT1)) then if (in_internal_range(NFT_INT1, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_INT1)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_var1_int2() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert NF_INT2_T value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_int2(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_int2(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_int2(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT2 ) err = nf_get_var1_int2(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_INT2)) then if (in_internal_range(NFT_INT2, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_INT2)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_var1_int() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert integer value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_int(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_int(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_int(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_INT ) err = nf_get_var1_int(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_INT)) then if (in_internal_range(NFT_INT, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_INT)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var1_real() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert real value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_real(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_real(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_real(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_REAL ) err = nf_get_var1_real(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_REAL)) then if (in_internal_range(NFT_REAL, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_REAL)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var1_double() implicit none #include "tests.inc" integer ncid integer i integer j integer err integer nok integer index(MAX_RANK) doubleprecision expect logical canConvert doubleprecision value doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) do 2, j = 1, var_rank(i) index(j) = 1 2 continue err = nf_get_var1_double(BAD_ID, i, index, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var1_double(ncid, BAD_VARID, + index, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) index(j) = var_shape(j,i) + 1 err = nf_get_var1_double(ncid, i, index, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif index(j) = 1 3 continue do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect = hash4( var_type(i), var_rank(i), index, + NFT_DOUBLE ) err = nf_get_var1_double(ncid, i, index, + value) if (canConvert) then if (inRange3(expect,var_type(i), + NFT_DOUBLE)) then if (in_internal_range(NFT_DOUBLE, + expect)) then if (err .ne. 0) then call errore('nf_get_var: ', err) else val = value if (.not. equal(val, expect, + var_type(i), + NFT_DOUBLE)) then call errord('unexpected: ', val) else nok = nok + 1 end if end if else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 4 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var_text() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert character value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) err = nf_get_var_text(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_text(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_TEXT ) if (inRange3(expect(j),var_type(i), NFT_TEXT)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_TEXT, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_text(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(j))) then val = ichar(value(j)) if (.not. equal(val, expect(j), + var_type(i), + NFT_TEXT)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_var_int1() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) err = nf_get_var_int1(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_int1(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_INT1 ) if (inRange3(expect(j),var_type(i), NFT_INT1)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_INT1, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_int1(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_INT1)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_var_int2() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) err = nf_get_var_int2(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_int2(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_INT2 ) if (inRange3(expect(j),var_type(i), NFT_INT2)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_INT2, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_int2(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_INT2)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_var_int() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert integer value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) err = nf_get_var_int(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_int(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_INT ) if (inRange3(expect(j),var_type(i), NFT_INT)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_INT, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_int(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_INT)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var_real() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert real value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) err = nf_get_var_real(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_real(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_REAL ) if (inRange3(expect(j),var_type(i), NFT_REAL)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_REAL, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_real(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_REAL)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_var_double() implicit none #include "tests.inc" integer ncid integer i integer j integer err logical allInExtRange logical allInIntRange integer nels integer nok integer index(MAX_RANK) doubleprecision expect(MAX_NELS) logical canConvert doubleprecision value(MAX_NELS) doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) err = nf_get_var_double(BAD_ID, i, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_var_double(ncid, BAD_VARID, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) nels = 1 do 3, j = 1, var_rank(i) nels = nels * var_shape(j,i) 3 continue allInExtRange = .true. allInIntRange = .true. do 4, j = 1, var_nels(i) err = index2indexes(j, var_rank(i), var_shape(1,i), + index) if (err .ne. 0) + call error('error in index2indexes 1') expect(j) = hash4( var_type(i), var_rank(i), index, + NFT_DOUBLE ) if (inRange3(expect(j),var_type(i), NFT_DOUBLE)) then allInIntRange = allInIntRange .and. + in_internal_range(NFT_DOUBLE, expect(j)) else allInExtRange = .false. end if 4 continue err = nf_get_var_double(ncid, i, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_var: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) endif else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('Range error: ', err) endif do 5, j = 1, var_nels(i) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(j))) then val = value(j) if (.not. equal(val, expect(j), + var_type(i), + NFT_DOUBLE)) then call errord('unexpected: ', val) else nok = nok + 1 end if endif 5 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_vara_text() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_text(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_text(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_text(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_text(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_TEXT) if (inRange3(expect(j),var_type(i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_text(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_text:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, expect(j))) + then val = ichar(value(j)) if (.not.equal(val,expect(j), + var_type(i),NFT_TEXT)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_vara_int1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int1(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_int1(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int1(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_int1(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_INT1) if (inRange3(expect(j),var_type(i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_int1(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_int1:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_INT1)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_vara_int2() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int2(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_int2(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int2(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_int2(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_INT2) if (inRange3(expect(j),var_type(i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_int2(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_int2:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_INT2)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end #endif subroutine test_nf_get_vara_int() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_int(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_int(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_int(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_INT) if (inRange3(expect(j),var_type(i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_int(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_int:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_INT)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end subroutine test_nf_get_vara_real() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_real(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_real(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_real(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_real(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_REAL) if (inRange3(expect(j),var_type(i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_real(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_real:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_REAL)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end subroutine test_nf_get_vara_double() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer mid(MAX_RANK) logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 2 continue err = nf_get_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_double(ncid, BAD_VARID, start, + edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert .and. err .ne. NF_EEDGE) + call errore('bad edge: ', err) edge(j) = 1 3 continue C /* Check non-scalars for correct error returned even when */ C /* there is nothing to get (edge(j).eq.0) */ if (var_rank(i) .gt. 0) then do 10, j = 1, var_rank(i) edge(j) = 0 10 continue err = nf_get_vara_double(BAD_ID, i, start, + edge, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vara_double(ncid, BAD_VARID, + start, edge, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 11, j = 1, var_rank(i) if (var_dimid(j,i) .gt. 1) then !/* skip record dim */ start(j) = var_shape(j,i) + 1 err = nf_get_vara_double(ncid, i, + start, edge, value) #ifndef NF_RELAX_COORD_BOUND if (canConvert .and. err .ne. NF_EINVALCOORDS) + call errore('bad start: ', err) #endif start(j) = 1 endif 11 continue err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) endif do 12, j = 1, var_rank(i) edge(j) = 1 12 continue endif C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim do 5, k = 1, nslabs nels = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if nels = nels * edge(j) 6 continue allInIntRange = .true. allInExtRange = .true. do 7, j = 1, nels err = index2indexes(j, var_rank(i), edge, index) if (err .ne. 0) + call error('error in index2indexes 1') do 8, d = 1, var_rank(i) index(d) = index(d) + start(d) - 1 8 continue expect(j) = hash4(var_type(i), var_rank(i), index, + NFT_DOUBLE) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, expect(j)) else allInExtRange = .false. end if 7 continue err = nf_get_vara_double(ncid, i, start, + edge, value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_vara_double:', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 9, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, expect(j))) + then val = value(j) if (.not.equal(val,expect(j), + var_type(i),NFT_DOUBLE)) + then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: %d ', + j) call errord('expect: ', expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 9 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errorc('nf_close: ', nf_strerror(err)) call print_nok(nok) end subroutine test_nf_get_vars_text() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_text(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_text(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_text(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_TEXT) if (inRange3(expect(j),var_type(i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_text(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(j))) then val = ichar(value(j)) if (.not.equal(val, expect(j), + var_type(i), NFT_TEXT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_vars_int1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_int1(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_int1(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_int1(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT1) if (inRange3(expect(j),var_type(i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_int1(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_INT1)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_vars_int2() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_int2(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_int2(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_int2(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT2) if (inRange3(expect(j),var_type(i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_int2(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_INT2)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_vars_int() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_int(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_int(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_int(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT) if (inRange3(expect(j),var_type(i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_int(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_INT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_vars_real() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_real(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_real(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_real(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_REAL) if (inRange3(expect(j),var_type(i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_real(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_REAL)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_vars_double() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 2 continue err = nf_get_vars_double(BAD_ID, i, start, + edge, stride, value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_vars_double(ncid, BAD_VARID, + start, edge, stride, + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_vars_double(ncid, i, start, + edge, stride, + value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C bits of k determine whether to get lower or upper part of dim C choose random stride from 1 to edge do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift(k-1, j-1), 2) .eq. 1) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then sstride(j) = 1 + roll(edge(j)) else sstride(j) = 1 end if nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, + index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ allInIntRange = .true. allInExtRange = .true. do 9, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes() 1') do 10, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 10 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_DOUBLE) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, + expect(j)) else allInExtRange = .false. end if 9 continue err = nf_get_vars_double(ncid, i, index, + count, stride, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 11, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), NFT_DOUBLE)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 11 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_varm_text() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_text(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_text(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_text(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_TEXT) if (inRange3(expect(j),var_type(i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_text(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(j))) then val = ichar(value(j)) if (.not.equal(val, expect(j), + var_type(i), + NFT_TEXT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_varm_int1() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_int1(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_int1(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_int1(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT1) if (inRange3(expect(j),var_type(i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_int1(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_INT1)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_varm_int2() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_int2(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_int2(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_int2(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT2) if (inRange3(expect(j),var_type(i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_int2(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_INT2)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_varm_int() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_int(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_int(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_int(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_INT) if (inRange3(expect(j),var_type(i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_int(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_INT)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_varm_real() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_real(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_real(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_real(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_REAL) if (inRange3(expect(j),var_type(i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_real(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_REAL)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_varm_double() implicit none #include "tests.inc" integer ncid integer d integer i integer j integer k integer m integer err logical allInExtRange logical allInIntRange integer nels integer nslabs integer nstarts integer nok integer start(MAX_RANK) integer edge(MAX_RANK) integer index(MAX_RANK) integer index2(MAX_RANK) integer mid(MAX_RANK) integer count(MAX_RANK) integer sstride(MAX_RANK) integer stride(MAX_RANK) integer imap(MAX_RANK) logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) doubleprecision val integer udshift nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 1, NVARS canConvert = (var_type(i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) if (.not.(var_rank(i) .le. MAX_RANK)) stop 2 if (.not.(var_nels(i) .le. MAX_NELS)) stop 2 do 2, j = 1, var_rank(i) start(j) = 1 edge(j) = 1 stride(j) = 1 imap(j) = 1 2 continue err = nf_get_varm_double(BAD_ID, i, start, edge, + stride, imap, + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_varm_double(ncid, BAD_VARID, start, + edge, stride, + imap, value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) do 3, j = 1, var_rank(i) start(j) = var_shape(j,i) + 1 err = nf_get_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EINVALCOORDS) + call errore('bad index: ', err) endif start(j) = 1 edge(j) = var_shape(j,i) + 1 err = nf_get_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_EEDGE) + call errore('bad edge: ', err) endif edge(j) = 1 stride(j) = 0 err = nf_get_varm_double(ncid, i, start, + edge, stride, + imap, value) if (.not. canConvert) then if (err .ne. NF_ECHAR) + call errore('conversion: ', err) else if (err .ne. NF_ESTRIDE) + call errore('bad stride: ', err) endif stride(j) = 1 3 continue C Choose a random point dividing each dim into 2 parts C get 2^rank (nslabs) slabs so defined nslabs = 1 do 4, j = 1, var_rank(i) mid(j) = roll( var_shape(j,i) ) nslabs = nslabs * 2 4 continue C /* bits of k determine whether to get lower or upper part C * of dim C * choose random stride from 1 to edge */ do 5, k = 1, nslabs nstarts = 1 do 6, j = 1, var_rank(i) if (mod(udshift((k-1), -(j-1)), 2) .ne. 0) then start(j) = 1 edge(j) = mid(j) else start(j) = 1 + mid(j) edge(j) = var_shape(j,i) - mid(j) end if if (edge(j) .gt. 0) then stride(j) = 1+roll(edge(j)) else stride(j) = 1 end if sstride(j) = stride(j) nstarts = nstarts * stride(j) 6 continue do 7, m = 1, nstarts err = index2indexes(m, var_rank(i), sstride, index) if (err .ne. 0) + call error('error in index2indexes') nels = 1 do 8, j = 1, var_rank(i) count(j) = 1 + (edge(j) - index(j)) / + stride(j) nels = nels * count(j) index(j) = index(j) + start(j) - 1 8 continue C Random choice of forward or backward C /* TODO C if ( roll(2) ) then C for (j = 0 j < var_rank(i) j++) { C index(j) += (count(j) - 1) * stride(j) C stride(j) = -stride(j) C } C end if C */ if (var_rank(i) .gt. 0) then imap(1) = 1 do 9, j = 2, var_rank(i) imap(j) = imap(j-1) * count(j-1) 9 continue end if allInIntRange = .true. allInExtRange = .true. do 10, j = 1, nels err = index2indexes(j, var_rank(i), count, + index2) if (err .ne. 0) + call error('error in index2indexes 1') do 11, d = 1, var_rank(i) index2(d) = index(d) + (index2(d)-1) * + stride(d) 11 continue expect(j) = hash4(var_type(i), var_rank(i), + index2, NFT_DOUBLE) if (inRange3(expect(j),var_type(i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, + expect(j)) else allInExtRange = .false. end if 10 continue err = nf_get_varm_double(ncid,i,index,count, + stride,imap, + value) if (canConvert) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call error(nf_strerror(err)) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', err) end if do 12, j = 1, nels if (inRange3(expect(j),var_type(i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(j))) then val = value(j) if (.not.equal(val, expect(j), + var_type(i), + NFT_DOUBLE)) then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('var_name: ', + var_name(i)) call errori('element number: ', + j) call errord('expect: ', + expect(j)) call errord('got: ', val) end if else nok = nok + 1 end if end if 12 continue else if (nels .gt. 0 .and. err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 7 continue 5 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_att_text() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert character value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_TEXT .eq. NFT_TEXT) err = nf_get_att_text(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_text(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_text(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_TEXT) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_TEXT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_TEXT, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_text(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_text: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_TEXT) .and. + in_internal_range(NFT_TEXT, + expect(k))) then val = ichar(value(k)) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_TEXT))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #ifdef NF_INT1_T subroutine test_nf_get_att_int1() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert NF_INT1_T value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT1 .eq. NFT_TEXT) err = nf_get_att_int1(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_int1(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_int1(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_INT1) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT1)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT1, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_int1(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_int1: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT1) .and. + in_internal_range(NFT_INT1, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_INT1))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif #ifdef NF_INT2_T subroutine test_nf_get_att_int2() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert NF_INT2_T value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT2 .eq. NFT_TEXT) err = nf_get_att_int2(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_int2(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_int2(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_INT2) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT2)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT2, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_int2(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_int2: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT2) .and. + in_internal_range(NFT_INT2, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_INT2))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end #endif subroutine test_nf_get_att_int() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert integer value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_INT .eq. NFT_TEXT) err = nf_get_att_int(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_int(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_int(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_INT) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_INT, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_int(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_int: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_INT) .and. + in_internal_range(NFT_INT, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_INT))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_att_real() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert real value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_REAL .eq. NFT_TEXT) err = nf_get_att_real(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_real(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_real(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_REAL) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_REAL)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_REAL, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_real(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_real: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_REAL) .and. + in_internal_range(NFT_REAL, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_REAL))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end subroutine test_nf_get_att_double() implicit none #include "tests.inc" integer ncid integer i integer j integer k integer err integer ndx(1) logical allInExtRange logical allInIntRange logical canConvert doubleprecision value(MAX_NELS) doubleprecision expect(MAX_NELS) integer nok doubleprecision val nok = 0 err = nf_open(testfile, NF_NOWRITE, ncid) if (err .ne. 0) + call errore('nf_open: ', err) do 1, i = 0, NVARS do 2, j = 1, NATTS(i) canConvert = (ATT_TYPE(j,i) .eq. NF_CHAR) .eqv. + (NFT_DOUBLE .eq. NFT_TEXT) err = nf_get_att_double(BAD_ID, i, + ATT_NAME(j,i), + value) if (err .ne. NF_EBADID) + call errore('bad ncid: ', err) err = nf_get_att_double(ncid, BAD_VARID, + ATT_NAME(j,i), + value) if (err .ne. NF_ENOTVAR) + call errore('bad var id: ', err) err = nf_get_att_double(ncid, i, 'noSuch', value) if (err .ne. NF_ENOTATT) + call errore('Bad attribute name: ', err) allInIntRange = .true. allInExtRange = .true. do 3, k = 1, ATT_LEN(j,i) ndx(1) = k expect(k) = hash4(ATT_TYPE(j,i), -1, ndx, + NFT_DOUBLE) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_DOUBLE)) then allInIntRange = + allInIntRange .and. + in_internal_range(NFT_DOUBLE, expect(k)) else allInExtRange = .false. end if 3 continue err = nf_get_att_double(ncid, i, ATT_NAME(j,i), value) if (canConvert .or. ATT_LEN(j,i) .eq. 0) then if (allInExtRange) then if (allInIntRange) then if (err .ne. 0) + call errore('nf_get_att_double: ', err) else if (err .ne. NF_ERANGE) + call errore('Range error: ', err) end if else if (err .ne. 0 .and. err .ne. NF_ERANGE) + call errore('OK or Range error: ', + err) end if do 4, k = 1, ATT_LEN(j,i) if (inRange3(expect(k),ATT_TYPE(j,i), + NFT_DOUBLE) .and. + in_internal_range(NFT_DOUBLE, + expect(k))) then val = value(k) if (.not.equal(val, expect(k), + ATT_TYPE(j,i), + NFT_DOUBLE))then call error( + 'value read not that expected') if (verbose) then call error(' ') call errori('varid: ', i) call errorc('att_name: ', + ATT_NAME(j,i)) call errori('element number: ', k) call errord('expect: ', expect(k)) call errord('got: ', val) end if else nok = nok + 1 end if end if 4 continue else if (err .ne. NF_ECHAR) + call errore('wrong type: ', err) end if 2 continue 1 continue err = nf_close(ncid) if (err .ne. 0) + call errore('nf_close: ', err) call print_nok(nok) end netcdf-fortran-4.6.3+ds/netcdf-fortran.pc.in0000664000175000017500000000062515205004070021067 0ustar alastairalastairprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ fmoddir=@fmoddir@ ccompiler=@CC@ fcompiler=@FC@ Name: @PACKAGE@ Description: NetCDF Client Library for Fortran URL: https://www.unidata.ucar.edu/netcdf Version: @PACKAGE_VERSION@ Requires.private: netcdf > 4.1.1 Libs: -L${libdir} -lnetcdff Libs.private: -L${libdir} -lnetcdff -lnetcdf Cflags: -I${includedir} -I${fmoddir} netcdf-fortran-4.6.3+ds/nf-config.in0000664000175000017500000000562315205004070017423 0ustar alastairalastair#! /bin/sh # # This forms the basis for the nf-config utility, which tells you # various things about the netCDF fortran installation. prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ fmoddir=@fmoddir@ cc="@CC@" fc="@FC@" cflags="-I${includedir} @CPPFLAGS@" fflags="-I${includedir} @MOD_FLAG@${fmoddir}" has_dap="@HAS_DAP@" has_nc2="@HAS_NC2@" has_nc4="@HAS_NC4@" has_f90="@HAS_F90@" has_f03="@HAS_F03@" flibs="-L${libdir} @NC_FLIBS@" version="@PACKAGE_NAME@ @PACKAGE_VERSION@" usage() { cat < $cc" echo " --cflags -> $cflags" echo echo " --fc -> $fc" echo " --fflags -> $fflags" echo " --flibs -> $flibs" echo " --has-f90 -> $has_f90" echo " --has-f03 -> $has_f03" echo echo " --has-nc2 -> $has_nc2" echo " --has-nc4 -> $has_nc4" echo echo " --prefix -> $prefix" echo " --includedir-> $includedir" echo " --version -> $version" echo } if test $# -eq 0; then usage 1 fi while test $# -gt 0; do case "$1" in # this deals with options in the style # --option=value and extracts the value part # [not currently used] -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) value= ;; esac case "$1" in --help) usage 0 ;; --all) all ;; --cc) echo $cc ;; --fc) echo $fc ;; --cflags) echo $cflags ;; --fflags) echo $fflags ;; --has-dap) echo $has_dap ;; --has-nc2) echo $has_nc2 ;; --has-nc4) echo $has_nc4 ;; --has-f90) echo $has_f90 ;; --has-f03) echo $has_f03 ;; --flibs) echo $flibs ;; --prefix) echo "${prefix}" ;; --includedir) echo "${includedir}" ;; --version) echo $version ;; *) echo "unknown option: $1" usage exit 1 ;; esac shift done exit 0 netcdf-fortran-4.6.3+ds/F03Interfaces_LICENSE0000664000175000017500000000100615205004070020635 0ustar alastairalastair ! License (and other Lawyer Language) ! This software is released under the Apache 2.0 Open Source License. The ! full text of the License can be viewed at : ! ! http:www.apache.org/licenses/LICENSE-2.0.html ! ! The author grants to the University Corporation for Atmospheric Research ! (UCAR), Boulder, CO, USA the right to revise and extend the software ! without restriction. However, the author retains all copyrights and ! intellectual property rights explicitly stated in or implied by the ! Apache license netcdf-fortran-4.6.3+ds/COPYRIGHT0000664000175000017500000000456115205004070016520 0ustar alastairalastair/*! \file The NetCDF Copyright. \page copyright Copyright Copyright 1993-2025 University Corporation for Atmospheric Research/Unidata. Portions of this software were developed by the Unidata Program at the University Corporation for Atmospheric Research. Access and use of this software shall impose the following obligations and understandings on the user. The user is granted the right, without any fee or cost, to use, copy, modify, alter, enhance and distribute this software, and any derivative works thereof, and its supporting documentation for any purpose whatsoever, provided that this entire notice appears in all copies of the software, derivative works and supporting documentation. Further, UCAR requests that the user credit UCAR/Unidata in any publications that result from the use of this software or in any product that includes this software, although this is not an obligation. The names UCAR and/or Unidata, however, may not be used in any advertising or publicity to endorse or promote any products or commercial entity unless specific written permission is obtained from UCAR/Unidata. The user also understands that UCAR/Unidata is not obligated to provide the user with any support, consulting, training or assistance of any kind with regard to the use, operation and performance of this software nor to provide the user with any updates, revisions, new versions or "bug fixes." THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "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 UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. Richard Weed's Fortran 2003 code is released under this license agreement. ! This software is released under the Apache 2.0 Open Source License. The ! full text of the License can be viewed at : ! ! http:www.apache.org/licenses/LICENSE-2.0.html ! ! The author grants to UCAR the right to revise and extend the software ! without restriction. However, the author retains all copyrights and ! intellectual property rights explicit or implied by the Apache license */ netcdf-fortran-4.6.3+ds/test-driver0000775000175000017500000001214415205004070017417 0ustar alastairalastair#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2025-06-18.21; # UTC # Copyright (C) 2011-2025 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <. GNU Automake home page: . General help using GNU software: . END } test_name= # Used for reporting. log_file= # Where to save the output of the test script. trs_file= # Where to save the metadata of the test run. expect_failure=no color_tests=no collect_skipped_logs=yes enable_hard_errors=yes while test $# -gt 0; do case $1 in --help) print_usage; exit $?;; --version) echo "test-driver (GNU Automake) $scriptversion"; exit $?;; --test-name) test_name=$2; shift;; --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; --color-tests) color_tests=$2; shift;; --collect-skipped-logs) collect_skipped_logs=$2; shift;; --expect-failure) expect_failure=$2; shift;; --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; *) break;; esac shift done missing_opts= test x"$test_name" = x && missing_opts="$missing_opts --test-name" test x"$log_file" = x && missing_opts="$missing_opts --log-file" test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" if test x"$missing_opts" != x; then usage_error "the following mandatory options are missing:$missing_opts" fi if test $# -eq 0; then usage_error "missing argument" fi if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. grn='' # Green. lgn='' # Light green. blu='' # Blue. mgn='' # Magenta. std='' # No color. else red= grn= lgn= blu= mgn= std= fi do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' trap "st=129; $do_exit" 1 trap "st=130; $do_exit" 2 trap "st=141; $do_exit" 13 trap "st=143; $do_exit" 15 # Test script is run here. We create the file first, then append to it, # to ameliorate tests themselves also writing to the log file. Our tests # don't, but others can (automake bug#35762). : >"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=$collect_skipped_logs;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" # time-stamp-format: "%Y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: netcdf-fortran-4.6.3+ds/libnetcdff.settings.in0000664000175000017500000000235315205004070021511 0ustar alastairalastair# NetCDF Fortran Configuration Summary ============================== # General ------- Library Version: @PACKAGE_VERSION@ Configured On: @CONFIG_DATE@ Host System: @host_cpu@-@host_vendor@-@host_os@ Build Directory: @abs_top_builddir@ Install Prefix: @prefix@ # Compiling Options ----------------- Fortran Compiler: @FC_VERSION@ FFLAGS: @FFLAGS@ LDFLAGS: @LDFLAGS@ C Compiler: @CC@ CPPFLAGS: @CPPFLAGS@ CFLAGS: @CFLAGS@ Shared Library: @enable_shared@ Static Library: @enable_static@ Extra libraries: @LIBS@ # Features -------- F03: @HAS_F03@ Dap Support: @HAS_DAP@ Logging Support: @HAS_LOGGING@ NetCDF-2 API: @HAS_NC2@ NetCDF-4 API: @HAS_NC4@ CDF5 Support: @HAS_CDF5@ Parallel IO: @HAS_PARALLEL@ NetCDF4 Parallel IO: @HAS_NC4_PARALLEL@ PnetCDF Parallel IO: @HAS_PNETCDF@ SZIP Write Support: @HAS_SZIP_WRITE@ Zstandard Support: @HAS_ZSTD@ @NF_HDF5_PLUGIN_PATH@ Quantize: @HAS_QUANTIZE@ netcdf-fortran-4.6.3+ds/RELEASE_NOTES.md0000664000175000017500000007404115205004070017577 0ustar alastairalastairRelease Notes {#nf_release_notes} ============================== \brief Release notes file for the netcdf-fortran package. This file contains a high-level description of this package's evolution. Entries are in reverse chronological order (most recent first). ## 4.6.3 - May 20, 2026 * netCDF-C: 4.9.2+ Note: to enable `libzstd` support, you need to satisfy the following requirements. 1. `libnetcdf.so` installed with `libzstd` support. * The environmental variable `HDF5_LIBRARY_PATH` needs to be specified to the same location used when installing `libnetcdf`. This can be determined after-the-fact using `nc-config --plugindir`. * Y u can pass `--disable-zstandard-plugin`. ## 4.6.2 - March 26, 2025 ### Requirements * netCDF-C: 4.9.2+ Note: to enable `libzstd` support, you need to satisfy the following requirements. 1. `libnetcdf.so` installed with `libzstd` support. 2. The environmental variable `HDF5_LIBRARY_PATH` needs to be specified to the same location used when installing `libnetcdf`. This can be determined after-the-fact using `nc-config --plugindir`. ### What's Changed * Fixed an issue in `ftst` tests which was the result of an incompatibility with netCDF-C `v4.9.3` * nf-config uses install libdir variable by @WardF in https://github.com/Unidata/netcdf-fortran/pull/418 * Remove autoconf-generated distribution files by @WardF in https://github.com/Unidata/netcdf-fortran/pull/420 * Check for either the old or new default values in ftst_vars.F by @WardF in https://github.com/Unidata/netcdf-fortran/pull/421 * Attempt to fix a pernicious issue where some systems complain about no implicit type. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/429 * Use install directory that matches package name by @islas in https://github.com/Unidata/netcdf-fortran/pull/428 * fix intents and variable types in interfaces by @rwirth in https://github.com/Unidata/netcdf-fortran/pull/424 * Clarify 'netCDF-C 4.7.4 or greater required' message. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/430 * Clarify message when failing with 'requires v4.7.4' error. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/431 * CI: use modern actions and cmake calls by @scivision in https://github.com/Unidata/netcdf-fortran/pull/433 * CMake remove deprecated syntax by @scivision in https://github.com/Unidata/netcdf-fortran/pull/432 * CMake: Fix some issues when linking against netcdf-C by @ZedThree in https://github.com/Unidata/netcdf-fortran/pull/435 * Use consistent `nf-config.in` template for both CMake/autotools by @ZedThree in https://github.com/Unidata/netcdf-fortran/pull/434 * Remove vestigial files that shouldn't have been included in version control by @WardF in https://github.com/Unidata/netcdf-fortran/pull/422 * Fix Stack Overflow problem by moving large arrays from the stack to the heap by @Roy-KC in https://github.com/Unidata/netcdf-fortran/pull/410 * Fix failure in ftst by @WardF in https://github.com/Unidata/netcdf-fortran/pull/460 * Tweak docker GitHub actions.wif by @WardF in https://github.com/Unidata/netcdf-fortran/pull/464 ## New Contributors * @islas made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/428 * @rwirth made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/424 * @Roy-KC made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/410 **Full Changelog**: https://github.com/Unidata/netcdf-fortran/compare/v4.6.1...v4.6.2 ### 4.6.2-rc1 - October 21, 2024 ### Requirements * netCDF-C: 4.9.2+ Note: to enable `libzstd` support, you need to satisfy the following requirements. 1. `libnetcdf.so` installed with `libzstd` support. 2. The environmental variable `HDF5_LIBRARY_PATH` needs to be specified to the same location used when installing `libnetcdf`. This can be determined after-the-fact using `nc-config --plugindir`. ### What's Changed ## 4.6.1 - May 19, 2023 ### Requirements * netCDF-C: 4.9.0+ Note: to enable `libzstd` support, you need to satisfy the following requirements. 1. `libnetcdf.so` installed with `libzstd` support. 2. The environmental variable `HDF5_LIBRARY_PATH` needs to be specified to the same location used when installing `libnetcdf`. This can be determined after-the-fact using `nc-config --plugindir`. ### What's Changed * Add quantize constants and test by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/383 * Merge v4.6.0-wellspring.wif back upstream into `main` by @WardF in https://github.com/Unidata/netcdf-fortran/pull/374 * delete unuseful code by @DragonPara in https://github.com/Unidata/netcdf-fortran/pull/377 * Adding MacOS tests. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/363 * Newbranch by @LeonABenjamin in https://github.com/Unidata/netcdf-fortran/pull/336 ## New Contributors * @DragonPara made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/377 **Full Changelog**: https://github.com/Unidata/netcdf-fortran/compare/v4.6.0...v4.9.1 ## 4.6.0 - July 29, 2022 ### Requirements * netCDF-C: 4.9.0+ ### Notable Changes * We've added API support to take advantage of the Quantize functionality provided by libnetcdf 4.9.0+. [See this conversation](https://github.com/Unidata/netcdf-c/issues/1548) for more information. * We've added API support to take advantage of ZStandard compression functionality, [as described here](https://github.com/Unidata/netcdf-c/issues/2173). Note that you can suppress this with the new options `--disable-zstandard-plugin` (for `configure`) and `-DDISABLE_ZSTANDARD_PLUGIN` (for `cmake`). ### Other Changes * Merge 4.5.4 changes back upstream by @WardF in https://github.com/Unidata/netcdf-fortran/pull/319 * Fix error in cmake-generated nf-config by @WardF in https://github.com/Unidata/netcdf-fortran/pull/322 * Wire in new tests in to PR #294 by @WardF in https://github.com/Unidata/netcdf-fortran/pull/325 * Update of netcdf f90 get interface to handle arrays with total size >… by @m214089 in https://github.com/Unidata/netcdf-fortran/pull/294 * Rationalize CMake minimum version to 3.12 by @scivision in https://github.com/Unidata/netcdf-fortran/pull/323 * Fix hdf5 version mismatch. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/331 * adding v2 api test by @WardF in https://github.com/Unidata/netcdf-fortran/pull/332 * adding v2 api test by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/330 * set 'CMAKE_POSITION_INDEPENDENT_CODE ON' for shared lib by @MuellerSeb in https://github.com/Unidata/netcdf-fortran/pull/334 * bug fix: when all parallel features are disabled in netcdf-c by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/352 * Updating github actions. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/362 * Untangle conflicts caused by PR merge/reversions by @WardF in https://github.com/Unidata/netcdf-fortran/pull/324 * Gh318.wif by @WardF in https://github.com/Unidata/netcdf-fortran/pull/364 * "Add quantize feature to F77 and F90 APIs, with tests and documentation" by @WardF in https://github.com/Unidata/netcdf-fortran/pull/318 * convert to F90 and F by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/365 * Fix f90tst_parallel_compressed.F90 extension in CMake builds by @ArchangeGabriel in https://github.com/Unidata/netcdf-fortran/pull/339 * protect quantize code with preprocessor directives by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/366 * initialize value_grid_yt_loc to zeros by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/357 * CI improvements: don't try to cache netcdf-c main build, add parallel I/O testing, and add testing with HDF5-1.12.2 by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/351 * fix warning of status may be used uninitialized by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/356 * check if netcdf4 is enabled in netcdf-c by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/353 * Github 292 by @WardF in https://github.com/Unidata/netcdf-fortran/pull/368 * Update nf_fortv2.90 by @LeonABenjamin in https://github.com/Unidata/netcdf-fortran/pull/292 * CMake build: fix handling of run_f90_par_test.sh by @ArchangeGabriel in https://github.com/Unidata/netcdf-fortran/pull/341 * Add support for zstandard compression by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/367 * HDF5_PLUGIN_DIR verbosity by @WardF in https://github.com/Unidata/netcdf-fortran/pull/372 ## New Contributors * @m214089 made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/294 * @scivision made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/323 * @MuellerSeb made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/334 * @ArchangeGabriel made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/339 * @LeonABenjamin made their first contribution in https://github.com/Unidata/netcdf-fortran/pull/292 ## 4.5.4 - January 7, 2022 ### Requirements * netCDF-C: 4.7.4+ ### Changes * Various bug fixes and updates. * Now allow setting of parallel I/O test launcher to something other than mpiexec with the --with-mpiexec= option on configure. See [Github #262](https://github.com/Unidata/netcdf-fortran/issues/262). * Added nf90_inq_format to the F90 API. See [Github #263](https://github.com/Unidata/netcdf-fortran/issues/263). * Avoid compilation failure with -Werror=implicit-function-declaration by @opoplawski in https://github.com/Unidata/netcdf-fortran/pull/57 * F90 parallel wr2 test: collective writes by @marshallward in https://github.com/Unidata/netcdf-fortran/pull/56 * got doxygen build working by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/77 * Updates to netCDF fortran in support of the upcoming release. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/79 * Github #67 plus a couple other small changes by @WardF in https://github.com/Unidata/netcdf-fortran/pull/83 * CMakeLists.txt: check for the C types that match Fortran ones. by @multiplemonomials in https://github.com/Unidata/netcdf-fortran/pull/67 * check error string for prefix 'Unknown Error' only by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/87 * Combine multiple pull requests by @WardF in https://github.com/Unidata/netcdf-fortran/pull/93 * consistent error out for nf_test.F and nf03_test.F by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/88 * add missing cdf2 and cdf5 flags by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/89 * add dependency of relax_coord_bound set in netcdf-c by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/90 * Updated to travis testing for netcdf-fortran. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/95 * Add parallel I/O tests for PnetCDF and serial I/O for CDF5 files by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/91 * Update CMake Options by @WardF in https://github.com/Unidata/netcdf-fortran/pull/97 * Fix use of diskless in Fortran test. by @DennisHeimbigner in https://github.com/Unidata/netcdf-fortran/pull/98 * Oops wrong flag for nc_open_mem by @DennisHeimbigner in https://github.com/Unidata/netcdf-fortran/pull/99 * fixed configure.ac for static builds by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/102 * Add filter support to the netcdf-fortram API by @DennisHeimbigner in https://github.com/Unidata/netcdf-fortran/pull/105 * Fix compiler issue on OSX by @WardF in https://github.com/Unidata/netcdf-fortran/pull/110 * remove legacy cfortran.h build, change valgrind use by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/120 * Fix some build issues (remove unused scripts, get make -j working, remove unused option, stop setting FC in configure) by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/116 * Detect inability to link to netcdf-c library at configure time by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/124 * fixed spacing to accommodate punch cards, fixed parallel builds in example dirs, added comments to build files by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/125 * bugfix in nf-config.in by @aerorahul in https://github.com/Unidata/netcdf-fortran/pull/137 * Remove unused files, fix detection of parallel I/O by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/135 * Next round of clean up of build system, also fixed some warnings and added some docs by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/145 * fix cache preemption issue, also some warnings by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/149 * Fix parallel I/O test not running, remove nfconfig.inc. by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/156 * Fix 2 broken parallel tests, clean out some remaining support for legacy cfortran build and upper-case mod file names by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/162 * Fix for remaining parallel I/O tests by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/163 * starting to eliminate duplicate tests by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/166 * next round of test cleanup by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/167 * Moving the rest of F77 API netcdf-4 tests to nf_test4 by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/168 * move neetcdf-4 f90 API tests to nf03_test4 by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/170 * More test cleanup, also adding CDF5 to F90 API constants by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/173 * More test work by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/175 * Final round of test cleanup by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/176 * fix dependency tracking in fortran directory, enabling parallel (make -j) builds by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/178 * fixing some dependencies by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/179 * Correct linking issue on OSX by @WardF in https://github.com/Unidata/netcdf-fortran/pull/171 * Get filter test to work with Fortran by @DennisHeimbigner in https://github.com/Unidata/netcdf-fortran/pull/180 * fix compile error: NC_CLASSIC_MODEL by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/189 * duplicated module_netcdf4_nc_interfaces.$(OBJEXT) by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/186 * Add $(srcdir) when doing VPATH build by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/187 * Support 64-bit integer memory type by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/190 * Use of "stop retval" is not portable by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/188 * added logging source to autotools build by @edhartnett in https://github.com/Unidata/netcdf-fortran/pull/191 * 64-bit integer: missing the case for --disable-fortran-type-check by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/195 * Check FC supports MPI-IO at configure time by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/194 * remove an unused variable 'counter' by @wkliao in https://github.com/Unidata/netcdf-fortran/pull/193 * Merge selected changes from v4.5.0 upstream. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/196 * v4.5.1 wellspring.wif by @WardF in https://github.com/Unidata/netcdf-fortran/pull/197 * Fixes distribution of cmake-based large file tests by @WardF in https://github.com/Unidata/netcdf-fortran/pull/199 * Correct issue when building against nc3-only libnetcdf by @WardF in https://github.com/Unidata/netcdf-fortran/pull/201 * Merge back upstream to master by @WardF in https://github.com/Unidata/netcdf-fortran/pull/202 * Fixes an issue with Intel Compiler 19 by @WardF in https://github.com/Unidata/netcdf-fortran/pull/204 * Spelling fix in docs for cache_preemption by @mathomp4 in https://github.com/Unidata/netcdf-fortran/pull/206 * Correct failure to compile on some mpi systems. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/210 * Turn off parallel builds for this directory until a more suitable sol… by @WardF in https://github.com/Unidata/netcdf-fortran/pull/211 * support nc_def_var_szip in Fortran APIs by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/216 * correctly detect absence of szip write capability by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/220 * Allow installing Fortran modules into alternate location by @opoplawski in https://github.com/Unidata/netcdf-fortran/pull/224 * Fix a warning in v2 code by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/226 * Now run szip test from CMake build, if szip write capability is present in netcdf-c by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/227 * Adds support and test for compact storage by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/231 * Fix warnings and documentation in examples by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/234 * Add missing build dependencies for Fortran by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/235 * fixed warning in f90tst_io.f90 by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/237 * Removed reference to NF90_TYPE in documentation by @WardF in https://github.com/Unidata/netcdf-fortran/pull/230 * Fix parallel builds by @skosukhin in https://github.com/Unidata/netcdf-fortran/pull/238 * Tests to confirm get/set var cache working in F77 and F90 APIs by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/239 * Autotools build improvements by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/245 * Merge 217 by @WardF in https://github.com/Unidata/netcdf-fortran/pull/243 * commented out cache value test because it doesnt work on parallel by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/254 * Change error message to mention LIBS and static builds by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/257 * Install CMake config/target files by @ZedThree in https://github.com/Unidata/netcdf-fortran/pull/259 * Add summary file libnetcdff.settings by @WardF in https://github.com/Unidata/netcdf-fortran/pull/261 * CMake: Fail if nc_def_var_szip missing by @ZedThree in https://github.com/Unidata/netcdf-fortran/pull/260 * Merge wellspring back upstream by @WardF in https://github.com/Unidata/netcdf-fortran/pull/250 * testing parallel writes just as NOAA does them by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/265 * Fix missing file by @WardF in https://github.com/Unidata/netcdf-fortran/pull/267 * Added missing nf90_inq_format() function by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/273 * Add CC, CFLAGS, CPPFLAGS to build summary, remove AM_LDFLAGS by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/271 * Allow user to select different parallel I/O launcher at configure by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/272 * Windows compile by @brucenairn in https://github.com/Unidata/netcdf-fortran/pull/268 * Tweak Travis-CI Settings by @WardF in https://github.com/Unidata/netcdf-fortran/pull/282 * Fix for nf-config using autotools by @mathomp4 in https://github.com/Unidata/netcdf-fortran/pull/281 * Fix typo in readme by @mflehmig in https://github.com/Unidata/netcdf-fortran/pull/290 * Add quantize feature to F77 and F90 APIs, with tests and documentation by @edwardhartnett in https://github.com/Unidata/netcdf-fortran/pull/304 * Revert "Add quantize feature to F77 and F90 APIs, with tests and docu… by @WardF in https://github.com/Unidata/netcdf-fortran/pull/305 * First pass at adding github actions support. by @WardF in https://github.com/Unidata/netcdf-fortran/pull/297 * Docs migration by @oxelson in https://github.com/Unidata/netcdf-fortran/pull/307 * Add quantize feature to F77 and F90 APIs, with tests and documentation by @WardF in https://github.com/Unidata/netcdf-fortran/pull/306 * Attempt to correct an issue being observed under linux and OSX with gfortran by @WardF in https://github.com/Unidata/netcdf-fortran/pull/316 * Revert "Add quantize feature to F77 and F90 APIs, with tests and documentation" by @WardF in https://github.com/Unidata/netcdf-fortran/pull/317 ## 4.5.3 - June 2, 2020 ### Requirements * netCDF-C: 4.7.4+ ### Changes * Adds a `libnetcdff.settings` file similar to libnetcdf.settings. See [Github #256](https://github.com/Unidata/netcdf-fortran/issues/256) for more information. * Added support for gcc/gfortran 10. The `-fallow_argument_mismatch` flag is passed to the underlying compiler when the flag is found to be supported. This change has been added to the `autotools` and `cmake` based builds. See [GitHub #212](https://github.com/Unidata/netcdf-fortran/issues/212) for more information. * Added support for HDF5 compact storage. See [Github #213](https://github.com/Unidata/netcdf-fortran/issues/207). * Added support for creating netCDF/HDF5 files with szip compression with new functions nf90_def_var_szip() and nf_def_var_szip(). See [Github #213](https://github.com/Unidata/netcdf-fortran/issues/213). * Corrected an issue where parallel netCDF-Fortran builds would fail despite the presense of MPI libraries/compiler/infrastructure. See [Github #208](https://github.com/Unidata/netcdf-fortran/issues/208) for more information. ## 4.5.2 - September 18, 2019 ### Requirements * netCDF-C: 4.6.0 or greater ### Changes * Corrected an issue where netCDF-Fortran would fail to build correctly on some platforms when the underlying `libnetcdf` lacked netCDF-4 support. See [GitHub #200](https://github.com/Unidata/netcdf-fortran/issues/200) for more information. * Corrected an issue where cmake-specific large file tests weren't being captured by `make dist`. See [Github #198](https://github.com/Unidata/netcdf-fortran/issues/198) for more details. ## 4.5.1 - September 4, 2019 ### Requirements * netCDF-C: 4.6.0 or greater ### Changes * Corrected an issue where a cmake-specific file wasn't being captured by `make dist`. * Corrected an issue where nf-config wasn't being generated by cmake-based builds. Corrected a couple of other missing files. See [Github #108](https://github.com/Unidata/netcdf-fortran/issues/108) for more information. ## 4.5.0 - August 28, 2019 ### Requirements * netCDF-C: 4.6.0 or greater ### Changes * Moved netCDF classic F90 API tests to new subdirectory nf03_test. * Moved netCDF-4 F77 API tests to new subdirectory nf_test4. * Moved netCDF-4 F90 API tests to new subdirectory nf03_test4. * Fixed bug which caused parallel I/O tests to not be run. See [#155](https://github.com/Unidata/netcdf-fortran/issues/155) and [#157](https://github.com/Unidata/netcdf-fortran/issues/157). * Fixed bug in the setting of file cache preemption for netCDF-4 files. See [#146](https://github.com/Unidata/netcdf-fortran/issues/146). * Removed many near-duplicate tests files, now they are created at build time with sed. See [#165](https://github.com/Unidata/netcdf-fortran/issues/165). * Removed no longer needed configure options --enable-dll (see [#161](https://github.com/Unidata/netcdf-fortran/issues/161)), `--enable-extra-tests` (see [#114](https://github.com/Unidata/netcdf-fortran/issues/114)), `--enable-extra-example-tests` (see [#126](https://github.com/Unidata/netcdf-fortran/issues/126)), and `--enable-valgrind` (see [#118](https://github.com/Unidata/netcdf-fortran/issues/118)). * Moved handling of F77 man page to the docs directory. See [#141](https://github.com/Unidata/netcdf-fortran/issues/141). ## 4.4.5 - Release Jan 9, 2019 ### Requirements * netCDF-C: 4.6.0 or greater ### Changes * Removed legacy cfortran.h based build, which allowed F77-only compilers to build the F77 API (only). Since all compilers now support F2003, we can use F2003 features to build the F77 API. Full backwards-compatibility with all existing F77 API code is assured. See [#85](https://github.com/Unidata/netcdf-fortran/issues/85) for more information. * Added an option in cmake builds, `BUILD_EXAMPLES`, `TRUE` by default. When disabled, the examples will not be built. See [#93](https://github.com/Unidata/netcdf-fortran/issues/92) for more information. * Misc. Bugfixes to bring netCDF-Fortran in line with the features in netCDF-C. * Updated CMakeLists.txt to check for C types that match Fortran ones. See [GitHub #67](https://github.com/Unidata/netcdf-fortran/pull/67) for more information. ## 4.4.4 Released May 13, 2016 * Corrected an issue where cmake-based builds specifying `USE_LOGGING` were not seeing expected behavior. The issue was reported, and subsequently fixed, by Neil Carlson at Los Alamos Nat'l Laboratory. See [Github Pull Request #44](https://github.com/Unidata/netcdf-fortran/pull/44) for more information. * Integrated improvements provided by Richard Weed. For a *complete* list of modifications, see the file `docs/netcdf_fortran_4.4.2dev_notes_RW.pdf`. **It is highly detailed and worth reading!** The highlights of the improvements are as follows: * Explicit dependencies on `NC_MAX_DIM` constant for arrays has been removed and replaced with dynamically-allocated arrays. * Support for `nc_open_mem()` in the C library, allowing for the creation of "in memory" files. * General clean up. ## 4.4.3 Released 2016-01-20 * Corrected a bug which would return a false-positive in `nf_test` when using netCDF-C `4.4.0`. * Updated the `cfortran.doc` license document for the `cfortran.h` library. The most recent version was pulled from http://cfortran.sourceforge.net. The previous version did not reflect that the author had released cfortran under the LGPL. See [Github Issue 27](https://github.com/Unidata/netcdf-fortran/issues/27) for more information. ## 4.4.2 Released 2015-02-02 * Added infrastructure to support the new `netcdf-c` option, `ENABLE_REMOTE_FORTRAN_BOOTSTRAP`. * Incorporated changes submitted by Nico Schlomer which extends the cmake compatibility between `netcdf-c` and `netcdf-fortran`. * Incorporated a patch submitted by Thomas Jahns which fixed `FC` being unconditionally overwritten by `F77` when `Fortran 90` was disabled. ## 4.4.1 Released 2014-09-09 * No significant changes from RC1. ### 4.4.1-RC1 Released 2014-08-05 * Added a new variable for cmake-based builds, `NC_EXTRA_DEPS`. Use this to specify additional dependencies when linking against a static `netcdf-c` library, e.g. ```.fortran netcdf-fortran/build$ cmake .. -DNC_EXTRA_DEPS="-lhdf5 -lhdf5_hl -lcurl" ``` * Fixed to build correctly with netCDF-3-only C library, for example C library configured with --disable-netcdf-4 (R. Weed). ## 4.4 Released 2014-07-08 * For 32-bit platforms fixed integer fill parameters, initialized potentially unitialized variables, and provided some missing defaults (R. Weed). * Fixed CMake builds on 32-bit platforms. * Added new `inq_path` and `rename_grps` functions analogous to corresponding C functions. Added associated tests (R. Weed). * Added support for NF\_MPIIO, `NF_MPIPOSIX`, `NF_PNETCDF` flags and `NF_FILL_UINT`. (R. Weed) * Fixed potential bug in attribute functions for integer values when Fortran `INTEGER*1` or `INTEGER*2` types are the same size as C long (R. Weed). * Added test for compiler support of Fortran 2008 `ISO_FORTRAN_ENV` additions and TS29113 standard extension. * Fixed `C_PTR_DIFF_T` issue reported by Orion Poplowski (R. Weed). ### 4.4-rc1 Released 2013-10-06 * Added doxygen-generated documentation, using the `--enable-doxygen` and `-DENABLE_DOXYGEN` flags for autotools and cmake-based builds, respectively. * Added missing error codes for DAP and some netCDF-4 errors * Fixed some documentation for F77 API, added make rule for creating netcdf-f77 HTML files. ### 4.4-beta5 Released 2013-08-27 * Added configuration files to github distribution. ### 4.4-beta4 * Moved to GitHub from Subversion, the location of the new GitHub repository is at: http://github.com/Unidata/netCDF-Fortran * Parallel-build portability fixes, particularly for OpenMPI and gcc/gfortran-4.8.x on the Mac. Also added test from Reto Stöckli for NCF-250 bug, demonstrating it was fixed in previous commit. * Add support for NF\_MPIIO, NF\_MPIPOSIX, NF\_PNETCDF, and NF\_FILL\_UINT in the data files. * Add support for nf\_inq\_path. * Add a pre-processor macro that can be used to bypass the home-brew C_PTRDIFF_T definition and use the standard one for compilers that support it. * Fix a potential bug in nf\_attio to call the \_long version of some puts/gets instead of the \_int version. These were inside INT1\_IS\_C\_LONG and INT2\_IS\_C\_LONG ifdef blocks so they would have only showed up when those macros were true. ### 4.4-beta3 Released 2012-12-07 * Fixed bug that "make -j check" fails, but "make check" works fine. * Fixed build problems resulting from syncing with separate C distribution. * Synchronize with all changes made to version 4.2 since ts release. ### 4.4-beta2 Released 2012-06-29 * Made handling of --disable-f03 more transparent. * Fixed adding flags for parallel I/O for MPI from David Warren. * Removed all the old C code that's not needed for this separate distribution. * Inadvertently broke the build until syncing with C distribution in later beta release. ### 4.4-beta1 Released 2012-03-02 * `Fortran 2003 Support` Version 4.4 is the first release to support fortran 2003 and to use the ISO C Bindings available in fortran 2003 to replace the older C code wrappers. Congratulations and thanks to Richard Weed at Mississippi State University, who is the author of new code. See the file `README_F03_MODS` for a more complete description of the changes. Many changes to the build structure have been made at the same time as the new 2003 code has been inserted. As part of the fortran 2003 refactor, the directory structure has been significantly modified. All the previous F90 C wrapper code has been moved to the "libsrc" directory. All of the fortran code has been moved to the "fortran" directory. The directories names F77 and F90 have been removed. The most important consequence of this refactor is that pure Fortran77 compilers are no longer supported. It is assumed that the compiler supports at least Fortran 90 and also Fortran 77. If it also supports the ISO C Bindings, then the new 2003 code is used instead of the older C wrappers. netcdf-fortran-4.6.3+ds/acinclude.m40000664000175000017500000004225415205004070017417 0ustar alastairalastairdnl $Id: acinclude.m4,v 1.34 2009/10/14 21:12:01 dmh Exp $ dnl UD macros for netcdf configure dnl Convert a string to all uppercase. dnl define([uppercase], [translit($1, abcdefghijklmnopqrstuvwxyz, ABCDEFGHIJKLMNOPQRSTUVWXYZ)]) dnl dnl Check for an nm(1) utility. dnl AC_DEFUN([UD_PROG_NM], [ case "${NM-unset}" in unset) AC_CHECK_PROGS(NM, nm, nm) ;; *) AC_CHECK_PROGS(NM, $NM nm, nm) ;; esac AC_MSG_CHECKING(nm flags) case "${NMFLAGS-unset}" in unset) NMFLAGS= ;; esac AC_MSG_RESULT($NMFLAGS) AC_SUBST(NMFLAGS) ]) dnl Check for a Fortran type equivalent to a netCDF type. dnl dnl UD_CHECK_FORTRAN_NCTYPE(forttype, possibs, nctype) dnl AC_DEFUN([UD_CHECK_FORTRAN_NCTYPE], [ AC_MSG_CHECKING(for Fortran-equivalent to netCDF \"$3\") for type in $2; do cat >conftest.f <conftest.f <conftest.c < #include void main() { $3 values[[]] = {0, $4, 0, $5, 0}; $3 minval, maxval; void $FCALLSCSUB($3*, $3*, $3*); $FCALLSCSUB(values, &minval, &maxval); exit(!(minval == $4 && maxval == $5)); } EOF doit='$CC -o conftest ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} conftest.c conftestf.o ${LIBS}' if AC_TRY_EVAL(doit); then doit=./conftest if AC_TRY_EVAL(doit); then AC_MSG_RESULT($2) $1=$2 AC_DEFINE_UNQUOTED($1,$2, [take a guess]) else AC_MSG_RESULT(no equivalent type) unset $1 fi else AC_MSG_ERROR(Could not compile-and-link conftest.c and conftestf.o) fi else AC_MSG_ERROR(Could not compile conftest.f) fi rm -f conftest* ]) dnl Check for a Fortran data type. dnl dnl UD_CHECK_FORTRAN_TYPE(varname, ftypes) dnl AC_DEFUN([UD_CHECK_FORTRAN_TYPE], [ for ftype in $2; do AC_MSG_CHECKING(for Fortran \"$ftype\") cat >conftest.f <conftest.f <<\EOF call sub() end EOF doit='$FC -c ${FFLAGS} conftest.f' if AC_TRY_EVAL(doit); then FCALLSCSUB=`$NM $NMFLAGS conftest.o | awk ' /SUB_/{print "SUB_";exit} /SUB/ {print "SUB"; exit} /sub_/{print "sub_";exit} /sub/ {print "sub"; exit}'` case "$FCALLSCSUB" in '') AC_MSG_ERROR(not found) ;; *) AC_MSG_RESULT($FCALLSCSUB) ;; esac else AC_MSG_ERROR(Could not compile conftest.f) fi rm -f conftest* ;; esac ]) dnl Check for a C type equivalent to a Fortran type. dnl dnl UD_CHECK_CTYPE_FORTRAN(ftype, ctypes, fmacro_root) dnl AC_DEFUN([UD_CHECK_CTYPE_FORTRAN], [ cat >conftestf.f <conftest.c < void $FCALLSCSUB($ctype values[[4]]) { exit(values[[1]] != -2 || values[[2]] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if AC_TRY_EVAL(doit); then doit='$FC ${FFLAGS} -c conftestf.f' if AC_TRY_EVAL(doit); then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if AC_TRY_EVAL(doit); then doit=./conftest if AC_TRY_EVAL(doit); then AC_MSG_RESULT(yes) cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` AC_DEFINE_UNQUOTED(NF_$3[]_IS_C_$cname, [1], [fortran to c conversion]) break else AC_MSG_RESULT(no) fi else AC_MSG_ERROR(Could not link conftestf.o and conftest.o) fi else AC_MSG_ERROR(Could not compile conftestf.f) fi else AC_MSG_ERROR(Could not compile conftest.c) fi done rm -f conftest* ]) dnl Get information about Fortran data types. dnl AC_DEFUN([UD_FORTRAN_TYPES], [ # AC_REQUIRE([UD_PROG_FC]) case "$FC" in '') ;; *) AC_REQUIRE([UD_CHECK_FCALLSCSUB]) dnl UD_CHECK_FORTRAN_TYPE(NF_INT1_T, byte integer*1 "integer(kind(1))") dnl UD_CHECK_FORTRAN_TYPE(NF_INT2_T, integer*2 "integer(kind(2))") UD_CHECK_FORTRAN_TYPE(NF_INT1_T, byte integer*1 "integer(kind=1)" "integer(selected_int_kind(2))") UD_CHECK_FORTRAN_TYPE(NF_INT2_T, integer*2 "integer(kind=2)" "integer(selected_int_kind(4))") UD_CHECK_FORTRAN_TYPE(NF_INT8_T, integer*8 "integer(kind=8)" "integer(selected_int_kind(18))") case "${NF_INT1_T}" in '') ;; *) UD_CHECK_CTYPE_FORTRAN($NF_INT1_T, "signed char", INT1) UD_CHECK_CTYPE_FORTRAN($NF_INT1_T, "short", INT1) UD_CHECK_CTYPE_FORTRAN($NF_INT1_T, "int", INT1) UD_CHECK_CTYPE_FORTRAN($NF_INT1_T, "long", INT1) ;; esac case "${NF_INT2_T}" in '') ;; *) UD_CHECK_CTYPE_FORTRAN($NF_INT2_T, short, INT2) UD_CHECK_CTYPE_FORTRAN($NF_INT2_T, int, INT2) UD_CHECK_CTYPE_FORTRAN($NF_INT2_T, long, INT2) ;; esac case "${NF_INT8_T}" in '') ;; *) UD_CHECK_CTYPE_FORTRAN($NF_INT8_T, "short", INT8) UD_CHECK_CTYPE_FORTRAN($NF_INT8_T, "int", INT8) UD_CHECK_CTYPE_FORTRAN($NF_INT8_T, "long long", INT8) ;; esac UD_CHECK_CTYPE_FORTRAN(integer, int long, INT) UD_CHECK_CTYPE_FORTRAN(real, float double, REAL) UD_CHECK_CTYPE_FORTRAN(doubleprecision, double float, DOUBLEPRECISION) dnl UD_CHECK_FORTRAN_NCTYPE(NCBYTE_T, byte integer*1 integer, byte) UD_CHECK_FORTRAN_NCTYPE(NCBYTE_T, byte integer*1 "integer(kind=1)" "integer(selected_int_kind(2))" integer, byte) dnl UD_CHECK_FORTRAN_NCTYPE(NCSHORT_T, integer*2 integer, short) UD_CHECK_FORTRAN_NCTYPE(NCSHORT_T, integer*2 "integer(kind=2)" "integer(selected_int_kind(4))" integer, short) dnl UD_CHECK_FORTRAN_CTYPE(NF_SHORT_T, $NCSHORT_T, short, SHRT_MIN, SHRT_MAX) dnl UD_CHECK_FORTRAN_NCTYPE(NCLONG_T, integer*4 integer, long) dnl UD_CHECK_FORTRAN_CTYPE(NF_INT_T, integer, int, INT_MIN, INT_MAX) dnl UD_CHECK_FORTRAN_NCTYPE(NCFLOAT_T, real*4 real, float) dnl UD_CHECK_FORTRAN_CTYPE(NF_FLOAT_T, $NCFLOAT_T, float, FLT_MIN, FLT_MAX) dnl UD_CHECK_FORTRAN_NCTYPE(NCDOUBLE_T, real*8 doubleprecision real, double) dnl UD_CHECK_FORTRAN_CTYPE(NF_DOUBLE_T, $NCDOUBLE_T, double, DBL_MIN, DBL_MAX) ;; esac ]) AC_DEFUN([AX_F90_MODULE_FLAG],[ AC_CACHE_CHECK([fortran 90 modules inclusion flag], ax_cv_f90_modflag, [AC_LANG_PUSH(Fortran) i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i AC_COMPILE_IFELSE([AC_LANG_SOURCE([module conftest_module contains subroutine conftest_routine write(*,'(a)') 'gotcha!' end subroutine conftest_routine end module conftest_module]) ],[],[]) cd .. ax_cv_f90_modflag="not found" 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" AC_COMPILE_IFELSE([AC_LANG_SOURCE([program conftest_program use conftest_module call conftest_routine end program conftest_program]) ],[ax_cv_f90_modflag="$ax_flag"],[]) FCFLAGS="$ax_save_FCFLAGS" fi done rm -fr tmpdir_$i if test "$ax_flag" = "not found" ; then AC_MSG_ERROR([unable to find compiler flag for modules inclusion]) fi AC_LANG_POP(Fortran) ])]) # =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html # =========================================================================== # # SYNOPSIS # # AX_VALGRIND_DFLT(memcheck|helgrind|drd|sgcheck, on|off) # AX_VALGRIND_CHECK() # # DESCRIPTION # # AX_VALGRIND_CHECK checks whether Valgrind is present and, if so, allows # running `make check` under a variety of Valgrind tools to check for # memory and threading errors. # # Defines VALGRIND_CHECK_RULES which should be substituted in your # Makefile; and $enable_valgrind which can be used in subsequent configure # output. VALGRIND_ENABLED is defined and substituted, and corresponds to # the value of the --enable-valgrind option, which defaults to being # enabled if Valgrind is installed and disabled otherwise. Individual # Valgrind tools can be disabled via --disable-valgrind-, the # default is configurable via the AX_VALGRIND_DFLT command or is to use # all commands not disabled via AX_VALGRIND_DFLT. All AX_VALGRIND_DFLT # calls must be made before the call to AX_VALGRIND_CHECK. # # If unit tests are written using a shell script and automake's # LOG_COMPILER system, the $(VALGRIND) variable can be used within the # shell scripts to enable Valgrind, as described here: # # https://www.gnu.org/software/gnulib/manual/html_node/Running-self_002dtests-under-valgrind.html # # Usage example: # # configure.ac: # # AX_VALGRIND_DFLT([sgcheck], [off]) # AX_VALGRIND_CHECK # # in each Makefile.am with tests: # # @VALGRIND_CHECK_RULES@ # VALGRIND_SUPPRESSIONS_FILES = my-project.supp # EXTRA_DIST = my-project.supp # # This results in a "check-valgrind" rule being added. Running `make # check-valgrind` in that directory will recursively run the module's test # suite (`make check`) once for each of the available Valgrind tools (out # of memcheck, helgrind and drd) while the sgcheck will be skipped unless # enabled again on the commandline with --enable-valgrind-sgcheck. The # results for each check will be output to test-suite-$toolname.log. The # target will succeed if there are zero errors and fail otherwise. # # Alternatively, a "check-valgrind-$TOOL" rule will be added, for $TOOL in # memcheck, helgrind, drd and sgcheck. These are useful because often only # some of those tools can be ran cleanly on a codebase. # # The macro supports running with and without libtool. # # LICENSE # # Copyright (c) 2014, 2015, 2016 Philip Withnall # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. # serial-17 dnl Configured tools m4_define([valgrind_tool_list], [[memcheck], [helgrind], [drd], [sgcheck]]) m4_set_add_all([valgrind_exp_tool_set], [sgcheck]) m4_foreach([vgtool], [valgrind_tool_list], [m4_define([en_dflt_valgrind_]vgtool, [on])]) AC_DEFUN([AX_VALGRIND_DFLT],[ m4_define([en_dflt_valgrind_$1], [$2]) ])dnl AM_EXTRA_RECURSIVE_TARGETS([check-valgrind]) m4_foreach([vgtool], [valgrind_tool_list], [AM_EXTRA_RECURSIVE_TARGETS([check-valgrind-]vgtool)]) AC_DEFUN([AX_VALGRIND_CHECK],[ dnl Check for --enable-valgrind AC_ARG_ENABLE([valgrind], [AS_HELP_STRING([--enable-valgrind], [Whether to enable Valgrind on the unit tests])], [enable_valgrind=$enableval],[enable_valgrind=]) AS_IF([test "$enable_valgrind" != "no"],[ # Check for Valgrind. AC_CHECK_PROG([VALGRIND],[valgrind],[valgrind]) AS_IF([test "$VALGRIND" = ""],[ AS_IF([test "$enable_valgrind" = "yes"],[ AC_MSG_ERROR([Could not find valgrind; either install it or reconfigure with --disable-valgrind]) ],[ enable_valgrind=no ]) ],[ enable_valgrind=yes ]) ]) AM_CONDITIONAL([VALGRIND_ENABLED],[test "$enable_valgrind" = "yes"]) AC_SUBST([VALGRIND_ENABLED],[$enable_valgrind]) # Check for Valgrind tools we care about. [valgrind_enabled_tools=] m4_foreach([vgtool],[valgrind_tool_list],[ AC_ARG_ENABLE([valgrind-]vgtool, m4_if(m4_defn([en_dflt_valgrind_]vgtool),[off],dnl [AS_HELP_STRING([--enable-valgrind-]vgtool, [Whether to use ]vgtool[ during the Valgrind tests])],dnl [AS_HELP_STRING([--disable-valgrind-]vgtool, [Whether to skip ]vgtool[ during the Valgrind tests])]), [enable_valgrind_]vgtool[=$enableval], [enable_valgrind_]vgtool[=]) AS_IF([test "$enable_valgrind" = "no"],[ enable_valgrind_]vgtool[=no], [test "$enable_valgrind_]vgtool[" ]dnl m4_if(m4_defn([en_dflt_valgrind_]vgtool), [off], [= "yes"], [!= "no"]),[ AC_CACHE_CHECK([for Valgrind tool ]vgtool, [ax_cv_valgrind_tool_]vgtool,[ ax_cv_valgrind_tool_]vgtool[=no m4_set_contains([valgrind_exp_tool_set],vgtool, [m4_define([vgtoolx],[exp-]vgtool)], [m4_define([vgtoolx],vgtool)]) AS_IF([`$VALGRIND --tool=]vgtoolx[ --help >/dev/null 2>&1`],[ ax_cv_valgrind_tool_]vgtool[=yes ]) ]) AS_IF([test "$ax_cv_valgrind_tool_]vgtool[" = "no"],[ AS_IF([test "$enable_valgrind_]vgtool[" = "yes"],[ AC_MSG_ERROR([Valgrind does not support ]vgtool[; reconfigure with --disable-valgrind-]vgtool) ],[ enable_valgrind_]vgtool[=no ]) ],[ enable_valgrind_]vgtool[=yes ]) ]) AS_IF([test "$enable_valgrind_]vgtool[" = "yes"],[ valgrind_enabled_tools="$valgrind_enabled_tools ]m4_bpatsubst(vgtool,[^exp-])[" ]) AC_SUBST([ENABLE_VALGRIND_]vgtool,[$enable_valgrind_]vgtool) ]) AC_SUBST([valgrind_tools],["]m4_join([ ], valgrind_tool_list)["]) AC_SUBST([valgrind_enabled_tools],[$valgrind_enabled_tools]) [VALGRIND_CHECK_RULES=' # Valgrind check # # Optional: # - VALGRIND_SUPPRESSIONS_FILES: Space-separated list of Valgrind suppressions # files to load. (Default: empty) # - VALGRIND_FLAGS: General flags to pass to all Valgrind tools. # (Default: --num-callers=30) # - VALGRIND_$toolname_FLAGS: Flags to pass to Valgrind $toolname (one of: # memcheck, helgrind, drd, sgcheck). (Default: various) # Optional variables VALGRIND_SUPPRESSIONS ?= $(addprefix --suppressions=,$(VALGRIND_SUPPRESSIONS_FILES)) VALGRIND_FLAGS ?= --num-callers=30 VALGRIND_memcheck_FLAGS ?= --leak-check=full --show-reachable=no VALGRIND_helgrind_FLAGS ?= --history-level=approx VALGRIND_drd_FLAGS ?= VALGRIND_sgcheck_FLAGS ?= # Internal use valgrind_log_files = $(addprefix test-suite-,$(addsuffix .log,$(valgrind_tools))) valgrind_memcheck_flags = --tool=memcheck $(VALGRIND_memcheck_FLAGS) valgrind_helgrind_flags = --tool=helgrind $(VALGRIND_helgrind_FLAGS) valgrind_drd_flags = --tool=drd $(VALGRIND_drd_FLAGS) valgrind_sgcheck_flags = --tool=exp-sgcheck $(VALGRIND_sgcheck_FLAGS) valgrind_quiet = $(valgrind_quiet_$(V)) valgrind_quiet_ = $(valgrind_quiet_$(AM_DEFAULT_VERBOSITY)) valgrind_quiet_0 = --quiet valgrind_v_use = $(valgrind_v_use_$(V)) valgrind_v_use_ = $(valgrind_v_use_$(AM_DEFAULT_VERBOSITY)) valgrind_v_use_0 = @echo " USE " $(patsubst check-valgrind-%-am,%,$''@):; # Support running with and without libtool. ifneq ($(LIBTOOL),) valgrind_lt = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=execute else valgrind_lt = endif # Use recursive makes in order to ignore errors during check check-valgrind-am: ifeq ($(VALGRIND_ENABLED),yes) $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k \ $(foreach tool, $(valgrind_enabled_tools), check-valgrind-$(tool)) else @echo "Need to reconfigure with --enable-valgrind" endif # Valgrind running VALGRIND_TESTS_ENVIRONMENT = \ $(TESTS_ENVIRONMENT) \ env VALGRIND=$(VALGRIND) \ G_SLICE=always-malloc,debug-blocks \ G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly VALGRIND_LOG_COMPILER = \ $(valgrind_lt) \ $(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS) define valgrind_tool_rule check-valgrind-$(1)-am: ifeq ($$(VALGRIND_ENABLED)-$$(ENABLE_VALGRIND_$(1)),yes-yes) ifneq ($$(TESTS),) $$(valgrind_v_use)$$(MAKE) check-TESTS \ TESTS_ENVIRONMENT="$$(VALGRIND_TESTS_ENVIRONMENT)" \ LOG_COMPILER="$$(VALGRIND_LOG_COMPILER)" \ LOG_FLAGS="$$(valgrind_$(1)_flags)" \ TEST_SUITE_LOG=test-suite-$(1).log endif else ifeq ($$(VALGRIND_ENABLED),yes) @echo "Need to reconfigure with --enable-valgrind-$(1)" else @echo "Need to reconfigure with --enable-valgrind" endif endef $(foreach tool,$(valgrind_tools),$(eval $(call valgrind_tool_rule,$(tool)))) A''M_DISTCHECK_CONFIGURE_FLAGS ?= A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-valgrind MOSTLYCLEANFILES ?= MOSTLYCLEANFILES += $(valgrind_log_files) .PHONY: check-valgrind $(add-prefix check-valgrind-,$(valgrind_tools)) '] AC_SUBST([VALGRIND_CHECK_RULES]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([VALGRIND_CHECK_RULES])]) ]) netcdf-fortran-4.6.3+ds/CMakeExtras/0000775000175000017500000000000015205004070017366 5ustar alastairalastairnetcdf-fortran-4.6.3+ds/CMakeExtras/check_pnetcdf.c0000664000175000017500000000017215205004070022312 0ustar alastairalastair#include #if !defined(NC_HAS_PNETCDF) || NC_HAS_PNETCDF == 0 choke me #endif int main() {return 0;} netcdf-fortran-4.6.3+ds/CMakeExtras/check_parallel4.c0000664000175000017500000000017715205004070022554 0ustar alastairalastair#include #if !defined(NC_HAS_PARALLEL4) || NC_HAS_PARALLEL4 == 0 choke me #endif int main() {return 0;} netcdf-fortran-4.6.3+ds/CMakeExtras/sizeof_ptrdiff_t.c0000664000175000017500000000034415205004070023073 0ustar alastairalastair#include #include int main () { switch(sizeof(ptrdiff_t)) { case 4: printf("%1d",4); break; case 8: printf("%1d",8); break; default: return 1; } return 0; } netcdf-fortran-4.6.3+ds/CMakeExtras/Makefile.in0000664000175000017500000003553715205004070021450 0ustar alastairalastair# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright 2012-2019, see the COPYRIGHT file for more information. # This is the automake file for CMakeExtras dir. This holds extra # stuff needed for the CMake build. Include them so the dist contains # a working CMake build. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = CMakeExtras ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__extra_recursive_targets = check-valgrind-recursive \ check-valgrind-memcheck-recursive \ check-valgrind-helgrind-recursive check-valgrind-drd-recursive \ check-valgrind-sgcheck-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INTERNAL_DOCS = @BUILD_INTERNAL_DOCS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DATE = @CONFIG_DATE@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_VALGRIND_drd = @ENABLE_VALGRIND_drd@ ENABLE_VALGRIND_helgrind = @ENABLE_VALGRIND_helgrind@ ENABLE_VALGRIND_memcheck = @ENABLE_VALGRIND_memcheck@ ENABLE_VALGRIND_sgcheck = @ENABLE_VALGRIND_sgcheck@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ F77 = @F77@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_f90 = @FCFLAGS_f90@ FC_VERSION = @FC_VERSION@ FFLAGS = @FFLAGS@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAS_CDF5 = @HAS_CDF5@ HAS_DAP = @HAS_DAP@ HAS_F03 = @HAS_F03@ HAS_F90 = @HAS_F90@ HAS_LOGGING = @HAS_LOGGING@ HAS_NC2 = @HAS_NC2@ HAS_NC4 = @HAS_NC4@ HAS_NC4_PARALLEL = @HAS_NC4_PARALLEL@ HAS_PARALLEL = @HAS_PARALLEL@ HAS_PNETCDF = @HAS_PNETCDF@ HAS_QUANTIZE = @HAS_QUANTIZE@ HAS_SZIP_WRITE = @HAS_SZIP_WRITE@ HAS_ZSTD = @HAS_ZSTD@ HAVE_DOT = @HAVE_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOD_FLAG = @MOD_FLAG@ MPIEXEC = @MPIEXEC@ NC_FLIBS = @NC_FLIBS@ NC_LIBS = @NC_LIBS@ NF_HDF5_PLUGIN_PATH = @NF_HDF5_PLUGIN_PATH@ NM = @NM@ NMEDIT = @NMEDIT@ NMFLAGS = @NMFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VALGRIND = @VALGRIND@ VALGRIND_ENABLED = @VALGRIND_ENABLED@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ enable_shared = @enable_shared@ enable_static = @enable_static@ exec_prefix = @exec_prefix@ fmoddir = @fmoddir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ valgrind_enabled_tools = @valgrind_enabled_tools@ valgrind_tools = @valgrind_tools@ # Russ Rew, Ward Fisher EXTRA_DIST = sizeof_ptrdiff_t.c test_c_ptrdiff_t.f90 \ MatchNetCDFFortranTypes.cmake check_relax_coord_bound.c \ check_pnetcdf.c check_parallel4.c check_cdf5.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign CMakeExtras/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign CMakeExtras/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs check-valgrind-local: check-valgrind-memcheck-local: check-valgrind-helgrind-local: check-valgrind-drd-local: check-valgrind-sgcheck-local: tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." check-valgrind: check-valgrind-am check-valgrind-am: check-valgrind-local check-valgrind-drd: check-valgrind-drd-am check-valgrind-drd-am: check-valgrind-drd-local check-valgrind-helgrind: check-valgrind-helgrind-am check-valgrind-helgrind-am: check-valgrind-helgrind-local check-valgrind-memcheck: check-valgrind-memcheck-am check-valgrind-memcheck-am: check-valgrind-memcheck-local check-valgrind-sgcheck: check-valgrind-sgcheck-am check-valgrind-sgcheck-am: check-valgrind-sgcheck-local clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am check-valgrind-am \ check-valgrind-drd-am check-valgrind-drd-local \ check-valgrind-helgrind-am check-valgrind-helgrind-local \ check-valgrind-local check-valgrind-memcheck-am \ check-valgrind-memcheck-local check-valgrind-sgcheck-am \ check-valgrind-sgcheck-local clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% netcdf-fortran-4.6.3+ds/CMakeExtras/MatchNetCDFFortranTypes.cmake0000664000175000017500000000461315205004070024775 0ustar alastairalastair# Do tests to determine which Fortran types correspond to NCBYTE, NCSHORT, ... # The configure file got these by testing an F77 program, invoking # UD_FORTRAN_TYPES defined in acinclude.m4. # check sizes of C types check_type_size(int SIZEOF_INT) check_type_size(long SIZEOF_LONG) check_type_size("long long" SIZEOF_LONG_LONG) check_type_size(float SIZEOF_FLOAT) check_type_size(double SIZEOF_DOUBLE) check_type_size("signed char" SIZEOF_SIGNED_CHAR) check_type_size(short SIZEOF_SHORT) # The automake script got all paranoid and checked many different Fortran types to see if they exist # I feel like we can assume that the standard types exist. SET(NCBYTE_T "byte") # 1 byte SET(NCSHORT_T "integer*2") # 2 bytes SET(NF_INT1_T "integer*1") # 1 byte SET(NF_INT2_T "integer*2") # 2 bytes SET(NF_INT8_T "integer*8") # 8 bytes # Checks the provided C types to see which ones have the number of bytes passed # Roughly equivalent to the Automake function UD_CHECK_CTYPE_FORTRAN # creates the result variable: NF__IS_C_. This is the format accepted by config.h.in. macro(find_c_type_with_size SIZE RESULT_PREFIX) # 3rd arg: C types to check set(FOUNDANY FALSE) foreach(CTYPE ${ARGN}) # figure out type part of variable name string(TOUPPER ${CTYPE} CTYPE_VAR_NAME) string(REPLACE " " "_" CTYPE_VAR_NAME ${CTYPE_VAR_NAME}) set(RESULT_VAR_NAME NF_${RESULT_PREFIX}_IS_C_${CTYPE_VAR_NAME}) # now check the sizes if((NOT FOUNDANY) AND ${SIZEOF_${CTYPE_VAR_NAME}} EQUAL ${SIZE}) set(${RESULT_VAR_NAME} TRUE) else() set(${RESULT_VAR_NAME} FALSE) endif() #message("${RESULT_VAR_NAME}: ${${RESULT_VAR_NAME}}") if(${RESULT_VAR_NAME}) set(FOUNDANY TRUE) break() endif() endforeach() if(NOT FOUNDANY) message(FATAL_ERROR "Unable to find a C ${RESULT_PREFIX} equivalent type with ${SIZE} bytes. \ You might want to check your compilers to make sure they work. To ignore the problem, turn off ENABLE_FORTRAN_TYPE_CHECKS.") endif() unset(FOUNDANY) endmacro(find_c_type_with_size) message("Matching Fortran types to C types") find_c_type_with_size(1 INT1 "signed char" short int long) find_c_type_with_size(2 INT2 short int long) find_c_type_with_size(4 INT int long) find_c_type_with_size(8 INT8 int "long long") find_c_type_with_size(4 REAL float double) find_c_type_with_size(8 DOUBLEPRECISION float double) message("Matching Fortran types to C types - done") netcdf-fortran-4.6.3+ds/CMakeExtras/Makefile.am0000664000175000017500000000073515205004070021427 0ustar alastairalastair## This is a automake file, part of Unidata's netCDF package. # Copyright 2012-2019, see the COPYRIGHT file for more information. # This is the automake file for CMakeExtras dir. This holds extra # stuff needed for the CMake build. Include them so the dist contains # a working CMake build. # Russ Rew, Ward Fisher EXTRA_DIST = sizeof_ptrdiff_t.c test_c_ptrdiff_t.f90 \ MatchNetCDFFortranTypes.cmake check_relax_coord_bound.c \ check_pnetcdf.c check_parallel4.c check_cdf5.c netcdf-fortran-4.6.3+ds/CMakeExtras/check_relax_coord_bound.c0000664000175000017500000000020615205004070024355 0ustar alastairalastair#include #if !defined(NC_RELAX_COORD_BOUND) || NC_RELAX_COORD_BOUND == 0 choke me #endif int main() {return 0;} netcdf-fortran-4.6.3+ds/CMakeExtras/test_c_ptrdiff_t.f900000664000175000017500000000010015205004070023217 0ustar alastairalastairprogram test use iso_c_binding, only: c_ptrdiff_t end programnetcdf-fortran-4.6.3+ds/CMakeExtras/check_cdf5.c0000664000175000017500000000016415205004070021511 0ustar alastairalastair#include #if !defined(NC_HAS_CDF5) || NC_HAS_CDF5 == 0 choke me #endif int main() {return 0;} netcdf-fortran-4.6.3+ds/install-sh0000775000175000017500000003612215205004070017227 0ustar alastairalastair#!/bin/sh # install - install a program, script, or datafile scriptversion=2025-06-18.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Report bugs to . GNU Automake home page: . General help using GNU software: ." while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 (GNU Automake) $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibility with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptversion=" # time-stamp-format: "%Y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: netcdf-fortran-4.6.3+ds/configure.ac0000664000175000017500000006256415205004070017522 0ustar alastairalastair# -*- Autoconf -*- # This is part of Unidata's netCDF package. Copyright 2011-2019, see # the COPYRIGHT file for more information. # Ed Hartnett, Russ Rew, Dennis Heimbigner, Ward Fisher # Running autoconf on this file will trigger a warning if # autoconf is not at least the specified version. AC_PREREQ([2.59]) # Initialize with name, version, and support email address. AC_INIT([netCDF-Fortran], [4.6.3], [support-netcdf@unidata.ucar.edu]) # Create the VERSION file, which contains the package version from # AC_INIT. echo -n AC_PACKAGE_VERSION>VERSION AC_SUBST(PACKAGE_VERSION) AC_MSG_NOTICE([netCDF-Fortran AC_PACKAGE_VERSION]) # Configuration Date if test "x$SOURCE_DATE_EPOCH" != "x" ; then AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`" else AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`" fi # Keep libtool macros in an m4 directory. AC_CONFIG_MACRO_DIR([m4]) # Find out about the host we're building on. AC_CANONICAL_HOST # Find out about the target we're building for. AC_CANONICAL_TARGET # This call is required by automake. AM_INIT_AUTOMAKE([1.13 foreign dist-zip subdir-objects]) AM_MAINTAINER_MODE() AC_MSG_NOTICE([checking user options]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_RELAX_COORD_BOUND) || NC_RELAX_COORD_BOUND == 0 choke me #endif]])], [nc_relax_coord_bound=yes], [nc_relax_coord_bound=no]) if test "x$nc_relax_coord_bound" = xyes; then AC_DEFINE([NF_RELAX_COORD_BOUND], [1], [Enable a more relaxed boundary error check NF_EINVALCOORDS]) fi AC_MSG_CHECKING([if netCDF was built with CDF5]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_HAS_CDF5) || NC_HAS_CDF5 == 0 choke me #endif]])], [nc_has_cdf5=yes], [nc_has_cdf5=no]) if test "x$nc_has_cdf5" = xyes; then AC_DEFINE([ENABLE_CDF5], [1], [Enable CDF-5 file format]) fi AC_MSG_RESULT([$nc_has_cdf5]) ### # Zstandard logic stanza ### AC_ARG_ENABLE([zstandard_plugin], [AS_HELP_STRING([--disable-zstandard-plugin], [disable zstandard detection and functionality, even if libnetcdf was compiled with plugin support])]) test "x$enable_zstandard_plugin" = xno || enable_zstandard_plugin=yes if test "x$enable_zstandard_plugin" = xyes; then AC_MSG_CHECKING([if netCDF was built with Zstandard compression]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_HAS_ZSTD) || NC_HAS_ZSTD == 0 choke me #endif]])], [nc_has_zstd=yes], [nc_has_zstd=no]) AC_MSG_RESULT([$nc_has_zstd]) if test "x$nc_has_zstd" = xyes; then if test "x${HDF5_PLUGIN_PATH}" = "x"; then AC_MSG_WARN([ ]) AC_MSG_WARN([------------------------------------------]) AC_MSG_WARN([libnetcdf was built with zstd support, but HDF5_PLUGIN_PATH is not set. Either set the HDF5_PLUGIN_PATH environmental variable if zstandard tests fail, or use --disable-zstandard-plugin when running configure.]) AC_MSG_WARN([------------------------------------------]) AC_MSG_WARN([ ]) nf_has_zstd=no nc_hdf5_plugin_path="" else nf_has_zstd=yes nc_hdf5_plugin_path="(HDF5_PLUGIN_PATH: ${HDF5_PLUGIN_PATH})" AC_DEFINE([ENABLE_ZSTD], [1], [Enable Zstandard compression support]) fi else nf_has_zstd=no fi else nf_has_zstd=no fi ### # End Zstandard logic stanza ### AC_MSG_CHECKING([if netCDF was built with pnetcdf]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_HAS_PNETCDF) || NC_HAS_PNETCDF == 0 choke me #endif]])], [nc_has_pnetcdf=yes], [nc_has_pnetcdf=no]) if test "x$nc_has_pnetcdf" = xyes; then AC_DEFINE([NF_HAS_PNETCDF], [1], [Enable parallel I/O support via PnetCDF]) fi AC_MSG_RESULT([$nc_has_pnetcdf]) AC_MSG_CHECKING([if netCDF was built with HDF5 parallel I/O features]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_HAS_PARALLEL4) || NC_HAS_PARALLEL4 == 0 choke me #endif]])], [nc_has_parallel4=yes], [nc_has_parallel4=no]) AC_MSG_RESULT([$nc_has_parallel4]) AC_MSG_CHECKING([if netCDF was built with any parallel I/O features]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_HAS_PARALLEL) || NC_HAS_PARALLEL == 0 choke me #endif]])], [nc_has_parallel=yes], [nc_has_parallel=no]) AC_MSG_RESULT([$nc_has_parallel]) # Version 4.6.1 does not have NC_HAS_PARALLEL4 but does have # NC_HAS_PARALLEL. AC_MSG_CHECKING([if netCDF-fortran should be built with HDF5 parallel I/O features]) if test "x$nc_has_parallel" = xyes -a "x$nc_has_parallel4" = xno -a "x$nc_has_pnetcdf" = xno; then nc_has_parallel4=yes fi if test "x$nc_has_parallel4" = xyes; then AC_DEFINE([NF_HAS_PARALLEL4], [1], [Enable parallel I/O support via HDF5]) fi AC_MSG_RESULT([$nc_has_parallel4]) AC_MSG_CHECKING([if netCDF was built with support for szip writes]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !(NC_HAS_SZIP_WRITE) choke me #endif]])], [nc_has_szip_write=yes], [nc_has_szip_write=no]) AC_MSG_RESULT([$nc_has_szip_write]) AM_CONDITIONAL(TEST_SZIP_WRITE, [test "x$nc_has_szip_write" = xyes]) AC_MSG_CHECKING([if netCDF was built with support for quantize]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ #include #if !defined(NC_HAS_QUANTIZE) || NC_HAS_QUANTIZE == 0 choke me #endif]])], [nc_has_quantize=yes], [nc_has_quantize=no]) if test "x$nc_has_quantize" = xyes; then AC_DEFINE([NF_HAS_QUANTIZE], [1], [Support for quantize feature.]) fi AC_MSG_RESULT([$nc_has_quantize]) AM_CONDITIONAL(TEST_QUANTIZE, [test "x$nc_has_quantize" = xyes]) # Find valgrind, if available, and add targets for it (ex: # check-valgrind). AX_VALGRIND_DFLT([sgcheck], [off]) AX_VALGRIND_CHECK AM_CONDITIONAL(ENABLE_VALGRIND, [test "x$VALGRIND_ENABLED" = xyes]) # Does the user want to run extra parallel tests when parallel # netCDF-4 is built? AC_MSG_CHECKING([whether parallel IO tests should be run]) AC_ARG_ENABLE([parallel-tests], [AS_HELP_STRING([--enable-parallel-tests], [Run extra parallel IO tests. Ignored if \ netCDF-4 is not enabled, or built on a system \ without parallel I/O support.])]) test "x$enable_parallel_tests" = xyes || enable_parallel_tests=no AC_MSG_RESULT($enable_parallel_tests) if test $enable_parallel_tests = yes -a "x$nc_has_pnetcdf" = xno -a "x$nc_has_parallel4" = xno ; then # paralle I/O is not enabled AC_MSG_ERROR([Parallel I/O tests requested, but netcdf-c does not support parallel I/O.]) fi AM_CONDITIONAL(TEST_PARALLEL, [test "x$enable_parallel_tests" = xyes]) # Did the user specify an MPI launcher other than mpiexec? AC_MSG_CHECKING([whether a user specified program to run mpi programs]) AC_ARG_WITH([mpiexec], [AS_HELP_STRING([--with-mpiexec=], [Specify command to launch MPI parallel tests.])], [MPIEXEC=$with_mpiexec], [MPIEXEC=mpiexec]) AC_MSG_RESULT([$MPIEXEC]) AC_SUBST([MPIEXEC], [$MPIEXEC]) # Determine if we want to enable doxygen-generated documentation. Any # new documentation input files should be inserted into # docs/Doxyfile.in and possibly docs/Makefile.am AC_MSG_CHECKING([whether netCDF documentation should be generated]) AC_ARG_ENABLE([doxygen], [AS_HELP_STRING([--enable-doxygen], [Enable generation of documentation with doxygen.])]) test "x$enable_doxygen" = xyes || enable_doxygen=no AC_MSG_RESULT($enable_doxygen) AM_CONDITIONAL([BUILD_DOCS], [test "x$enable_doxygen" = xyes]) # Does the user want to generate dot-based documentation? AC_ARG_ENABLE([dot], [AS_HELP_STRING([--enable-dot], [Use dot (provided by graphviz) to generate charts and graphs \ in the doxygen-based documentation.])]) test "x$enable_dot" = xyes || enable_dot=no # Does the user want to generate internal documentation? AC_ARG_ENABLE([internal-docs], [AS_HELP_STRING([--enable-internal-docs], [Include documentation of library internals. This is of interest \ only to those developing the netCDF library.])]) test "x$enable_internal_docs" = xyes || enable_internal_docs=no AC_SUBST([BUILD_INTERNAL_DOCS], [$enable_internal_docs]) # Is doxygen installed? If so, have configure construct the Doxyfile. AC_CHECK_PROGS([DOXYGEN], [doxygen]) if test -z "$DOXYGEN"; then AC_MSG_WARN([Doxygen not found - documentation will not be built]) fi # Is graphviz/dot installed? If so, we'll use dot to create # graphs in the documentation. AC_CHECK_PROGS([DOT], [dot]) if test -z "$DOT"; then AC_MSG_WARN([dot not found - will use simple charts in documentation]) HAVE_DOT=NO elif test "x$enable_dot" = xno; then HAVE_DOT=NO else HAVE_DOT=YES fi # If we have doxygen, and it's enabled, then process the file. if test "x$enable_doxygen" != xno; then if test -n "$DOXYGEN"; then AC_SUBST(HAVE_DOT) AC_CONFIG_FILES([docs/Doxyfile]) fi fi # Find the C compiler. AC_MSG_NOTICE([finding C compiler]) AC_PROG_CC AM_PROG_CC_C_O AC_C_CONST # Sed is needed to construct tests. AC_PROG_SED if test -z "$SED"; then AC_MSG_WARN([sed not found - some tests will not be built]) fi AM_CONDITIONAL(USE_SED, [test -n "${SED+1}"]) # Find fortran compiler. If FC isn't set after AC_PROG_FC, we couldn't # find a fortran compiler. If the user requested the fortran API, and # has told us not to recover from a missing compiler, then bail out # right here. AC_MSG_NOTICE([finding Fortran compiler]) AC_PROG_FC AC_PROG_F77($FC) ## Compiler with version information. This consists of the full path ## name of the compiler and the reported version number. AC_SUBST([FC_VERSION]) ## Strip anything that looks like a flag off of $FC FC_NOFLAGS=`echo $FC | sed 's/ -.*//'` if `echo $FC_NOFLAGS | grep ^/ >/dev/null 2>&1`; then FC_VERSION="$FC" else FC_VERSION="$FC" FC_VERSION="$(dirname $(which $FC))/$FC" fi if test -n "$fc_version_info"; then FC_VERSION="$FC_VERSION ( $fc_version_info)" fi # If we couldn't find an F90 compiler, deal with it. if test "${FC+set}" = set && test "x$FC" = x; then AC_MSG_FAILURE([Can't find F90 compiler.]) fi # Does the user want to test for Fortran 2003 compiler. # Added to get around NAG evaluation compiler error turning off F03 AC_MSG_CHECKING([whether Fortran compiler is checked for ISO_C_BINDING support]) AC_ARG_ENABLE([f03-compiler-check], [AS_HELP_STRING([--disable-f03-compiler-check], [disable check of ISO_C_BINDING support in Fortran compiler])]) test "x$enable_f03_compiler_check" = xno || enable_f03_compiler_check=yes AC_MSG_RESULT($enable_f03_compiler_check) # next check to see if the Fortran compiler will support # ISO_C_BINDING nc_iso_c_binding=yes # Some f90 compilers change the case of the mod file names. Others # require special flags to be set to deal with .f90 files. Find out # about this compiler. AC_LANG_PUSH(Fortran) AC_FC_SRCEXT(f90) AC_LANG_POP(Fortran) AX_F90_MODULE_FLAG AC_SUBST(MOD_FLAG, ${ax_cv_f90_modflag}) if test "x$enable_f03_compiler_check" = xyes; then AC_MSG_CHECKING([if Fortran compiler supports Fortran 2003 ISO_C_BINDING]) cat <conftest.f90 module conftest_module USE ISO_C_BINDING end module conftest_module EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} conftest.f90' if AC_TRY_EVAL(doit); then nc_iso_c_binding=yes else nc_iso_c_binding=no fi AC_MSG_RESULT([$nc_iso_c_binding]) AC_MSG_CHECKING([if Fortran compiler supports Fortran 2008 ISO_FORTRAN_ENV additions]) cat <conftest.f90 Program test USE ISO_FORTRAN_ENV, ONLY: REAL32, REAL64, INT8, INT16, INT32, INT64 End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} conftest.f90' if AC_TRY_EVAL(doit); then nc_f2008_is0_env_additions=yes AC_DEFINE([HAVE_F2008], 1, [if true, use Fortran 2008 ISO_FORTRAN_ENV additions]) else nc_f2008_is0_env_additions=no fi AC_MSG_RESULT([$nc_f2008_is0_env_additions]) AC_MSG_CHECKING([if Fortran compiler supports TS29113 standard extension]) cat <conftest.f90 Program test USE ISO_C_BINDING, ONLY: C_PTRDIFF_T End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} conftest.f90' if AC_TRY_EVAL(doit); then nc_ts29113_support=yes AC_DEFINE([HAVE_TS29113_SUPPORT], 1, [if true, Fortran compiler supports TS29113 extension]) else nc_ts29113_support=no fi AC_MSG_RESULT([$nc_ts29113_support]) if test "x$nc_iso_c_binding" = xno; then AC_MSG_FAILURE([Can't use build F03 interfaces]) fi fi # Test to see if fortran compiler supports the flag # -fallow-argument-mismatch flag introduced in gfortran 10. # # Also allow support for NAG compiler using the -mismatch_all flag. # # See https://github.com/Unidata/netcdf-fortran/issues/212 # See https://github.com/Unidata/netcdf-fortran/issues/218 ac_save_FCFLAGS="$FCFLAGS" ac_save_FFLAGS="$FFLAGS" AC_MSG_CHECKING([if Fortran compiler supports allow-mismatch flag]) cat <conftest.f90 Program test USE ISO_C_BINDING, ONLY: C_PTRDIFF_T End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} -fallow-argument-mismatch conftest.f90' if AC_TRY_EVAL(doit); then nf_allow_mismatch=yes FCFLAGS="${FCFLAGS} -fallow-argument-mismatch" FFLAGS="${FFLAGS} -fallow-argument-mismatch" else nf_allow_mismatch=no fi AC_MSG_RESULT([$nf_allow_mismatch]) # End testing of gfortan allow-mismatch flags. AC_MSG_CHECKING([if Fortran compiler supports mismatch_all flag]) cat <conftest.f90 Program test USE ISO_C_BINDING, ONLY: C_PTRDIFF_T End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} -mismatch_all conftest.f90' if AC_TRY_EVAL(doit); then nf_mismatch_all=yes FCFLAGS="${FCFLAGS} -mismatch_all" FFLAGS="${FFLAGS} -mismatch_all" else nf_mismatch_all=no fi AC_MSG_RESULT([$nf_mismatch_all]) #end testing of NAG mismatch_all flag. ## # End mismatch checks ## # We must have F2003 ISO bindings to build. if test "x$nc_iso_c_binding" = xno; then AC_MSG_FAILURE([Fortran 2003 interface not supported]) fi nc_build_f03=yes # Does the user want to check into fortran type information? AC_MSG_CHECKING([whether fortran type sizes should be checked]) AC_ARG_ENABLE([fortran-type-check], [AS_HELP_STRING([--disable-fortran-type-check], [cause the Fortran type sizes checks to be skipped])]) test "x$enable_fortran_type_check" = xno || enable_fortran_type_check=yes AC_MSG_RESULT($enable_fortran_type_check) # Does the user want to run tests for large files (> 2GiB)? AC_MSG_CHECKING([whether large file (> 2GB) tests should be run]) AC_ARG_ENABLE([large-file-tests], [AS_HELP_STRING([--enable-large-file-tests], [Run tests which create very large data files (~13 GB disk space required, but it will be recovered when tests are complete). See option --with-temp-large to specify temporary directory])]) test "x$enable_large_file_tests" = xyes || enable_large_file_tests=no AC_MSG_RESULT($enable_large_file_tests) AM_CONDITIONAL(LARGE_FILE_TESTS, [test x$enable_large_file_tests = xyes]) if test "x$enable_large_file_tests" = xyes; then AC_DEFINE([LARGE_FILE_TESTS], [1], [do large file tests]) fi # Does the user want to run benchmarks? AC_MSG_CHECKING([whether benchmarks should be run]) AC_ARG_ENABLE([benchmarks], [AS_HELP_STRING([--enable-benchmarks], [Run benchmarks.])]) test "x$enable_benchmarks" = xno || enable_benchmarks=yes AC_MSG_RESULT($enable_benchmarks) AM_CONDITIONAL(BUILD_BENCHMARKS, [test x$enable_benchmarks = xyes]) # If the env. variable TEMP_LARGE is set, or if # --with-temp-large=, use it as a place for the large # (i.e. > 2 GiB) files created during the large file testing. AC_MSG_CHECKING([where to put large temp files if large file tests are run]) AC_ARG_WITH([temp-large], [AS_HELP_STRING([--with-temp-large=], [specify directory where large files (i.e. >2 GB) \ will be written, if large files tests are run with --enable-large-file-tests])], [TEMP_LARGE=$with_temp_large]) TEMP_LARGE=${TEMP_LARGE-.} AC_MSG_RESULT($TEMP_LARGE) AC_DEFINE_UNQUOTED([TEMP_LARGE], ["$TEMP_LARGE"], [Place to put very large netCDF test files.]) # Allow setting the fortran module install dir AC_ARG_WITH([fmoddir], [AS_HELP_STRING([--with-fmoddir=DIR], [Fortran module install directory])], [fmoddir=$withval], [fmoddir="\${includedir}"]) AC_SUBST([fmoddir], [$fmoddir]) # Set up libtool. AC_MSG_NOTICE([setting up libtool]) LT_PREREQ([2.2]) LT_INIT AC_MSG_NOTICE([finding other utilities]) # Find the install program. AC_PROG_INSTALL AC_MSG_NOTICE([trying to set fortran flags for this platform]) AC_MSG_CHECKING([what FC is set to]) AC_MSG_RESULT([$FC]) # Check to see if any macros must be set to enable large (>2GB) files. AC_SYS_LARGEFILE # This will test the f77 compiler, as well as check some fortran types. if test "$enable_fortran_type_check" = yes; then UD_FORTRAN_TYPES if test "x$ud_fc_failed" = xyes; then AC_MSG_ERROR([F77 compiler doesn't work.]) fi else AC_DEFINE(NCBYTE_T, byte) AC_DEFINE(NCSHORT_T, integer*2) AC_DEFINE(NF_INT1_T, byte) AC_DEFINE(NF_INT2_T, integer*2) AC_DEFINE(NF_INT8_T, integer*8) AC_DEFINE(NF_INT1_IS_C_SIGNED_CHAR, 1, [default]) AC_DEFINE(NF_INT2_IS_C_SHORT, 1, [default]) AC_DEFINE(NF_INT_IS_C_INT, 1, [default]) AC_DEFINE(NF_INT8_IS_C_LONG_LONG, 1, [default]) AC_DEFINE(NF_REAL_IS_C_FLOAT, 1, [default]) AC_DEFINE(NF_DOUBLEPRECISION_IS_C_DOUBLE, 1, [default]) fi AC_MSG_NOTICE([checking types, headers, and functions]) # We must check for all these, because they may be used by the netCDF # C library. # Removing the checks for some of the libraries because of issues # observed when they are detected, are not needed, and an attempt to # link against is made anyways. # See https://github.com/Unidata/netcdf-fortran/issues/164 # # Specifying LDFLAGS="$(nc-config --libs [--static])" should # let downstream developers link more reliably against libnetcdf. AC_CHECK_LIB([m], [floor], [], []) AC_SEARCH_LIBS([dlopen], [dl dld], [], []) # When the underneath NetCDF C library was built with parallel I/O enables, # check if the Fortran compiler supports parallel I/O. Abort if not. #if test "x$nc_has_parallel4" = xyes -o "x$nc_has_pnetcdf" = xyes; then # AC_LANG_PUSH([Fortran]) # AC_CHECK_FUNC([MPI_File_open], [], # [AC_SEARCH_LIBS([MPI_File_open], [], [], # [AC_MSG_ERROR([ # ----------------------------------------------------------------------- # The NetCDF C library is built with parallel I/O feature enabled, but # the Fortran compiler '$FC' supplied in this configure command # does not support MPI-IO. Please use one that does. If parallel I/O # feature is not desired, please use a NetCDF C library with parallel # I/O feature disabled. Abort. # -----------------------------------------------------------------------]) # ])]) # AC_LANG_POP([Fortran]) #fi # Find the netCDF header and library. AC_CHECK_HEADERS([netcdf.h], [], [AC_MSG_ERROR([netcdf.h could not be found. Please set CPPFLAGS.])]) AC_SEARCH_LIBS([nc_open], [netcdf], [], [AC_MSG_ERROR([Could not link to netcdf C library. Please set LDFLAGS; for static builds set LIBS to the results of nc-config --libs.])]) # See if various functions are available AC_CHECK_FUNCS([nc_def_opaque nccreate nc_set_log_level oc_open nc_def_var_szip]) # Starting with version 4.7.4, netcdf-c has function nc_def_var_szip(). if test "x$ac_cv_func_nc_def_var_szip" != xyes; then AC_MSG_ERROR([netcdf-c version 4.7.4 or greater is required, built with underlying szip support.]) fi nc_build_v2=no nc_build_v4=no nc_has_logging=no nc_has_dap=no AC_COMPUTE_INT([nc_has_hdf5], [NC_HAS_HDF5], [[#include ]]) if test "x$nc_has_hdf5" = x1; then nc_build_v4=yes fi test "x$ac_cv_func_nccreate" = xyes && nc_build_v2=yes test "x$ac_cv_func_nc_set_log_level" = xyes && nc_has_logging=yes test "x$ac_cv_func_oc_open" = xyes && nc_has_dap=yes if test "x$nc_build_v4" = xyes; then AC_DEFINE([USE_NETCDF4], [1], [if true, build netCDF-4]) fi if test "x$nc_has_logging" = xyes; then AC_DEFINE([LOGGING], [1], [if true, C library contains logging]) fi AC_MSG_CHECKING([netCDF logging present]) AC_MSG_RESULT([$nc_has_logging]) AC_MSG_CHECKING([netCDF v2 API present]) AC_MSG_RESULT([$nc_build_v2]) AC_MSG_CHECKING([netCDF-4 present]) AC_MSG_RESULT([$nc_build_v4]) AC_MSG_CHECKING([whether to test the filter API]) AC_ARG_ENABLE([filter-test], [AS_HELP_STRING([--enable-filter-test], [Run filter tests: requires access to the plugins directory in a netcdf-c build.])]) test "x$enable_filter_test" = xyes || enable_filter_test=no AC_MSG_RESULT($enable_filter_test) AM_CONDITIONAL([USE_NETCDF4], [test "x$nc_build_v4" = xyes]) AM_CONDITIONAL([BUILD_V2], [test "x$nc_build_v2" = xyes]) AM_CONDITIONAL([HAS_LOGGING], [test "x$nc_has_logging" = xyes]) AM_CONDITIONAL([USE_LOGGING], [test "x$nc_has_logging" = xyes]) AM_CONDITIONAL([BUILD_DAP], [test "x$nc_has_dap" = xyes]) AM_CONDITIONAL([BUILD_PNETCDF], [test "x$nc_has_pnetcdf" = xyes]) AM_CONDITIONAL([BUILD_PARALLEL4], [test "x$nc_has_parallel4" = xyes]) AM_CONDITIONAL([BUILD_PARALLEL], [test "x$nc_has_pnetcdf" = xyes -o "x$nc_has_parallel4" = xyes]) AM_CONDITIONAL([TEST_FILTERS], [test "x$enable_filter_test" = xyes]) AC_CHECK_HEADER(stdlib.h, ,AC_DEFINE([NO_STDLIB_H], [], [no stdlib.h])) AC_CHECK_HEADER(sys/types.h, ,AC_DEFINE([NO_SYS_TYPES_H], [], [no sys_types.h])) AC_CHECK_HEADERS([sys/param.h]) AC_CHECK_HEADERS([locale.h stdio.h stdarg.h errno.h ctype.h fcntl.h malloc.h stdlib.h string.h \ strings.h unistd.h sys/stat.h getopt.h sys/time.h sys/resource.h]) AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_FUNC_VPRINTF # Check for that conforms to C99 requirements AC_HEADER_STDBOOL # Check for these functions... AC_FUNC_ALLOCA AC_TYPE_SIZE_T AC_TYPE_OFF_T AC_CHECK_TYPES([ssize_t, ptrdiff_t, uchar, longlong]) AC_C_CHAR_UNSIGNED AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(float) AC_CHECK_SIZEOF(double) AC_CHECK_SIZEOF(off_t) AC_CHECK_SIZEOF(size_t) AC_CHECK_SIZEOF(ptrdiff_t) AC_COMPUTE_INT([longlong_is_long],[sizeof(long long) == sizeof(long)],[],[longlong_is_long=0]) if test $longlong_is_long = 1; then CFLAGS="$CFLAGS -DLONGLONG_IS_LONG" fi # Flags for nf-config script; by design $prefix, $includir, $libdir, # etc. are left as shell variables in the script so as to facilitate # relocation NC_LIBS="-lnetcdf" NC_LIBS="$LDFLAGS $NC_LIBS $LIBS" case "x$target_os" in xsolaris*) NEWNCLIBS="" for x in $NC_LIBS ; do case "$x" in -L*) r=`echo "$x" | sed -e 's|^-L|-R|'` NEWNCLIBS="$NEWNCLIBS $x $r" ;; *) NEWNCLIBS="$NEWNCLIBS $x" ;; esac done NC_LIBS="$NEWNCLIBS" ;; *);; esac NC_FLIBS="-lnetcdff $NC_LIBS" AC_SUBST([enable_shared]) AC_SUBST([enable_static]) AC_SUBST(NC_LIBS,[$NC_LIBS]) AC_SUBST(NC_FLIBS,[$NC_FLIBS]) AC_SUBST(HAS_F90,[$nc_build_f90]) AC_SUBST(HAS_F03,[$nc_build_f03]) AC_SUBST(HAS_DAP,[$nc_has_dap]) AC_SUBST(HAS_NC2,[$nc_build_v2]) AC_SUBST(HAS_NC4,[$nc_build_v4]) AC_SUBST(HAS_SZIP_WRITE,[$nc_has_szip_write]) AC_SUBST(HAS_ZSTD,[$nf_has_zstd]) AC_SUBST(HAS_QUANTIZE,[$nc_has_quantize]) AC_SUBST(HAS_LOGGING,[$nc_has_logging]) AC_SUBST(HAS_CDF5,[$nc_has_cdf5]) AC_SUBST(HAS_PNETCDF,[$nc_has_pnetcdf]) AC_SUBST(HAS_NC4_PARALLEL,[$nc_has_parallel4]) AC_SUBST(HAS_PARALLEL,[$nc_has_parallel]) AC_SUBST(NF_HDF5_PLUGIN_PATH, [$nc_hdf5_plugin_path]) # Some files need to exist in build directories that do not correspond # to their source directory, or the test program makes an assumption # about where files live. AC_CONFIG_LINKS provides a mechanism to # link/copy files if an out-of-source build is happening. AC_CONFIG_LINKS([nf_test/fills.nc:nf_test/ref_fills.nc nf03_test4/att.nc:nf03_test4/ref_att.nc]) if test "x$nc_has_parallel" = xyes; then AC_CONFIG_FILES([nf03_test4/run_f90_par_test.sh], [chmod ugo+x nf03_test4/run_f90_par_test.sh]) fi AC_MSG_NOTICE([generating header files and makefiles]) AC_CONFIG_FILES([Makefile nf-config netcdf-fortran.pc libnetcdff.settings docs/Makefile fortran/Makefile nf_test/Makefile nf_test4/Makefile nf03_test/Makefile nf03_test4/Makefile CMakeExtras/Makefile libsrc/Makefile examples/Makefile examples/F90/Makefile examples/F77/Makefile], [test -f nf-config && chmod 755 nf-config ]) AC_OUTPUT() cat libnetcdff.settings ## # This can be done more elegantly, but for the sake of expediency # we will do it this way. ## if test "x$nc_has_zstd" = xyes; then if test "x$nf_has_zstd" = xno; then if test "x${HDF5_PLUGIN_PATH}" = "x"; then echo "" AC_MSG_WARN([ ]) AC_MSG_WARN([------------------------------------------]) AC_MSG_WARN([libnetcdf was built with zstd support, but HDF5_PLUGIN_PATH is not set, so zstd support is not enabled in libnetcdff. Set HDF5_PLUGIN_PATH and re-run configure if you want to enable zstd support.]) echo "" AC_MSG_WARN([You can use `nc-config --plugindir` to determine the appropriate value for HDF5_PLUGIN_PATH]) AC_MSG_WARN([------------------------------------------]) AC_MSG_WARN([ ]) fi fi fi netcdf-fortran-4.6.3+ds/config.guess0000775000175000017500000014324215205004070017545 0ustar alastairalastair#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system '$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still # use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c17 c99 c89 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #if defined(__ANDROID__) LIBC=android #else #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #elif defined(__LLVM_LIBC__) LIBC=llvm #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like '4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-pc-managarm-mlibc" ;; *:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __ARM_EABI__ #ifdef __ARM_PCS_VFP ABI=eabihf #else ABI=eabi #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; esac fi GUESS=$CPU-unknown-linux-$LIBCABI ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:cos:*:*) GUESS=$UNAME_MACHINE-unknown-cos ;; kvx:mbr:*:*) GUESS=$UNAME_MACHINE-unknown-mbr ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*) GUESS=$UNAME_MACHINE-pc-ironclad-mlibc ;; *:[Ii]ronclad:*:*) GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif int main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&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` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" # time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: netcdf-fortran-4.6.3+ds/configure0000775000175000017500000351147315205004070017144 0ustar alastairalastair#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.73 for netCDF-Fortran 4.6.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2026 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. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # contradicts POSIX and common usage. Disable this. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf '%s\n' "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 case $# in # (( 0) exec $CONFIG_SHELL $as_opts "$as_myself" ;; *) exec $CONFIG_SHELL $as_opts "$as_myself" "$@" ;; esac # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf '%s\n' "$0: could not re-execute with $CONFIG_SHELL" >&2 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 \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # contradicts POSIX and common usage. Disable this. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; 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 case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi 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 case $# in # (( 0) exec $CONFIG_SHELL $as_opts "$as_myself" ;; *) exec $CONFIG_SHELL $as_opts "$as_myself" "$@" ;; esac # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf '%s\n' "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf '%s\n' "$0: This script requires a shell more modern than all" printf '%s\n' "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf '%s\n' "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf '%s\n' "$0: be upgraded to zsh 4.3.4 or later." else printf '%s\n' "$0: Please tell bug-autoconf@gnu.org and $0: support-netcdf@unidata.ucar.edu 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 ;; esac 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=`printf '%s\n' "$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 || printf '%s\n' 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 case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac 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 case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac 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 printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf '%s\n' "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename 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 as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf '%s\n' X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } 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 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 ' t clear :clear 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" || { printf '%s\n' "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # 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 } 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 -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' 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"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} 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` # # Initializations. # ac_default_prefix=/usr/local ac_clean_CONFIG_STATUS= ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='netCDF-Fortran' PACKAGE_TARNAME='netcdf-fortran' PACKAGE_VERSION='4.6.3' PACKAGE_STRING='netCDF-Fortran 4.6.3' PACKAGE_BUGREPORT='support-netcdf@unidata.ucar.edu' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_func_c_list= : ${enable_year2038:=no} ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS NF_HDF5_PLUGIN_PATH HAS_PARALLEL HAS_NC4_PARALLEL HAS_PNETCDF HAS_CDF5 HAS_LOGGING HAS_QUANTIZE HAS_ZSTD HAS_SZIP_WRITE HAS_NC4 HAS_NC2 HAS_DAP HAS_F03 HAS_F90 NC_FLIBS NC_LIBS enable_static enable_shared ALLOCA TEST_FILTERS_FALSE TEST_FILTERS_TRUE BUILD_PARALLEL_FALSE BUILD_PARALLEL_TRUE BUILD_PARALLEL4_FALSE BUILD_PARALLEL4_TRUE BUILD_PNETCDF_FALSE BUILD_PNETCDF_TRUE BUILD_DAP_FALSE BUILD_DAP_TRUE USE_LOGGING_FALSE USE_LOGGING_TRUE HAS_LOGGING_FALSE HAS_LOGGING_TRUE BUILD_V2_FALSE BUILD_V2_TRUE USE_NETCDF4_FALSE USE_NETCDF4_TRUE NMFLAGS LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP FILECMD LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP LIBTOOL fmoddir BUILD_BENCHMARKS_FALSE BUILD_BENCHMARKS_TRUE LARGE_FILE_TESTS_FALSE LARGE_FILE_TESTS_TRUE MOD_FLAG FCFLAGS_f90 FC_VERSION ac_ct_F77 FFLAGS F77 ac_ct_FC FCFLAGS FC USE_SED_FALSE USE_SED_TRUE SED HAVE_DOT DOT DOXYGEN BUILD_INTERNAL_DOCS BUILD_DOCS_FALSE BUILD_DOCS_TRUE MPIEXEC TEST_PARALLEL_FALSE TEST_PARALLEL_TRUE ENABLE_VALGRIND_FALSE ENABLE_VALGRIND_TRUE VALGRIND_CHECK_RULES valgrind_enabled_tools valgrind_tools ENABLE_VALGRIND_sgcheck ENABLE_VALGRIND_drd ENABLE_VALGRIND_helgrind ENABLE_VALGRIND_memcheck VALGRIND_ENABLED VALGRIND_ENABLED_FALSE VALGRIND_ENABLED_TRUE VALGRIND TEST_QUANTIZE_FALSE TEST_QUANTIZE_TRUE TEST_SZIP_WRITE_FALSE TEST_SZIP_WRITE_TRUE am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build CONFIG_DATE ECHO_T ECHO_N ECHO_C target_alias host_alias build_alias LIBS DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_zstandard_plugin enable_valgrind enable_valgrind_memcheck enable_valgrind_helgrind enable_valgrind_drd enable_valgrind_sgcheck enable_parallel_tests with_mpiexec enable_doxygen enable_dot enable_internal_docs enable_f03_compiler_check enable_fortran_type_check enable_large_file_tests enable_benchmarks with_temp_large with_fmoddir enable_shared enable_static enable_pic with_pic enable_fast_install enable_aix_soname with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_largefile enable_filter_test enable_year2038 ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS FC FCFLAGS F77 FFLAGS LT_SYS_LIBRARY_PATH' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) 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'" ac_useropt_orig=$ac_useropt ac_useropt=`printf '%s\n' "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) 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'" ac_useropt_orig=$ac_useropt ac_useropt=`printf '%s\n' "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) 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'" ac_useropt_orig=$ac_useropt ac_useropt=`printf '%s\n' "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) 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'" ac_useropt_orig=$ac_useropt ac_useropt=`printf '%s\n' "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --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" ;; *=*) 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 eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf '%s\n' "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf '%s\n' "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`printf '%s\n' $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf '%s\n' "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- 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" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf '%s\n' X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no 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" 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" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures netCDF-Fortran 4.6.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --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 --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 --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/netcdf-fortran] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of netCDF-Fortran 4.6.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-zstandard-plugin disable zstandard detection and functionality, even if libnetcdf was compiled with plugin support --enable-valgrind Whether to enable Valgrind on the unit tests --disable-valgrind-memcheck Whether to skip memcheck during the Valgrind tests --disable-valgrind-helgrind Whether to skip helgrind during the Valgrind tests --disable-valgrind-drd Whether to skip drd during the Valgrind tests --enable-valgrind-sgcheck Whether to use sgcheck during the Valgrind tests --enable-parallel-tests Run extra parallel IO tests. Ignored if netCDF-4 is not enabled, or built on a system without parallel I/O support. --enable-doxygen Enable generation of documentation with doxygen. --enable-dot Use dot (provided by graphviz) to generate charts and graphs in the doxygen-based documentation. --enable-internal-docs Include documentation of library internals. This is of interest only to those developing the netCDF library. --disable-f03-compiler-check disable check of ISO_C_BINDING support in Fortran compiler --disable-fortran-type-check cause the Fortran type sizes checks to be skipped --enable-large-file-tests Run tests which create very large data files (~13 GB disk space required, but it will be recovered when tests are complete). See option --with-temp-large to specify temporary directory --enable-benchmarks Run benchmarks. --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --enable-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files --enable-filter-test Run filter tests: requires access to the plugins directory in a netcdf-c build. --enable-year2038 support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-mpiexec= Specify command to launch MPI parallel tests. --with-temp-large= specify directory where large files (i.e. >2 GB) will be written, if large files tests are run with --enable-large-file-tests --with-fmoddir=DIR Fortran module install directory --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FC Fortran compiler command FCFLAGS Fortran compiler flags F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags LT_SYS_LIBRARY_PATH User-defined run-time library search path. Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf '%s\n' "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf '%s\n' "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf '%s\n' "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF netCDF-Fortran configure 4.6.3 generated by GNU Autoconf 2.73 Copyright (C) 2026 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 ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # 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 conftest.beam 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\"" printf '%s\n' "$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 printf '%s\n' "$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 case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam 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\"" printf '%s\n' "$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 printf '%s\n' "$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 case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # 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 conftest.beam 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\"" printf '%s\n' "$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 printf '%s\n' "$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 case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_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.beam 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\"" printf '%s\n' "$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 printf '%s\n' "$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 case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf '%s\n' "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 (void); below. */ #include #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 (void); /* 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 (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf '%s\n' "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # 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.beam 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\"" printf '%s\n' "$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 printf '%s\n' "$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 case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_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.beam 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\"" printf '%s\n' "$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 printf '%s\n' "$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 case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac 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_c_try_run LINENO # ---------------------- # Try to run 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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf '%s\n' "$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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else case e in #( e) printf '%s\n' "$as_me: program exited with status $ac_status" >&5 printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status ;; esac 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 (void) { 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 (void) { 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 case e in #( e) 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 ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { 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 (void) { 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 case e in #( e) 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 ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else case e in #( e) ac_lo= ac_hi= ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam 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 (void) { 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 case e in #( e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam 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 (void) { return $2; } static unsigned long int ulongval (void) { return $2; } #include #include int main (void) { 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 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) eval "$3=yes" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf '%s\n' "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf '%s\n' "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf '%s\n' "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac 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 netCDF-Fortran $as_me 4.6.3, which was generated by GNU Autoconf 2.73. Invocation command line was $ $0$ac_configure_args_raw _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 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf '%s\n' "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf '%s\n' "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # Dump the cache to stdout. It can be in a pipe (this is a requirement). ac_cache_dump () { # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf '%s\n' "$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;} ;; esac ;; esac done (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 \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) } # Print debugging info to stdout. ac_dump_debugging_info () { echo printf '%s\n' "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo ac_cache_dump echo printf '%s\n' "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'*) ac_val=`printf '%s\n' "$ac_val" | sed "s/'/'\\\\\\\\''/g"`;; esac printf '%s\n' "$ac_var='$ac_val'" done | sort echo if test -n "$ac_subst_files"; then printf '%s\n' "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'*) ac_val=`printf '%s\n' "$ac_val" | sed "s/'/'\\\\\\\\''/g"`;; esac printf '%s\n' "$ac_var='$ac_val'" done | sort echo fi if test -s confdefs.h; then printf '%s\n' "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf '%s\n' "$as_me: caught signal $ac_signal" printf '%s\n' "$as_me: exit $exit_status" } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. ac_exit_trap () { exit_status= # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. ac_dump_debugging_info >&5 eval "rm -f $ac_clean_CONFIG_STATUS core *.core core.conftest.*" && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status } trap 'ac_exit_trap $?' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_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 printf '%s\n' "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf '%s\n' "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf '%s\n' "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf '%s\n' "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf '%s\n' "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf '%s\n' "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf '%s\n' "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf '%s\n' "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$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; } 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf '%s\n' "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf '%s\n' "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C23 (global declarations) ac_c_conftest_c23_globals=' /* Does the compiler advertise conformance to C17 or earlier? Although GCC 14 does not do that, even with -std=gnu23, it is close enough, and defines __STDC_VERSION == 202000L. */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ <= 201710L # error "Compiler advertises conformance to C17 or earlier" #endif // Check alignas. char alignas (double) c23_aligned_as_double; char alignas (0) c23_no_special_alignment; extern char c23_aligned_as_int; char alignas (0) alignas (int) c23_aligned_as_int; // Check alignof. enum { c23_int_alignment = alignof (int), c23_int_array_alignment = alignof (int[100]), c23_char_alignment = alignof (char) }; static_assert (0 < -alignof (int), "alignof is signed"); int function_with_unnamed_parameter (int) { return 0; } void c23_noreturn (); /* Test parsing of string and char UTF-8 literals (including hex escapes). The parens pacify GCC 15. */ bool use_u8 = (!sizeof u8"\xFF") == (!u8'\''x'\''); bool check_that_bool_works = true | false | !nullptr; #if !true # error "true does not work in #if" #endif #if false #elifdef __STDC_VERSION__ #else # error "#elifdef does not work" #endif #ifndef __has_c_attribute # error "__has_c_attribute not defined" #endif #ifndef __has_include # error "__has_include not defined" #endif #define LPAREN() ( #define FORTY_TWO(x) 42 #define VA_OPT_TEST(r, x, ...) __VA_OPT__ (FORTY_TWO r x)) static_assert (VA_OPT_TEST (LPAREN (), 0, <:-) == 42); static_assert (0b101010 == 42); static_assert (0B101010 == 42); static_assert (0xDEAD'\''BEEF == 3'\''735'\''928'\''559); static_assert (0.500'\''000'\''000 == 0.5); enum unsignedish : unsigned int { uione = 1 }; static_assert (0 < -uione); #include constexpr nullptr_t null_pointer = nullptr; static typeof (1 + 1L) two () { return 2; } static long int three () { return 3; } ' # Test code for whether the C compiler supports C23 (body of main). ac_c_conftest_c23_main=' { label_before_declaration: int arr[10] = {}; if (arr[0]) goto label_before_declaration; if (!arr[0]) goto label_at_end_of_block; label_at_end_of_block: } ok |= !null_pointer; ok |= two != three; ' # Test code for whether the C compiler supports C23 (complete). ac_c_conftest_c23_program="${ac_c_conftest_c23_globals} int main (int, char **) { int ok = 0; ${ac_c_conftest_c23_main} return ok; } " # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Do not test the value of __STDC__, because some compilers define it to 0 or do not define it, while otherwise adequately conforming. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr, and "aND" is used instead of "and" to work around // GCC bug 40564 which is irrelevant here. #define debug(...) dprintf (2, __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 #error "your preprocessor is broken" #endif #if BIG_OK #else #error "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) { // 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 bool 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 = 0; float fnumber = 0; 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); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; const char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. static struct incomplete_array *volatile incomplete_array_pointer; struct incomplete_array *ia = incomplete_array_pointer; ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; // Do not test for VLAs, as some otherwise-conforming compilers lack them. // C code should instead use __STDC_NO_VLA__; see Autoconf manual. // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || ni.number != 58); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF" # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh compile missing install-sh config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf '%s\n' "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf '%s\n' "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf '%s\n' "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf '%s\n' "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf '%s\n' "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf '%s\n' "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf '%s\n' "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf '%s\n' "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w= for ac_val in x $ac_old_val; do ac_old_val_w="$ac_old_val_w $ac_val" done ac_new_val_w= for ac_val in x $ac_new_val; do ac_new_val_w="$ac_new_val_w $ac_val" done if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf '%s\n' "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf '%s\n' "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf '%s\n' "$as_me: former value: '$ac_old_val'" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf '%s\n' "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf '%s\n' "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf '%s\n' "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 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 # Create the VERSION file, which contains the package version from # AC_INIT. echo -n 4.6.3>VERSION { printf '%s\n' "$as_me:${as_lineno-$LINENO}: netCDF-Fortran 4.6.3" >&5 printf '%s\n' "$as_me: netCDF-Fortran 4.6.3" >&6;} # Configuration Date if test "x$SOURCE_DATE_EPOCH" != "x" ; then CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`" else CONFIG_DATE="`date`" fi # Keep libtool macros in an m4 directory. # Find out about the host we're building on. # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf '%s\n' "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`printf '%s\n' "$build_os" | sed 's/ /-/g'`;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf '%s\n' "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`printf '%s\n' "$host_os" | sed 's/ /-/g'`;; esac # Find out about the target we're building for. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf '%s\n' "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`printf '%s\n' "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # This call is required by automake. am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF/1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF/1 since it installs stuff as root # 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 $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. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL 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. INSTALL=$ac_install_sh fi fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf '%s\n' "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in #( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in #( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf '%s\n' "$am_cv_sleep_fractional_seconds" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in #( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # 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". printf '%s\n' ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf '%s\n' "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # 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]*) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # 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). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( 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 test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf '%s\n' "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # 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 test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in #( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac 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. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf '%s\n' "$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 MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf '%s\n' "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # 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. 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf '%s\n' "$STRIP" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf '%s\n' "$ac_ct_STRIP" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf '%s\n' "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk 'busybox 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf '%s\n' "$AWK" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$AWK" && break done { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf '%s\n' "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @printf '%s\n' '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # 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;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } SET_MAKE= else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf '%s\n' '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 ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf '%s\n' "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in #( e) am__rm_f_notfound='""' ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in #( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf '%s\n' "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in #( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi 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 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='netcdf-fortran' VERSION='4.6.3' printf '%s\n' "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf '%s\n' "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} 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 (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 plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf '%s\n' "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } _am_tools=none fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf '%s\n' "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } _am_tools=none fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf '%s\n' "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else case e in #( e) USE_MAINTAINER_MODE=no ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf '%s\n' "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking user options" >&5 printf '%s\n' "$as_me: checking user options" >&6;} DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf '%s\n' "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} 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= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf '%s\n' "$ac_ct_CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf '%s\n' "$ac_ct_CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf '%s\n' "$ac_ct_CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$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; } # Provide some information about the compiler. printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err 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 printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf '%s\n' "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles 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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 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, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf '%s\n' "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } 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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 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 # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$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; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf '%s\n' "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf '%s\n' "$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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf '%s\n' "$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 { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf '%s\n' "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj 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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf '%s\n' "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$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; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf '%s\n' "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf '%s\n' "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf '%s\n' "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C23 features" >&5 printf %s "checking for $CC option to enable C23 features... " >&6; } if test ${ac_cv_prog_cc_c23+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c23=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c23_program _ACEOF for ac_arg in '' -std=gnu23 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c23=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c23" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c23" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c23" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c23" >&5 printf '%s\n' "$ac_cv_prog_cc_c23" >&6; } CC="$CC $ac_cv_prog_cc_c23" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c23 ac_prog_cc_stdc=c23 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 -std:c11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf '%s\n' "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf '%s\n' "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF 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 : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf '%s\n' "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi 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 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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 # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf '%s\n' "$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 depcc="$CC" am_compiler_list= { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > 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 done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # 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. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # 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 # 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} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf '%s\n' "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_RELAX_COORD_BOUND) || NC_RELAX_COORD_BOUND == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_relax_coord_bound=yes else case e in #( e) nc_relax_coord_bound=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$nc_relax_coord_bound" = xyes; then printf '%s\n' "#define NF_RELAX_COORD_BOUND 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with CDF5" >&5 printf %s "checking if netCDF was built with CDF5... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_HAS_CDF5) || NC_HAS_CDF5 == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_cdf5=yes else case e in #( e) nc_has_cdf5=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$nc_has_cdf5" = xyes; then printf '%s\n' "#define ENABLE_CDF5 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_cdf5" >&5 printf '%s\n' "$nc_has_cdf5" >&6; } ### # Zstandard logic stanza ### # Check whether --enable-zstandard_plugin was given. if test ${enable_zstandard_plugin+y} then : enableval=$enable_zstandard_plugin; fi test "x$enable_zstandard_plugin" = xno || enable_zstandard_plugin=yes if test "x$enable_zstandard_plugin" = xyes; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with Zstandard compression" >&5 printf %s "checking if netCDF was built with Zstandard compression... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_HAS_ZSTD) || NC_HAS_ZSTD == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_zstd=yes else case e in #( e) nc_has_zstd=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_zstd" >&5 printf '%s\n' "$nc_has_zstd" >&6; } if test "x$nc_has_zstd" = xyes; then if test "x${HDF5_PLUGIN_PATH}" = "x"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: " >&5 printf '%s\n' "$as_me: WARNING: " >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: ------------------------------------------" >&5 printf '%s\n' "$as_me: WARNING: ------------------------------------------" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: libnetcdf was built with zstd support, but HDF5_PLUGIN_PATH is not set. Either set the HDF5_PLUGIN_PATH environmental variable if zstandard tests fail, or use --disable-zstandard-plugin when running configure." >&5 printf '%s\n' "$as_me: WARNING: libnetcdf was built with zstd support, but HDF5_PLUGIN_PATH is not set. Either set the HDF5_PLUGIN_PATH environmental variable if zstandard tests fail, or use --disable-zstandard-plugin when running configure." >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: ------------------------------------------" >&5 printf '%s\n' "$as_me: WARNING: ------------------------------------------" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: " >&5 printf '%s\n' "$as_me: WARNING: " >&2;} nf_has_zstd=no nc_hdf5_plugin_path="" else nf_has_zstd=yes nc_hdf5_plugin_path="(HDF5_PLUGIN_PATH: ${HDF5_PLUGIN_PATH})" printf '%s\n' "#define ENABLE_ZSTD 1" >>confdefs.h fi else nf_has_zstd=no fi else nf_has_zstd=no fi ### # End Zstandard logic stanza ### { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with pnetcdf" >&5 printf %s "checking if netCDF was built with pnetcdf... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_HAS_PNETCDF) || NC_HAS_PNETCDF == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_pnetcdf=yes else case e in #( e) nc_has_pnetcdf=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$nc_has_pnetcdf" = xyes; then printf '%s\n' "#define NF_HAS_PNETCDF 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_pnetcdf" >&5 printf '%s\n' "$nc_has_pnetcdf" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with HDF5 parallel I/O features" >&5 printf %s "checking if netCDF was built with HDF5 parallel I/O features... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_HAS_PARALLEL4) || NC_HAS_PARALLEL4 == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_parallel4=yes else case e in #( e) nc_has_parallel4=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_parallel4" >&5 printf '%s\n' "$nc_has_parallel4" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with any parallel I/O features" >&5 printf %s "checking if netCDF was built with any parallel I/O features... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_HAS_PARALLEL) || NC_HAS_PARALLEL == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_parallel=yes else case e in #( e) nc_has_parallel=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_parallel" >&5 printf '%s\n' "$nc_has_parallel" >&6; } # Version 4.6.1 does not have NC_HAS_PARALLEL4 but does have # NC_HAS_PARALLEL. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF-fortran should be built with HDF5 parallel I/O features" >&5 printf %s "checking if netCDF-fortran should be built with HDF5 parallel I/O features... " >&6; } if test "x$nc_has_parallel" = xyes -a "x$nc_has_parallel4" = xno -a "x$nc_has_pnetcdf" = xno; then nc_has_parallel4=yes fi if test "x$nc_has_parallel4" = xyes; then printf '%s\n' "#define NF_HAS_PARALLEL4 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_parallel4" >&5 printf '%s\n' "$nc_has_parallel4" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with support for szip writes" >&5 printf %s "checking if netCDF was built with support for szip writes... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !(NC_HAS_SZIP_WRITE) choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_szip_write=yes else case e in #( e) nc_has_szip_write=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_szip_write" >&5 printf '%s\n' "$nc_has_szip_write" >&6; } if test "x$nc_has_szip_write" = xyes; then TEST_SZIP_WRITE_TRUE= TEST_SZIP_WRITE_FALSE='#' else TEST_SZIP_WRITE_TRUE='#' TEST_SZIP_WRITE_FALSE= fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if netCDF was built with support for quantize" >&5 printf %s "checking if netCDF was built with support for quantize... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #include #if !defined(NC_HAS_QUANTIZE) || NC_HAS_QUANTIZE == 0 choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : nc_has_quantize=yes else case e in #( e) nc_has_quantize=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$nc_has_quantize" = xyes; then printf '%s\n' "#define NF_HAS_QUANTIZE 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_quantize" >&5 printf '%s\n' "$nc_has_quantize" >&6; } if test "x$nc_has_quantize" = xyes; then TEST_QUANTIZE_TRUE= TEST_QUANTIZE_FALSE='#' else TEST_QUANTIZE_TRUE='#' TEST_QUANTIZE_FALSE= fi # Find valgrind, if available, and add targets for it (ex: # check-valgrind). # Check whether --enable-valgrind was given. if test ${enable_valgrind+y} then : enableval=$enable_valgrind; enable_valgrind=$enableval else case e in #( e) enable_valgrind= ;; esac fi if test "$enable_valgrind" != "no" then : # Check for Valgrind. # Extract the first word of "valgrind", so it can be a program name with args. set dummy valgrind; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_VALGRIND+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$VALGRIND"; then ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_VALGRIND="valgrind" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi VALGRIND=$ac_cv_prog_VALGRIND if test -n "$VALGRIND"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5 printf '%s\n' "$VALGRIND" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "$VALGRIND" = "" then : if test "$enable_valgrind" = "yes" then : as_fn_error $? "Could not find valgrind; either install it or reconfigure with --disable-valgrind" "$LINENO" 5 else case e in #( e) enable_valgrind=no ;; esac fi else case e in #( e) enable_valgrind=yes ;; esac fi fi if test "$enable_valgrind" = "yes"; then VALGRIND_ENABLED_TRUE= VALGRIND_ENABLED_FALSE='#' else VALGRIND_ENABLED_TRUE='#' VALGRIND_ENABLED_FALSE= fi VALGRIND_ENABLED=$enable_valgrind # Check for Valgrind tools we care about. valgrind_enabled_tools= # Check whether --enable-valgrind-memcheck was given. if test ${enable_valgrind_memcheck+y} then : enableval=$enable_valgrind_memcheck; enable_valgrind_memcheck=$enableval else case e in #( e) enable_valgrind_memcheck= ;; esac fi if test "$enable_valgrind" = "no" then : enable_valgrind_memcheck=no elif test "$enable_valgrind_memcheck" != "no" then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Valgrind tool memcheck" >&5 printf %s "checking for Valgrind tool memcheck... " >&6; } if test ${ax_cv_valgrind_tool_memcheck+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_valgrind_tool_memcheck=no if `$VALGRIND --tool=memcheck --help >/dev/null 2>&1` then : ax_cv_valgrind_tool_memcheck=yes fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ax_cv_valgrind_tool_memcheck" >&5 printf '%s\n' "$ax_cv_valgrind_tool_memcheck" >&6; } if test "$ax_cv_valgrind_tool_memcheck" = "no" then : if test "$enable_valgrind_memcheck" = "yes" then : as_fn_error $? "Valgrind does not support memcheck; reconfigure with --disable-valgrind-memcheck" "$LINENO" 5 else case e in #( e) enable_valgrind_memcheck=no ;; esac fi else case e in #( e) enable_valgrind_memcheck=yes ;; esac fi fi if test "$enable_valgrind_memcheck" = "yes" then : valgrind_enabled_tools="$valgrind_enabled_tools memcheck" fi ENABLE_VALGRIND_memcheck=$enable_valgrind_memcheck # Check whether --enable-valgrind-helgrind was given. if test ${enable_valgrind_helgrind+y} then : enableval=$enable_valgrind_helgrind; enable_valgrind_helgrind=$enableval else case e in #( e) enable_valgrind_helgrind= ;; esac fi if test "$enable_valgrind" = "no" then : enable_valgrind_helgrind=no elif test "$enable_valgrind_helgrind" != "no" then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Valgrind tool helgrind" >&5 printf %s "checking for Valgrind tool helgrind... " >&6; } if test ${ax_cv_valgrind_tool_helgrind+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_valgrind_tool_helgrind=no if `$VALGRIND --tool=helgrind --help >/dev/null 2>&1` then : ax_cv_valgrind_tool_helgrind=yes fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ax_cv_valgrind_tool_helgrind" >&5 printf '%s\n' "$ax_cv_valgrind_tool_helgrind" >&6; } if test "$ax_cv_valgrind_tool_helgrind" = "no" then : if test "$enable_valgrind_helgrind" = "yes" then : as_fn_error $? "Valgrind does not support helgrind; reconfigure with --disable-valgrind-helgrind" "$LINENO" 5 else case e in #( e) enable_valgrind_helgrind=no ;; esac fi else case e in #( e) enable_valgrind_helgrind=yes ;; esac fi fi if test "$enable_valgrind_helgrind" = "yes" then : valgrind_enabled_tools="$valgrind_enabled_tools helgrind" fi ENABLE_VALGRIND_helgrind=$enable_valgrind_helgrind # Check whether --enable-valgrind-drd was given. if test ${enable_valgrind_drd+y} then : enableval=$enable_valgrind_drd; enable_valgrind_drd=$enableval else case e in #( e) enable_valgrind_drd= ;; esac fi if test "$enable_valgrind" = "no" then : enable_valgrind_drd=no elif test "$enable_valgrind_drd" != "no" then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Valgrind tool drd" >&5 printf %s "checking for Valgrind tool drd... " >&6; } if test ${ax_cv_valgrind_tool_drd+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_valgrind_tool_drd=no if `$VALGRIND --tool=drd --help >/dev/null 2>&1` then : ax_cv_valgrind_tool_drd=yes fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ax_cv_valgrind_tool_drd" >&5 printf '%s\n' "$ax_cv_valgrind_tool_drd" >&6; } if test "$ax_cv_valgrind_tool_drd" = "no" then : if test "$enable_valgrind_drd" = "yes" then : as_fn_error $? "Valgrind does not support drd; reconfigure with --disable-valgrind-drd" "$LINENO" 5 else case e in #( e) enable_valgrind_drd=no ;; esac fi else case e in #( e) enable_valgrind_drd=yes ;; esac fi fi if test "$enable_valgrind_drd" = "yes" then : valgrind_enabled_tools="$valgrind_enabled_tools drd" fi ENABLE_VALGRIND_drd=$enable_valgrind_drd # Check whether --enable-valgrind-sgcheck was given. if test ${enable_valgrind_sgcheck+y} then : enableval=$enable_valgrind_sgcheck; enable_valgrind_sgcheck=$enableval else case e in #( e) enable_valgrind_sgcheck= ;; esac fi if test "$enable_valgrind" = "no" then : enable_valgrind_sgcheck=no elif test "$enable_valgrind_sgcheck" = "yes" then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Valgrind tool sgcheck" >&5 printf %s "checking for Valgrind tool sgcheck... " >&6; } if test ${ax_cv_valgrind_tool_sgcheck+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_valgrind_tool_sgcheck=no if `$VALGRIND --tool=exp-sgcheck --help >/dev/null 2>&1` then : ax_cv_valgrind_tool_sgcheck=yes fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ax_cv_valgrind_tool_sgcheck" >&5 printf '%s\n' "$ax_cv_valgrind_tool_sgcheck" >&6; } if test "$ax_cv_valgrind_tool_sgcheck" = "no" then : if test "$enable_valgrind_sgcheck" = "yes" then : as_fn_error $? "Valgrind does not support sgcheck; reconfigure with --disable-valgrind-sgcheck" "$LINENO" 5 else case e in #( e) enable_valgrind_sgcheck=no ;; esac fi else case e in #( e) enable_valgrind_sgcheck=yes ;; esac fi fi if test "$enable_valgrind_sgcheck" = "yes" then : valgrind_enabled_tools="$valgrind_enabled_tools sgcheck" fi ENABLE_VALGRIND_sgcheck=$enable_valgrind_sgcheck valgrind_tools="memcheck helgrind drd sgcheck" valgrind_enabled_tools=$valgrind_enabled_tools VALGRIND_CHECK_RULES=' # Valgrind check # # Optional: # - VALGRIND_SUPPRESSIONS_FILES: Space-separated list of Valgrind suppressions # files to load. (Default: empty) # - VALGRIND_FLAGS: General flags to pass to all Valgrind tools. # (Default: --num-callers=30) # - VALGRIND_$toolname_FLAGS: Flags to pass to Valgrind $toolname (one of: # memcheck, helgrind, drd, sgcheck). (Default: various) # Optional variables VALGRIND_SUPPRESSIONS ?= $(addprefix --suppressions=,$(VALGRIND_SUPPRESSIONS_FILES)) VALGRIND_FLAGS ?= --num-callers=30 VALGRIND_memcheck_FLAGS ?= --leak-check=full --show-reachable=no VALGRIND_helgrind_FLAGS ?= --history-level=approx VALGRIND_drd_FLAGS ?= VALGRIND_sgcheck_FLAGS ?= # Internal use valgrind_log_files = $(addprefix test-suite-,$(addsuffix .log,$(valgrind_tools))) valgrind_memcheck_flags = --tool=memcheck $(VALGRIND_memcheck_FLAGS) valgrind_helgrind_flags = --tool=helgrind $(VALGRIND_helgrind_FLAGS) valgrind_drd_flags = --tool=drd $(VALGRIND_drd_FLAGS) valgrind_sgcheck_flags = --tool=exp-sgcheck $(VALGRIND_sgcheck_FLAGS) valgrind_quiet = $(valgrind_quiet_$(V)) valgrind_quiet_ = $(valgrind_quiet_$(AM_DEFAULT_VERBOSITY)) valgrind_quiet_0 = --quiet valgrind_v_use = $(valgrind_v_use_$(V)) valgrind_v_use_ = $(valgrind_v_use_$(AM_DEFAULT_VERBOSITY)) valgrind_v_use_0 = @echo " USE " $(patsubst check-valgrind-%-am,%,$''@):; # Support running with and without libtool. ifneq ($(LIBTOOL),) valgrind_lt = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=execute else valgrind_lt = endif # Use recursive makes in order to ignore errors during check check-valgrind-am: ifeq ($(VALGRIND_ENABLED),yes) $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k \ $(foreach tool, $(valgrind_enabled_tools), check-valgrind-$(tool)) else @echo "Need to reconfigure with --enable-valgrind" endif # Valgrind running VALGRIND_TESTS_ENVIRONMENT = \ $(TESTS_ENVIRONMENT) \ env VALGRIND=$(VALGRIND) \ G_SLICE=always-malloc,debug-blocks \ G_DEBUG=fatal-warnings,fatal-criticals,gc-friendly VALGRIND_LOG_COMPILER = \ $(valgrind_lt) \ $(VALGRIND) $(VALGRIND_SUPPRESSIONS) --error-exitcode=1 $(VALGRIND_FLAGS) define valgrind_tool_rule check-valgrind-$(1)-am: ifeq ($$(VALGRIND_ENABLED)-$$(ENABLE_VALGRIND_$(1)),yes-yes) ifneq ($$(TESTS),) $$(valgrind_v_use)$$(MAKE) check-TESTS \ TESTS_ENVIRONMENT="$$(VALGRIND_TESTS_ENVIRONMENT)" \ LOG_COMPILER="$$(VALGRIND_LOG_COMPILER)" \ LOG_FLAGS="$$(valgrind_$(1)_flags)" \ TEST_SUITE_LOG=test-suite-$(1).log endif else ifeq ($$(VALGRIND_ENABLED),yes) @echo "Need to reconfigure with --enable-valgrind-$(1)" else @echo "Need to reconfigure with --enable-valgrind" endif endef $(foreach tool,$(valgrind_tools),$(eval $(call valgrind_tool_rule,$(tool)))) A''M_DISTCHECK_CONFIGURE_FLAGS ?= A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-valgrind MOSTLYCLEANFILES ?= MOSTLYCLEANFILES += $(valgrind_log_files) .PHONY: check-valgrind $(add-prefix check-valgrind-,$(valgrind_tools)) ' if test "x$VALGRIND_ENABLED" = xyes; then ENABLE_VALGRIND_TRUE= ENABLE_VALGRIND_FALSE='#' else ENABLE_VALGRIND_TRUE='#' ENABLE_VALGRIND_FALSE= fi # Does the user want to run extra parallel tests when parallel # netCDF-4 is built? { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether parallel IO tests should be run" >&5 printf %s "checking whether parallel IO tests should be run... " >&6; } # Check whether --enable-parallel-tests was given. if test ${enable_parallel_tests+y} then : enableval=$enable_parallel_tests; fi test "x$enable_parallel_tests" = xyes || enable_parallel_tests=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_parallel_tests" >&5 printf '%s\n' "$enable_parallel_tests" >&6; } if test $enable_parallel_tests = yes -a "x$nc_has_pnetcdf" = xno -a "x$nc_has_parallel4" = xno ; then # paralle I/O is not enabled as_fn_error $? "Parallel I/O tests requested, but netcdf-c does not support parallel I/O." "$LINENO" 5 fi if test "x$enable_parallel_tests" = xyes; then TEST_PARALLEL_TRUE= TEST_PARALLEL_FALSE='#' else TEST_PARALLEL_TRUE='#' TEST_PARALLEL_FALSE= fi # Did the user specify an MPI launcher other than mpiexec? { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether a user specified program to run mpi programs" >&5 printf %s "checking whether a user specified program to run mpi programs... " >&6; } # Check whether --with-mpiexec was given. if test ${with_mpiexec+y} then : withval=$with_mpiexec; MPIEXEC=$with_mpiexec else case e in #( e) MPIEXEC=mpiexec ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $MPIEXEC" >&5 printf '%s\n' "$MPIEXEC" >&6; } MPIEXEC=$MPIEXEC # Determine if we want to enable doxygen-generated documentation. Any # new documentation input files should be inserted into # docs/Doxyfile.in and possibly docs/Makefile.am { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether netCDF documentation should be generated" >&5 printf %s "checking whether netCDF documentation should be generated... " >&6; } # Check whether --enable-doxygen was given. if test ${enable_doxygen+y} then : enableval=$enable_doxygen; fi test "x$enable_doxygen" = xyes || enable_doxygen=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_doxygen" >&5 printf '%s\n' "$enable_doxygen" >&6; } if test "x$enable_doxygen" = xyes; then BUILD_DOCS_TRUE= BUILD_DOCS_FALSE='#' else BUILD_DOCS_TRUE='#' BUILD_DOCS_FALSE= fi # Does the user want to generate dot-based documentation? # Check whether --enable-dot was given. if test ${enable_dot+y} then : enableval=$enable_dot; fi test "x$enable_dot" = xyes || enable_dot=no # Does the user want to generate internal documentation? # Check whether --enable-internal-docs was given. if test ${enable_internal_docs+y} then : enableval=$enable_internal_docs; fi test "x$enable_internal_docs" = xyes || enable_internal_docs=no BUILD_INTERNAL_DOCS=$enable_internal_docs # Is doxygen installed? If so, have configure construct the Doxyfile. for ac_prog in doxygen do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DOXYGEN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DOXYGEN"; then ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DOXYGEN="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DOXYGEN=$ac_cv_prog_DOXYGEN if test -n "$DOXYGEN"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 printf '%s\n' "$DOXYGEN" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$DOXYGEN" && break done if test -z "$DOXYGEN"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: Doxygen not found - documentation will not be built" >&5 printf '%s\n' "$as_me: WARNING: Doxygen not found - documentation will not be built" >&2;} fi # Is graphviz/dot installed? If so, we'll use dot to create # graphs in the documentation. for ac_prog in dot do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DOT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DOT"; then ac_cv_prog_DOT="$DOT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DOT="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DOT=$ac_cv_prog_DOT if test -n "$DOT"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $DOT" >&5 printf '%s\n' "$DOT" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$DOT" && break done if test -z "$DOT"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will use simple charts in documentation" >&5 printf '%s\n' "$as_me: WARNING: dot not found - will use simple charts in documentation" >&2;} HAVE_DOT=NO elif test "x$enable_dot" = xno; then HAVE_DOT=NO else HAVE_DOT=YES fi # If we have doxygen, and it's enabled, then process the file. if test "x$enable_doxygen" != xno; then if test -n "$DOXYGEN"; then ac_config_files="$ac_config_files docs/Doxyfile" fi fi # Find the C compiler. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: finding C compiler" >&5 printf '%s\n' "$as_me: finding C compiler" >&6;} 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf '%s\n' "$ac_ct_CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf '%s\n' "$ac_ct_CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf '%s\n' "$CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf '%s\n' "$ac_ct_CC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$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; } # Provide some information about the compiler. printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err 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 printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf '%s\n' "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf '%s\n' "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C23 features" >&5 printf %s "checking for $CC option to enable C23 features... " >&6; } if test ${ac_cv_prog_cc_c23+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c23=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c23_program _ACEOF for ac_arg in '' -std=gnu23 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c23=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c23" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c23" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c23" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c23" >&5 printf '%s\n' "$ac_cv_prog_cc_c23" >&6; } CC="$CC $ac_cv_prog_cc_c23" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c23 ac_prog_cc_stdc=c23 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 -std:c11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf '%s\n' "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf '%s\n' "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF 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 : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf '%s\n' "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf '%s\n' "none needed" >&6; } else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf '%s\n' "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi 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 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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 # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf '%s\n' "$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 depcc="$CC" am_compiler_list= { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > 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 done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # 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. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # 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 # 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} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf '%s\n' "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Derived from code rejected by Sun C 1.0 and similar vintage. */ int x[] = {25, 17}; typedef int const *iptr; iptr foo = &x[0]; ++foo; if (!*foo) return 0; } { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes else case e in #( e) ac_cv_c_const=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf '%s\n' "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then printf '%s\n' "#define const /**/" >>confdefs.h fi # Sed is needed to construct tests. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf '%s\n' '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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 if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf '%s\n' "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed if test -z "$SED"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: sed not found - some tests will not be built" >&5 printf '%s\n' "$as_me: WARNING: sed not found - some tests will not be built" >&2;} fi if test -n "${SED+1}"; then USE_SED_TRUE= USE_SED_FALSE='#' else USE_SED_TRUE='#' USE_SED_FALSE= fi # Find fortran compiler. If FC isn't set after AC_PROG_FC, we couldn't # find a fortran compiler. If the user requested the fortran API, and # has told us not to recover from a missing compiler, then bail out # right here. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: finding Fortran compiler" >&5 printf '%s\n' "$as_me: finding Fortran compiler" >&6;} 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 if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf '%s\n' "$FC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf '%s\n' "$ac_ct_FC" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf '%s\n' "$as_me:${as_lineno-$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" 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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err 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 printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf '%s\n' "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in #( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf '%s\n' "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= 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' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $FC 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 printf '%s\n' "$F77" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $FC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 printf '%s\n' "$ac_ct_F77" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. printf '%s\n' "$as_me:${as_lineno-$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" 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\"" printf '%s\n' "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err 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 printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran 77" >&5 printf %s "checking whether the compiler supports GNU Fortran 77... " >&6; } if test ${ac_cv_f77_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 printf '%s\n' "$ac_cv_f77_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+y} ac_save_FFLAGS=$FFLAGS FFLAGS= { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 printf %s "checking whether $F77 accepts -g... " >&6; } if test ${ac_cv_prog_f77_g+y} then : printf %s "(cached) " >&6 else case e in #( e) FFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO" then : ac_cv_prog_f77_g=yes else case e in #( e) ac_cv_prog_f77_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 printf '%s\n' "$ac_cv_prog_f77_g" >&6; } if test $ac_test_FFLAGS; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= 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 ## Compiler with version information. This consists of the full path ## name of the compiler and the reported version number. ## Strip anything that looks like a flag off of $FC FC_NOFLAGS=`echo $FC | sed 's/ -.*//'` if `echo $FC_NOFLAGS | grep ^/ >/dev/null 2>&1`; then FC_VERSION="$FC" else FC_VERSION="$FC" FC_VERSION="$(dirname $(which $FC))/$FC" fi if test -n "$fc_version_info"; then FC_VERSION="$FC_VERSION ( $fc_version_info)" fi # If we couldn't find an F90 compiler, deal with it. if test "${FC+set}" = set && test "x$FC" = x; then { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Can't find F90 compiler. See 'config.log' for more details" "$LINENO" 5; } fi # Does the user want to test for Fortran 2003 compiler. # Added to get around NAG evaluation compiler error turning off F03 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler is checked for ISO_C_BINDING support" >&5 printf %s "checking whether Fortran compiler is checked for ISO_C_BINDING support... " >&6; } # Check whether --enable-f03-compiler-check was given. if test ${enable_f03_compiler_check+y} then : enableval=$enable_f03_compiler_check; fi test "x$enable_f03_compiler_check" = xno || enable_f03_compiler_check=yes { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_f03_compiler_check" >&5 printf '%s\n' "$enable_f03_compiler_check" >&6; } # next check to see if the Fortran compiler will support # ISO_C_BINDING nc_iso_c_binding=yes # Some f90 compilers change the case of the mod file names. Others # require special flags to be set to deal with .f90 files. Find out # about this compiler. 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 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf '%s\n' "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi fi 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 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking fortran 90 modules inclusion flag" >&5 printf %s "checking fortran 90 modules inclusion flag... " >&6; } if test ${ax_cv_f90_modflag+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i cat > conftest.$ac_ext <<_ACEOF module conftest_module contains subroutine conftest_routine write(*,'(a)') 'gotcha!' end subroutine conftest_routine end module conftest_module _ACEOF if ac_fn_fc_try_compile "$LINENO" then : fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cd .. ax_cv_f90_modflag="not found" 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 program conftest_program use conftest_module call conftest_routine end program conftest_program _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ax_cv_f90_modflag="$ax_flag" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS="$ax_save_FCFLAGS" fi done rm -fr tmpdir_$i if test "$ax_flag" = "not found" ; then as_fn_error $? "unable to find compiler flag for modules inclusion" "$LINENO" 5 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 ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ax_cv_f90_modflag" >&5 printf '%s\n' "$ax_cv_f90_modflag" >&6; } MOD_FLAG=${ax_cv_f90_modflag} if test "x$enable_f03_compiler_check" = xyes; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports Fortran 2003 ISO_C_BINDING" >&5 printf %s "checking if Fortran compiler supports Fortran 2003 ISO_C_BINDING... " >&6; } cat <conftest.f90 module conftest_module USE ISO_C_BINDING end module conftest_module EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} conftest.f90' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nc_iso_c_binding=yes else nc_iso_c_binding=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_iso_c_binding" >&5 printf '%s\n' "$nc_iso_c_binding" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports Fortran 2008 ISO_FORTRAN_ENV additions" >&5 printf %s "checking if Fortran compiler supports Fortran 2008 ISO_FORTRAN_ENV additions... " >&6; } cat <conftest.f90 Program test USE ISO_FORTRAN_ENV, ONLY: REAL32, REAL64, INT8, INT16, INT32, INT64 End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} conftest.f90' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nc_f2008_is0_env_additions=yes printf '%s\n' "#define HAVE_F2008 1" >>confdefs.h else nc_f2008_is0_env_additions=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_f2008_is0_env_additions" >&5 printf '%s\n' "$nc_f2008_is0_env_additions" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports TS29113 standard extension" >&5 printf %s "checking if Fortran compiler supports TS29113 standard extension... " >&6; } cat <conftest.f90 Program test USE ISO_C_BINDING, ONLY: C_PTRDIFF_T End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} conftest.f90' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nc_ts29113_support=yes printf '%s\n' "#define HAVE_TS29113_SUPPORT 1" >>confdefs.h else nc_ts29113_support=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_ts29113_support" >&5 printf '%s\n' "$nc_ts29113_support" >&6; } if test "x$nc_iso_c_binding" = xno; then { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Can't use build F03 interfaces See 'config.log' for more details" "$LINENO" 5; } fi fi # Test to see if fortran compiler supports the flag # -fallow-argument-mismatch flag introduced in gfortran 10. # # Also allow support for NAG compiler using the -mismatch_all flag. # # See https://github.com/Unidata/netcdf-fortran/issues/212 # See https://github.com/Unidata/netcdf-fortran/issues/218 ac_save_FCFLAGS="$FCFLAGS" ac_save_FFLAGS="$FFLAGS" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports allow-mismatch flag" >&5 printf %s "checking if Fortran compiler supports allow-mismatch flag... " >&6; } cat <conftest.f90 Program test USE ISO_C_BINDING, ONLY: C_PTRDIFF_T End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} -fallow-argument-mismatch conftest.f90' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nf_allow_mismatch=yes FCFLAGS="${FCFLAGS} -fallow-argument-mismatch" FFLAGS="${FFLAGS} -fallow-argument-mismatch" else nf_allow_mismatch=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nf_allow_mismatch" >&5 printf '%s\n' "$nf_allow_mismatch" >&6; } # End testing of gfortan allow-mismatch flags. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports mismatch_all flag" >&5 printf %s "checking if Fortran compiler supports mismatch_all flag... " >&6; } cat <conftest.f90 Program test USE ISO_C_BINDING, ONLY: C_PTRDIFF_T End Program EOF doit='$FC -c ${FCFLAGS} ${FCFLAGS_f90} -mismatch_all conftest.f90' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nf_mismatch_all=yes FCFLAGS="${FCFLAGS} -mismatch_all" FFLAGS="${FFLAGS} -mismatch_all" else nf_mismatch_all=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nf_mismatch_all" >&5 printf '%s\n' "$nf_mismatch_all" >&6; } #end testing of NAG mismatch_all flag. ## # End mismatch checks ## # We must have F2003 ISO bindings to build. if test "x$nc_iso_c_binding" = xno; then { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Fortran 2003 interface not supported See 'config.log' for more details" "$LINENO" 5; } fi nc_build_f03=yes # Does the user want to check into fortran type information? { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether fortran type sizes should be checked" >&5 printf %s "checking whether fortran type sizes should be checked... " >&6; } # Check whether --enable-fortran-type-check was given. if test ${enable_fortran_type_check+y} then : enableval=$enable_fortran_type_check; fi test "x$enable_fortran_type_check" = xno || enable_fortran_type_check=yes { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_fortran_type_check" >&5 printf '%s\n' "$enable_fortran_type_check" >&6; } # Does the user want to run tests for large files (> 2GiB)? { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether large file (> 2GB) tests should be run" >&5 printf %s "checking whether large file (> 2GB) tests should be run... " >&6; } # Check whether --enable-large-file-tests was given. if test ${enable_large_file_tests+y} then : enableval=$enable_large_file_tests; fi test "x$enable_large_file_tests" = xyes || enable_large_file_tests=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_large_file_tests" >&5 printf '%s\n' "$enable_large_file_tests" >&6; } if test x$enable_large_file_tests = xyes; then LARGE_FILE_TESTS_TRUE= LARGE_FILE_TESTS_FALSE='#' else LARGE_FILE_TESTS_TRUE='#' LARGE_FILE_TESTS_FALSE= fi if test "x$enable_large_file_tests" = xyes; then printf '%s\n' "#define LARGE_FILE_TESTS 1" >>confdefs.h fi # Does the user want to run benchmarks? { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether benchmarks should be run" >&5 printf %s "checking whether benchmarks should be run... " >&6; } # Check whether --enable-benchmarks was given. if test ${enable_benchmarks+y} then : enableval=$enable_benchmarks; fi test "x$enable_benchmarks" = xno || enable_benchmarks=yes { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_benchmarks" >&5 printf '%s\n' "$enable_benchmarks" >&6; } if test x$enable_benchmarks = xyes; then BUILD_BENCHMARKS_TRUE= BUILD_BENCHMARKS_FALSE='#' else BUILD_BENCHMARKS_TRUE='#' BUILD_BENCHMARKS_FALSE= fi # If the env. variable TEMP_LARGE is set, or if # --with-temp-large=, use it as a place for the large # (i.e. > 2 GiB) files created during the large file testing. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking where to put large temp files if large file tests are run" >&5 printf %s "checking where to put large temp files if large file tests are run... " >&6; } # Check whether --with-temp-large was given. if test ${with_temp_large+y} then : withval=$with_temp_large; TEMP_LARGE=$with_temp_large fi TEMP_LARGE=${TEMP_LARGE-.} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $TEMP_LARGE" >&5 printf '%s\n' "$TEMP_LARGE" >&6; } printf '%s\n' "#define TEMP_LARGE \"$TEMP_LARGE\"" >>confdefs.h # Allow setting the fortran module install dir # Check whether --with-fmoddir was given. if test ${with_fmoddir+y} then : withval=$with_fmoddir; fmoddir=$withval else case e in #( e) fmoddir="\${includedir}" ;; esac fi fmoddir=$fmoddir # Set up libtool. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: setting up libtool" >&5 printf '%s\n' "$as_me: setting up libtool" >&6;} case `pwd` in *\ * | *\ *) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf '%s\n' "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.5.4' macro_revision='2.5.4' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf '%s\n' "printf" >&6; } ;; print*) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf '%s\n' "print -r" >&6; } ;; *) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf '%s\n' "cat" >&6; } ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf '%s\n' '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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 if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf '%s\n' "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 # 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 #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf '%s\n' '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 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" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 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 fi else ac_cv_path_GREP=$GREP fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf '%s\n' "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 # 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 #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf '%s\n' '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 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" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 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 fi else ac_cv_path_EGREP=$EGREP fi fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf '%s\n' "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" EGREP_TRADITIONAL=$EGREP ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf '%s\n' 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "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 if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf '%s\n' "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else case e in #( e) with_gnu_ld=no ;; esac fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw* | *-*-windows*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf '%s\n' "$LD" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else case e in #( e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf '%s\n' "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw* | windows*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf '%s\n' "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf '%s\n' "$DUMPBIN" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf '%s\n' "$ac_ct_DUMPBIN" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf '%s\n' "$lt_cv_nm_interface" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf '%s\n' "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else case e in #( e) i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu* | ironclad*) # Under GNU Hurd and Ironclad, this test is not required because there # is no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | windows* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf '%s\n' "$lt_cv_sys_max_cmd_len" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf '%s\n' "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) case $host in *-*-mingw* ) case $build in *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf '%s\n' "$lt_cv_to_host_file_cmd" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* | *-*-windows* ) case $build in *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf '%s\n' "$lt_cv_to_tool_file_cmd" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_reload_flag='-r' ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf '%s\n' "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FILECMD"; then ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FILECMD="file" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_FILECMD" && ac_cv_prog_FILECMD=":" fi ;; esac fi FILECMD=$ac_cv_prog_FILECMD if test -n "$FILECMD"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 printf '%s\n' "$FILECMD" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf '%s\n' "$OBJDUMP" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf '%s\n' "$ac_ct_OBJDUMP" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | windows* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; *-mlibc) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; serenity*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf '%s\n' "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | windows* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf '%s\n' "$DLLTOOL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf '%s\n' "$ac_ct_DLLTOOL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf '%s\n' "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf '%s\n' "$RANLIB" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf '%s\n' "$ac_ct_RANLIB" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then for ac_prog in ar 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf '%s\n' "$AR" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf '%s\n' "$ac_ct_AR" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because that's what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf '%s\n' "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf '%s\n' "$STRIP" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi 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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf '%s\n' "$ac_ct_STRIP" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else case e in #( e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | windows* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BCDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw* | windows*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ;; esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf '%s\n' "failed" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf '%s\n' "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else case e in #( e) with_sysroot=no ;; esac fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then # Trim trailing / since we'll always append absolute paths and we want # to avoid //, if only for less confusing output for the user. lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf '%s\n' "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf '%s\n' "${lt_sysroot:-no}" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else case e in #( e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf '%s\n' "$ac_cv_path_lt_DD" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else case e in #( e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf '%s\n' "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*|x86_64-gnu*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*|x86_64-gnu*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else case e in #( e) lt_cv_cc_needs_belf=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext 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 ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf '%s\n' "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf '%s\n' "$MANIFEST_TOOL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf '%s\n' "$ac_ct_MANIFEST_TOOL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_manifest_tool+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_path_manifest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_manifest_tool=yes fi rm -f conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_manifest_tool" >&5 printf '%s\n' "$lt_cv_path_manifest_tool" >&6; } if test yes != "$lt_cv_path_manifest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf '%s\n' "$DSYMUTIL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf '%s\n' "$ac_ct_DSYMUTIL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf '%s\n' "$NMEDIT" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf '%s\n' "$ac_ct_NMEDIT" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf '%s\n' "$LIPO" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf '%s\n' "$ac_ct_LIPO" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf '%s\n' "$OTOOL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf '%s\n' "$ac_ct_OTOOL" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf '%s\n' "$OTOOL64" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf '%s\n' "$ac_ct_OTOOL64" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf '%s\n' "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf '%s\n' "$lt_cv_apple_cc_single_mod" >&6; } # Feature test to disable chained fixups since it is not # compatible with '-undefined dynamic_lookup' { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for -no_fixup_chains linker flag" >&5 printf %s "checking for -no_fixup_chains linker flag... " >&6; } if test ${lt_cv_support_no_fixup_chains+y} then : printf %s "(cached) " >&6 else case e in #( e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_support_no_fixup_chains=yes else case e in #( e) lt_cv_support_no_fixup_chains=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_support_no_fixup_chains" >&5 printf '%s\n' "$lt_cv_support_no_fixup_chains" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else case e in #( e) lt_cv_ld_exported_symbols_list=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf '%s\n' "$lt_cv_ld_exported_symbols_list" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf '%s\n' "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' if test yes = "$lt_cv_support_no_fixup_chains"; then as_fn_append _lt_dar_allow_undefined ' $wl-no_fixup_chains' fi ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi _lt_dar_needs_single_mod=no case $host_os in rhapsody* | darwin1.*) _lt_dar_needs_single_mod=yes ;; darwin*) # When targeting Mac OS X 10.4 (darwin 8) or later, # -single_module is the default and -multi_module is unsupported. # The toolchain on macOS 10.14 (darwin 18) and later cannot # target any OS version that needs -single_module. case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*-darwin[567].*|10.[0-3],*-darwin[5-9].*|10.[0-3],*-darwin1[0-7].*) _lt_dar_needs_single_mod=yes ;; esac ;; esac if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf '%s\n' "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf '%s\n' "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf '%s\n' "#define HAVE_DLFCN_H 1" >>confdefs.h fi func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_shared=yes ;; esac fi # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_static=yes ;; esac fi # Check whether --enable-pic was given. if test ${enable_pic+y} then : enableval=$enable_pic; lt_p=${PACKAGE-default} case $enableval in yes|no) pic_mode=$enableval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $enableval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) pic_mode=default ;; esac fi ;; esac fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_fast_install=yes ;; esac fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --enable-aix-soname was given. if test ${enable_aix_soname+y} then : enableval=$enable_aix_soname; case $enableval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --enable-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$enable_aix_soname else case e in #( e) # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else case e in #( e) if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_with_aix_soname=aix ;; esac fi ;; esac fi enable_aix_soname=$lt_cv_with_aix_soname ;; esac fi with_aix_soname=$enable_aix_soname { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf '%s\n' "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf '%s\n' "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf '%s\n' "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else case e in #( e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf '%s\n' "$MAGIC_CMD" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else case e in #( e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf '%s\n' "$MAGIC_CMD" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(void){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf '%s\n' "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *-mlibc) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; serenity*) ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf '%s\n' "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf '%s\n' "$lt_cv_prog_compiler_c_o" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf '%s\n' "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf '%s\n' "$hard_links" >&6; } if test no = "$hard_links"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf '%s\n' "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' file_list_spec='@' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=no ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; *-mlibc) archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -Fe$output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf '%s\n' "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else case e in #( e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else case e in #( e) lt_cv_irix_exported_symbol=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf '%s\n' "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; esac ;; *-mlibc) ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; serenity*) ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf '%s\n' "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else case e in #( e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf '%s\n' "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | windows* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | windows* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds # If user builds GCC with multilib enabled, # it should just install on $(libdir) # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. if test xyes = x"$multilib"; then postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ $install_prog $dir/$dlname $destdir/$dlname~ chmod a+x $destdir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib $destdir/$dlname'\'' || exit \$?; fi' else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac case $host_cpu in powerpc64) # On FreeBSD bi-arch platforms, a different variable is used for 32-bit # binaries. See . cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int test_pointer_size[sizeof (void *) - 5]; _ACEOF if ac_fn_c_try_compile "$LINENO" then : shlibpath_var=LD_LIBRARY_PATH else case e in #( e) shlibpath_var=LD_32_LIBRARY_PATH ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) shlibpath_var=LD_LIBRARY_PATH ;; esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' hardcode_into_libs=no ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # -rpath works at least for libraries that are not overridden by # libraries installed in system locations. hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir ;; esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *-mlibc) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='mlibc ld.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; serenity*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no dynamic_linker='SerenityOS LibELF' ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; emscripten*) version_type=none need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= dynamic_linker="Emscripten linker" lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *-mlibc) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; serenity*) ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf '%s\n' "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi ='-fPIC' archive_cmds='$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib -s EXPORTED_FUNCTIONS=@$output_objdir/$soname.expsym' archive_cmds_need_lc=no no_undefined_flag= ;; *) dynamic_linker=no ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf '%s\n' "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf '%s\n' "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | windows* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf '%s\n' "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else case e in #( e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; esac fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char shl_load (void); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else case e in #( e) ac_cv_lib_dld_shl_load=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf '%s\n' "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else case e in #( e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf '%s\n' "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else case e in #( e) ac_cv_lib_svld_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf '%s\n' "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else case e in #( e) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dld_link (void); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else case e in #( e) ac_cv_lib_dld_dld_link=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf '%s\n' "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi ;; esac fi ;; esac fi ;; esac fi ;; esac fi ;; esac fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else case e in #( e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord (void) __attribute__((visibility("default"))); #endif int fnord (void) { return 42; } int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf '%s\n' "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else case e in #( e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord (void) __attribute__((visibility("default"))); #endif int fnord (void) { return 42; } int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf '%s\n' "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi ;; *) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } ;; esac fi fi # Report what library types will actually be built { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf '%s\n' "$can_build_shared" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf '%s\n' "$enable_shared" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf '%s\n' "$enable_static" >&6; } 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 CC=$lt_save_CC ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no inherit_rpath_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds reload_flag_F77=$reload_flag reload_cmds_F77=$reload_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC compiler_F77=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result GCC=$G77 if test -n "$compiler"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf '%s\n' "$can_build_shared" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf '%s\n' "$enable_shared" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf '%s\n' "$enable_static" >&6; } GCC_F77=$G77 LD_F77=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test yes = "$GCC"; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi lt_prog_compiler_pic_F77='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_F77='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_F77='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *-mlibc) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; serenity*) ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_F77"; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_static_works_F77" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_F77"; then : else lt_prog_compiler_static_F77= fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_c_o_F77" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_F77" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf '%s\n' "$hard_links" >&6; } if test no = "$hard_links"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf '%s\n' "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_F77= always_export_symbols_F77=no archive_cmds_F77= archive_expsym_cmds_F77= compiler_needs_object_F77=no enable_shared_with_static_runtimes_F77=no export_dynamic_flag_spec_F77= export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_F77=no hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported inherit_rpath_F77=no link_all_deplibs_F77=unknown module_cmds_F77= module_expsym_cmds_F77= old_archive_from_new_cmds_F77= old_archive_from_expsyms_cmds_F77= thread_safe_flag_spec_F77= whole_archive_flag_spec_F77= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; esac ld_shlibs_F77=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' export_dynamic_flag_spec_F77='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' export_dynamic_flag_spec_F77='$wl--export-all-symbols' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_F77='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' file_list_spec_F77='@' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_F77='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; haiku*) archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_F77=no ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported shrext_cmds=.dll archive_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_from_new_cmds_F77='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_F77=yes file_list_spec_F77='@' ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='$wl-rpath,$libdir' export_dynamic_flag_spec_F77='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_F77= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_F77=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_F77=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' export_dynamic_flag_spec_F77='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_F77=no fi ;; *-mlibc) archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test no = "$ld_shlibs_F77"; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes file_list_spec_F77='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_F77=no hardcode_direct_absolute_F77=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_F77='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__F77+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_F77='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__F77+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' $wl-bernotok' allow_undefined_flag_F77=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_F77='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' fi archive_cmds_need_lc_F77=yes archive_expsym_cmds_F77='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes file_list_spec_F77='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -Fe$output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_F77='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, F77)='true' enable_shared_with_static_runtimes_F77=yes exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_F77='chmod 644 $oldlib' postlink_cmds_F77='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_F77=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_F77=yes else whole_archive_flag_spec_F77='' fi link_all_deplibs_F77=yes allow_undefined_flag_F77=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_F77="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_F77="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='$wl+b $wl$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds_F77='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_F77='$wl+b $wl$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_F77='$wl+b $wl$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else case e in #( e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_f77_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else case e in #( e) lt_cv_irix_exported_symbol=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf '%s\n' "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' hardcode_libdir_separator_F77=: inherit_rpath_F77=yes link_all_deplibs_F77=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs_F77=yes archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' ;; esac ;; *-mlibc) ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no hardcode_direct_absolute_F77=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='$wl-rpath,$libdir' export_dynamic_flag_spec_F77='$wl-E' else archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='$wl-rpath,$libdir' fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported shrext_cmds=.dll archive_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_from_new_cmds_F77='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_F77=yes file_list_spec_F77='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag_F77=' $wl-expect_unresolved $wl\*' archive_cmds_F77='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag_F77=' $wl-expect_unresolved $wl\*' archive_cmds_F77='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi archive_cmds_need_lc_F77='no' hardcode_libdir_separator_F77=: ;; serenity*) ;; solaris*) no_undefined_flag_F77=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds_F77='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_F77='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds_F77='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec_F77='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='$wl-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds_F77='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='$wl-z,text' allow_undefined_flag_F77='$wl-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='$wl-R,$libdir' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds_F77='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_F77='$wl-Blargedynsym' ;; esac fi fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5 printf '%s\n' "$ld_shlibs_F77" >&6; } test no = "$ld_shlibs_F77" && can_build_shared=no with_gnu_ld_F77=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_F77=no else lt_cv_archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5 printf '%s\n' "$lt_cv_archive_cmds_need_lc_F77" >&6; } archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77 ;; esac fi ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds # If user builds GCC with multilib enabled, # it should just install on $(libdir) # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. if test xyes = x"$multilib"; then postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ $install_prog $dir/$dlname $destdir/$dlname~ chmod a+x $destdir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib $destdir/$dlname'\'' || exit \$?; fi' else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac case $host_cpu in powerpc64) # On FreeBSD bi-arch platforms, a different variable is used for 32-bit # binaries. See . cat > conftest.$ac_ext <<_ACEOF int test_pointer_size[sizeof (void *) - 5]; _ACEOF if ac_fn_f77_try_compile "$LINENO" then : shlibpath_var=LD_LIBRARY_PATH else case e in #( e) shlibpath_var=LD_32_LIBRARY_PATH ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) shlibpath_var=LD_LIBRARY_PATH ;; esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' hardcode_into_libs=no ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # -rpath works at least for libraries that are not overridden by # libraries installed in system locations. hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir ;; esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *-mlibc) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='mlibc ld.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; serenity*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no dynamic_linker='SerenityOS LibELF' ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; emscripten*) version_type=none need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= dynamic_linker="Emscripten linker" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test yes = "$GCC"; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi lt_prog_compiler_pic_F77='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_F77='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_F77='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *-mlibc) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; serenity*) ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_F77"; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_F77+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 printf '%s\n' "$lt_cv_prog_compiler_static_works_F77" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_F77"; then : else lt_prog_compiler_static_F77= fi ='-fPIC' archive_cmds_F77='$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib' archive_expsym_cmds_F77='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib -s EXPORTED_FUNCTIONS=@$output_objdir/$soname.expsym' archive_cmds_need_lc_F77=no no_undefined_flag_F77= ;; *) dynamic_linker=no ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf '%s\n' "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || test -n "$runpath_var_F77" || test yes = "$hardcode_automatic_F77"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_F77" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" && test no != "$hardcode_minus_L_F77"; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5 printf '%s\n' "$hardcode_action_F77" >&6; } if test relink = "$hardcode_action_F77" || test yes = "$inherit_rpath_F77"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" 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 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 if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi archive_cmds_need_lc_FC=no allow_undefined_flag_FC= always_export_symbols_FC=no archive_expsym_cmds_FC= export_dynamic_flag_spec_FC= hardcode_direct_FC=no hardcode_direct_absolute_FC=no hardcode_libdir_flag_spec_FC= hardcode_libdir_separator_FC= hardcode_minus_L_FC=no hardcode_automatic_FC=no inherit_rpath_FC=no module_cmds_FC= module_expsym_cmds_FC= link_all_deplibs_FC=unknown old_archive_cmds_FC=$old_archive_cmds reload_flag_FC=$reload_flag reload_cmds_FC=$reload_cmds no_undefined_flag_FC= whole_archive_flag_spec_FC= enable_shared_with_static_runtimes_FC=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o objext_FC=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu compiler_FC=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result if test -n "$compiler"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf '%s\n' "$can_build_shared" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf '%s\n' "$enable_shared" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf '%s\n' "$enable_static" >&6; } GCC_FC=$ac_cv_fc_compiler_gnu LD_FC=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_FC= postdep_objects_FC= predeps_FC= postdeps_FC= compiler_lib_search_path_FC= cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R,l}" and the path. # Remove the space. if test x-L = x"$p" || test x-R = x"$p" || test x-l = x"$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_FC"; then compiler_lib_search_path_FC=$prev$p else compiler_lib_search_path_FC="${compiler_lib_search_path_FC} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_FC"; then postdeps_FC=$prev$p else postdeps_FC="${postdeps_FC} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_FC"; then predep_objects_FC=$p else predep_objects_FC="$predep_objects_FC $p" fi else if test -z "$postdep_objects_FC"; then postdep_objects_FC=$p else postdep_objects_FC="$postdep_objects_FC $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling FC test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case " $postdeps_FC " in *" -lc "*) archive_cmds_need_lc_FC=no ;; esac compiler_lib_search_dirs_FC= if test -n "${compiler_lib_search_path_FC}"; then compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_FC= lt_prog_compiler_pic_FC= lt_prog_compiler_static_FC= if test yes = "$GCC"; then lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_static_FC='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_FC='-Bstatic' fi lt_prog_compiler_pic_FC='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_FC='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_FC='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_FC='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_FC='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_FC= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_FC='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_FC=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_FC='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_FC=-Kconform_pic fi ;; *) lt_prog_compiler_pic_FC='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_FC='-Xlinker ' if test -n "$lt_prog_compiler_pic_FC"; then lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_FC='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_FC='-Bstatic' else lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_FC='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_FC='-Wl,-Wl,,' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_FC='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_FC='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_FC='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_FC='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_FC='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_FC='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_FC='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='--shared' lt_prog_compiler_static_FC='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_FC='-Wl,-Wl,,' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fpic' lt_prog_compiler_static_FC='-Bstatic' ;; ccc*) lt_prog_compiler_wl_FC='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_FC='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-qpic' lt_prog_compiler_static_FC='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fpic' lt_prog_compiler_static_FC='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; *-mlibc) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_FC='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_FC='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_FC='-non_shared' ;; rdos*) lt_prog_compiler_static_FC='-non_shared' ;; serenity*) ;; solaris*) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_FC='-Qoption ld ';; *) lt_prog_compiler_wl_FC='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_FC='-Qoption ld ' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_FC='-Kconform_pic' lt_prog_compiler_static_FC='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; unicos*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_can_build_shared_FC=no ;; uts4*) lt_prog_compiler_pic_FC='-pic' lt_prog_compiler_static_FC='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_FC=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_FC= ;; *) lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_FC" >&6; } lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_FC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works_FC=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_FC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_FC=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_works_FC" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_FC"; then case $lt_prog_compiler_pic_FC in "" | " "*) ;; *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;; esac else lt_prog_compiler_pic_FC= lt_prog_compiler_can_build_shared_FC=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works_FC=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_FC=yes fi else lt_cv_prog_compiler_static_works_FC=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_static_works_FC" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_FC"; then : else lt_prog_compiler_static_FC= fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o_FC=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_FC=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_c_o_FC" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o_FC=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_FC=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_c_o_FC" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_FC" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf '%s\n' "$hard_links" >&6; } if test no = "$hard_links"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf '%s\n' "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_FC= always_export_symbols_FC=no archive_cmds_FC= archive_expsym_cmds_FC= compiler_needs_object_FC=no enable_shared_with_static_runtimes_FC=no export_dynamic_flag_spec_FC= export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_FC=no hardcode_direct_FC=no hardcode_direct_absolute_FC=no hardcode_libdir_flag_spec_FC= hardcode_libdir_separator_FC= hardcode_minus_L_FC=no hardcode_shlibpath_var_FC=unsupported inherit_rpath_FC=no link_all_deplibs_FC=unknown module_cmds_FC= module_expsym_cmds_FC= old_archive_from_new_cmds_FC= old_archive_from_expsyms_cmds_FC= thread_safe_flag_spec_FC= whole_archive_flag_spec_FC= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_FC= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; esac ld_shlibs_FC=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' export_dynamic_flag_spec_FC='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_FC=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_FC= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs_FC=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='' ;; m68k) archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_FC=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_FC=no fi ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_FC='-L$libdir' export_dynamic_flag_spec_FC='$wl--export-all-symbols' allow_undefined_flag_FC=unsupported always_export_symbols_FC=no enable_shared_with_static_runtimes_FC=yes export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_FC='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' file_list_spec_FC='@' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_FC='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_FC=no fi ;; haiku*) archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_FC=no ;; os2*) hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes allow_undefined_flag_FC=unsupported shrext_cmds=.dll archive_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_from_new_cmds_FC='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_FC=yes file_list_spec_FC='@' ;; interix[3-9]*) hardcode_direct_FC=no hardcode_shlibpath_var_FC=no hardcode_libdir_flag_spec_FC='$wl-rpath,$libdir' export_dynamic_flag_spec_FC='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_FC='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_FC= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_FC=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_FC='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_FC=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' export_dynamic_flag_spec_FC='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' archive_cmds_FC='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_FC=no fi ;; *-mlibc) archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_FC=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_FC=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_FC=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_FC=no fi ;; esac ;; sunos4*) archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_FC=no fi ;; esac if test no = "$ld_shlibs_FC"; then runpath_var= hardcode_libdir_flag_spec_FC= export_dynamic_flag_spec_FC= whole_archive_flag_spec_FC= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_FC=unsupported always_export_symbols_FC=yes archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_FC=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_FC=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_FC='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_FC='' hardcode_direct_FC=yes hardcode_direct_absolute_FC=yes hardcode_libdir_separator_FC=':' link_all_deplibs_FC=yes file_list_spec_FC='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_FC=no hardcode_direct_absolute_FC=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_FC=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_FC=yes hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_libdir_separator_FC= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_FC='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_FC=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_FC='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__FC+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath__FC fi hardcode_libdir_flag_spec_FC='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_FC='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_FC="-z nodefs" archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__FC+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__FC"; then lt_cv_aix_libpath__FC=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath__FC fi hardcode_libdir_flag_spec_FC='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_FC=' $wl-bernotok' allow_undefined_flag_FC=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_FC='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_FC='$convenience' fi archive_cmds_need_lc_FC=yes archive_expsym_cmds_FC='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_FC='' ;; m68k) archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_FC=-rdynamic ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec_FC=' ' allow_undefined_flag_FC=unsupported always_export_symbols_FC=yes file_list_spec_FC='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_FC='$CC -Fe$output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_FC='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, FC)='true' enable_shared_with_static_runtimes_FC=yes exclude_expsyms_FC='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_FC='chmod 644 $oldlib' postlink_cmds_FC='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec_FC=' ' allow_undefined_flag_FC=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_FC='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_FC=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_FC=no hardcode_direct_FC=no hardcode_automatic_FC=yes hardcode_shlibpath_var_FC=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_FC='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_FC=yes else whole_archive_flag_spec_FC='' fi link_all_deplibs_FC=yes allow_undefined_flag_FC=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_FC="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_FC="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs_FC=no fi ;; dgux*) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_shlibpath_var_FC=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=yes hardcode_minus_L_FC=yes hardcode_shlibpath_var_FC=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_FC='$wl+b $wl$libdir' hardcode_libdir_separator_FC=: hardcode_direct_FC=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_FC=yes export_dynamic_flag_spec_FC='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds_FC='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_FC='$wl+b $wl$libdir' hardcode_libdir_separator_FC=: hardcode_direct_FC=yes hardcode_direct_absolute_FC=yes export_dynamic_flag_spec_FC='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_FC=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_FC='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_FC='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_FC='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_FC='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_FC='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_FC='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_FC='$wl+b $wl$libdir' hardcode_libdir_separator_FC=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_FC=no hardcode_shlibpath_var_FC=no ;; *) hardcode_direct_FC=yes hardcode_direct_absolute_FC=yes export_dynamic_flag_spec_FC='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_FC=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else case e in #( e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_fc_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else case e in #( e) lt_cv_irix_exported_symbol=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf '%s\n' "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_FC='no' hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' hardcode_libdir_separator_FC=: inherit_rpath_FC=yes link_all_deplibs_FC=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs_FC=yes archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' ;; esac ;; *-mlibc) ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no ;; newsos6) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=yes hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' hardcode_libdir_separator_FC=: hardcode_shlibpath_var_FC=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_FC=yes hardcode_shlibpath_var_FC=no hardcode_direct_absolute_FC=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_FC='$wl-rpath,$libdir' export_dynamic_flag_spec_FC='$wl-E' else archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_FC='$wl-rpath,$libdir' fi else ld_shlibs_FC=no fi ;; os2*) hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_minus_L_FC=yes allow_undefined_flag_FC=unsupported shrext_cmds=.dll archive_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_from_new_cmds_FC='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_FC=yes file_list_spec_FC='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag_FC=' $wl-expect_unresolved $wl\*' archive_cmds_FC='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag_FC=' -expect_unresolved \*' archive_cmds_FC='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc_FC='no' hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' hardcode_libdir_separator_FC=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag_FC=' $wl-expect_unresolved $wl\*' archive_cmds_FC='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' else allow_undefined_flag_FC=' -expect_unresolved \*' archive_cmds_FC='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_FC='-rpath $libdir' fi archive_cmds_need_lc_FC='no' hardcode_libdir_separator_FC=: ;; serenity*) ;; solaris*) no_undefined_flag_FC=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds_FC='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_FC='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds_FC='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_FC='-R$libdir' hardcode_shlibpath_var_FC=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec_FC='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_FC=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_FC='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_direct_FC=yes hardcode_minus_L_FC=yes hardcode_shlibpath_var_FC=no ;; sysv4) case $host_vendor in sni) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_FC='$CC -r -o $output$reload_objs' hardcode_direct_FC=no ;; motorola) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_FC=no ;; sysv4.3*) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_FC=no export_dynamic_flag_spec_FC='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_FC=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_FC=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_FC='$wl-z,text' archive_cmds_need_lc_FC=no hardcode_shlibpath_var_FC=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds_FC='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_FC='$wl-z,text' allow_undefined_flag_FC='$wl-z,nodefs' archive_cmds_need_lc_FC=no hardcode_shlibpath_var_FC=no hardcode_libdir_flag_spec_FC='$wl-R,$libdir' hardcode_libdir_separator_FC=':' link_all_deplibs_FC=yes export_dynamic_flag_spec_FC='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds_FC='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_FC='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_FC='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_FC='-L$libdir' hardcode_shlibpath_var_FC=no ;; *) ld_shlibs_FC=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_FC='$wl-Blargedynsym' ;; esac fi fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_FC" >&5 printf '%s\n' "$ld_shlibs_FC" >&6; } test no = "$ld_shlibs_FC" && can_build_shared=no with_gnu_ld_FC=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_FC" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_FC=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_FC in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_FC pic_flag=$lt_prog_compiler_pic_FC compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_FC allow_undefined_flag_FC= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_FC=no else lt_cv_archive_cmds_need_lc_FC=yes fi allow_undefined_flag_FC=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_FC" >&5 printf '%s\n' "$lt_cv_archive_cmds_need_lc_FC" >&6; } archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC ;; esac fi ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds # If user builds GCC with multilib enabled, # it should just install on $(libdir) # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. if test xyes = x"$multilib"; then postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ $install_prog $dir/$dlname $destdir/$dlname~ chmod a+x $destdir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib $destdir/$dlname'\'' || exit \$?; fi' else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac case $host_cpu in powerpc64) # On FreeBSD bi-arch platforms, a different variable is used for 32-bit # binaries. See . cat > conftest.$ac_ext <<_ACEOF int test_pointer_size[sizeof (void *) - 5]; _ACEOF if ac_fn_fc_try_compile "$LINENO" then : shlibpath_var=LD_LIBRARY_PATH else case e in #( e) shlibpath_var=LD_32_LIBRARY_PATH ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) shlibpath_var=LD_LIBRARY_PATH ;; esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' hardcode_into_libs=no ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # -rpath works at least for libraries that are not overridden by # libraries installed in system locations. hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir ;; esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *-mlibc) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='mlibc ld.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; serenity*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no dynamic_linker='SerenityOS LibELF' ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; emscripten*) version_type=none need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= dynamic_linker="Emscripten linker" lt_prog_compiler_wl_FC= lt_prog_compiler_pic_FC= lt_prog_compiler_static_FC= if test yes = "$GCC"; then lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_static_FC='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_FC='-Bstatic' fi lt_prog_compiler_pic_FC='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_FC='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_FC='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_FC='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_FC='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_FC= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_FC='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_FC=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_FC='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_FC=-Kconform_pic fi ;; *) lt_prog_compiler_pic_FC='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_FC='-Xlinker ' if test -n "$lt_prog_compiler_pic_FC"; then lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_FC='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_FC='-Bstatic' else lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_FC='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_FC='-Wl,-Wl,,' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_FC='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_FC='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_FC='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_FC='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_FC='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_FC='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_FC='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='--shared' lt_prog_compiler_static_FC='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_FC='-Wl,-Wl,,' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fpic' lt_prog_compiler_static_FC='-Bstatic' ;; ccc*) lt_prog_compiler_wl_FC='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_FC='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-qpic' lt_prog_compiler_static_FC='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' lt_prog_compiler_wl_FC='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fpic' lt_prog_compiler_static_FC='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; *-mlibc) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-fPIC' lt_prog_compiler_static_FC='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_FC='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_FC='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_FC='-non_shared' ;; rdos*) lt_prog_compiler_static_FC='-non_shared' ;; serenity*) ;; solaris*) lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_FC='-Qoption ld ';; *) lt_prog_compiler_wl_FC='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_FC='-Qoption ld ' lt_prog_compiler_pic_FC='-PIC' lt_prog_compiler_static_FC='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_FC='-Kconform_pic' lt_prog_compiler_static_FC='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_pic_FC='-KPIC' lt_prog_compiler_static_FC='-Bstatic' ;; unicos*) lt_prog_compiler_wl_FC='-Wl,' lt_prog_compiler_can_build_shared_FC=no ;; uts4*) lt_prog_compiler_pic_FC='-pic' lt_prog_compiler_static_FC='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_FC=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_FC= ;; *) lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_FC" >&6; } lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_FC"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works_FC=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_FC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_FC=yes fi fi $RM conftest* ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_pic_works_FC" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_FC"; then case $lt_prog_compiler_pic_FC in "" | " "*) ;; *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;; esac else lt_prog_compiler_pic_FC= lt_prog_compiler_can_build_shared_FC=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works_FC=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_FC=yes fi else lt_cv_prog_compiler_static_works_FC=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5 printf '%s\n' "$lt_cv_prog_compiler_static_works_FC" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_FC"; then : else lt_prog_compiler_static_FC= fi ='-fPIC' archive_cmds_FC='$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib' archive_expsym_cmds_FC='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib -s EXPORTED_FUNCTIONS=@$output_objdir/$soname.expsym' archive_cmds_need_lc_FC=no no_undefined_flag_FC= ;; *) dynamic_linker=no ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf '%s\n' "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_FC= if test -n "$hardcode_libdir_flag_spec_FC" || test -n "$runpath_var_FC" || test yes = "$hardcode_automatic_FC"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_FC" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" && test no != "$hardcode_minus_L_FC"; then # Linking always hardcodes the temporary library directory. hardcode_action_FC=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_FC=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_FC=unsupported fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_FC" >&5 printf '%s\n' "$hardcode_action_FC" >&6; } if test relink = "$hardcode_action_FC" || test yes = "$inherit_rpath_FC"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" 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 ac_config_commands="$ac_config_commands libtool" # Only expand once: { printf '%s\n' "$as_me:${as_lineno-$LINENO}: finding other utilities" >&5 printf '%s\n' "$as_me: finding other utilities" >&6;} # Find the install program. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: trying to set fortran flags for this platform" >&5 printf '%s\n' "$as_me: trying to set fortran flags for this platform" >&6;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking what FC is set to" >&5 printf %s "checking what FC is set to... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf '%s\n' "$FC" >&6; } # Check to see if any macros must be set to enable large (>2GB) files. # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile,$enable_year2038" != no,no then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to support large files" >&5 printf %s "checking for $CC option to support large files... " >&6; } if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CPPFLAGS=$CPPFLAGS ac_opt_found=no for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef FTYPE # define FTYPE off_t #endif /* Check that FTYPE can represent 2**63 - 1 correctly. We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_opt" = x"none needed" then : # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. CPPFLAGS="$CPPFLAGS -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64" if ac_fn_c_try_compile "$LINENO" then : ac_opt='-D_FILE_OFFSET_BITS=64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam fi ac_cv_sys_largefile_opts=$ac_opt ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS=$ac_save_CPPFLAGS test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 printf '%s\n' "$ac_cv_sys_largefile_opts" >&6; } ac_have_largefile=yes case $ac_cv_sys_largefile_opts in #( "none needed") : ;; #( "supported through gnulib") : ;; #( "support not detected") : ac_have_largefile=no ;; #( "-D_FILE_OFFSET_BITS=64") : printf '%s\n' "#define _FILE_OFFSET_BITS 64" >>confdefs.h ;; #( "-D_LARGE_FILES=1") : printf '%s\n' "#define _LARGE_FILES 1" >>confdefs.h ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac if test "$enable_year2038" != no then : { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $CC option to support timestamps after 2038" >&5 printf %s "checking for $CC option to support timestamps after 2038... " >&6; } if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 printf '%s\n' "$ac_cv_sys_year2038_opts" >&6; } ac_have_year2038=yes case $ac_cv_sys_year2038_opts in #( "none needed") : ;; #( "support not detected") : ac_have_year2038=no ;; #( "-D_TIME_BITS=64") : printf '%s\n' "#define _TIME_BITS 64" >>confdefs.h ;; #( "-D__MINGW_USE_VC2005_COMPAT") : printf '%s\n' "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; #( "-U_USE_32_BIT_TIME_T"*) : { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See 'config.log' for more details" "$LINENO" 5; } ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac fi fi # This will test the f77 compiler, as well as check some fortran types. if test "$enable_fortran_type_check" = yes; then case "${NM-unset}" in unset) for ac_prog in nm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NM="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NM=$ac_cv_prog_NM if test -n "$NM"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 printf '%s\n' "$NM" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$NM" && break done test -n "$NM" || NM="nm" ;; *) for ac_prog in $NM nm do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NM="$ac_prog" printf '%s\n' "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NM=$ac_cv_prog_NM if test -n "$NM"; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 printf '%s\n' "$NM" >&6; } else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi test -n "$NM" && break done test -n "$NM" || NM="nm" ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking nm flags" >&5 printf %s "checking nm flags... " >&6; } case "${NMFLAGS-unset}" in unset) NMFLAGS= ;; esac { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $NMFLAGS" >&5 printf '%s\n' "$NMFLAGS" >&6; } # AC_REQUIRE([UD_PROG_FC]) case "$FC" in '') ;; *) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for C-equivalent to Fortran routine \"SUB\"" >&5 printf %s "checking for C-equivalent to Fortran routine \"SUB\"... " >&6; } cat >conftest.f <<\EOF call sub() end EOF doit='$FC -c ${FFLAGS} conftest.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then FCALLSCSUB=`$NM $NMFLAGS conftest.o | awk ' /SUB_/{print "SUB_";exit} /SUB/ {print "SUB"; exit} /sub_/{print "sub_";exit} /sub/ {print "sub"; exit}'` case "$FCALLSCSUB" in '') as_fn_error $? "not found" "$LINENO" 5 ;; *) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $FCALLSCSUB" >&5 printf '%s\n' "$FCALLSCSUB" >&6; } ;; esac else as_fn_error $? "Could not compile conftest.f" "$LINENO" 5 fi rm -f conftest* ;; esac # AC_REQUIRE([UD_PROG_FC]) case "$FC" in '') ;; *) for ftype in byte integer*1 "integer(kind=1)" "integer(selected_int_kind(2))"; do { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5 printf %s "checking for Fortran \"$ftype\"... " >&6; } cat >conftest.f <&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } NF_INT1_T=$ftype printf '%s\n' "#define NF_INT1_T $ftype" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi done rm -f conftest* for ftype in integer*2 "integer(kind=2)" "integer(selected_int_kind(4))"; do { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5 printf %s "checking for Fortran \"$ftype\"... " >&6; } cat >conftest.f <&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } NF_INT2_T=$ftype printf '%s\n' "#define NF_INT2_T $ftype" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi done rm -f conftest* for ftype in integer*8 "integer(kind=8)" "integer(selected_int_kind(18))"; do { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5 printf %s "checking for Fortran \"$ftype\"... " >&6; } cat >conftest.f <&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } NF_INT8_T=$ftype printf '%s\n' "#define NF_INT8_T $ftype" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi done rm -f conftest* case "${NF_INT1_T}" in '') ;; *) cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT1_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT1_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT1_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT1_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT1_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT1_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT1_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT1_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* ;; esac case "${NF_INT2_T}" in '') ;; *) cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT2_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT2_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT2_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT2_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT2_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT2_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* ;; esac case "${NF_INT8_T}" in '') ;; *) cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT8_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT8_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT8_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT8_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"$NF_INT8_T\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT8_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* ;; esac cat >conftestf.f <&5 printf %s "checking if Fortran \"integer\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_INT_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"real\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_REAL_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* cat >conftestf.f <&5 printf %s "checking if Fortran \"doubleprecision\" is C \"$ctype\"... " >&6; } cat >conftest.c < void $FCALLSCSUB($ctype values[4]) { exit(values[1] != -2 || values[2] != -3); } EOF doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC ${FFLAGS} -c conftestf.f' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit='$FC -o conftest ${FFLAGS} ${LDFLAGS} conftestf.o conftest.o ${FLIBS} ${LIBS}' if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then doit=./conftest if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf '%s\n' "yes" >&6; } cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \ _ABCDEFGHIJKLMNOPQRSTUVWXYZ` printf '%s\n' "#define NF_DOUBLEPRECISION_IS_C_$cname 1" >>confdefs.h break else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf '%s\n' "no" >&6; } fi else as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5 fi else as_fn_error $? "Could not compile conftest.c" "$LINENO" 5 fi done rm -f conftest* { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Fortran-equivalent to netCDF \"byte\"" >&5 printf %s "checking for Fortran-equivalent to netCDF \"byte\"... " >&6; } for type in byte integer*1 "integer(kind=1)" "integer(selected_int_kind(2))" integer; do cat >conftest.f <&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then break; fi done rm -f conftest.f conftest.o printf '%s\n' "#define NCBYTE_T $type" >>confdefs.h { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $type" >&5 printf '%s\n' "$type" >&6; } NCBYTE_T=$type { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for Fortran-equivalent to netCDF \"short\"" >&5 printf %s "checking for Fortran-equivalent to netCDF \"short\"... " >&6; } for type in integer*2 "integer(kind=2)" "integer(selected_int_kind(4))" integer; do cat >conftest.f <&5 (eval $doit) 2>&5 ac_status=$? printf '%s\n' "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then break; fi done rm -f conftest.f conftest.o printf '%s\n' "#define NCSHORT_T $type" >>confdefs.h { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $type" >&5 printf '%s\n' "$type" >&6; } NCSHORT_T=$type ;; esac if test "x$ud_fc_failed" = xyes; then as_fn_error $? "F77 compiler doesn't work." "$LINENO" 5 fi else printf '%s\n' "#define NCBYTE_T byte" >>confdefs.h printf '%s\n' "#define NCSHORT_T integer*2" >>confdefs.h printf '%s\n' "#define NF_INT1_T byte" >>confdefs.h printf '%s\n' "#define NF_INT2_T integer*2" >>confdefs.h printf '%s\n' "#define NF_INT8_T integer*8" >>confdefs.h printf '%s\n' "#define NF_INT1_IS_C_SIGNED_CHAR 1" >>confdefs.h printf '%s\n' "#define NF_INT2_IS_C_SHORT 1" >>confdefs.h printf '%s\n' "#define NF_INT_IS_C_INT 1" >>confdefs.h printf '%s\n' "#define NF_INT8_IS_C_LONG_LONG 1" >>confdefs.h printf '%s\n' "#define NF_REAL_IS_C_FLOAT 1" >>confdefs.h printf '%s\n' "#define NF_DOUBLEPRECISION_IS_C_DOUBLE 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking types, headers, and functions" >&5 printf '%s\n' "$as_me: checking types, headers, and functions" >&6;} # We must check for all these, because they may be used by the netCDF # C library. # Removing the checks for some of the libraries because of issues # observed when they are detected, are not needed, and an attempt to # link against is made anyways. # See https://github.com/Unidata/netcdf-fortran/issues/164 # # Specifying LDFLAGS="$(nc-config --libs [--static])" should # let downstream developers link more reliably against libnetcdf. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for floor in -lm" >&5 printf %s "checking for floor in -lm... " >&6; } if test ${ac_cv_lib_m_floor+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char floor (void); int main (void) { return floor (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_floor=yes else case e in #( e) ac_cv_lib_m_floor=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_floor" >&5 printf '%s\n' "$ac_cv_lib_m_floor" >&6; } if test "x$ac_cv_lib_m_floor" = xyes then : printf '%s\n' "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 printf %s "checking for library containing dlopen... " >&6; } if test ${ac_cv_search_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl dld do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_dlopen+y} then : break fi done if test ${ac_cv_search_dlopen+y} then : else case e in #( e) ac_cv_search_dlopen=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 printf '%s\n' "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # When the underneath NetCDF C library was built with parallel I/O enables, # check if the Fortran compiler supports parallel I/O. Abort if not. #if test "x$nc_has_parallel4" = xyes -o "x$nc_has_pnetcdf" = xyes; then # AC_LANG_PUSH([Fortran]) # AC_CHECK_FUNC([MPI_File_open], [], # [AC_SEARCH_LIBS([MPI_File_open], [], [], # [AC_MSG_ERROR([ # ----------------------------------------------------------------------- # The NetCDF C library is built with parallel I/O feature enabled, but # the Fortran compiler '$FC' supplied in this configure command # does not support MPI-IO. Please use one that does. If parallel I/O # feature is not desired, please use a NetCDF C library with parallel # I/O feature disabled. Abort. # -----------------------------------------------------------------------]) # ])]) # AC_LANG_POP([Fortran]) #fi # Find the netCDF header and library. for ac_header in netcdf.h do : ac_fn_c_check_header_compile "$LINENO" "netcdf.h" "ac_cv_header_netcdf_h" "$ac_includes_default" if test "x$ac_cv_header_netcdf_h" = xyes then : printf '%s\n' "#define HAVE_NETCDF_H 1" >>confdefs.h else case e in #( e) as_fn_error $? "netcdf.h could not be found. Please set CPPFLAGS." "$LINENO" 5 ;; esac fi done { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for library containing nc_open" >&5 printf %s "checking for library containing nc_open... " >&6; } if test ${ac_cv_search_nc_open+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char nc_open (void); int main (void) { return nc_open (); ; return 0; } _ACEOF for ac_lib in '' netcdf do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_nc_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_nc_open+y} then : break fi done if test ${ac_cv_search_nc_open+y} then : else case e in #( e) ac_cv_search_nc_open=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_nc_open" >&5 printf '%s\n' "$ac_cv_search_nc_open" >&6; } ac_res=$ac_cv_search_nc_open if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else case e in #( e) as_fn_error $? "Could not link to netcdf C library. Please set LDFLAGS; for static builds set LIBS to the results of nc-config --libs." "$LINENO" 5 ;; esac fi # See if various functions are available ac_fn_c_check_func "$LINENO" "nc_def_opaque" "ac_cv_func_nc_def_opaque" if test "x$ac_cv_func_nc_def_opaque" = xyes then : printf '%s\n' "#define HAVE_NC_DEF_OPAQUE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "nccreate" "ac_cv_func_nccreate" if test "x$ac_cv_func_nccreate" = xyes then : printf '%s\n' "#define HAVE_NCCREATE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "nc_set_log_level" "ac_cv_func_nc_set_log_level" if test "x$ac_cv_func_nc_set_log_level" = xyes then : printf '%s\n' "#define HAVE_NC_SET_LOG_LEVEL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "oc_open" "ac_cv_func_oc_open" if test "x$ac_cv_func_oc_open" = xyes then : printf '%s\n' "#define HAVE_OC_OPEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "nc_def_var_szip" "ac_cv_func_nc_def_var_szip" if test "x$ac_cv_func_nc_def_var_szip" = xyes then : printf '%s\n' "#define HAVE_NC_DEF_VAR_SZIP 1" >>confdefs.h fi # Starting with version 4.7.4, netcdf-c has function nc_def_var_szip(). if test "x$ac_cv_func_nc_def_var_szip" != xyes; then as_fn_error $? "netcdf-c version 4.7.4 or greater is required, built with underlying szip support." "$LINENO" 5 fi nc_build_v2=no nc_build_v4=no nc_has_logging=no nc_has_dap=no if ac_fn_c_compute_int "$LINENO" "NC_HAS_HDF5" "nc_has_hdf5" "#include " then : fi if test "x$nc_has_hdf5" = x1; then nc_build_v4=yes fi test "x$ac_cv_func_nccreate" = xyes && nc_build_v2=yes test "x$ac_cv_func_nc_set_log_level" = xyes && nc_has_logging=yes test "x$ac_cv_func_oc_open" = xyes && nc_has_dap=yes if test "x$nc_build_v4" = xyes; then printf '%s\n' "#define USE_NETCDF4 1" >>confdefs.h fi if test "x$nc_has_logging" = xyes; then printf '%s\n' "#define LOGGING 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking netCDF logging present" >&5 printf %s "checking netCDF logging present... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_has_logging" >&5 printf '%s\n' "$nc_has_logging" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking netCDF v2 API present" >&5 printf %s "checking netCDF v2 API present... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_build_v2" >&5 printf '%s\n' "$nc_build_v2" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking netCDF-4 present" >&5 printf %s "checking netCDF-4 present... " >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $nc_build_v4" >&5 printf '%s\n' "$nc_build_v4" >&6; } { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether to test the filter API" >&5 printf %s "checking whether to test the filter API... " >&6; } # Check whether --enable-filter-test was given. if test ${enable_filter_test+y} then : enableval=$enable_filter_test; fi test "x$enable_filter_test" = xyes || enable_filter_test=no { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $enable_filter_test" >&5 printf '%s\n' "$enable_filter_test" >&6; } if test "x$nc_build_v4" = xyes; then USE_NETCDF4_TRUE= USE_NETCDF4_FALSE='#' else USE_NETCDF4_TRUE='#' USE_NETCDF4_FALSE= fi if test "x$nc_build_v2" = xyes; then BUILD_V2_TRUE= BUILD_V2_FALSE='#' else BUILD_V2_TRUE='#' BUILD_V2_FALSE= fi if test "x$nc_has_logging" = xyes; then HAS_LOGGING_TRUE= HAS_LOGGING_FALSE='#' else HAS_LOGGING_TRUE='#' HAS_LOGGING_FALSE= fi if test "x$nc_has_logging" = xyes; then USE_LOGGING_TRUE= USE_LOGGING_FALSE='#' else USE_LOGGING_TRUE='#' USE_LOGGING_FALSE= fi if test "x$nc_has_dap" = xyes; then BUILD_DAP_TRUE= BUILD_DAP_FALSE='#' else BUILD_DAP_TRUE='#' BUILD_DAP_FALSE= fi if test "x$nc_has_pnetcdf" = xyes; then BUILD_PNETCDF_TRUE= BUILD_PNETCDF_FALSE='#' else BUILD_PNETCDF_TRUE='#' BUILD_PNETCDF_FALSE= fi if test "x$nc_has_parallel4" = xyes; then BUILD_PARALLEL4_TRUE= BUILD_PARALLEL4_FALSE='#' else BUILD_PARALLEL4_TRUE='#' BUILD_PARALLEL4_FALSE= fi if test "x$nc_has_pnetcdf" = xyes -o "x$nc_has_parallel4" = xyes; then BUILD_PARALLEL_TRUE= BUILD_PARALLEL_FALSE='#' else BUILD_PARALLEL_TRUE='#' BUILD_PARALLEL_FALSE= fi if test "x$enable_filter_test" = xyes; then TEST_FILTERS_TRUE= TEST_FILTERS_FALSE='#' else TEST_FILTERS_TRUE='#' TEST_FILTERS_FALSE= fi ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : else case e in #( e) printf '%s\n' "#define NO_STDLIB_H /**/" >>confdefs.h ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes then : else case e in #( e) printf '%s\n' "#define NO_SYS_TYPES_H /**/" >>confdefs.h ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes then : printf '%s\n' "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf '%s\n' "#define HAVE_LOCALE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default" if test "x$ac_cv_header_stdio_h" = xyes then : printf '%s\n' "#define HAVE_STDIO_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" if test "x$ac_cv_header_stdarg_h" = xyes then : printf '%s\n' "#define HAVE_STDARG_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes then : printf '%s\n' "#define HAVE_ERRNO_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default" if test "x$ac_cv_header_ctype_h" = xyes then : printf '%s\n' "#define HAVE_CTYPE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf '%s\n' "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" if test "x$ac_cv_header_malloc_h" = xyes then : printf '%s\n' "#define HAVE_MALLOC_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf '%s\n' "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf '%s\n' "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf '%s\n' "#define HAVE_STRINGS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : printf '%s\n' "#define HAVE_UNISTD_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes then : printf '%s\n' "#define HAVE_SYS_STAT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes then : printf '%s\n' "#define HAVE_GETOPT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes then : printf '%s\n' "#define HAVE_SYS_TIME_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" if test "x$ac_cv_header_sys_resource_h" = xyes then : printf '%s\n' "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`printf '%s\n' "ac_cv_header_dirent_$ac_hdr" | sed "$as_sed_sh"` { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_ac_Header=yes" else case e in #( e) eval "$as_ac_Header=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$as_ac_Header { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf '%s\n' "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf '%s\n' "HAVE_$ac_hdr" | sed "$as_sed_cpp"` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char opendir (void); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else case e in #( e) ac_cv_search_opendir=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf '%s\n' "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char opendir (void); int main (void) { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else case e in #( e) ac_cv_search_opendir=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf '%s\n' "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 # 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 #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf '%s\n' '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 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" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 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 fi else ac_cv_path_EGREP=$EGREP fi fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf '%s\n' "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" EGREP_TRADITIONAL=$EGREP ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test ${ac_cv_header_sys_wait_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main (void) { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_sys_wait_h=yes else case e in #( e) ac_cv_header_sys_wait_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 printf '%s\n' "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then printf '%s\n' "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi # Obsolete code to be removed. if test $ac_cv_header_sys_time_h = yes; then printf '%s\n' "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi # End of obsolete code. ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done if test "x$ac_cv_func_vprintf" = xno then : ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes then : printf '%s\n' "#define HAVE_DOPRNT 1" >>confdefs.h fi fi # Check for that conforms to C99 requirements ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes then : printf '%s\n' "#define HAVE__BOOL 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99 or later" >&5 printf %s "checking for stdbool.h that conforms to C99 or later... " >&6; } if test ${ac_cv_header_stdbool_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* "true" and "false" should be usable in #if expressions and integer constant expressions, and "bool" should be a valid type name. Although C99 requires bool, true, and false to be macros, C23 and C++11 overrule that, so do not test for that. Although C99 requires __bool_true_false_are_defined and _Bool, C23 says they are obsolescent, so do not require them. */ #if !true #error "'true' is not true" #endif #if true != 1 #error "'true' is not equal to 1" #endif char b[true == 1 ? 1 : -1]; char c[true]; #if false #error "'false' is not false" #endif #if false != 0 #error "'false' is not equal to 0" #endif char d[false == 0 ? 1 : -1]; enum { e = false, f = true, g = false * true, h = true * 256 }; char i[(bool) 0.5 == true ? 1 : -1]; char j[(bool) 0.0 == false ? 1 : -1]; char k[sizeof (bool) > 0 ? 1 : -1]; struct sb { bool s: 1; bool t; } s; char l[sizeof s.t > 0 ? 1 : -1]; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ bool m[h]; char n[sizeof m == h * sizeof m[0] ? 1 : -1]; char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ bool p = true; bool *pp = &p; int main (void) { bool ps = &s; *pp |= p; *pp |= ! p; /* Refer to every declared value, so they cannot be discarded as unused. */ return (!b + !c + !d + !e + !f + !g + !h + !i + !j + !k + !l + !m + !n + !o + !p + !pp + !ps); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stdbool_h=yes else case e in #( e) ac_cv_header_stdbool_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 printf '%s\n' "$ac_cv_header_stdbool_h" >&6; } if test $ac_cv_header_stdbool_h = yes; then printf '%s\n' "#define HAVE_STDBOOL_H 1" >>confdefs.h fi # Check for these functions... ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else case e in #( e) printf '%s\n' "#define size_t unsigned int" >>confdefs.h ;; esac fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 printf %s "checking for working alloca.h... " >&6; } if test ${ac_cv_working_alloca_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_working_alloca_h=yes else case e in #( e) ac_cv_working_alloca_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 printf '%s\n' "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then printf '%s\n' "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 printf %s "checking for alloca... " >&6; } if test ${ac_cv_func_alloca_works+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_func_alloca_works=$ac_cv_working_alloca_h if test "$ac_cv_func_alloca_works" != yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _MSC_VER # include # define alloca _alloca # else # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif int main (void) { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_alloca_works=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 printf '%s\n' "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then printf '%s\n' "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext printf '%s\n' "#define C_ALLOCA 1" >>confdefs.h { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 printf %s "checking stack direction for C alloca... " >&6; } if test ${ac_cv_c_stack_direction+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : ac_cv_c_stack_direction=0 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_stack_direction=1 else case e in #( e) ac_cv_c_stack_direction=-1 ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 printf '%s\n' "$ac_cv_c_stack_direction" >&6; } printf '%s\n' "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else case e in #( e) printf '%s\n' "#define size_t unsigned int" >>confdefs.h ;; esac fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : else case e in #( e) printf '%s\n' "#define off_t long int" >>confdefs.h ;; esac fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes then : printf '%s\n' "#define HAVE_SSIZE_T 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : printf '%s\n' "#define HAVE_PTRDIFF_T 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "uchar" "ac_cv_type_uchar" "$ac_includes_default" if test "x$ac_cv_type_uchar" = xyes then : printf '%s\n' "#define HAVE_UCHAR 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "longlong" "ac_cv_type_longlong" "$ac_includes_default" if test "x$ac_cv_type_longlong" = xyes then : printf '%s\n' "#define HAVE_LONGLONG 1" >>confdefs.h fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 printf %s "checking whether char is unsigned... " >&6; } if test ${ac_cv_c_char_unsigned+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_char_unsigned=no else case e in #( e) ac_cv_c_char_unsigned=yes ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 printf '%s\n' "$ac_cv_c_char_unsigned" >&6; } if test $ac_cv_c_char_unsigned = yes; then printf '%s\n' "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 printf %s "checking size of short... " >&6; } if test ${ac_cv_sizeof_short+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_short=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 printf '%s\n' "$ac_cv_sizeof_short" >&6; } printf '%s\n' "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 printf %s "checking size of int... " >&6; } if test ${ac_cv_sizeof_int+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_int=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 printf '%s\n' "$ac_cv_sizeof_int" >&6; } printf '%s\n' "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 printf %s "checking size of long... " >&6; } if test ${ac_cv_sizeof_long+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_long=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 printf '%s\n' "$ac_cv_sizeof_long" >&6; } printf '%s\n' "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 printf %s "checking size of float... " >&6; } if test ${ac_cv_sizeof_float+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_float=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 printf '%s\n' "$ac_cv_sizeof_float" >&6; } printf '%s\n' "#define SIZEOF_FLOAT $ac_cv_sizeof_float" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 printf %s "checking size of double... " >&6; } if test ${ac_cv_sizeof_double+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_double=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 printf '%s\n' "$ac_cv_sizeof_double" >&6; } printf '%s\n' "#define SIZEOF_DOUBLE $ac_cv_sizeof_double" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 printf %s "checking size of off_t... " >&6; } if test ${ac_cv_sizeof_off_t+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_off_t=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 printf '%s\n' "$ac_cv_sizeof_off_t" >&6; } printf '%s\n' "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 printf %s "checking size of size_t... " >&6; } if test ${ac_cv_sizeof_size_t+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_size_t=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 printf '%s\n' "$ac_cv_sizeof_size_t" >&6; } printf '%s\n' "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # 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. { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking size of ptrdiff_t" >&5 printf %s "checking size of ptrdiff_t... " >&6; } if test ${ac_cv_sizeof_ptrdiff_t+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ptrdiff_t))" "ac_cv_sizeof_ptrdiff_t" "$ac_includes_default" then : else case e in #( e) ac_cv_sizeof_ptrdiff_t=0 ;; esac fi ;; esac fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ptrdiff_t" >&5 printf '%s\n' "$ac_cv_sizeof_ptrdiff_t" >&6; } printf '%s\n' "#define SIZEOF_PTRDIFF_T $ac_cv_sizeof_ptrdiff_t" >>confdefs.h if ac_fn_c_compute_int "$LINENO" "sizeof(long long) == sizeof(long)" "longlong_is_long" "" then : else case e in #( e) longlong_is_long=0 ;; esac fi if test $longlong_is_long = 1; then CFLAGS="$CFLAGS -DLONGLONG_IS_LONG" fi # Flags for nf-config script; by design $prefix, $includir, $libdir, # etc. are left as shell variables in the script so as to facilitate # relocation NC_LIBS="-lnetcdf" NC_LIBS="$LDFLAGS $NC_LIBS $LIBS" case "x$target_os" in xsolaris*) NEWNCLIBS="" for x in $NC_LIBS ; do case "$x" in -L*) r=`echo "$x" | sed -e 's|^-L|-R|'` NEWNCLIBS="$NEWNCLIBS $x $r" ;; *) NEWNCLIBS="$NEWNCLIBS $x" ;; esac done NC_LIBS="$NEWNCLIBS" ;; *);; esac NC_FLIBS="-lnetcdff $NC_LIBS" NC_LIBS=$NC_LIBS NC_FLIBS=$NC_FLIBS HAS_F90=$nc_build_f90 HAS_F03=$nc_build_f03 HAS_DAP=$nc_has_dap HAS_NC2=$nc_build_v2 HAS_NC4=$nc_build_v4 HAS_SZIP_WRITE=$nc_has_szip_write HAS_ZSTD=$nf_has_zstd HAS_QUANTIZE=$nc_has_quantize HAS_LOGGING=$nc_has_logging HAS_CDF5=$nc_has_cdf5 HAS_PNETCDF=$nc_has_pnetcdf HAS_NC4_PARALLEL=$nc_has_parallel4 HAS_PARALLEL=$nc_has_parallel NF_HDF5_PLUGIN_PATH=$nc_hdf5_plugin_path # Some files need to exist in build directories that do not correspond # to their source directory, or the test program makes an assumption # about where files live. AC_CONFIG_LINKS provides a mechanism to # link/copy files if an out-of-source build is happening. ac_config_links="$ac_config_links nf_test/fills.nc:nf_test/ref_fills.nc nf03_test4/att.nc:nf03_test4/ref_att.nc" if test "x$nc_has_parallel" = xyes; then ac_config_files="$ac_config_files nf03_test4/run_f90_par_test.sh" fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: generating header files and makefiles" >&5 printf '%s\n' "$as_me: generating header files and makefiles" >&6;} ac_config_files="$ac_config_files Makefile nf-config netcdf-fortran.pc libnetcdff.settings docs/Makefile fortran/Makefile nf_test/Makefile nf_test4/Makefile nf03_test/Makefile nf03_test4/Makefile CMakeExtras/Makefile libsrc/Makefile examples/Makefile examples/F90/Makefile examples/F77/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF ac_cache_dump | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf '%s\n' "$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 else { printf '%s\n' "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf '%s\n' "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' 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=`printf '%s\n' "$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' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf '%s\n' "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "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 { printf '%s\n' "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf '%s\n' "done" >&6; } case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac 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 if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi 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 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 fi if test -z "${TEST_SZIP_WRITE_TRUE}" && test -z "${TEST_SZIP_WRITE_FALSE}"; then as_fn_error $? "conditional \"TEST_SZIP_WRITE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TEST_QUANTIZE_TRUE}" && test -z "${TEST_QUANTIZE_FALSE}"; then as_fn_error $? "conditional \"TEST_QUANTIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${VALGRIND_ENABLED_TRUE}" && test -z "${VALGRIND_ENABLED_FALSE}"; then as_fn_error $? "conditional \"VALGRIND_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_VALGRIND_TRUE}" && test -z "${ENABLE_VALGRIND_FALSE}"; then as_fn_error $? "conditional \"ENABLE_VALGRIND\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TEST_PARALLEL_TRUE}" && test -z "${TEST_PARALLEL_FALSE}"; then as_fn_error $? "conditional \"TEST_PARALLEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 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 fi if test -z "${USE_SED_TRUE}" && test -z "${USE_SED_FALSE}"; then as_fn_error $? "conditional \"USE_SED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LARGE_FILE_TESTS_TRUE}" && test -z "${LARGE_FILE_TESTS_FALSE}"; then as_fn_error $? "conditional \"LARGE_FILE_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_BENCHMARKS_TRUE}" && test -z "${BUILD_BENCHMARKS_FALSE}"; then as_fn_error $? "conditional \"BUILD_BENCHMARKS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi if test -z "${USE_NETCDF4_TRUE}" && test -z "${USE_NETCDF4_FALSE}"; then as_fn_error $? "conditional \"USE_NETCDF4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_V2_TRUE}" && test -z "${BUILD_V2_FALSE}"; then as_fn_error $? "conditional \"BUILD_V2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAS_LOGGING_TRUE}" && test -z "${HAS_LOGGING_FALSE}"; then as_fn_error $? "conditional \"HAS_LOGGING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_LOGGING_TRUE}" && test -z "${USE_LOGGING_FALSE}"; then as_fn_error $? "conditional \"USE_LOGGING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_DAP_TRUE}" && test -z "${BUILD_DAP_FALSE}"; then as_fn_error $? "conditional \"BUILD_DAP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PNETCDF_TRUE}" && test -z "${BUILD_PNETCDF_FALSE}"; then as_fn_error $? "conditional \"BUILD_PNETCDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PARALLEL4_TRUE}" && test -z "${BUILD_PARALLEL4_FALSE}"; then as_fn_error $? "conditional \"BUILD_PARALLEL4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PARALLEL_TRUE}" && test -z "${BUILD_PARALLEL_FALSE}"; then as_fn_error $? "conditional \"BUILD_PARALLEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TEST_FILTERS_TRUE}" && test -z "${TEST_FILTERS_FALSE}"; then as_fn_error $? "conditional \"TEST_FILTERS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" case $CONFIG_STATUS in #( -*) : CONFIG_STATUS=./$CONFIG_STATUS ;; #( */*) : ;; #( *) : CONFIG_STATUS=./$CONFIG_STATUS ;; esac ac_write_fail=0 ac_clean_CONFIG_STATUS='"$CONFIG_STATUS"' { printf '%s\n' "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf '%s\n' "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >"$CONFIG_STATUS" <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. 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. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # contradicts POSIX and common usage. Disable this. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf '%s\n' "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf '%s\n' "$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 case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac 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 case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename 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 as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf '%s\n' X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } 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 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 -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' 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=`printf '%s\n' "$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 || printf '%s\n' 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"' 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 # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated 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 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by netCDF-Fortran $as_me 4.6.3, which was generated by GNU Autoconf 2.73. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_links="$ac_config_links" config_commands="$ac_config_commands" _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. Usage: $0 [OPTION]... [TAG]... -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 --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration links: $config_links Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf '%s\n' "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf '%s\n' "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ netCDF-Fortran config.status 4.6.3 configured by $0, generated by GNU Autoconf 2.73, with options \\"\$ac_cs_config\\" Copyright (C) 2026 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || { awk '' >"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. 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 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf '%s\n' "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf '%s\n' "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf '%s\n' "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf '%s\n' "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" 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 shift \printf '%s\n' "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf '%s\n' "$ac_log" } >&5 _ACEOF cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_FC='`$ECHO "$lt_prog_compiler_no_builtin_flag_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_FC='`$ECHO "$lt_prog_compiler_pic_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_FC='`$ECHO "$lt_prog_compiler_wl_FC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_FC='`$ECHO "$lt_prog_compiler_static_FC" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_FC='`$ECHO "$lt_cv_prog_compiler_c_o_FC" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_FC='`$ECHO "$archive_cmds_need_lc_FC" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_FC='`$ECHO "$enable_shared_with_static_runtimes_FC" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_FC='`$ECHO "$export_dynamic_flag_spec_FC" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_FC='`$ECHO "$old_archive_from_new_cmds_FC" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_FC='`$ECHO "$old_archive_from_expsyms_cmds_FC" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_F77='`$ECHO "$compiler_lib_search_dirs_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`' predep_objects_F77='`$ECHO "$predep_objects_F77" | $SED "$delay_single_quote_subst"`' predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`' postdep_objects_F77='`$ECHO "$postdep_objects_F77" | $SED "$delay_single_quote_subst"`' postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`' predeps_F77='`$ECHO "$predeps_F77" | $SED "$delay_single_quote_subst"`' predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`' postdeps_F77='`$ECHO "$postdeps_F77" | $SED "$delay_single_quote_subst"`' postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_F77='`$ECHO "$compiler_lib_search_path_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_FC='`$ECHO "$compiler_lib_search_path_FC" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_F77 \ LD_FC \ reload_flag_F77 \ reload_flag_FC \ compiler_F77 \ compiler_FC \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_no_builtin_flag_FC \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_pic_FC \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_wl_FC \ lt_prog_compiler_static_F77 \ lt_prog_compiler_static_FC \ lt_cv_prog_compiler_c_o_F77 \ lt_cv_prog_compiler_c_o_FC \ export_dynamic_flag_spec_F77 \ export_dynamic_flag_spec_FC \ whole_archive_flag_spec_F77 \ whole_archive_flag_spec_FC \ compiler_needs_object_F77 \ compiler_needs_object_FC \ with_gnu_ld_F77 \ with_gnu_ld_FC \ allow_undefined_flag_F77 \ allow_undefined_flag_FC \ no_undefined_flag_F77 \ no_undefined_flag_FC \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_FC \ hardcode_libdir_separator_F77 \ hardcode_libdir_separator_FC \ exclude_expsyms_F77 \ exclude_expsyms_FC \ include_expsyms_F77 \ include_expsyms_FC \ file_list_spec_F77 \ file_list_spec_FC \ compiler_lib_search_dirs_F77 \ compiler_lib_search_dirs_FC \ predep_objects_F77 \ predep_objects_FC \ postdep_objects_F77 \ postdep_objects_FC \ predeps_F77 \ predeps_FC \ postdeps_F77 \ postdeps_FC \ compiler_lib_search_path_F77 \ compiler_lib_search_path_FC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_F77 \ reload_cmds_FC \ old_archive_cmds_F77 \ old_archive_cmds_FC \ old_archive_from_new_cmds_F77 \ old_archive_from_new_cmds_FC \ old_archive_from_expsyms_cmds_F77 \ old_archive_from_expsyms_cmds_FC \ archive_cmds_F77 \ archive_cmds_FC \ archive_expsym_cmds_F77 \ archive_expsym_cmds_FC \ module_cmds_F77 \ module_cmds_FC \ module_expsym_cmds_F77 \ module_expsym_cmds_FC \ export_symbols_cmds_F77 \ export_symbols_cmds_FC \ prelink_cmds_F77 \ prelink_cmds_FC \ postlink_cmds_F77 \ postlink_cmds_FC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "docs/Doxyfile") CONFIG_FILES="$CONFIG_FILES docs/Doxyfile" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "nf_test/fills.nc") CONFIG_LINKS="$CONFIG_LINKS nf_test/fills.nc:nf_test/ref_fills.nc" ;; "nf03_test4/att.nc") CONFIG_LINKS="$CONFIG_LINKS nf03_test4/att.nc:nf03_test4/ref_att.nc" ;; "nf03_test4/run_f90_par_test.sh") CONFIG_FILES="$CONFIG_FILES nf03_test4/run_f90_par_test.sh" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "nf-config") CONFIG_FILES="$CONFIG_FILES nf-config" ;; "netcdf-fortran.pc") CONFIG_FILES="$CONFIG_FILES netcdf-fortran.pc" ;; "libnetcdff.settings") CONFIG_FILES="$CONFIG_FILES libnetcdff.settings" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "fortran/Makefile") CONFIG_FILES="$CONFIG_FILES fortran/Makefile" ;; "nf_test/Makefile") CONFIG_FILES="$CONFIG_FILES nf_test/Makefile" ;; "nf_test4/Makefile") CONFIG_FILES="$CONFIG_FILES nf_test4/Makefile" ;; "nf03_test/Makefile") CONFIG_FILES="$CONFIG_FILES nf03_test/Makefile" ;; "nf03_test4/Makefile") CONFIG_FILES="$CONFIG_FILES nf03_test4/Makefile" ;; "CMakeExtras/Makefile") CONFIG_FILES="$CONFIG_FILES CMakeExtras/Makefile" ;; "libsrc/Makefile") CONFIG_FILES="$CONFIG_FILES libsrc/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "examples/F90/Makefile") CONFIG_FILES="$CONFIG_FILES examples/F90/Makefile" ;; "examples/F77/Makefile") CONFIG_FILES="$CONFIG_FILES examples/F77/Makefile" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_LINKS+y} || CONFIG_LINKS=$config_links test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_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" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. 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_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' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_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" | sed -n '$='` 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 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | sed -n '$='` 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 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >"$CONFIG_STATUS" || ac_write_fail=1 rm -f conf$$subs.awk cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1 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 _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 # 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/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :L $CONFIG_LINKS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_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 ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf '%s\n' "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf '%s\n' "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf '%s\n' "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf '%s\n' "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf '%s\n' X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf '%s\n' "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf '%s\n' "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF 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 q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf '%s\n' "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>"$CONFIG_STATUS" <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>"$CONFIG_STATUS" <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t 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 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"; } && { printf '%s\n' "$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 printf '%s\n' "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_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";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { printf '%s\n' "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 printf '%s\n' "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; :C) { printf '%s\n' "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf '%s\n' "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf 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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf '%s\n' "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf '%s\n' X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf '%s\n' X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf '%s\n' "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf '%s\n' "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='F77 FC ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # A file(cmd) program that detects file types. FILECMD=$lt_FILECMD # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e. impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e. impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_F77 postdep_objects=$lt_postdep_objects_F77 predeps=$lt_predeps_F77 postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # ### END LIBTOOL TAG CONFIG: F77 _LT_EOF cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: FC # The linker used to build libraries. LD=$lt_LD_FC # How to create reloadable object files. reload_flag=$lt_reload_flag_FC reload_cmds=$lt_reload_cmds_FC # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_FC # A language specific compiler. CC=$lt_compiler_FC # Is the compiler the GNU compiler? with_gcc=$GCC_FC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_FC # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_FC # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_FC # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_FC # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_FC # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_FC archive_expsym_cmds=$lt_archive_expsym_cmds_FC # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_FC module_expsym_cmds=$lt_module_expsym_cmds_FC # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_FC # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_FC # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_FC # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_FC # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e. impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_FC # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_FC # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_FC # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_FC # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_FC # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_FC # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_FC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_FC # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_FC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_FC # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_FC # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_FC # Specify filename containing input files. file_list_spec=$lt_file_list_spec_FC # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_FC # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_FC postdep_objects=$lt_postdep_objects_FC predeps=$lt_predeps_FC postdeps=$lt_postdeps_FC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_FC # ### END LIBTOOL TAG CONFIG: FC _LT_EOF ;; "nf03_test4/run_f90_par_test.sh":F) chmod ugo+x nf03_test4/run_f90_par_test.sh ;; "Makefile":F) test -f nf-config && chmod 755 nf-config ;; "nf-config":F) test -f nf-config && chmod 755 nf-config ;; "netcdf-fortran.pc":F) test -f nf-config && chmod 755 nf-config ;; "libnetcdff.settings":F) test -f nf-config && chmod 755 nf-config ;; "docs/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "fortran/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "nf_test/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "nf_test4/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "nf03_test/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "nf03_test4/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "CMakeExtras/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "libsrc/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "examples/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "examples/F90/Makefile":F) test -f nf-config && chmod 755 nf-config ;; "examples/F77/Makefile":F) test -f nf-config && chmod 755 nf-config ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_CONFIG_STATUS= test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: case $CONFIG_STATUS in #( -*) : ac_no_opts=-- ;; #( *) : ac_no_opts= ;; esac ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $ac_no_opts "$CONFIG_STATUS" $ac_config_status_args || ac_cs_success=false 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 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf '%s\n' "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi cat libnetcdff.settings ## # This can be done more elegantly, but for the sake of expediency # we will do it this way. ## if test "x$nc_has_zstd" = xyes; then if test "x$nf_has_zstd" = xno; then if test "x${HDF5_PLUGIN_PATH}" = "x"; then echo "" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: " >&5 printf '%s\n' "$as_me: WARNING: " >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: ------------------------------------------" >&5 printf '%s\n' "$as_me: WARNING: ------------------------------------------" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: libnetcdf was built with zstd support, but HDF5_PLUGIN_PATH is not set, so zstd support is not enabled in libnetcdff. Set HDF5_PLUGIN_PATH and re-run configure if you want to enable zstd support." >&5 printf '%s\n' "$as_me: WARNING: libnetcdf was built with zstd support, but HDF5_PLUGIN_PATH is not set, so zstd support is not enabled in libnetcdff. Set HDF5_PLUGIN_PATH and re-run configure if you want to enable zstd support." >&2;} echo "" { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: You can use \`nc-config --plugindir\` to determine the appropriate value for HDF5_PLUGIN_PATH" >&5 printf '%s\n' "$as_me: WARNING: You can use \`nc-config --plugindir\` to determine the appropriate value for HDF5_PLUGIN_PATH" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: ------------------------------------------" >&5 printf '%s\n' "$as_me: WARNING: ------------------------------------------" >&2;} { printf '%s\n' "$as_me:${as_lineno-$LINENO}: WARNING: " >&5 printf '%s\n' "$as_me: WARNING: " >&2;} fi fi fi netcdf-fortran-4.6.3+ds/config.sub0000775000175000017500000011600715205004070017207 0ustar alastairalastair#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in cloudabi*-eabi* \ | kfreebsd*-gnu* \ | knetbsd*-gnu* \ | kopensolaris*-gnu* \ | ironclad-* \ | linux-* \ | managarm-* \ | netbsd*-eabi* \ | netbsd*-gnu* \ | nto-qnx* \ | os2-emx* \ | rtmk-nova* \ | storm-chaos* \ | uclinux-gnu* \ | uclinux-uclibc* \ | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) case $field1-$field2 in # Shorthands that happen to contain a single dash convex-c[12] | convex-c3[248]) basic_machine=$field2-convex basic_os= ;; decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Do not treat sunos as a manufacturer sun*os*) basic_machine=$field1 basic_os=$field2 ;; # Manufacturers 3100* \ | 32* \ | 3300* \ | 3600* \ | 7300* \ | acorn \ | altos* \ | apollo \ | apple \ | atari \ | att* \ | axis \ | be \ | bull \ | cbm \ | ccur \ | cisco \ | commodore \ | convergent* \ | convex* \ | cray \ | crds \ | dec* \ | delta* \ | dg \ | digital \ | dolphin \ | encore* \ | gould \ | harris \ | highlevel \ | hitachi* \ | hp \ | ibm* \ | intergraph \ | isi* \ | knuth \ | masscomp \ | microblaze* \ | mips* \ | motorola* \ | ncr* \ | news \ | next \ | ns \ | oki \ | omron* \ | pc533* \ | rebel \ | rom68k \ | rombug \ | semi \ | sequent* \ | sgi* \ | siemens \ | sim \ | sni \ | sony* \ | stratus \ | sun \ | sun[234]* \ | tektronix \ | tti* \ | ultra \ | unicom* \ | wec \ | winbond \ | wrs) basic_machine=$field1-$field2 basic_os= ;; tock* | zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300) cpu=m68k vendor=motorola ;; # This used to be dpx2*, but that gets the RS6000-based # DPX/20 and the x86-based DPX/2-100 wrong. See # https://oldskool.silicium.org/stations/bull_dpx20.htm # https://www.feb-patrimoine.com/english/bull_dpx2.htm # https://www.feb-patrimoine.com/english/unix_and_bull.htm dpx2 | dpx2[23]00 | dpx2[23]xx) cpu=m68k vendor=bull ;; dpx2100 | dpx21xx) cpu=i386 vendor=bull ;; dpx20) cpu=rs6000 vendor=bull ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. obj= case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) saved_IFS=$IFS IFS="-" read kernel os <&2 fi ;; *) echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 exit 1 ;; esac case $obj in aout* | coff* | elf* | pe*) ;; '') # empty is fine ;; *) echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 exit 1 ;; esac # Here we handle the constraint that a (synthetic) cpu and os are # valid only in combination with each other and nowhere else. case $cpu-$os in # The "javascript-unknown-ghcjs" triple is used by GHC; we # accept it here in order to tolerate that, but reject any # variations. javascript-ghcjs) ;; javascript-* | *-ghcjs) echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os-$obj in linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ | linux-mlibc*- | linux-musl*- | linux-newlib*- \ | linux-relibc*- | linux-uclibc*- | linux-ohos*- ) ;; uclinux-uclibc*- | uclinux-gnu*- ) ;; ironclad-mlibc*-) ;; managarm-mlibc*- | managarm-kernel*- ) ;; windows*-msvc*-) ;; -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ | -uclibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; -kernel*- ) echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 exit 1 ;; *-kernel*- ) echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 exit 1 ;; *-msvc*- ) echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 exit 1 ;; kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-) ;; vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; nto-qnx*-) ;; os2-emx-) ;; rtmk-nova-) ;; *-eabi*- | *-gnueabi*-) ;; ios*-simulator- | tvos*-simulator- | watchos*-simulator- ) ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format ;; -*-) # Blank kernel with real OS is always fine. ;; --*) # Blank kernel and OS with real machine code file format is always fine. ;; *-*-*) echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos* | *-solaris*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" # time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: netcdf-fortran-4.6.3+ds/m4/0000775000175000017500000000000015205004070015537 5ustar alastairalastairnetcdf-fortran-4.6.3+ds/m4/ltversion.m40000664000175000017500000000131215205004070020023 0ustar alastairalastair# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2019, 2021-2024 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4441 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.5.4]) m4_define([LT_PACKAGE_REVISION], [2.5.4]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.5.4' macro_revision='2.5.4' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) netcdf-fortran-4.6.3+ds/m4/lt~obsolete.m40000664000175000017500000001400715205004070020355 0ustar alastairalastair# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2024 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) netcdf-fortran-4.6.3+ds/m4/ltsugar.m40000664000175000017500000001045315205004070017465 0ustar alastairalastair# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2024 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) netcdf-fortran-4.6.3+ds/m4/libtool.m40000664000175000017500000113730515205004070017457 0ustar alastairalastair# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2019, 2021-2024 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 63 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.64])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), in case it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2024 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) # Feature test to disable chained fixups since it is not # compatible with '-undefined dynamic_lookup' AC_CACHE_CHECK([for -no_fixup_chains linker flag], [lt_cv_support_no_fixup_chains], [ save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" AC_LINK_IFELSE( [AC_LANG_PROGRAM([],[])], lt_cv_support_no_fixup_chains=yes, lt_cv_support_no_fixup_chains=no ) LDFLAGS=$save_LDFLAGS ] ) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' if test yes = "$lt_cv_support_no_fixup_chains"; then AS_VAR_APPEND([_lt_dar_allow_undefined], [' $wl-no_fixup_chains']) fi ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi _lt_dar_needs_single_mod=no case $host_os in rhapsody* | darwin1.*) _lt_dar_needs_single_mod=yes ;; darwin*) # When targeting Mac OS X 10.4 (darwin 8) or later, # -single_module is the default and -multi_module is unsupported. # The toolchain on macOS 10.14 (darwin 18) and later cannot # target any OS version that needs -single_module. case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*-darwin[[567]].*|10.[[0-3]],*-darwin[[5-9]].*|10.[[0-3]],*-darwin1[[0-7]].*) _lt_dar_needs_single_mod=yes ;; esac ;; esac if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes = "$_lt_dar_needs_single_mod" -a yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then # Trim trailing / since we'll always append absolute paths and we want # to avoid //, if only for less confusing output for the user. lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*|x86_64-gnu*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*|x86_64-gnu*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because that's what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_REQUIRE([AC_PROG_RANLIB]) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu* | ironclad*) # Under GNU Hurd and Ironclad, this test is not required because there # is no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | windows* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord (void) __attribute__((visibility("default"))); #endif int fnord (void) { return 42; } int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | windows* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | windows* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | windows* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds # If user builds GCC with multilib enabled, # it should just install on $(libdir) # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. if test xyes = x"$multilib"; then postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ $install_prog $dir/$dlname $destdir/$dlname~ chmod a+x $destdir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib $destdir/$dlname'\'' || exit \$?; fi' else postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac case $host_cpu in powerpc64) # On FreeBSD bi-arch platforms, a different variable is used for 32-bit # binaries. See . AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[int test_pointer_size[sizeof (void *) - 5]; ]])], [shlibpath_var=LD_LIBRARY_PATH], [shlibpath_var=LD_32_LIBRARY_PATH]) ;; *) shlibpath_var=LD_LIBRARY_PATH ;; esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' hardcode_into_libs=no ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # -rpath works at least for libraries that are not overridden by # libraries installed in system locations. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *-mlibc) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='mlibc ld.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; serenity*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no dynamic_linker='SerenityOS LibELF' ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; emscripten*) version_type=none need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= dynamic_linker="Emscripten linker" _LT_COMPILER_PIC($1)='-fPIC' _LT_TAGVAR(archive_cmds, $1)='$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib -s EXPORTED_FUNCTIONS=@$output_objdir/$soname.expsym' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(no_undefined_flag, $1)= ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw* | *-*-windows*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | windows* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; *-mlibc) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; serenity*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | windows* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw* | windows*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_manifest_tool], [lt_cv_path_manifest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_manifest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_manifest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-mingw* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | windows* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BCDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw* | windows*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | windows* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *-mlibc) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; serenity*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *flang* | ftn | f18* | f95*) # Flang compiler. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *-mlibc) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; serenity*) ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | windows* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] _LT_TAGVAR(file_list_spec, $1)='@' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=no ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; *-mlibc) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -Fe$output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; esac ;; *-mlibc) ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; serenity*) ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e. impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(void){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " [[-]]L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | windows* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=no ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "[[-]]L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " [[-]]L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; *-mlibc) _LT_TAGVAR(ld_shlibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " [[-]]L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; serenity*) ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " [[-]]L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " [[-]]L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R,l}" and the path. # Remove the space. if test x-L = x"$p" || test x-R = x"$p" || test x-l = x"$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_FILECMD # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], [AC_CHECK_PROG([FILECMD], [file], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* | *-*-windows* ) case $build in *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS netcdf-fortran-4.6.3+ds/m4/ltoptions.m40000664000175000017500000003612115205004070020037 0ustar alastairalastair# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2024 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 10 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --enable-aix-soname configure option, and support the # `aix-soname=aix' and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. # DEFAULT is either `aix', `both', or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_ENABLE([aix-soname], [AS_HELP_STRING([--enable-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $enableval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --enable-aix-soname]) ;; esac lt_cv_with_aix_soname=$enable_aix_soname], [_AC_ENABLE_IF([with], [aix-soname], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)]) enable_aix_soname=$lt_cv_with_aix_soname]) with_aix_soname=$enable_aix_soname AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --enable-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_ENABLE([pic], [AS_HELP_STRING([--enable-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $enableval in yes|no) pic_mode=$enableval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $enableval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [dnl Continue to support --with-pic and --without-pic, for backward dnl compatibility. _AC_ENABLE_IF([with], [pic], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])])] ) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) netcdf-fortran-4.6.3+ds/ltmain.sh0000664000175000017500000122322215205004070017043 0ustar alastairalastair#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 # libtool (GNU libtool) 2.5.4 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION=2.5.4 package_revision=2.5.4 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh 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 # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # These NLS vars are set unconditionally (bootstrap issue #24). Unset those # in case the environment reset is needed later and the $save_* variant is not # defined (see the code above). LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" # require_check_ifs_backslash # --------------------------- # Check if we can use backslash as IFS='\' separator, and set # $check_ifs_backshlash_broken to ':' or 'false'. require_check_ifs_backslash=func_require_check_ifs_backslash func_require_check_ifs_backslash () { _G_save_IFS=$IFS IFS='\' _G_check_ifs_backshlash='a\\b' for _G_i in $_G_check_ifs_backshlash do case $_G_i in a) check_ifs_backshlash_broken=false ;; '') break ;; *) check_ifs_backshlash_broken=: break ;; esac done IFS=$_G_save_IFS require_check_ifs_backslash=: } ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # usable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value returned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list in case some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd $require_check_ifs_backslash func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string # contains the shell wildcard characters. case $check_ifs_backshlash_broken$func_quote_portable_result in :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # # Set a version string for this script. scriptversion=2019-02-19.15; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '_result', escaped # suitably for 'eval'. # # The '_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.5.4' # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd year=`date +%Y` cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Originally written by Gordon Matzigkeit, 1996 (See AUTHORS for complete contributor listing) EOF exit $? } # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information --finish use operation '--mode=finish' --mode=MODE use operation mode MODE --no-finish don't update shared library cache --no-quiet, --no-silent print default informational messages --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --reorder-cache=DIRS reorder shared library cache for preferred DIRS --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_reorder_cache=false opt_preserve_dup_deps=false opt_quiet=false opt_finishing=true opt_warning= nonopt= preserve_args= _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument '$1' for $_G_opt" exit_cmd=exit ;; esac shift ;; --no-finish) opt_finishing=false func_append preserve_args " $_G_opt" ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --reorder-cache) opt_reorder_cache=true shared_lib_dirs=$1 if test -n "$shared_lib_dirs"; then case $1 in # Must begin with /: /*) ;; # Catch anything else as an error (relative paths) *) func_error "invalid argument '$1' for $_G_opt" func_error "absolute paths are required for $_G_opt" exit_cmd=exit ;; esac fi shift ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { if $opt_warning; then $debug_cmd $warning_func ${1+"$@"} fi } # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host_os in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, windows, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. Assumes ARG has no leading or trailing path separator # characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep # func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER # Replaces a delimiter for a given path. func_convert_delimited_path () { converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"` } # end func_convert_delimited_path ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_reorder_shared_lib_cache DIRS # Reorder the shared library cache by unconfiguring previous shared library cache # and configuring preferred search directories before previous search directories. # Previous shared library cache: /usr/lib /usr/local/lib # Preferred search directories: /tmp/testing # Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib func_reorder_shared_lib_cache () { $debug_cmd case $host_os in openbsd*) get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` func_convert_delimited_path "$get_search_directories" ':' '\ ' save_search_directories=$converted_path func_convert_delimited_path "$1" ':' '\ ' # Ensure directories exist for dir in $converted_path; do # Ensure each directory is an absolute path case $dir in /*) ;; *) func_error "Directory '$dir' is not an absolute path" exit $EXIT_FAILURE ;; esac # Ensure no trailing slashes func_stripname '' '/' "$dir" dir=$func_stripname_result if test -d "$dir"; then if test -n "$preferred_search_directories"; then preferred_search_directories="$preferred_search_directories $dir" else preferred_search_directories=$dir fi else func_error "Directory '$dir' does not exist" exit $EXIT_FAILURE fi done PATH="$PATH:/sbin" ldconfig -U $save_search_directories PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` func_convert_delimited_path "$get_search_directories" ':' '\ ' reordered_search_directories=$converted_path $ECHO "Original: $save_search_directories" $ECHO "Reordered: $reordered_search_directories" exit $EXIT_SUCCESS ;; *) func_error "--reorder-cache is not supported for host_os=$host_os." exit $EXIT_FAILURE ;; esac } # end func_reorder_shared_lib_cache # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | windows* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wa,FLAG -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # If option '--reorder-cache', reorder the shared library cache and exit. if $opt_reorder_cache; then func_reorder_shared_lib_cache $shared_lib_dirs fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done if test "false" = "$opt_finishing"; then echo echo "NOTE: finish_cmds were not executed during testing, so you must" echo "manually run ldconfig to add a given test directory, LIBDIR, to" echo "the search path for generated executables." fi echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Strip any trailing slash from the destination. func_stripname '' '/' "$libdir" destlibdir=$func_stripname_result func_stripname '' '/' "$destdir" s_destdir=$func_stripname_result # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | windows* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw* | *windows*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *windows* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *windows* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *windows* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 case $host in i[3456]86-*-mingw32*) eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" ;; *) eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'" ;; esac } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *windows* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw/windows # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw/windows-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw/windows when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #if defined _WIN32 && !defined __GNUC__ # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ _CRTIMP int __cdecl _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw* | windows*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= compile_rpath_tail= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= temp_rpath_tail= thread_safe=no vinfo= vinfo_number=no weak_libs= rpath_arg= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "argument to -rpath is not absolute: $arg" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xassembler) func_append compiler_flags " -Xassembler $qarg" prev= func_append compile_command " -Xassembler $qarg" func_append finalize_command " -Xassembler $qarg" continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. # -q