horizon-eda / horizon

Horizon is a free EDA package
https://horizon-eda.org/
GNU General Public License v3.0
1.11k stars 82 forks source link

Horizon does not support OpenCascade 7.8.0 #764

Closed thierry-FreeBSD closed 2 weeks ago

thierry-FreeBSD commented 7 months ago

The build fails with the message:

===>   horizon-eda-2.5.0_3 depends on shared library: libTKSTEP.so - not found
*** Error code 1

There is no more libTKSTEP in OpenCascade 7.8.0.

carrotIndustries commented 7 months ago

None of the distros we have CI for already has opencascade 7.8 Any ideas how to reproduce this?

bob-u commented 7 months ago

From release notes (https://dev.opencascade.org/doc/overview/html/occt__upgrade.html):

Reorganized DE TK

DE TK components have been combined or separated based on specific CAD formats to support plug-in ability.

    Components now have a "TKDE" prefix. The available list includes TKDESTEP, TKDEOBJ, TKDEIGES, TKDEGLTF, TKDEVRML, TKDEPLY, TKDESTL.
    The DE DRAW TK has been updated in a similar way: DRAW components now have a "TKXSDRAW" prefix. The available list includes TKXSDRAWSTEP, TKXSDRAWOBJ, TKXSDRAWIGES, TKXSDRAWGLTF, TKXSDRAWVRML, TKXSDRAWPLY, TKXSDRAWSTL.

Migration problems may occur during configuration time or compile time. Ensure that you update your project configuration accordingly.

I think this is a similar issue to this one: https://gitlab.onelab.info/gmsh/gmsh/-/issues/2744

thierry-FreeBSD commented 7 months ago

None of the distros we have CI for already has opencascade 7.8 Any ideas how to reproduce this?

I guess that most distros won't upgrade OpenCascade as long as it breaks its consumers - at least this is what we are doing in FreeBSD: see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277294 .

Thus, ATM, you have to compile it yourself.

frmdstryr commented 6 months ago

I'm using a locally built horizon with locally built OCCT 7.8.0 and it works fine here (kde neon)... didn't have to change anything.

$ lddtree .local/bin/horizon-imp
horizon-imp => .local/bin/horizon-imp (interpreter => /lib64/ld-linux-x86-64.so.2)
  ...
    libTKernel.so.7.8 => /home/user/.local/lib/libTKernel.so.7.8
    libTKMath.so.7.8 => /home/user/.local/lib/libTKMath.so.7.8
    libTKG3d.so.7.8 => /home/user/.local/lib/libTKG3d.so.7.8
        libTKG2d.so.7.8 => /home/user/.local/lib/libTKG2d.so.7.8
    libTKGeomBase.so.7.8 => /home/user/.local/lib/libTKGeomBase.so.7.8
    libTKBRep.so.7.8 => /home/user/.local/lib/libTKBRep.so.7.8
    libTKTopAlgo.so.7.8 => /home/user/.local/lib/libTKTopAlgo.so.7.8
        libTKGeomAlgo.so.7.8 => /home/user/.local/lib/libTKGeomAlgo.so.7.8
    libTKPrim.so.7.8 => /home/user/.local/lib/libTKPrim.so.7.8
    libTKBO.so.7.8 => /home/user/.local/lib/libTKBO.so.7.8
    libTKShHealing.so.7.8 => /home/user/.local/lib/libTKShHealing.so.7.8
    libTKHLR.so.7.8 => /home/user/.local/lib/libTKHLR.so.7.8
    libTKMesh.so.7.8 => /home/user/.local/lib/libTKMesh.so.7.8
    libTKCDF.so.7.8 => /home/user/.local/lib/libTKCDF.so.7.8
    libTKLCAF.so.7.8 => /home/user/.local/lib/libTKLCAF.so.7.8
    libTKXSBase.so.7.8 => /home/user/.local/lib/libTKXSBase.so.7.8
    libTKDESTEP.so.7.8 => /home/user/.local/lib/libTKDESTEP.so.7.8
        libTKDE.so.7.8 => /home/user/.local/lib/libTKDE.so.7.8
    libTKXCAF.so.7.8 => /home/user/.local/lib/libTKXCAF.so.7.8
        libTKVCAF.so.7.8 => /home/user/.local/lib/libTKVCAF.so.7.8
        libTKV3d.so.7.8 => /home/user/.local/lib/libTKV3d.so.7.8
        libTKService.so.7.8 => /home/user/.local/lib/libTKService.so.7.8
        libTKCAF.so.7.8 => /home/user/.local/lib/libTKCAF.so.7.8
...

Edit: Are you sure meson / cmake is finding the correct OCCT? I had to uninstall the liboce and libocct packages.

frmdstryr commented 6 months ago

If you patch out https://github.com/horizon-eda/horizon/blob/master/meson.build#L31-L35 does it work then?

thierry-FreeBSD commented 6 months ago

I have just built it successfully with the attached patch horizon-2.5.0_Makefile.diff.txt.

But this is for the 2.5.0 release, and it does not contain a meson.build file.

I'd like to provide a patch for meson.build according to the OpenCascade version, but I don't know how to test it with meson. Could you please explain?

frmdstryr commented 6 months ago

Do you mean test the opencascade version or test building with meson?

I haven't used meson much but this seems to work:

assert(opencascade.found(), 'OpenCASCADE or OCE is required')
if opencascade.version() >= '7.8.0'
    message('opencascade is >=7.8.0')
else
    message('opencascade <7.8.0')
endif
thierry-FreeBSD commented 6 months ago

I haven't used meson much but this seems to work:

Yes, that works, thanks!

aperezdc commented 2 weeks ago

Arch Linux is now shipping OpenCascade 7.8.x (7.8.1 as of September 2024), applying the patch from PR https://github.com/horizon-eda/horizon/pull/767 worked for me.

carrotIndustries commented 2 weeks ago

Arch Linux is now shipping OpenCascade 7.8.x (7.8.1 as of September 2024), applying the patch from PR https://github.com/horizon-eda/horizon/pull/767 worked for me.

For me, it works without any changes at all after doing a clean build.

carrotIndustries commented 2 weeks ago

There were some problems in the detection of the broken link args: afa25d7e50f75ced34047cf8c3ffd17e3090cffe fixes that

It's also working on freebsd: https://cirrus-ci.com/task/6393203128008704?logs=main#L68

Closing this since 7.8 is working everywhere it's available.

aperezdc commented 2 weeks ago

There were some problems in the detection of the broken link args: afa25d7 fixes that

It's also working on freebsd: https://cirrus-ci.com/task/6393203128008704?logs=main#L68

This also worked for me, thanks for fixing!