Skip to content

Switch to cmake for unix#17

Merged
xhochy merged 5 commits intoconda-forge:mainfrom
claudiushaag:main
Nov 26, 2025
Merged

Switch to cmake for unix#17
xhochy merged 5 commits intoconda-forge:mainfrom
claudiushaag:main

Conversation

@claudiushaag
Copy link
Contributor

@claudiushaag claudiushaag commented Nov 2, 2025

Hi @conda-forge/jansson !

I'm currently working on bringing libraries to conda-forge, which depend on jansson.
These libraries are set up with cmake.
The jansson build of cf for unix systems uses autotools, hence only pkg-config files are written and put into conda-forge.

I now switched the unix build to cmake as well and added a temporary fix for this version for the low cmake minimum version.

Any more input or a merge would be highly appreciated, thanks!

Checklist

  • Used a personal fork of the feedstock to propose changes
  • Bumped the build number (if the version is unchanged)
  • Reset the build number to 0 (if the version changed)
  • Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
  • Ensured the license file is being packaged.

@conda-forge-admin
Copy link
Contributor

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.

@claudiushaag claudiushaag marked this pull request as ready for review November 2, 2025 11:50
…5.11.01.15.03.42

Other tools:
- conda-build 25.9.0
- rattler-build 0.49.0
- rattler-build-conda-compat 1.4.9

Updated to fix cmake-min fail and enable cmake for
unix
@claudiushaag claudiushaag changed the title Add cmake-shim for unix Switch to cmake for unix Nov 3, 2025
Updated CMake configuration to set minimum policy version.
@claudiushaag
Copy link
Contributor Author

@mariusvniekerk @xhochy this is a polite ping, maybe it got burried - would love your feedback on this, thank you! :)

@xhochy
Copy link
Member

xhochy commented Nov 5, 2025

Did you do the checks described in https://conda-forge.org/docs/maintainer/knowledge_base/#moving-from-an-autotools-build-to-a-cmake-build ? Often moving from autotools to cmake breaks the library SONAMEs.

@claudiushaag
Copy link
Contributor Author

claudiushaag commented Nov 5, 2025

@xhochy very good point, thank you, indeed I did not see that bullet-point. While I can confirm locally that SONAME is the same on linux, the Name of the symbol version seems to change, plus more symbols being exposed.
Running readelf -V shows:
autotools:

Details
Version symbols section '.gnu.version' contains 121 entries:
 Addr: 0x0000000000001ee8  Offset: 0x00001ee8  Link: 3 (.dynsym)
  000:   0 (*local*)       3 (GLIBC_2.3.4)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)
  004:   4 (GLIBC_2.2.5)   1 (*global*)      4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)
  008:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)
  00c:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   5 (GLIBC_2.4)     4 (GLIBC_2.2.5)
  010:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)
  014:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)
  018:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   1 (*global*)   
  01c:   6 (GLIBC_2.14)    4 (GLIBC_2.2.5)   3 (GLIBC_2.3.4)   4 (GLIBC_2.2.5)
  020:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   1 (*global*)   
  024:   4 (GLIBC_2.2.5)   4 (GLIBC_2.2.5)   3 (GLIBC_2.3.4)   2 (libjansson.so.4)  
  028:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  02c:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  030:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  034:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  038:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  03c:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  040:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  044:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  048:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  04c:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  050:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  054:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  058:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  05c:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  060:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  064:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  068:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  06c:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  070:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  074:   2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)     2 (libjansson.so.4)  
  078:   2 (libjansson.so.4)  

Version definition section '.gnu.version_d' contains 2 entries:
 Addr: 0x0000000000001fe0  Offset: 0x00001fe0  Link: 4 (.dynstr)
  000000: Rev: 1  Flags: BASE  Index: 1  Cnt: 1  Name: libjansson.so.4
  0x0014: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: libjansson.so.4

Version needs section '.gnu.version_r' contains 1 entry:
 Addr: 0x0000000000002010  Offset: 0x00002010  Link: 4 (.dynstr)
  000000: Version: 1  File: libc.so.6  Cnt: 4
  0x0010:   Name: GLIBC_2.14  Flags: none  Version: 6
  0x0020:   Name: GLIBC_2.4  Flags: none  Version: 5
  0x0030:   Name: GLIBC_2.2.5  Flags: none  Version: 4
  0x0040:   Name: GLIBC_2.3.4  Flags: none  Version: 3

