From d494d7b3b95cf893e6dd20688057bb13ba10422f Mon Sep 17 00:00:00 2001
From: Scot Breitenfeld <brtnfld@hdfgroup.org>
Date: Fri, 27 Mar 2015 17:10:24 -0500
Subject: [svn-r26629] Fix for HDFFV09202 and HDFFV-9171.

HDFFV-9171 Configure mistakes Cray Compilers for Intel Compilers,
HDFFV-9202 subroutine VERIFY() fails when checking 8 byte integers in fortran tests

Tested: h5committest
---
 MANIFEST                  |  2 ++
 config/cce-fflags         | 73 +++++++++++++++++++++++++++++++++++++++++++
 config/cce-flags          | 79 +++++++++++++++++++++++++++++++++++++++++++++++
 config/linux-gnulibc1     | 24 +++++++++++---
 fortran/test/tH5P_F03.f90 | 11 +++----
 fortran/test/tf.f90       | 11 +++----
 6 files changed, 184 insertions(+), 16 deletions(-)
 create mode 100644 config/cce-fflags
 create mode 100644 config/cce-flags

diff --git a/MANIFEST b/MANIFEST
index ad33012..593ccde 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -88,6 +88,8 @@
 ./config/COPYING
 ./config/BlankForm
 ./config/apple
+./config/cce-fflags
+./config/cce-flags
 ./config/commence.am
 ./config/conclude.am
 ./config/examples.am
diff --git a/config/cce-fflags b/config/cce-fflags
new file mode 100644
index 0000000..896e711
--- /dev/null
+++ b/config/cce-fflags
@@ -0,0 +1,73 @@
+#							-*- shell-script -*-
+#
+# Copyright by The HDF Group.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+
+
+# This file should be sourced into configure if the compiler is the
+# Cray Compiling Environment (CCE) compiler or a derivative.  It is careful not to do anything
+# if the compiler is not Cray; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for cce
+# unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: Cray
+#   cc_version:   Version number: 8.3.0
+#
+if test X = "X$f9x_flags_set"; then
+    f9x_version="`$FC $FCFLAGS $H5_FCFLAGS -V 2>&1 |grep 'Cray'`"
+    if test X != "X$f9x_version"; then
+        f9x_vendor=cce
+        f9x_version=`echo $f9x_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$FC' is Cray $f9x_vendor-$f9x_version"
+	fc_version_info=$f9x_version
+    fi
+fi
+
+# Common Cray flags for various situations
+if test "X-cce" = "X-$f9x_vendor"; then
+    # Insert section about version specific problems from compiler flags here,
+    # if necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # General
+    H5_FCFLAGS="${H5_FCFLAGS} -hnocaf"
+
+    # Production
+    # -Wl,-s to remove all symbols for smaller file
+    PROD_FCFLAGS="-O3 -Wl,-s"
+
+    # Debug
+    DEBUG_FCFLAGS="-g -O0"
+
+    # Profile
+    # Use this for profiling with gprof
+    PROFILE_FCFLAGS="-g -p"
+
+    # Flags are set
+    f9x_flags_set=yes
+fi
+
+# Clear f9x info if no flags set
+if test "X-$f9x_flags_set" = "X-"; then
+    f9x_vendor=
+    f9x_version=
+fi
diff --git a/config/cce-flags b/config/cce-flags
new file mode 100644
index 0000000..a34fcbe
--- /dev/null
+++ b/config/cce-flags
@@ -0,0 +1,79 @@
+#							-*- shell-script -*-
+#
+# Copyright by The HDF Group.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+
+
+# This file should be sourced into configure if the compiler is the
+# Cray Compiling Environment (CCE) compiler or a derivative.  It is careful not to do anything
+# if the compiler is not Cray; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for cce
+# unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: Cray
+#   cc_version:   Version number: 8.3.0
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS $H5_CFLAGS -V 2>&1 |grep 'Cray'`"
+    if test X != "X$cc_version"; then
+        cc_vendor=cce
+        cc_version=`echo $cc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$CC' is Cray $cc_vendor-$cc_version"
+	cc_version_info=$cc_version
+	cxx_version_info=$cc_version
+    fi
+fi
+
+# Common Cray flags for various situations
+if test "X-cce" = "X-$cc_vendor"; then
+    # Insert section about version specific problems from compiler flags here,
+    # if necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # General
+    # Default to C99 standard.
+    H5_CFLAGS="${H5_CFLAGS:--hc99 $arch}"
+
+    # Production
+    # -Wl,-s to remove all symbols for smaller file
+    PROD_CFLAGS="-O3 -Wl,-s"
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-g -O0"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    # Use this for profiling with gprof
+    PROFILE_CFLAGS="-g -p"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+
+fi
+
+# Clear cc info if no flags set
+if test "X-$cc_flags_set" = "X-"; then
+    cc_vendor=
+    cc_version=
+fi
diff --git a/config/linux-gnulibc1 b/config/linux-gnulibc1
index c18c02d..465bfed 100644
--- a/config/linux-gnulibc1
+++ b/config/linux-gnulibc1
@@ -38,6 +38,9 @@ fi
 # Figure out PGI C compiler flags
 . $srcdir/config/pgi-flags
 
+# Figure out CCE C compiler flags
+. $srcdir/config/cce-flags
+
 # Figure out Intel C compiler flags
 . $srcdir/config/intel-flags
 
@@ -89,10 +92,13 @@ else
     esac
 fi
 
-# Figure out PGI F90 compiler flags
+# Figure out PGI FC compiler flags
 . $srcdir/config/pgi-fflags
 
-# Figure out Intel F90 compiler flags
+# Figure out CCE FC compiler flags
+. $srcdir/config/cce-fflags
+
+# Figure out Intel FC compiler flags
 . $srcdir/config/intel-fflags
 
 case $FC_BASENAME in
@@ -125,6 +131,10 @@ if test -z "$CXX"; then
 fi
 
 # compiler version strings
+
+# check if the compiler_version_info is already set
+if test -z "$cc_version_info"; then
+
 case $CC in
     # whatever matches *pgcc* will also match *gcc*, so this one must come first
     *pgcc*)
@@ -153,7 +163,11 @@ case $CC in
         ;;
 esac
 
+fi
+
 # get fortran version info
+# check if the compiler_version_info is already set
+if test -z "$fc_version_info"; then
 case $FC in
     *gfortran*)
         fc_version_info=`$FC $FCFLAGS $H5_FCFLAGS --version 2>&1 |\
