[PROJ] PROJ 9.0.0RC1 & PROJ-data 1.9RC1

Kristian Evers kreve at sdfe.dk
Thu Feb 17 01:35:18 PST 2022


Thanks for the thorough explanation, Bas. It's much appreciated!

Even, Mike: I haven't got strong opinions on this. Do you guys think it is
worth the hassle to switch to the model Bas describes here?

/Kristian

> -----Original Message-----
> From: PROJ <proj-bounces at lists.osgeo.org> On Behalf Of Sebastiaan
> Couwenberg
> Sent: 16. februar 2022 12:38
> To: proj at lists.osgeo.org
> Subject: Re: [PROJ] PROJ 9.0.0RC1 & PROJ-data 1.9RC1
> 
> On 2/16/22 09:35, Kristian Evers via PROJ wrote:
> > Bas, I'm not sure how to understand this.
> >
> >> So you go from (8.2.1):
> >>
> >>    /usr/lib/x86_64-linux-gnu/libproj.so -> libproj.so.22.2.1
> >>    /usr/lib/x86_64-linux-gnu/libproj.so.22 -> libproj.so.22.2.1
> >>    /usr/lib/x86_64-linux-gnu/libproj.so.22.2.1
> >>
> >> To (9.0.0):
> >>
> >>    /usr/lib/x86_64-linux-gnu/libproj.so -> libproj.so.9.0.0
> >>    /usr/lib/x86_64-linux-gnu/libproj.so.25 -> libproj.so.9.0.0
> >>    /usr/lib/x86_64-linux-gnu/libproj.so.9.0.0
> >>
> >
> > Are you suggesting that we ONLY use the major, minor and patch version
> > numbers for the so-files and forget about the SOVERSION from now on?
> 
> No, SOVERSION is essential as it is part of the SONAME:
> 
>   <NAME>.so.<SOVERSION>
> 
> Where <NAME> = libproj, and <SOVERSION> = 25
> 
> > If that is the case, personally I'm all for it since I've always found the
> > current/revision/age difficult (as is evident in several release candidates
> > in the past) but is that a common practice among project that base their
> > packages on CMake?
> 
> autotools determines the versions (both 22 and 22.2.1 in the above
> examples for 8.2.1 with version-info 24:1:2) based on the version-info.
> 
> SOVERSION (the 22 in libproj.so.22) is determined by CURRENT minus AGE,
> the filename version (22.2.1 in libproj.so.22.2.1) is determined by
> (CURRENT-AGE).AGE.REVISION or some other magic.
> 
> The SOVERSION cannot be decremented and must be incremented every
> release that breaks the ABI. This was 22 in 8.2.1, is currently 25 in
> 9.0.0-rc1, and could also be 23 in 9.0.0-rc2.
> 
> You configure this in CMake with:
> 
>    set_target_properties(proj
>      PROPERTIES
>      VERSION <X>.<Y>.<Z>
>      SOVERSION <N>
>    )
> 
> This creates the files:
> 
>   libproj.so             (symlink to libproj.so.<X>.<Y>.<Z>)
>   libproj.so.<N>         (symlink to libproj.so.<X>.<Y>.<Z>)
>   libproj.so.<X>.<Y>.<Z>
> 
> Now that autotools and libtool are no longer used, you don't have to use
> the complicated logic to determine the VERSION value (<X>.<Y>.<Z>).
> 
> For projects that start with CMake and only support that it's common to
> use the project major version for the SOVERSION value and full project
> version for VERSION value.
> 
> That cannot be used for PROJ as it is migrating away from autotools and
> cannot decrement the SOVERSION to 9.
> 
> This situation is similar to what MapServer did some time ago, that
> currently uses:
> 
>    set_target_properties(mapserver
>      PROPERTIES
>      VERSION ${MapServer_VERSION_STRING}
>      SOVERSION 2
>    )
> 
> This is what I also suggest for PROJ to make library versioning easier
> now that the libtool complications are gone.
> 
> Since code speaks louder than words, see the attached patch for an
> example of what I mean.
> 
> Kind Regards,
> 
> Bas
> 
> --
>   GPG Key ID: 4096R/6750F10AE88D4AF1
> Fingerprint: 8182 DE41 7056 408D 6146  50D1 6750 F10A E88D 4AF1


More information about the PROJ mailing list