Work on Makefiles to make install easier...
epsi-builds/msspec_python3/pipeline/head This commit looks good Details

This commit is contained in:
Sylvain Tricot 2020-12-02 18:18:47 +01:00
parent 3834f38aec
commit d4ed926e55
7 changed files with 147 additions and 28 deletions

View File

@ -1,6 +1,6 @@
include src/options.mk include src/options.mk
PYTHON = python3 PYTHON = python
# Checking Python version # Checking Python version
PYTHON_EXE := $(shell command -v $(PYTHON) 2> /dev/null) PYTHON_EXE := $(shell command -v $(PYTHON) 2> /dev/null)
@ -17,21 +17,30 @@ ifneq ($(shell test $(PYTHON_VERSION_MAJOR) -ge 3 -a $(PYTHON_VERSION_MINOR) -ge
endif endif
.PHONY: pybinding venv doc .PHONY: pybinding venv doc clean
pybinding: pybinding:
@+$(MAKE) -C src pybinding @+$(MAKE) -C src pybinding
install: venv
@+$(MAKE) -C src sdist
@+$(MAKE) -C src frontend
@. $(VENV_PATH)/bin/activate && pip install src/dist/msspec-$(VERSION).tar.gz
venv: venv:
virtualenv --python=$(PYTHON_EXE) --prompt="(msspec-$(VERSION)) " venv virtualenv --python=$(PYTHON_EXE) --prompt="(msspec-$(VERSION)) " $(VENV_PATH)
. ./venv/bin/activate && pip install --upgrade pip && pip install -r src/pip.freeze . $(VENV_PATH)/bin/activate && pip install --upgrade pip && pip install -r src/pip.freeze
doc: doc:
@echo "Building pdf and html documentation..." @echo "Building pdf and html documentation..."
@mkdir -p package/ @mkdir -p package/
@+$(MAKE) -C doc/ latexpdf $(SUPPRESS_OUPUT) @+$(MAKE) -C doc/ latexpdf
@rm -rf package/*.pdf @rm -rf package/*.pdf
@cp "doc/build/latex/MsSpec-python.pdf" "./package/MsSpec-${VERSION}.pdf" @cp "doc/build/latex/MsSpec-python.pdf" "./package/MsSpec-$(VERSION).pdf"
@+$(MAKE) -C doc/ html $(SUPPRESS_OUPUT) @+$(MAKE) -C doc/ html
clean::
@+$(MAKE) -C src/ clean

View File

@ -83,8 +83,9 @@ html0: banner images
@echo @echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html." @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
html: html0 ownership $(BUILDDIR)/html/sitemap.xml coverage_report #html: html0 ownership $(BUILDDIR)/html/sitemap.xml coverage_report
@echo
html: html0 ownership $(BUILDDIR)/html/sitemap.xml
coverage_report: coverage_report:
@echo "Generating coverage report..." @echo "Generating coverage report..."

View File

@ -1,20 +1,31 @@
include options.mk include options.mk
.PHONY: sdist pybinding results clean .PHONY: sdist frontend pybinding results clean
install: sdist
@echo "Installing msspec python package"
@pip install dist/msspec-*.tar.gz
sdist: pybinding foo:
echo $(VERSION)
sdist: dist/msspec-$(VERSION).tar.gz
frontend: $(INSTALL_PREFIX)/bin/msspec
dist/msspec-$(VERSION).tar.gz: pybinding
@echo "Creating Python source distribution..." @echo "Creating Python source distribution..."
@python setup.py sdist @python setup.py sdist
$(INSTALL_PREFIX)/bin/msspec:
@cat msspec.sh.template | sed 's/__VERSION__/$(VERSION)/' > $@
@chmod u+x $@
pybinding: pybinding:
@echo "Building Python binding for phagen and spec..." @echo "Building Python binding for phagen and spec..."
@+$(MAKE) -C msspec/phagen/fortran all @+$(MAKE) -C msspec/phagen/fortran all
@+$(MAKE) -C msspec/spec/fortran all @+$(MAKE) -C msspec/spec/fortran all
@echo "$(VERSION)" > VERSION
results: msspec/results.txt results: msspec/results.txt
@ -38,6 +49,7 @@ clean::
# remove previous sdist # remove previous sdist
@rm -rf dist @rm -rf dist
@rm -rf *.egg* @rm -rf *.egg*
@rm VERSION
help: help:

100
src/msspec.sh.template Normal file
View File

@ -0,0 +1,100 @@
#!/bin/bash
SCRIPT_NAME="$0"
VERSION="__VERSION__"
VENV_PATH="$HOME/.local/src/msspec_venv_$VERSION"
# Check venv path
if ! [ -d "$VENV_PATH" ]; then
echo "ERROR: Unable to find version $VERSION of msspec!!"
exit 1
fi
launch_script() {
. "$VENV_PATH/bin/activate" && python $@
}
show_help () {
echo "Usage: 1) $SCRIPT_NAME -p [PYTHON OPTIONS] SCRIPT [ARGUMENTS...]"
echo " 2) $SCRIPT_NAME [-l FILE | -i | -h]"
echo " 3) eval \$($SCRIPT_NAME -e)"
echo ""
echo "Form (1) is used to launch a script"
echo "Form (2) is used to load a hdf5 data file"
echo "Form (3) is used to activate the msspec virtual environment"
echo ""
echo "List of possible options:"
echo " -p Pass every arguments after this option to the msspec"
echo " virtual environment Python interpreter."
echo " -i Run the interactive Python interpreter within msspec"
echo " virtual environment."
echo " -l Load and display a *.hdf5 data file in a graphical"
echo " window."
echo " -h Show this help message."
}
launch_interpreter() {
source $VENV_PATH/bin/activate
echo "Python interpreter of the MsSpec virtual environment."
echo ""
echo "This environment includes the following packages:"
pip list
echo ""
echo "Type in <CTRL>+D to exit."
echo ""
ipython --profile=msspec
}
load_data() {
. "$VENV_PATH/bin/activate" && python -m msspec.iodata $1
}
read_yes_no () {
PROMPT="$1"
DEFAULT="$2"
BYPASS="$3"
ANSWER=""
RESPONSE=""
VALID=1
while test $VALID -ne 0; do
test "$BYPASS" = "y" || read -p "${PROMPT} (y/n) [${DEFAULT}]? " "RESPONSE"
ANSWER="${RESPONSE:-${DEFAULT}}"
case "${ANSWER}" in
y|n) VALID=0 ;;
*) echo "Invalid choice, please answer \"y\" or \"n\"."; VALID=1 ;;
esac
done
}
uninstall() {
read_yes_no "This will completely remove msspec from your computer. Are you sure" "n" "$BYPASS"
case "${ANSWER}" in
y) rm -rv "$VENV_PATH" && rm "$SCRIPT_NAME" && echo "MsSpec successfully uninstalled." ;;
n) echo "Uninstallation aborted." ;;
esac
}
while getopts "hil:p:eu" option; do
case $option in
p) shift; launch_script "$@"
;;
i) launch_interpreter
;;
l) load_data "$OPTARG"; shift
;;
e) echo ". $VENV_PATH/bin/activate"
;;
u) uninstall
;;
*|h) show_help
;;
esac
done
if [ $OPTIND -eq 1 ]; then
show_help
fi

View File

@ -44,7 +44,10 @@ except Exception as err:
__version__ = get_distribution(__name__.strip('.version')).version __version__ = get_distribution(__name__.strip('.version')).version
except Exception as err: except Exception as err:
try: try:
with open("../VERSION", "r") as fd: thisfile_path = os.path.abspath(__file__)
thisfile_dir = os.path.dirname(thisfile_path)
versionfile = os.path.join(thisfile_dir, "../VERSION")
with open(versionfile, "r") as fd:
__version__ = fd.readline() __version__ = fd.readline()
except Exception as err: except Exception as err:
print("Unable to get the version number!") print("Unable to get the version number!")

View File

@ -4,6 +4,7 @@ F2PY = f2py3
DEBUG = 0 DEBUG = 0
VERBOSE = 0 VERBOSE = 0
BUILDDIR = ./build BUILDDIR = ./build
INSTALL_PREFIX = $(HOME)/.local
################################################################################ ################################################################################
@ -37,6 +38,7 @@ F2PYFLAGS_DBG = --debug-capi --debug
################################################################################ ################################################################################
#VERSION:=$(shell python -c "import msspec; print(msspec.__version__)") #VERSION:=$(shell python -c "import msspec; print(msspec.__version__)")
VERSION:=$(shell git describe|sed 's/-\([[:digit:]]\+\)-.*/\.post\1/') VERSION:=$(shell git describe|sed 's/-\([[:digit:]]\+\)-.*/\.post\1/')
VENV_PATH := $(INSTALL_PREFIX)/src/msspec_venv_$(VERSION)
ifeq ($(VERBOSE),0) ifeq ($(VERBOSE),0)
OUPUT_REDIRECTION := 1>/dev/null 2>/dev/null OUPUT_REDIRECTION := 1>/dev/null 2>/dev/null
@ -81,17 +83,9 @@ obj: $(OBJS)
clean:: clean::
@for objfile in $(OBJS); do \
if test -f $$objfile; then \
echo "Removing $$objfile..."; \
rm $$objfile; \
fi;\
done
@if test -d $(abspath $(BUILDDIR)); then \ @if test -d $(abspath $(BUILDDIR)); then \
if test `find $(abspath $(BUILDDIR)) -type f|wc -l` -eq 0; then \ echo "Removing $(abspath $(BUILDDIR))..."; \
echo "Removing empty folder $(abspath $(BUILDDIR))..."; \
rm -r $(abspath $(BUILDDIR)); \ rm -r $(abspath $(BUILDDIR)); \
fi; \
fi fi
@if test x$(SO) != x; then \ @if test x$(SO) != x; then \
if test -f $(SO); then \ if test -f $(SO); then \

View File

@ -73,6 +73,6 @@ if __name__ == "__main__":
], ],
keywords='spectroscopy atom electron photon multiple scattering', keywords='spectroscopy atom electron photon multiple scattering',
license='GPL', license='GPL',
entry_points={ #entry_points={
'console_scripts': ['msspec=msspec.cli:main']} # 'console_scripts': ['msspec=msspec.cli:main']}
) )