summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2015-06-24 18:53:43 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2015-06-24 18:53:43 (GMT)
commite030fe2751803461fedc8fe223da57986fa2c36a (patch)
tree1a1fb11ed6ff093244e34c1bd37701bfd959d097
parenta07297e90dc701d64b19b05a368aba765995d772 (diff)
downloadhdf5-e030fe2751803461fedc8fe223da57986fa2c36a.zip
hdf5-e030fe2751803461fedc8fe223da57986fa2c36a.tar.gz
hdf5-e030fe2751803461fedc8fe223da57986fa2c36a.tar.bz2
[svn-r27278] Merge of 27270 from trunk. Fixes HDFFV-9119 and HDFFV-9421.
Changes that allow the autotools to correctly deal with inline functions. - Inline markup schemes are now checked with AC_COMPILE_IFELSE tests instead of AC_C_INLINE. - The inline designator is now H5_INLINE instead of H5_inline. This is now set in H5private.h instead of H5pubconf.h. Tested on: h5committest
-rwxr-xr-xconfigure86
-rw-r--r--configure.ac32
-rw-r--r--src/H5Oshared.h16
-rw-r--r--src/H5VMprivate.h24
-rw-r--r--src/H5config.h.in15
-rw-r--r--src/H5private.h21
6 files changed, 110 insertions, 84 deletions
diff --git a/configure b/configure
index 63f40ad..0540906 100755
--- a/configure
+++ b/configure
@@ -26241,48 +26241,60 @@ $as_echo "#define const /**/" >>confdefs.h
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands __inline__" >&5
+$as_echo_n "checking if the compiler understands __inline__... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+static __inline__ void f(void){return;};
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_inline=$ac_kw
+
+$as_echo "#define HAVE___INLINE__ 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_inline" != no && break
-done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands __inline" >&5
+$as_echo_n "checking if the compiler understands __inline... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+static __inline void f(void){return;};
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE___INLINE 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-case $ac_cv_c_inline in
- inline | yes) ;;
- *)
- case $ac_cv_c_inline in
- no) ac_val=;;
- *) ac_val=$ac_cv_c_inline;;
- esac
- cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands inline" >&5
+$as_echo_n "checking if the compiler understands inline... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+static inline void f(void){return;};
_ACEOF
- ;;
-esac
+if ac_fn_c_try_compile "$LINENO"; then :
+$as_echo "#define HAVE_INLINE 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__ extension" >&5
$as_echo_n "checking for __attribute__ extension... " >&6; }
@@ -33134,16 +33146,6 @@ if test "X$HDF_CXX" = "Xyes"; then
chmod 755 c++/src/h5c++
fi
-## We don't want inline defined for C++ compilers
-## Don't worry about the C++ ifdef wrappers in the H5pubconf file, since
-## 'H5_inline' isn't a C++ keyword.
-cat >> src/H5config.h <<EOF
-
-#if defined(__cplusplus) && defined(inline)
-#undef inline
-#endif
-EOF
-
## HDF5 configure code created by autotools with gcc 4.9.2 is adding problematic
## linker flags: -l with no library name; -l <libname>, specifically gfortran or m.
## This sed script corrects "-l <libname>" first and then "-l " with no library name.
diff --git a/configure.ac b/configure.ac
index 5ed40c4..18628b4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1691,7 +1691,27 @@ AC_CHECK_FUNCS([tmpfile asprintf vasprintf vsnprintf waitpid])
## Check compiler characteristics
##
AC_C_CONST
-AC_C_INLINE
+
+AC_MSG_CHECKING([if the compiler understands __inline__])
+AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[static __inline__ void f(void){return;};]])],
+ [AC_DEFINE([HAVE___INLINE__], [1], [Define if the compiler understands __inline__]) AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])]
+)
+
+AC_MSG_CHECKING([if the compiler understands __inline])
+AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[static __inline void f(void){return;};]])],
+ [AC_DEFINE([HAVE___INLINE], [1], [Define if the compiler understands __inline]) AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])]
+)
+
+AC_MSG_CHECKING([if the compiler understands inline])
+AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[static inline void f(void){return;};]])],
+ [AC_DEFINE([HAVE_INLINE], [1], [Define if the compiler understands inline]) AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])]
+)
AC_MSG_CHECKING([for __attribute__ extension])
AC_TRY_COMPILE(,[int __attribute__((unused)) x],
@@ -2904,16 +2924,6 @@ if test "X$HDF_CXX" = "Xyes"; then
chmod 755 c++/src/h5c++
fi
-## We don't want inline defined for C++ compilers
-## Don't worry about the C++ ifdef wrappers in the H5pubconf file, since
-## 'H5_inline' isn't a C++ keyword.
-cat >> src/H5config.h <<EOF
-
-#if defined(__cplusplus) && defined(inline)
-#undef inline
-#endif
-EOF
-
## HDF5 configure code created by autotools with gcc 4.9.2 is adding problematic
## linker flags: -l with no library name; -l <libname>, specifically gfortran or m.
## This sed script corrects "-l <libname>" first and then "-l " with no library name.
diff --git a/src/H5Oshared.h b/src/H5Oshared.h
index 3ec5709..2ac2a98 100644
--- a/src/H5Oshared.h
+++ b/src/H5Oshared.h
@@ -47,7 +47,7 @@
*
*-------------------------------------------------------------------------
*/
-static H5_inline void *
+static H5_INLINE void *
H5O_SHARED_DECODE(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned mesg_flags,
unsigned *ioflags, const uint8_t *p)
{
@@ -107,7 +107,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline herr_t
+static H5_INLINE herr_t
H5O_SHARED_ENCODE(H5F_t *f, hbool_t disable_shared, uint8_t *p, const void *_mesg)
{
const H5O_shared_t *sh_mesg = (const H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */
@@ -162,7 +162,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline size_t
+static H5_INLINE size_t
H5O_SHARED_SIZE(const H5F_t *f, hbool_t disable_shared, const void *_mesg)
{
const H5O_shared_t *sh_mesg = (const H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */
@@ -215,7 +215,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline herr_t
+static H5_INLINE herr_t
H5O_SHARED_DELETE(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, void *_mesg)
{
H5O_shared_t *sh_mesg = (H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */
@@ -267,7 +267,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline herr_t
+static H5_INLINE herr_t
H5O_SHARED_LINK(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, void *_mesg)
{
H5O_shared_t *sh_mesg = (H5O_shared_t *)_mesg; /* Pointer to shared message portion of actual message */
@@ -318,7 +318,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline void *
+static H5_INLINE void *
H5O_SHARED_COPY_FILE(H5F_t *file_src, void *_native_src, H5F_t *file_dst,
hbool_t *recompute_size, unsigned *mesg_flags, H5O_copy_t *cpy_info,
void *udata, hid_t dxpl_id)
@@ -382,7 +382,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline herr_t
+static H5_INLINE herr_t
H5O_SHARED_POST_COPY_FILE(const H5O_loc_t *oloc_src, const void *mesg_src,
H5O_loc_t *oloc_dst, void *mesg_dst, unsigned *mesg_flags, hid_t dxpl_id,
H5O_copy_t *cpy_info)
@@ -453,7 +453,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline herr_t
+static H5_INLINE herr_t
H5O_SHARED_DEBUG(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth)
{
diff --git a/src/H5VMprivate.h b/src/H5VMprivate.h
index 33f2b28..bf4e3ca 100644
--- a/src/H5VMprivate.h
+++ b/src/H5VMprivate.h
@@ -125,7 +125,7 @@ H5_DLL ssize_t H5VM_memcpyvv(void *_dst,
*
*-------------------------------------------------------------------------
*/
-static H5_inline hsize_t H5_ATTR_UNUSED
+static H5_INLINE hsize_t H5_ATTR_UNUSED
H5VM_vector_reduce_product(unsigned n, const hsize_t *v)
{
hsize_t ret_value = 1;
@@ -157,7 +157,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline htri_t H5_ATTR_UNUSED
+static H5_INLINE htri_t H5_ATTR_UNUSED
H5VM_vector_zerop_u(int n, const hsize_t *v)
{
htri_t ret_value=TRUE; /* Return value */
@@ -192,7 +192,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline htri_t H5_ATTR_UNUSED
+static H5_INLINE htri_t H5_ATTR_UNUSED
H5VM_vector_zerop_s(int n, const hssize_t *v)
{
htri_t ret_value=TRUE; /* Return value */
@@ -229,7 +229,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline int H5_ATTR_UNUSED
+static H5_INLINE int H5_ATTR_UNUSED
H5VM_vector_cmp_u (unsigned n, const hsize_t *v1, const hsize_t *v2)
{
int ret_value=0; /* Return value */
@@ -271,7 +271,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline int H5_ATTR_UNUSED
+static H5_INLINE int H5_ATTR_UNUSED
H5VM_vector_cmp_s (unsigned n, const hssize_t *v1, const hssize_t *v2)
{
int ret_value=0; /* Return value */
@@ -308,7 +308,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5_inline void H5_ATTR_UNUSED
+static H5_INLINE void H5_ATTR_UNUSED
H5VM_vector_inc(int n, hsize_t *v1, const hsize_t *v2)
{
while (n--) *v1++ += *v2++;
@@ -355,7 +355,7 @@ static const unsigned char LogTable256[] =
*
*-------------------------------------------------------------------------
*/
-static H5_inline unsigned H5_ATTR_UNUSED
+static H5_INLINE unsigned H5_ATTR_UNUSED
H5VM_log2_gen(uint64_t n)
{
unsigned r; /* r will be log2(n) */
@@ -403,7 +403,7 @@ static const unsigned MultiplyDeBruijnBitPosition[32] =
*
*-------------------------------------------------------------------------
*/
-static H5_inline unsigned H5_ATTR_UNUSED
+static H5_INLINE unsigned H5_ATTR_UNUSED
H5VM_log2_of2(uint32_t n)
{
#ifndef NDEBUG
@@ -424,7 +424,7 @@ H5VM_log2_of2(uint32_t n)
*
*-------------------------------------------------------------------------
*/
-static H5_inline hsize_t H5_ATTR_UNUSED
+static H5_INLINE hsize_t H5_ATTR_UNUSED
H5VM_power2up(hsize_t n)
{
hsize_t ret_value = 1; /* Return value */
@@ -449,7 +449,7 @@ H5VM_power2up(hsize_t n)
*
*-------------------------------------------------------------------------
*/
-static H5_inline unsigned H5_ATTR_UNUSED
+static H5_INLINE unsigned H5_ATTR_UNUSED
H5VM_limit_enc_size(uint64_t limit)
{
return (H5VM_log2_gen(limit) / 8) + 1;
@@ -478,7 +478,7 @@ static const unsigned char H5VM_bit_clear_g[8] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7,
*
*-------------------------------------------------------------------------
*/
-static H5_inline hbool_t H5_ATTR_UNUSED
+static H5_INLINE hbool_t H5_ATTR_UNUSED
H5VM_bit_get(const unsigned char *buf, size_t offset)
{
/* Test the appropriate bit in the buffer */
@@ -505,7 +505,7 @@ H5VM_bit_get(const unsigned char *buf, size_t offset)
*
*-------------------------------------------------------------------------
*/
-static H5_inline void H5_ATTR_UNUSED
+static H5_INLINE void H5_ATTR_UNUSED
H5VM_bit_set(unsigned char *buf, size_t offset, hbool_t val)
{
/* Set/reset the appropriate bit in the buffer */
diff --git a/src/H5config.h.in b/src/H5config.h.in
index c089cd3..ac781fc 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -133,6 +133,9 @@
/* Define to 1 if you have the `get_fpc_csr' function. */
#undef HAVE_GET_FPC_CSR
+/* Define if the compiler understands inline */
+#undef HAVE_INLINE
+
/* Define if library will contain instrumentation to detect correct
optimization operation */
#undef HAVE_INSTRUMENTED_LIBRARY
@@ -356,6 +359,12 @@
/* Define to 1 if you have the `_scrsize' function. */
#undef HAVE__SCRSIZE
+/* Define if the compiler understands __inline */
+#undef HAVE___INLINE
+
+/* Define if the compiler understands __inline__ */
+#undef HAVE___INLINE__
+
/* Define if HDF5's high-level library headers should be included in hdf5.h */
#undef INCLUDE_HL
@@ -569,12 +578,6 @@
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-#undef inline
-#endif
-
/* Define to `long int' if <sys/types.h> does not define. */
#undef off_t
diff --git a/src/H5private.h b/src/H5private.h
index f7a4171..9efd145 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -183,11 +183,22 @@
#endif /*H5_HAVE_WIN32_API*/
-/* H5_inline */
-#ifndef H5_inline
-#define H5_inline
-#endif /* H5_inline */
-
+/* Various ways that inline functions can be declared */
+#if defined(H5_HAVE___INLINE__)
+ /* GNU (alternative form) */
+ #define H5_INLINE __inline__
+#elif defined(H5_HAVE___INLINE)
+ /* Visual Studio */
+ #define H5_INLINE __inline
+#elif defined(H5_HAVE_INLINE)
+ /* GNU, C++
+ * Use "inline" as a last resort on the off-chance that there will
+ * be C++ problems.
+ */
+ #define H5_INLINE inline
+#else
+ #define H5_INLINE
+#endif /* inline choices */
#ifndef F_OK
# define F_OK 00