Mercury
Mercury

Reputation: 1965

accessing recources when compiling QT application with Bazel

I'm using Bazel to compile a Qt application (https://github.com/bbreslauer/qt-bazel-example) that is using shaders defined in a qrc file. When I'm trying to access the resource file, it is not available (as I did not connect the qrc file to the compilation). How can I define the qrc file content in the build?

UPDATE

following the response by @ypnos, I'm trying to add a macro to my qt.bzl file. I would like the macro to recieve a list of files as an argument, create the (temporary) qrc file, and run the rcc command. I am currently struggling with:

  1. running a python script in the bzl file is not as straightforward as I though. It cannot generate a file ("open" is undefined). Is it possible? if yes how (see example below)
  2. even with a given qrc file, I cant get the command to work, I guess i'm doing somthing wrong with the command line arguments but I cant find refrence/manual for that

this is what I got so far(my qt.bzl file)

...



def qt_resource(name,file_list, **kwargs):
## following doesnt work inside the bzl file:
  # fid = open('%s.qrc' % name, 'w')
  # fid.write("<RCC>\n")
  # fid.write("\t<qresource prefix=\"/%s\">\n" % name)
  # for x in file_list:
  #   fid.write("\t\t<file>%s</file>\n" % x)
  # fid.write("\t</qresource>\n")
  # fid.write("</RCC>\n")
  # fid.close()
  native.genrule(
      name = "%s_res" % name,
      outs = ["rcc_%s.cpp" % name],
      cmd =  "rcc %s.qrc -o $@/rcc_%s.cpp"%(name,name) ,

  )
  srcs = [":rcc_%s.cpp" % name]
  native.cc_library(
      name = name,
      srcs = srcs,
      hdrs = [],
      deps = [],
      **kwargs
  )

Upvotes: 2

Views: 318

Answers (1)

ypnos
ypnos

Reputation: 52377

It seems the bazel example that you are using does not come with support for qrc (it only does moc and ui files).1

QRC files need to be transformed into C++ sources using rcc and then compiled.2 The concept is similar to the one of .ui files which are converted to headers.

Maybe you can patch qt.bzl to add that functionality.

Upvotes: 1

Related Questions