New Ticket     Tickets     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #33465 (closed defect: fixed)

Opened 2 years ago

Last modified 2 years ago

vtk5 +qt4_mac build fails (vtk build with --python upstream bug)

Reported by: v.favrenicolin@… Owned by: adfernandes@…
Priority: Normal Milestone:
Component: ports Version: 2.0.4
Keywords: vtk5 python Cc:
Port: vtk5

Description (last modified by ryandesign@…) (diff)

There is a bug in VTK 5.8.0 which fails to build with python bindings:

The relevant error is (see also attached last 500 lines of clean build):

[...]
:info:build ld: file not found: /opt/local/lib/vtk-5.8/libvtkDICOMParser.5.8.dylib for architecture x86_64
:info:build clang: error: linker command failed with exit code 1 (use -v to see invocation)
[...]

It is apparently due to en error in the build order, and there is a known workaround, see :
http://web.archiveorange.com/archive/v/aysypnkvYPYzSAJ2f5kA
https://github.com/mxcl/homebrew/pull/9796
https://github.com/sorin-ionescu/homebrew/commit/21571448b2bd0c810b495579dc2e00da7ea8f0e4

Any chance the patch could make it in macports ?

Vincent

Attachments

vtk-build-last500.log (248.3 KB) - added by v.favrenicolin@… 2 years ago.
vtk5 build log (sudo port install vtk5 +qt4_mac)
Portfile (8.9 KB) - added by v.favrenicolin@… 2 years ago.
Working portfile with a workaround kludge
vtk5-python.patch (4.7 KB) - added by sean.michael.farley@… 2 years ago.
patch to fix the upstream bug of incorrect library search directories and also add all compatible python variants

Change History

Changed 2 years ago by v.favrenicolin@…

vtk5 build log (sudo port install vtk5 +qt4_mac)

comment:1 Changed 2 years ago by ryandesign@…

  • Owner changed from macports-tickets@… to adfernandes@…
  • Description modified (diff)

comment:2 Changed 2 years ago by ryandesign@…

  • Description modified (diff)

comment:3 Changed 2 years ago by adfernandes@…

