icu-config deprecated
Greg57070 opened this issue · 10 comments
Hello guy,
ltfs can't build on Debian 10 as icu-config has been removed from icu-devtools.
As found on this debian bugreport https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=920900, and on icu-project howto use, icu-config is now deprecated.
It's now recommanded to use pkg-config to get cflags
Thanks for the good job, keep up with it !
BR,
Grégory
Thank you for your report.
I confirmed the problem and I made a fix to handle ICU_UC
package in configure.ac
. It works fine but I have another problem on pkgdata
program provided by ICU.
It looks the pkgdata
uses icu-config
internally. I believe Debian shall provide icu-config
correctly.
$ pkgdata -p bin_mkltfs -m static packagelist.txt
sh: 1: icu-config: not found
sh: 1: icu-config: not found
pkgdata: icu-config: No icu-config found. (fix PATH or use -O option)
required parameter is missing: -O is required for static and shared builds.
Run 'pkgdata --help' for help.
Hello piste-jp-ibm, when i try to compile on Ubuntu 19.04 i get the same error, icu-config isn´t prensent in the system
Thanks
Juan Carlos
Hi @Greg57070,
I realized a comment is added to https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=920900, I believe you commented.
Thank you very much.
Just to let you know, I have the same problem. LTFS runs well on debian 8 and 9 but on debian 10 I'm getting probably the same errors due to icu no longer being supported.
I attached the Dockerfile I use to build a docker image (I run LTFS in a container but that should not matter I guess).
The build process works if I change the line
FROM debian:buster
in the attached Dockerfile to
FROM debian:stretch
ro
FROM debian:jessie
Hereby also attached the output of the full build process that fails in Debian Buster:
debian-buster-container-build-process.txt
Has anybody figured out a way to compile this in Ubuntu 19 ?
I found a way to make it compilable. At this time, this is a quick patch but I can build LTFS on Ubuntu19.
The pkgdata
command calls icu-config --incpkgdatafile
and get a path of pkgdata.inc
. So it is good to create a dummy script to return the path of pkgdata.inc
file.
On Ubuntu19,
- Create
/usr/bin/icu-config
- Write a code to return a path of
pkgdata.inc
in/usr/bin/icu-config
- Set executable bit of
/usr/bin/icu-config
The sample script for Ubuntu19 is
#!/bin/sh
echo '/usr/lib/x86_64-linux-gnu/icu/pkgdata.inc'
May be you need to adjust the path on your machine.
I am getting this:
make[3]: Entering directory '/home/name/projects/ltfs/src/libltfs'
/bin/bash ../../libtool --tag=CC --mode=link gcc -Wall -Wsign-compare -fsigned-char -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -I/usr/include/uuid -I/usr/include/libxml2 /usr/lib/x86_64-linux-gnu/icu/current/pkgdata.inc -D ENABLE_SNMP -DNETSNMP_ENABLE_IPV6 -fno-strict-aliasing -g -O2 -fdebug-prefix-map=/build/net-snmp-rzx9Z7/net-snmp-5.7.3+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -DNETSNMP_USE_INLINE -Ulinux -Dlinux=linux -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/x86_64-linux-gnu/perl/5.28/CORE -Wdate-time -I. -I/usr/include -fkeep-inline-functions -rdynamic -g -O2 -D_FORTIFY_SOURCE=0 -O0 -ggdb -Wl,--no-undefined,--as-needed -lfuse -pthread -luuid -lxml2 /usr/lib/x86_64-linux-gnu/icu/current/pkgdata.inc -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -L/usr/lib/x86_64-linux-gnu -lnetsnmpmibs -lsensors -lpci -ldl -lnetsnmpagent -lwrap -Wl,-E -lnetsnmp -lcrypto -lm 2> /dev/null -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -L/usr/lib/x86_64-linux-gnu -lnetsnmp -lcrypto -lm -L../../messages -llibltfs_dat -linternal_error_dat -ltape_common_dat -o libltfs.la -rpath /usr/local/lib libltfs_la-ltfs.lo libltfs_la-ltfs_internal.lo libltfs_la-ltfs_fsops.lo libltfs_la-ltfs_fsops_raw.lo libltfs_la-ltfssnmp.lo libltfs_la-fs.lo libltfs_la-xml_common.lo libltfs_la-xml_writer.lo libltfs_la-xml_reader.lo libltfs_la-xml_writer_libltfs.lo libltfs_la-xml_reader_libltfs.lo libltfs_la-label.lo libltfs_la-base64.lo libltfs_la-tape.lo libltfs_la-iosched.lo libltfs_la-dcache.lo libltfs_la-kmi.lo libltfs_la-pathname.lo libltfs_la-index_criteria.lo libltfs_la-xattr.lo libltfs_la-ltfslogging.lo libltfs_la-ltfstrace.lo libltfs_la-ltfs_thread.lo libltfs_la-config_file.lo libltfs_la-plugin.lo libltfs_la-periodic_sync.lo arch/libltfs_la-uuid_internal.lo arch/libltfs_la-filename_handling.lo arch/libltfs_la-time_internal.lo arch/libltfs_la-arch_info.lo arch/libltfs_la-errormap.lo -lrt -lpthread
libtool: link: gcc -shared -fPIC -DPIC .libs/libltfs_la-ltfs.o .libs/libltfs_la-ltfs_internal.o .libs/libltfs_la-ltfs_fsops.o .libs/libltfs_la-ltfs_fsops_raw.o .libs/libltfs_la-ltfssnmp.o .libs/libltfs_la-fs.o .libs/libltfs_la-xml_common.o .libs/libltfs_la-xml_writer.o .libs/libltfs_la-xml_reader.o .libs/libltfs_la-xml_writer_libltfs.o .libs/libltfs_la-xml_reader_libltfs.o .libs/libltfs_la-label.o .libs/libltfs_la-base64.o .libs/libltfs_la-tape.o .libs/libltfs_la-iosched.o .libs/libltfs_la-dcache.o .libs/libltfs_la-kmi.o .libs/libltfs_la-pathname.o .libs/libltfs_la-index_criteria.o .libs/libltfs_la-xattr.o .libs/libltfs_la-ltfslogging.o .libs/libltfs_la-ltfstrace.o .libs/libltfs_la-ltfs_thread.o .libs/libltfs_la-config_file.o .libs/libltfs_la-plugin.o .libs/libltfs_la-periodic_sync.o arch/.libs/libltfs_la-uuid_internal.o arch/.libs/libltfs_la-filename_handling.o arch/.libs/libltfs_la-time_internal.o arch/.libs/libltfs_la-arch_info.o arch/.libs/libltfs_la-errormap.o -lfuse -luuid -lxml2 -L/usr/lib/x86_64-linux-gnu -lnetsnmpmibs -lsensors -lpci -ldl -lnetsnmpagent -lwrap -lnetsnmp -lcrypto -lm -L../../messages -llibltfs_dat -linternal_error_dat -ltape_common_dat -lrt -lpthread -g -O2 -fstack-protector-strong -g -O2 -O0 -ggdb -Wl,--no-undefined -Wl,--as-needed -pthread -Wl,-Bsymbolic-functions -Wl,-z -Wl,relro -Wl,-z -Wl,now -Wl,-E -Wl,-Bsymbolic-functions -Wl,-z -Wl,relro -Wl,-z -Wl,now -pthread -Wl,-soname -Wl,libltfs.so.0 -o .libs/libltfs.so.0.0.0
make[3]: *** [Makefile:553: libltfs.la] Error 1
make[3]: Leaving directory '/home/name/projects/ltfs/src/libltfs'
make[2]: *** [Makefile:696: all-recursive] Error 1
make[2]: Leaving directory '/home/name/projects/ltfs/src'
make[1]: *** [Makefile:521: all-recursive] Error 1
make[1]: Leaving directory '/home/name/projects/ltfs'
make: *** [Makefile:427: all] Error 2
is this related to this issue ?
No, I don't think it is related directly. But I might miss something to write in the previous comment...
My build step is little bit tricky at this time. I will try to enhance this later if no one post a PR about this.
Step1 : Edit configure.ac
diff --git a/configure.ac b/configure.ac
index 95c3958..6f56907 100644
--- a/configure.ac
+++ b/configure.ac
@@ -342,7 +342,7 @@ ICU_MODULE_CFLAGS="`icu-config --cppflags 2> /dev/null`";
ICU_MODULE_LIBS="`icu-config --ldflags 2> /dev/null`";
if test -z "$ICU_MODULE_LIBS"
then
- PKG_CHECK_MODULES([ICU_MODULE], [icu >= 0.21])
+ PKG_CHECK_MODULES([ICU_MODULE], [icu-uc >= 0.21])
fi
AC_MSG_CHECKING([use latest ICU])
Step2 : Run configuration
$ ./autogen.sh
$ ./configure
Step3 : Create icu-config
- Create
/usr/bin/icu-config
- Write a code to return a path of
pkgdata.inc
in/usr/bin/icu-config
- Set executable bit of
/usr/bin/icu-config
The sample script for Ubuntu19 is
#!/bin/sh
echo '/usr/lib/x86_64-linux-gnu/icu/pkgdata.inc'
Step4 : make
$ ./make
I wrote a minimal script to support ltfs build on Debian10 and Ubuntu19.10. And also I made build environemts on GitHub Actions.
#!/bin/sh
opts=$1
case $opts in
'--cppflags')
echo '' ;;
'--ldflags')
echo '-licuuc -licudata' ;;
*)
echo '/usr/lib/x86_64-linux-gnu/icu/pkgdata.inc' ;;
esac
See also
Hi. In my Ubuntu 20.04 environment I had to add -ldl to to the flags for errors related to 'dlopen'
$ cat /etc/issue
Ubuntu 20.04.2 LTS \n \l
$ uname -a
Linux xx 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ cat /usr/bin/icu-config
#!/bin/sh
opts=$1
case $opts in
'--cppflags')
echo '' ;;
'--ldflags')
echo '-licuuc -licudata -ldl' ;;
*)
echo '/usr/lib/x86_64-linux-gnu/icu/pkgdata.inc' ;;
esac