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

View File

@ -1,20 +1,23 @@
#!/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
import sys,os,subprocess,shutil
import sys, os, subprocess, shutil
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import get_cpus
from argparse import ArgumentParser
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
# 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 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',
help="suffix of Makefile.machine used as base for customizing Makefile.auto")
parser.add_argument("-a", "--arch", default='sm_30',
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'],
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'],
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)")
parser.add_argument("-e", "--extramake", default='standard',
help="set EXTRAMAKE variable in Makefile.auto to Makefile.lammps.<extramake>")
@ -56,9 +59,9 @@ parser.add_argument("-o", "--output",
args = parser.parse_args()
# 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()
sys.exit(help)
sys.exit(HELP)
hflag = 0
eflag = 0
@ -71,9 +74,12 @@ if args.build:
isuffix = args.machine
arch = args.arch
if args.precision == "double": precstr = "-D_DOUBLE_DOUBLE"
elif args.precision == "mixed": precstr = "-D_SINGLE_DOUBLE"
else: precstr = "-D_SINGLE_SINGLE"
if args.precision == "double":
precstr = "-D_DOUBLE_DOUBLE"
elif args.precision == "mixed":
precstr = "-D_SINGLE_DOUBLE"
else:
precstr = "-D_SINGLE_SINGLE"
lmpsuffix = args.extramake
@ -91,8 +97,8 @@ if args.output:
if not os.path.exists("Makefile.%s" % isuffix):
sys.exit("lib/gpu/Makefile.%s does not exist" % isuffix)
lines = open("Makefile.%s" % isuffix,'r').readlines()
fp = open("Makefile.auto",'w')
lines = open("Makefile.%s" % isuffix, 'r').readlines()
fp = open("Makefile.auto", 'w')
for line in lines:
words = line.split()
@ -101,13 +107,13 @@ for line in lines:
continue
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] == '=':
line = line.replace(words[2],"-arch=%s" % arch)
line = line.replace(words[2], "-arch=%s" % arch)
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] == '=':
line = line.replace(words[2],"Makefile.lammps.%s" % lmpsuffix)
line = line.replace(words[2], "Makefile.lammps.%s" % lmpsuffix)
fp.write(line)
fp.close()
@ -122,7 +128,7 @@ if makeflag:
n_cpus = get_cpus()
cmd = "make -f Makefile.auto clean; make -f Makefile.auto -j%d" % n_cpus
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'))
except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -138,4 +144,3 @@ if makeflag:
if outflag:
print("Creating new Makefile.%s" % osuffix)
shutil.copyfile("Makefile.auto", "Makefile.%s" % osuffix)

View File