Hmm... googling around (and seeing #33490) this has the bad smell of a parallel-build bug.

Could you please try building with

sudo port install vtk5 +qt4_mac build.jobs=1

in the Portfile?

Thanks for doing the background digging on this, too, by the way!

comment:4 Changed 2 years ago by v.favrenicolin@…

Trying:

 sudo port install vtk5 +qt4_mac build.jobs=1

Does not make a difference (of course, this times it finishes with the error). Last lines are :

:info:build /usr/bin/clang++   -pipe -O2 -arch x86_64   -O3 -DNDEBUG -arch x86_64 -Wl,-search_paths_first -Wl,-headerpad_max_install_names  -L/opt/local/lib -arch x86_64  -flat_namespace -undefined suppress -u _PyMac_Error CMakeFiles/vtkpython.dir/vtkPythonAppInit.cxx.o  -o ../../bin/vtkpython  -lpthread /opt/local/lib/libpython2.7.dylib ../../bin/libvtksys.5.8.0.dylib ../../bin/libvtkCommon.5.8.0.dylib ../../bin/libvtkFiltering.5.8.0.dylib ../../bin/libvtkIO.5.8.0.dylib ../../bin/libvtkGraphics.5.8.0.dylib ../../bin/libvtkImaging.5.8.0.dylib /usr/lib/libutil.dylib ../../bin/libvtkRendering.5.8.0.dylib ../../bin/libvtkVolumeRendering.5.8.0.dylib ../../bin/libvtkHybrid.5.8.0.dylib ../../bin/libvtkWidgets.5.8.0.dylib ../../bin/libvtkCharts.5.8.0.dylib ../../bin/libvtkGeovis.5.8.0.dylib ../../bin/libvtkInfovis.5.8.0.dylib ../../bin/libvtkViews.5.8.0.dylib ../../bin/libvtkInfovis.5.8.0.dylib ../../bin/libvtkWidgets.5.8.0.dylib ../../bin/libvtkVolumeRendering.5.8.0.dylib ../../bin/libvtkHybrid.5.8.0.dylib ../../bin/libvtkRendering.5.8.0.dylib ../../bin/libvtkIO.5.8.0.dylib ../../bin/libvtkGraphics.5.8.0.dylib ../../bin/libvtkImaging.5.8.0.dylib ../../bin/libvtkFiltering.5.8.0.dylib ../../bin/libvtkCommon.5.8.0.dylib ../../bin/libvtksys.5.8.0.dylib /opt/local/lib/libQtGui.dylib /opt/local/lib/libQtSql.dylib /opt/local/lib/libQtCore.dylib -lobjc -lm -lpthread /opt/local/lib/libpython2.7.dylib /usr/lib/libutil.dylib
:info:build ld: file not found: /opt/local/lib/vtk-5.8/libvtkDICOMParser.5.8.dylib for architecture x86_64
:info:build clang: error: linker command failed with exit code 1 (use -v to see invocation)
:info:build make[2]: *** [bin/vtkpython] Error 1
:info:build make[2]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_vtk5/vtk5/work/VTK'
:info:build make[1]: *** [Wrapping/Python/CMakeFiles/vtkpython.dir/all] Error 2
:info:build make[1]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_vtk5/vtk5/work/VTK'
:info:build make: *** [all] Error 2
:info:build make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_vtk5/vtk5/work/VTK'
:info:build shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_vtk5/vtk5/work/VTK" && /usr/bin/make -w all " returned error 2
:error:build Target org.macports.build returned: shell command failed (see log for details)
:debug:build Backtrace: shell command failed (see log for details)
    while executing
"command_exec build"
    (procedure "portbuild::build_main" line 8)
    invoked from within
"$procedure $targetname"
:info:build Warning: the following items did not execute (for vtk5): org.macports.activate org.macports.build org.macports.destroot org.macports.install
:notice:build Log for vtk5 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_vtk5/vtk5/main.log


Something more strange (?): I tried building the previous version (4.6.8) by dowloading the portfile - but ended up with the same error - which would indicate that the error was triggered by a change outside vtk...

comment:5 Changed 2 years ago by v.favrenicolin@…

Ok, I finally got everything working, by adding the following lines to the port file (yes it is an ugly kludge but it works).

build.asroot yes

pre-build {
	system "rm -Rf /opt/local/lib/vtk-5.8"
	system "ln -sf /opt/local/var/macports/build/_Users_vincent/vtk5/work/VTK/bin/ /opt/local/lib/vtk-5.8"
}

post-build {
	system "rm -f /opt/local/lib/vtk-5.8"
}

I attach the portfile below.

Changed 2 years ago by v.favrenicolin@…

Working portfile with a workaround kludge

comment:6 follow-up: ↓ 7 Changed 2 years ago by christophe.saintjean@…

I try the previous fix (Modified Portfile) with the command :

sudo port -o -v install vtk5 +x11 +python27

and the same error occurs ...

By changing the link creation command, it works !!!

system "ln -sf /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_graphics_vtk5/vtk5/work/VTK/bin/ /opt/local/lib/vtk-5.8"

Please provides a general fix.

comment:7 in reply to: ↑ 6 Changed 2 years ago by browntroutstream@…

Replying to christophe.saintjean@…:

I try the previous fix (Modified Portfile) with the command :

sudo port -o -v install vtk5 +x11 +python27

and the same error occurs ...

By changing the link creation command, it works !!!

system "ln -sf /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_graphics_vtk5/vtk5/work/VTK/bin/ /opt/local/lib/vtk-5.8"

Please provides a general fix.

So it depends where you put the Portfile that's attached. For example, if you overwrite the main portfile, then I believe your modification (/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_graphics_vtk5/vtk5/work/VTK/bin/) works. However, it appears that Vincent put it in

/Users/vincent/

I put mine in

/Users/myname/ports/graphics/vtk5

which follows the examples here: http://guide.macports.org/chunked/development.local-repositories.html

As a result, I used:

/opt/local/var/macports/build/_Users_myname_ports_graphics_vtk5/vtk5/work/VTK/bin/

in the symbolic link above.

This works fine. So in summary, I used the portfile attached by vincent and changed

	system "ln -sf /opt/local/var/macports/build/_Users_vincent/vtk5/work/VTK/bin/ /opt/local/lib/vtk-5.8"

to

    system "ln -sf /opt/local/var/macports/build/_Users_myname_ports_graphics_vtk5/vtk5/work/VTK/bin/ /opt/local/lib/vtk-5.8"

due to my placement of the Portfile. This should be automated somehow...

comment:8 follow-up: ↓ 9 Changed 2 years ago by v.favrenicolin@…

Yes I guess you have to use portfile variables like ${worksrcpath}, ${destroot}, ${name}, ... Not sure about their exact definition, so I could not write a general correct Portfile.

comment:9 in reply to: ↑ 8 Changed 2 years ago by browntroutstream@…

Replying to v.favrenicolin@…:

Yes I guess you have to use portfile variables like ${worksrcpath}, ${destroot}, ${name}, ... Not sure about their exact definition, so I could not write a general correct Portfile.

I think it's ${portpath} [1]

Nice mods to the Portfile, btw. The other workarounds were not as clear.

[1] http://guide.macports.org/chunked/reference.variables.html

Changed 2 years ago by sean.michael.farley@…

patch to fix the upstream bug of incorrect library search directories and also add all compatible python variants

comment:10 Changed 2 years ago by sean.michael.farley@…

The patch I just sent fixes vtk5's build issues (#33490 and #33465) with python by adding variants robustly (just like boost) and fixing the library search path based on Shinko's suggestion. This is still a hack but at least it doesn't do any funky linking outside the build tree. The proper fix needs to come from upstream (Kitware) by fixing their cmake variables for the python wrapping, though, this patch makes it work for now.

comment:11 Changed 2 years ago by adfernandes@…

  • Status changed from new to closed
  • Resolution set to fixed

Committed in r90726. Thanks!

Note: See TracTickets for help on using tickets.