View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0014859CMakeCMakepublic2014-04-01 17:532014-04-03 02:17
ReporterFelix Schwitzer 
Assigned Tojschueller 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionno change required 
PlatformLinuxOSOS Version
Product Version 
Target VersionFixed in Version 
Summary0014859: UseSWIG rebuilds source even when the the dependencies have not changed (again)
DescriptionThis reopens 0010080, as I'm not the original reporter and therefore can't
reopen the bug.

The fix provided in http://cmake.org/gitweb?p=stage/cmake.git;a=commitdiff;h=63ebb1 [^]
does not solve the problem of recompiling the python-module again and again, if
the module name is passed via

  set_source_files_properties(
    ${_interfacefile} PROPERTIES
    CPLUSPLUS ON
    SWIG_FLAGS "-DMODULENAME=${_modulename}")

The original, reverted, change
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f0111deb [^]
worked for me.
Steps To ReproduceSee attached example
Additional InformationI build the bindings almost always for different script languages, iterating
over the languages and passing a modified modulname appropriate to the
selected language in the way mentioned above. A cmake fragment would look
like

set(_iffile "ltt.i")
set(_languages "ruby" "python")
foreach(_lang ${_languages})
  if(_lang STREQUAL "ruby")
    set(_modulename "rltt")
    set(_libs ${RUBY_LIBRARY})
  elseif(_lang STREQUAL "python")
    set(_modulename "pyltt")
    set(_libs ${PYTHON_LIBRARY})
  endif()
  set_source_files_properties(
    ${_iffile} PROPERTIES
    CPLUSPLUS ON
    SWIG_FLAGS "-DMODULENAME=${_modulename}")
  swig_add_module(${_modulename} ${_lang} ${_iffile})
  swig_link_libraries(${_modulename} ltt ${_libs})
endforeach()
TagsNo tags attached.
Attached Fileszip file icon ltt.zip [^] (2,211 bytes) 2014-04-01 17:53

 Relationships
related to 0010080closedjschueller UseSWIG rebuilds source even when the the dependencies have not changed 

  Notes
(0035615)
jschueller (developer)
2014-04-02 05:42
edited on: 2014-04-02 05:46

Hi,

I don't understand how this could work in your example against any patches as you do not set the SWIG_MODULE_NAME property.

I just tested it against both patches successfully if I insert this line before swig_add_module:
set_source_files_properties(${_iffile} PROPERTIES SWIG_MODULE_NAME ${_modulename})



J.

(0035629)
Felix Schwitzer (reporter)
2014-04-02 17:55

OK,

I checked the example again and it works on ubuntu saucy, as I pass
the module name to swig via the SWIG_FLAG "-DMODULENAME=${_modulename}"
and the interface file defines the name via
   %module MODULENAME

Saying 'it works' means that the wrapper library is generated for both,
ruby and python, but when re-running make/ninja, the wrapper file for python
(and only for python) will be regenerated and recompiled even if there are
no changes in any of the source files.

But you are right, I overlooked the possibility to pass the module name via
SWIG_MODULE_NAME property, as there is almost no documentation for the
UseSWIG-module.

If I do so, both, cmake from the master-branch and from
stage/UseSWIG-guess_module_name works fine.

Therefore please close this issue, at it can be considered an user error.
Sorry about the noise.

 Issue History
Date Modified Username Field Change
2014-04-01 17:53 Felix Schwitzer New Issue
2014-04-01 17:53 Felix Schwitzer File Added: ltt.zip
2014-04-02 05:42 jschueller Note Added: 0035615
2014-04-02 05:46 jschueller Note Edited: 0035615
2014-04-02 06:08 jschueller Assigned To => jschueller
2014-04-02 06:08 jschueller Status new => assigned
2014-04-02 09:03 Brad King Relationship added related to 0010080
2014-04-02 17:55 Felix Schwitzer Note Added: 0035629
2014-04-03 02:17 jschueller Status assigned => closed
2014-04-03 02:17 jschueller Resolution open => no change required


Copyright © 2000 - 2018 MantisBT Team