#   Copyright 2017 Edoardo Pasca
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

# #.rst:
# FindAnacondaEnvironment
# --------------
#
# Find Python executable and library for a specific Anaconda environment
#
# This module finds the Python interpreter for a specific Anaconda enviroment, 
# if installed and determines where the include files and libraries are.  
# This code sets the following variables:
#
# ::
#   PYTHONINTERP_FOUND         - if the Python interpret has been found
#   PYTHON_EXECUTABLE          - the Python interpret found
#   PYTHON_LIBRARY             - path to the python library
#   PYTHON_INCLUDE_PATH        - path to where Python.h is found (deprecated)
#   PYTHON_INCLUDE_DIRS        - path to where Python.h is found
#   PYTHONLIBS_VERSION_STRING  - version of the Python libs found (since CMake 2.8.8)
#   PYTHON_VERSION_MAJOR       - major Python version
#   PYTHON_VERSION_MINOR       - minor Python version
#   PYTHON_VERSION_PATCH       - patch Python version



function (findPythonForAnacondaEnvironment env)
	if (WIN32)
	  file(TO_CMAKE_PATH ${env}/python.exe PYTHON_EXECUTABLE)
        elseif (UNIX)
  	  file(TO_CMAKE_PATH ${env}/bin/python PYTHON_EXECUTABLE)
	endif()

	
	message("findPythonForAnacondaEnvironment Found Python Executable" ${PYTHON_EXECUTABLE})
	####### FROM FindPythonInterpr ########
	# determine python version string
	if(PYTHON_EXECUTABLE)
		execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
								"import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
						OUTPUT_VARIABLE _VERSION
						RESULT_VARIABLE _PYTHON_VERSION_RESULT
						ERROR_QUIET)
		if(NOT _PYTHON_VERSION_RESULT)
			string(REPLACE ";" "." _PYTHON_VERSION_STRING "${_VERSION}")
			list(GET _VERSION 0 _PYTHON_VERSION_MAJOR)
			list(GET _VERSION 1 _PYTHON_VERSION_MINOR)
			list(GET _VERSION 2 _PYTHON_VERSION_PATCH)
			if(PYTHON_VERSION_PATCH EQUAL 0)
				# it's called "Python 2.7", not "2.7.0"
				string(REGEX REPLACE "\\.0$" "" _PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
			endif()
		else()
			# sys.version predates sys.version_info, so use that
			execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)"
							OUTPUT_VARIABLE _VERSION
							RESULT_VARIABLE _PYTHON_VERSION_RESULT
							ERROR_QUIET)
			if(NOT _PYTHON_VERSION_RESULT)
				string(REGEX REPLACE " .*" "" _PYTHON_VERSION_STRING "${_VERSION}")
				string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" _PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
				string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" _PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
				if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.([0-9]+)")
					set(PYTHON_VERSION_PATCH "${CMAKE_MATCH_1}")
				else()
					set(PYTHON_VERSION_PATCH "0")
				endif()
			else()
				# sys.version was first documented for Python 1.5, so assume
				# this is older.
				set(PYTHON_VERSION_STRING "1.4" PARENT_SCOPE)
				set(PYTHON_VERSION_MAJOR "1" PARENT_SCOPE)
				set(PYTHON_VERSION_MINOR "4" PARENT_SCOPE)
				set(PYTHON_VERSION_PATCH "0" PARENT_SCOPE)
			endif()
		endif()
		unset(_PYTHON_VERSION_RESULT)
		unset(_VERSION)
	endif()
	###############################################
	
	set (PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} PARENT_SCOPE)
	set (PYTHONINTERP_FOUND "ON" PARENT_SCOPE)
	set (PYTHON_VERSION_STRING ${_PYTHON_VERSION_STRING} PARENT_SCOPE)
	set (PYTHON_VERSION_MAJOR ${_PYTHON_VERSION_MAJOR} PARENT_SCOPE)
	set (PYTHON_VERSION_MINOR ${_PYTHON_VERSION_MINOR} PARENT_SCOPE)
	set (PYTHON_VERSION_PATCH ${_PYTHON_VERSION_PATCH} PARENT_SCOPE)
	message("My version found " ${PYTHON_VERSION_STRING})
	## find conda executable
	if (WIN32)
	  set (CONDA_EXECUTABLE ${env}/Script/conda PARENT_SCOPE)
	elseif(UNIX)
	  set (CONDA_EXECUTABLE ${env}/bin/conda PARENT_SCOPE)
	endif()
endfunction()



set(Python_ADDITIONAL_VERSIONS 3.5)

find_package(PythonInterp)
if (PYTHONINTERP_FOUND)
  
  message("Found interpret " ${PYTHON_EXECUTABLE})
  message("Python Library " ${PYTHON_LIBRARY})
  message("Python Include Dir " ${PYTHON_INCLUDE_DIR})
  message("Python Include Path " ${PYTHON_INCLUDE_PATH})
  
  foreach(pv ${PYTHON_VERSION_STRING})
    message("Found interpret " ${pv})
  endforeach()
endif()



find_package(PythonLibs)
if (PYTHONLIB_FOUND) 
  message("Found PythonLibs PYTHON_LIBRARIES " ${PYTHON_LIBRARIES})
  message("Found PythonLibs PYTHON_INCLUDE_PATH " ${PYTHON_INCLUDE_PATH})
  message("Found PythonLibs PYTHON_INCLUDE_DIRS " ${PYTHON_INCLUDE_DIRS})
  message("Found PythonLibs PYTHONLIBS_VERSION_STRING " ${PYTHONLIBS_VERSION_STRING}  )
else()
  message("No PythonLibs Found")  
endif()




function(findPythonPackagesPath)
   execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print (get_python_lib())"
                      RESULT_VARIABLE PYTHON_CVPY_PROCESS
                      OUTPUT_VARIABLE PYTHON_STD_PACKAGES_PATH
                      OUTPUT_STRIP_TRAILING_WHITESPACE)
   #message("STD_PACKAGES " ${PYTHON_STD_PACKAGES_PATH})
   if("${PYTHON_STD_PACKAGES_PATH}" MATCHES "site-packages")
        set(_PYTHON_PACKAGES_PATH "python${PYTHON_VERSION_MAJOR_MINOR}/site-packages")
   endif()

    SET(PYTHON_PACKAGES_PATH "${PYTHON_STD_PACKAGES_PATH}" PARENT_SCOPE)

endfunction()