/* * DISTRHO Plugin Framework (DPF) * Copyright (C) 2012-2016 Filipe Coelho * * Permission to use, copy, modify, and/or distribute this software for any purpose with * or without fee is hereby granted, provided that the above copyright notice and this * permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #ifdef _WIN32 #include #define TTL_GENERATOR_WINDOWS #else #include #endif #ifndef nullptr #define nullptr (0) #endif typedef void (*TTL_Generator_Function)(const char* basename); int main(int argc, char* argv[]) { if (argc != 2) { printf("usage: %s /path/to/plugin-DLL\n", argv[0]); return 1; } #ifdef TTL_GENERATOR_WINDOWS const HMODULE handle = LoadLibraryA(argv[1]); #else void* const handle = dlopen(argv[1], RTLD_LAZY); #endif if (! handle) { #ifdef TTL_GENERATOR_WINDOWS printf("Failed to open plugin DLL\n"); #else printf("Failed to open plugin DLL, error was:\n%s\n", dlerror()); #endif return 2; } #ifdef TTL_GENERATOR_WINDOWS const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl"); #else const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl"); #endif if (ttlFn != NULL) { char basename[strlen(argv[1])+1]; #ifdef TTL_GENERATOR_WINDOWS char* base2 = strrchr(argv[1], '\\'); #else char* base2 = strrchr(argv[1], '/'); #endif if (base2 != NULL) { strcpy(basename, base2+1); basename[strrchr(base2, '.')-base2-1] = '\0'; } else if (argv[1][0] == '.' && argv[1][1] == '/') { strcpy(basename, argv[1]+2); basename[strrchr(basename, '.')-basename] = '\0'; } else { strcpy(basename, argv[1]); } printf("Generate ttl data for '%s', basename: '%s'\n", argv[1], basename); ttlFn(basename); } else printf("Failed to find 'lv2_generate_ttl' function\n"); #ifdef TTL_GENERATOR_WINDOWS FreeLibrary(handle); #else dlclose(handle); #endif return 0; }