@@ -199,9 +213,11 @@ case $FC in
         echo "No match to get fc_version_info for $FC"
         ;;
 esac
-
+fi
 
 # get c++ version info
+# check if the compiler_version_info is already set
+if test -z "$cxx_version_info"; then
 case $CXX in
     *g++*)
         cxx_version_info=`$CXX $CXXFLAGS $H5_CXXFLAGS --version 2>&1 |\
@@ -226,4 +242,4 @@ case $CXX in
         echo "No match to get cxx_version_info for $CXX"
         ;;
 esac
-
+fi
diff --git a/fortran/test/tH5P_F03.f90 b/fortran/test/tH5P_F03.f90
index 34fd0ad..56f9679 100644
--- a/fortran/test/tH5P_F03.f90
+++ b/fortran/test/tH5P_F03.f90
@@ -360,14 +360,13 @@ SUBROUTINE test_genprop_class_callback(total_error)
      WRITE(*,*) 'Class names do not match! name=',CLASS1_NAME_BUF, 'CLASS1_NAME=',CLASS1_NAME
      total_error = total_error + 1
   ENDIF
-
   ! Close class 
   CALL h5pclose_class_f(cid2, error)
   CALL check("h5pclose_class_f", error, total_error)
 
   ! Verify that the creation callback occurred 
   CALL VERIFY("h5pcreate_f", crt_cb_struct%count, 1, total_error)
-  CALL VERIFY("h5pcreate_f", INT(crt_cb_struct%id), INT(lid1), total_error)
+  CALL VERIFY_INTEGER_HID_T("h5pcreate_f", crt_cb_struct%id, lid1, total_error)
 
   !  Check the number of properties in list 
   CALL h5pget_nprops_f(lid1,nprops, error)
@@ -380,7 +379,7 @@ SUBROUTINE test_genprop_class_callback(total_error)
 
   !  Verify that the creation callback occurred 
   CALL VERIFY("h5pcreate_f", crt_cb_struct%count, 2, total_error)
-  CALL VERIFY("h5pcreate_f", INT(crt_cb_struct%id), INT(lid2), total_error)
+  CALL VERIFY_INTEGER_HID_T("h5pcreate_f", crt_cb_struct%id, lid2, total_error)
 
   !  Check the number of properties in list 
   CALL h5pget_nprops_f(lid2,nprops, error)
@@ -393,15 +392,15 @@ SUBROUTINE test_genprop_class_callback(total_error)
 
   ! Verify that the close callback occurred 
   CALL VERIFY("h5pcreate_f", cls_cb_struct%count, 1, total_error)
-  CALL VERIFY("h5pcreate_f", INT(cls_cb_struct%id), INT(lid1), total_error)
+  CALL VERIFY_INTEGER_HID_T("h5pcreate_f", cls_cb_struct%id, lid1, total_error)
 
   ! Close second list 
   CALL h5pclose_f(lid2, error);
   CALL check("h5pclose_f", error, total_error)
 
-  ! Verify that the close callback occurred 
+  ! Verify that the close callback occurred
   CALL VERIFY("h5pcreate_f", cls_cb_struct%count, 2, total_error)
-  CALL VERIFY("h5pcreate_f", INT(cls_cb_struct%id), INT(lid2), total_error)
+  CALL verify_INTEGER_HID_T("h5pcreate_f", cls_cb_struct%id, lid2, total_error)
 
   ! Close class 
   CALL h5pclose_class_f(cid1, error)
diff --git a/fortran/test/tf.f90 b/fortran/test/tf.f90
index 6d5911f..242d757 100644
--- a/fortran/test/tf.f90
+++ b/fortran/test/tf.f90
@@ -134,20 +134,19 @@ CONTAINS
 
 !This definition is needed for Windows DLLs
 !DEC$if defined(BUILD_HDF5_TEST_DLL)
-!DEC$attributes dllexport :: verify_Fortran_INTEGER_4
+!DEC$attributes dllexport :: verify_INTEGER_HID_T
 !DEC$endif
-  SUBROUTINE verify_Fortran_INTEGER_4(string,value,correct_value,total_error)
-    USE HDF5
-    INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  ! should map to INTEGER*4 on most modern processors	
+  SUBROUTINE verify_INTEGER_HID_T(string,value,correct_value,total_error)
+    USE HDF5	
     CHARACTER(LEN=*) :: string
-    INTEGER(int_kind_8) :: value, correct_value
+    INTEGER(HID_T) :: value, correct_value
     INTEGER :: total_error
     IF (value .NE. correct_value) THEN
        total_error=total_error+1
        WRITE(*,*) "ERROR: INCORRECT VALIDATION ", string
     ENDIF
     RETURN
-  END SUBROUTINE verify_Fortran_INTEGER_4
+  END SUBROUTINE verify_INTEGER_HID_T
 
 !This definition is needed for Windows DLLs
 !DEC$if defined(BUILD_HDF5_TEST_DLL)
-- 
cgit v0.12