Skip to content

Commit 4ceb644

Browse files
artikzstefano-maggiolo
authored andcommitted
Use source and object files from managers file list when compiling solution
1 parent 612b766 commit 4ceb644

3 files changed

Lines changed: 26 additions & 4 deletions

File tree

cms/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"LANGUAGE_NAMES", "LANGUAGES", "DEFAULT_LANGUAGES",
3939
"SOURCE_EXT_TO_LANGUAGE_MAP",
4040
"LANGUAGE_TO_SOURCE_EXT_MAP", "LANGUAGE_TO_HEADER_EXT_MAP",
41+
"LANGUAGE_TO_OBJ_EXT_MAP",
4142
"SCORE_MODE_IOI_MAX", "SCORE_MODE_IOI_MAX_TOKENED_LAST",
4243
# log
4344
# Nothing intended for external use, no need to advertise anything.
@@ -103,6 +104,11 @@
103104
LANG_CPP: ".h",
104105
LANG_PASCAL: "lib.pas",
105106
}
107+
LANGUAGE_TO_OBJ_EXT_MAP = {
108+
LANG_C: ".o",
109+
LANG_CPP: ".o",
110+
LANG_PASCAL: ".o",
111+
}
106112

107113
# Task score modes.
108114

cms/grading/tasktypes/Batch.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import logging
2828

2929
from cms import LANGUAGES, LANGUAGE_TO_SOURCE_EXT_MAP, \
30-
LANGUAGE_TO_HEADER_EXT_MAP
30+
LANGUAGE_TO_HEADER_EXT_MAP, LANGUAGE_TO_OBJ_EXT_MAP
3131
from cms.grading import get_compilation_commands, get_evaluation_commands, \
3232
compilation_step, evaluation_step, human_evaluation_message, \
3333
is_evaluation_passed, extract_outcome_and_text, white_diff_step
@@ -171,12 +171,20 @@ def compile(self, job, file_cacher):
171171
files_to_get["grader%s" % source_ext] = \
172172
job.managers["grader%s" % source_ext].digest
173173

174-
# Also copy all *.h and *lib.pas graders
174+
# Also copy all managers that might be useful during compilation.
175175
for filename in job.managers.iterkeys():
176176
if any(filename.endswith(header)
177177
for header in LANGUAGE_TO_HEADER_EXT_MAP.itervalues()):
178178
files_to_get[filename] = \
179179
job.managers[filename].digest
180+
elif any(filename.endswith(source)
181+
for source in LANGUAGE_TO_SOURCE_EXT_MAP.itervalues()):
182+
files_to_get[filename] = \
183+
job.managers[filename].digest
184+
elif any(filename.endswith(obj)
185+
for obj in LANGUAGE_TO_OBJ_EXT_MAP.itervalues()):
186+
files_to_get[filename] = \
187+
job.managers[filename].digest
180188

181189
for filename, digest in files_to_get.iteritems():
182190
sandbox.create_file_from_storage(filename, digest)

cms/grading/tasktypes/Communication.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import tempfile
3030

3131
from cms import LANGUAGES, LANGUAGE_TO_SOURCE_EXT_MAP, \
32-
LANGUAGE_TO_HEADER_EXT_MAP, config
32+
LANGUAGE_TO_HEADER_EXT_MAP, LANGUAGE_TO_OBJ_EXT_MAP, config
3333
from cms.grading.Sandbox import wait_without_std
3434
from cms.grading import get_compilation_commands, compilation_step, \
3535
human_evaluation_message, is_evaluation_passed, \
@@ -128,12 +128,20 @@ def compile(self, job, file_cacher):
128128
files_to_get[source_filenames[-1]] = \
129129
job.files[format_filename].digest
130130

131-
# Also copy all *.h and *lib.pas graders
131+
# Also copy all managers that might be useful during compilation.
132132
for filename in job.managers.iterkeys():
133133
if any(filename.endswith(header)
134134
for header in LANGUAGE_TO_HEADER_EXT_MAP.itervalues()):
135135
files_to_get[filename] = \
136136
job.managers[filename].digest
137+
elif any(filename.endswith(source)
138+
for source in LANGUAGE_TO_SOURCE_EXT_MAP.itervalues()):
139+
files_to_get[filename] = \
140+
job.managers[filename].digest
141+
elif any(filename.endswith(obj)
142+
for obj in LANGUAGE_TO_OBJ_EXT_MAP.itervalues()):
143+
files_to_get[filename] = \
144+
job.managers[filename].digest
137145

138146
for filename, digest in files_to_get.iteritems():
139147
sandbox.create_file_from_storage(filename, digest)

0 commit comments

Comments
 (0)