// Copyright (c) 2005-2008 Hartmut Kaiser // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #if !defined(SAGA_ENGINE_STATIC_ADAPTOR_DATA_HPP) #define SAGA_ENGINE_STATIC_ADAPTOR_DATA_HPP /////////////////////////////////////////////////////////////////////////////// #include #include #include struct static_adaptor_load_data_type { char const* const name; // adaptor name void (*force_load)(); // function to force linking adaptor boost::plugin::get_plugins_list_type get_factory; }; struct static_package_load_data_type { char const* const name; // package name void (*force_load)(); // function to force linking package unsigned long (*get_version)(); // function to force linking version API }; /////////////////////////////////////////////////////////////////////////////// #define SAGA_LITE_DECLARE_ADAPTOR(name) \ extern "C" void BOOST_PLUGIN_FORCE_LOAD_NAME(SAGA_MANGLE_ADAPTOR_NAME(name))(); \ extern "C" BOOST_PLUGIN_EXPORT_API std::map& \ BOOST_PLUGIN_API BOOST_PLUGIN_LIST_NAME(SAGA_MANGLE_ADAPTOR_NAME(name))() \ /**/ #define SAGA_LITE_DEFINE_ADAPTOR(name) \ { \ BOOST_PP_STRINGIZE(name), \ BOOST_PLUGIN_FORCE_LOAD_NAME(SAGA_MANGLE_ADAPTOR_NAME(name)), \ BOOST_PLUGIN_LIST_NAME(SAGA_MANGLE_ADAPTOR_NAME(name)) \ } \ /**/ /////////////////////////////////////////////////////////////////////////////// #define SAGA_LITE_DECLARE_PACKAGE(name) \ extern "C" void BOOST_PLUGIN_FORCE_LOAD_NAME(SAGA_MANGLE_PACKAGE_NAME(name))(); \ namespace saga { unsigned long get_ ## name ## _package_version(); } \ /**/ #define SAGA_LITE_DEFINE_PACKAGE(name) \ { \ BOOST_PP_STRINGIZE(name), \ BOOST_PLUGIN_FORCE_LOAD_NAME(SAGA_MANGLE_PACKAGE_NAME(name)), \ &saga::get_ ## name ## _package_version \ } \ /**/ /////////////////////////////////////////////////////////////////////////////// // prototypes of functions used to force linking of adaptors #if defined(BUILD_SAGA_LITE) @SAGA_LITE_REPLACE@[[ SAGA_LITE_DECLARE_ADAPTOR(@ADAPTOR_NAME@); ]] #endif // table of adaptors to link statically static_adaptor_load_data_type static_adaptor_load_data[] = { #if defined(BUILD_SAGA_LITE) @SAGA_LITE_REPLACE@[[ SAGA_LITE_DEFINE_ADAPTOR(@ADAPTOR_NAME@), ]] #endif { NULL, NULL } }; /////////////////////////////////////////////////////////////////////////////// // prototypes of functions used to force linking of packages #if defined(BUILD_SAGA_LITE) @SAGA_LITE_REPLACE@[[ SAGA_LITE_DECLARE_PACKAGE(@PACKAGE_NAME@); ]] #endif // table of packages to link statically static_package_load_data_type static_package_load_data[] = { #if defined(BUILD_SAGA_LITE) @SAGA_LITE_REPLACE@[[ SAGA_LITE_DEFINE_PACKAGE(@PACKAGE_NAME@), ]] #endif { NULL, NULL } }; /////////////////////////////////////////////////////////////////////////////// // enable auto-linking on supported platforms #if defined(BOOST_WINDOWS) && defined(BUILD_SAGA_LITE) // auto-link adaptors @SAGA_LITE_REPLACE@[[ #define SAGA_AUTOLINK_LIB_NAME "@ADAPTOR_NAME@" #include ]] // auto-link packages @SAGA_LITE_REPLACE@[[ #define SAGA_AUTOLINK_LIB_NAME "@PACKAGE_NAME@" #include ]] #endif #endif