Commit 76bc9f8c authored by Andrey Kamaev's avatar Andrey Kamaev

Removed SWIG from Android toolchain; always search for python;…

Removed SWIG from Android toolchain; always search for python; find_program/find_package cmake functions wrapped for case of cross-compiling.
parent 3ac024ff
...@@ -63,6 +63,19 @@ if(MSVC) ...@@ -63,6 +63,19 @@ if(MSVC)
set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE) set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
endif() endif()
# in case of cross compilation this macro will search packages
# for host system instead of packages for target system
if(NOT COMMAND find_host_package)
macro(find_host_package)
find_package(${ARGN})
endmacro()
endif()
if(NOT COMMAND find_host_program)
macro(find_host_program)
find_program(${ARGN})
endmacro()
endif()
# -------------------------------------------------------------- # --------------------------------------------------------------
# Indicate CMake 2.7 and above that we don't want to mix relative # Indicate CMake 2.7 and above that we don't want to mix relative
...@@ -168,7 +181,7 @@ set(PACKAGE_VERSION "${OPENCV_VERSION}") ...@@ -168,7 +181,7 @@ set(PACKAGE_VERSION "${OPENCV_VERSION}")
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# Autodetect if we are in a SVN repository # Autodetect if we are in a SVN repository
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
find_program(SVNVERSION_PATH svnversion) find_host_program(SVNVERSION_PATH svnversion)
mark_as_advanced(force SVNVERSION_PATH) mark_as_advanced(force SVNVERSION_PATH)
if(SVNVERSION_PATH) if(SVNVERSION_PATH)
message(STATUS "Extracting svn version, please wait...") message(STATUS "Extracting svn version, please wait...")
...@@ -564,6 +577,8 @@ if(WITH_OPENEXR) ...@@ -564,6 +577,8 @@ if(WITH_OPENEXR)
include(OpenCVFindOpenEXR.cmake) include(OpenCVFindOpenEXR.cmake)
endif() endif()
# Python support
# ===================================================
set(BUILD_NEW_PYTHON_SUPPORT ON CACHE BOOL "Build with Python support") set(BUILD_NEW_PYTHON_SUPPORT ON CACHE BOOL "Build with Python support")
if (WIN32) if (WIN32)
...@@ -571,63 +586,66 @@ if (WIN32) ...@@ -571,63 +586,66 @@ if (WIN32)
set(BUILD_NEW_PYTHON_SUPPORT OFF) set(BUILD_NEW_PYTHON_SUPPORT OFF)
endif() endif()
endif() endif()
if(ANDROID)
set(BUILD_NEW_PYTHON_SUPPORT OFF)
endif()
if(BUILD_NEW_PYTHON_SUPPORT) # Always try to find python
find_package(PythonInterp) # ===================================================
find_package(PythonLibs) find_host_package(PythonInterp)
find_host_package(PythonLibs)
# cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND # cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND
if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH) if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
set(PYTHONLIBS_FOUND ON) set(PYTHONLIBS_FOUND ON)
endif(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH) endif(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
execute_process(COMMAND ${PYTHON_EXECUTABLE} --version execute_process(COMMAND ${PYTHON_EXECUTABLE} --version
ERROR_VARIABLE PYTHON_VERSION_FULL ERROR_VARIABLE PYTHON_VERSION_FULL
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX MATCH "[0-9].[0-9]" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}") string(REGEX MATCH "[0-9].[0-9]" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}")
if(UNIX) if(UNIX)
set(PYTHON_PLUGIN_INSTALL_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages/opencv) set(PYTHON_PLUGIN_INSTALL_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages/opencv)
if(APPLE) if(APPLE)
set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages CACHE PATH "Where to install the python packages.") set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages CACHE PATH "Where to install the python packages.")
else() #debian based assumed, install to the dist-packages. else() #debian based assumed, install to the dist-packages.
set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/dist-packages CACHE PATH "Where to install the python packages.") set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/dist-packages CACHE PATH "Where to install the python packages.")
endif() endif()
endif() endif()
if(WIN32) if(WIN32)
get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE) get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE)
set(PYTHON_PLUGIN_INSTALL_PATH "${PYTHON_PATH}/Lib/site-packages/opencv") set(PYTHON_PLUGIN_INSTALL_PATH "${PYTHON_PATH}/Lib/site-packages/opencv")
set(PYTHON_PACKAGES_PATH "${PYTHON_PATH}/Lib/site-packages") set(PYTHON_PACKAGES_PATH "${PYTHON_PATH}/Lib/site-packages")
endif() endif()
# Attempt to discover the NumPy include directory. If this succeeds, build with NumPy
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy.distutils; print numpy.distutils.misc_util.get_numpy_include_dirs()[0]" # Attempt to discover the NumPy include directory. If this succeeds, then build python API with NumPy
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy.distutils; print numpy.distutils.misc_util.get_numpy_include_dirs()[0]"
RESULT_VARIABLE PYTHON_NUMPY_PROCESS RESULT_VARIABLE PYTHON_NUMPY_PROCESS
OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIRS OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIRS
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
if(PYTHON_NUMPY_PROCESS EQUAL 0)
if(PYTHON_NUMPY_PROCESS EQUAL 0)
set(PYTHON_USE_NUMPY 1) set(PYTHON_USE_NUMPY 1)
add_definitions(-D PYTHON_USE_NUMPY=1) add_definitions(-D PYTHON_USE_NUMPY=1)
include_directories(AFTER ${PYTHON_NUMPY_INCLUDE_DIRS}) include_directories(AFTER ${PYTHON_NUMPY_INCLUDE_DIRS})
message(STATUS " Use INCLUDE: ${PYTHON_NUMPY_INCLUDE_DIRS}") message(STATUS " Use INCLUDE: ${PYTHON_NUMPY_INCLUDE_DIRS}")
else() else()
set(PYTHON_USE_NUMPY 0) set(PYTHON_USE_NUMPY 0)
endif() endif()
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sphinx; print sphinx.__version__" execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sphinx; print sphinx.__version__"
RESULT_VARIABLE SPHINX_PROCESS RESULT_VARIABLE SPHINX_PROCESS
OUTPUT_VARIABLE SPHINX_VERSION OUTPUT_VARIABLE SPHINX_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
set(HAVE_SPHINX 0) set(HAVE_SPHINX 0)
if(SPHINX_PROCESS EQUAL 0) if(SPHINX_PROCESS EQUAL 0)
find_program(SPHINX_BUILD sphinx-build) find_host_program(SPHINX_BUILD sphinx-build)
if(SPHINX_BUILD) if(SPHINX_BUILD)
set(HAVE_SPHINX 1) set(HAVE_SPHINX 1)
message(STATUS " Found Sphinx ${SPHINX_VERSION}: ${SPHINX_BUILD}") message(STATUS " Found Sphinx ${SPHINX_VERSION}: ${SPHINX_BUILD}")
endif() endif()
endif()
endif() endif()
#YV #YV
......
...@@ -47,55 +47,55 @@ IF (WIN32) ...@@ -47,55 +47,55 @@ IF (WIN32)
ENDIF (WIN32) ENDIF (WIN32)
FIND_PROGRAM(LATEX_COMPILER FIND_HOST_PROGRAM(LATEX_COMPILER
NAMES latex NAMES latex
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
) )
FIND_PROGRAM(PDFLATEX_COMPILER FIND_HOST_PROGRAM(PDFLATEX_COMPILER
NAMES pdflatex NAMES pdflatex
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
) )
FIND_PROGRAM(BIBTEX_COMPILER FIND_HOST_PROGRAM(BIBTEX_COMPILER
NAMES bibtex NAMES bibtex
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
) )
FIND_PROGRAM(MAKEINDEX_COMPILER FIND_HOST_PROGRAM(MAKEINDEX_COMPILER
NAMES makeindex NAMES makeindex
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
) )
FIND_PROGRAM(DVIPS_CONVERTER FIND_HOST_PROGRAM(DVIPS_CONVERTER
NAMES dvips NAMES dvips
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
) )
FIND_PROGRAM(DVIPDF_CONVERTER FIND_HOST_PROGRAM(DVIPDF_CONVERTER
NAMES dvipdfm dvipdft dvipdf NAMES dvipdfm dvipdft dvipdf
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
) )
IF (WIN32) IF (WIN32)
FIND_PROGRAM(PS2PDF_CONVERTER FIND_HOST_PROGRAM(PS2PDF_CONVERTER
NAMES ps2pdf14.bat NAMES ps2pdf14.bat
PATHS ${GHOSTSCRIPT_LIBRARY_PATH} PATHS ${GHOSTSCRIPT_LIBRARY_PATH}
) )
ELSE (WIN32) ELSE (WIN32)
FIND_PROGRAM(PS2PDF_CONVERTER FIND_HOST_PROGRAM(PS2PDF_CONVERTER
NAMES ps2pdf14 ps2pdf NAMES ps2pdf14 ps2pdf
PATHS /usr/bin /usr/texbin PATHS /usr/bin /usr/texbin
) )
ENDIF (WIN32) ENDIF (WIN32)
FIND_PROGRAM(LATEX2HTML_CONVERTER FIND_HOST_PROGRAM(LATEX2HTML_CONVERTER
NAMES latex2html NAMES latex2html
PATHS ${MIKTEX_BINARY_PATH} PATHS ${MIKTEX_BINARY_PATH}
/usr/bin /usr/texbin /usr/bin /usr/texbin
......
...@@ -6,15 +6,6 @@ ...@@ -6,15 +6,6 @@
#Build all examples #Build all examples
set(BUILD_EXAMPLES OFF CACHE BOOL "" ) set(BUILD_EXAMPLES OFF CACHE BOOL "" )
#Build Reference Manual
set(BUILD_REFMAN OFF CACHE BOOL "" )
#Build LaTeX OpenCV Documentation
#set(BUILD_LATEX_DOCS OFF CACHE BOOL "" )
#Build with Python support
set(BUILD_NEW_PYTHON_SUPPORT OFF CACHE BOOL "" )
#Build a installer with the SDK #Build a installer with the SDK
set(BUILD_PACKAGE OFF CACHE BOOL "" ) set(BUILD_PACKAGE OFF CACHE BOOL "" )
...@@ -24,8 +15,7 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" ) ...@@ -24,8 +15,7 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" )
#Build 3rd party libraries #Build 3rd party libraries
set(OPENCV_BUILD_3RDPARTY_LIBS ON CACHE BOOL "" ) set(OPENCV_BUILD_3RDPARTY_LIBS ON CACHE BOOL "" )
#Choose the type of build, options are: None Debug Release RelWithDebInfo #Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel.
# MinSizeRel.
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" ) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" )
#Include IEEE1394 support #Include IEEE1394 support
...@@ -106,5 +96,5 @@ SET( ENABLE_SSE42 OFF CACHE INTERNAL "" FORCE ) ...@@ -106,5 +96,5 @@ SET( ENABLE_SSE42 OFF CACHE INTERNAL "" FORCE )
#Enable SSSE3 instructions #Enable SSSE3 instructions
SET( ENABLE_SSSE3 OFF CACHE INTERNAL "" FORCE ) SET( ENABLE_SSSE3 OFF CACHE INTERNAL "" FORCE )
#Set output folder to "libs" instead of "lib" for better compatibility with java projects #Set output folder to "libs/armeabi-v7a" instead of "lib" for compatibility with java projects
SET( LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/libs CACHE PATH "path for android libs" ) SET( LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/libs/${ARMEABI_NDK_NAME} CACHE PATH "path for android libs" )
...@@ -94,6 +94,8 @@ ...@@ -94,6 +94,8 @@
# [~] default NDK path is updated for version r5c # [~] default NDK path is updated for version r5c
# [+] variable CMAKE_SYSTEM_PROCESSOR is set based on ARM_TARGET # [+] variable CMAKE_SYSTEM_PROCESSOR is set based on ARM_TARGET
# [~] toolchain install directory is added to linker paths # [~] toolchain install directory is added to linker paths
# [-] removed SWIG-related stuff from toolchain
# [+] added macro find_host_package, find_host_program to search packages/programs on host system
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# this one is important # this one is important
...@@ -257,8 +259,8 @@ if( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS ) ...@@ -257,8 +259,8 @@ if( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS )
if( EXISTS ${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt ) if( EXISTS ${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt )
# these paths are required for jni part of Android projects # these paths are required for jni part of Android projects
# but they may conflict with traditional unix makefile's folder structure # but they may conflict with traditional unix makefile's folder structure
set( LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ARMEABI_NDK_NAME} CACHE PATH "path for android libs" FORCE )
set( EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ARMEABI_NDK_NAME} CACHE PATH "Output directory for applications" FORCE) set( EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ARMEABI_NDK_NAME} CACHE PATH "Output directory for applications" FORCE)
set( LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ARMEABI_NDK_NAME} CACHE PATH "path for android libs" FORCE )
endif() endif()
set( CMAKE_INSTALL_PREFIX ${ANDROID_NDK_TOOLCHAIN_ROOT}/user/${ARMEABI_NDK_NAME} CACHE STRING "path for installing" FORCE ) set( CMAKE_INSTALL_PREFIX ${ANDROID_NDK_TOOLCHAIN_ROOT}/user/${ARMEABI_NDK_NAME} CACHE STRING "path for installing" FORCE )
endif() endif()
...@@ -279,10 +281,8 @@ if( BUILD_WITH_ANDROID_NDK_TOOLCHAIN ) ...@@ -279,10 +281,8 @@ if( BUILD_WITH_ANDROID_NDK_TOOLCHAIN )
include_directories( ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi/include/c++/4.4.3/arm-linux-androideabi ) include_directories( ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi/include/c++/4.4.3/arm-linux-androideabi )
endif() endif()
# allow programs like swig to be found -- but can be deceiving for
# system tool dependencies.
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
# only search for libraries and includes in the ndk toolchain # only search for libraries and includes in the ndk toolchain
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
...@@ -340,28 +340,22 @@ set( CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE ...@@ -340,28 +340,22 @@ set( CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE
set( ANDROID True ) set( ANDROID True )
set( BUILD_ANDROID True ) set( BUILD_ANDROID True )
#SWIG junk... #macro to find package on the host OS
set( NO_SWIG OFF CACHE BOOL "Don't search for SWIG" ) macro(find_host_package)
if( NOT NO_SWIG ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
#need to search in the host for swig to be found set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH ) find_package(${ARGN})
find_package( SWIG QUIET )
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
endmacro()
if( SWIG_FOUND ) macro(find_host_program)
set( SWIG_USE_FILE ${CMAKE_ROOT}/Modules/UseSWIG.cmake CACHE PATH "Use Swig cmake module" ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( SWIG_OUTPUT_ROOT ${LIBRARY_OUTPUT_PATH_ROOT}/src CACHE PATH "Where swig generated files will be placed relative to, <SWIG_OUTPUT_ROOT>/com/mylib/foo/jni ..." FORCE ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
#convenience macro for swig java packages find_program(${ARGN})
macro( SET_SWIG_JAVA_PACKAGE package_name ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
string( REGEX REPLACE "[.]" "/" package_name_output ${package_name} ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_SWIG_OUTDIR ${SWIG_OUTPUT_ROOT}/${package_name_output} ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set( CMAKE_SWIG_FLAGS "-package" "\"${package_name}\"" ) endmacro()
endmacro()
else()
message( STATUS "SWIG is not found" )
set( NO_SWIG ON CACHE BOOL "Don't search for SWIG" FORCE )
endif()
endif()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment