|
Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.
Повод для гордости. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
07.09.2010, 10:02 | #1 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
[10772] [psql] Fix compile on Linux
Исправления не совсем тривиальные, готов к обсуждению.
Источник: dcabb22276501fc09fbbd4d4b6fc825315472e98 3e9a717de4124b2f32f923b3f23ab46ec21bb547 0078c5db1be2305e4d60da6a3cdbd1b37a6e19ad b5ecd0c9030b8f3bcff9cd31239334bec89daf6a в narma/mangos. |
08.09.2010, 09:27 | #2 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Без патча:
Код:
../../../../src/shared/Database/QueryResultPostgre.cpp: В функции-члене ‘Field::DataTypes QueryResultPostgre::ConvertNativeType(Oid) const’: ../../../../src/shared/Database/QueryResultPostgre.cpp:84:14: ошибка: нет декларации ‘BPCHAROID’ в этой области видимости ../../../../src/shared/Database/QueryResultPostgre.cpp:85:14: ошибка: нет декларации ‘CIDOID’ в этой области видимости ../../../../src/shared/Database/QueryResultPostgre.cpp:86:14: ошибка: нет декларации ‘CIDROID’ в этой области видимости\ ... Код:
#ifdef WIN32 #define FD_SETSIZE 1024 #include <winsock2.h> #include <postgre/libpq-fe.h> #include <postgre/pg_type.h> #else #include <libpq-fe.h> //#include <pg_type.h> #endif |
08.09.2010, 09:37 | #3 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Теперь о самом патче:
Код:
diff --git a/configure.ac b/configure.ac index 931543f..cd00bcc 100644 --- a/configure.ac +++ b/configure.ac @@ -124,10 +124,45 @@ AC_ARG_WITH(mysql, AC_MSG_CHECKING(whether to build/link POSTGRESQL) if test "x$DO_POSTGRESQL" = "xyes"; then DO_MYSQL=no -POSTGRE_INCLUDES="-I/usr/include/postgresql $POSTGRE_INCLUDES" -POSTGRE_LIBS="-L/usr/lib/postresql -lpq -lz -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib $OPENSSL_LIBS $POSTGRE_LIBS " +POSTGRE_INC_DIR="`pg_config --includedir`" +POSTGRE_INCLUDES="-I${POSTGRE_INC_DIR} -I\$(top_builddir)/src/shared/Database $POSTGRE_INCLUDES" +POSTGRE_LIBS="-L`pg_config --libdir` -lpq -lz -lpthread -lcrypt -lnsl -lm -lpthread -L/usr/lib $OPENSSL_LIBS $POSTGRE_LIBS " CXXFLAGS="-DDO_POSTGRESQL $CXXFLAGS" Код:
+AC_CHECK_FILE("${POSTGRE_INC_DIR}/catalog/pg_type.h",[PGTYPE="${POSTGRE_INC_DIR}/catalog/pg_type.h"], + [AC_CHECK_FILE("${POSTGRE_INC_DIR}/server/catalog/pg_type.h", [PGTYPE="${POSTGRE_INC_DIR}/server/catalog/pg_type.h"], + [AC_MSG_ERROR(can't find pg_type.h under ${POSTGRE_INC_DIR})] + )] +) Код:
+AC_MSG_NOTICE([Checking for postgresql libs is thread-safe]) +LIBS="$LIBS $POSTGRE_LIBS" +CXXFLAGS="$CXXFLAGS $POSTGRE_INCLUDES" +AC_RUN_IFELSE( + [ + AC_LANG_SOURCE( + [[ + #include <libpq-fe.h> + + int main() { + return !PQisthreadsafe(); + } + ]]) + ], + [ + AC_MSG_NOTICE([ok]) + ], + [ + AC_MSG_ERROR([postgre libs is not thread-safe, check your postgresql installation and /etc/ld.config*]) + ]) Код:
+AC_CONFIG_COMMANDS_PRE([ +pg_type_content="`awk '/#define .+OID/ {np2=2; np3=3; print "#define "$np2" "$np3}' $PGTYPE`" +AC_SUBST(pg_type_content) +AC_CONFIG_FILES([src/shared/Database/pg_type.h]) +]) fi +AC_MSG_RESULT($DO_POSTGRESQL) Код:
diff --git a/src/shared/Database/Makefile.am b/src/shared/Database/Makefile.am index 311ce93..dfc9f2f 100644 --- a/src/shared/Database/Makefile.am +++ b/src/shared/Database/Makefile.am @@ -55,3 +55,7 @@ libmangosdatabase_a_SOURCES = \ SqlDelayThread.h \ SqlOperations.cpp \ SqlOperations.h + +EXTRA_DIST = \ + pg_type.h + diff --git a/src/shared/Database/QueryResultPostgre.h b/src/shared/Database/QueryResultPostgre.h index 420b685..4db93fa 100644 --- a/src/shared/Database/QueryResultPostgre.h +++ b/src/shared/Database/QueryResultPostgre.h @@ -25,8 +25,8 @@ #include <postgre/libpq-fe.h> #include <postgre/pg_type.h> #else +#include "pg_type.h" #include <libpq-fe.h> -//#include <pg_type.h> #endif class QueryResultPostgre : public QueryResult diff --git a/src/shared/Database/pg_type.h.in b/src/shared/Database/pg_type.h.in new file mode 100644 index 0000000..83017e2 --- /dev/null +++ b/src/shared/Database/pg_type.h.in @@ -0,0 +1,4 @@ +#if !defined(PG_TYPE_H) +#define PG_TYPE_H +@pg_type_content@ +#endif Код:
diff --git a/src/realmd/RealmList.cpp b/src/realmd/RealmList.cpp index 1e34b05..b05b804 100644 --- a/src/realmd/RealmList.cpp +++ b/src/realmd/RealmList.cpp @@ -93,7 +93,7 @@ void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::stri realm.allowedSecurityLevel = allowedSecurityLevel; realm.populationLevel = popu; - Tokens tokens = StrSplit(builds, " "); + Tokens tokens = StrSplit(builds ? builds : "", " "); Tokens::iterator iter; for (iter = tokens.begin(); iter != tokens.end(); ++iter) Код:
diff --git a/src/shared/Database/DatabasePostgre.cpp b/src/shared/Database/DatabasePostgre.cpp index 7eb2584..5f2b4d2 100644 --- a/src/shared/Database/DatabasePostgre.cpp +++ b/src/shared/Database/DatabasePostgre.cpp @@ -95,6 +95,7 @@ bool DatabasePostgre::Initialize(const char *infoString) sLog.outError( "Could not connect to Postgre database at %s: %s", host.c_str(), PQerrorMessage(mPGconn)); PQfinish(mPGconn); + mPGconn = NULL; return false; } else |
09.09.2010, 09:45 | #4 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Мейнтейнеры, прошу обратить внимание на тему. На главной getmangos заявлена поддержка MySQL и PostgreSQL, но компиляция с поддержкой последнего под линукс невозможна. Я считаю это серьёзной недоработкой, несмотря на то, что много чаще используют MySQL.
Автор изменений я, так что если есть спорные, вызывающие сомнения моменты\куски кода - спрашивайте. Если будет необходимость подправить патч или разобраться в детали которую я пропустил я этим также займусь. Последний раз редактировалось narma; 09.09.2010 в 09:45. Причина: typo |
10.09.2010, 22:10 | #5 |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
компиляция невозможно, во многом из за pg_type.h
хидер вообще не из libpg :/ там по моему этих констант нету( может есть какой то другой способ для QueryResultPostgre::ConvertNativeType ? |
11.09.2010, 14:21 | #6 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Можно ли сделать без создания pg_type.h в проекте.
Передавать путь к нему из configure может быть...
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
11.09.2010, 18:24 | #7 | ||
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Цитата:
QueryResultPostgre::ConvertNativeType - не знаю, много где к OID привязывают http://www.postgresql.org/docs/8.4/i...C-C-TYPE-TABLE вот интересная дока, но насколько я понял это требует написания функций для psql вида: Код:
CREATE FUNCTION add_one(double precision) RETURNS double precision AS 'DIRECTORY/funcs', 'add_one_float8' LANGUAGE C STRICT; Я пробовал подключить напрямую pg_type.h, в итоге: Код:
/usr/include/postgresql-9.0/server/catalog/pg_type.h:37:1: ошибка: expected ‘)’ before ‘,’ token /usr/include/postgresql-9.0/server/catalog/pg_type.h:214:3: предупреждение: data definition has no type or storage class /usr/include/postgresql-9.0/server/catalog/pg_type.h:221:26: ошибка: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token Цитата:
Ну и pg_type.h должен быть либо в INCLUDE_PATH либо его содержимое должно быть внутри QueryResultPostgre.h ( если он больше нигде не используется - если идти в этом направлении это надо проверить ). Последний раз редактировалось narma; 11.09.2010 в 18:37. Причина: уточнение насчет pg_type.h |
||
11.09.2010, 18:35 | #8 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Залил новый патч, теперь совсем всё кошерно ( или нет ?).
1) возможность указать с помощью --with-postgresql конкретную инсталяцию postgresql ( у меня на машинке допустим 8.4 и 9.0) 2) теперь CXXFLAGS и LDFLAGS восстанавливаются в прежние значения, после проверки библиотек Postgresql и установки их значений для этого. 3) дополнительные проверки на библиотеку и заголовочный файл. 4) косметические правки. Последний раз редактировалось narma; 11.09.2010 в 18:39. Причина: typo |
11.09.2010, 18:45 | #9 | |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Цитата:
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
11.09.2010, 19:00 | #10 | |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Цитата:
Код:
/usr/include/postgresql-9.0/server/catalog/pg_type.h:37:1: ошибка: expected ‘)’ before ‘,’ token /usr/include/postgresql-9.0/server/catalog/pg_type.h:214:3: предупреждение: data definition has no type or storage class /usr/include/postgresql-9.0/server/catalog/pg_type.h:221:26: ошибка: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token |
|
11.09.2010, 19:13 | #11 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Собственно про два выхода ( которые я вижу) из ситуации я уже написал:
1) Без нового файла: *) Хардкодим OID'ы в QueryResultPostgre.h *) Вытаскиваем OID'ы и пихаем туда же. Однако QueryResultPostgre.h превратиться в QueryResultPostgre.h.in и компиляция под Windows наркывается медным тазом, или нет ? 2) С новым файлом: *) Хардкодим OID'ы в какой-нибудь новый хидер ( местоположение ещё можно поменять ) *) Вытаскиваем в какой-нибудь новый хидер ( мой патч работает так ). - Новый файл должен быть в MANGOS_INCLUDE. Плюсы если хардкодить: зависимостей меньше, хитрого кода в configure.ac меньше. Минусы, понятно, хардкод есть хардкод. Последний раз редактировалось narma; 11.09.2010 в 19:14. Причина: уточнение, line 1. |
11.09.2010, 23:20 | #12 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Теперь патч работает и на FreeBSD, проверял на 8.0-STABLE.
diff по сравнению с последним патчем: 1) Ищем pg_type.h в `pg_config --pkgincludedir` так как это более правильный способ вместо --includedir. В линуксе пути совпадают, во FreeBSD нет. 2) Заменил вручную прописанные LIBS для POSTGRES на `pg_config --libs` ( они реально нужны ? в ванильном мангосе по крайней мере есть) В FreeBSD -lnsl, который там был, нету, так как это часть glibc. 3) Заменил LDFLAGS и CXXFLAGS на LIBS и CPPFLAGS. CPPFLAGS используется для CC и CXX компиляторов ( в отличии от CXXFLAGS), а на FreeBSD используется CC для AC_CHECK_HEADER. ( теперь же флаги будут передаваться хоть для CC хоть для CXX ) 4) небольшой фикс: Показываем результат "no" для несработавшей проверки на thread-safe для PostgreSQL библиотек. Последний раз редактировалось narma; 11.09.2010 в 23:21. Причина: typo |
11.09.2010, 23:36 | #13 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Гр... вы можете засунуть путь или полное имя файла в define
#include разрешает использовать define-ы в себе
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
11.09.2010, 23:57 | #14 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Опять не могу понять о чем речь, не улавливаю ваш контекст. Какой путь ? Какого файла ? В какой #define ? Каким образом мы избавимся от необходимости создавать дополнительный файл ? Растолкуйте пожалуйста.
|
12.09.2010, 00:09 | #15 | |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Цитата:
#include PG_TYPE_H_PATH
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
12.09.2010, 00:14 | #16 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Гр.. ага
Если их подключать схватим это: ( третий раз пишу ) Код:
/usr/include/postgresql-9.0/server/catalog/pg_type.h:37:1: ошибка: expected ‘)’ before ‘,’ token /usr/include/postgresql-9.0/server/catalog/pg_type.h:214:3: предупреждение: data definition has no type or storage class /usr/include/postgresql-9.0/server/catalog/pg_type.h:221:26: ошибка: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token Последний раз редактировалось narma; 12.09.2010 в 00:15. Причина: уточнение |
12.09.2010, 00:21 | #17 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
На вскидку, кто чего придумывает на эту же тему.
драйвера питона для постгрес: pg8000: хардкодит OID'ы у себя в проекте psycopg2: И хардкодит и вытаскивает из /usr/include/postgresql* таким же способом. |
12.09.2010, 01:51 | #18 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
теперь понял... при таком геморое проще прохардкодить с коментарием...
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
12.09.2010, 05:18 | #19 |
Новичок
Регистрация: 25.08.2010
Сообщений: 24
Сказал(а) спасибо: 2
Поблагодарили 11 раз(а) в 8 сообщениях
Записей в дневнике: 2
|
Вариант с хардкодом, задефайнил только используемые OID'ы. Проверил конфигурирование в FreeBSD и Linux, компиляцию в Linux ( в FreeBSD с tbb проблемы какие-то ).
Так-же проверил используемые OID'ы в версиях PostgreSQL 7.4, 8.4, 9.0_beta_4 - везде совпадают. |
Пользователь сказал cпасибо: | Vladimir (22.11.2010) |
22.11.2010, 01:05 | #21 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
PosgreSQL часть В [10772] спасибо
Код:
+ Tokens tokens = StrSplit(builds ? builds : "", " ");
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Гайд] Компиляция под Linux | stippi | Установка MaNGOS | 8 | 01.04.2011 16:40 |
[10772] Fixed build for different PostgreSQL version at diff platforms. | newsbot | CMaNGOS Commits | 0 | 22.11.2010 01:00 |
Linux IDE | Gen1us2k | Флудильня | 7 | 15.09.2010 13:05 |
[psql] Rename deprecated ASSERT | narma | Принятые патчи | 1 | 07.09.2010 10:04 |
Автобэкапы БД [Linux] | lina | Прочая документация | 1 | 05.05.2010 06:48 |