/
CMakeLists.txt
executable file
·174 lines (128 loc) · 5.98 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
project(PythonPackagesPlugin)
# Name and version of our package
set(PACKAGE_NAME PythonPackages)
set(PACKAGE_VERSION ${PYTHON_VERSION})
set(RELEASE_TAG v${PYTHON_VERSION}_base)
# The repository for our package
set(PACKAGE_REPOSITORY python)
# The versions of the Python packages we bundle.
set(SPHINX_VERSION 1.7.2)
# Our GitHub archive
set(GITHUB_OPENCOR https://github.com/opencor)
# We use our own copies of some Windows packages from
# http://www.lfd.uci.edu/~gohlke/pythonlibs/
set(WHEEL_REPOSITORY ${GITHUB_OPENCOR}/python/releases/download/wheels)
# Specify where our local package will be installed
set(FULL_LOCAL_EXTERNAL_PACKAGE_DIR ${PROJECT_SOURCE_DIR}/${LOCAL_EXTERNAL_PACKAGE_DIR})
# Where Python packages are installed
set(LOCAL_SITE_PACKAGES_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/${PYTHON_RELATIVE_RUNTIME_DIR}/site-packages)
# Directories we package
set(PACKAGED_FILES
${PYTHON_RELATIVE_SCRIPT_DIR}
${PYTHON_RELATIVE_RUNTIME_DIR}/site-packages
)
# At least one file must have its SHA-1 value checked...
set(SHA1_FILES ${PYTHON_RELATIVE_RUNTIME_DIR}/site-packages/sphinx/cmdline.py)
# The target we are creating
add_custom_target(${PROJECT_NAME})
# Use the pre-built version of our package unless instructed otherwise
# Rebuilding Python means we should also re-install its packages
if(USE_PREBUILT_PYTHON_PACKAGE AND USE_PREBUILT_PYTHON_PACKAGES_PACKAGE)
# Retrieve the plugin's package
string(REPLACE "${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/" ""
RELATIVE_PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/${REMOTE_EXTERNAL_PACKAGE_DIR}")
if(WIN32)
if(RELEASE_MODE)
retrieve_package_file(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 4b980929824fbb9324eba6db221396cd4fd30b32
PACKAGE_REPOSITORY ${PACKAGE_REPOSITORY}
RELEASE_TAG ${RELEASE_TAG}
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 3483da0d92f6b154ff7ce699350e741da0a84104)
else()
retrieve_package_file(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} c5d302fda38d1f94a29a7eb8ca5211e6067c59c8
PACKAGE_REPOSITORY ${PACKAGE_REPOSITORY}
RELEASE_TAG ${RELEASE_TAG}
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 3483da0d92f6b154ff7ce699350e741da0a84104)
endif()
elseif(APPLE)
retrieve_package_file(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} de19e8a6d17b8908c2e396fde5252e5dab0a050f
PACKAGE_REPOSITORY ${PACKAGE_REPOSITORY}
RELEASE_TAG ${RELEASE_TAG}
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 3483da0d92f6b154ff7ce699350e741da0a84104)
else()
retrieve_package_file(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 2bdb262c6599dc8dfd13a592baa580c621b2839c
PACKAGE_REPOSITORY ${PACKAGE_REPOSITORY}
RELEASE_TAG ${RELEASE_TAG}
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 3483da0d92f6b154ff7ce699350e741da0a84104)
endif()
else()
# Install Python packages using pip
set(PACKAGE_BUILD PythonPackagesBuild)
add_custom_target(${PACKAGE_BUILD})
# Python package installation requires Python
set(BUILD_DEPENDENCIES PythonPlugin)
# Ensure local site packages directory exists
file(MAKE_DIRECTORY ${LOCAL_SITE_PACKAGES_DIR})
# Use our installed pip
file(TO_NATIVE_PATH ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR} FULL_LOCAL_EXTERNAL_PACKAGE_PREFIX)
set(PIP_INSTALL_COMMAND
${CMAKE_COMMAND} -E env "PYTHONPATH=${LOCAL_SITE_PACKAGES_DIR}"
${PYTHON_EXECUTABLE} -s -m
pip install --prefix ${FULL_LOCAL_EXTERNAL_PACKAGE_PREFIX}
--upgrade --upgrade-strategy only-if-needed)
# Install Sphinx
if(NOT WIN32)
add_custom_target(install_sphinx
COMMAND ${PIP_INSTALL_COMMAND} --only-binary all
sphinx==${SPHINX_VERSION}
WORKING_DIRECTORY
${FULL_DEST_EXTERNAL_BINARIES_DIR}
VERBATIM
)
else()
# For Windows we need to explicitly install Sphinx to create
# the `*-script-py` files that can then be modified at OpenCOR
# installation time to reference our newly installed Python.
add_custom_target(install_sphinx
COMMAND ${PIP_INSTALL_COMMAND}
https://github.com/opencor/sphinx/archive/v${SPHINX_VERSION}.tar.gz
WORKING_DIRECTORY
${FULL_DEST_EXTERNAL_BINARIES_DIR}
VERBATIM
)
endif()
add_dependencies(${PACKAGE_BUILD} install_sphinx)
add_dependencies(install_sphinx ${BUILD_DEPENDENCIES})
# Package the newly installed Python packages
create_package_file(${PACKAGE_NAME} ${PACKAGE_VERSION}
${LOCAL_EXTERNAL_PACKAGE_DIR}
PACKAGE_REPOSITORY ${PACKAGE_REPOSITORY}
RELEASE_TAG ${RELEASE_TAG}
PACKAGED_FILES ${PACKAGED_FILES}
SHA1_FILES ${SHA1_FILES}
TARGET ${PACKAGE_BUILD}
)
set(PLUGIN_DEPENDS_ON ${PACKAGE_BUILD})
endif()
# Allow other packages to use our scripts
if(WIN32)
set(SPHINX_BUILD_COMMAND sphinx-build.exe)
else()
set(SPHINX_BUILD_COMMAND sphinx-build)
endif()
set(SPHINX_BUILD_COMMAND
${CMAKE_COMMAND} -E env "PYTHONPATH=${LOCAL_SITE_PACKAGES_DIR}"
${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/${PYTHON_RELATIVE_SCRIPT_DIR}/${SPHINX_BUILD_COMMAND} PARENT_SCOPE
)
# We need to specify the dependency if not using add_plugin
add_dependencies(OpenCORBuild ${PROJECT_NAME})
if(NOT "${PLUGIN_DEPENDS_ON}" STREQUAL "")
add_dependencies(${PROJECT_NAME} ${PLUGIN_DEPENDS_ON})
endif()