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.

114 lines
3.4KB

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # DISTRHO Plugin Framework (DPF)
  4. # Copyright (C) 2012-2019 Filipe Coelho <falktx@falktx.com>
  5. #
  6. # Permission to use, copy, modify, and/or distribute this software for any purpose with
  7. # or without fee is hereby granted, provided that the above copyright notice and this
  8. # permission notice appear in all copies.
  9. #
  10. # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  11. # TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  12. # NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  13. # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  14. # IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  15. # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. import os, sys
  17. # -----------------------------------------------------
  18. def res2c(namespace, filenames):
  19. fdH = open("%s.hpp" % namespace, "w")
  20. fdH.write("/* (Auto-generated binary data file). */\n")
  21. fdH.write("\n")
  22. fdH.write("#ifndef BINARY_%s_HPP\n" % namespace.upper())
  23. fdH.write("#define BINARY_%s_HPP\n" % namespace.upper())
  24. fdH.write("\n")
  25. fdH.write("namespace %s\n" % namespace)
  26. fdH.write("{\n")
  27. fdC = open("%s.cpp" % namespace, "w")
  28. fdC.write("/* (Auto-generated binary data file). */\n")
  29. fdC.write("\n")
  30. fdC.write("#include \"%s.hpp\"\n" % namespace)
  31. fdC.write("\n")
  32. tempIndex = 1
  33. for filename in filenames:
  34. shortFilename = filename.rsplit(os.sep, 1)[-1].split(".", 1)[0]
  35. shortFilename = shortFilename.replace("-", "_")
  36. resData = open(filename, 'rb').read()
  37. print("Generating data for \"%s\"" % (filename))
  38. fdH.write(" extern const char* %sData;\n" % shortFilename)
  39. fdH.write(" const unsigned int %sDataSize = %i;\n" % (shortFilename, len(resData)))
  40. if tempIndex != len(filenames):
  41. fdH.write("\n")
  42. fdC.write("static const unsigned char temp_%s_%i[] = {\n" % (shortFilename, tempIndex))
  43. curColumn = 1
  44. fdC.write(" ")
  45. for data in resData:
  46. if curColumn == 0:
  47. fdC.write(" ")
  48. fdC.write(" %3u," % data)
  49. if curColumn > 20:
  50. fdC.write("\n ")
  51. curColumn = 1
  52. else:
  53. curColumn += 1
  54. fdC.write("};\n")
  55. fdC.write("const char* %s::%sData = (const char*)temp_%s_%i;\n" % (namespace, shortFilename, shortFilename, tempIndex))
  56. if tempIndex != len(filenames):
  57. fdC.write("\n")
  58. tempIndex += 1
  59. fdH.write("}\n")
  60. fdH.write("\n")
  61. fdH.write("#endif // BINARY_%s_HPP\n" % namespace.upper())
  62. fdH.write("\n")
  63. fdH.close()
  64. fdC.write("\n")
  65. fdC.close()
  66. # -----------------------------------------------------
  67. if __name__ == '__main__':
  68. if len(sys.argv) != 3:
  69. print("Usage: %s <namespace> <resource-folder>" % sys.argv[0])
  70. quit()
  71. namespace = sys.argv[1].replace("-","_")
  72. resFolder = sys.argv[2]
  73. if not os.path.exists(resFolder):
  74. print("Folder '%s' does not exist" % resFolder)
  75. quit()
  76. # find resource files
  77. resFiles = []
  78. for root, dirs, files in os.walk(resFolder):
  79. for name in files:
  80. resFiles.append(os.path.join(root, name))
  81. resFiles.sort()
  82. # create code now
  83. res2c(namespace, resFiles)