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