[Darshan-commits] [Git][darshan/darshan][lustre-mod] 28 commits: bug fix in darhsan-config linker options

Shane Snyder xgitlab at cels.anl.gov
Tue May 17 13:32:40 CDT 2016


Shane Snyder pushed to branch lustre-mod at darshan / darshan


Commits:
0a6399f3 by Shane Snyder at 2016-02-22T12:52:34-06:00
bug fix in darhsan-config linker options

Since we had to modify HDF5/PnetCDF linker flags to work on Cray
by undefining appropriate symbols, we need to update the linker
options used in darshan-config. darshan-config linker options need
to include the stubs libraries and use '--start-group' and
'--end-group' flags to resolve the symbols correctly

- - - - -
47a6c64a by Shane Snyder at 2016-02-22T12:52:35-06:00
bug fix in reduction of min nonzero counters

- - - - -
07ff011f by Shane Snyder at 2016-02-22T15:54:05-06:00
ignore i/o to paths in /var/ directory

- - - - -
f2293a81 by Shane Snyder at 2016-03-14T16:08:28-05:00
fix compile warnings for uninit timers

- - - - -
b4cc833c by Shane Snyder at 2016-03-14T16:08:28-05:00
bug fix in resolving MPI_Barrrier in shared lib

- - - - -
6e96d134 by Shane Snyder at 2016-03-18T14:38:37-05:00
regression tests now catch LDPRELOAD symbol errors

- - - - -
eaf1d8dd by Shane Snyder at 2016-03-18T14:38:37-05:00
update release checklist to refer to gitlab

- - - - -
56a5aab6 by Shane Snyder at 2016-03-18T14:38:37-05:00
updated configure to reference 3.0.0 version

- - - - -
f139502f by Shane Snyder at 2016-03-18T14:38:37-05:00
updated ChangeLog for 3.0.0 release

- - - - -
ce53fdd5 by Shane Snyder at 2016-03-18T15:50:09-05:00
bug fix in regression test condition check

- - - - -
63512a55 by Shane Snyder at 2016-03-24T19:25:44+00:00
change bg regression to use radix-io repo

- - - - -
fd0a9413 by Shane Snyder at 2016-03-28T11:50:21-05:00
update regression scripts to use .darshan output

- - - - -
edb0a0b0 by Shane Snyder at 2016-03-28T11:50:21-05:00
add example output logs for x86_64 & ppc64

- - - - -
6f7229a3 by Shane Snyder at 2016-03-28T11:50:21-05:00
fix makefile clean to remove darshan-diff

- - - - -
a5778368 by Shane Snyder at 2016-03-28T11:50:21-05:00
update documentation for darshan-runtime component

Darshan now provides debugging tips for cases where log files
are not generated.

- - - - -
8f3e3c9e by Shane Snyder at 2016-03-28T11:50:21-05:00
Updated ChangeLog prior to 3.0.0 offiicial release

- - - - -
bd99f401 by Shane Snyder at 2016-03-28T12:40:20-05:00
install null-log-format when building darshan-util

Otherwise, compile errors are generated when building an external
tool that uses the darshan-logutils api/library.

- - - - -
c5f7703a by Shane Snyder at 2016-04-14T11:23:36-05:00
make limits.h include more portable

- - - - -
1eb2a5e4 by Shane Snyder at 2016-04-26T23:02:21-05:00
modify darshan-logutils to sort mount info

mount information is now sorted in order of descending mount
point lengths to fix a bug in matching file names to mount
points. the longest mount point string which matches the file
name is the corresponding mount. this change requires slight
changes to the darshan-logutils API, but does not modify the
log file format

- - - - -
85698250 by Shane Snyder at 2016-04-27T16:29:51+00:00
bug fix in bzip2 configure check

- - - - -
f88ebef6 by Phil Carns at 2016-05-01T07:57:38-04:00
fix minor potential bug in open timestamp

- be careful to record start timestamp of first open to start rather
  than start timestamp of first open to complete

- - - - -
2faf2460 by Phil Carns at 2016-05-01T09:55:22-04:00
possible bug fix to io start timestamps

- read and write start timestamps should record start timestamp of first
  read/write to *begin*, not start timestamp of first read/write to
  complete
- mirrors earlier fix to open timestamps

- - - - -
a3b2cfb9 by Shane Snyder at 2016-05-04T13:22:27-05:00
fix perl scripts to get perl bin from env

- - - - -
4f1dbfc7 by Shane Snyder at 2016-05-12T09:49:38-05:00
fix typos in fortran env vars in runtime docs

- - - - -
f75b4349 by Shane Snyder at 2016-05-12T17:13:29-05:00
fortran compiler generator autodetects mpich libs

this functionality is helpful especially on mira/cetus where
the mpich libraries are named depending on the fortran version
and the type of compiler being used (gcc, xl, etc.).

- - - - -
b41c9d63 by Shane Snyder at 2016-05-13T10:38:56-05:00
cxx compiler generators autodetect mpich lib name

- - - - -
5e1a0963 by Shane Snyder at 2016-05-16T14:20:38-05:00
bug fix in agg_perf_by_slowest perf calculation

this calculation was inadvertently accounting for metadata time
twice. also, clarified timing descriptions for slowest unique
file perf calculations.

- - - - -
3266825f by Shane Snyder at 2016-05-17T13:25:55-05:00
Merge branch 'master' into lustre-mod

Conflicts:
	ChangeLog

- - - - -


29 changed files:

