run

in scripts/extract_source.rb [68:152]


  def run
    files = Dir.glob(@basepath + 'src/backend/**/*.c') +
    Dir.glob(@basepath + 'src/common/**/*.c') +
    Dir.glob(@basepath + 'src/port/**/*.c') +
    Dir.glob(@basepath + 'src/timezone/**/*.c') +
    Dir.glob(@basepath + 'src/pl/plpgsql/src/*.c') +
    Dir.glob(@basepath + 'contrib/pgcrypto/*.c') -
    [ 
      @basepath + 'src/backend/libpq/be-secure-openssl.c', 
      @basepath + 'src/backend/utils/adt/levenshtein.c', 
      @basepath + 'src/backend/utils/adt/like_match.c', 
      @basepath + 'src/backend/utils/misc/guc-file.c', 
      @basepath + 'src/backend/utils/sort/qsort_tuple.c', 
      @basepath + 'src/backend/bootstrap/bootscanner.c', 
      @basepath + 'src/backend/regex/regc_color.c', 
      @basepath + 'src/backend/regex/regc_cvec.c', 
      @basepath + 'src/backend/regex/regc_lex.c', 
      @basepath + 'src/backend/regex/regc_pg_locale.c', 
      @basepath + 'src/backend/regex/regc_locale.c', 
      @basepath + 'src/backend/regex/regc_nfa.c', 
      @basepath + 'src/backend/regex/rege_dfa.c', 
      @basepath + 'src/backend/replication/repl_scanner.c', 
      @basepath + 'src/backend/replication/libpqwalreceiver/libpqwalreceiver.c',
      @basepath + 'src/backend/replication/syncrep_scanner.c',
      @basepath + 'src/backend/port/posix_sema.c', 
      @basepath + 'src/common/fe_memutils.c', 
      @basepath + 'src/common/restricted_token.c', 
      @basepath + 'src/common/unicode/norm_test.c', 
      @basepath + 'src/port/dirent.c', 
      @basepath + 'src/port/getaddrinfo.c', 
      @basepath + 'src/port/getrusage.c', 
      @basepath + 'src/port/gettimeofday.c', 
      @basepath + 'src/port/strerror.c', 
      @basepath + 'src/port/strerror.c', 
      @basepath + 'src/port/strlcat.c', 
      @basepath + 'src/port/strlcpy.c', 
      @basepath + 'src/port/unsetenv.c', 
      @basepath + 'src/port/win32error.c', 
      @basepath + 'src/port/win32env.c', 
      @basepath + 'src/port/win32security.c' 
    ] -
    Dir.glob(@basepath + 'src/backend/port/dynloader/*.c') -
    Dir.glob(@basepath + 'src/backend/port/win32/*.c') -
    Dir.glob(@basepath + 'src/backend/port/win32_*.c') -
    Dir.glob(@basepath + 'src/backend/snowball/**/*.c')

    

    files.each do |file|
      if files == [file]
        puts format('Analysing single file: %s', file)
        analysis = analyze_file(file)
        analysis_file = analysis.save
        puts format('Result: %s', analysis_file)
        exit 1
      end

      print '.'
      analysis = FileAnalysis.restore(file, @basepath) || analyze_file(file)
      analysis.save

      @file_analysis[file] = analysis

      analysis.symbol_to_file.each do |symbol, _|
        next if analysis.static_symbols.include?(symbol)
        if @global_method_to_base_filename[symbol] && !['main', 'Pg_magic_func', 'pg_open_tzfile', '_PG_init'].include?(symbol) && !@global_method_to_base_filename[symbol].end_with?('c')
          puts format('Error processing %s, symbol %s already defined by %s', file, symbol, @global_method_to_base_filename[symbol])
        end
        @global_method_to_base_filename[symbol] = file
      end

      analysis.file_to_symbol_positions.each do |file, method_and_pos|
        @file_to_method_and_pos[file] = method_and_pos
      end

      analysis.external_variables.each do |symbol|
        @external_variables << symbol
      end
    end

    

    puts "\nFinished parsing"
  end