You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							4.7 KiB
						
					
					
				
								import subprocess
							 | 
						|
								import os
							 | 
						|
								import shutil
							 | 
						|
								import time
							 | 
						|
								import math
							 | 
						|
								import sys
							 | 
						|
								
							 | 
						|
								logfileDir = "test_build_configurations_logs"
							 | 
						|
								pathToConfigFile = ""
							 | 
						|
								globalCmakeArguments = ""
							 | 
						|
								globalMakeArguments = ""
							 | 
						|
								
							 | 
						|
								if len(sys.argv) == 1 or len(sys.argv) > 5:
							 | 
						|
									print "Usage: " + sys.argv[0] + "/path/to/storm /path/to/configurations.txt \"optional make arguments\" \"optional cmake arguments\""
							 | 
						|
									print "Example: " + sys.argv[0] + " ~/storm test_build_configurations.txt \"-j 48 -k\" \"-DZ3_ROOT=/path/to/z3/\""
							 | 
						|
									sys.exit(0)
							 | 
						|
								
							 | 
						|
								pathToStorm = sys.argv[1]
							 | 
						|
								pathToConfigFile = sys.argv[2]
							 | 
						|
								
							 | 
						|
								if len(sys.argv) > 3:
							 | 
						|
									globalMakeArguments = sys.argv[3]
							 | 
						|
									print globalMakeArguments
							 | 
						|
								if len(sys.argv) > 4:
							 | 
						|
									globalCmakeArguments = sys.argv[4]
							 | 
						|
									print globalCmakeArguments
							 | 
						|
								
							 | 
						|
								# create directory for log files
							 | 
						|
								if not os.path.exists(logfileDir):
							 | 
						|
								    os.makedirs(logfileDir)
							 | 
						|
								
							 | 
						|
								unsuccessfulConfigs = ""
							 | 
						|
								globalStartTime = time.time()
							 | 
						|
								
							 | 
						|
								with open(pathToConfigFile) as configfile:
							 | 
						|
								    localStartTime = time.time()
							 | 
						|
								    configId=0
							 | 
						|
								    for localCmakeArguments in configfile:
							 | 
						|
								        
							 | 
						|
								        cmakeArguments = globalCmakeArguments + " " + localCmakeArguments.strip('\n')
							 | 
						|
								        buildDir = os.path.join(pathToStorm, "build{}".format(configId))
							 | 
						|
								        logfilename = os.path.join(logfileDir, "build{}".format(configId) + "_" + time.strftime("%Y-%m-%d-%H-%M-%S") + ".log")
							 | 
						|
								        
							 | 
						|
								        
							 | 
						|
								        print "Building configuration {} with cmake options ".format(configId) + cmakeArguments
							 | 
						|
								        print "\tCreating log file " + logfilename + " ..."
							 | 
						|
								        with open(logfilename, "w") as logfile:
							 | 
						|
								            success=True
							 | 
						|
								            logfile.write("Log for test configuration " + cmakeArguments + "\n")
							 | 
						|
								                          
							 | 
						|
								            print "\tCreating build directory" + buildDir + " ..."
							 | 
						|
								            if os.path.exists(buildDir):
							 | 
						|
								                print "\t\tRemoving existing directory " + buildDir
							 | 
						|
								                shutil.rmtree(buildDir, ignore_errors=True)
							 | 
						|
								            os.makedirs(buildDir)
							 | 
						|
								            logfile.write("Build directory is " + buildDir + "\n")
							 | 
						|
								            print "\t\tdone"
							 | 
						|
								            
							 | 
						|
								            if success:
							 | 
						|
								                print "\tInvoking cmake ..."
							 | 
						|
								                cmakeCommand = "cmake .. {}".format(cmakeArguments)
							 | 
						|
								                logfile.write ("\n\n CALLING CMAKE \n\n" + cmakeCommand + "\n")
							 | 
						|
								                try:
							 | 
						|
								                    cmakeOutput = subprocess.check_output("cd " + buildDir + "; " + cmakeCommand , shell=True,stderr=subprocess.STDOUT)
							 | 
						|
								                    print "\t\tdone"
							 | 
						|
								                    logfile.write(cmakeOutput)
							 | 
						|
								                except subprocess.CalledProcessError as e:
							 | 
						|
								                    success=False
							 | 
						|
								                    print "\t\tfail"
							 | 
						|
								                    print e.output
							 | 
						|
								                    logfile.write(e.output)
							 | 
						|
								                                
							 | 
						|
								            if success:
							 | 
						|
								                print "\tInvoking make ..."
							 | 
						|
								                makeCommand = "make {}".format(globalMakeArguments)
							 | 
						|
								                logfile.write ("\n\n CALLING MAKE \n\n" + makeCommand + "\n")
							 | 
						|
								                try:
							 | 
						|
								                    makeOutput = subprocess.check_output("cd " + buildDir + "; " + makeCommand , shell=True,stderr=subprocess.STDOUT)
							 | 
						|
								                    print "\t\tdone"
							 | 
						|
								                    logfile.write(makeOutput)
							 | 
						|
								                except subprocess.CalledProcessError as e:
							 | 
						|
								                    success=False
							 | 
						|
								                    print "\t\tfail"
							 | 
						|
								                    print e.output
							 | 
						|
								                    logfile.write(e.output)
							 | 
						|
								            
							 | 
						|
								            if success:
							 | 
						|
								                print "\tInvoking make check..."
							 | 
						|
								                makeCheckCommand = "make check"
							 | 
						|
								                logfile.write ("\n\n CALLING MAKE CHECK \n\n" + makeCheckCommand + "\n")
							 | 
						|
								                try:
							 | 
						|
								                    makeCheckOutput = subprocess.check_output("cd " + buildDir + "; " + makeCheckCommand , shell=True,stderr=subprocess.STDOUT)
							 | 
						|
								                    print "\t\tdone"
							 | 
						|
								                    logfile.write(makeCheckOutput)
							 | 
						|
								                except subprocess.CalledProcessError as e:
							 | 
						|
								                    success=False
							 | 
						|
								                    print "\t\tfail"
							 | 
						|
								                    print e.output
							 | 
						|
								                    logfile.write(e.output)
							 | 
						|
								                    
							 | 
						|
								            localEndTime = time.time()
							 | 
						|
								            if success:
							 | 
						|
								                print "\tConfiguration build and tested successfully within {} minutes.".format(int((localEndTime - localStartTime)/60))
							 | 
						|
								            else:
							 | 
						|
								                print "\tAn error occurred for this configuration."
							 | 
						|
								                unsuccessfulConfigs += buildDir + " with arguments " + cmakeArguments + "\n"
							 | 
						|
								
							 | 
						|
								            configId += 1
							 | 
						|
								globalEndTime = time.time()
							 | 
						|
								print "All tests completed after {} minutes.".format(int((globalEndTime - globalStartTime)/60))
							 | 
						|
								if unsuccessfulConfigs == "":
							 | 
						|
								    print "All configurations were build and tested successfully."
							 | 
						|
								else:
							 | 
						|
								    print "The following configurations failed: \n" + unsuccessfulConfigs
							 | 
						|
								    
							 | 
						|
								                
							 | 
						|
								
							 | 
						|
								
							 |