diff --git a/setup.py b/setup.py index 5bd6c05..26af0f1 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,8 @@ temp_dir = tempfile.gettempdir() def _print_error(msg): - sys.stderr.write("\n\nERROR: " + msg + "\n\n\n") + sys.stderr.write("\n\n" + error_color_start + "ERROR: " + msg + color_end + " \n\n\n ") + sys.stderr.flush() def which(program): @@ -73,7 +74,7 @@ def deal_with_error_code(err_code, operation_name): if err_code != 0: _print_error("A non-zero error code was returned at operation: " + str(operation_name) + ". Code returned is: " + - str(err_code) + ". Exiting!\n") + str(err_code) + ". Exiting!") sys.exit(1) @@ -104,6 +105,7 @@ def clone_git_repository(dir, repos_link): print("Done cloning repository: " + repos_link) question_color_start = "\x1b[0;37;44m" +error_color_start = "\x1b[0;37;41m" color_end = "\x1b[0m" def ask_openblas_optimization_level(): @@ -118,7 +120,8 @@ def ask_openblas_optimization_level(): print("3) -Ofast") print("4) Keep the default") print("5) Skip compiling OpenBLAS and assume it exists in the system") - sys.stdout.write("Please enter the option number: ") + print(question_color_start + "Please enter the option number: " + color_end) + sys.stdout.flush() option_chosen = input() if option_chosen.replace(" ", "") == '1': return "-O2" @@ -131,7 +134,7 @@ def ask_openblas_optimization_level(): elif option_chosen.replace(" ", "") == '5': return "SKIPOPENBLAS" else: - raise IndexError("Error: An unknown option was entered") + raise IndexError(error_color_start + "Error: An unknown option was entered" + color_end) def ask_spintrum_optimization_level(): @@ -146,7 +149,8 @@ def ask_spintrum_optimization_level(): print("3) -O2") print("4) -O3") print("5) -Ofast") - sys.stdout.write("Please enter the option number: ") + print(question_color_start + "Please enter the option number: " + color_end) + sys.stdout.flush() option_chosen = input("") if option_chosen.replace(" ", "") == '1': return "-g" @@ -159,7 +163,7 @@ def ask_spintrum_optimization_level(): elif option_chosen.replace(" ", "") == '5': return "-Ofast" else: - raise IndexError("Error: An unknown option was entered") + raise IndexError(error_color_start + "Error: An unknown option was entered" + color_end) def recursive_glob(rootdir, pattern='*'): @@ -169,12 +173,52 @@ def recursive_glob(rootdir, pattern='*'): if fnmatch.fnmatch(filename, pattern)] return lst + +def get_openblas(): + openblas_dir = "3rdparty/OpenBLAS" + openblas_dir_install = "spintrum/OpenBLAS_install" + openblas_full_path = os.path.join(start_working_dir, openblas_dir) + openblas_full_path_install = os.path.join(start_working_dir, openblas_dir_install) + openblas_git = "https://github.com/xianyi/OpenBLAS.git" + + openblas_target_optimization = ask_openblas_optimization_level() + if openblas_target_optimization != "SKIPOPENBLAS": + clone_git_repository(openblas_full_path, openblas_git) + if openblas_target_optimization != "": + if not os.path.isdir(openblas_dir): + _print_error("Cannot open expected OpenBLAS directory " + openblas_dir) + sys.exit(1) + + makefiles_to_glob = os.path.join(openblas_dir, "Makefile*") + makefiles = glob.glob(makefiles_to_glob) + + print("Number of files found: " + str(len(makefiles))) + + for f in makefiles: + print(f) + inplace_change(f, "-O2", openblas_target_optimization) + + # make openblas + os.chdir(openblas_dir) + make_openblas_err_code = subprocess.call(["make"], shell=True) + deal_with_error_code(make_openblas_err_code, "Making OpenBLAS") + + # install openblas + install_openblas_err_code = subprocess.call( + ["make PREFIX=" + openblas_full_path_install + + " install"], shell=True) + deal_with_error_code(install_openblas_err_code, "Installing OpenBLAS") + os.chdir(start_working_dir) # restore working dir + + dir_name = "spintrum" lib_file = "lib/libspintrum.so" class DependenciesBuilder(_build): def run(self): + sys.stdout.flush() + sys.stderr.flush() if sys.platform.startswith('win'): _print_error("You cannot build Spintrum on Windows. It is not supported.") @@ -186,41 +230,7 @@ class DependenciesBuilder(_build): print("Building Spintrum C/C++ extension prerequisites") - ########## get OpenBLAS - openblas_dir = "3rdparty/OpenBLAS" - openblas_dir_install = "spintrum/OpenBLAS_install" - openblas_full_path = os.path.join(start_working_dir, openblas_dir) - openblas_full_path_install = os.path.join(start_working_dir, openblas_dir_install) - openblas_git = "https://github.com/xianyi/OpenBLAS.git" - - openblas_target_optimization = ask_openblas_optimization_level() - if openblas_target_optimization != "SKIPOPENBLAS": - clone_git_repository(openblas_full_path, openblas_git) - if openblas_target_optimization != "": - if not os.path.isdir(openblas_dir): - _print_error("Cannot open expected OpenBLAS directory " + openblas_dir + "\n") - sys.exit(1) - - makefiles_to_glob = os.path.join(openblas_dir, "Makefile*") - makefiles = glob.glob(makefiles_to_glob) - - print("Number of files found: " + str(len(makefiles))) - - for f in makefiles: - print(f) - inplace_change(f, "-O2", openblas_target_optimization) - - # make openblas - os.chdir(openblas_dir) - make_openblas_err_code = subprocess.call(["make"], shell=True) - deal_with_error_code(make_openblas_err_code, "Making OpenBLAS") - - # install openblas - install_openblas_err_code = subprocess.call( - ["make PREFIX=" + openblas_full_path_install + - " install"], shell=True) - deal_with_error_code(install_openblas_err_code, "Installing OpenBLAS") - os.chdir(start_working_dir) #restore working dir + get_openblas() ############## get Polymath polymath_git = "https://git.afach.de/samerafach/Polymath" @@ -230,12 +240,12 @@ class DependenciesBuilder(_build): ############## build spintrum spintrum_optimization_target = ask_spintrum_optimization_level() - print("Building Spintrum") + print("Building Spintrum extension...") err_code = subprocess.call(["cmake . -DPythonInstallation=1 -DOptimizationLevel=" + spintrum_optimization_target], shell=True) deal_with_error_code(err_code, "CMaking spintrum") err_code = subprocess.call(["make"], shell=True) deal_with_error_code(err_code, "Making spintrum") - print("Done building spintrum.") + print("Done building spintrum extension.") setup(name='spintrum',