def prepare(root,config): prefix=config.get('Main','prefix') dep_build_dir = config.get('Main','dependency_build_dir') dep_download_dir=config.get('Main','dependency_download_dir') arma_include_dir=prefix+"/bempp/include" print "Extracting Armadillo" extract_dir = dep_build_dir+"/"+arma_extract_dir tools.checkDeleteDirectory(extract_dir) try: tools.extract_file(dep_download_dir+"/"+arma_fname,dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root,config,force=True) tools.extract_file(dep_download_dir+"/"+arma_fname,dep_build_dir) subprocess.check_call("cp -R "+extract_dir+"/include/* "+ prefix+"/bempp/include/",shell=True) print "Patching Armadillo" patch=py_patch.fromfile(root+"/installer/patches/armadillo_config.patch") cwd=os.getcwd() os.chdir(prefix+"/bempp/include/armadillo_bits") patch.apply() os.chdir(cwd) tools.setDefaultConfigOption(config,"Armadillo","include_dir", prefix+"/bempp/include",overwrite=True)
def prepare(root,config): dep_build_dir=config.get('Main','dependency_build_dir') dep_download_dir=config.get('Main','dependency_download_dir') trilinos_full_dir=dep_build_dir+"/"+trilinos_dir trilinos_download_name=dep_download_dir+"/"+trilinos_fname prefix=config.get('Main','prefix') tools.checkDeleteDirectory(trilinos_full_dir) print "Extracting Trilinos" try: tools.extract_file(dep_download_dir+"/"+trilinos_fname,dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root,config,force=True) tools.extract_file(dep_download_dir+"/"+trilinos_fname,dep_build_dir) os.rename(dep_build_dir+"/"+trilinos_extract_dir, dep_build_dir+"/"+trilinos_dir) shutil.copy(root+"/installer/build_scripts/posix/trilinos_build.sh", trilinos_full_dir+"/trilinos_build.sh") print "Patching Trilinos" cwd=os.getcwd() os.chdir(dep_build_dir+"/trilinos/packages/stratimikos/adapters/belos/src") patch=py_patch.fromfile(root+"/installer/patches/Thyra_BelosLinearOpWithSolve_def.patch") patch.apply() os.chdir(dep_build_dir+"/trilinos/packages/thyra/core/src/support/nonlinear/model_evaluator/client_support") patch=py_patch.fromfile(root+"/installer/patches/thyra_static_initialization_order.patch") patch.apply() os.chdir(cwd) tools.setDefaultConfigOption(config,'Trilinos','cmake_path',prefix+"/bempp/lib/cmake/Trilinos/",overwrite=True) tools.setCompilerOptions(config,'Trilinos')
def bootstrap(root,config): # Check for OS X Mavericks have_mavericks = False import platform plat = platform.system() if plat == 'Darwin': have_mavericks = True if platform.mac_ver()[0]=='10.9' else False cleanUp(root,config) createDirectories(root,config) prefix = config.get('Main','prefix') cmake_path = prefix+'/bempp/bin/cmake' if config.has_option('CMake','exe'): cmake_executable = tools.which(config.get('CMake','exe')) if cmake_executable is None: raise Exception("CMake command specified in [CMake] section not found.") else: tools.setDefaultConfigOption(config,"CMake","exe",cmake_executable,overwrite=True) else: if not have_mavericks: print "CMake not found. Downloading and installing CMake..." cmake.download(root,config) cmake.prepare(root,config) cmake.configure(root,config) cmake.build(root,config) cmake.install(root,config) tools.setDefaultConfigOption(config,"CMake","exe",cmake_path,overwrite=True) else: raise Exception("On OS X Mavericks 'cmake' must be manually specified in the config file.") downloadDependencies(root,config)
def prepare(root, config): prefix = config.get('Main', 'prefix') dep_build_dir = config.get('Main', 'dependency_build_dir') dep_download_dir = config.get('Main', 'dependency_download_dir') arma_include_dir = prefix + "/bempp/include" print "Extracting Armadillo" extract_dir = dep_build_dir + "/" + arma_extract_dir tools.checkDeleteDirectory(extract_dir) try: tools.extract_file(dep_download_dir + "/" + arma_fname, dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root, config, force=True) tools.extract_file(dep_download_dir + "/" + arma_fname, dep_build_dir) subprocess.check_call("cp -R " + extract_dir + "/include/* " + prefix + "/bempp/include/", shell=True) print "Patching Armadillo" patch = py_patch.fromfile(root + "/installer/patches/armadillo_config.patch") cwd = os.getcwd() os.chdir(prefix + "/bempp/include/armadillo_bits") patch.apply() os.chdir(cwd) tools.setDefaultConfigOption(config, "Armadillo", "include_dir", prefix + "/bempp/include", overwrite=True)
def prepare(root, config): dep_build_dir = config.get('Main', 'dependency_build_dir') dep_download_dir = config.get('Main', 'dependency_download_dir') trilinos_full_dir = dep_build_dir + "/" + trilinos_dir trilinos_download_name = dep_download_dir + "/" + trilinos_fname prefix = config.get('Main', 'prefix') tools.checkDeleteDirectory(trilinos_full_dir) print "Extracting Trilinos" try: tools.extract_file(dep_download_dir + "/" + trilinos_fname, dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root, config, force=True) tools.extract_file(dep_download_dir + "/" + trilinos_fname, dep_build_dir) os.rename(dep_build_dir + "/" + trilinos_extract_dir, dep_build_dir + "/" + trilinos_dir) shutil.copy(root + "/installer/build_scripts/posix/trilinos_build.sh", trilinos_full_dir + "/trilinos_build.sh") print "Patching Trilinos" cwd = os.getcwd() os.chdir(dep_build_dir + "/trilinos/packages/stratimikos/adapters/belos/src") patch = py_patch.fromfile( root + "/installer/patches/Thyra_BelosLinearOpWithSolve_def.patch") patch.apply() os.chdir( dep_build_dir + "/trilinos/packages/thyra/core/src/support/nonlinear/model_evaluator/client_support" ) patch = py_patch.fromfile( root + "/installer/patches/thyra_static_initialization_order.patch") patch.apply() os.chdir(dep_build_dir + "/trilinos/cmake/tribits/modules") patch = py_patch.fromfile( root + "/installer/patches/trilinos_find_python_interp.patch") patch.apply() os.chdir(dep_build_dir + "/trilinos/packages/teuchos/src") patch = py_patch.fromfile(root + "/installer/patches/Teuchos_LAPACK.hpp.patch") patch.apply() patch = py_patch.fromfile(root + "/installer/patches/Teuchos_LAPACK.cpp.patch") patch.apply() os.chdir(cwd) tools.setDefaultConfigOption(config, 'Trilinos', 'cmake_path', prefix + "/bempp/lib/cmake/Trilinos/", overwrite=True) tools.setCompilerOptions(config, 'Trilinos')
def prepare(root,config): debug=tools.setDefaultConfigOption(config,'Bempp','enable_debug','false') if tools.to_bool(debug): config.set('Bempp','build_type','Debug') else: config.set('Bempp','build_type','Release') tools.setDefaultConfigOption(config,'Bempp','build','true') tools.setCompilerOptions(config,'Bempp')
def prepare(root,config): dep_build_dir=config.get('Main','dependency_build_dir') dep_download_dir=config.get('Main','dependency_download_dir') prefix=config.get('Main','prefix') print "Extracting Tbb" tools.checkDeleteDirectory(dep_build_dir+"/tbb") try: tools.extract_file(dep_download_dir+"/"+tbb_fname,dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root,config,force=True) tools.extract_file(dep_download_dir+"/"+tbb_fname,dep_build_dir) os.rename(dep_build_dir+"/"+tbb_extract_dir,dep_build_dir+"/tbb") print "Patching Tbb" cwd=os.getcwd() os.chdir(dep_build_dir+"/tbb") patch=py_patch.fromfile(root+"/installer/patches/tbb_pipeline.patch") patch.apply() os.chdir(cwd) subprocess.check_call("cp -R "+dep_build_dir+"/tbb/include/* "+ prefix+"/bempp/include/",shell=True) if sys.platform.startswith('darwin'): libdir_orig = dep_build_dir+"/tbb/lib" tbb_lib_name="libtbb.dylib" tbb_lib_name_debug="libtbb_debug.dylib" tbb_libmalloc_name="libtbbmalloc.dylib" tbb_libmalloc_name_debug="libtbbmalloc_debug.dylib" elif sys.platform.startswith('linux'): tbb_lib_name = "libtbb.so" tbb_lib_name_debug = "libtbb_debug.so" tbb_libmalloc_name = "libtbbmalloc.so" tbb_libmalloc_name_debug = "libtbbmalloc_debug.so" arch = config.get('Main','architecture') if arch in ('intel64','ia32','ia64'): libdir_orig = (dep_build_dir+"/tbb/lib/"+arch+ "/gcc4.4") else: raise Exception("Unrecognized architecture: '"+arch+"'") else: raise Exception("Platform not supported") subprocess.check_call("cp -R "+libdir_orig+"/* "+prefix+"/bempp/lib/",shell=True) tools.setDefaultConfigOption(config,"Tbb",'lib',prefix+"/bempp/lib/"+tbb_lib_name,overwrite=True) tools.setDefaultConfigOption(config,"Tbb","lib_debug",prefix+"/bempp/lib/"+tbb_lib_name_debug,overwrite=True) tools.setDefaultConfigOption(config,"Tbb",'libmalloc',prefix+"/bempp/lib/"+tbb_libmalloc_name,overwrite=True) tools.setDefaultConfigOption(config,"Tbb","libmalloc_debug",prefix+"/bempp/lib/"+tbb_libmalloc_name_debug,overwrite=True) tools.setDefaultConfigOption(config,"Tbb",'include_dir',prefix+"/bempp/include",overwrite=True)
def prepare(root, config): dep_build_dir = config.get("Main", "dependency_build_dir") dep_download_dir = config.get("Main", "dependency_download_dir") trilinos_full_dir = dep_build_dir + "/" + trilinos_dir trilinos_download_name = dep_download_dir + "/" + trilinos_fname prefix = config.get("Main", "prefix") tools.checkDeleteDirectory(trilinos_full_dir) print "Extracting Trilinos" try: tools.extract_file(dep_download_dir + "/" + trilinos_fname, dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root, config, force=True) tools.extract_file(dep_download_dir + "/" + trilinos_fname, dep_build_dir) os.rename(dep_build_dir + "/" + trilinos_extract_dir, dep_build_dir + "/" + trilinos_dir) shutil.copy(root + "/installer/build_scripts/posix/trilinos_build.sh", trilinos_full_dir + "/trilinos_build.sh") print "Patching Trilinos" cwd = os.getcwd() os.chdir(dep_build_dir + "/trilinos") patch = py_patch.fromfile(root + "/installer/patches/Thyra_BelosLinearOpWithSolve_def.patch") patch.apply() os.chdir(cwd) # os.chdir(dep_build_dir+"/trilinos/packages/thyra/core/src/support/nonlinear/model_evaluator/client_support") # patch=py_patch.fromfile(root+"/installer/patches/thyra_static_initialization_order.patch") # patch.apply() # os.chdir(dep_build_dir+"/trilinos/cmake/tribits/modules") # patch=py_patch.fromfile(root+"/installer/patches/trilinos_find_python_interp.patch") # patch.apply() # os.chdir(dep_build_dir+"/trilinos/packages/teuchos/numerics/src") # patch=py_patch.fromfile(root+"/installer/patches/Teuchos_LAPACK.hpp.patch") # patch.apply() # patch=py_patch.fromfile(root+"/installer/patches/Teuchos_LAPACK.cpp.patch") # patch.apply() os.chdir(dep_build_dir + "/trilinos/packages/epetra/src") patch = py_patch.fromfile(root + "/installer/patches/Epetra_ConfigDefs.h.patch") patch.apply() os.chdir(cwd) tools.setDefaultConfigOption( config, "Trilinos", "cmake_path", prefix + "/bempp/lib/cmake/Trilinos/", overwrite=True ) tools.setCompilerOptions(config, "Trilinos") trilinos_cxxflags = config.get("Trilinos", "cxxflags") trilinos_cxxflags = trilinos_cxxflags + " -Wno-c++11-narrowing" config.set("Trilinos", "cxxflags", trilinos_cxxflags)
def prepare(root,config): enable_ahmed = tools.to_bool(tools.setDefaultConfigOption(config,'AHMED','enable_ahmed','false')) if enable_ahmed: if not config.has_option('AHMED','file_name'): raise Exception('Need to give full path of tar.gz archived file with AHMED 1.0 release') ahmed_fname=config.get('AHMED','file_name') ahmed_fname=tools.normalizePath(config,ahmed_fname) config.set('AHMED','with_ahmed','ON') prefix=config.get('Main','prefix') dep_build_dir = config.get('Main','dependency_build_dir') arch = config.get('Main','architecture') if arch == 'ia32': config.set('AHMED','enable64','OFF') else: config.set('AHMED','enable64','ON') ahmed_full_dir=dep_build_dir+"/ahmed" tools.checkDeleteDirectory(ahmed_full_dir) if sys.platform.startswith('darwin'): config.set('AHMED','lib',prefix+"/bempp/lib/libAHMED.dylib") elif sys.platform.startswith('linux'): config.set('AHMED','lib',prefix+"/bempp/lib/libAHMED.so") else: raise Exception("Platform not supported") config.set('AHMED','include_dir',prefix+"/bempp/include/AHMED") if not os.path.isfile(ahmed_fname): raise Exception("File '"+ahmed_fname+"' does not exist") print "Extracting AHMED" tools.extract_file(ahmed_fname,dep_build_dir) os.rename(dep_build_dir+"/AHMED_1.0",ahmed_full_dir) shutil.copy(root+"/installer/build_scripts/posix/ahmed_build.sh",ahmed_full_dir+"/ahmed_build.sh") print "Patching AHMED" cwd=os.getcwd() os.chdir(ahmed_full_dir) for s in ("ahmed_cmake.patch", "ahmed_addGeHGeH_single_precision.patch", "ahmed_changelog_H.h.patch", "ahmed_pass_clusters_to_aca_matgen_apprx.h.patch", "ahmed_generic_aca_apprx.h.patch", "ahmed_check_error_apprx.h.patch", "ahmed_bbx_apprx.h.patch", "ahmed_pass_clusters_to_aca_matgen_ACA.h.patch", "ahmed_frobenius_norm_ACA.h.patch", "ahmed_zero_pu_pv_ACA.h.patch", "ahmed_retry_if_zero_and_orig_cross_ACA.h.patch", "ahmed_changelog_ACA.h.patch", "ahmed_permuted_indices_bemcluster.h.patch", "ahmed_changelog_bemcluster.h.patch", "ahmed_omp.patch", "ahmed_basmod_h.patch", "ahmed_mblock.patch"): py_patch.fromfile(root+"/installer/patches/"+s).apply() shutil.copy(root+"/installer/patches/ahmed_bbx_bbxbemcluster.h", "./Include/bbxbemcluster.h") shutil.copy(root+"/installer/patches/ahmed_bbx_bbxbemblcluster.h", "./Include/bbxbemblcluster.h") os.chdir(cwd) tools.setCompilerOptions(config,'AHMED') else: config.set('AHMED','with_ahmed','OFF')
def prepare(root, config): dep_build_dir = config.get('Main', 'dependency_build_dir') boost_full_dir = dep_build_dir + "/" + boost_dir dep_download_dir = config.get('Main', 'dependency_download_dir') boost_download_name = dep_download_dir + "/" + boost_fname prefix = config.get('Main', 'prefix') boost_include_dir = prefix + "/bempp/include" if sys.platform.startswith('darwin'): unit_test_lib_name = "libboost_unit_test_framework-mt.dylib" elif sys.platform.startswith('linux'): unit_test_lib_name = "libboost_unit_test_framework-mt.so" else: raise Exception("Platform not supported") boost_unit_test_lib = prefix + "/bempp/lib/" + unit_test_lib_name tools.checkDeleteDirectory(boost_full_dir) print "Extracting Boost" try: tools.extract_file(boost_download_name, dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root, config, force=True) tools.extract_file(boost_download_name, dep_build_dir) os.rename(dep_build_dir + "/" + boost_extract_dir, boost_full_dir) shutil.copy(root + "/installer/build_scripts/posix/boost_build.sh", boost_full_dir + "/boost_build.sh") tools.setDefaultConfigOption(config, "Boost", "unit_test_lib", boost_unit_test_lib, overwrite=True) tools.setDefaultConfigOption(config, "Boost", "include_dir", boost_include_dir, overwrite=True) tools.setCompilerOptions(config, 'Boost')
def prepare(root, config): enable_ahmed = tools.to_bool( tools.setDefaultConfigOption(config, 'AHMED', 'enable_ahmed', 'false')) if enable_ahmed: if not config.has_option('AHMED', 'file_name'): raise Exception( 'Need to give full path of tar.gz archived file with AHMED 1.0 release' ) ahmed_fname = config.get('AHMED', 'file_name') ahmed_fname = tools.normalizePath(config, ahmed_fname) config.set('AHMED', 'with_ahmed', 'ON') prefix = config.get('Main', 'prefix') dep_build_dir = config.get('Main', 'dependency_build_dir') arch = config.get('Main', 'architecture') if arch == 'ia32': config.set('AHMED', 'enable64', 'OFF') else: config.set('AHMED', 'enable64', 'ON') ahmed_full_dir = dep_build_dir + "/ahmed" tools.checkDeleteDirectory(ahmed_full_dir) if sys.platform.startswith('darwin'): config.set('AHMED', 'lib', prefix + "/bempp/lib/libAHMED.dylib") elif sys.platform.startswith('linux'): config.set('AHMED', 'lib', prefix + "/bempp/lib/libAHMED.so") else: raise Exception("Platform not supported") config.set('AHMED', 'include_dir', prefix + "/bempp/include/AHMED") if not os.path.isfile(ahmed_fname): raise Exception("File '" + ahmed_fname + "' does not exist") print "Extracting AHMED" tools.extract_file(ahmed_fname, dep_build_dir) os.rename(dep_build_dir + "/AHMED_1.0", ahmed_full_dir) shutil.copy(root + "/installer/build_scripts/posix/ahmed_build.sh", ahmed_full_dir + "/ahmed_build.sh") print "Patching AHMED" cwd = os.getcwd() os.chdir(ahmed_full_dir) for s in ("ahmed_cmake.patch", "ahmed_addGeHGeH_single_precision.patch", "ahmed_pass_clusters_to_aca_matgen_apprx.h.patch", "ahmed_generic_aca_apprx.h.patch", "ahmed_check_error_apprx.h.patch", "ahmed_pass_clusters_to_aca_matgen_ACA.h.patch", "ahmed_frobenius_norm_ACA.h.patch", "ahmed_zero_pu_pv_ACA.h.patch", "ahmed_retry_if_zero_and_orig_cross_ACA.h.patch", "ahmed_permuted_indices_bemcluster.h.patch"): py_patch.fromfile(root + "/installer/patches/" + s).apply() os.chdir(cwd) tools.setCompilerOptions(config, 'AHMED') else: config.set('AHMED', 'with_ahmed', 'OFF')
def prepare(root, config): dep_build_dir = config.get("Main", "dependency_build_dir") dep_download_dir = config.get("Main", "dependency_download_dir") prefix = config.get("Main", "prefix") swig_full_dir = dep_build_dir + "/" + swig_dir swig_download_name = dep_download_dir + "/" + swig_fname swig_executable = prefix + "/bempp/bin/swig" tools.checkDeleteDirectory(swig_full_dir) print "Extracting Swig" try: tools.extract_file(dep_download_dir + "/" + swig_fname, dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root, config, force=True) tools.extract_file(dep_download_dir + "/" + swig_fname, dep_build_dir) os.rename(dep_build_dir + "/" + swig_extract_dir, swig_full_dir) tools.setDefaultConfigOption(config, "Swig", "exe", swig_executable, overwrite=True) tools.setCompilerOptions(config, "Swig")
def prepare(root,config): dep_build_dir=config.get('Main','dependency_build_dir') boost_full_dir=dep_build_dir+"/"+boost_dir dep_download_dir=config.get('Main','dependency_download_dir') boost_download_name=dep_download_dir+"/"+boost_fname prefix=config.get('Main','prefix') boost_include_dir=prefix+"/bempp/include" if sys.platform.startswith('darwin'): unit_test_lib_name="libboost_unit_test_framework-mt.dylib" elif sys.platform.startswith('linux'): unit_test_lib_name="libboost_unit_test_framework-mt.so" else: raise Exception("Platform not supported") boost_unit_test_lib=prefix+"/bempp/lib/"+unit_test_lib_name tools.checkDeleteDirectory(boost_full_dir) print "Extracting Boost" try: tools.extract_file(boost_download_name,dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root,config,force=True) tools.extract_file(boost_download_name,dep_build_dir) os.rename(dep_build_dir+"/"+boost_extract_dir,boost_full_dir) shutil.copy(root+"/installer/build_scripts/posix/boost_build.sh", boost_full_dir+"/boost_build.sh") tools.setDefaultConfigOption(config,"Boost","unit_test_lib", boost_unit_test_lib,overwrite=True) tools.setDefaultConfigOption(config,"Boost","include_dir", boost_include_dir,overwrite=True) tools.setCompilerOptions(config,'Boost')
def prepare(root,config): dep_build_dir=config.get('Main','dependency_build_dir') dep_download_dir=config.get('Main','dependency_download_dir') prefix=config.get('Main','prefix') swig_full_dir=dep_build_dir+"/"+swig_dir swig_download_name=dep_download_dir+"/"+swig_fname swig_executable=prefix+"/bempp/bin/swig" tools.checkDeleteDirectory(swig_full_dir) print "Extracting Swig" try: tools.extract_file(dep_download_dir+"/"+swig_fname,dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root,config,force=True) tools.extract_file(dep_download_dir+"/"+swig_fname,dep_build_dir) os.rename(dep_build_dir+"/"+swig_extract_dir,swig_full_dir) tools.setDefaultConfigOption(config,"Swig","exe",swig_executable, overwrite=True) tools.setCompilerOptions(config,'Swig')
def prepare(root, config): dep_build_dir = config.get('Main', 'dependency_build_dir') dep_download_dir = config.get('Main', 'dependency_download_dir') prefix = config.get('Main', 'prefix') print "Extracting Tbb" tools.checkDeleteDirectory(dep_build_dir + "/tbb") try: tools.extract_file(dep_download_dir + "/" + tbb_fname_short, dep_build_dir) except IOError: # Possibly a corrupted/truncated file. Try to download once again download(root, config, force=True) tools.extract_file(dep_download_dir + "/" + tbb_fname_short, dep_build_dir) os.rename(dep_build_dir + "/" + tbb_extract_dir, dep_build_dir + "/tbb") subprocess.check_call("cp -R " + dep_build_dir + "/tbb/include/* " + prefix + "/bempp/include/", shell=True) if sys.platform.startswith('darwin'): libdir_orig = dep_build_dir + "/tbb/lib" tbb_lib_name = "libtbb.dylib" tbb_lib_name_debug = "libtbb_debug.dylib" elif sys.platform.startswith('linux'): tbb_lib_name = "libtbb.so" tbb_lib_name_debug = "libtbb_debug.so" arch = config.get('Main', 'architecture') if arch in ('intel64', 'ia32', 'ia64'): libdir_orig = (dep_build_dir + "/tbb/lib/" + arch + "/cc4.1.0_libc2.4_kernel2.6.16.21") else: raise Exception("Unrecognized architecture: '" + arch + "'") else: raise Exception("Platform not supported") subprocess.check_call("cp -R " + libdir_orig + "/* " + prefix + "/bempp/lib/", shell=True) tools.setDefaultConfigOption(config, "Tbb", 'lib', prefix + "/bempp/lib/" + tbb_lib_name, overwrite=True) tools.setDefaultConfigOption(config, "Tbb", "lib_debug", prefix + "/bempp/lib/" + tbb_lib_name_debug, overwrite=True) tools.setDefaultConfigOption(config, "Tbb", 'include_dir', prefix + "/bempp/include", overwrite=True)
def prepare(root, config): # Test whether the main options are present if not config.has_option('Main', 'prefix'): raise Exception('prefix not defined') setDefaultConfigOption(config, 'Main', 'cc', 'gcc') setDefaultConfigOption(config, 'Main', 'cxx', 'g++') setDefaultConfigOption(config, 'Main', 'architecture', 'intel64') setDefaultConfigOption(config, 'Main', 'flags', "") setDefaultConfigOption(config, 'Main', 'libs', "") setDefaultConfigOption(config, 'Main', 'cflags', "") setDefaultConfigOption(config, 'Main', 'cxxflags', "") setDefaultConfigOption(config, 'Main', 'root_dir', root) setDefaultConfigOption(config, 'Main', 'build_jobs', "1") # Retrieve path to configuration file optfile = config.get('Main', 'optfile') # Retrieve build directory setDefaultConfigOption(config, 'Main', 'build_dir', root + '/build') build_dir = normalizePath(config, config.get('Main', 'build_dir')) # Set build directories for BEM++ and its dependencies config.set('Main', 'build_dir', build_dir) config.set('Bempp', 'build_dir', build_dir + '/bempp') config.set('Main', 'dependency_build_dir', build_dir + '/contrib') # Set config.set('Main', 'dependency_download_dir', root + '/installer/files') # Set default MKL/libs option setDefaultConfigOption(config, 'MKL', 'lib', "-lmkl_rt") # Set default MPI options setDefaultConfigOption(config, 'MPI', 'enable_mpi', 'false') setDefaultConfigOption(config, 'MPI', 'mpi_cxx_libs', '') setDefaultConfigOption(config, 'MPI', 'mpi_include_dir', '') enable_mpi = to_bool(config.get('MPI', 'enable_mpi')) if enable_mpi: mpi_include_dir = config.get('MPI', 'mpi_include_dir') cflags = config.get('Main', 'cflags') cxxflags = config.get('Main', 'cxxflags') config.set('Main', 'with_mpi', 'ON') config.set('Main', 'cflags', cflags + " -I" + mpi_include_dir) config.set('Main', 'cxxflags', cxxflags + " -I" + mpi_include_dir) else: config.set('MPI', 'with_mpi', 'OFF') # Set empty BLAS/Lapack options if none exist setDefaultConfigOption(config, 'BLAS', 'lib', "") setDefaultConfigOption(config, 'LAPACK', 'lib', "") # Add the correct architecture parameters cflags = config.get('Main', 'cflags') cxxflags = config.get('Main', 'cxxflags') arch = config.get('Main', 'architecture') if not arch in ['ia32', 'ia64', 'intel64']: raise Exception("Architecture '" + arch + "' is not supported. " "Supported architectures: ia32, ia64, intel64.") if sys.platform.startswith('darwin'): if arch == 'intel64': param = '-arch x86_64' else: param = '-arch i386' config.set('Main', 'cflags', cflags + " " + param) config.set('Main', 'cxxflags', cxxflags + " " + param) setDefaultConfigOption(config, 'Main', 'optflags', '-O3 -march=core2') elif sys.platform.startswith('linux'): if arch == 'intel64' or arch == 'ia64': param = '-m64' else: param = '-m32' config.set('Main', 'cflags', cflags + " " + param) config.set('Main', 'cxxflags', cxxflags + " " + param) setDefaultConfigOption(config, 'Main', 'optflags', '-O3 -march=native') else: raise Exception("Platform '" + sys.platform + "' is not supported") # Add the correct Python options import numpy (py_exe, py_lib, py_include) = pythonInfo(config) setDefaultConfigOption(config, 'Python', 'exe', py_exe) setDefaultConfigOption(config, 'Python', 'lib', py_lib) setDefaultConfigOption(config, 'Python', 'include_dir', py_include) setDefaultConfigOption(config, 'Python', 'numpy_include_dir', numpy.get_include()) # Add the CMake configuration prefix = config.get('Main', 'prefix') setDefaultConfigOption(config, "CMake", "exe", prefix + "/bempp/bin/cmake", overwrite=True)
def prepare(root,config): # Test whether the main options are present if not config.has_option('Main','prefix'): raise Exception('prefix not defined') setDefaultConfigOption(config,'Main','cc','gcc') setDefaultConfigOption(config,'Main','cxx','g++') setDefaultConfigOption(config,'Main','architecture','intel64') setDefaultConfigOption(config,'Main','flags',"") setDefaultConfigOption(config,'Main','libs',"") setDefaultConfigOption(config,'Main','cflags',"") setDefaultConfigOption(config,'Main','cxxflags',"") setDefaultConfigOption(config,'Main','root_dir',root) setDefaultConfigOption(config,'Main','build_jobs',"1") # Retrieve path to configuration file optfile = config.get('Main','optfile') # Retrieve build directory setDefaultConfigOption(config,'Main','build_dir',root+'/build') build_dir = normalizePath(config, config.get('Main','build_dir')) # Set build directories for BEM++ and its dependencies config.set('Main','build_dir',build_dir) config.set('Bempp','build_dir',build_dir+'/bempp') config.set('Main','dependency_build_dir',build_dir+'/contrib') # Set config.set('Main','dependency_download_dir',root+'/installer/files') # Set default MKL/libs option setDefaultConfigOption(config,'MKL','lib',"-lmkl_rt") # Set default MPI options setDefaultConfigOption(config,'MPI','enable_mpi','false') setDefaultConfigOption(config,'MPI','mpi_cxx_libs','') setDefaultConfigOption(config,'MPI','mpi_include_dir','') enable_mpi = to_bool(config.get('MPI','enable_mpi')) if enable_mpi: mpi_include_dir = config.get('MPI','mpi_include_dir') cflags = config.get('Main','cflags') cxxflags = config.get('Main','cxxflags') config.set('Main','with_mpi','ON') if len(mpi_include_dir)>0: config.set('Main','cflags',cflags+" -I"+mpi_include_dir) config.set('Main','cxxflags',cxxflags+" -I"+mpi_include_dir) else: config.set('MPI','with_mpi','OFF') # Set empty BLAS/Lapack options if none exist setDefaultConfigOption(config,'BLAS','lib',"") setDefaultConfigOption(config,'LAPACK','lib',"") # Add the correct architecture parameters cflags = config.get('Main','cflags') cxxflags = config.get('Main','cxxflags') arch = config.get('Main','architecture') if not arch in ['ia32','ia64','intel64']: raise Exception("Architecture '"+arch+"' is not supported. " "Supported architectures: ia32, ia64, intel64.") if sys.platform.startswith('darwin'): if arch=='intel64': param = '-arch x86_64' else: param = '-arch i386' config.set('Main','cflags',cflags+" "+param) config.set('Main','cxxflags',cxxflags+" "+param) setDefaultConfigOption(config,'Main','optflags','-O3 -march=core2') elif sys.platform.startswith('linux'): if arch=='intel64' or arch=='ia64': param = '-m64' else: param = '-m32' config.set('Main','cflags',cflags+" "+param) config.set('Main','cxxflags',cxxflags+" "+param) setDefaultConfigOption(config,'Main','optflags','-O3 -march=native') else: raise Exception("Platform '"+sys.platform+"' is not supported") # Add the correct Python options import numpy (py_exe,py_lib,py_include) = pythonInfo(config) setDefaultConfigOption(config,'Python','exe',py_exe) setDefaultConfigOption(config,'Python','lib',py_lib) setDefaultConfigOption(config,'Python','include_dir',py_include) setDefaultConfigOption(config,'Python','numpy_include_dir',numpy.get_include()) # Check for OS X Mavericks have_mavericks = False plat = platform.system() if plat == 'Darwin': have_mavericks = True if platform.mac_ver()[0]=='10.9' else False # Add the CMake configuration if config.has_option('CMake','exe'): cmake_executable = tools.which(config.get('CMake','exe')) if cmake_executable is None: raise Exception("CMake command specified in [CMake] section not found.") tools.setDefaultConfigOption(config,'CMake','exe',cmake_executable,overwrite=True) else: # CMake must have been or will be downloaded by the bootstrap mechanism cmake_executable = prefix+'/bempp/bin/cmake' if os.path.isfile(cmake_executable): tools.setDefaultConfigOption(config,'CMake','exe',cmake_executable,overwrite=True)
help="Build and install WHAT. Possible values for WHAT: " "all (BEM++ and its dependencies), bempp (BEM++ only), " + ", ".join(library_names) + " (particular BEM++ dependencies)") (options,args) = parser.parse_args() root=module_path() config=ConfigParser() if len(args) != 1: parser.error("Configuration file not specified") optfile = args[0] optfile_generated = root+"/"+os.path.basename(optfile)+".generated" try: optfileobj = open(optfile) config.readfp(optfileobj) optfileobj.close() optfile_full = os.path.abspath(os.path.expanduser(optfile)) tools.setDefaultConfigOption(config,'Main','optfile', optfile_full,overwrite=True) prefix = normalizePath(config, config.get('Main','prefix')) tools.setDefaultConfigOption(config,'Main','prefix',prefix, overwrite=True) except Exception, e: print ("Parsing of configuration file '" + optfile + "' failed with error message:\n" + str(e)) sys.exit(1) try: prepare(root,config) if options.resume_update: # Must be the first "if": the intention is that if this option # is present, the update procedure is resumed and all other work # modes are ignored. config = ConfigParser() if not os.path.exists(optfile_generated):
def prepare(root,config): # Test whether the main options are present if not config.has_option('Main','prefix'): raise Exception('prefix not defined') setDefaultConfigOption(config,'Main','cc','gcc') setDefaultConfigOption(config,'Main','cxx','g++') setDefaultConfigOption(config,'Main','architecture','intel64') setDefaultConfigOption(config,'Main','flags',"") setDefaultConfigOption(config,'Main','libs',"") setDefaultConfigOption(config,'Main','cflags',"") setDefaultConfigOption(config,'Main','cxxflags',"") setDefaultConfigOption(config,'Main','root_dir',root) setDefaultConfigOption(config,'Main','build_jobs',"1") # Retrieve path to configuration file optfile = config.get('Main','optfile') # Retrieve build directory setDefaultConfigOption(config,'Main','build_dir',root+'/build') build_dir = normalizePath(config, config.get('Main','build_dir')) # Set build directories for BEM++ and its dependencies config.set('Main','build_dir',build_dir) config.set('Bempp','build_dir',build_dir+'/bempp') config.set('Main','dependency_build_dir',build_dir+'/contrib') # Set config.set('Main','dependency_download_dir',root+'/installer/files') # Set default MKL/libs option setDefaultConfigOption(config,'MKL','lib',"-lmkl_rt") # Set default MPI options setDefaultConfigOption(config,'MPI','enable_mpi','false') setDefaultConfigOption(config,'MPI','mpi_cxx_libs','') setDefaultConfigOption(config,'MPI','mpi_include_dir','') enable_mpi = to_bool(config.get('MPI','enable_mpi')) if enable_mpi: mpi_include_dir = config.get('MPI','mpi_include_dir') cflags = config.get('Main','cflags') cxxflags = config.get('Main','cxxflags') config.set('Main','with_mpi','ON') if len(mpi_include_dir)>0: config.set('Main','cflags',cflags+" -I"+mpi_include_dir) config.set('Main','cxxflags',cxxflags+" -I"+mpi_include_dir) else: config.set('MPI','with_mpi','OFF') # Set empty BLAS/Lapack options if none exist setDefaultConfigOption(config,'BLAS','lib',"") setDefaultConfigOption(config,'LAPACK','lib',"") # Add the correct architecture parameters cflags = config.get('Main','cflags') cxxflags = config.get('Main','cxxflags') arch = config.get('Main','architecture') if not arch in ['ia32','ia64','intel64']: raise Exception("Architecture '"+arch+"' is not supported. " "Supported architectures: ia32, ia64, intel64.") if sys.platform.startswith('darwin'): if arch=='intel64': param = '-arch x86_64' else: param = '-arch i386' config.set('Main','cflags',cflags+" "+param) config.set('Main','cxxflags',cxxflags+" "+param) setDefaultConfigOption(config,'Main','optflags','-O3 -march=core2') elif sys.platform.startswith('linux'): if arch=='intel64' or arch=='ia64': param = '-m64' else: param = '-m32' config.set('Main','cflags',cflags+" "+param) config.set('Main','cxxflags',cxxflags+" "+param) setDefaultConfigOption(config,'Main','optflags','-O3 -march=native') else: raise Exception("Platform '"+sys.platform+"' is not supported") # Add the correct Python options import numpy (py_exe,py_lib,py_include) = pythonInfo(config) setDefaultConfigOption(config,'Python','exe',py_exe) setDefaultConfigOption(config,'Python','lib',py_lib) setDefaultConfigOption(config,'Python','include_dir',py_include) setDefaultConfigOption(config,'Python','numpy_include_dir',numpy.get_include()) # Add the CMake configuration prefix = config.get('Main','prefix') setDefaultConfigOption(config,"CMake","exe",prefix+"/bempp/bin/cmake",overwrite=True)
def prepare(root,config): prefix = config.get('Main','prefix') lib_dir = prefix+"/bempp/lib" if sys.platform.startswith('darwin'): extension = ".dylib" elif sys.platform.startswith('linux'): extension = ".so" else: raise Exception("Unsupported platform: '"+sys.platform+"'") enable_mkl = tools.to_bool(tools.setDefaultConfigOption(config,'MKL', 'enable_mkl','no')) if enable_mkl: if config.has_option('BLAS','lib') and config.get('BLAS','lib'): print ("Warning: contents of the option 'lib' in section 'BLAS' " "will be ignored, since enable_mkl is set") if config.has_option('LAPACK','lib') and config.get('LAPACK','lib'): print ("Warning: contents of the option 'lib' in section 'LAPACK' " "will be ignored, since enable_mkl is set") # Variables: # - mkl_dirs: list of directories with all MKL libraries # - mkl_libs: list of MKL libraries to link against, either as # full paths or as '-l...' linker commands # - mkl_linker_args: list of MKL libraries to link against, # either as full paths to files contained in lib_dir or as # '-l...' linker commands # If mkl_source is not set, we'll get a sensible exception message mkl_source = config.get('MKL','source').lower() if mkl_source == "like_numpy": mkl_dirs,mkl_libs = get_mkl_dirs_and_libs_like_numpy( config,lib_dir,extension) if not mkl_libs: raise Exception( "Your NumPy package does not seem to be linked to MKL. " "Are you sure\nyou are using the correct version of Python? " "If so, set the 'source'\noption in the 'MKL' section of " "your configuration file to 'installed'\nand use the " "options 'dir' and 'lib' to specify manually the location " "of your\nMKL libraries.") create_symlinks(lib_dir,extension,mkl_dirs,mkl_libs) elif mkl_source == 'installed': mkl_dirs,mkl_libs = get_mkl_dirs_and_libs_installed( config,lib_dir,extension) create_symlinks(lib_dir,extension,mkl_dirs,mkl_libs) elif mkl_source == 'redistributable': mkl_dirs,mkl_libs = get_mkl_dirs_and_libs_redistributable( config,lib_dir,extension) # no need to create symlinks else: raise Exception("Option 'mkl_source' in section 'MKL' must be " "either 'installed', 'redistributable' or " "'like_numpy'") mkl_linker_args = get_linker_args(lib_dir,extension,mkl_dirs,mkl_libs) blas_libs = ";-lpthread;".join(mkl_linker_args)+";-lpthread" lapack_libs = blas_libs tools.setDefaultConfigOption(config,'BLAS','lib',blas_libs, overwrite=True) tools.setDefaultConfigOption(config,'LAPACK','lib',lapack_libs, overwrite=True) else: # enable_mkl is false # Create symbolic links to BLAS and LAPACK libraries in # lib_dir and replace original locations in the linking line # with these symbolic links for section in ('BLAS','LAPACK'): paths = config.get(section,'lib') paths = paths.split(";") paths = [s.strip() for s in paths] new_paths = [] for path in paths: if os.path.isfile(path): fname = os.path.basename(path) new_path = os.path.join(lib_dir,fname) if not os.path.exists(new_path): os.symlink(path, new_path) new_paths.append(new_path) else: new_paths.append(path) new_setting = ";".join(new_paths) tools.setDefaultConfigOption(config,section,'lib', new_setting,overwrite=True)
def prepare(root, config): prefix = config.get('Main', 'prefix') lib_dir = prefix + "/bempp/lib" if sys.platform.startswith('darwin'): extension = ".dylib" elif sys.platform.startswith('linux'): extension = ".so" else: raise Exception("Unsupported platform: '" + sys.platform + "'") enable_mkl = tools.to_bool( tools.setDefaultConfigOption(config, 'MKL', 'enable_mkl', 'no')) if enable_mkl: if config.has_option('BLAS', 'lib') and config.get('BLAS', 'lib'): print( "Warning: contents of the option 'lib' in section 'BLAS' " "will be ignored, since enable_mkl is set") if config.has_option('LAPACK', 'lib') and config.get('LAPACK', 'lib'): print( "Warning: contents of the option 'lib' in section 'LAPACK' " "will be ignored, since enable_mkl is set") # Variables: # - mkl_dirs: list of directories with all MKL libraries # - mkl_libs: list of MKL libraries to link against, either as # full paths or as '-l...' linker commands # - mkl_linker_args: list of MKL libraries to link against, # either as full paths to files contained in lib_dir or as # '-l...' linker commands # If mkl_source is not set, we'll get a sensible exception message mkl_source = config.get('MKL', 'source').lower() if mkl_source == "like_numpy": mkl_dirs, mkl_libs = get_mkl_dirs_and_libs_like_numpy( config, lib_dir, extension) if not mkl_libs: raise Exception( "Your NumPy package does not seem to be linked to MKL. " "Are you sure\nyou are using the correct version of Python? " "If so, set the 'source'\noption in the 'MKL' section of " "your configuration file to 'installed'\nand use the " "options 'dir' and 'lib' to specify manually the location " "of your\nMKL libraries.") create_symlinks(lib_dir, extension, mkl_dirs, mkl_libs) elif mkl_source == 'installed': mkl_dirs, mkl_libs = get_mkl_dirs_and_libs_installed( config, lib_dir, extension) create_symlinks(lib_dir, extension, mkl_dirs, mkl_libs) elif mkl_source == 'redistributable': mkl_dirs, mkl_libs = get_mkl_dirs_and_libs_redistributable( config, lib_dir, extension) # no need to create symlinks else: raise Exception("Option 'mkl_source' in section 'MKL' must be " "either 'installed', 'redistributable' or " "'like_numpy'") mkl_linker_args = get_linker_args(lib_dir, extension, mkl_dirs, mkl_libs) blas_libs = ";-lpthread;".join(mkl_linker_args) + ";-lpthread" lapack_libs = blas_libs tools.setDefaultConfigOption(config, 'BLAS', 'lib', blas_libs, overwrite=True) tools.setDefaultConfigOption(config, 'LAPACK', 'lib', lapack_libs, overwrite=True) else: # enable_mkl is false # Create symbolic links to BLAS and LAPACK libraries in # lib_dir and replace original locations in the linking line # with these symbolic links for section in ('BLAS', 'LAPACK'): paths = config.get(section, 'lib') paths = paths.split(";") paths = [s.strip() for s in paths] new_paths = [] for path in paths: if os.path.isfile(path): fname = os.path.basename(path) new_path = os.path.join(lib_dir, fname) if not os.path.exists(new_path): os.symlink(path, new_path) new_paths.append(new_path) else: new_paths.append(path) new_setting = ";".join(new_paths) tools.setDefaultConfigOption(config, section, 'lib', new_setting, overwrite=True)
", ".join(library_names) + " (particular BEM++ dependencies)") (options, args) = parser.parse_args() root = module_path() config = ConfigParser() if len(args) != 1: parser.error("Configuration file not specified") optfile = args[0] optfile_generated = root + "/" + os.path.basename(optfile) + ".generated" try: optfileobj = open(optfile) config.readfp(optfileobj) optfileobj.close() optfile_full = os.path.abspath(os.path.expanduser(optfile)) tools.setDefaultConfigOption(config, 'Main', 'optfile', optfile_full, overwrite=True) prefix = normalizePath(config, config.get('Main', 'prefix')) tools.setDefaultConfigOption(config, 'Main', 'prefix', prefix, overwrite=True) except Exception, e: print("Parsing of configuration file '" + optfile + "' failed with error message:\n" + str(e)) sys.exit(1) try: prepare(root, config) if options.resume_update: