Commit cf95284b authored by Baird, Mark's avatar Baird, Mark
Browse files

Updating the python install process to build during configure

parent 9f62e9b9
Loading
Loading
Loading
Loading
+69 −54
Original line number Diff line number Diff line
@@ -18,66 +18,81 @@ ENDIF(NOT TRIBITS_PROCESSING_PACKAGE)

file(COPY SubKit doc tests LICENSE MANIFEST.in README.md DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

#find_package(PythonInterp 2.7.14 REQUIRED )
#find_package(PythonLibs 2.7.14 REQUIRED )
#find_program(PYTHON "python")
find_package(PythonInterp 2.7.5 REQUIRED )
find_package(PythonLibs 2.7.5 REQUIRED )
find_program(PYTHON "python")
SET(PYTHON_EXE
    ${PYTHON}
) 
# Find if a Python module is installed
# Found at http://www.cmake.org/pipermail/cmake/2011-January/041666.html
# To use do: find_python_module(PyQt4 REQUIRED)
function(find_python_module module)
	string(TOUPPER ${module} module_upper)
	if(NOT PY_${module_upper})
		if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED")
			set(${module}_FIND_REQUIRED TRUE)
		endif()
		# A module's location is usually a directory, but for binary modules
		# it's a .so file.
		execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" 
			"import re, ${module}; print(re.compile('/__init__.py.*').sub('',${module}.__file__))"
			RESULT_VARIABLE _${module}_status 
			OUTPUT_VARIABLE _${module}_location
			ERROR_QUIET 
			OUTPUT_STRIP_TRAILING_WHITESPACE)
		if(NOT _${module}_status)
			set(PY_${module_upper} ${_${module}_location} CACHE STRING 
				"Location of Python module ${module}")
		endif(NOT _${module}_status)
	endif(NOT PY_${module_upper})
	find_package_handle_standard_args(PY_${module} DEFAULT_MSG PY_${module_upper})
endfunction(find_python_module)

#if(NOT (PYTHON))

if(NOT "find_python_module(PyQt4)")
  if(UNIX AND NOT APPLE)
     MESSAGE("Start ${PYTHON_CONFIGURE_COMMAND}")
     ADD_CUSTOM_COMMAND(
     COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}
     COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/SubKit/utils/bundle/linux/Miniconda2-latest-Linux-x86_64.sh  -b -u -p ${CMAKE_INSTALL_PREFIX}/conda
     COMMAND ${CMAKE_INSTALL_PREFIX}/conda/bin/pip install -r ${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/linux/requirements.txt --no-index --find-links file://${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/linux
     OUTPUT miniconda.log
     COMMENT "Building python via MiniConda"
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/linux
     SET(MAKE_INSTALL_DIR_COMMAND
     "mkdir -p ${CMAKE_CURRENT_BINARY_DIR}"
     )
     SET(PYTHON_CONFIGURE_COMMAND
     "${CMAKE_CURRENT_SOURCE_DIR}/SubKit/utils/bundle/linux/Miniconda2-latest-Linux-x86_64.sh -b -u -p ${CMAKE_CURRENT_BINARY_DIR}/conda"
     )
     ADD_CUSTOM_TARGET(
     BuildPython ALL
     DEPENDS miniconda.log
     SET(PYTHON_UPDATE_COMMAND
     "${CMAKE_CURRENT_BINARY_DIR}/conda/bin/pip install -r ${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/linux/requirements.txt --no-index --find-links file://${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/linux"
     )
     MESSAGE("Building Python via Miniconda")
     execute_process(
         COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/conda
         COMMAND bash -c ${PYTHON_CONFIGURE_COMMAND}
         OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/miniconda.log
     )
     execute_process(
          COMMAND bash -c ${PYTHON_UPDATE_COMMAND}
          OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/update_miniconda.log
     )
  else()
     MESSAGE("Start ${PYTHON_CONFIGURE_COMMAND}")
     ADD_CUSTOM_COMMAND(
     COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}
     COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/SubKit/utils/bundle/linux/Miniconda2-latest-Linux-x86_64.sh  -b -p ${CMAKE_INSTALL_PREFIX}/conda
     COMMAND ${CMAKE_INSTALL_PREFIX}/conda/bin/pip install -r ${CMAKE_CURRENT_BINARY_DIR}/SubKit/util/bundle/macos/requirements.txt --no-index --find-links file://${CMAKE_CURRENT_BINARY_DIR}/SubKit/util/bundle/macos
     OUTPUT miniconda.log
     COMMENT "Building python via MiniConda"
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils
     SET(MAKE_INSTALL_DIR_COMMAND
     "mkdir -p ${CMAKE_CURRENT_BINARY_DIR}"
     )
     SET(PYTHON_CONFIGURE_COMMAND
     "${CMAKE_CURRENT_SOURCE_DIR}/SubKit/utils/bundle/linux/Miniconda2-latest-MacOSX-x86_64.sh -b -u -p ${CMAKE_CURRENT_BINARY_DIR}/conda"
     )
     ADD_CUSTOM_TARGET(
     BuildPython ALL
     DEPENDS miniconda.log
     SET(PYTHON_UPDATE_COMMAND
     "${CMAKE_CURRENT_BINARY_DIR}/conda/bin/pip install -r ${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/macos/requirements.txt --no-index --find-links file://${CMAKE_CURRENT_BINARY_DIR}/SubKit/utils/bundle/macos"
     )
     MESSAGE("bash  -c ${PYTHON_CONFIGURE_COMMAND}")
     execute_process(
         COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/conda
         COMMAND bash -c ${PYTHON_CONFIGURE_COMMAND}
         OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/miniconda.log
     )
     execute_process(
          COMMAND bash -c ${PYTHON_UPDATE_COMMAND}
          OUTPUT_FILE${CMAKE_CURRENT_BINARY_DIR}/update_miniconda.log
     )
  endif()
#  ADD_CUSTOM_TARGET(
#  always_run_target ALL
#  DEPENDS miniconda.log
#  )
#  EXECUTE_PROCESS(
#  COMMAND ${PYTHON_UPDATE_CONFIGURE_COMMAND}
#  WORKING_DIRECTORY {CMAKE_CURRENT_SOURCE_DIR}/SubKit/util
#  )

#    set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
#    set(SETUP_PY    "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
#    set(DEPS        "${CMAKE_CURRENT_SOURCE_DIR}/SubKit/__init__.py")
#    set(OUTPUT      "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp")

#    configure_file(${SETUP_PY_IN} ${SETUP_PY})

#    add_custom_command(OUTPUT ${OUTPUT}
#                       COMMAND ${PYTHON} ${SETUP_PY} build
#                       COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}
#                       DEPENDS ${DEPS})
#
#    add_custom_target(subkit ALL DEPENDS ${OUTPUT})
endif()

    # This next line does not work because python install complains this directory is not in the python path
    #install(CODE "execute_process(COMMAND ${PYTHON} ${CMAKE_CURRENT_BINARY_DIR}/setup.py install --home=${CMAKE_INSTALL_PREFIX})")
    # So we are stuck with installing SubKit to the site-packages instead
    # Specify --user to do a local install
#    install(CODE "execute_process(COMMAND ${PYTHON} ${CMAKE_CURRENT_BINARY_DIR}/setup.py install --user)")
#endif()
INSTALL( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/conda DESTINATION ${CMAKE_INSTALL_PREFIX} )
INSTALL( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SubKit DESTINATION ${CMAKE_INSTALL_PREFIX} )
−39.9 MiB

File deleted.

Preview size limit exceeded, changes collapsed.

SubKit/utils/requirements.txt

deleted100644 → 0
+0 −35
Original line number Diff line number Diff line
asn1crypto==0.24.0
backports.functools-lru-cache==1.5
bcrypt==3.1.4
certifi==2018.8.24
cffi==1.11.5
chardet==3.0.4
cryptography==2.3.1
cycler==0.10.0
enum34==1.1.6
funcsigs==1.0.2
futures==3.2.0
h5py==2.9.0
idna==2.7
ipaddress==1.0.22
kiwisolver==1.1.0
matplotlib==2.2.4
mock==3.0.5
mpmath==1.1.0
numpy==1.16.4
paramiko==2.4.2
pycosat==0.6.3
pycparser==2.18
PyNaCl==1.3.0
pyOpenSSL==18.0.0
pyparsing==2.4.0
PySocks==1.6.8
python-dateutil==2.8.0
pytz==2019.1
requests==2.19.1
ruamel-yaml==0.15.46
six==1.11.0
spur==0.3.20
subprocess32==3.5.4
sympy==1.4
urllib3==1.23

SubKit/utils/setup.sh

deleted100755 → 0
+0 −66
Original line number Diff line number Diff line
#!/bin/bash

# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  SELFDIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
SELFDIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"

UTILDIR=${SELFDIR}/util
CONDADIR=${SELFDIR}/conda

DEBUG="false"
print_debug () {
    if [ ${DEBUG} == "true" ]; then
        echo $*
    fi
}

if [[ ! -d ${CONDADIR} ]]; then
{
    # install miniconda
    # assume Linux install script
    INSTALLER=${UTILDIR}/Miniconda2-latest-Linux-x86_64.sh
    PLATFORM=linux
    if [[ $OSTYPE == darwin* ]]; then
        INSTALLER=${UTILDIR}/Miniconda2-latest-MacOSX-x86_64.sh
        PLATFORM=macos
    fi
    print_debug attempting to install conda from ${INSTALLER}
    # silent modde is not actually silent, so redirect stdout and stderr
    bash ${INSTALLER} -b -p ${CONDADIR} &> ${UTILDIR}/miniconda.log
    RETURN_CODE=$?
    if [ ${RETURN_CODE} -ne 0 ] ; then
    {
        echo "Failed to install Conda"
        exit ${RETURN_CODE}
    }
    fi
    # pip install from the frozen requirements list
    PIP=${CONDADIR}/bin/pip
    print_debug ${PIP}
    PATH_TO_PLATFORM=${UTILDIR}/bundle/${PLATFORM}
    REQUIREMENTS=${PATH_TO_PLATFORM}/requirements.txt
    print_debug ${REQUIREMENTS}
    # redirect stdout and stderr
    # by default pip will use the local OS bundle to update miniconda, if yo get an error
    # and need to download different python installation packages, 
    #comment the following line, and uncomment the second pip install line
    ${PIP} install -r ${REQUIREMENTS} --no-index --find-links file://$PATH_TO_PLATFORM &> ${UTILDIR}/requirements.log
    #${PIP} install -r ${REQUIREMENTS} &> ${UTILDIR}/requirements.log
    RETURN_CODE=$?
    if [ ${RETURN_CODE} -ne 0 ] ; then
    {
        echo "Failed to install necessary libraries from "${REQUIREMENTS}
        exit ${RETURN_CODE}
    }
    fi
}
fi

# pass the args to python
#${CONDADIR}/bin/python "$@"