@ -1,14 +1,17 @@
#!/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
import sys,os,re,subprocess,shutil
sys.path.append('..')
from install_helpers import fullpath,geturl
import sys, os, subprocess, shutil
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -19,7 +22,7 @@ version = "kim-api-v1.9.5"
# help message
help = """
HELP = """
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="-n -a kim-name"
@ -64,13 +67,13 @@ parser.add_argument("-vv", "--verbose", action="store_true",
args = parser.parse_args()
# 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()
sys.exit(help)
sys.exit(HELP)
buildflag = args.build
pathflag = args.path != None
addflag = args.add != None
pathflag = args.path is not None
addflag = args.add is not None
addmodelname = args.add
everythingflag = False
if addflag and addmodelname == "everything":
@ -81,7 +84,8 @@ verboseflag = args.verbose
if pathflag:
buildflag = False
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)
url = "https://s3.openkim.org/kim-api/%s.txz" % version
@ -96,7 +100,7 @@ if pathflag:
mkfile.write("print_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:
kimdir = os.path.join(os.path.abspath(thisdir), "installed-" + version)
if args.nobuild and not os.path.isdir(kimdir):
@ -119,55 +123,60 @@ if buildflag:
mkfile.write("print_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
print("Downloading kim-api tarball ...")
geturl(url,"%s/%s.txz" % (thisdir,version))
geturl(url, "%s/%s.txz" % (thisdir, version))
print("Unpacking kim-api tarball ...")
cmd = 'cd "%s"; rm -rf "%s"; tar -xJvf %s.txz' % (thisdir,version,version)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
cmd = 'cd "%s"; rm -rf "%s"; tar -xJvf %s.txz' % (thisdir, version, version)
subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
# configure kim-api
print("Configuring kim-api ...")
cmd = 'cd "%s/%s"; ./configure --prefix="%s"' % (thisdir,version,kimdir)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
cmd = 'cd "%s/%s"; ./configure --prefix="%s"' % (thisdir, version, kimdir)
subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
# build kim-api
print("Building kim-api ...")
cmd = 'cd "%s/%s"; make' % (thisdir,version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
if verboseflag: print(txt.decode("UTF-8"))
cmd = 'cd "%s/%s"; make' % (thisdir, version)
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))
# install kim-api
print("Installing kim-api ...")
cmd = 'cd "%s/%s"; make install' % (thisdir,version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
if verboseflag: print(txt.decode("UTF-8"))
cmd = 'cd "%s/%s"; make install' % (thisdir, version)
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))
# remove source files
print("Building and installing example Models")
cmd = 'cd "%s/%s/examples"; make model-drivers-all-system' % (thisdir,version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
if verboseflag: print (txt.decode("UTF-8"))
cmd = 'cd "%s/%s/examples"; make models-all-system' % (thisdir,version)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
if verboseflag: print (txt.decode("UTF-8"))
cmd = 'cd "%s/%s/examples"; make model-drivers-all-system' % (thisdir, version)
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))
cmd = 'cd "%s/%s/examples"; make models-all-system' % (thisdir, version)
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 ...")
cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir,version,version)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir, version, version)
subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
# add all OpenKIM models, if desired
if everythingflag:
print("Adding all OpenKIM models, this will take a while ...")
cmd = '%s/bin/kim-api-v1-collections-management install system OpenKIM' % (kimdir)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
if verboseflag: print(txt.decode("UTF-8"))
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))
# add single OpenKIM model
if addflag:
@ -175,12 +184,13 @@ if addflag:
makefile_path = os.path.join(thisdir, "Makefile.KIM_DIR")
if os.path.isfile(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):
sys.exit("\nkim-api is not installed")
# download single model
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)
if verboseflag: print (txt.decode("UTF-8"))
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
if verboseflag:
print(txt.decode("UTF-8"))

View File

