/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * 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 files COPYING and Copyright.html.  COPYING can be found at the root   *
 * of the source code distribution tree; Copyright.html can be found at      *
 * http://hdfgroup.org/products/hdf4/doc/Copyright.html.  If you do not have *
 * access to either file, you may request a copy from help@hdfgroup.org.     *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* $Id: hdfi.h 5435 2010-08-11 17:31:24Z byrn $ */

#ifndef H4API_ADPT_H
#define H4API_ADPT_H

#include "h4config.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(xdr_EXPORTS)
  #if defined (_MSC_VER) || defined(__MINGW32__) /* MSVC Compiler Case */
    #define XDRLIBAPI extern __declspec(dllexport)
  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
    #define XDRLIBAPI extern __attribute__ ((visibility("default")))
  #endif
#endif /* xdr_EXPORTS */

#if defined(hdf_EXPORTS)
  #if defined (_MSC_VER) || defined(__MINGW32__)  /* MSVC Compiler Case */
    #define HDFERRPUBLIC __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_EXPORTS */

#if defined(hdf_fcstub_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_EXPORTS */

#if defined(mfhdf_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_EXPORTS */

#if defined(mfhdf_fcstub_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_fcstub_EXPORTS */

#if defined(hdf_test_fcstub_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_EXPORTS */

#if defined(mfhdf_hdiff_EXPORTS)
  #if defined (_MSC_VER) || defined(__MINGW32__)  /* MSVC Compiler Case */
    #define HDFPUBLIC __declspec(dllimport)
    #define HDFLIBAPI extern __declspec(dllimport)
    #define HDFTOOLSAPI 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 HDFTOOLSAPI extern __attribute__ ((visibility("default")))
  #endif
#endif /* mfhdf_hdiff_EXPORTS */

#if defined(mfhdf_hrepack_EXPORTS)
  #if defined (_MSC_VER) || defined(__MINGW32__)  /* MSVC Compiler Case */
    #define HDFPUBLIC __declspec(dllimport)
    #define HDFLIBAPI extern __declspec(dllimport)
    #define HDFTOOLSAPI 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 HDFTOOLSAPI extern __attribute__ ((visibility("default")))
  #endif
#endif /* mfhdf_hrepack_EXPORTS */

#if !defined(XDRLIBAPI)
  #if defined (_MSC_VER) || defined(__MINGW32__)  /* MSVC Compiler Case */
    #define XDRLIBAPI extern __declspec(dllimport)
  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
    #define XDRLIBAPI extern __attribute__ ((visibility("default")))
  #endif
#endif
#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
#if !defined(HDFTOOLSAPI)
  #if defined (_MSC_VER) || defined(__MINGW32__)  /* MSVC Compiler Case */
    #define HDFTOOLSAPI extern __declspec(dllimport)
  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
    #define HDFTOOLSAPI extern __attribute__ ((visibility("default")))
  #endif
#endif

#elif defined(H4_BUILT_AS_STATIC_LIB)
  #define XDRLIBAPI extern
  #define HDFERRPUBLIC extern
  #define HDFPUBLIC
  #define HDFLIBAPI extern
  #define HDFFCLIBAPI extern
  #define HDFTOOLSAPI extern

#else
/* This is the original HDFGroup defined preprocessor code which should still work
 * with the VS projects that are maintained by "The HDF Group"
 * This will be removed after the next release.
 */

#ifdef _WIN32
/**
 * Under _WIN32 we have single threaded static libraries, or
 * mutli-threaded DLLs using the multithreaded runtime DLLs.
 **/
#  if defined(_MT) &&  defined(_DLL) &&!defined(_HDFDLL_)
/*     If the user really meant to use _HDFDLL_, but he forgot, just define it. */
#      define _HDFDLL_
#  endif

#  if !defined(_MT) && defined(_HDFDLL_)
#      error To use the HDF libraries from a single-threaded project, you must use static HDF libraries
#      error Undefine the macro "_HDFDLL_"
#  endif

#  if defined(xdr_EXPORTS)
#      define XDRLIBAPI extern __declspec(dllexport)
#  endif /* xdr_EXPORTS */

#  if defined(_HDFDLL_)
#    pragma warning( disable: 4273 ) /* Disable the stupid dll linkage warnings */
#    if defined(_HDFLIB_)
#      define HDFPUBLIC __declspec(dllexport)
#      define HDFLIBAPI extern __declspec(dllexport)
#    endif

#    if defined(_MFHDFLIB_)
#      define HDFLIBAPI extern __declspec(dllexport)
#    endif

#    if defined(_HDFLIB_C_STUB_EXPORTS) || defined(_MFHDFLIB_C_STUB_EXPORTS) || defined(_DLLLIBTEST_FCSTUB_EXPORTS)
#      define HDFFCLIBAPI extern __declspec(dllexport)
#    endif 

#    if defined(_HDFLIB_C_STUB_EXPORTS)
#      define HDFPUBLIC __declspec(dllexport)
#    endif

#    if !defined(XDRLIBAPI)
#      define XDRLIBAPI extern __declspec(dllimport)
#    endif
#    if !defined(HDFERRPUBLIC)
       #define HDFERRPUBLIC extern __declspec(dllimport)
#    endif
#    if !defined(HDFPUBLIC)
#      define HDFPUBLIC __declspec(dllimport)
#    endif
#    if !defined(HDFLIBAPI)
#      define HDFLIBAPI extern __declspec(dllimport)
#    endif
#    if !defined(HDFFCLIBAPI)
#      define HDFFCLIBAPI extern __declspec(dllimport)
#    endif
#    if !defined(HDFTOOLSAPI)
#      define HDFTOOLSAPI extern __declspec(dllimport)
#    endif

#  else
#    define XDRLIBAPI extern
#    define HDFERRPUBLIC extern
#    define HDFPUBLIC
#    define HDFLIBAPI extern
#    define HDFFCLIBAPI extern
#    define HDFTOOLSAPI extern
#  endif
#else  /* !defined( _WIN32 ) */
#  define XDRLIBAPI extern
#  define HDFERRPUBLIC extern
#  define HDFPUBLIC
#  define HDFLIBAPI extern
#  define HDFFCLIBAPI extern
#  define HDFTOOLSAPI extern
#endif

#endif /*H4_BUILT_AS_DYNAMIC_LIB  */


#endif /* H4API_ADPT_H */
