DISTRHO Plugin Framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.7KB

  1. /*
  2. * DISTRHO Plugin Framework (DPF)
  3. * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any purpose with
  6. * or without fee is hereby granted, provided that the above copyright notice and this
  7. * permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  10. * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  11. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  13. * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #include <stdio.h>
  17. #include <string.h>
  18. #ifdef _WIN32
  19. #include <windows.h>
  20. #define TTL_GENERATOR_WINDOWS
  21. #else
  22. #include <dlfcn.h>
  23. #endif
  24. #ifndef nullptr
  25. #define nullptr (0)
  26. #endif
  27. typedef void (*TTL_Generator_Function)(const char* basename);
  28. int main(int argc, char* argv[])
  29. {
  30. if (argc != 2)
  31. {
  32. printf("usage: %s /path/to/plugin-DLL\n", argv[0]);
  33. return 1;
  34. }
  35. #ifdef TTL_GENERATOR_WINDOWS
  36. const HMODULE handle = LoadLibraryA(argv[1]);
  37. #else
  38. void* const handle = dlopen(argv[1], RTLD_LAZY);
  39. #endif
  40. if (! handle)
  41. {
  42. #ifdef TTL_GENERATOR_WINDOWS
  43. printf("Failed to open plugin DLL\n");
  44. #else
  45. printf("Failed to open plugin DLL, error was:\n%s\n", dlerror());
  46. #endif
  47. return 2;
  48. }
  49. #ifdef TTL_GENERATOR_WINDOWS
  50. const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl");
  51. #else
  52. const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl");
  53. #endif
  54. if (ttlFn != NULL)
  55. {
  56. char basename[strlen(argv[1])+1];
  57. #ifdef TTL_GENERATOR_WINDOWS
  58. char* base2 = strrchr(argv[1], '\\');
  59. #else
  60. char* base2 = strrchr(argv[1], '/');
  61. #endif
  62. if (base2 != NULL)
  63. {
  64. strcpy(basename, base2+1);
  65. basename[strrchr(base2, '.')-base2-1] = '\0';
  66. }
  67. else if (argv[1][0] == '.' && argv[1][1] == '/')
  68. {
  69. strcpy(basename, argv[1]+2);
  70. basename[strrchr(basename, '.')-basename] = '\0';
  71. }
  72. else
  73. {
  74. strcpy(basename, argv[1]);
  75. }
  76. printf("Generate ttl data for '%s', basename: '%s'\n", argv[1], basename);
  77. ttlFn(basename);
  78. }
  79. else
  80. printf("Failed to find 'lv2_generate_ttl' function\n");
  81. #ifdef TTL_GENERATOR_WINDOWS
  82. FreeLibrary(handle);
  83. #else
  84. dlclose(handle);
  85. #endif
  86. return 0;
  87. }