/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF.  The full HDF copyright notice, including       *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/.  *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#ifndef H4_API_ADPT_H
#define H4_API_ADPT_H

/**
 * Provide the macros to adapt the HDF public functions to
 * dll entry points.
 * In addition it provides error lines if the configuration is incorrect.
 **/

/* This will only be defined if HDF4 was built with CMake */
#if defined(H4_BUILT_AS_DYNAMIC_LIB)

#if defined(hdf_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFERRPUBLIC extern __declspec(dllimport)
#define HDFPUBLIC    __declspec(dllexport)
#define HDFLIBAPI    extern __declspec(dllexport)
#define HDFFCLIBAPI  extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFERRPUBLIC extern __attribute__((visibility("default")))
#define HDFPUBLIC    __attribute__((visibility("default")))
#define HDFLIBAPI    extern __attribute__((visibility("default")))
#define HDFFCLIBAPI  extern __attribute__((visibility("default")))
#endif
#endif /* hdf_shared_EXPORTS */

#if defined(hdf_fcstub_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFPUBLIC   __declspec(dllexport)
#define HDFLIBAPI   extern __declspec(dllimport)
#define HDFFCLIBAPI extern __declspec(dllexport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFPUBLIC   __attribute__((visibility("default")))
#define HDFLIBAPI   extern __attribute__((visibility("default")))
#define HDFFCLIBAPI extern __attribute__((visibility("default")))
#endif
#endif /* hdf_fcstub_shared_EXPORTS */

#if defined(mfhdf_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFERRPUBLIC extern __declspec(dllimport)
#define HDFPUBLIC    __declspec(dllimport)
#define HDFLIBAPI    extern __declspec(dllexport)
#define HDFFCLIBAPI  extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFERRPUBLIC extern __attribute__((visibility("default")))
#define HDFPUBLIC    __attribute__((visibility("default")))
#define HDFLIBAPI    extern __attribute__((visibility("default")))
#define HDFFCLIBAPI  extern __attribute__((visibility("default")))
#endif
#endif /* mfhdf_shared_EXPORTS */

#if defined(mfhdf_fcstub_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFPUBLIC   __declspec(dllimport)
#define HDFLIBAPI   extern __declspec(dllimport)
#define HDFFCLIBAPI extern __declspec(dllexport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFPUBLIC   __attribute__((visibility("default")))
#define HDFLIBAPI   extern __attribute__((visibility("default")))
#define HDFFCLIBAPI extern __attribute__((visibility("default")))
#endif
#endif /* mfhdf_shared_fcstub_EXPORTS */

#if defined(hdf_test_fcstub_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFFCLIBAPI extern __declspec(dllexport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFFCLIBAPI extern __attribute__((visibility("default")))
#endif
#endif /* hdf_test_fcstub_shared_EXPORTS */

#if defined(mfhdf_hdiff_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFPUBLIC __declspec(dllimport)
#define HDFLIBAPI extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFPUBLIC __attribute__((visibility("default")))
#define HDFLIBAPI extern __attribute__((visibility("default")))
#endif
#endif /* mfhdf_hdiff_shared_EXPORTS */

#if defined(mfhdf_hrepack_shared_EXPORTS)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFPUBLIC __declspec(dllimport)
#define HDFLIBAPI extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFPUBLIC __attribute__((visibility("default")))
#define HDFLIBAPI extern __attribute__((visibility("default")))
#endif
#endif /* mfhdf_hrepack_shared_EXPORTS */

#if !defined(HDFERRPUBLIC)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFERRPUBLIC extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFERRPUBLIC extern __attribute__((visibility("default")))
#endif
#endif
#if !defined(HDFPUBLIC)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFPUBLIC __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFPUBLIC __attribute__((visibility("default")))
#endif
#endif
#if !defined(HDFLIBAPI)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFLIBAPI extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFLIBAPI extern __attribute__((visibility("default")))
#endif
#endif
#if !defined(HDFFCLIBAPI)
#if defined(_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
#define HDFFCLIBAPI extern __declspec(dllimport)
#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
#define HDFFCLIBAPI extern __attribute__((visibility("default")))
#endif
#endif

#else
#define HDFERRPUBLIC extern
#define HDFPUBLIC
#define HDFLIBAPI   extern
#define HDFFCLIBAPI extern
#endif /*H4_BUILT_AS_DYNAMIC_LIB  */

#endif /* H4_API_ADPT_H */
