jimtcl icon indicating copy to clipboard operation
jimtcl copied to clipboard

"undefined reference to `utf8_*"issues when packaging on Debian

Open yuzibo opened this issue 3 years ago • 3 comments
trafficstars

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.

yuzibo avatar Sep 14 '22 01:09 yuzibo

Thanks for the report. I don’t know much about Debian packaging so we are equal 😀. What version of jimtcl is it using?

msteveb avatar Sep 14 '22 05:09 msteveb

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

yuzibo avatar Sep 14 '22 07:09 yuzibo

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

msteveb avatar Sep 14 '22 23:09 msteveb

I'm going to close this issue since I think it can be dealt with as described above

msteveb avatar Feb 24 '23 03:02 msteveb

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.

yuzibo avatar Feb 24 '23 04:02 yuzibo