some cleanups and small bugfixes to conform better with python conventions

This commit is contained in:
Axel Kohlmeyer
2019-01-28 17:37:05 -05:00
parent 0cae619320
commit 1465352454
11 changed files with 846 additions and 234 deletions

View File

@ -1,19 +1,22 @@
#!/usr/bin/env python #!/usr/bin/env python
# install.py tool to do a generic build of a library """
# soft linked to by many of the lib/Install.py files Install.py tool to do a generic build of a library
# used to automate the steps described in the corresponding lib/README soft linked to by many of the lib/Install.py files
used to automate the steps described in the corresponding lib/README
"""
from __future__ import print_function from __future__ import print_function
import sys,os,subprocess import sys, os, subprocess
sys.path.append('..')
from install_helpers import get_cpus,fullpath
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import get_cpus, fullpath
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
help = """ HELP = """
Syntax from src dir: make lib-libname args="-m machine -e suffix" Syntax from src dir: make lib-libname args="-m machine -e suffix"
Syntax from lib dir: python Install.py -m machine -e suffix Syntax from lib dir: python Install.py -m machine -e suffix
@ -39,10 +42,11 @@ args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if not args.machine and not args.extramake: if not args.machine and not args.extramake:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
machine = args.machine machine = args.machine
extraflag = args.extramake extraflag = not args.extramake
suffix = args.extramake
# set lib from working dir # set lib from working dir
@ -53,10 +57,10 @@ lib = os.path.basename(cwd)
# reset EXTRAMAKE if requested # reset EXTRAMAKE if requested
if not os.path.exists("Makefile.%s" % machine): if not os.path.exists("Makefile.%s" % machine):
sys.exit("lib/%s/Makefile.%s does not exist" % (lib,machine)) sys.exit("lib/%s/Makefile.%s does not exist" % (lib, machine))
lines = open("Makefile.%s" % machine,'r').readlines() lines = open("Makefile.%s" % machine, 'r').readlines()
fp = open("Makefile.auto",'w') fp = open("Makefile.auto", 'w')
has_extramake = False has_extramake = False
for line in lines: for line in lines:
@ -64,7 +68,7 @@ for line in lines:
if len(words) == 3 and words[0] == "EXTRAMAKE" and words[1] == '=': if len(words) == 3 and words[0] == "EXTRAMAKE" and words[1] == '=':
has_extramake = True has_extramake = True
if extraflag: if extraflag:
line = line.replace(words[2],"Makefile.lammps.%s" % suffix) line = line.replace(words[2], "Makefile.lammps.%s" % suffix)
fp.write(line) fp.write(line)
fp.close() fp.close()
@ -75,14 +79,16 @@ n_cpus = get_cpus()
print("Building lib%s.a ..." % lib) print("Building lib%s.a ..." % lib)
cmd = "make -f Makefile.auto clean; make -f Makefile.auto -j%d" % n_cpus cmd = "make -f Makefile.auto clean; make -f Makefile.auto -j%d" % n_cpus
try: try:
txt = subprocess.check_output(cmd,shell=True,stderr=subprocess.STDOUT) txt = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8')) print("Make failed with:\n %s" % e.output.decode('UTF-8'))
sys.exit(1) sys.exit(1)
if os.path.exists("lib%s.a" % lib): print("Build was successful") if os.path.exists("lib%s.a" % lib):
else: sys.exit("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib)) print("Build was successful")
else:
sys.exit("Build of lib/%s/lib%s.a was NOT successful" % (lib, lib))
if has_extramake and not os.path.exists("Makefile.lammps"): if has_extramake and not os.path.exists("Makefile.lammps"):
print("WARNING: lib/%s/Makefile.lammps was NOT created" % lib) print("WARNING: lib/%s/Makefile.lammps was NOT created" % lib)

View File

@ -1,20 +1,23 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to build the GPU library """
# used to automate the steps described in the README file in this dir Install.py tool to build the GPU library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,subprocess,shutil import sys, os, subprocess, shutil
from argparse import ArgumentParser
sys.path.append('..') sys.path.append('..')
from install_helpers import get_cpus from install_helpers import get_cpus
from argparse import ArgumentParser
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-gpu args="-m machine -h hdir -a arch -p precision -e esuffix -b -o osuffix" Syntax from src dir: make lib-gpu args="-m machine -h hdir -a arch -p precision -e esuffix -b -o osuffix"
Syntax from lib dir: python Install.py -m machine -h hdir -a arch -p precision -e esuffix -b -o osuffix Syntax from lib dir: python Install.py -m machine -h hdir -a arch -p precision -e esuffix -b -o osuffix
@ -41,10 +44,10 @@ parser.add_argument("-b", "--build", action="store_true",
parser.add_argument("-m", "--machine", default='linux', parser.add_argument("-m", "--machine", default='linux',
help="suffix of Makefile.machine used as base for customizing Makefile.auto") help="suffix of Makefile.machine used as base for customizing Makefile.auto")
parser.add_argument("-a", "--arch", default='sm_30', parser.add_argument("-a", "--arch", default='sm_30',
choices=['sm_12','sm_13','sm_20','sm_21','sm_30','sm_35','sm_37', choices=['sm_12', 'sm_13', 'sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_37',
'sm_50','sm_52','sm_60','sm_61','sm_70','sm_75'], 'sm_50', 'sm_52', 'sm_60', 'sm_61', 'sm_70', 'sm_75'],
help="set GPU architecture and instruction set (default: 'sm_30')") help="set GPU architecture and instruction set (default: 'sm_30')")
parser.add_argument("-p", "--precision", default='mixed', choices=['single','mixed','double'], parser.add_argument("-p", "--precision", default='mixed', choices=['single', 'mixed', 'double'],
help="set GPU kernel precision mode (default: mixed)") help="set GPU kernel precision mode (default: mixed)")
parser.add_argument("-e", "--extramake", default='standard', parser.add_argument("-e", "--extramake", default='standard',
help="set EXTRAMAKE variable in Makefile.auto to Makefile.lammps.<extramake>") help="set EXTRAMAKE variable in Makefile.auto to Makefile.lammps.<extramake>")
@ -56,9 +59,9 @@ parser.add_argument("-o", "--output",
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor output options are given # print help message and exit, if neither build nor output options are given
if args.build == False and not args.output: if not args.build and not args.output:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
hflag = 0 hflag = 0
eflag = 0 eflag = 0
@ -71,9 +74,12 @@ if args.build:
isuffix = args.machine isuffix = args.machine
arch = args.arch arch = args.arch
if args.precision == "double": precstr = "-D_DOUBLE_DOUBLE" if args.precision == "double":
elif args.precision == "mixed": precstr = "-D_SINGLE_DOUBLE" precstr = "-D_DOUBLE_DOUBLE"
else: precstr = "-D_SINGLE_SINGLE" elif args.precision == "mixed":
precstr = "-D_SINGLE_DOUBLE"
else:
precstr = "-D_SINGLE_SINGLE"
lmpsuffix = args.extramake lmpsuffix = args.extramake
@ -91,8 +97,8 @@ if args.output:
if not os.path.exists("Makefile.%s" % isuffix): if not os.path.exists("Makefile.%s" % isuffix):
sys.exit("lib/gpu/Makefile.%s does not exist" % isuffix) sys.exit("lib/gpu/Makefile.%s does not exist" % isuffix)
lines = open("Makefile.%s" % isuffix,'r').readlines() lines = open("Makefile.%s" % isuffix, 'r').readlines()
fp = open("Makefile.auto",'w') fp = open("Makefile.auto", 'w')
for line in lines: for line in lines:
words = line.split() words = line.split()
@ -101,13 +107,13 @@ for line in lines:
continue continue
if hflag and words[0] == "CUDA_HOME" and words[1] == '=': if hflag and words[0] == "CUDA_HOME" and words[1] == '=':
line = line.replace(words[2],hdir) line = line.replace(words[2], hdir)
if words[0] == "CUDA_ARCH" and words[1] == '=': if words[0] == "CUDA_ARCH" and words[1] == '=':
line = line.replace(words[2],"-arch=%s" % arch) line = line.replace(words[2], "-arch=%s" % arch)
if words[0] == "CUDA_PRECISION" and words[1] == '=': if words[0] == "CUDA_PRECISION" and words[1] == '=':
line = line.replace(words[2],precstr) line = line.replace(words[2], precstr)
if eflag and words[0] == "EXTRAMAKE" and words[1] == '=': if eflag and words[0] == "EXTRAMAKE" and words[1] == '=':
line = line.replace(words[2],"Makefile.lammps.%s" % lmpsuffix) line = line.replace(words[2], "Makefile.lammps.%s" % lmpsuffix)
fp.write(line) fp.write(line)
fp.close() fp.close()
@ -122,7 +128,7 @@ if makeflag:
n_cpus = get_cpus() n_cpus = get_cpus()
cmd = "make -f Makefile.auto clean; make -f Makefile.auto -j%d" % n_cpus cmd = "make -f Makefile.auto clean; make -f Makefile.auto -j%d" % n_cpus
try: try:
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8')) print("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -138,4 +144,3 @@ if makeflag:
if outflag: if outflag:
print("Creating new Makefile.%s" % osuffix) print("Creating new Makefile.%s" % osuffix)
shutil.copyfile("Makefile.auto", "Makefile.%s" % osuffix) shutil.copyfile("Makefile.auto", "Makefile.%s" % osuffix)

View File

@ -1,14 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# install.py tool to download, compile, and setup the kim-api library """
# used to automate the steps described in the README file in this dir Install.py tool to download, compile, and setup the kim-api library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,shutil import sys, os, subprocess, shutil
sys.path.append('..')
from install_helpers import fullpath,geturl
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -19,7 +22,7 @@ version = "kim-api-v1.9.5"
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-kim args="-b -v version -a kim-name" Syntax from src dir: make lib-kim args="-b -v version -a kim-name"
or: make lib-kim args="-b -a everything" or: make lib-kim args="-b -a everything"
or: make lib-kim args="-n -a kim-name" or: make lib-kim args="-n -a kim-name"
@ -64,13 +67,13 @@ parser.add_argument("-vv", "--verbose", action="store_true",
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path and args.nobuild == False: if not args.build and not args.path and not args.nobuild:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
addflag = args.add != None addflag = args.add is not None
addmodelname = args.add addmodelname = args.add
everythingflag = False everythingflag = False
if addflag and addmodelname == "everything": if addflag and addmodelname == "everything":
@ -81,7 +84,8 @@ verboseflag = args.verbose
if pathflag: if pathflag:
buildflag = False buildflag = False
kimdir = args.path kimdir = args.path
if not os.path.isdir(kimdir): sys.exit("KIM API path %s does not exist" % kimdir) if not os.path.isdir(kimdir):
sys.exit("KIM API path %s does not exist" % kimdir)
kimdir = fullpath(kimdir) kimdir = fullpath(kimdir)
url = "https://s3.openkim.org/kim-api/%s.txz" % version url = "https://s3.openkim.org/kim-api/%s.txz" % version
@ -96,7 +100,7 @@ if pathflag:
mkfile.write("print_dir:\n") mkfile.write("print_dir:\n")
mkfile.write(" @printf $(KIM_INSTALL_DIR)\n") mkfile.write(" @printf $(KIM_INSTALL_DIR)\n")
print("Created %s/Makefile.KIM_DIR\n using %s" % (thisdir,kimdir)) print("Created %s/Makefile.KIM_DIR\n using %s" % (thisdir, kimdir))
else: else:
kimdir = os.path.join(os.path.abspath(thisdir), "installed-" + version) kimdir = os.path.join(os.path.abspath(thisdir), "installed-" + version)
if args.nobuild and not os.path.isdir(kimdir): if args.nobuild and not os.path.isdir(kimdir):
@ -119,55 +123,60 @@ if buildflag:
mkfile.write("print_dir:\n") mkfile.write("print_dir:\n")
mkfile.write(" @printf $(KIM_INSTALL_DIR)\n") mkfile.write(" @printf $(KIM_INSTALL_DIR)\n")
print("Created %s/Makefile.KIM_DIR\n using %s" % (thisdir,kimdir)) print("Created %s/Makefile.KIM_DIR\n using %s" % (thisdir, kimdir))
# download entire kim-api tarball # download entire kim-api tarball
print("Downloading kim-api tarball ...") print("Downloading kim-api tarball ...")
geturl(url,"%s/%s.txz" % (thisdir,version)) geturl(url, "%s/%s.txz" % (thisdir, version))
print("Unpacking kim-api tarball ...") print("Unpacking kim-api tarball ...")
cmd = 'cd "%s"; rm -rf "%s"; tar -xJvf %s.txz' % (thisdir,version,version) cmd = 'cd "%s"; rm -rf "%s"; tar -xJvf %s.txz' % (thisdir, version, version)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
# configure kim-api # configure kim-api
print("Configuring kim-api ...") print("Configuring kim-api ...")
cmd = 'cd "%s/%s"; ./configure --prefix="%s"' % (thisdir,version,kimdir) cmd = 'cd "%s/%s"; ./configure --prefix="%s"' % (thisdir, version, kimdir)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
# build kim-api # build kim-api
print("Building kim-api ...") print("Building kim-api ...")
cmd = 'cd "%s/%s"; make' % (thisdir,version) cmd = 'cd "%s/%s"; make' % (thisdir, version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag: print(txt.decode("UTF-8")) if verboseflag:
print(txt.decode("UTF-8"))
# install kim-api # install kim-api
print("Installing kim-api ...") print("Installing kim-api ...")
cmd = 'cd "%s/%s"; make install' % (thisdir,version) cmd = 'cd "%s/%s"; make install' % (thisdir, version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag: print(txt.decode("UTF-8")) if verboseflag:
print(txt.decode("UTF-8"))
# remove source files # remove source files
print("Building and installing example Models") print("Building and installing example Models")
cmd = 'cd "%s/%s/examples"; make model-drivers-all-system' % (thisdir,version) cmd = 'cd "%s/%s/examples"; make model-drivers-all-system' % (thisdir, version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag: print (txt.decode("UTF-8")) if verboseflag:
cmd = 'cd "%s/%s/examples"; make models-all-system' % (thisdir,version) print(txt.decode("UTF-8"))
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) cmd = 'cd "%s/%s/examples"; make models-all-system' % (thisdir, version)
if verboseflag: print (txt.decode("UTF-8")) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))
print("Removing kim-api source and build files ...") print("Removing kim-api source and build files ...")
cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir,version,version) cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir, version, version)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
# add all OpenKIM models, if desired # add all OpenKIM models, if desired
if everythingflag: if everythingflag:
print("Adding all OpenKIM models, this will take a while ...") print("Adding all OpenKIM models, this will take a while ...")
cmd = '%s/bin/kim-api-v1-collections-management install system OpenKIM' % (kimdir) cmd = '%s/bin/kim-api-v1-collections-management install system OpenKIM' % (kimdir)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag: print(txt.decode("UTF-8")) if verboseflag:
print(txt.decode("UTF-8"))
# add single OpenKIM model # add single OpenKIM model
if addflag: if addflag:
@ -175,12 +184,13 @@ if addflag:
makefile_path = os.path.join(thisdir, "Makefile.KIM_DIR") makefile_path = os.path.join(thisdir, "Makefile.KIM_DIR")
if os.path.isfile(makefile_path): if os.path.isfile(makefile_path):
cmd = 'make --no-print-directory -f %s print_dir' % makefile_path cmd = 'make --no-print-directory -f %s print_dir' % makefile_path
kimdir = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) kimdir = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if not os.path.isdir(kimdir): if not os.path.isdir(kimdir):
sys.exit("\nkim-api is not installed") sys.exit("\nkim-api is not installed")
# download single model # download single model
cmd = '%s/bin/kim-api-v1-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname) cmd = '%s/bin/kim-api-v1-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag: print (txt.decode("UTF-8")) if verboseflag:
print(txt.decode("UTF-8"))