@ -1,14 +1,17 @@
#!/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
import sys,os,re,subprocess,shutil,tarfile
sys.path.append('..')
from install_helpers import get_cpus,fullpath,geturl,checkmd5sum
import sys, os, subprocess, shutil, tarfile
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -26,7 +29,7 @@ checksums = { \
# help message
help = """
HELP = """
Syntax from src dir: make lib-latte args="-b"
or: make lib-latte args="-p /usr/local/latte"
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")
pgroup.add_argument("-p", "--path",
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")
parser.add_argument("-v", "--version", default=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()
# 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()
sys.exit(help)
sys.exit(HELP)
homepath = fullpath(".")
buildflag = args.build
pathflag = args.path != None
pathflag = args.path is not None
version = args.version
suffixflag = args.machine != None
suffixflag = args.machine is not None
suffix = args.machine
if pathflag:
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)
homedir = "LATTE-%s" % version
@ -79,17 +83,17 @@ homedir = "LATTE-%s" % version
if buildflag:
url = "https://github.com/lanl/LATTE/archive/v%s.tar.gz" % version
lattepath = fullpath(homepath)
lattedir = os.path.join(lattepath,homedir)
lattedir = os.path.join(lattepath, homedir)
# download and unpack LATTE tarball
if buildflag:
print("Downloading LATTE ...")
geturl(url,"LATTE.tar.gz")
geturl(url, "LATTE.tar.gz")
# verify downloaded archive integrity via md5 checksum, if known.
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")
print("Unpacking LATTE ...")
@ -106,7 +110,7 @@ if buildflag:
print("Building LATTE ...")
cmd = 'cd "%s"; make' % lattedir
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'))
except subprocess.CalledProcessError as e:
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")
if os.path.isfile("filelink.o") or os.path.islink("filelink.o"):
os.remove("filelink.o")
os.symlink(os.path.join(lattedir,'src'),'includelink')
os.symlink(lattedir,'liblink')
os.symlink(os.path.join(lattedir,'src','latte_c_bind.o'),'filelink.o')
os.symlink(os.path.join(lattedir, 'src'), 'includelink')
os.symlink(lattedir, 'liblink')
os.symlink(os.path.join(lattedir, 'src', 'latte_c_bind.o'), 'filelink.o')
# copy Makefile.lammps.suffix to 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")
if os.path.exists("Makefile.lammps.%s" % suffix):
shutil.copyfile("Makefile.lammps.%s" % suffix, 'Makefile.lammps')

View File

@ -1,20 +1,23 @@
#!/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
import sys,os,re,subprocess,shutil
sys.path.append('..')
from install_helpers import get_cpus,fullpath
import sys, os, subprocess, shutil
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
# help message
help = """
HELP = """
Syntax from src dir: make lib-message args="-m"
or: make lib-message args="-s -z"
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()
# 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()
sys.exit(help)
sys.exit(HELP)
mpiflag = args.mpi
serialflag = args.serial
@ -50,7 +53,7 @@ zmqflag = args.zmq
# copy appropriate Makefile.lammps.* to Makefile.lammps
print("Building CSlib ...")
srcdir = fullpath(os.path.join("cslib","src"))
srcdir = fullpath(os.path.join("cslib", "src"))
if mpiflag and zmqflag:
cmd = "make -C %s lib_parallel" % srcdir
@ -60,20 +63,22 @@ elif not mpiflag and zmqflag:
cmd = "make -C %s lib_serial" % srcdir
elif not mpiflag and not zmqflag:
cmd = "make -C %s lib_serial zmq=no" % srcdir
print(cmd)
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'))
except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8'))
sys.exit(1)
slb=os.path.join(srcdir,"libcsnompi.a")
if mpiflag: slb = os.path.join(srcdir,"libcsmpi.a")
shutil.copyfile(slb,os.path.join(srcdir,"libmessage.a"))
slb = os.path.join(srcdir, "libcsnompi.a")
if mpiflag:
slb = os.path.join(srcdir, "libcsmpi.a")
shutil.copyfile(slb, os.path.join(srcdir, "libmessage.a"))
smk="Makefile.lammps.nozmq"
if zmqflag: smk="Makefile.lammps.zmq"
shutil.copyfile(smk,"Makefile.lammps")
smk = "Makefile.lammps.nozmq"
if zmqflag:
smk = "Makefile.lammps.zmq"
shutil.copyfile(smk, "Makefile.lammps")
print("Using %s for Makefile.lammps" % smk)

View File

@ -1,15 +1,17 @@
#!/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
import sys,os,re,subprocess,shutil,tarfile
sys.path.append('..')
from install_helpers import get_cpus,fullpath,get_cpus,geturl
import sys, os, subprocess, shutil, tarfile
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -20,7 +22,7 @@ machine = "g++_simple"
# help message
help = """
HELP = """
Syntax from src dir: make lib-mscg args="-p [path] -m [suffix] -v [version]"
or: make lib-mscg args="-b -m [suffix]"
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")
parser.add_argument("-v", "--version", default=version, choices=checksums.keys(),
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)
args = parser.parse_args()
# 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()
sys.exit(help)
sys.exit(HELP)
buildflag = args.build
pathflag = args.path != None
mscgpath= args.path
pathflag = args.path is not None
mscgpath = args.path
msuffix = args.machine
mscgver = args.version
@ -70,7 +72,7 @@ tarname = "MS-CG-%s.tar.gz" % mscgver
tardir = "MSCG-release-%s" % mscgver
homepath = fullpath('.')
homedir = os.path.join(homepath,tardir)
homedir = os.path.join(homepath, tardir)
if pathflag:
if not os.path.isdir(mscgpath):
@ -81,41 +83,41 @@ if pathflag:
if buildflag:
print("Downloading MS-CG ...")
tarname = os.path.join(homepath,tarname)
geturl(url,tarname)
tarname = os.path.join(homepath, tarname)
geturl(url, tarname)
print("Unpacking MS-CG tarfile ...")
if os.path.exists(os.path.join(homepath,tardir)):
shutil.rmtree(os.path.join(homepath,tardir))
if os.path.exists(os.path.join(homepath, tardir)):
shutil.rmtree(os.path.join(homepath, tardir))
if tarfile.is_tarfile(tarname):
tgz = tarfile.open(tarname)
tgz.extractall(path=homepath)
os.remove(tarname)
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.exists(homedir):
shutil.rmtree(homedir)
os.rename(os.path.join(homepath,tardir),homedir)
os.rename(os.path.join(homepath, tardir), homedir)
# build MS-CG
if buildflag:
print("Building MS-CG ...")
mkf="Makefile.%s" % msuffix
mkp=os.path.join(homedir,'src','Make',mkf)
mkf = "Makefile.%s" % msuffix
mkp = os.path.join(homedir, 'src', 'Make', mkf)
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):
shutil.copyfile("Makefile.%s" % msuffix,os.path.join(homedir,'src',mkf))
shutil.copyfile("Makefile.%s" % msuffix, os.path.join(homedir, 'src', mkf))
else:
sys.exit("Cannot find Makefile.%s" % msuffix)
try:
cmd = 'make -C %s -f Makefile.%s' % (os.path.join(homedir,'src'),msuffix)
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
cmd = 'make -C %s -f Makefile.%s' % (os.path.join(homedir, 'src'), msuffix)
txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
print(txt.decode('UTF-8'))
except subprocess.CalledProcessError as e:
print("Make failed with:\n %s" % e.output.decode('UTF-8'))
@ -124,9 +126,9 @@ if buildflag:
if not os.path.exists("Makefile.lammps"):
print("Creating Makefile.lammps")
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:
shutil.copyfile('Makefile.lammps.default','Makefile.lammps')
shutil.copyfile('Makefile.lammps.default', 'Makefile.lammps')
else: print("Makefile.lammps exists. Please check its settings")
# 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")
if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink")
os.symlink(os.path.join(homedir,'src'),'includelink')
os.symlink(os.path.join(homedir,'src'),'liblink')
os.symlink(os.path.join(homedir, 'src'), 'includelink')
os.symlink(os.path.join(homedir, 'src'), 'liblink')

View File

@ -1,14 +1,17 @@
#!/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
import sys,os,re,subprocess,hashlib,shutil
sys.path.append('..')
from install_helpers import get_cpus,fullpath,geturl,checkmd5sum
import sys, os, subprocess, shutil
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import get_cpus, fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -19,7 +22,7 @@ mode = "static"
# help message
help = """
HELP = """
Syntax from src dir: make lib-plumed args="-b"
or: make lib-plumed args="-b -v 2.4.3"
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()
# 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()
sys.exit(help)
sys.exit(HELP)
buildflag = args.build
pathflag = args.path != None
plumedpath= args.path
pathflag = args.path is not None
plumedpath = args.path
homepath = fullpath('.')
homedir = "%s/plumed2" % (homepath)
@ -76,31 +79,31 @@ if pathflag:
# download and unpack plumed2 tarball
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
print("Downloading plumed ...")
geturl(url,filename)
geturl(url, filename)
# verify downloaded archive integrity via md5 checksum, if known.
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")
print("Unpacking plumed2 source tarball ...")
if os.path.exists("%s/plumed-%s" % (homepath,version)):
shutil.rmtree("%s/plumed-%s" % (homepath,version))
if os.path.exists("%s/plumed-%s" % (homepath, version)):
shutil.rmtree("%s/plumed-%s" % (homepath, version))
if os.path.exists(homedir):
shutil.rmtree(homedir)
cmd = 'cd "%s"; tar -xzvf %s' % (homepath,filename)
subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
os.remove(os.path.join(homepath,filename))
cmd = 'cd "%s"; tar -xzvf %s' % (homepath, filename)
subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
os.remove(os.path.join(homepath, filename))
# build plumed
print("Building plumed ...")
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:
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'))
except subprocess.CalledProcessError as e:
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")
if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink")
os.symlink(os.path.join(homedir,'include'),'includelink')
libpath=os.path.join(homedir,'lib64')
if not os.path.exists(libpath): libpath=os.path.join(homedir,'lib')
os.symlink(libpath,'liblink')
os.symlink(os.path.join(homedir, 'include'), 'includelink')
libpath = os.path.join(homedir, 'lib64')
if not os.path.exists(libpath):
libpath = os.path.join(homedir, 'lib')
os.symlink(libpath, 'liblink')
if os.path.isfile("Makefile.lammps.%s" % mode):
print("Creating Makefile.lammps")
plumedinc = os.path.join('liblink','plumed','src','lib','Plumed.inc.' + mode)
lines1 = open(plumedinc,'r').readlines()
lines2 = open("Makefile.lammps.%s" % mode,'r').readlines()
fp = open("Makefile.lammps",'w')
fp.write(os.path.join("PLUMED_LIBDIR=",homedir,"lib\n"))
plumedinc = os.path.join('liblink', 'plumed', 'src', 'lib', 'Plumed.inc.' + mode)
lines1 = open(plumedinc, 'r').readlines()
lines2 = open("Makefile.lammps.%s" % mode, 'r').readlines()
fp = open("Makefile.lammps", 'w')
fp.write(os.path.join("PLUMED_LIBDIR=", homedir, "lib\n"))
for line in lines1:
fp.write(line)
for line in lines2:
fp.write(line)
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
# 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
import sys,os,re,subprocess,shutil,tarfile
sys.path.append('..')
from install_helpers import fullpath,geturl,get_cpus,checkmd5sum
import sys, os, subprocess, shutil, tarfile
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, get_cpus, checkmd5sum
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -24,7 +27,7 @@ checksums = { \
# extra help message
help = """
HELP = """
Syntax from src dir: make lib-scafacos args="-b"
or: make lib-scafacos args="-p /usr/local/scafacos"
Syntax from lib dir: python Install.py -b
@ -49,23 +52,23 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args()
# 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()
sys.exit(help)
sys.exit(HELP)
buildflag = args.build
pathflag = args.path != None
pathflag = args.path is not None
version = args.version
homepath = fullpath(".")
scafacospath = os.path.join(homepath,"scafacos-%s" % version)
scafacospath = os.path.join(homepath, "scafacos-%s" % version)
if pathflag:
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)
if (not os.path.isdir(os.path.join(scafacospath,"lib64"))) \
and (not os.path.isdir(os.path.join(scafacospath,"lib"))):
if (not os.path.isdir(os.path.join(scafacospath, "lib64"))) \
and (not os.path.isdir(os.path.join(scafacospath, "lib"))):
sys.exit("ScaFaCoS lib path for %s does not exist" % scafacospath)
scafacospath = fullpath(scafacospath)
@ -73,19 +76,19 @@ if pathflag:
if buildflag:
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.
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")
print("Unpacking ScaFaCoS tarball ...")
if os.path.exists(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):
tgz=tarfile.open(tarname)
tgz = tarfile.open(tarname)
tgz.extractall(path=homepath)
os.remove(tarname)
else:
@ -94,9 +97,9 @@ if buildflag:
# build ScaFaCoS
print("Building ScaFaCoS ...")
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:
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'))
except subprocess.CalledProcessError as e:
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"):
os.remove("liblink")
if buildflag:
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', 'include'), 'includelink')
os.symlink(os.path.join(homepath, 'build', 'lib'), 'liblink')
else:
os.symlink(os.path.join(scafacospath,'include'),'includelink')
if os.path.isdir(os.path.join(scafacospath,"lib64")):
os.symlink(os.path.join(scafacospath,'lib64'),'liblink')
os.symlink(os.path.join(scafacospath, 'include'), 'includelink')
if os.path.isdir(os.path.join(scafacospath, "lib64")):
os.symlink(os.path.join(scafacospath, 'lib64'), 'liblink')
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
# 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
import sys,os,re,glob,subprocess,shutil,tarfile
sys.path.append('..')
from install_helpers import fullpath,geturl,checkmd5sum
import sys, os, glob, shutil, tarfile
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -27,7 +30,7 @@ checksums = { \
# help message
help = """
HELP = """
Syntax from src dir: make lib-smd args="-b"
or: make lib-smd args="-p /usr/include/eigen3"
@ -52,20 +55,21 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args()
# 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()
sys.exit(help)
sys.exit(HELP)
homepath = fullpath(".")
eigenpath = os.path.join(homepath,"eigen3")
eigenpath = os.path.join(homepath, "eigen3")
buildflag = args.build
pathflag = args.path != None
pathflag = args.path is not None
version = args.version
if pathflag:
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)
# download and unpack Eigen tarball
@ -73,19 +77,19 @@ if pathflag:
if buildflag:
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
geturl(url,eigentar)
geturl(url, eigentar)
# verify downloaded archive integrity via md5 checksum, if known.
if version in checksums:
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")
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)
for one in edir:
if os.path.isdir(one):
@ -98,8 +102,8 @@ if buildflag:
os.remove(eigentar)
else:
sys.exit("File %s is not a supported archive" % eigentar)
edir = glob.glob(os.path.join(homepath,"eigen-eigen-*"))
os.rename(edir[0],eigenpath)
edir = glob.glob(os.path.join(homepath, "eigen-eigen-*"))
os.rename(edir[0], eigenpath)
# 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"):
os.remove("includelink")
linkdir = eigenpath
os.symlink(linkdir,'includelink')
os.symlink(linkdir, 'includelink')

