def write()

in build/generator/gen_cmake.py [0:0]


  def write(self):
    targets = []

    for target in self.get_install_sources():
      group = None
      enable_condition = []
      enable_condition += get_target_conditions(target)
      build_type = None
      swig_lang = None
      is_apache_mod = None

      if isinstance(target, gen_base.TargetScript):
        # there is nothing to build
        continue
      elif isinstance(target, gen_base.TargetRaModule):
        group = "ra-libs"
        build_type = "${SVN_RA_BUILD_TYPE}"
      elif isinstance(target, gen_base.TargetFsModule):
        group = "fs-libs"
        build_type = "${SVN_FS_BUILD_TYPE}"
      elif isinstance(target, gen_base.TargetApacheMod):
        is_apache_mod = True
      elif isinstance(target, gen_base.TargetSWIG):
        swig_lang = target.lang
      elif isinstance(target, gen_base.TargetLib):
        if target.msvc_static:
          build_type = "STATIC"

      msvc_export = []
      if isinstance(target, gen_base.TargetLib):
        for export in target.msvc_export:
          msvc_export.append("subversion/include/" + export)

      sources = []
      libs = []

      for dep in self.get_dependencies(target.name):
        enable_condition += get_target_conditions(dep)

        if isinstance(dep, gen_base.TargetSWIG):
          # Just ignore them
          pass
        elif isinstance(dep, gen_base.TargetLinked):
          if dep.external_lib:
            if dep.name == "ra-libs":
              libs.append("ra-libs")
            elif dep.name == "fs-libs":
              libs.append("fs-libs")
            elif dep.name in ["apriconv",
                              "apr_memcache",
                              "magic",
                              "macos-plist",
                              "macos-keychain",
                              "sasl"]:
              # These dependencies are currently ignored
              # TODO:
              pass
            else:
              libs.append("external-" + dep.name)
          else:
            libs.append(dep.name)
        elif isinstance(dep, gen_base.ObjectFile):
          for source in self.graph.get_sources(gen_base.DT_OBJECT, dep,
                                               gen_base.SourceFile):
            sources.append(source.filename)

          for obj in self.graph.get_sources(gen_base.DT_OBJECT, dep,
                                            gen_base.ObjectFile):
            for source in self.graph.get_sources(gen_base.DT_SWIG_C, obj,
                                                 gen_base.SWIGSource):
              sources.append(source.filename)

      target_type = get_target_type(target)

      if target_type in ["exe", "lib", "test", "swig"]:
        msvc_libs = []
        msvc_objects = []

        for lib in target.msvc_libs:
          if lib.endswith(".obj"):
            msvc_objects.append(lib)
          else:
            msvc_libs.append(lib)

        if isinstance(target, gen_base.TargetLib) or target.install == "bin":
          install_target = True
        else:
          install_target = False

        enable_condition = list(set(enable_condition))
        if len(enable_condition) > 0:
          enable_condition_str = " AND ".join(enable_condition)
        else:
          enable_condition_str = "TRUE"

        new_target = _eztdata(
          name = target.name,
          output_name = get_output_name(target),
          type = target_type,
          sources = sources,
          libs = libs,
          msvc_libs = msvc_libs,
          msvc_objects = msvc_objects,
          msvc_export = msvc_export,
          enable_condition = enable_condition_str,
          group = group,
          build_type = build_type,
          description = target.desc,
          srcdir = target.path,
          install_target = ezt.boolean(install_target),
          swig_lang = swig_lang,
          is_apache_mod = is_apache_mod,
          namespace = os.path.basename(target.path),
        )

        targets.append(new_target)

    data = _eztdata(
      targets = targets,
    )
    output_file = open(os.path.join('build', 'cmake', 'targets.cmake'), 'w')

    template = ezt.Template(compress_whitespace=False)
    template.parse_file(os.path.join('build', 'generator', 'templates',
                                     'targets.cmake.ezt'))
    template.generate(output_file, data)