jimtcl
jimtcl copied to clipboard
"undefined reference to `utf8_*"issues when packaging on Debian
Hi,
I am the maintainer of jimtcl package that i adopted it several months ago https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=993599.
now I want to fix the bug from Debian user. In short, he want to add ipv6&math feature for jimtcl package. I tried it but fail:
dh_auto_configure -- --shared --utf8 --ipv6 --math
./configure --build=x86_64-linux-gnu --prefix=/usr --includedir=\${prefix}/include --mandir=\${prefix}/share/man --infodir=\${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --disable-option-checking --disable-silent-rules --libdir=\${prefix}/lib/x86_64-linux-gnu --runstatedir=/run --disable-maintainer-mode --disable-dependency-tracking --shared --utf8 --ipv6 --math
No installed jimsh or tclsh, building local bootstrap jimsh0
Host System...x86_64-pc-linux-gnu
Build System...x86_64-pc-linux-gnu
...
jimsh jimsh.o initjimsh.o libjim.a
/usr/bin/ld: libjim.a(jim.o): in function `StringAppendString':
./static/../jim.c:2522: undefined reference to `utf8_strlen'
/usr/bin/ld: libjim.a(jim.o): in function `utf8_tounicode_case':
./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: libjim.a(jim.o): in function `JimCharsetMatch':
./static/../jim.c:201: undefined reference to `utf8_upper'
/usr/bin/ld: libjim.a(jim.o): in function `utf8_tounicode_case':
./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: libjim.a(jim.o): in function `JimGlobMatch':
./static/../jim.c:292: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `utf8_tounicode_case':
./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: ./static/../jim.c:164: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:166: undefined reference to `utf8_upper'
/usr/bin/ld: libjim.a(jim.o): in function `JimGlobMatch':
./static/../jim.c:298: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:285: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_Utf8Length':
./static/../jim.c:2431: undefined reference to `utf8_strlen'
/usr/bin/ld: libjim.a(jim.o): in function `JimFindTrimLeft':
./static/../jim.c:2854: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `utf8_memchr':
./static/../jim.c:2830: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `JimFindTrimLeft':
./static/../jim.c:2854: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `JimFindTrimRight':
./static/../jim.c:2879: undefined reference to `utf8_prev_len'
/usr/bin/ld: ./static/../jim.c:2884: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `utf8_memchr':
./static/../jim.c:2830: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_NewStringObjUtf8':
./static/../jim.c:2466: undefined reference to `utf8_index'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_Utf8Length':
./static/../jim.c:2431: undefined reference to `utf8_strlen'
/usr/bin/ld: ./static/../jim.c:2431: undefined reference to `utf8_strlen'
/usr/bin/ld: libjim.a(jim.o): in function `ScanOneEntry':
./static/../jim.c:10268: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:10277: undefined reference to `utf8_strlen'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_NewStringObjUtf8':
./static/../jim.c:2466: undefined reference to `utf8_index'
/usr/bin/ld: libjim.a(jim.o): in function `JimScanAString':
./static/../jim.c:10202: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:10202: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_SplitCoreCommand':
./static/../jim.c:15655: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_NewStringObjUtf8':
./static/../jim.c:2466: undefined reference to `utf8_index'
/usr/bin/ld: libjim.a(jim.o): in function `Jim_SplitCoreCommand':
./static/../jim.c:15632: undefined reference to `utf8_tounicode'
/usr/bin/ld: ./static/../jim.c:15635: undefined reference to `utf8_tounicode'
/usr/bin/ld: libjim.a(jim.o): in function `JimExprOpDoubleUnary':
./static/../jim.c:8331: undefined reference to `sin'
/usr/bin/ld: ./static/../jim.c:8349: undefined reference to `sinh'
/usr/bin/ld: ./static/../jim.c:8352: undefined reference to `cosh'
/usr/bin/ld: ./static/../jim.c:8355: undefined reference to `tanh'
/usr/bin/ld: ./static/../jim.c:8364: undefined reference to `exp'
/usr/bin/ld: ./static/../jim.c:8367: undefined reference to `log'
/usr/bin/ld: ./static/../jim.c:8370: undefined reference to `log10'
/usr/bin/ld: ./static/../jim.c:8337: undefined reference to `tan'
/usr/bin/ld: ./static/../jim.c:8340: undefined reference to `asin'
/usr/bin/ld: ./static/../jim.c:8343: undefined reference to `acos'
/usr/bin/ld: ./static/../jim.c:8346: undefined reference to `atan'
/usr/bin/ld: ./static/../jim.c:8334: undefined reference to `cos'
/usr/bin/ld: ./static/../jim.c:8373: undefined reference to `sqrt'
/usr/bin/ld: libjim.a(jim.o): in function `JimExprOpBin':
./static/../jim.c:8585: undefined reference to `pow'
/usr/bin/ld: ./static/../jim.c:8588: undefined reference to `atan2'
/usr/bin/ld: ./static/../jim.c:8594: undefined reference to `fmod'
/usr/bin/ld: ./static/../jim.c:8591: undefined reference to `hypot'
...
The debian/rules(build config file) is here:
vimer@dev:~/build/rfs/jimtcl$ cat debian/rules
#!/usr/bin/make -f
# That's needed for DEB_VERSION_UPSTREAM
-include /usr/share/dpkg/pkg-info.mk
# That's needed for DEB_HOST_MULTIARCH
-include /usr/share/dpkg/architecture.mk
export DEB_CFLAGS_MAINT_APPEND = $(shell dpkg-buildflags --get CPPFLAGS)
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
# Convenience shortcuts
MA_DESTDIR ?= debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)
MA_DEV_DESTDIR ?= debian/libjim-dev/usr/lib/$(DEB_HOST_MULTIARCH)
%:
dh $@
# jimsh0.c is removed from source for DFSG reasons, build it from `make-bootstrap-jim`
autosetup/jimsh0.c: make-bootstrap-jim
./$< > $@
override_dh_autoreconf:
# Do not run autoreconf, it is not used
override_dh_auto_configure: autosetup/jimsh0.c
dh_auto_configure --builddirectory=static/
dh_auto_configure -- --shared --ipv6 --math
override_dh_auto_build:
dh_auto_build --builddirectory=static/
dh_auto_build
override_dh_auto_test:
dh_auto_test --builddirectory=static/
dh_auto_test
override_dh_auto_install:
dh_auto_install --builddirectory=static/
dh_auto_install
override_dh_install:
dh_install
set -e; rootdir=`pwd` ;\
cd ${MA_DESTDIR}; libfile=`ls *.so.*`; cd $${rootdir};\
cd ${MA_DEV_DESTDIR}; ln -sf $${libfile} libjim.so
override_dh_missing:
dh_missing --list-missing
override_dh_auto_clean:
dh_auto_clean
rm -f autosetup/jimsh0.c
rm -f libjim.so*
rm -f tests/exec.tmp1
rm -Rf static/
To be honest, I do know not much about jimtcl before maintaining it. So, I have to ask for help here, sorry.
Thanks for the report. I don’t know much about Debian packaging so we are equal 😀. What version of jimtcl is it using?
It is 0.81 on Debian also. Sorry, I'm not a qualified maintainer so far for jimtcl:(. But I think I still do my best to make the user experience a better jimtcl on Debian:) The debian repo is here: https://salsa.debian.org/debian/jimtcl. In fact, the jimtcl is perfect because I can config these options from source code with preinstalled jimsh and it works. I suspect the original maintainer of the package was intentional
I think the problem is trying to do one in-tree build (shared) and one out-of-tree build (static). Do one or the other but not both. Since you want both builds, make them both out-of-tree. Something like this, but with a few other places changed to account for the shared out-of-tree build:
diff --git a/debian/rules b/debian/rules
index 0f91b9c..880ea3e 100755
--- a/debian/rules
+++ b/debian/rules
@@ -23,20 +23,20 @@ override_dh_autoreconf:
# Do not run autoreconf, it is not used
override_dh_auto_configure: autosetup/jimsh0.c
- dh_auto_configure --builddirectory=static/
- dh_auto_configure -- --shared
+ dh_auto_configure --builddirectory=static/ -- --math --ipv6
+ dh_auto_configure --builddirectory=shared/ -- --shared --math --ipv6
override_dh_auto_build:
dh_auto_build --builddirectory=static/
- dh_auto_build
+ dh_auto_build --builddirectory=shared/
override_dh_auto_test:
dh_auto_test --builddirectory=static/
- dh_auto_test
+ dh_auto_test --builddirectory=shared/
override_dh_auto_install:
dh_auto_install --builddirectory=static/
- dh_auto_install
+ dh_auto_install --builddirectory=shared/
override_dh_install:
dh_install
I'm going to close this issue since I think it can be dealt with as described above
I am appreciated for help here. But it seems I forget the issue.:( Sorry for not responding for a long time. I will update it before the bookworm release. Thanks again.