text: #!/usr/bin/env python
  import os
  import subprocess
  import sys
  import argparse
  
  
  parser = argparse.ArgumentParser()
  parser.add_argument("-d", "--debug-msg", default=False, action="store_const", const=True, help="Build debug messages")
  args = parser.parse_args()
  
  CWD = os.path.dirname(os.path.realpath(__file__))
  ROOT_DIR = os.path.abspath(os.path.join(CWD, "..", "..", "..", ".."))
  TREZOR_COMMON = os.path.join(ROOT_DIR, "external", "trezor-common")
  TREZOR_MESSAGES = os.path.join(CWD, "..", "messages")
  
  # check for existence of the submodule directory
  common_defs = os.path.join(TREZOR_COMMON, "defs")
  if not os.path.exists(common_defs):
      raise ValueError(
          "trezor-common submodule seems to be missing.\n"
          + 'Use "git submodule update --init --recursive" to retrieve it.'
      )
  
  # regenerate messages
  try:
      selected = [
          "messages.proto",
          "messages-common.proto",
          "messages-management.proto",
          "messages-solidus.proto",
      ]
  
      if args.debug_msg:
          selected += ["messages-debug.proto"]
  
      proto_srcs = [os.path.join(TREZOR_COMMON, "protob", x) for x in selected]
      exec_args = [
          sys.executable,
          os.path.join(CWD, "pb2cpp.py"),
          "-o",
          TREZOR_MESSAGES,
      ] + proto_srcs
  
      subprocess.check_call(exec_args)
  
  except Exception as e:
      raise
  