QtSql USE="odbc". BUG
Доброго времени суток!
Пишу проектик по работе. Использую модуль QtSql, а конкретно драйвер для ODBC. Столкнулся с такой багой и/или недоработкой:
В системе по разным зависимостям стоят libiodbc и unixODBC. Системы разные, хоть и реализуют один интерфейс. Драйвер QODBC может работать либо с libiodbc, либо c unixODBC. С какой реализацией ODBC он будет работать, определяется на этапе компиляции. И вот тут сам баг: у ебилда есть USE-флаг odbc, который включает в зависимости сразу два пакета: dev-db/libiodbc и dev-db/unixODBC. При этом на этапе конфигурации подпихиваются исходники libiodbc, а на этапе компиляции драйвер линкуется с libodbc.so.2, который входит в пакет unixODBC. В результате при обеих настроенных и оттестированных реализациях ODBC, драйвер QODBC никуда не коннектится и выдаёт непереводимый набор символов/псевдографики. Предлагаю решение этого бага ниже. Еще, коли технологии взаимоисключающие для драйвера QODBC, то хотелось бы иметь возможность выбирать вручную с помощью USE-флагов с какой реализацией ODBC будем работать.
Доработанный ебилд:
# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/dev-qt/qtsql/qtsql-4.8.5.ebuild,v 1.10 2014/01/26 11:56:06 ago Exp $ EAPI=4 inherit multilib qt4-build DESCRIPTION="The SQL module for the Qt toolkit" SLOT="4" if [[ ${QT4_BUILD_TYPE} == live ]]; then KEYWORDS="" else KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 sparc x86 ~amd64-fbsd ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris ~x86-solaris" fi IUSE="firebird freetds mysql oci8 iodbc odbc postgres qt3support +sqlite" REQUIRED_USE=" || ( firebird freetds mysql oci8 iodbc odbc postgres sqlite ) " DEPEND=" ~dev-qt/qtcore-${PV}[aqua=,debug=,qt3support=] firebird? ( dev-db/firebird ) freetds? ( dev-db/freetds ) mysql? ( virtual/mysql ) oci8? ( dev-db/oracle-instantclient-basic ) odbc? ( iodbc? ( dev-db/libiodbc ) || ( dev-db/unixODBC ) ) postgres? ( dev-db/postgresql-base ) sqlite? ( dev-db/sqlite:3 ) " RDEPEND="${DEPEND}" pkg_setup() { QT4_TARGET_DIRECTORIES=" src/sql src/plugins/sqldrivers" QT4_EXTRACT_DIRECTORIES="${QT4_TARGET_DIRECTORIES} include/Qt include/QtCore include/QtSql src/src.pro src/corelib src/plugins src/tools/tools.pro" qt4-build_pkg_setup } src_configure() { myconf+=" $(qt_use firebird sql-ibase plugin) $(qt_use freetds sql-tds plugin) $(qt_use mysql sql-mysql plugin) $(use mysql && echo "-I${EPREFIX}/usr/include/mysql -L${EPREFIX}/usr/$(get_libdir)/mysql") $(qt_use oci8 sql-oci plugin) $(use oci8 && echo "-I${ORACLE_HOME}/include -L${ORACLE_HOME}/$(get_libdir)") $(qt_use odbc sql-odbc plugin) $(if use iodbc ; then echo "-liodbc -I${EPREFIX}/usr/include/iodbc" else echo "-lodbc" fi;) $(qt_use postgres sql-psql plugin) $(use postgres && echo "-I${EPREFIX}/usr/include/postgresql/pgsql") $(qt_use sqlite sql-sqlite plugin) $(use sqlite && echo -system-sqlite) -no-sql-db2 -no-sql-sqlite2 -no-sql-symsql $(qt_use qt3support) -no-accessibility -no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-svg -no-webkit -no-script -no-scripttools -no-declarative -system-zlib -no-gif -no-libtiff -no-libpng -no-libmng -no-libjpeg -no-openssl -no-cups -no-dbus -no-gtkstyle -no-nas-sound -no-opengl -no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-freetype -no-xinput -no-xkb -no-glib" qt4-build_src_configure }
Жирным выделил измененные места.
Пересобирал с unixODBC и с libiodbc, тестировал свой проект и так и так. Теперь во всех случаях работает :)
Заранее извиняюсь, если не стоило сюда этого писать, но в багзиллу написать не могу, т.к. не знаю английского так, чтобы подробно описать проблему, да и пользоваться ей не умею... Если найдётся тот, кто всё это умеет, то добавьте пожалуйста это в багзиллу.
СПАСИБО за внимание!
P.S. ебилд больше для обозначения сути проблемы. Я не мастер написания ебилдов, наверняка есть ошибки с юзами...
- Для комментирования войдите или зарегистрируйтесь
.
ИМХО задавать используемый движок логичнее через
USE_EXPAND
.Вопрос не совсем по теме: в чём profit от использования ODBC (в сравнении с нативной поддержкой например
postgres
)?Реализацию поддержки ODBC где-то ещё не смотрел для сравнить (по формальным признакам баг может быть типовым-серийным)?
С троллями дел не имел, пересказ в трекере полагаю делом неправильным.
Так что было бы неплохо, если бы ты дополнил тему описанием простейшего способа воспроизведения проблемы.
:wq
--
Live free or die
А можно где-либо почитать о
А можно где-либо почитать о правилах и порядке внесения предложений на изменения в какой-либо ebuild? В смысле, описано ли это где-нибудь на русском? просто нашёл еще косячок, хотелось бы внести вклад :)
Идете на багзиллу
Идете на багзиллу (bugs.gentoo.org), открываете там баг и прикладываете диффы с желаемыми изменениями. И ждете от пары часов до бесконечности. )
P.S. Не верю в незнание английского хотя бы на уровне "там эта хернюшка не работать, поправь майнтейнера-ма".