resources.prf 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. qtPrepareTool(QMAKE_RCC, rcc, _DEP)
  2. isEmpty(RCC_DIR):RCC_DIR = .
  3. isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc
  4. !contains(QMAKE_RESOURCE_FLAGS, -root):!isEmpty(QMAKE_RESOURCE_ROOT):QMAKE_RESOURCE_FLAGS += -root $$QMAKE_RESOURCE_ROOT
  5. !contains(QMAKE_RESOURCE_FLAGS, -name): QMAKE_RESOURCE_FLAGS += -name ${QMAKE_FILE_BASE}
  6. # http://www.w3.org/TR/xml/#syntax
  7. defineReplace(xml_escape) {
  8. 1 ~= s,&,&,
  9. 1 ~= s,\',',
  10. 1 ~= s,\",",
  11. 1 ~= s,<,&lt;,
  12. 1 ~= s,>,&gt;,
  13. return($$1)
  14. }
  15. RESOURCES += qmake_immediate
  16. for(resource, RESOURCES) {
  17. # Regular case of user qrc file
  18. contains(resource, ".*\.qrc$"): \
  19. next()
  20. # Fallback for stand-alone files/directories
  21. !defined($${resource}.files, var) {
  22. !equals(resource, qmake_immediate) {
  23. !exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \
  24. warning("Failure to find: $$resource")
  25. qmake_immediate.files += $$resource
  26. }
  27. RESOURCES -= $$resource
  28. next()
  29. }
  30. resource_file = $$RCC_DIR/qmake_$${resource}.qrc
  31. isEmpty(BUILDS)|build_pass {
  32. # Collection of files, generate qrc file
  33. prefix = $$eval($${resource}.prefix)
  34. isEmpty(prefix): \
  35. prefix = "/"
  36. resource_file_content = \
  37. "<!DOCTYPE RCC><RCC version=\"1.0\">" \
  38. "<qresource prefix=\"$$xml_escape($$prefix)\">"
  39. abs_base = $$absolute_path($$eval($${resource}.base), $$_PRO_FILE_PWD_)
  40. for(file, $${resource}.files) {
  41. abs_path = $$absolute_path($$file, $$_PRO_FILE_PWD_)
  42. files = $$files($$abs_path/*, true)
  43. isEmpty(files): \
  44. files = $$abs_path
  45. for (file, files) {
  46. exists($$file/*): next() # exclude directories
  47. alias = $$relative_path($$file, $$abs_base)
  48. resource_file_content += \
  49. "<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>"
  50. }
  51. }
  52. resource_file_content += \
  53. "</qresource>" \
  54. "</RCC>"
  55. !write_file($$OUT_PWD/$$resource_file, resource_file_content): \
  56. error("Aborting.")
  57. }
  58. RESOURCES -= $$resource
  59. RESOURCES += $$resource_file
  60. }
  61. rcc.input = RESOURCES
  62. rcc.name = RCC ${QMAKE_FILE_IN}
  63. rcc.depend_command = $$QMAKE_RCC_DEP -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN}
  64. rcc.CONFIG += add_inputs_as_makefile_deps
  65. !resources_big|ltcg|macx-xcode|contains(TEMPLATE, "vc.*") {
  66. rcc.output = $$RCC_DIR/$${first(QMAKE_MOD_RCC)}_${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
  67. rcc.commands = $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
  68. rcc.variable_out = SOURCES
  69. } else {
  70. isEmpty(RCC_CXX):RCC_CXX = $$QMAKE_CXX $(CXXFLAGS)
  71. RCC_OUT_BASE = $$RCC_DIR/$${first(QMAKE_MOD_RCC)}_${QMAKE_FILE_BASE}
  72. RCC_CPP = $$RCC_OUT_BASE$${first(QMAKE_EXT_CPP)}
  73. RCC_TMP = $${RCC_OUT_BASE}.tmp$${first(QMAKE_EXT_OBJ)}
  74. RCC_OBJ = $$RCC_OUT_BASE$${first(QMAKE_EXT_OBJ)}
  75. msvc: RCC_CXX_O_FLAG = "-Fo"
  76. else: RCC_CXX_O_FLAG = "-o "
  77. rcc.output = $$RCC_OBJ
  78. rcc.commands = \
  79. $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -pass 1 -o $$RCC_CPP && \
  80. $$RCC_CXX -c $$RCC_CPP $$RCC_CXX_O_FLAG$$RCC_TMP && \
  81. $$QMAKE_RCC $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -pass 2 -temp $$RCC_TMP -o ${QMAKE_FILE_OUT}
  82. rcc.clean += $$RCC_CPP $$RCC_TMP
  83. }
  84. rcc.depends += $$QMAKE_RCC_EXE
  85. silent:rcc.commands = @echo rcc ${QMAKE_FILE_IN} && $$rcc.commands
  86. else:rcc.commands ~= s/&&/$$escape_expand(\\n\\t)/g
  87. QMAKE_EXTRA_COMPILERS += rcc