/* ----------------------------------------------------------------------------

 * @library_name@ Copyright 2010, Georgia Tech Research Corporation, 
 * Atlanta, Georgia 30332-0415
 * All Rights Reserved
 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)

 * See LICENSE for the license information

 * -------------------------------------------------------------------------- */

/**
 * @file     dllexport.h
 * @brief    Symbols for exporting classes and methods from DLLs
 * @author   Richard Roberts
 * @date     Mar 9, 2013
 */

// Macros for exporting DLL symbols on Windows
// Usage example:
// In header file:
//   class GTSAM_EXPORT MyClass { ... };
//   
// Results in the following declarations:
// When included while compiling the GTSAM library itself:
//   class __declspec(dllexport) MyClass { ... };
// When included while compiling other code against GTSAM:
//   class __declspec(dllimport) MyClass { ... };

#pragma once

// Whether GTSAM is compiled as static or DLL in windows. 
// This will be used to decide whether include __declspec(dllimport) or not in headers
#cmakedefine BUILD_SHARED_LIBS

#ifdef _WIN32
#  ifndef BUILD_SHARED_LIBS
#    define @library_name@_EXPORT
#    define @library_name@_EXTERN_EXPORT extern
#  else
#    ifdef @library_name@_EXPORTS
#      define @library_name@_EXPORT __declspec(dllexport)
#      define @library_name@_EXTERN_EXPORT __declspec(dllexport) extern
#    else
#      define @library_name@_EXPORT __declspec(dllimport)
#      define @library_name@_EXTERN_EXPORT __declspec(dllimport)
#    endif
#  endif
#else
#ifdef __APPLE__
#  define @library_name@_EXPORT __attribute__((visibility("default")))
#  define @library_name@_EXTERN_EXPORT extern
#else
#  define @library_name@_EXPORT
#  define @library_name@_EXTERN_EXPORT extern
#endif
#endif

#undef BUILD_SHARED_LIBS