cmake:

Details
Version symbols section '.gnu.version' contains 170 entries:
 Addr: 0x0000000000002b1c  Offset: 0x00002b1c  Link: 3 (.dynsym)
  000:   0 (*local*)       3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  004:   1 (*global*)      3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  008:   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  00c:   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   4 (GLIBC_2.4)     3 (GLIBC_2.2.5)
  010:   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  014:   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  018:   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  01c:   1 (*global*)      5 (GLIBC_2.14)    3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  020:   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)
  024:   1 (*global*)      3 (GLIBC_2.2.5)   3 (GLIBC_2.2.5)   2 (JANSSON_4)  
  028:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  02c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  030:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  034:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  038:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  03c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  040:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  044:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  048:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  04c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  050:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  054:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  058:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  05c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  060:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  064:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  068:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  06c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  070:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  074:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  078:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  07c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  080:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  084:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  088:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  08c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  090:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  094:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  098:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  09c:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  0a0:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  0a4:   2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)     2 (JANSSON_4)  
  0a8:   2 (JANSSON_4)     2 (JANSSON_4)  

Version definition section '.gnu.version_d' contains 2 entries:
 Addr: 0x0000000000002c70  Offset: 0x00002c70  Link: 4 (.dynstr)
  000000: Rev: 1  Flags: BASE  Index: 1  Cnt: 1  Name: libjansson.so.4
  0x001c: Rev: 1  Flags: none  Index: 2  Cnt: 1  Name: JANSSON_4

Version needs section '.gnu.version_r' contains 1 entry:
 Addr: 0x0000000000002ca8  Offset: 0x00002ca8  Link: 4 (.dynstr)
  000000: Version: 1  File: libc.so.6  Cnt: 3
  0x0010:   Name: GLIBC_2.14  Flags: none  Version: 5
  0x0020:   Name: GLIBC_2.4  Flags: none  Version: 4
  0x0030:   Name: GLIBC_2.2.5  Flags: none  Version: 3

I have yet to figure out where this comes from. I don't think this is a problem, but I wanted to point it out.
Is this maybe to delicate? Should I instead just add a cmake-shim which disvovers the library for cmake through pkg-config?

janssonConfig.cmake
# janssonConfig.cmake
include_guard(GLOBAL)

if(NOT TARGET jansson::jansson)
  find_package(PkgConfig REQUIRED QUIET)
  pkg_check_modules(JANSSON REQUIRED jansson)

  add_library(jansson::jansson INTERFACE IMPORTED)
  set_target_properties(jansson::jansson PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES "${JANSSON_INCLUDE_DIRS}"
    INTERFACE_LINK_LIBRARIES "${JANSSON_LIBRARIES}"
  )

  message(STATUS "janssonConfig.cmake shim by conda-forge: created imported target jansson::jansson "
                 "from pkg-config (${JANSSON_VERSION})")
else()
  message(STATUS "janssonConfig.cmake shim: using existing jansson::jansson target")
endif()

set(JANSSON_LIBRARIES "${JANSSON_LIBRARIES}")
set(JANSSON_INCLUDE_DIRS "${JANSSON_INCLUDE_DIRS}")
set(JANSSON_VERSION "${JANSSON_VERSION}")

Thanks for you help.

@xhochy
Copy link
Member

xhochy commented Nov 6, 2025

If the symbol version changes than I think this would really result in linker error on library load. Probably adding the cmake-shim is the simpler solution for now.

@claudiushaag
Copy link
Contributor Author

This is a topic which is still in progress upstream, see akheron/jansson#704 and akheron/jansson#715 .
Therefore, I reverted to the shim, and will keep a look onto those issues. The transition can be done afterwards at a later stage.

Thanks @xhochy for having a look!

@claudiushaag
Copy link
Contributor Author

@xhochy would love your review on this, thank you!
If this is currently not feasible, a quick reaction would help, then I will use another workaround.
Thank you very much.

@xhochy
Copy link
Member

xhochy commented Nov 26, 2025

Looks good, let's move to CMake once upstream has fixed the issues.

@xhochy xhochy merged commit c848ccf into conda-forge:main Nov 26, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants