COMP1511UNSW / dcc

dcc - a C compiler which explains errors to novice programmers
GNU General Public License v3.0
152 stars 19 forks source link

building from fresh repository checkout produces broken compiler #68

Closed jashank closed 3 years ago

jashank commented 3 years ago

as reported by damo190 and spdskatr and others on CSESoc Discord, grabbing the dcc Git repository and running make(1) produces a dcc binary that seems to be broken.

:jashank@lisbon: make
rm -rf _build
mkdir -p _build/embedded_src
touch _build/embedded_src/__init__.py
echo 'VERSION = "'`git describe --tags`'"' >_build/version.py
for f in run_time_python/colors.py run_time_python/drive_gdb.py run_time_python/explain_output_difference.py run_time_python/start_gdb.py run_time_python/util.py run_time_python/watch_valgrind.py wrapper_c/dcc_check_output.c wrapper_c/dcc_dual_sanitizers.c wrapper_c/dcc_main.c wrapper_c/dcc_util.c; do ln -sf ../../$f _build/embedded_src; done
for f in compile_time_python/colors.py compile_time_python/compile.py compile_time_python/compiler_explanations.py compile_time_python/explain_compiler_output.py compile_time_python/help_cs50.py compile_time_python/util.py; do ln -sf ../$f _build; done
# --symlinks here breaks pkgutil.read_data in compile.py
cd _build; zip dcc.zip -9 -r *.py embedded_src
  adding: colors.py (deflated 55%)
  adding: compile.py (deflated 70%)
  adding: compiler_explanations.py (deflated 73%)
  adding: explain_compiler_output.py (deflated 68%)
  adding: help_cs50.py (deflated 79%)
  adding: util.py (deflated 14%)
  adding: version.py (stored 0%)
  adding: embedded_src/ (stored 0%)
  adding: embedded_src/dcc_main.c (deflated 72%)
  adding: embedded_src/drive_gdb.py (deflated 69%)
  adding: embedded_src/dcc_util.c (deflated 69%)
  adding: embedded_src/explain_output_difference.py (deflated 71%)
  adding: embedded_src/dcc_dual_sanitizers.c (deflated 78%)
  adding: embedded_src/__init__.py (stored 0%)
  adding: embedded_src/watch_valgrind.py (deflated 60%)
  adding: embedded_src/start_gdb.py (deflated 61%)
  adding: embedded_src/dcc_check_output.c (deflated 75%)
  adding: embedded_src/util.py (deflated 14%)
  adding: embedded_src/colors.py (deflated 55%)
echo '#!/usr/bin/env python3' >dcc
cat _build/dcc.zip >>dcc
chmod 755 dcc 
rm -rf _build

:jashank@lisbon: ./dcc
/usr/bin/python3: can't find '__main__' module in '/home/jashank/dcc/./dcc'

but interestingly this dcc is notionally the same version as is currently on CSE ... but that works:

:jashank@lisbon: scp cse:/usr/local/bin/dcc .
:jashank@lisbon: ./dcc
Usage: ./dcc [-fsanitize=sanitizer1,sanitizer2] [--leak-check] [clang-arguments] <c-files>
:jashank@lisbon: bsdtar xOf ./dcc version.py
VERSION = "2.7.2"

that dcc from CSE looks to only differ by the presence of __main__.py, whose contents are:

from compile import compile

if __name__ == '__main__':
    compile()

looks like this might have disappeared during a recent repo restructuring...?

andrew-taylor commented 3 years ago

yep correct fixed by eb60bd3 hopefully