Bug 6426 - Please rebuild with fresh swig
Summary: Please rebuild with fresh swig
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: subversion-python (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Sviatoslav Sviridov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-04-07 17:02 MSD by Vitaly A. Ostanin
Modified: 2005-08-17 00:32 MSD (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly A. Ostanin 2005-04-07 17:02:05 MSD
# ldd -r /usr/lib/libsvn_swig_py-1.so.0 2>&1 | grep undefined | wc -l
53

# rpm -qf /usr/lib/libsvn_swig_py-1.so.0
subversion-python-1.1.3-alt2

swig-1.3.24-alt2
swig-runtime-python-1.3.24-alt2

Может, добавить в subversion-python зависимость на версию swig ?
Comment 1 Sviatoslav Sviridov 2005-04-07 17:47:52 MSD
А какая версия сейчас актуальная?
И зависит ли это от версии swig?

Интересно, что undefined symbols есть только в свиговых либах... 
Comment 2 Gleb Stiblo 2005-04-07 18:06:38 MSD
[...]
> swig-1.3.24-alt2
> swig-runtime-python-1.3.24-alt2
> 
> Может, добавить в subversion-python зависимость на версию swig ?
не надо, надо избавляться от хотения swig-runtime-python
Comment 3 Gleb Stiblo 2005-04-07 18:09:03 MSD
(In reply to comment #1)
> А какая версия сейчас актуальная?
> И зависит ли это от версии swig?
> 
> Интересно, что undefined symbols есть только в свиговых либах... 
не только.

undefined symbols от того, что ни libsvn_swig_py-1, ни libswigpy не слинкованы с
libpython2.*
Comment 4 Sviatoslav Sviridov 2005-04-07 18:14:10 MSD
(In reply to comment #2)
> > Может, добавить в subversion-python зависимость на версию swig ?
> не надо, надо избавляться от хотения swig-runtime-python

А как это сделать?
И почему это надо?
Comment 5 Sviatoslav Sviridov 2005-04-07 18:27:44 MSD
(In reply to comment #3)
> (In reply to comment #1)
> > А какая версия сейчас актуальная?
> > И зависит ли это от версии swig?
> > 
> > Интересно, что undefined symbols есть только в свиговых либах... 
> не только.

Я имел ввиду libsvn_swig-*, однако оказывается, что и libswig{py,pl} тоже имеют
undefined...

> undefined symbols от того, что ни libsvn_swig_py-1, ни libswigpy не слинкованы с
> libpython2.*

щас посмотрю как там определяются флаги для линковки...
Comment 6 Gleb Stiblo 2005-04-07 18:34:48 MSD
(In reply to comment #4)
> (In reply to comment #2)
> > > Может, добавить в subversion-python зависимость на версию swig ?
> > не надо, надо избавляться от хотения swig-runtime-python
> 
> А как это сделать?
> И почему это надо?
2. начиная со swig*1.3.2счемто -- не помню точно, вроде с 1.3.22 -- была
выкинута апстримом поддержка swig-runtime-*, зачем -- они расписывали, как без
неё обходиться, тоже где-то у них пробегало.

1. Если в subversion добавили поддержку swig*1.3.24, то ничего уже делать не
придёться -- только пересобрать subversion без наличия swig-runtime-python.
Comment 7 Sviatoslav Sviridov 2005-04-07 18:39:46 MSD
(In reply to comment #2)
> [...]
> > swig-1.3.24-alt2
> > swig-runtime-python-1.3.24-alt2
> > 
> > Может, добавить в subversion-python зависимость на версию swig ?
> не надо, надо избавляться от хотения swig-runtime-python

Кстати, вот что есть
subversion:/build/ac-macros/swig.m4:

...
      dnl Newer versions of SWIG have deprecated the -c "do not
      dnl include SWIG runtime functions (used for creating multi-module
      dnl packages)" in favor of the -noruntime flag.
      if test "$SWIG_VERSION" -ge "103024"; then
        SWIG_NORUNTIME_FLAG=''
        LSWIGPL=''
        LSWIGPY=''
      else
        if test "$SWIG_VERSION" -ge "103020"; then
          SWIG_NORUNTIME_FLAG='-noruntime'
        else
          SWIG_NORUNTIME_FLAG='-c'
        fi
        LSWIGPL='-lswigpl'
        LSWIGPY='-lswigpy'
      fi
...

Из-за этого не идет линковка с libswig{py,pl}

Еще:
$ swig -noruntime
SWIG:1: Warning(120): -c, -runtime, -noruntime command line options are deprecated.
...

То есть вроде бы как и правильно, что флаг не указывается, но мне непонятно
почему для 1.3.24 не делается линковка с libswig{py,pl}?

И как в таком случае определить с какими либами надо линковаться?
Comment 8 Sviatoslav Sviridov 2005-04-07 18:41:23 MSD
(In reply to comment #6)
> ...
> 1. Если в subversion добавили поддержку swig*1.3.24, то ничего уже делать не
> придёться -- только пересобрать subversion без наличия swig-runtime-python.

Вот-вот, он и не линкуется сейчас с libswig{py,pl}
Но остается открытым вопрос как найти либы с которыми надо линковаться? Может
есть где-ниь пример?
Comment 9 Gleb Stiblo 2005-04-07 18:58:39 MSD
(In reply to comment #8)
> (In reply to comment #6)
> > ...
> > 1. Если в subversion добавили поддержку swig*1.3.24, то ничего уже делать не
> > придёться -- только пересобрать subversion без наличия swig-runtime-python.
> 
> Вот-вот, он и не линкуется сейчас с libswig{py,pl}
а их и не будет, на надо с ними линковаться.

> Но остается открытым вопрос как найти либы с которыми надо линковаться? Может
надо линковаться с svn`овскими либами и с libpython2.4

> есть где-ниь пример?
Наверное можно посмотреть на примеры в swig-doc
 
Comment 10 Gleb Stiblo 2005-04-07 18:59:32 MSD
(In reply to comment #9)
> (In reply to comment #8)
> > (In reply to comment #6)

> > Вот-вот, он и не линкуется сейчас с libswig{py,pl}
> а их и не будет, на надо с ними линковаться.
                ^^^^^^^ _не_ надо
Comment 11 Vitaly A. Ostanin 2005-04-07 19:03:55 MSD
Со сборкой subversion-python-1.1.4-alt1 unresolved стало 41.
По крайней мере, trac-admin заработал.
Comment 12 Gleb Stiblo 2005-04-07 19:06:20 MSD
(In reply to comment #11)
> Со сборкой subversion-python-1.1.4-alt1 unresolved стало 41.
> По крайней мере, trac-admin заработал.
а какие unresolved?

попробуйте слинковаться с libpython
Comment 13 Vitaly A. Ostanin 2005-04-07 19:31:11 MSD
Каким образом попробовать слинковать с libpython ?

undefined symbol: _Py_TrueStruct        (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: _Py_NoneStruct        (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyString_Type (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyLong_Type   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyFile_Type   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyExc_TypeError       (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyInt_Type    (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyType_Type   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyInt_FromLong        (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyCObject_Import      (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_Free (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PySequence_GetItem    (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_CallFunction (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyBuffer_FromMemory   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_Init (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyDict_SetItemString  (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: Py_BuildValue (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyErr_SetString       (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyErr_Occurred        (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyEval_RestoreThread  (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyOS_snprintf (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyDict_New    (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyErr_Clear   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyString_FromString   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyList_Append (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PySequence_Size       (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyList_New    (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_CallMethod   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyEval_SaveThread     (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_CallObject   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyType_IsSubtype      (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyLong_FromUnsignedLong       (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyFile_AsFile (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_SetAttrString        (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyInt_AsLong  (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyObject_Malloc       (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyString_FromFormat   (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyLong_AsLong (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyErr_SetObject       (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PySequence_Check      (/usr/lib/libsvn_swig_py-1.so.0)
undefined symbol: PyErr_NewException    (/usr/lib/libsvn_swig_py-1.so.0)
Comment 14 Sviatoslav Sviridov 2005-04-07 19:32:04 MSD
(In reply to comment #9)
> 
> > Вот-вот, он и не линкуется сейчас с libswig{py,pl}
> а их и не будет, на надо с ними линковаться.
> 
> > Но остается открытым вопрос как найти либы с которыми надо линковаться? Может
> надо линковаться с svn`овскими либами и с libpython2.4

Угу, это понятно... осталось придумать правильный способ чтоб линковаться с
libpython* или libperl*...

> > есть где-ниь пример?
> Наверное можно посмотреть на примеры в swig-doc

На первый взгляд - там этого нет (да по идее и не будет)
В примере сборки либы там просто явно задано в Makefile с чем линковаться...
По идее, здесь хотелось бы иметь что-либо a-la pkgconfig... чтоб, например,
можно было сказать swig -pyhon -libs и получить список, который можно передать
линкеру...
Comment 15 Sviatoslav Sviridov 2005-04-07 19:33:18 MSD
(In reply to comment #13)
> Каким образом попробовать слинковать с libpython ?
> 

Попробуйте во это:

--- subversion-1.1.4/build/ac-macros/swig.m4~   2005-04-07 18:23:33 +0300
+++ subversion-1.1.4/build/ac-macros/swig.m4    2005-04-07 18:24:19 +0300
@@ -118,8 +118,8 @@ AC_DEFUN(SVN_FIND_SWIG,
       dnl packages)" in favor of the -noruntime flag.
       if test "$SWIG_VERSION" -ge "103024"; then
         SWIG_NORUNTIME_FLAG=''
-        LSWIGPL=''
-        LSWIGPY=''
+        LSWIGPL='-lperl'
+        LSWIGPY='-lpython2.4'
       else
         if test "$SWIG_VERSION" -ge "103020"; then
           SWIG_NORUNTIME_FLAG='-noruntime'
Comment 16 Sviatoslav Sviridov 2005-04-07 19:52:00 MSD
(In reply to comment #15)
> (In reply to comment #13)
> > Каким образом попробовать слинковать с libpython ?
> > 
> 
> Попробуйте во это:
> ...

Это неправильно... на самом деле build/get-py-info.py, который должен возвращать
либы на запрос --libs... но не делает этого...
Кто-нить знает как запустить питон с трассировкой, типа как sh -x?
Comment 17 Sviatoslav Sviridov 2005-04-07 20:00:57 MSD
(In reply to comment #16)
> (In reply to comment #15)
> > (In reply to comment #13)
> > > Каким образом попробовать слинковать с libpython ?
> > > 
> > 
> > Попробуйте во это:
> > ...
> 
> Это неправильно... на самом деле build/get-py-info.py, который должен возвращать
> либы на запрос --libs... но не делает этого...
> Кто-нить знает как запустить питон с трассировкой, типа как sh -x?

Однако указанный патч исправил проблему...
Теперь остались еще mod_dav_svn и mod_authz_svn..
Comment 18 Vitaly A. Ostanin 2005-04-08 12:56:01 MSD
Попробуйте с таким патчем, pls.

--- get-py-info.py.orig 2004-08-10 20:35:02 +0400
+++ get-py-info.py      2005-04-08 12:53:34 +0400
@@ -43,7 +43,10 @@
   sys.exit(0)
 
 def ldshared_process(just_libs = None):
-  ldshared = sysconfig.get_config_var('LDSHARED')
+  if just_libs:
+    ldshared = sysconfig.get_config_var('BLDLIBRARY')
+  else:
+    ldshared = sysconfig.get_config_var('LDSHARED')
   ldshared_elems = string.split(ldshared, " ")
   libs_elems = []
   for i in range(len(ldshared_elems)):
Comment 19 Vitaly A. Ostanin 2005-04-08 14:06:32 MSD
(In reply to comment #18)
> Попробуйте с таким патчем, pls.
С ним тоже undefined нет.

Кстати, Юрий Седунов сообщает, что в swig.m4 (или где-то рядом) ошибка логики -
при ненахождении подходящей версии swig сборка swig-py должна отменяться, иначе:

$ grep SWIG_PY_COMPILE config.log Makefile
config.log:SWIG_PY_COMPILE=''
Makefile:SWIG_PY_COMPILE =
Makefile:COMPILE_PY_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=compile
$(SWIG_PY_COMPILE) $(CPPFLAGS) $(SWIG_INCLUDES) $(SWIG_PY_INCLUDES) -prefer-pic
-c -o $@
Comment 20 Sviatoslav Sviridov 2005-04-08 16:49:11 MSD
(In reply to comment #19)
> (In reply to comment #18)
> > Попробуйте с таким патчем, pls.
> С ним тоже undefined нет.
> 

И все же непонятно как реагировать на undefined symbols...
В upstream не считают это проблемой:

<maxb> It should work fine despite that
<maxb> Because, the things which use libsvn_swig_py will only ever be 
loaded into a binary which *already* has those symbols loaded
<maxb> so, they do not need to be linked

Вроде бы звучит логично...

В devel (http://lists.altlinux.ru/pipermail/devel/2005-April/019797.html) пока
тоже молчат...

Кто-нить может сделать какой-нить пример, использующий subversion-python или
subversion-perl чтоб проверить работоспособность?

PS mailer.py вроде не ругается при запуске, хотя реально в работе я его не проверял
Comment 21 Vitaly A. Ostanin 2005-04-11 14:57:01 MSD
У меня undefined вылезли при запуске этого скрипта:
http://projects.edgewall.com/trac/file/trunk/scripts/trac-admin
После линковки subversion с -lpython2.4 скрипт отработал нормально.

Точный вывод ошибок при запуске trac-admin без линковки -lpython2.4 сейчас
привести не могу, если это важно - чуть позже сделаю vserver с окружением на
момент ошибок.

В subversion/build/get-py-info.py налицо ошибка:
запуск с параметром --libs выдаёт пустую строку.
Comment 22 Vitaly A. Ostanin 2005-04-13 19:02:46 MSD
Более простой пример того, что происходит без линковки с -lpython2.4:
http://svn.collab.net/repos/svn/trunk/tools/examples/svnshell.py

$ python svnshell.py 
Traceback (most recent call last):
  File "svnshell.py", line 25, in ?
    from svn import fs, core, repos
  File "/usr/lib/python2.4/site-packages/svn/fs.py", line 28, in ?
    import libsvn.fs
  File "/usr/lib/python2.4/site-packages/libsvn/fs.py", line 5, in ?
    import _fs
ImportError: /usr/lib/libsvn_swig_py-1.so.0: undefined symbol: SWIG_Python_TypeQuery
Comment 23 Gleb Stiblo 2005-04-13 19:12:52 MSD
Короче говоря, линкуйте.

Да я выношу swig-runtime* в /dev/null, бо никто его кроме subversion-python не
хотел, и врядли захочет :)
Comment 24 Sviatoslav Sviridov 2005-04-13 19:15:15 MSD
(In reply to comment #22)
> Более простой пример того, что происходит без линковки с -lpython2.4:
> http://svn.collab.net/repos/svn/trunk/tools/examples/svnshell.py
> 
> $ python svnshell.py 
> Traceback (most recent call last):
>   File "svnshell.py", line 25, in ?
>     from svn import fs, core, repos
>   File "/usr/lib/python2.4/site-packages/svn/fs.py", line 28, in ?
>     import libsvn.fs
>   File "/usr/lib/python2.4/site-packages/libsvn/fs.py", line 5, in ?
>     import _fs
> ImportError: /usr/lib/libsvn_swig_py-1.so.0: undefined symbol:
SWIG_Python_TypeQuery

Это с какой сборкой? На 1.1.4-alt2 такого не проявляется:

$ ./svnshell.py /var/lib/subversion/scpm
<rev: 21 />$ ls
   REV   AUTHOR  NODE-REV-ID     SIZE         DATE NAME
----------------------------------------------------------------------------
     1      svd < 1.0.r1/61>          Nov 27 13:40 branches/
     1      svd <2.0.r1/190>          Nov 27 13:40 tags/
    21      svd <5.4.r21/644>          Apr  6 20:41 trunk/
    15      svd <4.0.r15/298>          Mar  3 22:51 vendor/

использовался /usr/share/doc/subversion-tools-1.1.4/examples/svnshell.py с
правкой на предмет s/python2/python/ в первой строчке.

Тот, который по указанному урлу, уже имеет некоторые изменения и поэтому не
запускается. Но это не касается линковки с питоном:

$ ./svnshell.py /var/lib/subversion/scpm
Traceback (most recent call last):
  File "./svnshell.py", line 367, in ?
    main()
  File "./svnshell.py", line 364, in main
    core.run_app(SVNShell, sys.argv[1])
  File "/usr/lib/python2.4/site-packages/svn/core.py", line 33, in run_app
    return apply(func, (pool,) + args, kw)
  File "./svnshell.py", line 36, in __init__
    self.fs_ptr = repos.fs(repos.open(path, pool))
AttributeError: 'module' object has no attribute 'open'
Comment 25 Sviatoslav Sviridov 2005-04-13 19:47:20 MSD
(In reply to comment #24)
> ...
> Это с какой сборкой? На 1.1.4-alt2 такого не проявляется:

Ooops, а тут я лажанулся... оказывается, alt2 я еще не заливал, ожидая, что
придется делать доп изменения... поскольку на нем вроде работает - залил в
инкаминг...

...а тем временем пытался собрать 1.2.0-rc1, но пока неуспешно....
Comment 26 Vitaly A. Ostanin 2005-04-14 15:16:40 MSD
> > ImportError: /usr/lib/libsvn_swig_py-1.so.0: undefined symbol:
> SWIG_Python_TypeQuery
> 
> Это с какой сборкой? На 1.1.4-alt2 такого не проявляется:

Это с последней из 1.1.3. Кстати, я бы советовал alt2 собирать с патчем из
комментария 18, он правильнее, чем явное указание версии питона в swig.m4.

> $ ./svnshell.py /var/lib/subversion/scpm
> <rev: 21 />$ ls
>    REV   AUTHOR  NODE-REV-ID     SIZE         DATE NAME
> ----------------------------------------------------------------------------
>      1      svd < 1.0.r1/61>          Nov 27 13:40 branches/
>      1      svd <2.0.r1/190>          Nov 27 13:40 tags/
>     21      svd <5.4.r21/644>          Apr  6 20:41 trunk/
>     15      svd <4.0.r15/298>          Mar  3 22:51 vendor/
> 
> использовался /usr/share/doc/subversion-tools-1.1.4/examples/svnshell.py с
> правкой на предмет s/python2/python/ в первой строчке.

Кстати, не делать ли эту замену при сборке?

> Тот, который по указанному урлу, уже имеет некоторые изменения и поэтому не
> запускается. Но это не касается линковки с питоном:

Да, я на это наткнулся, и некий darix: на #svn уже посоветовал более правильные
примеры для svn python api - проект rsvn.

Кстати, очень обломно было бы видеть RC версии svn в sisyphus - уж лучше в
daedalus. Система контроля версий - не та вещь, с которой можно сильно
экспериментировать :)

<skipped/>