Description:
change compile to remove package from java change box command for run script
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r167:9db5952d7bb1 - - 2 files changed: 10 inserted, 3 deleted

@@ -87,53 +87,60
87 87 params[:prog_lang] = 'c++'
88 88 end
89 89
90 90 # Compile.
91 91 case params[:prog_lang]
92 92
93 93 when "c"
94 94 command = "#{C_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{C_OPTIONS} 2> #{params[:message_file]}"
95 95 system(command)
96 96
97 97 when "c++"
98 98 command = "#{CPLUSPLUS_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{CPLUSPLUS_OPTIONS} 2> #{params[:message_file]}"
99 99 system(command)
100 100
101 101 when "pas"
102 102 command = "#{PASCAL_COMPILER} #{params[:source_file]} -ooutpas #{PASCAL_OPTIONS} > #{params[:message_file]}"
103 103 system(command)
104 104 FileUtils.mv("output", params[:output_file])
105 105
106 106 when "java"
107 107 #rename the file to the public class name
108 108
109 109 #get the class name
110 110 classname = 'DUMMY'
111 + source = Array.new
111 112 File.foreach(params[:source_file]) do |line|
112 113 md = /\s*public\s*class\s*(\w*)/.match(line)
113 114 classname=md[1] if md
115 + source << line unless line =~ /\s*package\s*\w+\s*\;/
114 116 end
115 - system("cp #{params[:source_file]} #{classname}.java")
117 + File.open("#{classname}.java","w") do |file|
118 + source.each do |s|
119 + file.puts s
120 + end
121 + end
122 + #system("cp #{params[:source_file]} #{classname}.java")
116 123 command = "#{JAVA_COMPILER} #{classname}.java 2> #{params[:message_file]}"
117 124 system(command)
118 125 if File.exists?(classname + ".class")
119 126 File.open(params[:output_file],"w") {|file| file.write("#{classname}")}
120 127 end
121 128 if classname == 'DUMMY'
122 129 File.open(params[:message_file],"w") {|file| file.write("Cannot find any public class in the source code\n")}
123 130 end
124 131
125 132 when "ruby"
126 133 command = "#{RUBY_INTERPRETER} -c #{params[:source_file]} 2> #{params[:message_file]}"
127 134 if system(command)
128 135 File.open(params[:output_file],"w") do |out_file|
129 136 out_file.puts "#!#{RUBY_INTERPRETER}"
130 137 File.open(params[:source_file],"r").each do |line|
131 138 out_file.print line
132 139 end
133 140 end
134 141 File.chmod(0755, params[:output_file])
135 142 end
136 143
137 144 when "python"
138 145 command = "#{PYTHON_CHECKER} #{params[:source_file]} > #{params[:message_file]}"
139 146 if system(command)
@@ -70,50 +70,50
70 70 #####################################
71 71
72 72 time_limit = problem.get_time_limit test_num
73 73 mem_limit = problem.get_mem_limit(test_num) * 1024
74 74
75 75 # Copy the input file.
76 76 #`cp #{problem_home}/test_cases/#{test_num}/#{input_file_name} .`
77 77
78 78 # check if box is there, if not, compile it!
79 79 if !File.exists?("#{problem_home}/script/box")
80 80 log "WARNING: Compiling box: to increase efficiency, it should be compile manually"
81 81 compile_box("#{problem_home}/script/box.cc",
82 82 "#{problem_home}/script/box")
83 83 end
84 84
85 85 # Hide PROBLEM_HOME
86 86 ENV['PROBLEM_HOME'] = nil
87 87 ENV['SOURCE_NAME'] = nil
88 88
89 89 # Run the program.
90 90 #run_command = "/usr/bin/time -f \"#{time_output_format}\" 2>run_result #{problem_home}/script/box_new -a 2 -f -t #{time_limit} -m #{mem_limit} -i #{input_file_name} -o output.txt #{program_name}"
91 91 #
92 92
93 93 JAVA_OPTION = "-s set_robust_list -s futex -s clone -s getppid -s clone -s wait4 -p /usr/bin/ -p ./"
94 - RUBY_OPTION = "-p /usr/lib64/ -p /lib64/ -p /dev/urandom -p #{sandbox_dir}/#{program_name} -s set_robust_list -s sched_getaffinity -s clock_gettime -s sigaltstack -s pipe2 -s clone -s futex -s openat"
95 - PYTHON_OPTION = "-p /usr/lib64/ -p /lib64/ -p /usr/bin/ -p /usr/local/lib64/ -p /usr/local/lib/ -p #{sandbox_dir}/#{program_name} -p ./#{program_name} -p #{sandbox_dir}/#{source_name} -s set_robust_list -s openat -s recvmsg -s connect -s socket -s sendto -E PYTHONNOUSERSITE=yes"
94 + RUBY_OPTION = "-p /usr/lib64/ -p /usr/local/lib/ -p /lib64/ -p /dev/urandom -p #{sandbox_dir}/#{program_name} -p #{sandbox_dir}/ -s set_robust_list -s sched_getaffinity -s clock_gettime -s sigaltstack -s pipe2 -s clone -s futex -s openat -s pipe"
95 + PYTHON_OPTION = "-p /usr/lib64/ -p /lib64/ -p /usr/bin/ -p /usr/local/lib64/ -p /usr/local/lib/ -p #{sandbox_dir}/#{program_name} -p ./#{program_name} -p #{sandbox_dir}/#{source_name} -s set_robust_list -s openat -s recvmsg -s connect -s socket -s sendto -s futex -E PYTHONNOUSERSITE=yes"
96 96
97 97 case language
98 98 when "java"
99 99 # for java, extract the classname
100 100 # wne have to add additional systemcall and we don't check the mem limit (dunno how to fix...)
101 101 classname = 'DUMMY'
102 102 File.open(program_name,"r").each do |line|
103 103 classname = line
104 104 end
105 105 #for java, we cannot really check the memory limit...
106 106 run_command = "#{problem_home}/script/box -a 3 -f -T -t #{time_limit} #{JAVA_OPTION} -i #{input_file_name} -o output.txt /usr/bin/java #{classname} 2>run_result"
107 107 when "ruby"
108 108 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} #{RUBY_OPTION} -i #{input_file_name} -o output.txt /usr/bin/ruby #{program_name} 2>run_result"
109 109 when "python"
110 110 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} #{PYTHON_OPTION} -i #{input_file_name} -o output.txt /usr/bin/python #{program_name} 2>run_result"
111 111 else # for c++, pascal, we do the normal checking
112 112 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} -i #{input_file_name} -o output.txt #{program_name} 2>run_result"
113 113 end
114 114
115 115
116 116 log "Running test #{test_num}..."
117 117 log run_command
118 118 log
119 119 system(run_command)
You need to be logged in to leave comments. Login now