summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuocai He <guocai.he.cn@windriver.com>2025-08-26 10:25:31 +0800
committerGyorgy Sarvari <skandigraun@gmail.com>2025-09-06 16:27:30 +0200
commitafb55dd3301d0e256a26b495b63be4d6416830a9 (patch)
tree30e2ad0d907a43a93479cc4e70918685a2554423
parent969a286f49f31616defb4da6ab18331caaa1a305 (diff)
downloadmeta-openembedded-afb55dd3301d0e256a26b495b63be4d6416830a9.tar.gz
unixodbc: fix odbc.pc file generation
The build process currently succeeds but the odbc.pc file is not correctly generated. The error message is like below in log.do_compile and log.do_install: /bin/bash: line 1: ../exe/odbc_config: cannot execute binary file: Exec format error I can see the message comes from the following line in exe/Makefile.am: @sed "s![@]ODBC_ULEN[@]!`$(top_builddir)/exe/odbc_config$(EXEEXT) --ulen`!" \ $(top_builddir)/DriverManager/odbc.pc > $(top_builddir)/exe/odbc.pc.tmp It's running the exe/odbc_config program we built out. But the binary is for the target platform and if we run it on the build host, we get that error message. The resulting ulen and build_cflags in the final odbc.pc file are also empty. Fix the issue by using qemu usermode to launch the target binary. Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Khem Raj <raj.khem@gmail.com> (master rev: 4cbd72f7b942af44da0704f66c1b0feef8699fe6) Signed-off-by: Guocai He <guocai.he.cn@windriver.com> Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
-rw-r--r--meta-oe/recipes-support/unixodbc/files/0001-exe-Makefile.am-add-CROSS_LAUNCHER-to-run-odbc_confi.patch54
-rw-r--r--meta-oe/recipes-support/unixodbc/unixodbc_2.3.9.bb18
2 files changed, 71 insertions, 1 deletions
diff --git a/meta-oe/recipes-support/unixodbc/files/0001-exe-Makefile.am-add-CROSS_LAUNCHER-to-run-odbc_confi.patch b/meta-oe/recipes-support/unixodbc/files/0001-exe-Makefile.am-add-CROSS_LAUNCHER-to-run-odbc_confi.patch
new file mode 100644
index 0000000000..c763a9feb6
--- /dev/null
+++ b/meta-oe/recipes-support/unixodbc/files/0001-exe-Makefile.am-add-CROSS_LAUNCHER-to-run-odbc_confi.patch
@@ -0,0 +1,54 @@
1From e886222c70d4b251f0785f670477b7aee938e5af Mon Sep 17 00:00:00 2001
2From: Chen Qi <Qi.Chen@windriver.com>
3Date: Wed, 21 Feb 2024 13:55:41 +0800
4Subject: [PATCH] exe/Makefile.am: add CROSS_LAUNCHER to run odbc_config
5
6In case of cross compilation, the odbc_config cannot run, the error message
7would be like below:
8
9 /bin/bash: line 1: ../exe/odbc_config: cannot execute binary file: Exec format error
10
11Add CROSS_LAUNCHER to allow the possibility of running odbc_config correctly in
12case of cross compilation.
13
14For example, here's a possible value for it (Yocto project environment, aarch64 target).
15 export CROSS_LAUNCHER="PSEUDO_UNLOAD=1 qemu-aarch64 -r 5.15 \
16 -L /PATH/TO/unixodbc/2.3.11/recipe-sysroot \
17 -E LD_LIBRARY_PATH=/PATH/TO/unixodbc/2.3.11/recipe-sysroot//usr/lib:/PATH/TO/unixodbc/2.3.11/recipe-sysroot//usr/lib "
18
19Other projects can use the launcher they like to allow correct generation of
20the odbc.pc file in cross compilation environment.
21
22Upstream-Status: Submitted [Personal Email, nick.gorham@easysoft.com]
23
24As said in the official website, https://www.unixodbc.org/, the way to report bug and send
25out patch is via personal email. So there's a public link above.
26
27Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
28---
29 exe/Makefile.am | 6 ++++--
30 1 file changed, 4 insertions(+), 2 deletions(-)
31
32diff --git a/exe/Makefile.am b/exe/Makefile.am
33index 03f3d5a..5f33cf2 100644
34--- a/exe/Makefile.am
35+++ b/exe/Makefile.am
36@@ -59,11 +59,13 @@ slencheck_SOURCES = slencheck.c
37 dltest_DEPENDENCIES = $(LTDLDEPS)
38 dltest_LDADD = $(LIBLTDL)
39
40+CROSS_LAUNCHER ?= ""
41+
42 all-am:
43- @sed "s![@]ODBC_ULEN[@]!`$(top_builddir)/exe/odbc_config$(EXEEXT) --ulen`!" \
44+ @sed "s![@]ODBC_ULEN[@]!`$(CROSS_LAUNCHER)$(top_builddir)/exe/odbc_config$(EXEEXT) --ulen`!" \
45 $(top_builddir)/DriverManager/odbc.pc > $(top_builddir)/exe/odbc.pc.tmp
46 @mv -f $(top_builddir)/exe/odbc.pc.tmp $(top_builddir)/DriverManager/odbc.pc
47- @sed "s![@]ODBC_CFLAGS[@]!`$(top_builddir)/exe/odbc_config$(EXEEXT) --cflags | sed 's/ -I.*//'`!" \
48+ @sed "s![@]ODBC_CFLAGS[@]!`$(CROSS_LAUNCHER)$(top_builddir)/exe/odbc_config$(EXEEXT) --cflags | sed 's/ -I.*//'`!" \
49 $(top_builddir)/DriverManager/odbc.pc > $(top_builddir)/exe/odbc.pc.tmp
50 @mv -f $(top_builddir)/exe/odbc.pc.tmp $(top_builddir)/DriverManager/odbc.pc
51
52--
532.34.1
54
diff --git a/meta-oe/recipes-support/unixodbc/unixodbc_2.3.9.bb b/meta-oe/recipes-support/unixodbc/unixodbc_2.3.9.bb
index 66881a223e..0f6aacb37e 100644
--- a/meta-oe/recipes-support/unixodbc/unixodbc_2.3.9.bb
+++ b/meta-oe/recipes-support/unixodbc/unixodbc_2.3.9.bb
@@ -11,23 +11,39 @@ DEPENDS = "libtool readline"
11SRC_URI = "http://ftp.unixodbc.org/unixODBC-${PV}.tar.gz \ 11SRC_URI = "http://ftp.unixodbc.org/unixODBC-${PV}.tar.gz \
12 file://do-not-use-libltdl-source-directory.patch \ 12 file://do-not-use-libltdl-source-directory.patch \
13 file://CVE-2024-1013.patch \ 13 file://CVE-2024-1013.patch \
14 file://0001-exe-Makefile.am-add-CROSS_LAUNCHER-to-run-odbc_confi.patch \
14" 15"
15SRC_URI[sha256sum] = "52833eac3d681c8b0c9a5a65f2ebd745b3a964f208fc748f977e44015a31b207" 16SRC_URI[sha256sum] = "52833eac3d681c8b0c9a5a65f2ebd745b3a964f208fc748f977e44015a31b207"
16 17
17UPSTREAM_CHECK_REGEX = "unixODBC-(?P<pver>\d+(\.\d+)+)\.tar" 18UPSTREAM_CHECK_REGEX = "unixODBC-(?P<pver>\d+(\.\d+)+)\.tar"
18 19
19inherit autotools-brokensep multilib_header 20inherit autotools-brokensep multilib_header qemu
20 21
21S = "${WORKDIR}/unixODBC-${PV}" 22S = "${WORKDIR}/unixODBC-${PV}"
22 23
23EXTRA_OEMAKE += "LIBS=-lltdl" 24EXTRA_OEMAKE += "LIBS=-lltdl"
24 25
26DEPENDS:append:class-target = "${@' qemu-native' if bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', True, False, d) else ''}"
27QEMU_WRAPPER = "${@qemu_wrapper_cmdline(d, '${STAGING_DIR_HOST}', ['${STAGING_DIR_HOST}/${libdir}','${STAGING_DIR_HOST}/${base_libdir}'])}"
28
25do_configure:prepend() { 29do_configure:prepend() {
26 # old m4 files will cause libtool version don't match 30 # old m4 files will cause libtool version don't match
27 rm -rf m4/* 31 rm -rf m4/*
28 rm -fr libltdl 32 rm -fr libltdl
29} 33}
30 34
35do_compile:prepend() {
36 if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true', 'false', d)}; then
37 export CROSS_LAUNCHER="${QEMU_WRAPPER} "
38 fi
39}
40
41do_install:prepend() {
42 if ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'true', 'false', d)}; then
43 export CROSS_LAUNCHER="${QEMU_WRAPPER} "
44 fi
45}
46
31do_install:append() { 47do_install:append() {
32 oe_multilib_header unixodbc_conf.h 48 oe_multilib_header unixodbc_conf.h
33} 49}