73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/python
 | 
						|
 | 
						|
import getopt
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
LONG_OPTIONS = ["shard=", "shards="]
 | 
						|
BASE_COMMAND = "./configure --enable-internal-stats --enable-experimental"
 | 
						|
 | 
						|
def RunCommand(command):
 | 
						|
  run = subprocess.Popen(command, shell=True)
 | 
						|
  output = run.communicate()
 | 
						|
  if run.returncode:
 | 
						|
    print "Non-zero return code: " + str(run.returncode) + " => exiting!"
 | 
						|
    sys.exit(1)
 | 
						|
 | 
						|
def list_of_experiments():
 | 
						|
  experiments = []
 | 
						|
  configure_file = open("configure")
 | 
						|
  list_start = False
 | 
						|
  for line in configure_file.read().split("\n"):
 | 
						|
    if line == 'EXPERIMENT_LIST="':
 | 
						|
      list_start = True
 | 
						|
    elif line == '"':
 | 
						|
      list_start = False
 | 
						|
    elif list_start:
 | 
						|
      currently_broken = ["csm"]
 | 
						|
      experiment = line[4:]
 | 
						|
      if experiment not in currently_broken:
 | 
						|
        experiments.append(experiment)
 | 
						|
  return experiments
 | 
						|
 | 
						|
def main(argv):
 | 
						|
  # Parse arguments
 | 
						|
  options = {"--shard": 0, "--shards": 1}
 | 
						|
  if "--" in argv:
 | 
						|
    opt_end_index = argv.index("--")
 | 
						|
  else:
 | 
						|
    opt_end_index = len(argv)
 | 
						|
  try:
 | 
						|
    o, _ = getopt.getopt(argv[1:opt_end_index], None, LONG_OPTIONS)
 | 
						|
  except getopt.GetoptError, err:
 | 
						|
    print str(err)
 | 
						|
    print "Usage: %s [--shard=<n> --shards=<n>] -- [configure flag ...]"%argv[0]
 | 
						|
    sys.exit(2)
 | 
						|
 | 
						|
  options.update(o)
 | 
						|
  extra_args = argv[opt_end_index + 1:]
 | 
						|
 | 
						|
  # Shard experiment list
 | 
						|
  shard = int(options["--shard"])
 | 
						|
  shards = int(options["--shards"])
 | 
						|
  experiments = list_of_experiments()
 | 
						|
  base_command = " ".join([BASE_COMMAND] + extra_args)
 | 
						|
  configs = [base_command]
 | 
						|
  configs += ["%s --enable-%s" % (base_command, e) for e in experiments]
 | 
						|
  my_configs = zip(configs, range(len(configs)))
 | 
						|
  my_configs = filter(lambda x: x[1] % shards == shard, my_configs)
 | 
						|
  my_configs = [e[0] for e in my_configs]
 | 
						|
 | 
						|
  # Run configs for this shard
 | 
						|
  for config in my_configs:
 | 
						|
    test_build(config)
 | 
						|
 | 
						|
def test_build(configure_command):
 | 
						|
  print "\033[34m\033[47mTesting %s\033[0m" % (configure_command)
 | 
						|
  RunCommand(configure_command)
 | 
						|
  RunCommand("make clean")
 | 
						|
  RunCommand("make")
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
  main(sys.argv)
 |