[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