Hallo everybody. May I ask you for a help with SWIG module in CMake? I need to create more wrapping libraries from one set of .i SWIG files. To use SWIG from CMake is really trivial for one wrapped language, but I need to create more wrappers in one step, as illustrated below:
I have directory structure like this: wrap | +-- Module.i +-- *.i (other SWIG interface files included by Module.i) | +-- python +-- perl +-- java The "wrap/CMakeLists.txt" looks simple: SUBDIRS(python perl java) And for example "wrap/python/CMakeLists.txt" looks like (the CMakeLists will look similarly for "perl" and "java" packages): # Find and include required packages FIND_PACKAGE( SWIG REQUIRED ) FIND_PACKAGE( PythonLibs REQUIRED ) INCLUDE( ${SWIG_USE_FILE} ) # Set include python path INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_PATH} ) # Generated file is C++, tell it to SWIG SET_SOURCE_FILES_PROPERTIES( Module.i PROPERTIES CPLUSPLUS ON ) # !!!!! Tell to SWIG that .i files are one directory up !!!!! SET_SOURCE_FILES_PROPERTIES( Module.i PROPERTIES SWIG_FLAGS "-I../") # Create wrapper SWIG_ADD_MODULE( module python Module.i ) SWIG_LINK_LIBRARIES( module python2.4 ) # Copy the generated files as post-build step ADD_CUSTOM_COMMAND( TARGET ${SWIG_MODULE_module_REAL_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_BINARY_DIR}/*.py ${CMAKE_CURRENT_SOURCE_DIR} ) # ADD_CUSTOM_COMMAND( TARGET ${SWIG_MODULE_module_REAL_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_BINARY_DIR}/*.so ${CMAKE_CURRENT_SOURCE_DIR} ) However, when the build process is started, it finishes by error: make[5]: Entering directory `/home/..../build//wrap/python' make[5]: *** No rule to make target `/home/..../wrap/python/Module.i', needed by `/home/..../build//wrap/python/Module_wrap.c'. Stop. When I looked at ".../build/python/Makefile", there is target: /home/..../build//wrap/python/Module_wrap.c: /home/..../wrap/python/Module.i @echo "Building Swig source /home/..../build/wrap/python/Module_wrap.c..." /usr/bin/swig -python -I/usr/include/python2.4 -o /home/..../build//wrap/python/Module_wrap.c /home/..../wrap/python/Module.i However, there is no "-I../" switch specified by "SET_SOURCE_FILES_PROPERTIES( Module.i PROPERTIES SWIG_FLAGS "-I../")". Moreover, there is absolute path to the "Module.i" which is, however, wrong. When I tries to call SWIG directly, but only with Module.i it was OK - the -I switch seems to ensure the right path. I have also tried to set "relative paths" during CMake configuration, but it leaded to other errors during the build. Could someone give me a hint how to solve this problem? Did I choose the right approach, or should it be solved in different way? Or how to instruct CMake not to use the whole path to .i file (neither absolute, nor relative)? Any help will really be appreciated. Thank you very much, Dan _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake