Skip to content

Build on Ubuntu #38

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 19 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
*/
// To use a test branch (i.e. PR) until it lands to master
// I.e. for testing library changes
//@Library(value="pipeline-lib@your_branch") _
@Library(value="pipeline-lib@bmurrell/el9") _

packageBuildingPipelineDAOSTest(['distros' : ['el8', 'leap15'],
packageBuildingPipelineDAOSTest(['distros' : ['centos7', 'el8', 'el9', 'leap15', 'ubuntu20.04'],
'test-tag': 'hdf5testsuite'])
32 changes: 32 additions & 0 deletions debian/README.Debian
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
HDF5 for Debian
===============

On thread safety
----------------
Some general notes for developers: since 1.8 series HDF Group deprecates
enabling the thread-safe option for the C library and at the same time
supporting high level (HL), C++ and Fortran bindings. Those options cannot
cohexist for safety because non C libraries wrapper are not thread-aware.
Debian GNU/Linux still support a C thread-safe library and the alternative
bindings, but it does not imply that the Debian distributed high level, C++
aand Fortranalibraries are thread-safe.

For short: DO NOT use HL, C++ or Fortran bindings in multi-thread programs
witihout providing yourself mutex infrastructure support for every wrapped
function. You can use safely only the C binding in a multi-thread environment.
That was not different in 1.6 series, just the issue was ignored.

Now, you are warned.

-- Francesco Paolo Lovergine <frankie@debian.org> Fri Jun 19 22:09:25 CEST 2009

1.10.0 and 1.10.1 compatibility
-------------------------------
From HDF Group newsletter #153:
HDF5 releases are always backward compatible. In general, they are also
forward compatible in maintenance releases of a major release. However,
the HDF5 - 1.10.0 maintenance release will NOT be able to read HDF5 - 1.10.1
files that contain a metadata cache image. The metadata cache image must be
removed with the h5clear tool in order for HDF5 - 1.10.0 to read the file.

-- Gilles Filippini <pini@debian.fr> Sat, 07 Oct 2017 14:02:39 +0200
101 changes: 101 additions & 0 deletions debian/README.source
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
HDF5 for Debian, note for the mantainers
----------------------------------------

The Debian version of HDF5 is created starting from the official tarball and
adding some required patches managed by quilt. More information about quilt
use are available in /usr/share/doc/quilt/README.Debian and its documentation.

Note that starting from 1.8 HDF Group is not more providing a tarball of the
library documentation. The documentation in html format is now taken by
the HDF Group svn repository:

svn export https://svn.hdfgroup.uiuc.edu/hdf5doc/branches/hdf5_1_8_4/html

This is taken care by uscan companion script debian/orig-tar.sh.

About symbols files
-------------------
To update the symbols files on new upstream releases:
0- Rename and update the symbols files with the new sonames. This can be
done with the script debian/update-symbols-files-soname
1- Build the package for the new release
2- Patch the symbols files from the dpkg-gensymbols output in the build log
$ patch -p0 <path_to_build_log
3- Use the debian/process-symbols-files script to unmangle and sort C++
symbols, and generate the version scripts (debian/map_*.ver)
4- Rebuild the package and check that no diff are reported by dpkg-gensymbols
5- Goto (2) if need be

About version scripts (debian/map_*.ver)
----------------------------------------
Their purpose is to be able to link serial and mpi flavors of libhdf5
into the same executable.

I use the helper script make-version-scripts to generate them. I don't
care about identifying local symbols for now.

About C++ symbols tracking
--------------------------
Tracking C++ versioned symbols is complacated:
* Firstly we need to track them under their unmangled form to be arch
independant.
* Secondly I discovered after many /try fail repeat/ that dpkg-gensymbols
wants the verbose unmangled symbols (output from 'c++filt' command)
while version scripts want the non verbose ones (output from
'c++filt -i' command).
* Finaly the patches generated by dpkg-gensymbols don't allow any
comment in the symbols files and requires a specific sorting order
(bug #773718).
All these concerns are handled by three helper scripts:
* debian/process-symbols-files
* debian/sort-symbols
* debian/make-version-scripts
The entry point being debian/process-symbols-files.

There was a non backward-compatible change in the C++ API between releases
1.8.11 and 1.8.12 with no soname bump. Since there is no packages in sid
using this C++ library, we didn't bother.

The script debian/check-dep-on-hdf5-cpp is used to check these dependencies.

About shared libraries versioning and SONAME
--------------------------------------------
Worth reading to get the picture about libtool versioning:
<http://bzed.de/scratchpad/soname-libtool.txt>

[Old note - for the record]
> About versioning style. In very recent times (since 1.8 series) HDF Group
> introduced a libtool SONAME versioning in the library with major/minor releases.
> Unfortunately, past experieces showed that API retention has been sometimes
> violated in the past, so current packages use a defensive approach by considering
> each release as not back-compatible. This is also motivated by the presence of
> of C++ and Fortran bindings as well as multiple MPI editions, which could imply
> ABI breakages even for minor releases. Be defensive is more safe, definitively

Looking at the 1.8.x releases, it seems that upstream doesn't apply the
libtool versioning strategy. Instead they use it the major.medium.minor way
where:
* medium=0
* minor++ on release
* major++, minor=0 on API breaks

Considering applying this piece of advice from Julien Cristau:
> J'aurais tendance à suggérer d'utiliser le switch -version-number de
> libtool plutôt que -version-info. Ça prend directement comme argument
> major:minor:micro, donc on se perd pas dans des calculs à la con.

Manpages
--------
$ help2man -n "helper script to compile HDF5 Fortran applications" --version-string="h5pfc (hdf5 1.8.12)" -h -help -N h5pfc >debian/man/h5pfc.1
$ help2man -n "helper script to compile HDF5 C applications" --version-string="h5pcc (hdf5 1.8.12)" -h -help -N h5pcc >debian/man/h5pcc.1
$ help2man -n "debugs an existing HDF5 file at a low level" --version-string="h5debug (hdf5 1.8.12)" -N 'bash -c "h5debug 2>&1"' >debian/man/h5debug.1

TO-DO
-----
* common manpage for h5*{c,f}c
* patch libtool usage to use -version-number instead of -version-info'?
* propose to upstream to use a separate libtool version for each language
(C, C++, Fortran)?

-- Francesco Paolo Lovergine <frankie@debian.org> Mon Jan 25 06:00:00 CET 2010
-- Gilles Filippini <pini@debian.org> Mon, 22 Dec 2014 01:50:39 +0100
Loading