- ChangeLog
- darshan-runtime/darshan-config.in
- darshan-runtime/darshan-gen-cxx.pl.in
- darshan-runtime/darshan-gen-fortran.pl.in
- darshan-runtime/doc/darshan-runtime.txt
- darshan-runtime/lib/darshan-core-init-finalize.c
- darshan-runtime/lib/darshan-core.c
- darshan-runtime/lib/darshan-hdf5.c
- darshan-runtime/lib/darshan-mpiio.c
- darshan-runtime/lib/darshan-pnetcdf.c
- darshan-runtime/lib/darshan-posix.c
- + darshan-test/example-output/mpi-io-test-ppc64-3.0.0.darshan
- + darshan-test/example-output/mpi-io-test-x86_64-3.0.0.darshan
- darshan-test/regression/bg-profile-conf/runjob.sh
- darshan-test/regression/run-all.sh
- darshan-test/regression/test-cases/cxxpi.sh
- darshan-test/regression/test-cases/fperf-f77.sh
- darshan-test/regression/test-cases/fperf-f90.sh
- darshan-test/regression/test-cases/mpi-io-test.sh
- darshan-util/Makefile.in
- darshan-util/configure
- darshan-util/darshan-convert-logs.pl
- darshan-util/darshan-convert.c
- darshan-util/darshan-job-summary/bin/darshan-job-summary.pl.in
- darshan-util/darshan-logutils.c
- darshan-util/darshan-logutils.h
- darshan-util/darshan-parser.c
- darshan-util/doc/darshan-util.txt
- maint/config/check_bzlib.m4


Changes:

=====================================
ChangeLog
=====================================
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,13 +4,22 @@ Darshan Release Change Log
 
 Darshan-3.0.0
 =============
+* install darshan-null-log-format.h header when installing
+  darshan-util component, otherwise compiler errors are
+  generated when building external tools that use
+  libdarshan-util
+* update docs to give debugging tips for cases where
+  Darshan logs are not generated
+* fix shared library regression test script to check for
+  potential errors with Darshan symbols rather than
+  failing silently in these cases
 * bug fix for determining minimum non-zero counters in
 shared file reductions in all modules
 * loosen Darshan's PMPI symbol check to prevent inadvertent
   disabling of Darshan for some MPICH builds
 * update runtime docs to give information on upgrading Darshan
-* bug fix for resolving MPI_Gather when LDPRELOADing Darshan's
-  shared libraries (reported by Richard Hedges)
+* bug fix for resolving MPI_Gather and MPI_Barrier when LDPRELOADing
+  Darshan's shared libraries (reported by Richard Hedges and Rob Latham)
 * add more helpful error handling when opening 2.x version log files
 * port darshan-diff utility over to new log file format
 * fix numerous configure bugs on Cray systems


=====================================
darshan-runtime/darshan-config.in
=====================================
--- a/darshan-runtime/darshan-config.in
+++ b/darshan-runtime/darshan-config.in
@@ -12,7 +12,7 @@ DARSHAN_LD_FLAGS="@LDFLAGS@"
 #   in turn used one of those HLLs).
 
 PRE_LD_FLAGS="-L$DARSHAN_LIB_PATH $DARSHAN_LD_FLAGS -ldarshan -lz -Wl,@$DARSHAN_SHARE_PATH/ld-opts/darshan-base-ld-opts"
-POST_LD_FLAGS="-L$DARSHAN_LIB_PATH -ldarshan -lz -lrt -lpthread"
+POST_LD_FLAGS="-L$DARSHAN_LIB_PATH -Wl,--start-group -ldarshan -ldarshan-stubs -Wl,--end-group -lz -lrt -lpthread"
 
 usage="\
 Usage: darshan-config [--pre-ld-flags] [--post-ld-flags]"


=====================================
darshan-runtime/darshan-gen-cxx.pl.in
=====================================
--- a/darshan-runtime/darshan-gen-cxx.pl.in
+++ b/darshan-runtime/darshan-gen-cxx.pl.in
@@ -282,6 +282,10 @@ print OUTPUT<<"EOF";
     if [ \$? -eq 0 ] ; then
         CXXMPICH=-lmpicxx
     fi
+    bgqlib_out=`grep -m 1 -Po "libmpichcxx-\\S+" \$tmpfile`
+    if [ \$? -eq 0 ] ; then
+        CXXMPICH=`echo \$bgqlib_out | sed 's/libmpichcxx-\\(.*\\)\\.a.*/-lmpichcxx-\\1/'`
+    fi
 
     rm \$tmpfile >& /dev/null
 


=====================================
darshan-runtime/darshan-gen-fortran.pl.in
=====================================
--- a/darshan-runtime/darshan-gen-fortran.pl.in
+++ b/darshan-runtime/darshan-gen-fortran.pl.in
@@ -287,7 +287,13 @@ print OUTPUT<<"EOF";
         if [ \$rc_cnk_check -eq 0 ] ; then
             FMPICH=-lfmpich.cnk
         else
-            FMPICH=-lfmpich
+            bgqlib_out=`grep -Po "libmpichf\\S\+\-\\S\+" \$tmpfile 2>/dev/null`
+            rc_bgqlib_check=\$?
+            if [ \$rc_bgqlib_check -eq 0 ] ; then
+                FMPICH=`echo \$bgqlib_out | sed 's/libmpich\\(.*\\)-\\(.*\\).a/-lmpich\\1-\\2/'`
+            else
+                FMPICH=-lfmpich
+            fi
         fi
     fi
 


=====================================
darshan-runtime/doc/darshan-runtime.txt
=====================================
--- a/darshan-runtime/doc/darshan-runtime.txt
+++ b/darshan-runtime/doc/darshan-runtime.txt
@@ -169,8 +169,8 @@ Example for MPICH 3.1 or earlier:
 ----
 export MPICC_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-cc
 export MPICXX_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-cxx
-export MPICF77_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-f
-export MPICF90_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-f
+export MPIF77_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-f
+export MPIF90_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-f
 ----
 
 Examples for command line use:
@@ -213,17 +213,36 @@ environment variable to insert instrumentation at run time.  The executables
 should be compiled using the normal, unmodified MPI compiler.
 
 To use this mechanism, set the `LD_PRELOAD` environment variable to the full
-path to the Darshan shared library, as in this example:
+path to the Darshan shared library. The preferred method of inserting Darshan
+instrumentation in this case is to set the LD_PRELOAD variable specifically
+for the application of interest. Typically this is possible using
+command line arguments offered by the `mpirun` or `mpiexec` scripts or by
+the job scheduler:
 
 ----
