[CMake] Fwd: CMAKE + SWIG + more wrapped languages
ANTON DEGUET
anton.deguet at jhu.edu
Mon Jul 24 07:47:06 EDT 2006
Daniel,
I figured out a solution which is more a trick than anything else. Basically, I created an empty .i file as a stub for each language. For example, you have Module.i and you could add ModulePython.i which contains:
%include "Module.i". I then use CMake with these stubs.
This works but I then run into a long known issue with the CMake SWIG macro, i.e. the dependencies don't handle files included by SWIG using the %include. I believe there is a ticket opened for this issue.
Anton
----- Original Message -----
From: Daniel Tihelka <dtihelka at kky.zcu.cz>
Date: Monday, July 24, 2006 4:47 am
Subject: [CMake] Fwd: CMAKE + SWIG + more wrapped languages
>
> 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
> wrappersin 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 at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
>
More information about the CMake
mailing list