Hi there,
I’m packaging HDF5 for ArchLinux, and I have discrepancies between autotools and CMake builds, both having issues that the other one does not. For now, let’s assume serial builds with both static and shared libs, cxx, fortran and hl being enabled. BTW, this would be my point number…
-
There is no way to disable static libs in CMake builds.
-
Files present in autotools build only:
/usr/bin/h5fc
/usr/bin/h5perf_serial
/usr/bin/h5redeploy
/usr/include/th5_misc_gen.mod
/usr/include/tstds.mod
/usr/include/tstds_tests.mod
/usr/include/tstimage.mod
/usr/include/tstimage_tests.mod
/usr/include/tstlite.mod
/usr/include/tstlite_tests.mod
/usr/include/tsttable.mod
/usr/include/tsttable_tests.mod
- examples files.
- Files present in CMake build only:
/usr/bin/h5copy-shared
/usr/bin/h5diff-shared
/usr/bin/h5dump-shared
/usr/bin/h5ls-shared
/usr/bin/h5repack-shared
/usr/bin/h5stat-shared
/usr/bin/h5hlc++
/usr/bin/h5hlcc
/usr/include/H5ACpkg.h
/usr/include/H5Alltypes.h
/usr/include/H5Apkg.h
/usr/include/H5B2pkg.h
/usr/include/H5B2public.h
/usr/include/H5Bpkg.h
/usr/include/H5Bpublic.h
/usr/include/H5Cpkg.h
/usr/include/H5Dpkg.h
/usr/include/H5EApkg.h
/usr/include/H5Edefin.h
/usr/include/H5Einit.h
/usr/include/H5Epkg.h
/usr/include/H5Eterm.h
/usr/include/H5FApkg.h
/usr/include/H5FDpkg.h
/usr/include/H5FDwindows.h
/usr/include/H5FSpkg.h
/usr/include/H5FSpublic.h
/usr/include/H5Fpkg.h
/usr/include/H5Gpkg.h
/usr/include/H5HFpkg.h
/usr/include/H5HFpublic.h
/usr/include/H5HGpkg.h
/usr/include/H5HGpublic.h
/usr/include/H5HLpkg.h
/usr/include/H5HLpublic.h
/usr/include/H5Ipkg.h
/usr/include/H5LTparse.h
/usr/include/H5Lpkg.h
/usr/include/H5MPpkg.h
/usr/include/H5Opkg.h
/usr/include/H5Oshared.h
/usr/include/H5PBpkg.h
/usr/include/H5PLpkg.h
/usr/include/H5Ppkg.h
/usr/include/H5Rpkg.h
/usr/include/H5SMpkg.h
/usr/include/H5Spkg.h
/usr/include/H5Tpkg.h
/usr/include/H5Zpkg.h
/usr/include/H5f90.h
/usr/include/H5f90proto.h
/usr/include/H5fortran_types.F90
/usr/include/h5diff.h
/usr/include/h5tools.h
/usr/include/h5tools_dump.h
/usr/include/h5tools_ref.h
/usr/include/h5tools_str.h
/usr/include/h5tools_utils.h
/usr/include/h5trav.h
/usr/lib/libhdf5_f90cstub.so
/usr/lib/libhdf5_hl_f90cstub.so
/usr/lib/libhdf5_tools.so
(Note: I’m excluding versioned symlinks, see below)
/usr/lib/pkgconfig/
/usr/lib/pkgconfig/hdf5-1.10.2.pc
/usr/lib/pkgconfig/hdf5_cpp-1.10.2.pc
/usr/lib/pkgconfig/hdf5_hl-1.10.2.pc
/usr/lib/pkgconfig/hdf5_hl_cpp-1.10.2.pc
/usr/share/
/usr/share/cmake/
/usr/share/cmake/hdf5/
/usr/share/cmake/hdf5/hdf5-config-version.cmake
/usr/share/cmake/hdf5/hdf5-config.cmake
/usr/share/cmake/hdf5/hdf5-targets-release.cmake
/usr/share/cmake/hdf5/hdf5-targets.cmake
- When I build using CMake, some modules are present in two versions:
/usr/include/shared/
/usr/include/shared/h5_gen.mod
/usr/include/shared/h5a.mod
/usr/include/shared/h5d.mod
/usr/include/shared/h5ds.mod
/usr/include/shared/h5e.mod
/usr/include/shared/h5f.mod
/usr/include/shared/h5fortkit.mod
/usr/include/shared/h5fortran_types.mod
/usr/include/shared/h5g.mod
/usr/include/shared/h5global.mod
/usr/include/shared/h5i.mod
/usr/include/shared/h5im.mod
/usr/include/shared/h5l.mod
/usr/include/shared/h5lib.mod
/usr/include/shared/h5lt.mod
/usr/include/shared/h5lt_const.mod
/usr/include/shared/h5o.mod
/usr/include/shared/h5p.mod
/usr/include/shared/h5r.mod
/usr/include/shared/h5s.mod
/usr/include/shared/h5t.mod
/usr/include/shared/h5tb.mod
/usr/include/shared/h5tb_const.mod
/usr/include/shared/h5z.mod
/usr/include/shared/hdf5.mod
/usr/include/static/
/usr/include/static/h5_gen.mod
/usr/include/static/h5a.mod
/usr/include/static/h5d.mod
/usr/include/static/h5ds.mod
/usr/include/static/h5e.mod
/usr/include/static/h5f.mod
/usr/include/static/h5fortkit.mod
/usr/include/static/h5fortran_types.mod
/usr/include/static/h5g.mod
/usr/include/static/h5global.mod
/usr/include/static/h5i.mod
/usr/include/static/h5im.mod
/usr/include/static/h5l.mod
/usr/include/static/h5lib.mod
/usr/include/static/h5lt.mod
/usr/include/static/h5lt_const.mod
/usr/include/static/h5o.mod
/usr/include/static/h5p.mod
/usr/include/static/h5r.mod
/usr/include/static/h5s.mod
/usr/include/static/h5t.mod
/usr/include/static/h5tb.mod
/usr/include/static/h5tb_const.mod
/usr/include/static/h5z.mod
/usr/include/static/hdf5.mod
While in autotools:
/usr/include/h5_gen.mod
/usr/include/h5a.mod
/usr/include/h5d.mod
/usr/include/h5ds.mod
/usr/include/h5e.mod
/usr/include/h5f.mod
/usr/include/h5fortkit.mod
/usr/include/h5fortran_types.mod
/usr/include/h5g.mod
/usr/include/h5global.mod
/usr/include/h5i.mod
/usr/include/h5im.mod
/usr/include/h5l.mod
/usr/include/h5lib.mod
/usr/include/h5lt.mod
/usr/include/h5lt_const.mod
/usr/include/h5o.mod
/usr/include/h5p.mod
/usr/include/h5r.mod
/usr/include/h5s.mod
/usr/include/h5t.mod
/usr/include/h5tb.mod
/usr/include/h5tb_const.mod
/usr/include/h5z.mod
/usr/include/hdf5.mod
- CMake versioned symlinks for .so files are borked:
/usr/lib/libhdf5.so.100.2.0
/usr/lib/libhdf5.so.101
/usr/lib/libhdf5_cpp.so.100.2.0
/usr/lib/libhdf5_cpp.so.101
/usr/lib/libhdf5_f90cstub.so.100.2.0
/usr/lib/libhdf5_f90cstub.so.101
/usr/lib/libhdf5_fortran.so.100.2.0
/usr/lib/libhdf5_fortran.so.101
/usr/lib/libhdf5_hl.so.100.2.0
/usr/lib/libhdf5_hl.so.101
/usr/lib/libhdf5_hl_cpp.so.100.2.0
/usr/lib/libhdf5_hl_cpp.so.101
/usr/lib/libhdf5_hl_f90cstub.so.100.2.0
/usr/lib/libhdf5_hl_f90cstub.so.101
/usr/lib/libhdf5_hl_fortran.so.100.2.0
/usr/lib/libhdf5_hl_fortran.so.101
Autotools for reference:
/usr/lib/libhdf5.so.101
/usr/lib/libhdf5.so.101.1.0
/usr/lib/libhdf5_cpp.so.102
/usr/lib/libhdf5_cpp.so.102.0.0
/usr/lib/libhdf5_fortran.so.100
/usr/lib/libhdf5_fortran.so.100.1.1
/usr/lib/libhdf5_hl.so.100
/usr/lib/libhdf5_hl.so.100.1.0
/usr/lib/libhdf5_hl_cpp.so.100
/usr/lib/libhdf5_hl_cpp.so.100.1.1
/usr/lib/libhdf5hl_fortran.so.100
/usr/lib/libhdf5hl_fortran.so.100.0.2
Note that the CMake build outputs this at the beginning:
-- SOVERSION: 101.1.0
-- SOVERSION_TOOLS: 100.1.0
-- SOVERSION_CXX: 102.0.0
-- SOVERSION_F: 100.1.1
-- SOVERSION_HL: 100.1.0
-- SOVERSION_HL_CXX: 100.1.1
-- SOVERSION_HL_F: 100.0.2
-- SOVERSION_JAVA: 100.2.0
- The CMake build does not output a summary of the configuration before starting to build. For the record, here is autotools one:
SUMMARY OF THE HDF5 CONFIGURATION
=================================
General Information:
-------------------
HDF5 Version: 1.10.2
Configured on: Mon Apr 9 16:04:07 CEST 2018
Configured by: builduser@
Host system: x86_64-unknown-linux-gnu
Uname information: Linux archange 4.15.13-1-ARCH #1 SMP PREEMPT Sun Mar 25 11:27:57 UTC 2018 x86_64 GNU/Linux
Byte sex: little-endian
Installation point: /usr
Compiling Options:
------------------
Build Mode: production
Debugging Symbols: no
Asserts: no
Profiling: no
Optimization Level: high
Linking Options:
----------------
Libraries: static, shared
Statically Linked Executables:
LDFLAGS: -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now
H5_LDFLAGS:
AM_LDFLAGS:
Extra libraries: -lsz -lz -ldl -lm
Archiver: ar
AR_FLAGS: cr
Ranlib: ranlib
Languages:
----------
C: yes
C Compiler: /usr/bin/gcc ( gcc (GCC) 7.3.1 20180312)
CPPFLAGS: -D_FORTIFY_SOURCE=2
H5_CPPFLAGS: -D_GNU_SOURCE -D_POSIX_C_SOURCE=200112L -DNDEBUG -UH5_DEBUG_API
AM_CPPFLAGS:
C Flags: -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt
H5 C Flags: -std=c99 -pedantic -Wall -Wextra -Wbad-function-cast -Wc++-compat -Wcast-align -Wcast-qual -Wconversion -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-equal -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wunused-macros -Wunsafe-loop-optimizations -Wwrite-strings -finline-functions -s -Wno-inline -Wno-aggregate-return -Wno-missing-format-attribute -Wno-missing-noreturn -O
AM C Flags:
Shared C Library: yes
Static C Library: yes
Fortran: yes
Fortran Compiler: /usr/bin/gfortran ( GNU Fortran (GCC) 7.3.1 20180312)
Fortran Flags:
H5 Fortran Flags: -pedantic -Wall -Wextra -Wunderflow -Wimplicit-interface -Wsurprising -Wno-c-binding-type -s -O2
AM Fortran Flags:
Shared Fortran Library: yes
Static Fortran Library: yes
C++: yes
C++ Compiler: /usr/bin/g++ ( g++ (GCC) 7.3.1 20180312)
C++ Flags: -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt
H5 C++ Flags: -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wredundant-decls -Winline -Wsign-promo -Woverloaded-virtual -Wold-style-cast -Weffc++ -Wreorder -Wnon-virtual-dtor -Wctor-dtor -privacy -Wabi -finline-functions -s -O
AM C++ Flags:
Shared C++ Library: yes
Static C++ Library: yes
Java: no
Features:
---------
Parallel HDF5: no
High-level library: yes
Threadsafety: no
Default API mapping: v110
With deprecated public symbols: yes
I/O filters (external): deflate(zlib),szip(encoder)
MPE: no
Direct VFD: no
dmalloc: no
Packages w/ extra debug output: none
API tracing: no
Using memory checker: no
Memory allocation sanity checks: no
Metadata trace file: no
Function stack tracing: no
Strict file format checks: no
Optimization instrumentation: no
There might be other ones, but if everything here is addressed, that would be a good start.