-export LD_PRELOAD=/home/carns/darshan-install/lib/libdarshan.so
+mpiexec -n 4 -env LD_PRELOAD /home/carns/darshan-install/lib/libdarshan.so mpi-io-test
+----
+
+----
+srun -n 4 --export=LD_PRELOAD=/home/carns/darshan-install/lib/libdarshan.so mpi-io-test
+----
+
+For sequential programs, the following will set LD_PRELOAD for process duration only:
+
 ----
+env LD_PRELOAD=/home/carns/darshan-install/lib/libdarshan.so mpi-io-test
+----
+
+Other environments may have other specific options for controlling this behavior.
+Please check your local site documentation for details.
 
-You can then run your application as usual.  Some environments may require a
-special `mpirun` or `mpiexec` command line argument to propagate the
-environment variable to all processes.  Other environments may require a
-scheduler submission option to control this behavior.  Please check your
-local site documentation for details.
+It is also possible to just export LD_PRELOAD as follows, but it is recommended
+against doing that to prevent Darshan and MPI symbols from being pulled into
+unrelated binaries:
+
+----
+export LD_PRELOAD=/home/carns/darshan-install/lib/libdarshan.so
+----
 
 === Instrumenting dynamically-linked Fortran applications
 
@@ -294,8 +313,8 @@ Blue Gene profiling configuration example:
 ----
 export MPICC_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-bg-cc
 export MPICXX_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-bg-cxx
-export MPICF77_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-bg-f
-export MPICF90_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-bg-f
+export MPIF77_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-bg-f
+export MPIF90_PROFILE=$DARSHAN_PREFIX/share/mpi-profile/darshan-bg-f
 ----
 
 === Cray platforms (XE, XC, or similar)
@@ -511,3 +530,47 @@ behavior at runtime:
 * DARSHAN_LOGPATH: specifies the path to write Darshan log files to. Note that this directory needs to be formatted using the darshan-mk-log-dirs script.
 * DARSHAN_LOGFILE: specifies the path (directory + Darshan log file name) to write the output Darshan log to. This overrides the default Darshan behavior of automatically generating a log file name and adding it to a log file directory formatted using darshan-mk-log-dirs script.
 * DARSHAN_MODMEM: specifies the maximum amount of memory (in MiB) a Darshan instrumentation module can consume at runtime.
+
+== Debugging
+
+=== No log file
+
+In cases where Darshan is not generating a log file for an application, some common things to check are:
+
+* Check stderr to ensure Darshan isn't indicating any internal errors (e.g., invalid log file path)
+
+For statically linked executables:
+
+* Ensure that Darshan symbols are present in the underlying executable by running `nm` on it:
+----
+> nm test | grep darshan
+0000000000772260 b darshan_core
+0000000000404440 t darshan_core_cleanup
+00000000004049b0 T darshan_core_initialize
+000000000076b660 d darshan_core_mutex
+00000000004070a0 T darshan_core_register_module
+----
+
+* Make sure the application executable is statically linked:
+    ** In general, we encourage the use of purely statically linked executables when using the static
+instrumentation method given in link:darshan-runtime.html#_instrumenting_statically_linked_applications[Section 5]
+    ** If purely static executables are not an option, we encourage users to use the LD_PRELOAD method of
+instrumentation given in link:darshan-runtime.html#_instrumenting_dynamically_linked_applications[Section 6]
+    ** Statically linked executables are the default on Cray platforms and the IBM BG platforms; 
+statically linked executables can be explicitly requested using the `-static` compile option to most compilers
+    ** You can verify that an executable is purely statically linked by using the `file` command:
+----
+> file mpi-io-test
+mpi-io-test: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=9893e599e7a560159ccf547b4c4ba5671f65ba32, not stripped
+----
+
+* Ensure that the linker is correctly linking in Darshan's runtime libraries:
+    ** A common mistake is to explicitly link in the underlying MPI libraries (e.g., `-lmpich` or `-lmpichf90`)
+in the link command, which can interfere with Darshan's instrumentation
+        *** These libraries are usually linked in automatically by the compiler
+        *** MPICH's `mpicc` comipler's `-show` flag can be used to examine the invoked link command, for instance
+    ** The linker's `-y` option can be used to verify that Darshan is properly intercepting MPI_Init
+function (e.g. by setting `CFLAGS='-Wl,-yMPI_Init'`), which it uses to initialize its runtime structures
+----
+/usr/common/software/darshan/3.0.0-pre3/lib/libdarshan.a(darshan-core-init-finalize.o): definition of MPI_Init
+----


=====================================
darshan-runtime/lib/darshan-core-init-finalize.c
=====================================
--- a/darshan-runtime/lib/darshan-core-init-finalize.c
+++ b/darshan-runtime/lib/darshan-core-init-finalize.c
@@ -137,6 +137,7 @@ DARSHAN_FORWARD_DECL(PMPI_Gather, int, (const void *sendbuf, int sendcount, MPI_
 #else
 DARSHAN_FORWARD_DECL(PMPI_Gather, int, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm));
 #endif
+DARSHAN_FORWARD_DECL(PMPI_Barrier, int, (MPI_Comm comm));
 
 void resolve_mpi_symbols (void)
 {
@@ -197,6 +198,7 @@ void resolve_mpi_symbols (void)
     MAP_OR_FAIL(PMPI_Send);
     MAP_OR_FAIL(PMPI_Recv);
     MAP_OR_FAIL(PMPI_Gather);
+    MAP_OR_FAIL(PMPI_Barrier);
 
     return;
 }


=====================================
darshan-runtime/lib/darshan-core.c
=====================================
--- a/darshan-runtime/lib/darshan-core.c
+++ b/darshan-runtime/lib/darshan-core.c
@@ -52,6 +52,7 @@ char* darshan_path_exclusions[] = {
 "/sbin/",
 "/sys/",
 "/proc/",
+"/var/",
 NULL
 };
 
@@ -261,12 +262,12 @@ void darshan_core_shutdown()
     darshan_record_id *mod_shared_recs;
     int shared_rec_cnt = 0;
     double start_log_time;
-    double open1, open2;
-    double job1, job2;
-    double rec1, rec2;
+    double open1 = 0, open2 = 0;
+    double job1 = 0, job2 = 0;
+    double rec1 = 0, rec2 = 0;
     double mod1[DARSHAN_MAX_MODS] = {0};
     double mod2[DARSHAN_MAX_MODS] = {0};
-    double header1, header2;
+    double header1 = 0, header2 = 0;
     double tm_end;
     uint64_t gz_fp = 0;
     MPI_File log_fh;


=====================================
darshan-runtime/lib/darshan-hdf5.c
=====================================
--- a/darshan-runtime/lib/darshan-hdf5.c
+++ b/darshan-runtime/lib/darshan-hdf5.c
@@ -117,7 +117,8 @@ hid_t DARSHAN_DECL(H5Fcreate)(const char *filename, unsigned flags,
         file = hdf5_file_by_name_sethid(filename, ret);
         if(file)
         {
-            if(file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] == 0)
+            if(file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] == 0 || 
+             file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] > tm1)
                 file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] = tm1;
             file->file_record->counters[HDF5_OPENS] += 1;
         }
