⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gen_make.py

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 PY
📖 第 1 页 / 共 2 页
字号:
## gen_make.py -- generate makefiles and dependencies#import osimport sysimport stringimport gen_baseimport generator.swig.header_wrappersimport generator.swig.checkout_swig_headerimport generator.swig.external_runtimeimport generator.util.executable_exec = generator.util.executablefrom gen_base import build_path_join, build_path_strip, build_path_splitfile, \      build_path_basename, build_path_dirname, build_path_retreat, uniquetry:  Trueexcept NameError:  True = 1  False = 0class Generator(gen_base.GeneratorBase):  _extension_map = {    ('exe', 'target'): '$(EXEEXT)',    ('exe', 'object'): '.o',    ('lib', 'target'): '.la',    ('lib', 'object'): '.lo',    }  def __init__(self, fname, verfname, options=None):    gen_base.GeneratorBase.__init__(self, fname, verfname, options)    self.section_counter = 0    self.assume_shared_libs = False    if ('--assume-shared-libs', '') in options:      self.assume_shared_libs = True  def begin_section(self, description):    self.section_counter = self.section_counter + 1    count = self.section_counter    self.ofile.write('\n########################################\n')    self.ofile.write('# Section %d: %s\n' % (count, description))    self.ofile.write('########################################\n\n')  def write(self):    self.ofile = open('build-outputs.mk', 'w')    self.ofile.write('# DO NOT EDIT -- AUTOMATICALLY GENERATED\n')    install_deps = self.graph.get_deps(gen_base.DT_INSTALL)    install_sources = self.graph.get_all_sources(gen_base.DT_INSTALL)    # ensure consistency between runs    install_deps.sort()    install_sources.sort(lambda s1, s2: cmp(s1.name, s2.name))    ########################################    self.begin_section('Global make variables')        for target in install_sources:      if isinstance(target, gen_base.TargetRaModule) or \         isinstance(target, gen_base.TargetFsModule):        # name of the module: strip 'libsvn_' and upper-case it        name = string.upper(target.name[7:])        # construct a list of the other .la libs to link against        retreat = build_path_retreat(target.path)        deps = [ target.filename ]        link = [ build_path_join(retreat, target.filename) ]        for source in self.graph.get_sources(gen_base.DT_LINK, target.name):          if not isinstance(source, gen_base.TargetLib) or source.external_lib:            continue          deps.append(source.filename)          link.append(build_path_join(retreat, source.filename))        self.ofile.write('%s_DEPS = %s\n'                         '%s_LINK = %s\n\n' % (name, string.join(deps, ' '),                                               name, string.join(link, ' ')))    # write a list of directories in which things are built    #   get all the test scripts' directories    script_dirs = map(build_path_dirname, self.scripts + self.bdb_scripts)    #   remove duplicate directories between targets and tests    build_dirs = unique(self.target_dirs + script_dirs + self.swig_dirs)    self.ofile.write('BUILD_DIRS = %s\n\n' % string.join(build_dirs))    # write lists of test files    # deps = all, progs = not including those marked "testing = skip"    self.ofile.write('BDB_TEST_DEPS = %s\n\n' %                     string.join(self.bdb_test_deps + self.bdb_scripts))    self.ofile.write('BDB_TEST_PROGRAMS = %s\n\n' %                     string.join(self.bdb_test_progs + self.bdb_scripts))    self.ofile.write('TEST_DEPS = %s\n\n' %                     string.join(self.test_deps + self.scripts))    self.ofile.write('TEST_PROGRAMS = %s\n\n' %                     string.join(self.test_progs + self.scripts))    # write list of all manpages    self.ofile.write('MANPAGES = %s\n\n' % string.join(self.manpages))    # write a list of files to remove during "make clean"    cfiles = [ ]    for target in install_sources:      # .la files are handled by the standard 'clean' rule; clean all the      # other targets      if not isinstance(target, gen_base.TargetScript) \         and not isinstance(target, gen_base.TargetProject) \         and not isinstance(target, gen_base.TargetI18N) \         and not isinstance(target, gen_base.TargetJava) \         and not target.external_lib \         and target.filename[-3:] != '.la':        cfiles.append(target.filename)    cfiles.sort()    self.ofile.write('CLEAN_FILES = %s\n\n' % string.join(cfiles))    # this is here because autogen-standalone needs it too    self.ofile.write('SWIG_INCLUDES = -I$(abs_srcdir)/subversion/include \\\n'        '  -I$(abs_srcdir)/subversion/bindings/swig \\\n'        '  -I$(abs_srcdir)/subversion/bindings/swig/include \\\n'        '  -I$(abs_srcdir)/subversion/bindings/swig/proxy \\\n'        '  -I$(abs_builddir)/subversion/bindings/swig/proxy \\\n'        '  $(SVN_APR_INCLUDES) $(SVN_APRUTIL_INCLUDES)\n\n')    if self.release_mode:      self.ofile.write('RELEASE_MODE = 1\n\n')        ########################################    self.begin_section('SWIG headers (wrappers and external runtimes)')    if not self.release_mode:      for swig in (generator.swig.header_wrappers,                   generator.swig.checkout_swig_header,                   generator.swig.external_runtime):        gen = swig.Generator(self.conf, "swig")        gen.write_makefile_rules(self.ofile)    ########################################    self.begin_section('SWIG autogen rules')    # write dependencies and build rules for generated .c files    swig_c_deps = self.graph.get_deps(gen_base.DT_SWIG_C)    swig_c_deps.sort(lambda (t1, s1), (t2, s2): cmp(t1.filename, t2.filename))    swig_lang_deps = {}    for lang in self.swig.langs:      swig_lang_deps[lang] = []          short = self.swig.short    for objname, sources in swig_c_deps:      lang = objname.lang      swig_lang_deps[lang].append(str(objname))        for lang in self.swig.langs:      lang_deps = string.join(swig_lang_deps[lang])      self.ofile.write(        'autogen-swig-%s: %s\n' % (short[lang], lang_deps) +        'autogen-swig: autogen-swig-%s\n' % short[lang] +        '\n')    self.ofile.write('\n')        ########################################    self.begin_section('Rules to build SWIG .c files from .i files')    for objname, sources in swig_c_deps:      deps = string.join(map(str, sources))      source = str(sources[0])      source_dir = build_path_dirname(source)      opts = self.swig.opts[objname.lang]      if not self.release_mode:        self.ofile.write('%s: %s\n' % (objname, deps) +          '\t$(SWIG) $(SWIG_INCLUDES) %s ' % opts +          '-o $@ $(top_srcdir)/%s\n' % source        )    self.ofile.write('\n')    ########################################    self.begin_section('Individual target build rules')    for target_ob in install_sources:      if isinstance(target_ob, gen_base.TargetScript):        # there is nothing to build        continue      target = target_ob.name      if isinstance(target_ob, gen_base.TargetJava):        path = target_ob.output_dir      else:        path = target_ob.path      retreat = build_path_retreat(path)      # get the source items (.o and .la) for the link unit      objects = [ ]      object_srcs = [ ]      headers = [ ]      header_classes = [ ]      header_class_filenames = [ ]      deps = [ ]      libs = [ ]      for link_dep in self.graph.get_sources(gen_base.DT_LINK, target_ob.name):        if isinstance(link_dep, gen_base.TargetJava):          deps.append(link_dep.name)        elif isinstance(link_dep, gen_base.TargetLinked):          if link_dep.external_lib:            libs.append(link_dep.external_lib)          elif link_dep.external_project:            # FIXME: This is a temporary workaround to fix build breakage            # expeditiously.  It is of questionable validity for a build            # node to have external_project but not have external_lib.            pass          else:            # append the output of the target to our stated dependencies            if not self.assume_shared_libs:              deps.append(link_dep.filename)            # link against the library            libs.append(build_path_join(retreat, link_dep.filename))        elif isinstance(link_dep, gen_base.ObjectFile):          # link in the object file          objects.append(link_dep.filename)          for dep in self.graph.get_sources(gen_base.DT_OBJECT, link_dep, gen_base.SourceFile):            object_srcs.append(              build_path_join('$(abs_srcdir)', dep.filename))        elif isinstance(link_dep, gen_base.HeaderFile):          # link in the header file          # N.B. that filename_win contains the '_'-escaped class name          headers.append(link_dep.filename_win)          header_classes.append(link_dep.classname)          for dep in self.graph.get_sources(gen_base.DT_OBJECT, link_dep, gen_base.ObjectFile):            header_class_filenames.append(dep.filename)        else:          ### we don't know what this is, so we don't know what to do with it          raise UnknownDependency      for nonlib in self.graph.get_sources(gen_base.DT_NONLIB, target_ob.name):        if isinstance(nonlib, gen_base.TargetLinked):          if not nonlib.external_lib:            deps.append(nonlib.filename)      targ_varname = string.replace(target, '-', '_')      objnames = string.join(build_path_strip(path, objects))      # Output value of path variable      self.ofile.write('%s_PATH = %s\n' % (targ_varname, path))            # Add additional install dependencies if necessary      if target_ob.add_install_deps:        self.ofile.write('install-%s: %s\n'          % (target_ob.install, target_ob.add_install_deps))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -