module onelib;

import ssll;

mixin SSLL_INIT;

private LibHandler lib;

version (Posix)   private enum libNames = ["libgtk-3.so", "libgtk-3.so.0"];
version (Windows) private enum libNames = ["gtk-3.dll"];

bool loadOneLib()
{
    import core.stdc.stdio;
    import core.stdc.string : memcpy;

    char[256] buf;

    foreach (name; libNames)
    {
        memcpy(buf.ptr, name.ptr, name.length);
        buf[name.length] = 0;
        printf("try load '%s'... ", buf.ptr);

        lib = loadLibrary(name);
        if (lib is null) printf("fail\n");
        else { printf("success\n"); break; }
    }

    loadApiSymbols(LoadApiSymbolsVerbose.message);

    return lib !is null;
}

void unloadOneLib() { unloadLibrary(lib); }

@api // "lib" is default parameter
{
    int gtk_get_major_version() { mixin(SSLL_CALL); }
    int gtk_get_minor_version() { mixin(SSLL_CALL); }
    int gtk_get_micro_version() { mixin(SSLL_CALL); }
}