@@ -156,7 +157,8 @@ hid_t DARSHAN_DECL(H5Fopen)(const char *filename, unsigned flags,
         file = hdf5_file_by_name_sethid(filename, ret);
         if(file)
         {
-            if(file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] == 0)
+            if(file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] == 0 || 
+             file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] > tm1)
                 file->file_record->fcounters[HDF5_F_OPEN_TIMESTAMP] = tm1;
             file->file_record->counters[HDF5_OPENS] += 1;
         }


=====================================
darshan-runtime/lib/darshan-mpiio.c
=====================================
--- a/darshan-runtime/lib/darshan-mpiio.c
+++ b/darshan-runtime/lib/darshan-mpiio.c
@@ -153,7 +153,8 @@ static void mpiio_shutdown(void);
         file->file_record->counters[MPIIO_COLL_OPENS] += 1; \
     if(__info != MPI_INFO_NULL) \
         file->file_record->counters[MPIIO_HINTS] += 1; \
-    if(file->file_record->fcounters[MPIIO_F_OPEN_TIMESTAMP] == 0) \
+    if(file->file_record->fcounters[MPIIO_F_OPEN_TIMESTAMP] == 0 || \
+     file->file_record->fcounters[MPIIO_F_OPEN_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[MPIIO_F_OPEN_TIMESTAMP] = __tm1; \
     DARSHAN_TIMER_INC_NO_OVERLAP(file->file_record->fcounters[MPIIO_F_META_TIME], __tm1, __tm2, file->last_meta_end); \
 } while(0)
@@ -174,7 +175,8 @@ static void mpiio_shutdown(void);
     if(file->last_io_type == DARSHAN_IO_WRITE) \
         file->file_record->counters[MPIIO_RW_SWITCHES] += 1; \
     file->last_io_type = DARSHAN_IO_READ; \
-    if(file->file_record->fcounters[MPIIO_F_READ_START_TIMESTAMP] == 0) \
+    if(file->file_record->fcounters[MPIIO_F_READ_START_TIMESTAMP] == 0 || \
+     file->file_record->fcounters[MPIIO_F_READ_START_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[MPIIO_F_READ_START_TIMESTAMP] = __tm1; \
     file->file_record->fcounters[MPIIO_F_READ_END_TIMESTAMP] = __tm2; \
     if(file->file_record->fcounters[MPIIO_F_MAX_READ_TIME] < __elapsed) { \
@@ -199,7 +201,8 @@ static void mpiio_shutdown(void);
     if(file->last_io_type == DARSHAN_IO_READ) \
         file->file_record->counters[MPIIO_RW_SWITCHES] += 1; \
     file->last_io_type = DARSHAN_IO_WRITE; \
-    if(file->file_record->fcounters[MPIIO_F_WRITE_START_TIMESTAMP] == 0) \
+    if(file->file_record->fcounters[MPIIO_F_READ_START_TIMESTAMP] == 0 || \
+     file->file_record->fcounters[MPIIO_F_READ_START_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[MPIIO_F_WRITE_START_TIMESTAMP] = __tm1; \
     file->file_record->fcounters[MPIIO_F_WRITE_END_TIMESTAMP] = __tm2; \
     if(file->file_record->fcounters[MPIIO_F_MAX_WRITE_TIME] < __elapsed) { \


=====================================
darshan-runtime/lib/darshan-pnetcdf.c
=====================================
--- a/darshan-runtime/lib/darshan-pnetcdf.c
+++ b/darshan-runtime/lib/darshan-pnetcdf.c
@@ -114,7 +114,8 @@ int DARSHAN_DECL(ncmpi_create)(MPI_Comm comm, const char *path,
         file = pnetcdf_file_by_name_setncid(path, (*ncidp));
         if(file)
         {
-            if(file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] == 0)
+            if(file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] == 0 || 
+             file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] > tm1)
                 file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] = tm1;
             DARSHAN_MPI_CALL(PMPI_Comm_size)(comm, &comm_size);
             if(comm_size == 1)
@@ -162,7 +163,8 @@ int DARSHAN_DECL(ncmpi_open)(MPI_Comm comm, const char *path,
         file = pnetcdf_file_by_name_setncid(path, (*ncidp));
         if(file)
         {
-            if(file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] == 0)
+            if(file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] == 0 || 
+             file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] > tm1)
                 file->file_record->fcounters[PNETCDF_F_OPEN_TIMESTAMP] = tm1;
             DARSHAN_MPI_CALL(PMPI_Comm_size)(comm, &comm_size);
             if(comm_size == 1)


=====================================
darshan-runtime/lib/darshan-posix.c
=====================================
--- a/darshan-runtime/lib/darshan-posix.c
+++ b/darshan-runtime/lib/darshan-posix.c
@@ -231,7 +231,8 @@ static void posix_shutdown(void);
         file->file_record->counters[POSIX_FOPENS] += 1; \
     else \
         file->file_record->counters[POSIX_OPENS] += 1; \
-    if(file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] == 0) \
+    if(file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] == 0 || \
+     file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] = __tm1; \
     DARSHAN_TIMER_INC_NO_OVERLAP(file->file_record->fcounters[POSIX_F_META_TIME], __tm1, __tm2, file->last_meta_end); \
 } while(0)
@@ -278,7 +279,8 @@ static void posix_shutdown(void);
     if(file->last_io_type == DARSHAN_IO_WRITE) \
         file->file_record->counters[POSIX_RW_SWITCHES] += 1; \
     file->last_io_type = DARSHAN_IO_READ; \
-    if(file->file_record->fcounters[POSIX_F_READ_START_TIMESTAMP] == 0) \
+    if(file->file_record->fcounters[POSIX_F_READ_START_TIMESTAMP] == 0 || \
+     file->file_record->fcounters[POSIX_F_READ_START_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[POSIX_F_READ_START_TIMESTAMP] = __tm1; \
     file->file_record->fcounters[POSIX_F_READ_END_TIMESTAMP] = __tm2; \
     if(file->file_record->fcounters[POSIX_F_MAX_READ_TIME] < __elapsed) { \
@@ -329,7 +331,8 @@ static void posix_shutdown(void);
     if(file->last_io_type == DARSHAN_IO_READ) \
         file->file_record->counters[POSIX_RW_SWITCHES] += 1; \
     file->last_io_type = DARSHAN_IO_WRITE; \
-    if(file->file_record->fcounters[POSIX_F_WRITE_START_TIMESTAMP] == 0) \
+    if(file->file_record->fcounters[POSIX_F_WRITE_START_TIMESTAMP] == 0 || \
+     file->file_record->fcounters[POSIX_F_WRITE_START_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[POSIX_F_WRITE_START_TIMESTAMP] = __tm1; \
     file->file_record->fcounters[POSIX_F_WRITE_END_TIMESTAMP] = __tm2; \
     if(file->file_record->fcounters[POSIX_F_MAX_WRITE_TIME] < __elapsed) { \


=====================================
darshan-test/example-output/mpi-io-test-ppc64-3.0.0.darshan
=====================================
Binary files /dev/null and b/darshan-test/example-output/mpi-io-test-ppc64-3.0.0.darshan differ


=====================================
darshan-test/example-output/mpi-io-test-x86_64-3.0.0.darshan
=====================================
Binary files /dev/null and b/darshan-test/example-output/mpi-io-test-x86_64-3.0.0.darshan differ


=====================================
darshan-test/regression/bg-profile-conf/runjob.sh
=====================================
--- a/darshan-test/regression/bg-profile-conf/runjob.sh
+++ b/darshan-test/regression/bg-profile-conf/runjob.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 # submit job and get job id
-jobid=`qsub --env DARSHAN_LOGFILE=$DARSHAN_LOGFILE --mode c16 --proccount $DARSHAN_DEFAULT_NPROCS -A SSSPPg -t 10 -n 1 --output $DARSHAN_TMP/$$-tmp.out --error $DARSHAN_TMP/$$-tmp.err --debuglog $DARSHAN_TMP/$$-tmp.debuglog "$@"`
+jobid=`qsub --env DARSHAN_LOGFILE=$DARSHAN_LOGFILE --mode c16 --proccount $DARSHAN_DEFAULT_NPROCS -A radix-io -t 10 -n 1 --output $DARSHAN_TMP/$$-tmp.out --error $DARSHAN_TMP/$$-tmp.err --debuglog $DARSHAN_TMP/$$-tmp.debuglog "$@"`
 if [ $? -ne 0 ]; then
 	echo "Error: failed to qsub $@"
 	exit 1


=====================================
darshan-test/regression/run-all.sh
=====================================
--- a/darshan-test/regression/run-all.sh
+++ b/darshan-test/regression/run-all.sh
@@ -45,6 +45,17 @@ fi
 # set up environment for tests according to platform
 source $DARSHAN_TESTDIR/$DARSHAN_PLATFORM/env.sh
 
+# in case of using LD_PRELOAD, it is possible errors with Darshan symbols
+# (e..g, forgetting to resolve a symbol Darshan wraps using dlsym) can
+# cause arbitrary binaries to crash. We check the output of the true
+# command to successfully identify failures like this and exit
+true_out=`/bin/true 2>&1`
+if [ $? -ne 0 -o -n "$true_out" ]; then
+    echo -n $true_out > tmp
+    echo "environment setup failed"
+    exit 1
+fi
+
 failure_count=0
 
 for i in `ls $DARSHAN_TESTDIR/test-cases/*.sh`; do


=====================================
darshan-test/regression/test-cases/cxxpi.sh
=====================================
--- a/darshan-test/regression/test-cases/cxxpi.sh
+++ b/darshan-test/regression/test-cases/cxxpi.sh
@@ -3,7 +3,7 @@
 PROG=cxxpi
 
 # set log file path; remove previous log if present
-export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan.gz
+export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan
 rm -f ${DARSHAN_LOGFILE}
 
 # compile


=====================================
darshan-test/regression/test-cases/fperf-f77.sh
=====================================
--- a/darshan-test/regression/test-cases/fperf-f77.sh
+++ b/darshan-test/regression/test-cases/fperf-f77.sh
@@ -3,7 +3,7 @@
 PROG=fperf-f77
 
 # set log file path; remove previous log if present
-export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan.gz
+export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan
 rm -f ${DARSHAN_LOGFILE}
 
 # compile


=====================================
darshan-test/regression/test-cases/fperf-f90.sh
=====================================
--- a/darshan-test/regression/test-cases/fperf-f90.sh
+++ b/darshan-test/regression/test-cases/fperf-f90.sh
@@ -3,7 +3,7 @@
 PROG=fperf-f90
 
 # set log file path; remove previous log if present
-export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan.gz
+export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan
 rm -f ${DARSHAN_LOGFILE}
 
 # compile


=====================================
darshan-test/regression/test-cases/mpi-io-test.sh
=====================================
--- a/darshan-test/regression/test-cases/mpi-io-test.sh
+++ b/darshan-test/regression/test-cases/mpi-io-test.sh
@@ -3,7 +3,7 @@
 PROG=mpi-io-test
 
 # set log file path; remove previous log if present
-export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan.gz
+export DARSHAN_LOGFILE=$DARSHAN_TMP/${PROG}.darshan
 rm -f ${DARSHAN_LOGFILE}
 
 # compile


=====================================
darshan-util/Makefile.in
=====================================
--- a/darshan-util/Makefile.in
+++ b/darshan-util/Makefile.in
@@ -137,6 +137,7 @@ endif
 	install -m 644 $(srcdir)/darshan-pnetcdf-logutils.h $(includedir)
 	install -m 644 $(srcdir)/darshan-bgq-logutils.h $(includedir)
 	install -m 644 $(srcdir)/darshan-null-logutils.h $(includedir)
+	install -m 644 $(srcdir)/../darshan-null-log-format.h $(includedir)
 	install -m 644 $(srcdir)/../darshan-posix-log-format.h $(includedir)
 	install -m 644 $(srcdir)/../darshan-mpiio-log-format.h $(includedir)
 	install -m 644 $(srcdir)/../darshan-hdf5-log-format.h $(includedir)
@@ -158,7 +159,7 @@ endif
 
 
 clean::
-	rm -f *.o *.po *.a darshan-analyzer darshan-convert darshan-parser jenkins-hash-gen
+	rm -f *.o *.po *.a darshan-analyzer darshan-convert darshan-diff darshan-parser jenkins-hash-gen
 
 distclean:: clean
 	rm -f darshan-runtime-config.h aclocal.m4 autom4te.cache/* config.status config.log Makefile util/bin/darshan-job-summary.pl


=====================================
darshan-util/configure
=====================================
--- a/darshan-util/configure
+++ b/darshan-util/configure
@@ -3538,7 +3538,7 @@ then
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
         BZLIB_OLD_LDFLAGS=$LDFLAGS
-        BZLIB_OLD_CPPFLAGS=$LDFLAGS
+        BZLIB_OLD_CPPFLAGS=$CPPFLAGS
         LDFLAGS="$LDFLAGS -L${BZLIB_HOME}/lib"
         CPPFLAGS="$CPPFLAGS -I${BZLIB_HOME}/include"
 


=====================================
darshan-util/darshan-convert-logs.pl
=====================================
--- a/darshan-util/darshan-convert-logs.pl
+++ b/darshan-util/darshan-convert-logs.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/env perl
 
 #
 # Copyright (C) 2015 University of Chicago.
@@ -19,6 +19,8 @@
 #	jobid2	key1=val1	key2=val2
 #
 
+use warnings;
+
 my $darshan_convert = "./darshan-convert";
 my $jenkins_hash_gen = "./jenkins-hash-gen";
 


=====================================
darshan-util/darshan-convert.c
=====================================
--- a/darshan-util/darshan-convert.c
+++ b/darshan-util/darshan-convert.c
@@ -230,8 +230,7 @@ int main(int argc, char **argv)
     darshan_fd outfile;
     int i;
     int mount_count;
-    char** mnt_pts;
-    char** fs_types;
+    struct darshan_mnt_info *mnt_data_array;
     struct darshan_record_ref *rec_hash = NULL;
     struct darshan_record_ref *ref, *tmp;
     char mod_buf[DEF_MOD_BUF_SIZE];
@@ -299,7 +298,7 @@ int main(int argc, char **argv)
         return(-1);
     }
 
-    ret = darshan_log_getmounts(infile, &mnt_pts, &fs_types, &mount_count);
+    ret = darshan_log_getmounts(infile, &mnt_data_array, &mount_count);
     if(ret < 0)
     {
         darshan_log_close(infile);
@@ -308,7 +307,7 @@ int main(int argc, char **argv)
         return(-1);
     }
 
-    ret = darshan_log_putmounts(outfile, mnt_pts, fs_types, mount_count);
+    ret = darshan_log_putmounts(outfile, mnt_data_array, mount_count);
     if(ret < 0)
     {
         darshan_log_close(infile);
@@ -389,16 +388,8 @@ int main(int argc, char **argv)
     darshan_log_close(infile);
     darshan_log_close(outfile);
 
-    for(i=0; i<mount_count; i++)
-    {
-        free(mnt_pts[i]);
-        free(fs_types[i]);
-    }
     if(mount_count > 0)
-    {
-        free(mnt_pts);
-        free(fs_types);
-    }
+        free(mnt_data_array);
 
     HASH_ITER(hlink, rec_hash, ref, tmp)
     {


=====================================
darshan-util/darshan-job-summary/bin/darshan-job-summary.pl.in
=====================================
--- a/darshan-util/darshan-job-summary/bin/darshan-job-summary.pl.in
+++ b/darshan-util/darshan-job-summary/bin/darshan-job-summary.pl.in
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/env perl
 #
 #  (C) 2015 by Argonne National Laboratory.
 #      See COPYRIGHT in top-level directory.
@@ -7,6 +7,7 @@
 # Set via configure
 my $PREFIX="@prefix@";
 
+use warnings;
 use lib "@prefix@/lib";
 use TeX::Encode;
 use Encode;


=====================================
darshan-util/darshan-logutils.c
=====================================
--- a/darshan-util/darshan-logutils.c
+++ b/darshan-util/darshan-logutils.c
@@ -66,6 +66,7 @@ struct darshan_fd_int_state
     struct darshan_dz_state dz;
 };
 
+static int darshan_mnt_info_cmp(const void *a, const void *b);
 static int darshan_log_getheader(darshan_fd fd);
 static int darshan_log_putheader(darshan_fd fd);
 static int darshan_log_seek(darshan_fd fd, off_t offset);
@@ -374,14 +375,14 @@ int darshan_log_putexe(darshan_fd fd, char *buf)
 
 /* darshan_log_getmounts()
  * 
- * retrieves mount table information from the log. Note that mnt_pts and
- * fs_types are arrays that will be allocated by the function and must be
- * freed by the caller. count will indicate the size of the arrays
+ * retrieves mount table information from the log. Note that mnt_data_array
+ * is an array that will be allocated by the function and must be
+ * freed by the caller. count will indicate the size of the array
  *
  * returns 0 on success, -1 on failure
  */
-int darshan_log_getmounts(darshan_fd fd, char*** mnt_pts,
-    char*** fs_types, int* count)
+int darshan_log_getmounts(darshan_fd fd, struct darshan_mnt_info **mnt_data_array,
+    int* count)
 {
     struct darshan_fd_int_state *state = fd->state;
     char *pos;
@@ -416,34 +417,27 @@ int darshan_log_getmounts(darshan_fd fd, char*** mnt_pts,
     }
 
     /* allocate output arrays */
-    *mnt_pts = malloc((*count)*sizeof(char*));
-    assert(*mnt_pts);
-    *fs_types = malloc((*count)*sizeof(char*));
-    assert(*fs_types);
+    *mnt_data_array = malloc((*count)*sizeof(**mnt_data_array));
+    assert(*mnt_data_array);
 
-    /* work backwards through the table and parse each line (except for
+    /* work through the table and parse each line (except for
      * first, which holds command line information)
      */
-    while((pos = strrchr(state->exe_mnt_data, '\n')) != NULL)
+    pos = state->exe_mnt_data;
+    while((pos = strchr(pos, '\n')) != NULL)
     {
-        /* overestimate string lengths */
-        (*mnt_pts)[array_index] = malloc(DARSHAN_EXE_LEN);
-        assert((*mnt_pts)[array_index]);
-        (*fs_types)[array_index] = malloc(DARSHAN_EXE_LEN);
-        assert((*fs_types)[array_index]);
-
-        ret = sscanf(++pos, "%s\t%s", (*fs_types)[array_index],
-            (*mnt_pts)[array_index]);
+        ret = sscanf(++pos, "%s\t%s", (*mnt_data_array)[array_index].mnt_type,
+            (*mnt_data_array)[array_index].mnt_path);
         if(ret != 2)
         {
             fprintf(stderr, "Error: poorly formatted mount table in darshan log file.\n");
             return(-1);
         }
-        pos--;
-        *pos = '\0';
         array_index++;
     }
 
+    qsort(*mnt_data_array, *count, sizeof(**mnt_data_array), darshan_mnt_info_cmp);
+
     return(0);
 }
 
@@ -456,7 +450,8 @@ int darshan_log_getmounts(darshan_fd fd, char*** mnt_pts,
  *
  * returns 0 on success, -1 on failure
  */
-int darshan_log_putmounts(darshan_fd fd, char** mnt_pts, char** fs_types, int count)
+int darshan_log_putmounts(darshan_fd fd, struct darshan_mnt_info *mnt_data_array,
+    int count)
 {
     struct darshan_fd_int_state *state = fd->state;
     int i;
@@ -472,7 +467,7 @@ int darshan_log_putmounts(darshan_fd fd, char** mnt_pts, char** fs_types, int co
     tmp = mnt_dat;
     for(i=count-1; i>=0; i--)
     {
-        sprintf(line, "\n%s\t%s", fs_types[i], mnt_pts[i]);
+        sprintf(line, "\n%s\t%s", mnt_data_array[i].mnt_type, mnt_data_array[i].mnt_path);
 
         memcpy(tmp, line, strlen(line));
         tmp += strlen(line);
@@ -827,6 +822,19 @@ void darshan_log_close(darshan_fd fd)
 
 /* **************************************************** */
 
+static int darshan_mnt_info_cmp(const void *a, const void *b)
+{
+    struct darshan_mnt_info *m_a = (struct darshan_mnt_info *)a;
+    struct darshan_mnt_info *m_b = (struct darshan_mnt_info *)b;
+
+    if(strlen(m_a->mnt_path) > strlen(m_b->mnt_path))
+        return(-1);
+    else if(strlen(m_a->mnt_path) < strlen(m_b->mnt_path))
+        return(1);
+    else
+        return(0);
+}
+
 /* read the header of the darshan log and set internal fd data structures
  * NOTE: this is the only portion of the darshan log that is uncompressed
  *


=====================================
darshan-util/darshan-logutils.h
=====================================
--- a/darshan-util/darshan-logutils.h
+++ b/darshan-util/darshan-logutils.h
@@ -7,7 +7,7 @@
 #ifndef __DARSHAN_LOG_UTILS_H
 #define __DARSHAN_LOG_UTILS_H
 
-#include <linux/limits.h>
+#include <limits.h>
 #include <zlib.h>
 #ifdef HAVE_LIBBZ2
 #include <bzlib.h>
@@ -47,6 +47,12 @@ struct darshan_record_ref
     UT_hash_handle hlink;
 };
 
+struct darshan_mnt_info
+{
+    char mnt_type[DARSHAN_EXE_LEN];
+    char mnt_path[DARSHAN_EXE_LEN];
+};
+
 /* functions to be implemented by each module for integration with
  * darshan log file utilities (e.g., parser & convert tools)
  */
@@ -116,10 +122,10 @@ int darshan_log_getjob(darshan_fd fd, struct darshan_job *job);
 int darshan_log_putjob(darshan_fd fd, struct darshan_job *job);
 int darshan_log_getexe(darshan_fd fd, char *buf);
 int darshan_log_putexe(darshan_fd fd, char *buf);
-int darshan_log_getmounts(darshan_fd fd, char*** mnt_pts,
-    char*** fs_types, int* count);
-int darshan_log_putmounts(darshan_fd fd, char** mnt_pts,
-    char** fs_types, int count);
+int darshan_log_getmounts(darshan_fd fd, struct darshan_mnt_info **mnt_data_array,
+    int* count);
+int darshan_log_putmounts(darshan_fd fd, struct darshan_mnt_info *mnt_data_array,
+    int count);
 int darshan_log_gethash(darshan_fd fd, struct darshan_record_ref **hash);
 int darshan_log_puthash(darshan_fd fd, struct darshan_record_ref *hash);
 int darshan_log_getmod(darshan_fd fd, darshan_module_id mod_id,


=====================================
darshan-util/darshan-parser.c
=====================================
--- a/darshan-util/darshan-parser.c
+++ b/darshan-util/darshan-parser.c
@@ -205,8 +205,7 @@ int main(int argc, char **argv)
     struct darshan_record_ref *rec_hash = NULL;
     struct darshan_record_ref *ref, *tmp_ref;
     int mount_count;
-    char** mnt_pts;
-    char** fs_types;
+    struct darshan_mnt_info *mnt_data_array;
     time_t tmp_time = 0;
     char *token;
     char *save;
@@ -248,7 +247,7 @@ int main(int argc, char **argv)
     }
 
     /* get the mount information for this log */
-    ret = darshan_log_getmounts(fd, &mnt_pts, &fs_types, &mount_count);
+    ret = darshan_log_getmounts(fd, &mnt_data_array, &mount_count);
     if(ret < 0)
     {
         darshan_log_close(fd);
@@ -318,7 +317,8 @@ int main(int argc, char **argv)
     printf("# -------------------------------------------------------\n");
     for(i=0; i<mount_count; i++)
     {
-        printf("# mount entry:\t%s\t%s\n", mnt_pts[i], fs_types[i]);
+        printf("# mount entry:\t%s\t%s\n", mnt_data_array[i].mnt_path,
+            mnt_data_array[i].mnt_type);
     }
 
     if(mask & OPTION_BASE)
@@ -417,10 +417,11 @@ int main(int argc, char **argv)
             /* get mount point and fs type associated with this record */
             for(j=0; j<mount_count; j++)
             {
-                if(strncmp(mnt_pts[j], ref->rec.name, strlen(mnt_pts[j])) == 0)
+                if(strncmp(mnt_data_array[j].mnt_path, ref->rec.name,
+                    strlen(mnt_data_array[j].mnt_path)) == 0)
                 {
-                    mnt_pt = mnt_pts[j];
-                    fs_type = fs_types[j];
+                    mnt_pt = mnt_data_array[j].mnt_path;
+                    fs_type = mnt_data_array[j].mnt_type;
                     break;
                 }
             }
@@ -557,7 +558,7 @@ int main(int argc, char **argv)
             printf("# I/O timing for unique files (seconds):\n");
             printf("# ...........................\n");
             printf("# unique files: slowest_rank_io_time: %lf\n", pdata.slowest_rank_time);
-            printf("# unique files: slowest_rank_meta_time: %lf\n", pdata.slowest_rank_meta_time);
+            printf("# unique files: slowest_rank_meta_only_time: %lf\n", pdata.slowest_rank_meta_time);
             printf("# unique files: slowest rank: %d\n", pdata.slowest_rank_rank);
             printf("#\n");
             printf("# I/O timing for shared files (seconds):\n");
@@ -633,15 +634,9 @@ cleanup:
     }
 
     /* free mount info */
-    for(i=0; i<mount_count; i++)
-    {
-        free(mnt_pts[i]);
-        free(fs_types[i]);
-    }
     if(mount_count > 0)
     {
-        free(mnt_pts);
-        free(fs_types);
+        free(mnt_data_array);
     }
 
     return(ret);
@@ -1355,7 +1350,6 @@ void calc_perf(perf_data_t *pdata,
     if (pdata->slowest_rank_time + pdata->shared_time_by_slowest)
     pdata->agg_perf_by_slowest = ((double)pdata->total_bytes / 1048576.0) /
                                      (pdata->slowest_rank_time +
-                                      pdata->slowest_rank_meta_time +
                                       pdata->shared_time_by_slowest);
 
     return;


=====================================
darshan-util/doc/darshan-util.txt
=====================================
--- a/darshan-util/doc/darshan-util.txt
+++ b/darshan-util/doc/darshan-util.txt
@@ -394,7 +394,7 @@ Job performance information can be generated using the `--perf` command-line opt
 # I/O timing for unique files (seconds):
 # ...........................
 # unique files: slowest_rank_io_time: 0.000000
-# unique files: slowest_rank_meta_time: 0.000000
+# unique files: slowest_rank_meta_only_time: 0.000000
 # unique files: slowest_rank: 0
 #
 # I/O timing for shared files (seconds):
@@ -430,7 +430,7 @@ type of file access.
 
 * unique files: slowest_rank_io_time: total I/O time for unique files
   (including both metadata + data transfer time)
-* unique files: slowest_rank_meta_time: metadata time for unique files
+* unique files: slowest_rank_meta_only_time: metadata time for unique files
 * unique files: slowest_rank: the rank of the slowest process
 
 .I/O timing for shared files


=====================================
maint/config/check_bzlib.m4
=====================================
--- a/maint/config/check_bzlib.m4
+++ b/maint/config/check_bzlib.m4
@@ -57,7 +57,7 @@ if test -z "${DISABLE_BZLIB}"
 then
         AC_MSG_RESULT(yes)
         BZLIB_OLD_LDFLAGS=$LDFLAGS
-        BZLIB_OLD_CPPFLAGS=$LDFLAGS
+        BZLIB_OLD_CPPFLAGS=$CPPFLAGS
         LDFLAGS="$LDFLAGS -L${BZLIB_HOME}/lib"
         CPPFLAGS="$CPPFLAGS -I${BZLIB_HOME}/include"
         AC_LANG_SAVE



View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/compare/1c2df3e155417529fe02eeddc35f0c82c5ead76f...3266825fa44dbc8e1cefbe99d189ae491d1ed42c
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/darshan-commits/attachments/20160517/5f0c10c1/attachment-0001.html>


More information about the Darshan-commits mailing list