Skip to content

Commit 5dbeeaf

Browse files
authored
Installing python modules correctly (#119)
* Refs #20763. Applying discovery Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #20763. Improve Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #20763. Fix win32 Signed-off-by: Ricardo González <ricardo@richiware.dev> * Refs #20763. Set fastdds version Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #20763. Fix fastdds dll library import Signed-off-by: Ricardo González <ricardo@richiware.dev> * Refs #20763. Regenerate code with fastddsgen Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> --------- Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> Signed-off-by: Ricardo González <ricardo@richiware.dev>
1 parent 7ab8aa0 commit 5dbeeaf

16 files changed

Lines changed: 83 additions & 91 deletions

fastdds_python/src/swig/CMakeLists.txt

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,19 @@ set(${PROJECT_NAME}_MODULE
2424
fastdds
2525
)
2626

27-
set(${PROJECT_NAME}_FILES
28-
${${PROJECT_NAME}_MODULE}.i
27+
set(${PROJECT_NAME}_FILE
28+
${CMAKE_CURRENT_BINARY_DIR}/${${PROJECT_NAME}_MODULE}.i
2929
)
3030

31-
SET_SOURCE_FILES_PROPERTIES(
32-
${${PROJECT_NAME}_FILES}
33-
PROPERTIES CPLUSPLUS ON
31+
file(GENERATE
32+
OUTPUT ${${PROJECT_NAME}_FILE}
33+
INPUT ${${PROJECT_NAME}_MODULE}.i
34+
)
35+
36+
set_source_files_properties(${${PROJECT_NAME}_FILE} PROPERTIES
37+
CPLUSPLUS ON
3438
USE_TARGET_INCLUDE_DIRECTORIES TRUE
39+
INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}
3540
)
3641

3742
option(BUILD_DOCUMENTATION "Use doxygen to create product documentation" OFF)
@@ -42,11 +47,14 @@ endif (BUILD_DOCUMENTATION)
4247
swig_add_library(${PROJECT_NAME}
4348
TYPE SHARED
4449
LANGUAGE python
45-
SOURCES ${${PROJECT_NAME}_FILES}
50+
SOURCES
51+
${${PROJECT_NAME}_FILE}
4652
)
4753

4854
if(UNIX AND CMAKE_SIZEOF_VOID_P EQUAL 8)
49-
set_property(TARGET ${PROJECT_NAME} PROPERTY SWIG_COMPILE_DEFINITIONS SWIGWORDSIZE64)
55+
set_property(TARGET ${PROJECT_NAME} PROPERTY
56+
SWIG_COMPILE_DEFINITIONS SWIGWORDSIZE64
57+
)
5058
endif()
5159

5260
if(MSVC OR MSVC_IDE)
@@ -67,16 +75,16 @@ execute_process(COMMAND ${Python3_EXECUTABLE} -c "from distutils import sysconfi
6775
get_filename_component (_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)
6876
file (RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
6977
SET (PYTHON_MODULE_PATH
70-
${_REL_PYTHON_MODULE_PATH}
78+
${_REL_PYTHON_MODULE_PATH}/${${PROJECT_NAME}_MODULE}
7179
)
7280

7381
# Install
7482
install(TARGETS ${PROJECT_NAME}
7583
EXPORT ${PROJECT_NAME}-targets
7684
DESTINATION ${PYTHON_MODULE_PATH}
7785
)
78-
get_property(support_files TARGET ${PROJECT_NAME} PROPERTY SWIG_SUPPORT_FILES)
79-
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH})
86+
get_property(generated_python_file TARGET ${PROJECT_NAME} PROPERTY SWIG_SUPPORT_FILES)
87+
install(FILES ${generated_python_file} DESTINATION ${PYTHON_MODULE_PATH} RENAME __init__.py)
8088

8189
export(TARGETS ${PROJECT_NAME} FILE ${PROJECT_BINARY_DIR}/cmake/config/${PROJECT_NAME}-targets.cmake)
8290

fastdds_python/src/swig/fastdds.i

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
%module(directors="1", threads="1") fastdds
15+
%module(directors="1", threads="1", moduleimport="if __import__('os').name == 'nt': import win32api; win32api.LoadLibrary('$<TARGET_FILE_NAME:fastdds>')\nif __package__ or '.' in __name__:\n from . import _fastdds_python\nelse:\n import _fastdds_python") fastdds
1616

1717
// Handle exceptions on python callbacks and send them back to C++ so that they can be catched
1818
// Also, add some meaningful description of the error
@@ -43,6 +43,14 @@
4343
}
4444
}
4545

