#include <kwsys/DynamicLoader.hxx>

#include <example.h>

#include <example_exe.h>

#include <iostream>
#include <string>

#include <stdio.h>

// Implement the ABI used by plugins.
extern "C" int example_exe_function()
{
  std::cout << "hello" << std::endl;
  return 123;
}

#ifdef CMAKE_INTDIR
#  define CONFIG_DIR "/" CMAKE_INTDIR
#else
#  define CONFIG_DIR ""
#endif

int main()
{
  std::string libName = EXAMPLE_EXE_PLUGIN_DIR CONFIG_DIR "/";
  libName += kwsys::DynamicLoader::LibPrefix();
  libName += "example_mod_1";
  libName += kwsys::DynamicLoader::LibExtension();
  kwsys::DynamicLoader::LibraryHandle handle =
    kwsys::DynamicLoader::OpenLibrary(libName.c_str());
  if (!handle) {
    // Leave the .c_str() on this one.  It is needed on OpenWatcom.
    std::cerr << "Could not open plugin \"" << libName.c_str() << "\"!"
              << std::endl;
    return 1;
  }
  kwsys::DynamicLoader::SymbolPointer sym =
    kwsys::DynamicLoader::GetSymbolAddress(handle, "example_mod_1_function");
  if (!sym) {
    std::cerr << "Could not get plugin symbol \"example_mod_1_function\"!"
              << std::endl;
    return 1;
  }
#ifdef __WATCOMC__
  int(__cdecl * f)(int) = (int(__cdecl*)(int))(sym);
#else
  int (*f)(int) = reinterpret_cast<int (*)(int)>(sym);
#endif
  if (f(456) != (123 + 456)) {
    std::cerr << "Incorrect return value from plugin!" << std::endl;
    return 1;
  }
  kwsys::DynamicLoader::CloseLibrary(handle);
  return 0;
}
