Bug#644019: reglookup: Please package latest upstream (1.0.1)
Raphael Hertzog
hertzog at debian.org
Mon Jun 8 15:39:29 UTC 2015
Hello Tim,
we just tried the trunk. It's better but there are still multiple
problems:
- LDFLAGS is not used when you link the executables (it's only used when
you link libregfi)
- the default value for LDFLAGS is wrong, "-z relro" is an option for "ld" but
when you pass it through gcc you need "-Wl,-z,relro"
- I saw you tried to hack up some code to setup the SONAME... it does set
the SONAME on the library but the library is still installed under the
wrong name (libregfi.so instead of the name set in the SONAME)
- the SONAME must not encode the full version... it's only a simple
counter of API/ABI compatibility. Please use "libregfi.so.0" as
the first SONAME (and then bump to libregfi.so.1 when you break
the ABI/API, etc.) (and 99.99.99.X looks really wrong as a version number :))
While lookinto in Scons support for versioned shared library I found this:
http://stackoverflow.com/questions/2997001/how-to-get-shared-library-names-like-libhello-so-0-0-1-with-scons
http://www.scons.org/doc/production/HTML/scons-user/apb.html#b-SharedLibrary
So it looks like it's supported since version 2.3.0... I just tried this
and got good results:
--- a/SConstruct
+++ b/SConstruct
@@ -9,10 +9,9 @@ cflags = '-std=gnu99 -pedantic -Wall -D_
cflags += ' -DREGFI_VERSION=\'"%s"\' ' % REGFI_VERSION
cflags += os.environ.get('CFLAGS','-fPIE -pie -fstack-protector -D_FORTIFY_SOURCE=2')
-linkflags = "-shared -fPIC -Wl,-soname,libregfi.so.%s " % REGFI_VERSION
+linkflags = "-shared -fPIC "
linkflags += os.environ.get('LDFLAGS','-z relro -z now')
lib_src = ['lib/regfi.c',
@@ -31,7 +30,7 @@ env = Environment(ENV=os.environ,
# Libraries
libregfi_static = env.Library(lib_src)
libregfi = env.SharedLibrary(lib_src, LIBS=['m','pthread', 'talloc'],
- LINKFLAGS=linkflags)
+ SHLIBVERSION='0.0.0', LINKFLAGS=linkflags)
# Executables
@@ -64,7 +63,7 @@ install_bin = [destdir + bindir, destdir
install_lib = [destdir + libdir, destdir + includedir + '/regfi']
env.Install(destdir+bindir, [reglookup, reglookup_recover, 'bin/reglookup-timeline'])
-libinstall = env.Install(destdir+libdir, [libregfi, libregfi_static])
+libinstall = env.InstallVersionedLib(destdir+libdir, [libregfi, libregfi_static], SHLIBVERSION='0.0.0')
env.Install(destdir+includedir+'/regfi', Glob('include/*.h'))
env.Install(destdir+mandir+'/man1', [man_reglookup, man_reglookup_recover,
man_reglookup_timeline])
but does not seem
to make any difference between the version used in the filename (ideally
libfoo.so.X.Y.Z) and the SONAME which is usually simpler (libfoo.so.X and
which is the reason why the symlinks libfoo.so.X are needed when you
install the library as libfoo.so.X.Y.Z). I would thus suggest to pass a
single integer to SHLIBVERSION and not care about having a filename
encoding the full version.
full version filename and the SONAME
Cheers,
--
Raphaël Hertzog ◈ Debian Developer
Support Debian LTS: http://www.freexian.com/services/debian-lts.html
Learn to master Debian: http://debian-handbook.info/get/
More information about the forensics-devel
mailing list