46+
// If using windows in debug, it would try to use python_d, which would not be found.
47+
%begin %{
48+
#ifdef _MSC_VER
49+
#define SWIG_PYTHON_INTERPRETER_NO_DEBUG
50+
#endif
51+
#include <exception>
52+
%}
53+
4654
%exception {
4755
try { $action }
4856
catch (Swig::DirectorException &e) { SWIG_fail; }

fastdds_python/test/api/test_datareader.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
# until https://bugs.python.org/issue46276 is not fixed we can apply this
2-
# workaround on windows
3-
import os
4-
if os.name == 'nt':
5-
import win32api
6-
win32api.LoadLibrary('test_complete')
7-
win32api.LoadLibrary('test_modules')
8-
91
import fastdds
102
import pytest
113
import time
@@ -24,7 +16,7 @@ def data_type(request):
2416
pytest.dds_type = __import__("test_complete")
2517
else:
2618
pytest.dds_type = __import__("eprosima.test.test_modules",
27-
fromlist=[None])
19+
fromlist=["test_modules"])
2820

2921
@pytest.fixture
3022
def participant():

fastdds_python/test/api/test_datawriter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def data_type(request):
1515
pytest.dds_type = __import__("test_complete")
1616
else:
1717
pytest.dds_type = __import__("eprosima.test.test_modules",
18-
fromlist=[None])
18+
fromlist=["test_modules"])
1919

2020
@pytest.fixture
2121
def participant():

fastdds_python/test/api/test_domainparticipant.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def data_type(request):
2828
pytest.dds_type = __import__("test_complete")
2929
else:
3030
pytest.dds_type = __import__("eprosima.test.test_modules",
31-
fromlist=[None])
31+
fromlist=["test_modules"])
3232

3333
@pytest.fixture
3434
def not_autoenable_factory():

fastdds_python/test/api/test_publisher.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def data_type(request):
1717
pytest.dds_type = __import__("test_complete")
1818
else:
1919
pytest.dds_type = __import__("eprosima.test.test_modules",
20-
fromlist=[None])
20+
fromlist=["test_modules"])
2121

2222
@pytest.fixture
2323
def participant_qos():

fastdds_python/test/api/test_qos.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
import os
22

3-
# until https://bugs.python.org/issue46276 is not fixed we can apply this
4-
# workaround on windows
5-
if os.name == 'nt':
6-
import win32api
7-
win32api.LoadLibrary('_fastdds_python.pyd')
8-
93
import fastdds
104

115
import inspect

fastdds_python/test/api/test_subscriber.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def data_type(request):
1818
pytest.dds_type = __import__("test_complete")
1919
else:
2020
pytest.dds_type = __import__("eprosima.test.test_modules",
21-
fromlist=[None])
21+
fromlist=["test_modules"])
2222

2323
@pytest.fixture
2424
def participant_qos():

fastdds_python/test/api/test_waitset.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
# until https://bugs.python.org/issue46276 is not fixed we can apply this
2-
# workaround on windows
3-
import os
4-
if os.name == 'nt':
5-
import win32api
6-
win32api.LoadLibrary('test_complete')
7-
win32api.LoadLibrary('test_modules')
8-
91
import fastdds
102
import pytest
113

@@ -16,7 +8,7 @@ def data_type(request):
168
pytest.dds_type = __import__("test_complete")
179
else:
1810
pytest.dds_type = __import__("eprosima.test.test_modules",
19-
fromlist=[None])
11+
fromlist=["test_modules"])
2012

2113
@pytest.fixture
2214
def participant():

fastdds_python/test/types/CMakeLists.txt

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
cmake_minimum_required(VERSION 3.22)
2+
cmake_minimum_required(VERSION 3.20)
33

44
# SWIG: use standard target name.
55
if(POLICY CMP0078)
@@ -73,8 +73,6 @@ SET_SOURCE_FILES_PROPERTIES(
7373
USE_TARGET_INCLUDE_DIRECTORIES TRUE
7474
)
7575

76-
set_property(SOURCE ${PROJECT_NAME}.i PROPERTY OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/eprosima/test2")
77-
7876
SWIG_ADD_LIBRARY(${${PROJECT_NAME}_MODULE}
7977
TYPE SHARED
8078
LANGUAGE python
@@ -91,11 +89,6 @@ target_link_libraries(${${PROJECT_NAME}_MODULE}
9189
${PROJECT_NAME}
9290
)
9391

94-
set_target_properties(${${PROJECT_NAME}_MODULE}
95-
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/eprosima/test2"
96-
)
97-
98-
9992
# Find the installation path
10093
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))"
10194
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
@@ -105,7 +98,7 @@ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig
10598
get_filename_component (_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)
10699
file (RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
107100
SET (PYTHON_MODULE_PATH
108-
${_REL_PYTHON_MODULE_PATH}
101+
${_REL_PYTHON_MODULE_PATH}/eprosima/test2/${PROJECT_NAME}
109102
)
110103

111104
# Install
@@ -114,9 +107,9 @@ install(TARGETS ${PROJECT_NAME}
114107
LIBRARY DESTINATION lib/
115108
ARCHIVE DESTINATION lib/
116109
)
117-
install(TARGETS ${${PROJECT_NAME}_MODULE} DESTINATION ${PYTHON_MODULE_PATH}/eprosima/test2)
110+
install(TARGETS ${${PROJECT_NAME}_MODULE} DESTINATION ${PYTHON_MODULE_PATH})
118111
get_property(support_files TARGET ${${PROJECT_NAME}_MODULE} PROPERTY SWIG_SUPPORT_FILES)
119-
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH}/eprosima/test2)
112+
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH} RENAME __init__.py)
120113

