FreeCAD

Форк
0
/
FindPyCXX.cmake 
127 строк · 4.2 Кб
1
# Locate PyCXX headers and source files
2

3
# This module defines
4
# PYCXX_INCLUDE_DIR
5
# PYCXX_SOURCE_DIR
6
# PYCXX_FOUND
7
# PYCXX_SOURCES
8
# PYCXX_VERSION
9
#
10
# The PYCXX_*_DIR variables can be set to tell this module where
11
# the files are.
12

13

14
# There's no standard location for PyCXX.
15
#
16
# The authors' example is to put it in "~\" [sic].
17
#
18
# Ubuntu puts the includes into /usr/include/python2.7/CXX and sources into
19
# /usr/share/python2.7/CXX.
20
#
21
# The Zultron Fedora RPM does the same as Ubuntu.
22

23
set(PYCXX_FOUND "YES")
24

25
# find the header directory
26
if(PYCXX_INCLUDE_DIR)
27
    # headers better be in there
28
    if(NOT EXISTS "${PYCXX_INCLUDE_DIR}/CXX/Config.hxx")
29
        if(PyCXX_FIND_REQUIRED)
30
            MESSAGE(FATAL_ERROR
31
                "PyCXX: could not find CXX/Config.hxx in PYCXX_INCLUDE_DIR "
32
            "${PYCXX_INCLUDE_DIR}")
33
        else(PyCXX_FIND_REQUIRED)
34
            MESSAGE(WARNING
35
                "PyCXX: could not find CXX/Config.hxx in PYCXX_INCLUDE_DIR "
36
            "${PYCXX_INCLUDE_DIR}")
37
            unset(PYCXX_FOUND)
38
        endif(PyCXX_FIND_REQUIRED)
39
    endif(NOT EXISTS "${PYCXX_INCLUDE_DIR}/CXX/Config.hxx")
40
else(PYCXX_INCLUDE_DIR)
41
    # check in 'standard' places
42
    find_path(PYCXX_INCLUDE_DIR CXX/Config.hxx
43
        ${PYTHON_INCLUDE_DIR}
44
        "${CMAKE_CURRENT_LIST_DIR}/..")
45
    if(NOT PYCXX_INCLUDE_DIR)
46
        if(PyCXX_FIND_REQUIRED)
47
            MESSAGE(FATAL_ERROR
48
                "PyCXX not found; please set PYCXX_INCLUDE_DIR to "
49
                "the location of CXX/Config.hxx")
50
        else(PyCXX_FIND_REQUIRED)
51
            MESSAGE(STATUS "PyCXX not found")
52
            unset(PYCXX_FOUND)
53
        endif(PyCXX_FIND_REQUIRED)
54
    endif(NOT PYCXX_INCLUDE_DIR)
55
endif(PYCXX_INCLUDE_DIR)
56

57
# find the sources directory
58
if(PYCXX_SOURCE_DIR)
59
    # source directory specified, they'd better be there
60
    if(NOT EXISTS "${PYCXX_SOURCE_DIR}/cxxextensions.c")
61
        if(PyCXX_FIND_REQUIRED)
62
            MESSAGE(FATAL_ERROR
63
                "PyCXX: cxxextensions.c not found in PYCXX_SOURCE_DIR "
64
                "${PYCXX_SOURCE_DIR}")
65
        else(PyCXX_FIND_REQUIRED)
66
            MESSAGE(WARNING
67
                "PyCXX: cxxextensions.c not found in PYCXX_SOURCE_DIR "
68
                "${PYCXX_SOURCE_DIR}")
69
            unset(PYCXX_FOUND)
70
        endif(PyCXX_FIND_REQUIRED)
71
    endif(NOT EXISTS "${PYCXX_SOURCE_DIR}/cxxextensions.c")
72
else(PYCXX_SOURCE_DIR)
73
    # check in 'standard' places
74
    find_path(PYCXX_SOURCE_DIR cxxextensions.c
75
        "${PYCXX_INCLUDE_DIR}/CXX"
76
        "${PYCXX_INCLUDE_DIR}/Src"
77
        "${PYTHON_INCLUDE_DIR}/CXX"
78
        "${PYTHON_INCLUDE_DIR}/Src"
79
        "${CMAKE_CURRENT_LIST_DIR}/../Src"
80
        "${CMAKE_CURRENT_LIST_DIR}/../CXX")
81
    if(NOT PYCXX_SOURCE_DIR)
82
        if(PyCXX_FIND_REQUIRED)
83
            MESSAGE(FATAL_ERROR
84
                "PyCXX not found; please set PYCXX_SOURCE_DIR to "
85
                "the location of cxxextensions.c")
86
        else(PyCXX_FIND_REQUIRED)
87
            MESSAGE(STATUS "PyCXX not found")
88
            unset(PYCXX_FOUND)
89
        endif(PyCXX_FIND_REQUIRED)
90
    endif(NOT PYCXX_SOURCE_DIR)
91
endif(PYCXX_SOURCE_DIR)
92

93
# Find PyCXX Version
94
if(PYCXX_INCLUDE_DIR AND PYCXX_SOURCE_DIR)
95
    file(READ ${PYCXX_INCLUDE_DIR}/CXX/Version.hxx PYCXX_VERSION_H)
96
    foreach(item IN ITEMS MAJOR MINOR PATCH)
97
        string(REGEX REPLACE
98
            ".*#define[ \t]+PYCXX_VERSION_${item}[ \t]+([0-9]+).*"
99
            "\\1" PYCXX_VERSION_${item}
100
            "${PYCXX_VERSION_H}"
101
        )
102
    endforeach()
103
    set(PYCXX_VERSION ${PYCXX_VERSION_MAJOR}.${PYCXX_VERSION_MINOR}.${PYCXX_VERSION_PATCH})
104
endif()
105

106
# see what we've got
107
if(PYCXX_FOUND)
108
    MESSAGE(STATUS "PyCXX found:")
109
    MESSAGE(STATUS "  Headers:  ${PYCXX_INCLUDE_DIR}")
110
    MESSAGE(STATUS "  Sources:  ${PYCXX_SOURCE_DIR}")
111
    MESSAGE(STATUS "  Version:  ${PYCXX_VERSION}")
112

113
    # Build the list of sources for convenience
114
    set(PYCXX_SOURCES
115
        ${PYCXX_SOURCE_DIR}/cxxextensions.c
116
        ${PYCXX_SOURCE_DIR}/cxx_extensions.cxx
117
        ${PYCXX_SOURCE_DIR}/cxxsupport.cxx
118
        ${PYCXX_SOURCE_DIR}/IndirectPythonInterface.cxx
119
    )
120

121
    #set old 6.2 pycxx compatibility  
122
    list(APPEND PYCXX_SOURCES ${PYCXX_SOURCE_DIR}/cxx_exceptions.cxx)
123
    add_definitions(-DPYCXX_6_2_COMPATIBILITY)
124
    #end old compatibility
125
else(PYCXX_FOUND)
126
    MESSAGE(STATUS "PyCXX not found")
127
endif(PYCXX_FOUND)
128

129

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.