View File

@ -1,14 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to download, unpack, build, and link to the LATTE library """
# used to automate the steps described in the README file in this dir Install.py tool to download, unpack, build, and link to the LATTE library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,shutil,tarfile import sys, os, subprocess, shutil, tarfile
sys.path.append('..')
from install_helpers import get_cpus,fullpath,geturl,checkmd5sum
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -26,7 +29,7 @@ checksums = { \
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-latte args="-b" Syntax from src dir: make lib-latte args="-b"
or: make lib-latte args="-p /usr/local/latte" or: make lib-latte args="-p /usr/local/latte"
or: make lib-latte args="-m gfortran" or: make lib-latte args="-m gfortran"
@ -49,7 +52,7 @@ pgroup.add_argument("-b", "--build", action="store_true",
help="download and build the LATTE library") help="download and build the LATTE library")
pgroup.add_argument("-p", "--path", pgroup.add_argument("-p", "--path",
help="specify folder of existing LATTE installation") help="specify folder of existing LATTE installation")
parser.add_argument("-m", "--machine", choices=['gfortran','ifort','linalg','serial','mpi'], parser.add_argument("-m", "--machine", choices=['gfortran', 'ifort', 'linalg', 'serial', 'mpi'],
help="suffix of a Makefile.lammps.* file used for linking LAMMPS with this library") help="suffix of a Makefile.lammps.* file used for linking LAMMPS with this library")
parser.add_argument("-v", "--version", default=version, parser.add_argument("-v", "--version", default=version,
help="set version of LATTE to download and build (default: %s)" % version) help="set version of LATTE to download and build (default: %s)" % version)
@ -57,21 +60,22 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path: if not args.build and not args.path:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
homepath = fullpath(".") homepath = fullpath(".")
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
version = args.version version = args.version
suffixflag = args.machine != None suffixflag = args.machine is not None
suffix = args.machine suffix = args.machine
if pathflag: if pathflag:
lattedir = args.path lattedir = args.path
if not os.path.isdir(lattedir): sys.exit("LATTE path %s does not exist" % lattedir) if not os.path.isdir(lattedir):
sys.exit("LATTE path %s does not exist" % lattedir)
lattedir = fullpath(lattedir) lattedir = fullpath(lattedir)
homedir = "LATTE-%s" % version homedir = "LATTE-%s" % version
@ -79,17 +83,17 @@ homedir = "LATTE-%s" % version
if buildflag: if buildflag:
url = "https://github.com/lanl/LATTE/archive/v%s.tar.gz" % version url = "https://github.com/lanl/LATTE/archive/v%s.tar.gz" % version
lattepath = fullpath(homepath) lattepath = fullpath(homepath)
lattedir = os.path.join(lattepath,homedir) lattedir = os.path.join(lattepath, homedir)
# download and unpack LATTE tarball # download and unpack LATTE tarball
if buildflag: if buildflag:
print("Downloading LATTE ...") print("Downloading LATTE ...")
geturl(url,"LATTE.tar.gz") geturl(url, "LATTE.tar.gz")
# verify downloaded archive integrity via md5 checksum, if known. # verify downloaded archive integrity via md5 checksum, if known.
if version in checksums: if version in checksums:
if not checkmd5sum(checksums[version],'LATTE.tar.gz'): if not checkmd5sum(checksums[version], 'LATTE.tar.gz'):
sys.exit("Checksum for LATTE library does not match") sys.exit("Checksum for LATTE library does not match")
print("Unpacking LATTE ...") print("Unpacking LATTE ...")
@ -106,7 +110,7 @@ if buildflag:
print("Building LATTE ...") print("Building LATTE ...")
cmd = 'cd "%s"; make' % lattedir cmd = 'cd "%s"; make' % lattedir
try: try:
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
sys.exit("Make failed with:\n %s" % e.output.decode('UTF-8')) sys.exit("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -120,14 +124,15 @@ if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink") os.remove("liblink")
if os.path.isfile("filelink.o") or os.path.islink("filelink.o"): if os.path.isfile("filelink.o") or os.path.islink("filelink.o"):
os.remove("filelink.o") os.remove("filelink.o")
os.symlink(os.path.join(lattedir,'src'),'includelink') os.symlink(os.path.join(lattedir, 'src'), 'includelink')
os.symlink(lattedir,'liblink') os.symlink(lattedir, 'liblink')
os.symlink(os.path.join(lattedir,'src','latte_c_bind.o'),'filelink.o') os.symlink(os.path.join(lattedir, 'src', 'latte_c_bind.o'), 'filelink.o')
# copy Makefile.lammps.suffix to Makefile.lammps # copy Makefile.lammps.suffix to Makefile.lammps
if suffixflag or not os.path.exists("Makefile.lammps"): if suffixflag or not os.path.exists("Makefile.lammps"):
if suffix == None: suffix = 'gfortran' if suffix is None:
suffix = 'gfortran'
print("Creating Makefile.lammps") print("Creating Makefile.lammps")
if os.path.exists("Makefile.lammps.%s" % suffix): if os.path.exists("Makefile.lammps.%s" % suffix):
shutil.copyfile("Makefile.lammps.%s" % suffix, 'Makefile.lammps') shutil.copyfile("Makefile.lammps.%s" % suffix, 'Makefile.lammps')

View File

@ -1,20 +1,23 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to build the CSlib library """
# used to automate the steps described in the README file in this dir Install.py tool to build the CSlib library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,shutil import sys, os, subprocess, shutil
sys.path.append('..')
from install_helpers import get_cpus,fullpath
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-message args="-m" Syntax from src dir: make lib-message args="-m"
or: make lib-message args="-s -z" or: make lib-message args="-s -z"
Syntax from lib dir: python Install.py -m Syntax from lib dir: python Install.py -m
@ -37,9 +40,9 @@ parser.add_argument("-z", "--zmq", default=False, action="store_true",
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.mpi == False and args.serial == False: if not args.mpi and not args.serial:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
mpiflag = args.mpi mpiflag = args.mpi
serialflag = args.serial serialflag = args.serial
@ -50,7 +53,7 @@ zmqflag = args.zmq
# copy appropriate Makefile.lammps.* to Makefile.lammps # copy appropriate Makefile.lammps.* to Makefile.lammps
print("Building CSlib ...") print("Building CSlib ...")
srcdir = fullpath(os.path.join("cslib","src")) srcdir = fullpath(os.path.join("cslib", "src"))
if mpiflag and zmqflag: if mpiflag and zmqflag:
cmd = "make -C %s lib_parallel" % srcdir cmd = "make -C %s lib_parallel" % srcdir
@ -60,20 +63,22 @@ elif not mpiflag and zmqflag:
cmd = "make -C %s lib_serial" % srcdir cmd = "make -C %s lib_serial" % srcdir
elif not mpiflag and not zmqflag: elif not mpiflag and not zmqflag:
cmd = "make -C %s lib_serial zmq=no" % srcdir cmd = "make -C %s lib_serial zmq=no" % srcdir
print(cmd) print(cmd)
try: try:
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8')) print("Make failed with:\n %s" % e.output.decode('UTF-8'))
sys.exit(1) sys.exit(1)
slb=os.path.join(srcdir,"libcsnompi.a") slb = os.path.join(srcdir, "libcsnompi.a")
if mpiflag: slb = os.path.join(srcdir,"libcsmpi.a") if mpiflag:
shutil.copyfile(slb,os.path.join(srcdir,"libmessage.a")) slb = os.path.join(srcdir, "libcsmpi.a")
shutil.copyfile(slb, os.path.join(srcdir, "libmessage.a"))
smk="Makefile.lammps.nozmq" smk = "Makefile.lammps.nozmq"
if zmqflag: smk="Makefile.lammps.zmq" if zmqflag:
shutil.copyfile(smk,"Makefile.lammps") smk = "Makefile.lammps.zmq"
shutil.copyfile(smk, "Makefile.lammps")
print("Using %s for Makefile.lammps" % smk) print("Using %s for Makefile.lammps" % smk)

View File

@ -1,15 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to download, unpack, build, and link to the MS-CG library """
# used to automate the steps described in the README file in this dir Install.py tool to download, unpack, build, and link to the MS-CG library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,shutil,tarfile import sys, os, subprocess, shutil, tarfile
sys.path.append('..')
from install_helpers import get_cpus,fullpath,get_cpus,geturl
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -20,7 +22,7 @@ machine = "g++_simple"
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-mscg args="-p [path] -m [suffix] -v [version]" Syntax from src dir: make lib-mscg args="-p [path] -m [suffix] -v [version]"
or: make lib-mscg args="-b -m [suffix]" or: make lib-mscg args="-b -m [suffix]"
Syntax from lib dir: python Install.py -p [path] -m [suffix] -v [version] Syntax from lib dir: python Install.py -p [path] -m [suffix] -v [version]
@ -47,19 +49,19 @@ pgroup.add_argument("-p", "--path",
help="specify folder of existing MSCG installation") help="specify folder of existing MSCG installation")
parser.add_argument("-v", "--version", default=version, choices=checksums.keys(), parser.add_argument("-v", "--version", default=version, choices=checksums.keys(),
help="set version of MSCG to download and build (default: %s)" % version) help="set version of MSCG to download and build (default: %s)" % version)
parser.add_argument("-m", "--machine", default=machine, choices=['mpi','serial','g++_simple','intel_simple','lapack', 'mac'], parser.add_argument("-m", "--machine", default=machine, choices=['mpi', 'serial', 'g++_simple', 'intel_simple', 'lapack', 'mac'],
help="set machine suffix specifies which src/Make/Makefile.suffix to use. (default: %s)" % machine) help="set machine suffix specifies which src/Make/Makefile.suffix to use. (default: %s)" % machine)
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path: if not args.build and not args.path:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
mscgpath= args.path mscgpath = args.path
msuffix = args.machine msuffix = args.machine
mscgver = args.version mscgver = args.version
@ -70,7 +72,7 @@ tarname = "MS-CG-%s.tar.gz" % mscgver
tardir = "MSCG-release-%s" % mscgver tardir = "MSCG-release-%s" % mscgver
homepath = fullpath('.') homepath = fullpath('.')
homedir = os.path.join(homepath,tardir) homedir = os.path.join(homepath, tardir)
if pathflag: if pathflag:
if not os.path.isdir(mscgpath): if not os.path.isdir(mscgpath):
@ -81,41 +83,41 @@ if pathflag:
if buildflag: if buildflag:
print("Downloading MS-CG ...") print("Downloading MS-CG ...")
tarname = os.path.join(homepath,tarname) tarname = os.path.join(homepath, tarname)
geturl(url,tarname) geturl(url, tarname)
print("Unpacking MS-CG tarfile ...") print("Unpacking MS-CG tarfile ...")
if os.path.exists(os.path.join(homepath,tardir)): if os.path.exists(os.path.join(homepath, tardir)):
shutil.rmtree(os.path.join(homepath,tardir)) shutil.rmtree(os.path.join(homepath, tardir))
if tarfile.is_tarfile(tarname): if tarfile.is_tarfile(tarname):
tgz = tarfile.open(tarname) tgz = tarfile.open(tarname)
tgz.extractall(path=homepath) tgz.extractall(path=homepath)
os.remove(tarname) os.remove(tarname)
else: else:
sys.exit("File %s is not a supported archive",tarname) sys.exit("File %s is not a supported archive", tarname)
if os.path.basename(homedir) != tardir: if os.path.basename(homedir) != tardir:
if os.path.exists(homedir): if os.path.exists(homedir):
shutil.rmtree(homedir) shutil.rmtree(homedir)
os.rename(os.path.join(homepath,tardir),homedir) os.rename(os.path.join(homepath, tardir), homedir)
# build MS-CG # build MS-CG
if buildflag: if buildflag:
print("Building MS-CG ...") print("Building MS-CG ...")
mkf="Makefile.%s" % msuffix mkf = "Makefile.%s" % msuffix
mkp=os.path.join(homedir,'src','Make',mkf) mkp = os.path.join(homedir, 'src', 'Make', mkf)
if os.path.exists(mkp): if os.path.exists(mkp):
shutil.copyfile(mkp,os.path.join(homedir,'src',mkf)) shutil.copyfile(mkp, os.path.join(homedir, 'src', mkf))
elif os.path.exists("Makefile.%s" % msuffix): elif os.path.exists("Makefile.%s" % msuffix):
shutil.copyfile("Makefile.%s" % msuffix,os.path.join(homedir,'src',mkf)) shutil.copyfile("Makefile.%s" % msuffix, os.path.join(homedir, 'src', mkf))
else: else:
sys.exit("Cannot find Makefile.%s" % msuffix) sys.exit("Cannot find Makefile.%s" % msuffix)
try: try:
cmd = 'make -C %s -f Makefile.%s' % (os.path.join(homedir,'src'),msuffix) cmd = 'make -C %s -f Makefile.%s' % (os.path.join(homedir, 'src'), msuffix)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8')) print("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -124,9 +126,9 @@ if buildflag:
if not os.path.exists("Makefile.lammps"): if not os.path.exists("Makefile.lammps"):
print("Creating Makefile.lammps") print("Creating Makefile.lammps")
if os.path.exists("Makefile.lammps.%s" % msuffix): if os.path.exists("Makefile.lammps.%s" % msuffix):
shutil.copyfile('Makefile.lammps.%s' % msuffix,'Makefile.lammps') shutil.copyfile('Makefile.lammps.%s' % msuffix, 'Makefile.lammps')
else: else:
shutil.copyfile('Makefile.lammps.default','Makefile.lammps') shutil.copyfile('Makefile.lammps.default', 'Makefile.lammps')
else: print("Makefile.lammps exists. Please check its settings") else: print("Makefile.lammps exists. Please check its settings")
# create 2 links in lib/mscg to MS-CG src dir # create 2 links in lib/mscg to MS-CG src dir
@ -136,5 +138,5 @@ if os.path.isfile("includelink") or os.path.islink("includelink"):
os.remove("includelink") os.remove("includelink")
if os.path.isfile("liblink") or os.path.islink("liblink"): if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink") os.remove("liblink")
os.symlink(os.path.join(homedir,'src'),'includelink') os.symlink(os.path.join(homedir, 'src'), 'includelink')
os.symlink(os.path.join(homedir,'src'),'liblink') os.symlink(os.path.join(homedir, 'src'), 'liblink')

View File

@ -1,14 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to download, unpack, build, and link to the plumed2 library """
# used to automate the steps described in the README file in this dir Install.py tool to download, unpack, build, and link to the plumed2 library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,hashlib,shutil import sys, os, subprocess, shutil
sys.path.append('..')
from install_helpers import get_cpus,fullpath,geturl,checkmd5sum
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import get_cpus, fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -19,7 +22,7 @@ mode = "static"
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-plumed args="-b" Syntax from src dir: make lib-plumed args="-b"
or: make lib-plumed args="-b -v 2.4.3" or: make lib-plumed args="-b -v 2.4.3"
or: make lib-plumed args="-p /usr/local/plumed2 -m shared" or: make lib-plumed args="-p /usr/local/plumed2 -m shared"
@ -57,13 +60,13 @@ parser.add_argument("-m", "--mode", default=mode, choices=['static', 'shared', '
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path: if not args.build and not args.path:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
plumedpath= args.path plumedpath = args.path
homepath = fullpath('.') homepath = fullpath('.')
homedir = "%s/plumed2" % (homepath) homedir = "%s/plumed2" % (homepath)
@ -76,31 +79,31 @@ if pathflag:
# download and unpack plumed2 tarball # download and unpack plumed2 tarball
if buildflag: if buildflag:
url = "https://github.com/plumed/plumed2/releases/download/v%s/plumed-src-%s.tgz" % (version,version) url = "https://github.com/plumed/plumed2/releases/download/v%s/plumed-src-%s.tgz" % (version, version)
filename = "plumed-src-%s.tar.gz" %version filename = "plumed-src-%s.tar.gz" %version
print("Downloading plumed ...") print("Downloading plumed ...")
geturl(url,filename) geturl(url, filename)
# verify downloaded archive integrity via md5 checksum, if known. # verify downloaded archive integrity via md5 checksum, if known.
if version in checksums: if version in checksums:
if not checkmd5sum(checksums[version],filename): if not checkmd5sum(checksums[version], filename):
sys.exit("Checksum for plumed2 library does not match") sys.exit("Checksum for plumed2 library does not match")
print("Unpacking plumed2 source tarball ...") print("Unpacking plumed2 source tarball ...")
if os.path.exists("%s/plumed-%s" % (homepath,version)): if os.path.exists("%s/plumed-%s" % (homepath, version)):
shutil.rmtree("%s/plumed-%s" % (homepath,version)) shutil.rmtree("%s/plumed-%s" % (homepath, version))
if os.path.exists(homedir): if os.path.exists(homedir):
shutil.rmtree(homedir) shutil.rmtree(homedir)
cmd = 'cd "%s"; tar -xzvf %s' % (homepath,filename) cmd = 'cd "%s"; tar -xzvf %s' % (homepath, filename)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
os.remove(os.path.join(homepath,filename)) os.remove(os.path.join(homepath, filename))
# build plumed # build plumed
print("Building plumed ...") print("Building plumed ...")
n_cpus = get_cpus() n_cpus = get_cpus()
cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-modules=all --enable-static-patch ; make -j%d ; make install' % (homepath,version,homedir,n_cpus) cmd = 'cd %s/plumed-%s; ./configure --prefix=%s --enable-modules=all --enable-static-patch ; make -j%d ; make install' % (homepath, version, homedir, n_cpus)
try: try:
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8')) print("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -113,20 +116,20 @@ if os.path.isfile("includelink") or os.path.islink("includelink"):
os.remove("includelink") os.remove("includelink")
if os.path.isfile("liblink") or os.path.islink("liblink"): if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink") os.remove("liblink")
os.symlink(os.path.join(homedir,'include'),'includelink') os.symlink(os.path.join(homedir, 'include'), 'includelink')
libpath=os.path.join(homedir,'lib64') libpath = os.path.join(homedir, 'lib64')
if not os.path.exists(libpath): libpath=os.path.join(homedir,'lib') if not os.path.exists(libpath):
os.symlink(libpath,'liblink') libpath = os.path.join(homedir, 'lib')
os.symlink(libpath, 'liblink')
if os.path.isfile("Makefile.lammps.%s" % mode): if os.path.isfile("Makefile.lammps.%s" % mode):
print("Creating Makefile.lammps") print("Creating Makefile.lammps")
plumedinc = os.path.join('liblink','plumed','src','lib','Plumed.inc.' + mode) plumedinc = os.path.join('liblink', 'plumed', 'src', 'lib', 'Plumed.inc.' + mode)
lines1 = open(plumedinc,'r').readlines() lines1 = open(plumedinc, 'r').readlines()
lines2 = open("Makefile.lammps.%s" % mode,'r').readlines() lines2 = open("Makefile.lammps.%s" % mode, 'r').readlines()
fp = open("Makefile.lammps",'w') fp = open("Makefile.lammps", 'w')
fp.write(os.path.join("PLUMED_LIBDIR=",homedir,"lib\n")) fp.write(os.path.join("PLUMED_LIBDIR=", homedir, "lib\n"))
for line in lines1: for line in lines1:
fp.write(line) fp.write(line)
for line in lines2: for line in lines2:
fp.write(line) fp.write(line)
fp.close() fp.close()

564
lib/pylint.rc Normal file
View File

@ -0,0 +1,564 @@
# pylint configuration for checking Install.py files in the lib folder and its subdirs
[MASTER]
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-whitelist=
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS
# Add files or directories matching the regex patterns to the blacklist. The
# regex matches against base names, not paths.
ignore-patterns=
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
init-hook=sys.path.append('..')
# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
# number of processors available to use.
jobs=1
# Control the amount of potential inferred values when inferring a single
# object. This can help the performance when dealing with large functions or
# complex, nested conditions.
limit-inference-results=100
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
# Pickle collected data for later comparisons.
persistent=yes
# Specify a configuration file.
#rcfile=
# When enabled, pylint would attempt to guess common misconfiguration and emit
# user-friendly hints instead of false-positive error messages.
suggestion-mode=yes
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
confidence=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once). You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
disable=print-statement,
parameter-unpacking,
unpacking-in-except,
old-raise-syntax,
backtick,
long-suffix,
old-ne-operator,
old-octal-literal,
import-star-module-level,
non-ascii-bytes-literal,
raw-checker-failed,
bad-inline-option,
locally-disabled,
locally-enabled,
file-ignored,
suppressed-message,
useless-suppression,
deprecated-pragma,
use-symbolic-message-instead,
apply-builtin,
basestring-builtin,
buffer-builtin,
cmp-builtin,
coerce-builtin,
execfile-builtin,
file-builtin,
long-builtin,
raw_input-builtin,
reduce-builtin,
standarderror-builtin,
unicode-builtin,
xrange-builtin,
coerce-method,
delslice-method,
getslice-method,
setslice-method,
no-absolute-import,
old-division,
dict-iter-method,
dict-view-method,
next-method-called,
metaclass-assignment,
indexing-exception,
raising-string,
reload-builtin,
oct-method,
hex-method,
nonzero-method,
cmp-method,
input-builtin,
round-builtin,
intern-builtin,
unichr-builtin,
map-builtin-not-iterating,
zip-builtin-not-iterating,
range-builtin-not-iterating,
filter-builtin-not-iterating,
using-cmp-argument,
eq-without-hash,
div-method,
idiv-method,
rdiv-method,
exception-message-attribute,
invalid-str-codec,
sys-max-int,
bad-python3-import,
deprecated-string-function,
deprecated-str-translate-call,
deprecated-itertools-function,
deprecated-types-field,
next-method-defined,
dict-items-not-iterating,
dict-keys-not-iterating,
dict-values-not-iterating,
deprecated-operator-function,
deprecated-urllib-function,
xreadlines-attribute,
deprecated-sys-function,
exception-escape,
comprehension-escape,
invalid-name,
bad-indentation,
multiple-imports,
line-too-long
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
enable=c-extension-no-member
[REPORTS]
# Python expression which should return a note less than 10 (10 is the highest
# note). You have access to the variables errors warning, statement which
# respectively contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (RP0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# Template used to display messages. This is a python new-style format string
# used to format the message information. See doc for all details.
#msg-template=
# Set the output format. Available formats are text, parseable, colorized, json
# and msvs (visual studio). You can also give a reporter class, e.g.
# mypackage.mymodule.MyReporterClass.
output-format=text
# Tells whether to display a full report or only the messages.
reports=no
# Activate the evaluation score.
score=yes
[REFACTORING]
# Maximum number of nested blocks for function / method body
max-nested-blocks=5
# Complete name of functions that never returns. When checking for
# inconsistent-return-statements if a never returning function is called then
# it will be considered as an explicit return statement and no message will be
# printed.
never-returning-functions=sys.exit
[FORMAT]
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format=
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren=4
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# Maximum number of characters on a single line.
max-line-length=100
# Maximum number of lines in a module.
max-module-lines=1000
# List of optional constructs for which whitespace checking is disabled. `dict-
# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
# `trailing-comma` allows a space between comma and closing bracket: (a, ).
# `empty-line` allows space-only lines.
no-space-check=trailing-comma,
dict-separator
# Allow the body of a class to be on the same line as the declaration if body
# contains single statement.
single-line-class-stmt=no
# Allow the body of an if to be on the same line as the test if there is no
# else.
single-line-if-stmt=no
[VARIABLES]
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
additional-builtins=
# Tells whether unused global variables should be treated as a violation.
allow-global-unused-variables=yes
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
callbacks=cb_,
_cb
# A regular expression matching the name of dummy variables (i.e. expected to
# not be used).
dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
# Argument names that match this expression will be ignored. Default to name
# with leading underscore.
ignored-argument-names=_.*|^ignored_|^unused_
# Tells whether we should check for unused import in __init__ files.
init-import=no
# List of qualified module names which can have objects that can redefine
# builtins.
redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
[SIMILARITIES]
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# Ignore imports when computing similarities.
ignore-imports=no
# Minimum lines number of a similarity.
min-similarity-lines=4
[SPELLING]
# Limits count of emitted suggestions for spelling mistakes.
max-spelling-suggestions=4
# Spelling dictionary name. Available dictionaries: none. To make it working
# install python-enchant package..
spelling-dict=
# List of comma separated words that should not be checked.
spelling-ignore-words=
# A path to a file that contains private dictionary; one word per line.
spelling-private-dict-file=
# Tells whether to store unknown words to indicated private dictionary in
# --spelling-private-dict-file option instead of raising a message.
spelling-store-unknown-words=no
[LOGGING]
# Logging modules to check that the string format arguments are in logging
# function parameter format.
logging-modules=logging
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,
XXX,
TODO
[TYPECHECK]
# List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers.
contextmanager-decorators=contextlib.contextmanager
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# Tells whether to warn about missing members when the owner of the attribute
# is inferred to be None.
ignore-none=yes
# This flag controls whether pylint should warn about no-member and similar
# checks whenever an opaque object is returned when inferring. The inference
# can return multiple potential results while evaluating a Python object, but
# some branches might not be evaluated, which results in partial inference. In
# that case, it might be useful to still emit no-member and other checks for
# the rest of the inferred objects.
ignore-on-opaque-inference=yes
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
ignored-classes=optparse.Values,thread._local,_thread._local
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=
# Show a hint with possible names when a member name was not found. The aspect
# of finding the hint is based on edit distance.
missing-member-hint=yes
# The minimum edit distance a name should have in order to be considered a
# similar match for a missing member name.
missing-member-hint-distance=1
# The total number of similar names that should be taken in consideration when
# showing a hint for a missing member.
missing-member-max-choices=1
[BASIC]
# Naming style matching correct argument names.
argument-naming-style=snake_case
# Regular expression matching correct argument names. Overrides argument-
# naming-style.
#argument-rgx=
# Naming style matching correct attribute names.
attr-naming-style=snake_case
# Regular expression matching correct attribute names. Overrides attr-naming-
# style.
#attr-rgx=
# Bad variable names which should always be refused, separated by a comma.
bad-names=foo,
bar,
baz,
toto,
tutu,
tata
# Naming style matching correct class attribute names.
class-attribute-naming-style=any
# Regular expression matching correct class attribute names. Overrides class-
# attribute-naming-style.
#class-attribute-rgx=
# Naming style matching correct class names.
class-naming-style=PascalCase
# Regular expression matching correct class names. Overrides class-naming-
# style.
#class-rgx=
# Naming style matching correct constant names.
const-naming-style=UPPER_CASE
# Regular expression matching correct constant names. Overrides const-naming-
# style.
#const-rgx=
# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
# Naming style matching correct function names.
function-naming-style=snake_case
# Regular expression matching correct function names. Overrides function-
# naming-style.
#function-rgx=
# Good variable names which should always be accepted, separated by a comma.
good-names=i,
j,
k,
ex,
Run,
_
# Include a hint for the correct naming format with invalid-name.
include-naming-hint=no
# Naming style matching correct inline iteration names.
inlinevar-naming-style=any
# Regular expression matching correct inline iteration names. Overrides
# inlinevar-naming-style.
#inlinevar-rgx=
# Naming style matching correct method names.
method-naming-style=snake_case
# Regular expression matching correct method names. Overrides method-naming-
# style.
#method-rgx=
# Naming style matching correct module names.
module-naming-style=snake_case
# Regular expression matching correct module names. Overrides module-naming-
# style.
#module-rgx=
# Colon-delimited sets of names that determine each other's naming style when
# the name regexes allow several styles.
name-group=
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
# List of decorators that produce properties, such as abc.abstractproperty. Add
# to this list to register other decorators that produce valid properties.
# These decorators are taken in consideration only for invalid-name.
property-classes=abc.abstractproperty
# Naming style matching correct variable names.
variable-naming-style=snake_case
# Regular expression matching correct variable names. Overrides variable-
# naming-style.
#variable-rgx=
[IMPORTS]
# Allow wildcard imports from modules that define __all__.
allow-wildcard-with-all=no
# Analyse import fallback blocks. This can be used to support both Python 2 and
# 3 compatible code, which means that the block might have code that exists
# only in one or another interpreter, leading to false positives when analysed.
analyse-fallback-blocks=no
# Deprecated modules which should not be used, separated by a comma.
deprecated-modules=optparse,tkinter.tix
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled).
ext-import-graph=
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report RP0402 must not be disabled).
import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled).
int-import-graph=
# Force import order to recognize a module as part of the standard
# compatibility libraries.
known-standard-library=
# Force import order to recognize a module as part of a third party library.
known-third-party=enchant
[DESIGN]
# Maximum number of arguments for function / method.
max-args=5
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Maximum number of boolean expressions in an if statement.
max-bool-expr=5
# Maximum number of branch for function / method body.
max-branches=12
# Maximum number of locals for function / method body.
max-locals=15
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
# Maximum number of return / yield for function / method body.
max-returns=6
# Maximum number of statements in function / method body.
max-statements=50
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
[CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,
__new__,
setUp
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected=_asdict,
_fields,
_replace,
_source,
_make
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=cls
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "Exception".
overgeneral-exceptions=Exception

View File

@ -1,14 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to download, unpack, build, and link to the ScaFaCoS library """
# used to automate the steps described in the README file in this dir Install.py tool to download, unpack, build, and link to the ScaFaCoS library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,shutil,tarfile import sys, os, subprocess, shutil, tarfile
sys.path.append('..')
from install_helpers import fullpath,geturl,get_cpus,checkmd5sum
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, get_cpus, checkmd5sum
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -24,7 +27,7 @@ checksums = { \
# extra help message # extra help message
help = """ HELP = """
Syntax from src dir: make lib-scafacos args="-b" Syntax from src dir: make lib-scafacos args="-b"
or: make lib-scafacos args="-p /usr/local/scafacos" or: make lib-scafacos args="-p /usr/local/scafacos"
Syntax from lib dir: python Install.py -b Syntax from lib dir: python Install.py -b
@ -49,23 +52,23 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path: if not args.build and not args.path:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
version = args.version version = args.version
homepath = fullpath(".") homepath = fullpath(".")
scafacospath = os.path.join(homepath,"scafacos-%s" % version) scafacospath = os.path.join(homepath, "scafacos-%s" % version)
if pathflag: if pathflag:
scafacospath = args.path scafacospath = args.path
if not os.path.isdir(os.path.join(scafacospath,"include")): if not os.path.isdir(os.path.join(scafacospath, "include")):
sys.exit("ScaFaCoS include path for %s does not exist" % scafacospath) sys.exit("ScaFaCoS include path for %s does not exist" % scafacospath)
if (not os.path.isdir(os.path.join(scafacospath,"lib64"))) \ if (not os.path.isdir(os.path.join(scafacospath, "lib64"))) \
and (not os.path.isdir(os.path.join(scafacospath,"lib"))): and (not os.path.isdir(os.path.join(scafacospath, "lib"))):
sys.exit("ScaFaCoS lib path for %s does not exist" % scafacospath) sys.exit("ScaFaCoS lib path for %s does not exist" % scafacospath)
scafacospath = fullpath(scafacospath) scafacospath = fullpath(scafacospath)
@ -73,19 +76,19 @@ if pathflag:
if buildflag: if buildflag:
print("Downloading ScaFaCoS ...") print("Downloading ScaFaCoS ...")
geturl(url,"%s/scafacos-%s.tar.gz" % (homepath,version)) geturl(url, "%s/scafacos-%s.tar.gz" % (homepath, version))
# verify downloaded archive integrity via md5 checksum, if known. # verify downloaded archive integrity via md5 checksum, if known.
if version in checksums: if version in checksums:
if not checkmd5sum(checksums[version],'%s/scafacos-%s.tar.gz' % (homepath,version)): if not checkmd5sum(checksums[version], '%s/scafacos-%s.tar.gz' % (homepath, version)):
sys.exit("Checksum for ScaFaCoS library does not match") sys.exit("Checksum for ScaFaCoS library does not match")
print("Unpacking ScaFaCoS tarball ...") print("Unpacking ScaFaCoS tarball ...")
if os.path.exists(scafacospath): if os.path.exists(scafacospath):
shutil.rmtree(scafacospath) shutil.rmtree(scafacospath)
tarname = os.path.join(homepath,"%s.tar.gz" % scafacospath) tarname = os.path.join(homepath, "%s.tar.gz" % scafacospath)
if tarfile.is_tarfile(tarname): if tarfile.is_tarfile(tarname):
tgz=tarfile.open(tarname) tgz = tarfile.open(tarname)
tgz.extractall(path=homepath) tgz.extractall(path=homepath)
os.remove(tarname) os.remove(tarname)
else: else:
@ -94,9 +97,9 @@ if buildflag:
# build ScaFaCoS # build ScaFaCoS
print("Building ScaFaCoS ...") print("Building ScaFaCoS ...")
n_cpu = get_cpus() n_cpu = get_cpus()
cmd = 'cd "%s"; ./configure --prefix="%s" --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --with-internal-fftw --with-internal-pfft --with-internal-pnfft CC=mpicc FC=mpif90 CXX=mpicxx F77=; make -j%d; make install' % (scafacospath,os.path.join(homepath,'build'),n_cpu) cmd = 'cd "%s"; ./configure --prefix="%s" --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --with-internal-fftw --with-internal-pfft --with-internal-pnfft CC=mpicc FC=mpif90 CXX=mpicxx F77=; make -j%d; make install' % (scafacospath, os.path.join(homepath, 'build'), n_cpu)
try: try:
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
sys.exit("Make failed with:\n %s" % e.output.decode('UTF-8')) sys.exit("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -109,11 +112,11 @@ if os.path.isfile("includelink") or os.path.islink("includelink"):
if os.path.isfile("liblink") or os.path.islink("liblink"): if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink") os.remove("liblink")
if buildflag: if buildflag:
os.symlink(os.path.join(homepath,'build','include'),'includelink') os.symlink(os.path.join(homepath, 'build', 'include'), 'includelink')
os.symlink(os.path.join(homepath,'build','lib'),'liblink') os.symlink(os.path.join(homepath, 'build', 'lib'), 'liblink')
else: else:
os.symlink(os.path.join(scafacospath,'include'),'includelink') os.symlink(os.path.join(scafacospath, 'include'), 'includelink')
if os.path.isdir(os.path.join(scafacospath,"lib64")): if os.path.isdir(os.path.join(scafacospath, "lib64")):
os.symlink(os.path.join(scafacospath,'lib64'),'liblink') os.symlink(os.path.join(scafacospath, 'lib64'), 'liblink')
else: else:
os.symlink(os.path.join(scafacospath,'lib'),'liblink') os.symlink(os.path.join(scafacospath, 'lib'), 'liblink')

View File

@ -1,14 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to download, unpack, and point to the Eigen library """
# used to automate the steps described in the README file in this dir Install.py tool to download, unpack, and point to the Eigen library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,glob,subprocess,shutil,tarfile import sys, os, glob, shutil, tarfile
sys.path.append('..')
from install_helpers import fullpath,geturl,checkmd5sum
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -27,7 +30,7 @@ checksums = { \
# help message # help message
help = """ HELP = """
Syntax from src dir: make lib-smd args="-b" Syntax from src dir: make lib-smd args="-b"
or: make lib-smd args="-p /usr/include/eigen3" or: make lib-smd args="-p /usr/include/eigen3"
@ -52,20 +55,21 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path: if not args.build and not args.path:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
homepath = fullpath(".") homepath = fullpath(".")
eigenpath = os.path.join(homepath,"eigen3") eigenpath = os.path.join(homepath, "eigen3")
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
version = args.version version = args.version
if pathflag: if pathflag:
eigenpath = args.path eigenpath = args.path
if not os.path.isdir(eigenpath): sys.exit("Eigen path %s does not exist" % eigenpath) if not os.path.isdir(eigenpath):
sys.exit("Eigen path %s does not exist" % eigenpath)
eigenpath = fullpath(eigenpath) eigenpath = fullpath(eigenpath)
# download and unpack Eigen tarball # download and unpack Eigen tarball
@ -73,19 +77,19 @@ if pathflag:
if buildflag: if buildflag:
print("Downloading Eigen ...") print("Downloading Eigen ...")
eigentar = os.path.join(homepath,tarball) eigentar = os.path.join(homepath, tarball)
url = "http://bitbucket.org/eigen/eigen/get/%s.tar.gz" % version url = "http://bitbucket.org/eigen/eigen/get/%s.tar.gz" % version
geturl(url,eigentar) geturl(url, eigentar)
# verify downloaded archive integrity via md5 checksum, if known. # verify downloaded archive integrity via md5 checksum, if known.
if version in checksums: if version in checksums:
print("checking version %s\n" % version) print("checking version %s\n" % version)
if not checkmd5sum(checksums[version],eigentar): if not checkmd5sum(checksums[version], eigentar):
sys.exit("Checksum for Eigen library does not match") sys.exit("Checksum for Eigen library does not match")
print("Cleaning up old folders ...") print("Cleaning up old folders ...")
edir = glob.glob(os.path.join(homepath,"eigen-eigen-*")) edir = glob.glob(os.path.join(homepath, "eigen-eigen-*"))
edir.append(eigenpath) edir.append(eigenpath)
for one in edir: for one in edir:
if os.path.isdir(one): if os.path.isdir(one):
@ -98,8 +102,8 @@ if buildflag:
os.remove(eigentar) os.remove(eigentar)
else: else:
sys.exit("File %s is not a supported archive" % eigentar) sys.exit("File %s is not a supported archive" % eigentar)
edir = glob.glob(os.path.join(homepath,"eigen-eigen-*")) edir = glob.glob(os.path.join(homepath, "eigen-eigen-*"))
os.rename(edir[0],eigenpath) os.rename(edir[0], eigenpath)
# create link in lib/smd to Eigen src dir # create link in lib/smd to Eigen src dir
@ -107,4 +111,4 @@ print("Creating link to Eigen include folder")
if os.path.isfile("includelink") or os.path.islink("includelink"): if os.path.isfile("includelink") or os.path.islink("includelink"):
os.remove("includelink") os.remove("includelink")
linkdir = eigenpath linkdir = eigenpath
os.symlink(linkdir,'includelink') os.symlink(linkdir, 'includelink')

View File

@ -1,14 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
# Install.py tool to download, unpack, build, and link to the Voro++ library """
# used to automate the steps described in the README file in this dir Install.py tool to download, unpack, build, and link to the Voro++ library
used to automate the steps described in the README file in this dir
"""
from __future__ import print_function from __future__ import print_function
import sys,os,re,subprocess,shutil,tarfile import sys, os, subprocess, shutil, tarfile
sys.path.append('..')
from install_helpers import get_cpus,fullpath,geturl,checkmd5sum
from argparse import ArgumentParser from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py', parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script") description="LAMMPS library build wrapper script")
@ -24,7 +27,7 @@ checksums = { \
# extra help message # extra help message
help = """ HELP = """
Syntax from src dir: make lib-voronoi args="-b" Syntax from src dir: make lib-voronoi args="-b"
or: make lib-voronoi args="-p /usr/local/voro++-0.4.6" or: make lib-voronoi args="-p /usr/local/voro++-0.4.6"
or: make lib-voronoi args="-b -v voro++-0.4.6" or: make lib-voronoi args="-b -v voro++-0.4.6"
@ -52,16 +55,16 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args() args = parser.parse_args()
# print help message and exit, if neither build nor path options are given # print help message and exit, if neither build nor path options are given
if args.build == False and not args.path: if not args.build and not args.path:
parser.print_help() parser.print_help()
sys.exit(help) sys.exit(HELP)
buildflag = args.build buildflag = args.build
pathflag = args.path != None pathflag = args.path is not None
voropath = args.path voropath = args.path
homepath = fullpath(".") homepath = fullpath(".")
homedir = os.path.join(homepath,version) homedir = os.path.join(homepath, version)
if pathflag: if pathflag:
if not os.path.isdir(voropath): if not os.path.isdir(voropath):
@ -72,17 +75,18 @@ if pathflag:
if buildflag: if buildflag:
print("Downloading Voro++ ...") print("Downloading Voro++ ...")
vorotar = os.path.join(homepath,version) + '.tar.gz' vorotar = os.path.join(homepath, version) + '.tar.gz'
geturl(url,vorotar) geturl(url, vorotar)
# verify downloaded archive integrity via md5 checksum, if known. # verify downloaded archive integrity via md5 checksum, if known.
if version in checksums: if version in checksums:
if not checkmd5sum(checksums[version],vorotar): if not checkmd5sum(checksums[version], vorotar):
sys.exit("Checksum for Voro++ library does not match") sys.exit("Checksum for Voro++ library does not match")
print("Unpacking Voro++ tarball ...") print("Unpacking Voro++ tarball ...")
srcpath = os.path.join(homepath,version) srcpath = os.path.join(homepath, version)
if os.path.exists(srcpath): shutil.rmtree(srcpath) if os.path.exists(srcpath):
shutil.rmtree(srcpath)
if tarfile.is_tarfile(vorotar): if tarfile.is_tarfile(vorotar):
tgz = tarfile.open(vorotar) tgz = tarfile.open(vorotar)
tgz.extractall(path=homepath) tgz.extractall(path=homepath)
@ -90,8 +94,9 @@ if buildflag:
else: else:
sys.exit("File %s is not a supported archive" % vorotar) sys.exit("File %s is not a supported archive" % vorotar)
if os.path.basename(homedir) != version: if os.path.basename(homedir) != version:
if os.path.exists(homedir): shutil.rmtree(homedir) if os.path.exists(homedir):
os.rename(srcpath,homedir) shutil.rmtree(homedir)
os.rename(srcpath, homedir)
# build Voro++ # build Voro++
@ -99,7 +104,7 @@ if buildflag:
print("Building Voro++ ...") print("Building Voro++ ...")
cmd = 'cd "%s"; make CXX=g++ CFLAGS="-fPIC -O3"' % homedir cmd = 'cd "%s"; make CXX=g++ CFLAGS="-fPIC -O3"' % homedir
try: try:
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8')) print("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -112,5 +117,5 @@ if os.path.isfile("includelink") or os.path.islink("includelink"):
os.remove("includelink") os.remove("includelink")
if os.path.isfile("liblink") or os.path.islink("liblink"): if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink") os.remove("liblink")
os.symlink(os.path.join(homedir,'src'),'includelink') os.symlink(os.path.join(homedir, 'src'), 'includelink')
os.symlink(os.path.join(homedir,'src'),'liblink') os.symlink(os.path.join(homedir, 'src'), 'liblink')