121114
###############################################################################
122115
# Library for types defined in test_modules IDL
@@ -180,8 +173,6 @@ SET_SOURCE_FILES_PROPERTIES(
180173
USE_TARGET_INCLUDE_DIRECTORIES TRUE
181174
)
182175

183-
set_property(SOURCE ${PROJECT_NAME}.i PROPERTY OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/eprosima/test")
184-
185176
SWIG_ADD_LIBRARY(${${PROJECT_NAME}_MODULE}
186177
TYPE SHARED
187178
LANGUAGE python
@@ -198,11 +189,6 @@ target_link_libraries(${${PROJECT_NAME}_MODULE}
198189
${PROJECT_NAME}
199190
)
200191

201-
set_target_properties(${${PROJECT_NAME}_MODULE}
202-
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/eprosima/test"
203-
)
204-
205-
206192
# Find the installation path
207193
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))"
208194
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
@@ -212,7 +198,7 @@ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig
212198
get_filename_component (_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)
213199
file (RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
214200
SET (PYTHON_MODULE_PATH
215-
${_REL_PYTHON_MODULE_PATH}
201+
${_REL_PYTHON_MODULE_PATH}/eprosima/test/${PROJECT_NAME}
216202
)
217203

218204
# Install
@@ -221,9 +207,9 @@ install(TARGETS ${PROJECT_NAME}
221207
LIBRARY DESTINATION lib/
222208
ARCHIVE DESTINATION lib/
223209
)
224-
install(TARGETS ${${PROJECT_NAME}_MODULE} DESTINATION ${PYTHON_MODULE_PATH}/eprosima/test)
210+
install(TARGETS ${${PROJECT_NAME}_MODULE} DESTINATION ${PYTHON_MODULE_PATH})
225211
get_property(support_files TARGET ${${PROJECT_NAME}_MODULE} PROPERTY SWIG_SUPPORT_FILES)
226-
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH}/eprosima/test)
212+
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH} RENAME __init__.py)
227213

228214
###############################################################################
229215
# Library for types defined in test_complete IDL
@@ -288,8 +274,6 @@ SET_SOURCE_FILES_PROPERTIES(
288274
USE_TARGET_INCLUDE_DIRECTORIES TRUE
289275
)
290276

291-
set_property(SOURCE ${PROJECT_NAME}.i PROPERTY OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/")
292-
293277
SWIG_ADD_LIBRARY(${${PROJECT_NAME}_MODULE}
294278
TYPE SHARED
295279
LANGUAGE python
@@ -306,11 +290,6 @@ target_link_libraries(${${PROJECT_NAME}_MODULE}
306290
${PROJECT_NAME}
307291
)
308292

309-
set_target_properties(${${PROJECT_NAME}_MODULE}
310-
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
311-
)
312-
313-
314293
# Find the installation path
315294
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))"
316295
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
@@ -320,7 +299,7 @@ execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig
320299
get_filename_component (_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)
321300
file (RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
322301
SET (PYTHON_MODULE_PATH
323-
${_REL_PYTHON_MODULE_PATH}
302+
${_REL_PYTHON_MODULE_PATH}/${PROJECT_NAME}
324303
)
325304

326305
# Install
@@ -329,7 +308,7 @@ install(TARGETS ${PROJECT_NAME}
329308
LIBRARY DESTINATION lib/
330309
ARCHIVE DESTINATION lib/
331310
)
332-
install(TARGETS ${${PROJECT_NAME}_MODULE} DESTINATION ${PYTHON_MODULE_PATH}/)
311+
install(TARGETS ${${PROJECT_NAME}_MODULE} DESTINATION ${PYTHON_MODULE_PATH})
333312
get_property(support_files TARGET ${${PROJECT_NAME}_MODULE} PROPERTY SWIG_SUPPORT_FILES)
334-
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH}/)
313+
install(FILES ${support_files} DESTINATION ${PYTHON_MODULE_PATH} RENAME __init__.py)
335314

0 commit comments

Comments
 (0)