fish-shell/build_tools/find_globals.fish
2018-09-29 01:11:15 -04:00

43 lines
1.2 KiB
Fish
Executable file

#!/usr/bin/env fish
# Finds global variables by parsing the output of 'nm'
# for object files in this directory.
# This was written for macOS nm.
set total_globals 0
set boring_files \
fish_key_reader.cpp.o \
fish_tests.cpp.o \
fish_indent.cpp.o \
set whitelist \
termsize_lock termsize \
initial_pid initial_fg_process_group \
_debug_level \
sitm_esc ritm_esc dim_esc \
iothread_init()::inited \
s_result_queue s_main_thread_request_queue s_read_pipe s_write_pipe \
s_main_thread_performer_lock s_main_thread_performer_cond s_main_thread_request_q_lock \
locked_consumed_job_ids \
env_initialized \
for file in ./**.o
set filename (basename $file)
# Skip boring files.
contains $filename $boring_files
and continue
for line in (nm -p -P -U $file)
# Look in data (dD) and bss (bB) segments.
set matches (string match --regex '^([^ ]+) ([dDbB])' -- $line)
or continue
set symname (echo $matches[2] | c++filt)
contains $symname $whitelist
and continue
echo $filename $symname $matches[3]
set total_globals (math $total_globals + 1)
end
end
echo "Total: $total_globals"