View File

@ -1,14 +1,17 @@
#!/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
import sys,os,re,subprocess,shutil,tarfile
sys.path.append('..')
from install_helpers import get_cpus,fullpath,geturl,checkmd5sum
import sys, os, subprocess, shutil, tarfile
from argparse import ArgumentParser
sys.path.append('..')
from install_helpers import fullpath, geturl, checkmd5sum
parser = ArgumentParser(prog='Install.py',
description="LAMMPS library build wrapper script")
@ -24,7 +27,7 @@ checksums = { \
# extra help message
help = """
HELP = """
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="-b -v voro++-0.4.6"
@ -52,16 +55,16 @@ parser.add_argument("-v", "--version", default=version,
args = parser.parse_args()
# 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()
sys.exit(help)
sys.exit(HELP)
buildflag = args.build
pathflag = args.path != None
pathflag = args.path is not None
voropath = args.path
homepath = fullpath(".")
homedir = os.path.join(homepath,version)
homedir = os.path.join(homepath, version)
if pathflag:
if not os.path.isdir(voropath):
@ -72,17 +75,18 @@ if pathflag:
if buildflag:
print("Downloading Voro++ ...")
vorotar = os.path.join(homepath,version) + '.tar.gz'
geturl(url,vorotar)
vorotar = os.path.join(homepath, version) + '.tar.gz'
geturl(url, vorotar)
# verify downloaded archive integrity via md5 checksum, if known.
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")
print("Unpacking Voro++ tarball ...")
srcpath = os.path.join(homepath,version)
if os.path.exists(srcpath): shutil.rmtree(srcpath)
srcpath = os.path.join(homepath, version)
if os.path.exists(srcpath):
shutil.rmtree(srcpath)
if tarfile.is_tarfile(vorotar):
tgz = tarfile.open(vorotar)
tgz.extractall(path=homepath)
@ -90,8 +94,9 @@ if buildflag:
else:
sys.exit("File %s is not a supported archive" % vorotar)
if os.path.basename(homedir) != version:
if os.path.exists(homedir): shutil.rmtree(homedir)
os.rename(srcpath,homedir)
if os.path.exists(homedir):
shutil.rmtree(homedir)
os.rename(srcpath, homedir)
# build Voro++
@ -99,7 +104,7 @@ if buildflag:
print("Building Voro++ ...")
cmd = 'cd "%s"; make CXX=g++ CFLAGS="-fPIC -O3"' % homedir
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'))
except subprocess.CalledProcessError as e:
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")
if os.path.isfile("liblink") or os.path.islink("liblink"):
os.remove("liblink")
os.symlink(os.path.join(homedir,'src'),'includelink')
os.symlink(os.path.join(homedir,'src'),'liblink')
os.symlink(os.path.join(homedir, 'src'), 'includelink')
os.symlink(os.path.join(homedir, 'src'), 'liblink')