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. Не верю в незнание английского хотя бы на уровне "там эта хернюшка не работать, поправь майнтейнера-ма".