Simplify code building and package creation.
This commit is contained in:
parent
e2ec1e8bcd
commit
4702d0cb0c
|
@ -5,7 +5,11 @@ __pycache__
|
||||||
*.mod
|
*.mod
|
||||||
*.bak
|
*.bak
|
||||||
*.target
|
*.target
|
||||||
|
*.sconsign.dblite
|
||||||
htmlcov
|
htmlcov
|
||||||
package/
|
package/
|
||||||
src/msspec/results.txt
|
src/msspec/results.txt
|
||||||
*venv/
|
*venv/
|
||||||
|
**/*build/
|
||||||
|
**/*dist/
|
||||||
|
**/*.egg-info/
|
||||||
|
|
83
Makefile
83
Makefile
|
@ -1,83 +0,0 @@
|
||||||
MAKESELF:=makeself
|
|
||||||
VERSION:=$(shell git describe|sed 's/-\([[:digit:]]\+\)-.*/\.post\1/')
|
|
||||||
SETUPFILE:=MsSpec-$(VERSION).setup
|
|
||||||
|
|
||||||
|
|
||||||
VERBOSE:=0
|
|
||||||
ifeq ($(VERBOSE),0)
|
|
||||||
SUPPRESS_OUPUT:=1>/dev/null 2>/dev/null
|
|
||||||
MAKEFLAGS += --no-print-directory
|
|
||||||
else
|
|
||||||
SUPPRESS_OUPUT:=
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean version selfex venv doc
|
|
||||||
|
|
||||||
|
|
||||||
selfex: results
|
|
||||||
@echo "Creating the self-extractible setup program... "
|
|
||||||
# copy the src folder and purge it
|
|
||||||
@cp -r src src_
|
|
||||||
@+$(MAKE) -C ./src_ purge
|
|
||||||
# update the version
|
|
||||||
@echo "$(VERSION)" > ./src_/VERSION
|
|
||||||
# distribute the README.md file
|
|
||||||
@cp README.md ./src_/
|
|
||||||
# create the package folder
|
|
||||||
@mkdir -p package
|
|
||||||
# create the *.lsm file
|
|
||||||
@echo "Begin4" > msspec.lsm
|
|
||||||
@echo "Title: Python MsSpec" >> msspec.lsm
|
|
||||||
@echo "Version: $(VERSION)" >> msspec.lsm
|
|
||||||
@echo "Entered-date: `date +%Y-%m-%d`" >> msspec.lsm
|
|
||||||
@echo "Description: A multiple scattering package for spectroscopies using electrons to probe materials" >> msspec.lsm
|
|
||||||
@echo "Keywords: " >> msspec.lsm
|
|
||||||
@echo "Author: sylvain.tricot@univ-rennes1.fr (Sylvain Tricot), didier.sebilleau@univ-rennes1.fr (Didier Sébilleau)" >> msspec.lsm
|
|
||||||
@echo "Maintained-by: sylvain.tricot@univ-rennes1.fr (Sylvain Tricot)" >> msspec.lsm
|
|
||||||
@echo "Primary-site: https://msspec.cnrs.fr" >> msspec.lsm
|
|
||||||
@echo "Alternate-site:" >> msspec.lsm
|
|
||||||
@echo "Original-site:" >> msspec.lsm
|
|
||||||
@echo "Platforms:" >> msspec.lsm
|
|
||||||
@echo "Copying-policy: Gnu Library General Public License (GLPL) 2.0" >> msspec.lsm
|
|
||||||
@echo "End" >> msspec.lsm
|
|
||||||
# create the self-extractible archive
|
|
||||||
@$(MAKESELF) --license "./license.txt" --lsm ./msspec.lsm ./src_ package/$(SETUPFILE) "Python MsSpec" ./install.sh $(SUPPRESS_OUPUT)
|
|
||||||
# remove *.lsm file and src_
|
|
||||||
@rm ./msspec.lsm
|
|
||||||
@rm -rf ./src_
|
|
||||||
|
|
||||||
|
|
||||||
version:
|
|
||||||
@python ./CI/update_version.py
|
|
||||||
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo "Cleaning all..."
|
|
||||||
@find ./src -type f -name '*.pyc' -exec rm -f {} +
|
|
||||||
@find ./src -type d -name '__pycache__' -exec rm -rf {} +
|
|
||||||
@rm -rf src/dist
|
|
||||||
@rm -rf src/*.egg*
|
|
||||||
@+$(MAKE) -C src/ clean $(SUPPRESS_OUPUT)
|
|
||||||
@+$(MAKE) -C doc/ clean $(SUPPRESS_OUPUT)
|
|
||||||
@rm -rf package
|
|
||||||
|
|
||||||
purge: clean
|
|
||||||
@echo "Removing also shared objects..."
|
|
||||||
@find ./src -type f -name '*.so' -exec rm -f {} +
|
|
||||||
|
|
||||||
results:
|
|
||||||
@+$(MAKE) -C src results
|
|
||||||
|
|
||||||
|
|
||||||
venv:
|
|
||||||
@virtualenv --python=python3 --system-site-packages ci_venv $(SUPPRESS_OUPUT)
|
|
||||||
@. "./ci_venv/bin/activate" && pip install --upgrade pip && pip install --upgrade -r requirements.txt $(SUPPRESS_OUPUT)
|
|
||||||
|
|
||||||
doc:
|
|
||||||
@echo "Building pdf and html documentation..."
|
|
||||||
@mkdir -p package/
|
|
||||||
@+$(MAKE) -C doc/ latexpdf $(SUPPRESS_OUPUT)
|
|
||||||
@rm -rf package/*.pdf
|
|
||||||
@cp "doc/build/latex/MsSpec-python.pdf" "./package/MsSpec-${VERSION}.pdf"
|
|
||||||
@+$(MAKE) -C doc/ html $(SUPPRESS_OUPUT)
|
|
|
@ -1,4 +1,3 @@
|
||||||
recursive-include msspec *.f
|
recursive-include msspec *.so
|
||||||
recursive-include msspec *.inc
|
|
||||||
recursive-include . SConstruct
|
recursive-include . SConstruct
|
||||||
include requirements.txt
|
include requirements.txt
|
||||||
|
|
60
src/Makefile
60
src/Makefile
|
@ -1,60 +0,0 @@
|
||||||
VERSION:=$(shell python -c "import msspec; print(msspec.__version__)")
|
|
||||||
|
|
||||||
VERBOSE:=0
|
|
||||||
ifeq ($(VERBOSE),0)
|
|
||||||
SUPPRESS_OUPUT:=1>/dev/null 2>/dev/null
|
|
||||||
MAKEFLAGS += --no-print-directory --silent
|
|
||||||
else
|
|
||||||
SUPPRESS_OUPUT:=
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
install: sdist
|
|
||||||
@echo "Installing the newly created Python package..."
|
|
||||||
@pip install dist/msspec-*.tar.gz $(SUPPRESS_OUPUT)
|
|
||||||
|
|
||||||
sdist: install_deps
|
|
||||||
@echo "Creating Python source distribution..."
|
|
||||||
# Create the source distrib
|
|
||||||
@python setup.py sdist $(SUPPRESS_OUPUT)
|
|
||||||
|
|
||||||
install_deps: pybinding
|
|
||||||
@echo "Installing Python dependencies..."
|
|
||||||
# Install dependencies with pip
|
|
||||||
@pip install --upgrade -r requirements.txt $(SUPPRESS_OUPUT)
|
|
||||||
|
|
||||||
pybinding:
|
|
||||||
@echo "Building Python binding for phagen and spec..."
|
|
||||||
@+$(MAKE) -C msspec/spec/fortran pybinding $(SUPPRESS_OUPUT)
|
|
||||||
@+$(MAKE) -C msspec/phagen/fortran pybinding $(SUPPRESS_OUPUT)
|
|
||||||
|
|
||||||
results: msspec/results.txt
|
|
||||||
|
|
||||||
msspec/results.txt: pybinding
|
|
||||||
@echo "Generating results for unittests"
|
|
||||||
@coverage run --source=./ --omit=msspec/es/*,msspec/msspecgui/* msspec/create_tests_results.py 1>/dev/null
|
|
||||||
# create the html coverage report
|
|
||||||
@coverage html -d ../doc/source/htmlcov
|
|
||||||
@rm .coverage
|
|
||||||
|
|
||||||
tests: pybinding
|
|
||||||
@echo "Runing unittests"
|
|
||||||
@python -m msspec.tests 1>/dev/null
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo "Cleaning all..."
|
|
||||||
@find ./ -type f -name '*.pyc' -exec rm -f {} +
|
|
||||||
@find ./ -type d -name '__pycache__' -exec rm -rf {} +
|
|
||||||
@+$(MAKE) -C msspec/spec/fortran clean $(SUPPRESS_OUPUT)
|
|
||||||
@+$(MAKE) -C msspec/phagen/fortran clean $(SUPPRESS_OUPUT)
|
|
||||||
# remove previous sdist
|
|
||||||
@rm -rf dist
|
|
||||||
@rm -rf *.egg*
|
|
||||||
|
|
||||||
purge: clean
|
|
||||||
@echo "Removing also shared objects..."
|
|
||||||
@find ./ -type f -name '*.so' -exec rm -f {} +
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "help message"
|
|
||||||
|
|
102
src/SConstruct
102
src/SConstruct
|
@ -1,6 +1,47 @@
|
||||||
from sysconfig import get_config_var
|
from sysconfig import get_config_var
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
suffix = get_config_var('EXT_SUFFIX')
|
||||||
|
|
||||||
|
def filtered_glob(env, pattern, omit=[],
|
||||||
|
ondisk=True, source=False, strings=False):
|
||||||
|
return list(filter(
|
||||||
|
lambda f: os.path.basename(f.path) not in omit,
|
||||||
|
env.Glob(pattern)))
|
||||||
|
|
||||||
|
# Create a builder for f2py
|
||||||
|
def f2py_generator(source, target, env, for_signature):
|
||||||
|
main = source[0]
|
||||||
|
objects = " ".join(o.get_path() for o in source[1:] if str(o).endswith('.o'))
|
||||||
|
modulename = str(target[0]).replace(suffix, '').replace('/', '.')
|
||||||
|
compiler = env['FORTRAN']
|
||||||
|
cmd = f"f2py3 --fcompiler={compiler} "
|
||||||
|
cmd += f" $F2PY_OPTS -m {modulename} -c {objects} {main}"
|
||||||
|
#cmd += " 1>/dev/null 2>/dev/null"
|
||||||
|
return cmd
|
||||||
|
|
||||||
|
def f2py_emitter(target, source, env):
|
||||||
|
""" used to add the correct cpython .so suffix to the modulename """
|
||||||
|
target[0] = str(target[0]).replace('.', '/') + suffix
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
def install_module(env, module):
|
||||||
|
destdir = os.path.dirname(module[0].srcnode().abspath)
|
||||||
|
env.Install(destdir, module)
|
||||||
|
env.Alias('install', destdir)
|
||||||
|
return None
|
||||||
|
|
||||||
|
f2py_bld = Builder(generator=f2py_generator, emitter=f2py_emitter)
|
||||||
|
|
||||||
|
# define the default build environment
|
||||||
|
std = Environment(tools=['default', 'fortran'], F2PY_OPTS=[], LIBS=[])
|
||||||
|
std.AddMethod(filtered_glob, "FilteredGlob")
|
||||||
|
std.AddMethod(install_module, "InstallModule")
|
||||||
|
std['BUILDERS']['F2py'] = f2py_bld
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
# Define the command line options
|
# Define the command line options
|
||||||
AddOption('--dbg',
|
AddOption('--dbg',
|
||||||
dest='dbg',
|
dest='dbg',
|
||||||
|
@ -18,39 +59,19 @@ AddOption('--compiler',
|
||||||
choices=['gfortran', 'ifort'],
|
choices=['gfortran', 'ifort'],
|
||||||
help='The Fortran compiler to use')
|
help='The Fortran compiler to use')
|
||||||
|
|
||||||
def CheckPKGConfig(context, version):
|
|
||||||
context.Message( 'Checking for pkg-config... ' )
|
|
||||||
ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
|
|
||||||
context.Result( ret )
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def CheckPKG(context, name):
|
|
||||||
context.Message( 'Checking for %s... ' % name )
|
|
||||||
ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0]
|
|
||||||
context.Result( ret )
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def filtered_glob(env, pattern, omit=[],
|
|
||||||
ondisk=True, source=False, strings=False):
|
|
||||||
return list(filter(
|
|
||||||
lambda f: os.path.basename(f.path) not in omit,
|
|
||||||
env.Glob(pattern)))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# define the default build environment
|
|
||||||
std = Environment(tools=['default', 'fortran'], F2PY_OPTS=[], FORTRANCOMSTR = "building $TARGET ...", LIBS=[])
|
|
||||||
std.AddMethod(filtered_glob, "FilteredGlob");
|
|
||||||
|
|
||||||
# define environments
|
# define environments
|
||||||
gfortran_env = std.Clone(tools=['gfortran'])
|
gfortran_env = std.Clone(tools=['gfortran'])
|
||||||
gfortran_env.Replace(FORTRANFLAGS=['-fPIC', '-O2', '-ffast-math', '-fno-automatic'])
|
gfortran_env.Replace(FORTRANFLAGS=['-fPIC', '-O2', '-ffast-math'])
|
||||||
|
|
||||||
ifort_env = std.Clone(tools=['ifort'])
|
ifort_env = std.Clone(tools=['ifort'])
|
||||||
|
|
||||||
# parse options
|
# parse options
|
||||||
if GetOption('compiler') == 'gfortran':
|
if GetOption('compiler') == 'gfortran':
|
||||||
env = gfortran_env
|
env = gfortran_env
|
||||||
|
env.Append(F2PY_OPTS='--opt=-O2')
|
||||||
elif GetOption('compiler') == 'ifort':
|
elif GetOption('compiler') == 'ifort':
|
||||||
env = ifort_env
|
env = ifort_env
|
||||||
|
|
||||||
|
@ -65,37 +86,6 @@ if GetOption('verbose'):
|
||||||
env.Replace(FORTRANCOMSTR = "")
|
env.Replace(FORTRANCOMSTR = "")
|
||||||
|
|
||||||
|
|
||||||
conf = Configure(env, custom_tests = { 'CheckPKG' : CheckPKG})
|
Export('env')
|
||||||
suffix = get_config_var('EXT_SUFFIX')
|
SConscript('msspec/spec/fortran/SConstruct', variant_dir='build/build_spec')
|
||||||
|
SConscript('msspec/phagen/fortran/SConstruct', variant_dir='build/build_phagen')
|
||||||
# Create a builder for f2py
|
|
||||||
def create_f2py_cmd(source, target, env, for_signature):
|
|
||||||
objects = source[1:]
|
|
||||||
cmd = "f2py3 "
|
|
||||||
cmd += " ".join([o.get_path() for o in objects if str(o).endswith('o')])
|
|
||||||
cmd += f" $F2PY_OPTS -m {str(target[0]).replace(suffix,'').replace('/', '.')} -c {source[0]}"
|
|
||||||
return cmd
|
|
||||||
|
|
||||||
def modify_targets(target, source, env):
|
|
||||||
target[0] = str(target[0]) + suffix
|
|
||||||
#print(target[0])
|
|
||||||
return target, source
|
|
||||||
|
|
||||||
bld = Builder(generator=create_f2py_cmd, emitter = modify_targets)
|
|
||||||
env['BUILDERS']['F2PY'] = bld
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# exports
|
|
||||||
try:
|
|
||||||
Import('local_build')
|
|
||||||
except:
|
|
||||||
local_build = False
|
|
||||||
|
|
||||||
Export('env', 'conf')
|
|
||||||
|
|
||||||
print('local_build = ', local_build)
|
|
||||||
|
|
||||||
if not local_build:
|
|
||||||
SConscript(['msspec/spec/fortran/SConstruct',
|
|
||||||
'msspec/phagen/fortran/SConstruct'])
|
|
||||||
|
|
307
src/install.sh
307
src/install.sh
|
@ -1,307 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# vim: set ts=4 sw=4 sts noet mouse=a fdm=indent:
|
|
||||||
|
|
||||||
BYPASS="n"
|
|
||||||
DEBUG="n"
|
|
||||||
BUILDONLY="n"
|
|
||||||
|
|
||||||
SCRIPT_NAME=$(basename "$0")
|
|
||||||
VERSION=$(cat ./msspec/version.py|cut -d\" -f2)
|
|
||||||
DATE=$(date +%Y%m%d_%H%M%S)
|
|
||||||
LOGFILE="${HOME}/msspec_install_${DATE}.log"
|
|
||||||
GETOUTFILE=$(mktemp)
|
|
||||||
|
|
||||||
USE_MKL=0
|
|
||||||
LINKER_FLAGS=""
|
|
||||||
COMP=gfortran
|
|
||||||
COMP_OPTS="-O2 -ffast-math -fno-automatic"
|
|
||||||
DEBUG_MODE=0
|
|
||||||
|
|
||||||
|
|
||||||
trap "abort_install" INT
|
|
||||||
trap "error_exit" HUP QUIT ILL ABRT
|
|
||||||
|
|
||||||
init_install () {
|
|
||||||
printf "Installation started on %s\n" "$(date)" > "${LOGFILE}"
|
|
||||||
printf "0" > "${GETOUTFILE}"
|
|
||||||
|
|
||||||
if [ "$BYPASS" = "n" ]; then
|
|
||||||
printf ""
|
|
||||||
printf "This program will install the msspec python package on your system.\n"
|
|
||||||
printf "It is highly recommended to run this installation process within a\n"
|
|
||||||
printf "Python virtual environment. If you want to create and/or activate one,\n"
|
|
||||||
printf "you can answer \"n\" now and restart the setup program later.\n"
|
|
||||||
|
|
||||||
read_yes_no "Do you wish to continue" "y"
|
|
||||||
case "${ANSWER}" in
|
|
||||||
y) ;;
|
|
||||||
n) abort_install ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
abort_install () {
|
|
||||||
log_message "Installation aborted by the user"
|
|
||||||
error_exit
|
|
||||||
}
|
|
||||||
|
|
||||||
log_message () {
|
|
||||||
printf "$1\n" >> ${LOGFILE}
|
|
||||||
}
|
|
||||||
|
|
||||||
log_message2 () {
|
|
||||||
# echo to screen and to file
|
|
||||||
printf "$1\n"
|
|
||||||
log_message "$1\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup () {
|
|
||||||
rm -rf "${GETOUTFILE}"
|
|
||||||
}
|
|
||||||
|
|
||||||
error_exit () {
|
|
||||||
# An error occured
|
|
||||||
printf "\n"
|
|
||||||
printf " /!\ An error occured during the installation process.\n"
|
|
||||||
printf " Please see the %s file in your HOME folder\n" "$(basename "${LOGFILE}")"
|
|
||||||
printf " for more informations.\n"
|
|
||||||
printf " Below is an excerpt of the last 10 lines:\n"
|
|
||||||
printf "\n"
|
|
||||||
echo ">>> ..."
|
|
||||||
tail "${LOGFILE}" | while read line
|
|
||||||
do
|
|
||||||
echo ">>> $line"
|
|
||||||
done
|
|
||||||
|
|
||||||
# uninstall if needed
|
|
||||||
pip uninstall -y msspec
|
|
||||||
|
|
||||||
cleanup && exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
read_yes_no () {
|
|
||||||
DEFAULT="$2"
|
|
||||||
PROMPT="$1 (y/n) [${DEFAULT}]? "
|
|
||||||
|
|
||||||
ANSWER=""
|
|
||||||
INPUT=""
|
|
||||||
|
|
||||||
VALID=1
|
|
||||||
while test $VALID -ne 0; do
|
|
||||||
printf "%s" "${PROMPT}"
|
|
||||||
if [ x"$BYPASS" = xn ]; then
|
|
||||||
read -r "INPUT"
|
|
||||||
else
|
|
||||||
printf "\n"
|
|
||||||
fi
|
|
||||||
ANSWER="${INPUT:-${DEFAULT}}"
|
|
||||||
case "${ANSWER}" in
|
|
||||||
y|n) VALID=0 ;;
|
|
||||||
*) printf "Invalid choice, please answer \"y\" or \"n\".\n"; VALID=1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
log_message "QUESTION: $PROMPT"
|
|
||||||
log_message "ANSWER : $ANSWER"
|
|
||||||
}
|
|
||||||
|
|
||||||
wrap () {
|
|
||||||
log_message "================================================================================"
|
|
||||||
log_message "$2"
|
|
||||||
log_message "================================================================================"
|
|
||||||
log_message "$1"
|
|
||||||
if [ "$DEBUG" = y ]; then
|
|
||||||
printf "%s...\n" "$2"
|
|
||||||
(eval "$1" || echo $? >"${GETOUTFILE}") | tee -a "${LOGFILE}"
|
|
||||||
rc=$(cat $GETOUTFILE)
|
|
||||||
if [ $rc != 0 ]; then
|
|
||||||
error_exit
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
eval "($1) 2>>${LOGFILE} 1>>${LOGFILE}" || echo $? >${GETOUTFILE} &
|
|
||||||
patience "$2"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
success_message () {
|
|
||||||
log_message "========================================================"
|
|
||||||
log_message "MsSpec was successfully installed."
|
|
||||||
log_message "========================================================"
|
|
||||||
}
|
|
||||||
|
|
||||||
patience () {
|
|
||||||
MSG="$1"
|
|
||||||
PID=$!
|
|
||||||
i=0
|
|
||||||
printf "%s" "$MSG... "
|
|
||||||
while ps -p $PID > /dev/null
|
|
||||||
do
|
|
||||||
sleep 0.1
|
|
||||||
case $i in
|
|
||||||
0) printf "\b\b- " ;;
|
|
||||||
1) printf "\b\b\\ " ;;
|
|
||||||
2) printf "\b\b| " ;;
|
|
||||||
3) printf "\b\b/ "; i=-1 ;;
|
|
||||||
esac
|
|
||||||
i=$(( i+1 ))
|
|
||||||
done
|
|
||||||
if test "$(cat "${GETOUTFILE}")" -ne 0; then
|
|
||||||
printf "\b\b Aborted!"
|
|
||||||
error_exit
|
|
||||||
fi
|
|
||||||
printf "\b\b Done.\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
show_help () {
|
|
||||||
echo "Usage: $SCRIPT_NAME [OPTIONS]"
|
|
||||||
echo "List of possible options:"
|
|
||||||
echo " -y Accept all default choices."
|
|
||||||
echo " -d Debug mode."
|
|
||||||
echo " -h Show this message."
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
check_dependencies () {
|
|
||||||
# we need make
|
|
||||||
log_message "Checking if make is installed..."
|
|
||||||
command -V make || return 1
|
|
||||||
log_message "Ok\n"
|
|
||||||
|
|
||||||
# we need gfortran
|
|
||||||
gcc_ver_min=6
|
|
||||||
log_message "Checking if gfortran >= $gcc_ver_min is installed..."
|
|
||||||
command -V gfortran || return 1
|
|
||||||
gcc_ver=$(gcc -dumpversion|cut -d. -f1)
|
|
||||||
echo "You have gfortran version $gcc_ver installed"
|
|
||||||
test "$gcc_ver" -ge "$gcc_ver_min" || return 1
|
|
||||||
log_message "Ok\n"
|
|
||||||
|
|
||||||
# we need libcairo and dev files
|
|
||||||
log_message "Checking if libcairo is installed..."
|
|
||||||
pkg-config --exists cairo || return 1
|
|
||||||
log_message "Ok\n"
|
|
||||||
|
|
||||||
# we need Python 3
|
|
||||||
py_ver_major_min=3
|
|
||||||
py_ver_minor_min=0
|
|
||||||
log_message "Checking if Python >= ${py_ver_major_min}.${py_ver_minor_min}..."
|
|
||||||
command -V python || return 1
|
|
||||||
py_ver=$(python --version | cut -d" " -f2)
|
|
||||||
echo "You have Python version $py_ver installed"
|
|
||||||
py_ver_major=$(echo $py_ver|cut -d. -f1)
|
|
||||||
py_ver_minor=$(echo $py_ver|cut -d. -f2)
|
|
||||||
test "$py_ver_major" -ge "$py_ver_major_min" || return 1
|
|
||||||
test "$py_ver_minor" -ge "$py_ver_minor_min" || return 1
|
|
||||||
log_message "Ok\n"
|
|
||||||
|
|
||||||
# we need wxPython.
|
|
||||||
log_message "Checking if wxPython is installed..."
|
|
||||||
python -c "import wx"
|
|
||||||
if test "$?" -ne 0; then
|
|
||||||
log_message "You need wxPython to run MsSpec.\n"
|
|
||||||
log_message "Please look at informations at https://wxpython.org/pages/downloads/.\n"
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
log_message "Ok\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# we need pip
|
|
||||||
log_message "Checking if pip is installed..."
|
|
||||||
command -V pip || return 1
|
|
||||||
log_message "Ok\n"
|
|
||||||
|
|
||||||
# we need virtualenv
|
|
||||||
#log_message "Checking if virtualenv is installed..."
|
|
||||||
#command -V virtualenv || return 1
|
|
||||||
#log_message "Ok\n"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
local_install () {
|
|
||||||
# Initialize the install process
|
|
||||||
init_install
|
|
||||||
|
|
||||||
# check dependencies
|
|
||||||
wrap "check_dependencies" "Checking dependencies"
|
|
||||||
|
|
||||||
# Do we have Lapack.
|
|
||||||
log_message "Checking if lapack is installed..."
|
|
||||||
pkg-config --exists lapack
|
|
||||||
if test "$?" -ne 0; then
|
|
||||||
HAS_LAPACK="n"
|
|
||||||
log_message "No, will use included routines\n"
|
|
||||||
else
|
|
||||||
HAS_LAPACK="y"
|
|
||||||
log_message "Ok\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"${HAS_LAPACK}" = xy ]; then
|
|
||||||
read_yes_no "You have Lapack. Do you wish to link with installed lapack" "y"
|
|
||||||
if [ x"${ANSWER}" = xy ]; then
|
|
||||||
USE_MKL=1
|
|
||||||
LINKER_FLAGS=`pkg-config --libs lapack`
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ask for expert options
|
|
||||||
read_yes_no "Do you wish to edit compilation options" "n"
|
|
||||||
if [ x"${ANSWER}" = xy ]; then
|
|
||||||
read -ep "FORTRAN COMPILER...................> " -i "${COMP}" COMP
|
|
||||||
read -ep "COMPILER OPTIONS...................> " -i "${COMP_OPTS}" COMP_OPTS
|
|
||||||
read -ep "USE EXTERNAL LAPACK (0:no, 1:yes)..> " -i "${USE_MKL}" USE_MKL
|
|
||||||
read -ep "LINKER FLAGS.......................> " -i "${LINKER_FLAGS}" LINKER_FLAGS
|
|
||||||
read -ep "INCLUDE DEBUG SYMBOLS (0:no, 1:yes)> " -i "${DEBUG_MODE}" DEBUG_MODE
|
|
||||||
fi
|
|
||||||
|
|
||||||
ALL_OPTS="VERBOSE=1 USE_MKL=${USE_MKL} LINKER_FLAGS=\"${LINKER_FLAGS}\" COMP=\"${COMP}\" COMP_OPTS=\"${COMP_OPTS}\" DEBUG=\"${DEBUG_MODE}\""
|
|
||||||
|
|
||||||
# build the Fortran code
|
|
||||||
wrap "make pybinding ${ALL_OPTS}" "Building Phagen and Spec Python dynamic library"
|
|
||||||
|
|
||||||
if [ x"${BUILDONLY}" = xy ]; then
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install Python dependencies
|
|
||||||
wrap "make install_deps ${ALL_OPTS}" "Installing Python dependencies"
|
|
||||||
|
|
||||||
# build the source distribution
|
|
||||||
wrap "make sdist ${ALL_OPTS}" "Building msspec python package"
|
|
||||||
|
|
||||||
# install the package
|
|
||||||
wrap "make install ${ALL_OPTS}" "Installing the msspec package"
|
|
||||||
|
|
||||||
# Run unit tests ?
|
|
||||||
read_yes_no "Do you wish to run unit tests" "y"
|
|
||||||
if [ x"${ANSWER}" = xy ]; then
|
|
||||||
wrap "make tests ${ALL_OPTS}" "Runing test suite"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# installation was a succes so ask if we keep the log file
|
|
||||||
read_yes_no "Do you wish to keep the log file (${LOGFILE})" "n"
|
|
||||||
if [ x"${ANSWER}" = xn ]; then
|
|
||||||
rm -f "${LOGFILE}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# self-explanatory
|
|
||||||
success_message
|
|
||||||
}
|
|
||||||
|
|
||||||
while getopts "p:byd" option
|
|
||||||
do
|
|
||||||
case $option in
|
|
||||||
y) export BYPASS="y"
|
|
||||||
;;
|
|
||||||
d) export DEBUG="y"
|
|
||||||
;;
|
|
||||||
b) export BUILDONLY="y"
|
|
||||||
;;
|
|
||||||
h) show_help
|
|
||||||
;;
|
|
||||||
*) show_help
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
local_install
|
|
|
@ -60,6 +60,8 @@ import wx.grid
|
||||||
|
|
||||||
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
|
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
|
||||||
from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg
|
from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg
|
||||||
|
#from matplotlib.backends.backend_wxcairo import FigureCanvasWxCairo as FigureCanvas
|
||||||
|
#from matplotlib.backends.backend_wxcairo import NavigationToolbar2WxCairo
|
||||||
from matplotlib.figure import Figure
|
from matplotlib.figure import Figure
|
||||||
|
|
||||||
from terminaltables import AsciiTable
|
from terminaltables import AsciiTable
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
COMP=gfortran
|
|
||||||
F2PY:=f2py3
|
|
||||||
|
|
||||||
COMP_OPTS:= -O2 -ffast-math
|
|
||||||
F2PY_OPTS:=
|
|
||||||
|
|
||||||
DEBUG:=0
|
|
||||||
|
|
||||||
objects_src := phagen_scf_2.1_dp.f
|
|
||||||
objects := $(patsubst %.f,%.o, $(objects_src))
|
|
||||||
|
|
||||||
ifeq ($(DEBUG),1)
|
|
||||||
COMP_OPTS:=$(COMP_OPTS) -g -Wall -Wextra -Warray-temporaries -Wconversion -fbacktrace -ffree-line-length-0 -fcheck=all -ffpe-trap=zero,overflow,underflow -finit-real=nan
|
|
||||||
F2PY_OPTS:=$(F2PY_OPTS) --debug-capi --debug
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
|
|
||||||
pybinding: libphagen.target
|
|
||||||
|
|
||||||
libphagen.target: $(objects) main.f
|
|
||||||
@echo "building Python binding..."
|
|
||||||
@$(F2PY) -I. $(objects) $(F2PY_OPTS)-c -m libphagen main.f
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
$(objects): $(objects_src)
|
|
||||||
@echo "compiling subroutines and functions for phagen..."
|
|
||||||
@$(COMP) $(COMP_OPTS) -fPIC -c $^
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo "cleaning..."
|
|
||||||
@rm -rf *.o *.mod
|
|
||||||
@rm -rf $(objects)
|
|
||||||
@rm -f libphagen.target
|
|
|
@ -1,17 +1,10 @@
|
||||||
try:
|
Import('env')
|
||||||
Import('env')
|
import os
|
||||||
except:
|
|
||||||
local_build = True
|
|
||||||
Export('local_build')
|
|
||||||
SConscript(['../../../SConstruct'])
|
|
||||||
finally:
|
|
||||||
Import('env')
|
|
||||||
|
|
||||||
|
|
||||||
objects_src= ['phagen_scf_2.1_dp.f']
|
objects_src= ['phagen_scf_2.1_dp.f']
|
||||||
objects = env.Object(objects_src)
|
objects = env.Object(objects_src)
|
||||||
|
|
||||||
module = env.F2PY('libphagen', ['main.f'] + objects)
|
module = env.F2py('libphagen', ['main.f'] + objects, F2PYCOMSTR=">>")
|
||||||
Requires(module, objects)
|
env.InstallModule(module)
|
||||||
|
|
||||||
env.Alias('phagen', module)
|
env.Alias('phagen', module)
|
||||||
|
|
|
@ -8140,7 +8140,13 @@ c.....this subroutine calculates the radial matrix elements
|
||||||
c.....necessary for eels cross-section
|
c.....necessary for eels cross-section
|
||||||
c.....using a linear-log mesh
|
c.....using a linear-log mesh
|
||||||
c
|
c
|
||||||
common/mtxele/ nstart,nlast
|
CST ==> Replaced the line below
|
||||||
|
CST common/mtxele/ nstart,nlast
|
||||||
|
common/mtxele/ nstart,nlast,dmx(2),dmx1(2),qmx(3),qmx1(3),
|
||||||
|
$ dxdir,dxexc,nfis,nfis1,nfis2
|
||||||
|
real*8 nfis,nfis2,nfis1
|
||||||
|
complex*16 dmx,dmx1,qmx,qmx1,dxdir,dxexc
|
||||||
|
CST <==
|
||||||
c
|
c
|
||||||
common/mtxelex/ dmxx(2),dmxx1(2),dmxxa(2),dmxxa1(2),
|
common/mtxelex/ dmxx(2),dmxx1(2),dmxxa(2),dmxxa1(2),
|
||||||
& qmxx(3),qmxx1(3),qmxxa(3),qmxxa1(3),
|
& qmxx(3),qmxx1(3),qmxxa(3),qmxxa1(3),
|
||||||
|
@ -17000,7 +17006,13 @@ c.....(i=1,2) for lfin=l0i-1 (i=1) and lfin=l0i+1 (i=2) both for
|
||||||
c.....the regular (dmxx) and irregular solution (dmxx1) using a
|
c.....the regular (dmxx) and irregular solution (dmxx1) using a
|
||||||
c.....linear-log mesh
|
c.....linear-log mesh
|
||||||
c
|
c
|
||||||
common/mtxele/ nstart,nlast
|
CST ==> Replaced the line below
|
||||||
|
CST common/mtxele/ nstart,nlast
|
||||||
|
common/mtxele/ nstart,nlast,dmx(2),dmx1(2),qmx(3),qmx1(3),
|
||||||
|
$ dxdir,dxexc,nfis,nfis1,nfis2
|
||||||
|
real*8 nfis,nfis2,nfis1
|
||||||
|
complex*16 dmx,dmx1,qmx,qmx1,dxdir,dxexc
|
||||||
|
CST <==
|
||||||
c
|
c
|
||||||
common/mtxelex/ dmxx(2),dmxx1(2),dmxxa(2),dmxxa1(2),
|
common/mtxelex/ dmxx(2),dmxx1(2),dmxxa(2),dmxxa1(2),
|
||||||
& qmxx(3),qmxx1(3),qmxxa(3),qmxxa1(3),
|
& qmxx(3),qmxx1(3),qmxxa(3),qmxxa1(3),
|
||||||
|
@ -20199,7 +20211,8 @@ C MARK 12 RELEASE. NAG COPYRIGHT 1986.
|
||||||
C MARK 15 REVISED. IER-915 (APR 1991).
|
C MARK 15 REVISED. IER-915 (APR 1991).
|
||||||
C .. Scalar Arguments ..
|
C .. Scalar Arguments ..
|
||||||
INTEGER INFO
|
INTEGER INFO
|
||||||
CHARACTER*13 SRNAME
|
CHARACTER(*) SRNAME
|
||||||
|
CST CHARACTER*13 SRNAME
|
||||||
C ..
|
C ..
|
||||||
C
|
C
|
||||||
C Purpose
|
C Purpose
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
COMP:=gfortran
|
|
||||||
F2PY:=f2py3
|
|
||||||
|
|
||||||
COMP_OPTS:= -O2 -ffast-math -fno-automatic
|
|
||||||
LINKER_FLAGS:=
|
|
||||||
F2PY_OPTS:=
|
|
||||||
|
|
||||||
DEBUG:=0
|
|
||||||
USE_MKL:=0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
includes := -I./memalloc/ -I./cluster_gen/ -I./common_sub -I./renormalization
|
|
||||||
includes += -I./phd_se_noso_nosp_nosym
|
|
||||||
includes += -I./eig/common -I./eig/mi -I./eig/pw
|
|
||||||
|
|
||||||
memalloc_src:=memalloc/dim_mod.f memalloc/modules.f memalloc/allocation.f
|
|
||||||
cluster_gen_src:=$(wildcard cluster_gen/*.f)
|
|
||||||
common_sub_src:=$(wildcard common_sub/*.f)
|
|
||||||
renormalization_src:=$(wildcard renormalization/*.f)
|
|
||||||
|
|
||||||
phd_se_noso_nosp_nosym_src:=$(filter-out phd_se_noso_nosp_nosym/main.f, $(wildcard phd_se_noso_nosp_nosym/*.f))
|
|
||||||
phd_mi_noso_nosp_nosym_src:=$(filter-out phd_mi_noso_nosp_nosym/main.f, $(wildcard phd_mi_noso_nosp_nosym/*.f))
|
|
||||||
|
|
||||||
eig_common_src:=$(wildcard eig/common/*.f)
|
|
||||||
eig_mi_src:=$(filter-out eig/mi/main.f, $(wildcard eig/mi/*.f))
|
|
||||||
eig_pw_src:=$(filter-out eig/pw/main.f, $(wildcard eig/pw/*.f))
|
|
||||||
|
|
||||||
ifeq ($(USE_MKL), 1)
|
|
||||||
eig_common_src:=$(filter-out $(wildcard eig/common/lapack*.f), $(eig_common_src))
|
|
||||||
phd_mi_noso_nosp_nosym_src:=$(filter-out $(wildcard phd_mi_noso_nosp_nosym/lapack*.f), $(phd_mi_noso_nosp_nosym_src))
|
|
||||||
LINKER_FLAGS:=$(shell pkg-config --libs lapack)
|
|
||||||
# MKL:=-L$(MKLROOT) -lmkl_core -lmkl_intel_lp64 -lmkl_sequential
|
|
||||||
endif
|
|
||||||
|
|
||||||
objects_src := $(memalloc_src) $(cluster_gen_src) $(common_sub_src)
|
|
||||||
objects_src += $(renormalization_src) $(phd_se_noso_nosp_nosym_src)
|
|
||||||
objects_src += $(eig_common_src) $(eig_mi_src) $(eig_pw_src)
|
|
||||||
objects_src += $(phd_mi_noso_nosp_nosym_src)
|
|
||||||
|
|
||||||
memalloc_obj:=$(patsubst %.f,%.o, $(memalloc_src))
|
|
||||||
cluster_gen_obj:=$(patsubst %.f,%.o, $(cluster_gen_src))
|
|
||||||
common_sub_obj:=$(patsubst %.f,%.o, $(common_sub_src))
|
|
||||||
renormalization_obj:=$(patsubst %.f,%.o, $(renormalization_src))
|
|
||||||
phd_se_noso_nosp_nosym_obj:=$(patsubst %.f,%.o, $(phd_se_noso_nosp_nosym_src))
|
|
||||||
phd_mi_noso_nosp_nosym_obj:=$(patsubst %.f,%.o, $(phd_mi_noso_nosp_nosym_src))
|
|
||||||
eig_common_obj:=$(patsubst %.f,%.o, $(eig_common_src))
|
|
||||||
eig_mi_obj:=$(patsubst %.f,%.o, $(eig_mi_src))
|
|
||||||
eig_pw_obj:=$(patsubst %.f,%.o, $(eig_pw_src))
|
|
||||||
objects:=$(patsubst %.f,%.o, $(objects_src))
|
|
||||||
|
|
||||||
libs_targets := phd_se_noso_nosp_nosym.target phd_mi_noso_nosp_nosym.target eig_mi.target eig_pw.target
|
|
||||||
|
|
||||||
EXE=prog
|
|
||||||
|
|
||||||
ifeq ($(DEBUG),1)
|
|
||||||
COMP_OPTS:=$(COMP_OPTS) -g -Wall -Wextra -Warray-temporaries -Wconversion -fbacktrace -ffree-line-length-0 -fcheck=all -ffpe-trap=zero,overflow,underflow -finit-real=nan
|
|
||||||
F2PY_OPTS:=$(F2PY_OPTS) --debug-capi --debug
|
|
||||||
endif
|
|
||||||
|
|
||||||
export COMP
|
|
||||||
export COMP_OPTS
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
|
|
||||||
|
|
||||||
pybinding: $(libs_targets)
|
|
||||||
|
|
||||||
phd_se_noso_nosp_nosym.target: $(memalloc_obj) $(cluster_gen_obj) $(common_sub_obj) $(renormalization_obj) $(phd_se_noso_nosp_nosym_obj)
|
|
||||||
@echo "building Python binding..."
|
|
||||||
@$(F2PY) $(includes) $^ $(F2PY_OPTS) -c -m $(patsubst %.target, %, $@) phd_se_noso_nosp_nosym/main.f
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
phd_mi_noso_nosp_nosym.target: $(memalloc_obj) $(cluster_gen_obj) $(common_sub_obj) $(renormalization_obj) $(phd_mi_noso_nosp_nosym_obj)
|
|
||||||
@echo "building Python binding..."
|
|
||||||
@$(F2PY) $(includes) $^ $(F2PY_OPTS) -c -m $(patsubst %.target, %, $@) phd_mi_noso_nosp_nosym/main.f $(LINKER_FLAGS)
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
eig_mi.target: $(memalloc_obj) $(cluster_gen_obj) $(common_sub_obj) $(renormalization_obj) $(eig_common_obj) $(eig_mi_obj)
|
|
||||||
@echo "building Python binding..."
|
|
||||||
@$(F2PY) $(includes) $^ $(F2PY_OPTS) -c -m $(patsubst %.target, %, $@) eig/mi/main.f $(LINKER_FLAGS)
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
eig_pw.target: $(memalloc_obj) $(cluster_gen_obj) $(common_sub_obj) $(renormalization_obj) $(eig_common_obj) $(eig_pw_obj)
|
|
||||||
@echo "building Python binding..."
|
|
||||||
@$(F2PY) $(includes) $^ $(F2PY_OPTS) -c -m $(patsubst %.target, %, $@) eig/pw/main.f $(LINKER_FLAGS)
|
|
||||||
@touch $@
|
|
||||||
|
|
||||||
%.o: %.f
|
|
||||||
@echo "compiling $@..."
|
|
||||||
@$(COMP) $(COMP_OPTS) -I./memalloc/ -fPIC -o $@ -c $^
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@echo "cleaning..."
|
|
||||||
@rm -rf *.o *.mod
|
|
||||||
@rm -rf $(objects)
|
|
||||||
@rm -rf $(libs_targets)
|
|
|
@ -1,22 +1,11 @@
|
||||||
# imports
|
Import('env')
|
||||||
try:
|
import os
|
||||||
Import('env', 'conf')
|
|
||||||
except:
|
|
||||||
local_build = True
|
|
||||||
Export('local_build')
|
|
||||||
SConscript(['../../../SConstruct'])
|
|
||||||
finally:
|
|
||||||
Import('env', 'conf')
|
|
||||||
|
|
||||||
# Configuration:
|
# Configure the environment
|
||||||
env2 = env.Clone()
|
env_spec = env.Clone()
|
||||||
if conf.CheckPKG('lapack'):
|
cwd = Dir('.').get_abspath()
|
||||||
env2.ParseConfig("pkg-config lapack --libs")
|
env_spec.Append(FORTRANFLAGS=['-I' + cwd,'-J' + cwd])
|
||||||
conf.Finish()
|
env_spec.Append(F2PY_OPTS=['-I' + cwd])
|
||||||
|
|
||||||
dir = Dir('.').get_abspath()
|
|
||||||
env2.Append(FORTRANFLAGS=['-I' + dir,'-J' + dir])
|
|
||||||
env2.Append(F2PY_OPTS=['-I' + dir])
|
|
||||||
|
|
||||||
# define sources
|
# define sources
|
||||||
dim_mod = ['memalloc/dim_mod.f']
|
dim_mod = ['memalloc/dim_mod.f']
|
||||||
|
@ -24,53 +13,53 @@ memalloc = ['memalloc/modules.f', 'memalloc/allocation.f']
|
||||||
cluster_gen = Glob('cluster_gen/*.f')
|
cluster_gen = Glob('cluster_gen/*.f')
|
||||||
common_sub = Glob('common_sub/*.f')
|
common_sub = Glob('common_sub/*.f')
|
||||||
renormalization = Glob('renormalization/*.f')
|
renormalization = Glob('renormalization/*.f')
|
||||||
phd_se_noso_nosp_nosym = env2.FilteredGlob('phd_se_noso_nosp_nosym/*.f', omit=['main.f'])
|
phd_se_noso_nosp_nosym = env_spec.FilteredGlob('phd_se_noso_nosp_nosym/*.f', omit=['main.f'])
|
||||||
phd_mi_noso_nosp_nosym = env2.FilteredGlob('phd_mi_noso_nosp_nosym/*.f', omit=['main.f'])
|
phd_mi_noso_nosp_nosym = env_spec.FilteredGlob('phd_mi_noso_nosp_nosym/*.f', omit=['main.f'])
|
||||||
eig_common = Glob('eig/common/*.f')
|
eig_common = Glob('eig/common/*.f')
|
||||||
eig_mi = env2.FilteredGlob('eig/mi/*.f', omit=['main.f'])
|
eig_mi = env_spec.FilteredGlob('eig/mi/*.f', omit=['main.f'])
|
||||||
eig_pw = env2.FilteredGlob('eig/pw/*.f', omit=['main.f'])
|
eig_pw = env_spec.FilteredGlob('eig/pw/*.f', omit=['main.f'])
|
||||||
|
|
||||||
|
conf = Configure(env_spec, log_file='./config.log')
|
||||||
if 'lapack' in env2['LIBS']:
|
if conf.CheckLib('lapack'):
|
||||||
env2.Append(F2PY_OPTS = "-llapack")
|
env_spec.Append(F2PY_OPTS = "-llapack")
|
||||||
eig_mi = [f for f in eig_mi if str(f).find('lapack') == -1]
|
eig_mi = [f for f in eig_mi if str(f).find('lapack') == -1]
|
||||||
phd_mi_noso_nosp_nosym = [f for f in phd_mi_noso_nosp_nosym if str(f).find('lapack') == -1]
|
phd_mi_noso_nosp_nosym = [f for f in phd_mi_noso_nosp_nosym if str(f).find('lapack') == -1]
|
||||||
|
env_spec = conf.Finish()
|
||||||
sources = dim_mod + memalloc + cluster_gen + common_sub + renormalization + phd_se_noso_nosp_nosym
|
env_spec.Append(FORTRANFLAGS='-fno-automatic')
|
||||||
sources += phd_mi_noso_nosp_nosym + eig_common + eig_pw + eig_mi
|
|
||||||
|
|
||||||
# define objects
|
# define objects
|
||||||
dim_mod_obj = env2.Object(dim_mod)
|
dim_mod_obj = env_spec.Object(dim_mod)
|
||||||
memalloc_obj = env2.Object(memalloc)
|
memalloc_obj = env_spec.Object(memalloc)
|
||||||
cluster_gen_obj = env2.Object(cluster_gen)
|
cluster_gen_obj = env_spec.Object(cluster_gen)
|
||||||
common_sub_obj = env2.Object(common_sub)
|
common_sub_obj = env_spec.Object(common_sub)
|
||||||
renormalization_obj = env2.Object(renormalization)
|
renormalization_obj = env_spec.Object(renormalization)
|
||||||
phd_se_noso_nosp_nosym_obj = env2.Object(phd_se_noso_nosp_nosym)
|
phd_se_noso_nosp_nosym_obj = env_spec.Object(phd_se_noso_nosp_nosym)
|
||||||
phd_mi_noso_nosp_nosym_obj = env2.Object(phd_mi_noso_nosp_nosym)
|
phd_mi_noso_nosp_nosym_obj = env_spec.Object(phd_mi_noso_nosp_nosym)
|
||||||
eig_common_obj = env2.Object(eig_common)
|
eig_common_obj = env_spec.Object(eig_common)
|
||||||
eig_pw_obj = env2.Object(eig_pw)
|
eig_pw_obj = env_spec.Object(eig_pw)
|
||||||
eig_mi_obj = env2.Object(eig_mi)
|
eig_mi_obj = env_spec.Object(eig_mi)
|
||||||
|
|
||||||
Requires(memalloc_obj, dim_mod_obj)
|
Requires(memalloc_obj, dim_mod_obj)
|
||||||
|
|
||||||
# define Python extensions
|
# define Python extensions
|
||||||
common_deps = dim_mod_obj + memalloc_obj + cluster_gen_obj + common_sub_obj
|
common_deps = dim_mod_obj + memalloc_obj + cluster_gen_obj + common_sub_obj
|
||||||
|
|
||||||
deps = common_deps + renormalization_obj + phd_se_noso_nosp_nosym_obj
|
deps = common_deps + renormalization_obj + phd_se_noso_nosp_nosym_obj
|
||||||
phd_se_mod = env2.F2PY('_phd_se_noso_nosp_nosym', ['phd_se_noso_nosp_nosym/main.f'] + deps)
|
phd_se_mod = env_spec.F2py('_phd_se_noso_nosp_nosym', ['phd_se_noso_nosp_nosym/main.f'] + deps)
|
||||||
Requires(phd_se_mod, deps)
|
env_spec.InstallModule(phd_se_mod)
|
||||||
env2.Alias('phd_se', phd_se_mod)
|
|
||||||
|
|
||||||
deps = common_deps + renormalization_obj + phd_mi_noso_nosp_nosym_obj
|
deps = common_deps + renormalization_obj + phd_mi_noso_nosp_nosym_obj
|
||||||
phd_mi_mod = env2.F2PY('_phd_mi_noso_nosp_nosym', ['phd_mi_noso_nosp_nosym/main.f'] + deps)
|
phd_mi_mod = env_spec.F2py('_phd_mi_noso_nosp_nosym', ['phd_mi_noso_nosp_nosym/main.f'] + deps)
|
||||||
Requires(phd_mi_mod, deps)
|
env_spec.InstallModule(phd_mi_mod)
|
||||||
env2.Alias('phd_mi', phd_mi_mod)
|
|
||||||
|
|
||||||
deps = common_deps + renormalization_obj + eig_common_obj + eig_mi_obj
|
deps = common_deps + renormalization_obj + eig_common_obj + eig_mi_obj
|
||||||
eig_mi_mod = env2.F2PY('_eig_mi', ['eig/mi/main.f'] + deps)
|
eig_mi_mod = env_spec.F2py('_eig_mi', ['eig/mi/main.f'] + deps)
|
||||||
Requires(eig_mi_mod, deps)
|
env_spec.InstallModule(eig_mi_mod)
|
||||||
env2.Alias('eig_mi', eig_mi_mod)
|
|
||||||
|
|
||||||
deps = common_deps + renormalization_obj + eig_common_obj + eig_pw_obj
|
deps = common_deps + renormalization_obj + eig_common_obj + eig_pw_obj
|
||||||
eig_pw_mod = env2.F2PY('_eig_pw', ['eig/pw/main.f'] + deps)
|
eig_pw_mod = env_spec.F2py('_eig_pw', ['eig/pw/main.f'] + deps)
|
||||||
Requires(eig_pw_mod, deps)
|
env_spec.InstallModule(eig_pw_mod)
|
||||||
env2.Alias('eig_pw', eig_pw_mod)
|
|
||||||
|
# Alias
|
||||||
|
env_spec.Alias('spec', [phd_se_mod, phd_mi_mod, eig_pw_mod, eig_mi_mod])
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MODULE DIM_MOD
|
MODULE DIM_MOD
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
INTEGER NATP_M, NATCLU_M, NAT_EQ_M, N_CL_L_M
|
INTEGER NATP_M, NATCLU_M, NAT_EQ_M, N_CL_L_M
|
||||||
|
|
|
@ -7,8 +7,7 @@ import os
|
||||||
|
|
||||||
# find the version number
|
# find the version number
|
||||||
# 1- Try to read it from the git info
|
# 1- Try to read it from the git info
|
||||||
# 2- If it fails, try to read it from the VERSION file
|
# 2- If it fails, try to read it from the distribution file
|
||||||
# 3- If it fails, try to read it from the distribution file
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
v = get_version(root='../../', relative_to=__file__, version_scheme="post-release")
|
v = get_version(root='../../', relative_to=__file__, version_scheme="post-release")
|
||||||
|
@ -17,14 +16,9 @@ try:
|
||||||
__version__ = v.base_version
|
__version__ = v.base_version
|
||||||
else:
|
else:
|
||||||
__version__ = v.public
|
__version__ = v.public
|
||||||
except (LookupError, ImportError):
|
except Exception as err:
|
||||||
try:
|
|
||||||
f = os.path.join(os.path.dirname(__file__), "../VERSION")
|
|
||||||
with open(f, "r") as fd:
|
|
||||||
__version__ = fd.read().strip('\n ')
|
|
||||||
except:
|
|
||||||
try:
|
try:
|
||||||
__version__ = get_distribution(__name__.strip('.version')).version
|
__version__ = get_distribution(__name__.strip('.version')).version
|
||||||
except DistributionNotFound:
|
except Exception as err:
|
||||||
print("Unable to get the version number!")
|
print("Unable to get the version number!")
|
||||||
|
__version__ = "9.9.9"
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
numpy
|
numpy
|
||||||
|
matplotlib==2.1.1
|
||||||
ase
|
ase
|
||||||
h5py
|
h5py
|
||||||
lxml
|
lxml
|
||||||
pint
|
pint
|
||||||
terminaltables
|
terminaltables
|
||||||
pycairo
|
pycairo
|
||||||
coverage
|
|
||||||
sphinx
|
|
||||||
setuptools_scm
|
setuptools_scm
|
||||||
wxPython
|
wxPython
|
||||||
|
|
57
src/setup.py
57
src/setup.py
|
@ -13,72 +13,23 @@ import subprocess
|
||||||
import traceback
|
import traceback
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import glob
|
||||||
sys.path.insert(0, "msspec")
|
sys.path.insert(0, "msspec")
|
||||||
|
|
||||||
|
|
||||||
from version import __version__
|
from version import __version__
|
||||||
|
|
||||||
|
with open('setup_requirements.txt', 'r') as fd:
|
||||||
|
SETUP_REQUIREMENTS = fd.read().strip().split('\n')
|
||||||
|
|
||||||
SETUP_REQUIRES = ['scons', 'setuptools_scm']
|
|
||||||
with open('requirements.txt', 'r') as fd:
|
with open('requirements.txt', 'r') as fd:
|
||||||
REQUIREMENTS = fd.read().strip().split('\n')
|
REQUIREMENTS = fd.read().strip().split('\n')
|
||||||
|
|
||||||
subprocess.call(["pip", "install"] + SETUP_REQUIRES)
|
|
||||||
|
|
||||||
|
|
||||||
class BuildExtCmd(_build_ext):
|
|
||||||
def run(self):
|
|
||||||
src_dir = "."
|
|
||||||
subprocess.call(['scons'])
|
|
||||||
for ext in self.extensions:
|
|
||||||
fullname = self.get_ext_fullname(ext.name)
|
|
||||||
filename = self.get_ext_filename(fullname)
|
|
||||||
print("building ", filename)
|
|
||||||
|
|
||||||
src_filename = filename
|
|
||||||
dest_filename = os.path.join(self.build_lib, filename)
|
|
||||||
|
|
||||||
os.makedirs(os.path.dirname(dest_filename), exist_ok=True)
|
|
||||||
copy_file(src_filename, dest_filename, verbose=self.verbose,
|
|
||||||
dry_run=self.dry_run)
|
|
||||||
|
|
||||||
|
|
||||||
class BuildCmd(_build):
|
|
||||||
def run(self):
|
|
||||||
print("build_lib ", self.build_lib)
|
|
||||||
self.run_command("build_ext")
|
|
||||||
_build.run(self)
|
|
||||||
|
|
||||||
class InstallCmd(_install):
|
|
||||||
def run(self):
|
|
||||||
self.run_command("build")
|
|
||||||
_install.run(self)
|
|
||||||
|
|
||||||
class CleanCmd(_clean):
|
|
||||||
def run(self):
|
|
||||||
subprocess.call(['scons', '-c'])
|
|
||||||
_clean.run(self)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
module_phagen = Extension('msspec.phagen.fortran.libphagen',['msspec/phagen/fortran/main.f'])
|
|
||||||
module_spec_phd_mi = Extension('msspec.spec.fortran._phd_mi_noso_nosp_nosym',['msspec/spec/fortran/phd_mi_noso_nosp_nosym/main.f'])
|
|
||||||
module_spec_phd_se = Extension('msspec.spec.fortran._phd_se_noso_nosp_nosym',['msspec/spec/fortran/phd_se_noso_nosp_nosym/main.f'])
|
|
||||||
module_eig_mi = Extension('msspec.spec.fortran._eig_mi',['msspec/spec/fortran/eig/mi/main.f'])
|
|
||||||
module_eig_pw = Extension('msspec.spec.fortran._eig_pw',['msspec/spec/fortran/eig/pw/main.f'])
|
|
||||||
|
|
||||||
setup(name='msspec',
|
setup(name='msspec',
|
||||||
version=__version__,
|
version=__version__,
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
ext_modules=[module_phagen, module_spec_phd_mi, module_spec_phd_se, module_eig_mi, module_eig_pw],
|
|
||||||
cmdclass={'build' : BuildCmd,
|
|
||||||
'build_ext': BuildExtCmd,
|
|
||||||
'clean' : CleanCmd,
|
|
||||||
'install' : InstallCmd,
|
|
||||||
},
|
|
||||||
packages=find_packages(include='msspec.*'),
|
packages=find_packages(include='msspec.*'),
|
||||||
setup_requires=SETUP_REQUIRES,
|
setup_requires=SETUP_REQUIREMENTS,
|
||||||
install_requires=REQUIREMENTS,
|
install_requires=REQUIREMENTS,
|
||||||
|
|
||||||
author='Didier Sébilleau, Sylvain Tricot',
|
author='Didier Sébilleau, Sylvain Tricot',
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
scons
|
||||||
|
setuptools_scm
|
||||||
|
numpy
|
||||||
|
sphinx
|
||||||
|
coverage
|
Loading…
Reference in New Issue