Проблема сборки PAPyRUS под OpenBSD 6.2
-
После исправления предыдущего исправления:
Breakpoint 5, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:184 184 s->set_attr(STYLE_LEFT_MARGIN, (void *)j); (gdb) c Continuing. ....set_attr: start Breakpoint 6, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:185 185 s->set_attr(STYLE_RIGHT_MARGIN, (void *)j); (gdb) c Continuing. ....set_attr: start Breakpoint 7, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:186 186 printf("........add_style: 0.10\n"); (gdb) c Continuing. ........add_style: 0.10 Breakpoint 8, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:187 187 s->set_attr(STYLE_ALIGNMENT, (void *)STYLE_ALIGN_LEFT); (gdb) c Continuing. ....set_attr: start Breakpoint 9, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:188 188 s->set_attr(STYLE_FLINE_MARGIN, (void *)j); (gdb) c Continuing. ....set_attr: start Breakpoint 10, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:189 189 printf("........add_style: 0.11\n"); (gdb) c Continuing. ........add_style: 0.11 Breakpoint 11, StyleManager::add_style (this=0x8280113c, n=0x84981428 "Titre1", b=0x0) at kernel/StyleManager/styleManager.cc:195 195 if( _list != NULL) (gdb) c Continuing. ....>AddStyle..0.14 ....>AddStyle..0.15 ....set_attr: start ....>AddStyle..0.16 ....set_attr: start ....set_attr: start ....set_attr: start 0x4 4 ....set_attr: start ....set_attr: start ....>AddStyle..0.17 ....>AddStyle..0.18 ....>AddStyle..0.19 ....>AddStyle..0.20 TCL:Load_Default_Styles..Add_Style..0.1 ....>AddStyle..started ....>AddStyle..variables..init..done ....>AddStyle..variables..load.done ....>AddStyle..for..cycle..starting ....>AddStyle..for[1]={ ....>AddStyle..for[3]={ ........f-font ....>AddStyle..for[5]={ ....>AddStyle..for..cycle..done ....>AddStyle..0.0 ....>AddStyle..0.1 ..........query_style: 0.0 ..........query_style: 0.1 ..........query_style: 0.2 ..........query_style: 0.3 STYLE_NAME >Titre1 Titre1 >4 ..........query_style: 0.5 ....>AddStyle..0.2 ....>AddStyle..0.5 ....>AddStyle..0.6 ....>AddStyle..0.7 ....>AddStyle..0.7.1 ....>AddStyle..0.8 ....>GetFont..0.1 ....>GetFont..0.2 ....>GetFont..0.3 ....>GetFont..0.6 ....>GetFont..0.7 ....>GetFont..0.8 ....>GetFont..0.9 ....>GetFont..0.13 ....>GetFont..0.14 ....>AddStyle..0.9 ....>AddStyle..0.10 ....>AddStyle..0.11 0 AddStyle ....>AddStyle..0.12.0 ....>AddStyle=[Titre2]..0.13 ........add_style: 0.1 ........add_style: 0.1.0 ..........query_style: 0.0 ..........query_style: 0.1 ..........query_style: 0.2 ..........query_style: 0.3 STYLE_NAME >Titre1 Titre1 >4 ..........query_style: 0.4 ..........query_style: 0.3 STYLE_NAME >Normal Normal >4 ..........query_style: 0.4 ..........query_style: 0.5 ........add_style: 0.1.1 ........add_style: 0.3 ....set_attr: start ........add_style: 0.4 Breakpoint 12, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:161 161 printf("........add_style: 0.5\n"); (gdb) c Continuing. ........add_style: 0.5 Breakpoint 13, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:162 162 s->set_attr(STYLE_TOP_MARGIN, (void *)b->get_attr(STYLE_TOP_MARGIN) ); (gdb) c Continuing. ....set_attr: start Breakpoint 14, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:163 163 s->set_attr(STYLE_BOTTOM_MARGIN, (void *)b->get_attr(STYLE_BOTTOM_MARGIN) ); (gdb) c Continuing. ....set_attr: start 0x4 4 Breakpoint 15, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:164 164 s->set_attr(STYLE_LEFT_MARGIN, (void *)b->get_attr(STYLE_LEFT_MARGIN) ); (gdb) c Continuing. ....set_attr: start Breakpoint 16, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:165 165 s->set_attr(STYLE_RIGHT_MARGIN, (void *)b->get_attr(STYLE_RIGHT_MARGIN) ); (gdb) c Continuing. ....set_attr: start Breakpoint 17, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:166 166 printf("........add_style: 0.6\n"); (gdb) c Continuing. ........add_style: 0.6 Breakpoint 18, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:167 167 s->set_attr(STYLE_FONT, (void *)b->get_attr(STYLE_FONT)); (gdb) c Continuing. ....set_attr: start Breakpoint 19, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:168 168 s->set_attr(STYLE_ALIGNMENT, (void *)b->get_attr(STYLE_ALIGNMENT)); (gdb) c Continuing. ....set_attr: start Breakpoint 20, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:169 169 s->set_attr(STYLE_FLINE_MARGIN, (void *)b->get_attr(STYLE_FLINE_MARGIN)); (gdb) c Continuing. ....set_attr: start Breakpoint 21, StyleManager::add_style (this=0x8280113c, n=0x84981438 "Titre2", b=0x82a72000) at kernel/StyleManager/styleManager.cc:170 170 s->set_attr(STYLE_TAG, (void *)b->get_attr(STYLE_TAG)); (gdb) c Continuing. ....set_attr: start ....set_attr[tag]: started ....set_attr[tag]: started! Program received signal SIGSEGV, Segmentation fault. 0x15b5eca4 in StyleItem::set_attr (this=0x82a72d00, t=STYLE_TAG, value=0x0) at kernel/StyleManager/styleItem.cc:222 222 _tag = *static_cast<int*>(value); (gdb) c Continuing. Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists.
-
Словом, опытным путем удалось выяснить, что стили Normal и Titre загружаются нормально, а вот дальше - вопросы. Кстати, довольно странно, ведь если один стиль загрузился, а другой - нет, значит ошибка не в коде C, а в TCL'ном конфиге, но там вроде как и ломаться то нечему. Если только он никак не может унаследовать стиль Titre2 от стиля Titre1?
Но при замене стилей Titre2 и 1 он валиться гораздо раньше:Breakpoint 1, StyleManager::add_style (this=0x80c57b3c, n=0x7641fb68 "Normal", b=0x0) at kernel/StyleManager/styleManager.cc:181 181 printf("........add_style: 0.9\n"); (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x14502841 in StyleManager::add_style (this=0x80c57b3c, n=0x7641fb68 "Normal", b=0x0) at kernel/StyleManager/styleManager.cc:181 181 printf("........add_style: 0.9\n"); (gdb) c Continuing. c
Что было [./lib/scripts/papyrus-menus.tcl]:AddStyle -name "Normal" -font $normal_font -align "left" -margins {0 0 0 0} -fline 0.5c puts "TCL:Load_Default_Styles..Add_Style..0.0\n" AddStyle -name "Titre1" -font $title1_font -align "left" -margins {12p 3p 0 0} puts "TCL:Load_Default_Styles..Add_Style..0.1\n" AddStyle -name "Titre2" -font $title2_font -base "Titre1" puts "TCL:Load_Default_Styles..Add_Style..0.2\n" AddStyle -name "Titre3" -font $title3_font -base "Titre1" puts "TCL:Load_Default_Styles..Add_Style..0.3\n" AddStyle -name "Listing" -font $listing_font -base "Normal" -fline 0 -next "Listing"
На что было заменено:AddStyle -name "Normal" -font $normal_font -align "left" -margins {0 0 0 0} -fline 0.5c puts "TCL:Load_Default_Styles..Add_Style..0.0\n" AddStyle -name "Titre1" -font $title1_font -align "left" -margins {12p 3p 0 0} puts "TCL:Load_Default_Styles..Add_Style..0.1\n" AddStyle -name "Titre2" -font $title2_font -align "left" -margins {12p 3p 0 0} puts "TCL:Load_Default_Styles..Add_Style..0.2\n" AddStyle -name "Titre3" -font $title3_font -align "left" -margins {12p 3p 0 0} puts "TCL:Load_Default_Styles..Add_Style..0.3\n"
-
Да, я чертовски криворук: у меня вылетел отладчик с Segmentation fault (core dumped) :
Breakpoint 2, StyleItem::get_attr (this=0x85edbbc0, t=STYLE_NEXT_STYLE) at kernel/StyleManager/styleItem.cc:143 143 return (void *)((_nstyle==NULL) ? "Normal" : _nstyle); (gdb) print _tag ^[[A^[[BSegmentation fault (core dumped)
Однако. -
В сис.требованиях в READMY написано the Tcl 7.6 library (at least 7.5).
У меня - tcl8.6 [Я, кстати, об этом писал в самом начале, что пришлось часть функций заменять и часть функций заменять на новые, может ту и был косяк.]. Скорее всего, придется заново брать его исходники и вносить правки, на сей раз более вдумчиво. -
Сделать так, чтобы отладчик вылетел с Segmention fault - это реально сильно)
-
Спасибо за помощь.
-
Словом, мне не удалось запустить и те исходники, что были прежде, до версии 1.1.1, то есть вот эти: http://www.ibiblio.org/pub/Linux/apps/wp/papyrus/papyrus-src.tar.gz(скомпилить то вышло, исправив часть старых объявлений уже несуществующих функций на новые). Разница между ними в том, что они чуть-чуть проще, и там не файла env.c и env.h, и нету взятия переменной из окружения, то есть, TCL-интерпритатор берет файлы скриптов из захардкоженого пути и нету возможности объявить переменную окружения PAPYRUS_DIR, ну, он ее использовтаь не будет, вернее. А, ну и еще, PAPyRUS не вылетает при отсутствии оных, не вываливается с SegFault'ом, а пишет о том, что не смог их найти.
И теперь у меня вылетает не там, где обычно, а в принципе то отказывается запускаться функция, создающая интерпритатор TCL [это если ставить брейки в tclMain.c]:Program received signal SIGSEGV, Segmentation fault. 0x1b3ae162 in My_Tcl_Main (argc=2089239552, argv=0x85900000) at tcl/tclMain.c:77 77 theInterp = Tcl_CreateInterp(); (gdb) c Continuing. Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists.
Либо вылетает XtWidgetToApplicationContext, это если просто запускать без брейков в gdb:Starting program: /home/Sataja/src_/Papyrus/bin/papyrus Warning: Missing charsets in String to FontSet conversion Warning: Missing charsets in String to FontSet conversion Program received signal SIGSEGV, Segmentation fault. 0x00e40ac6 in XtWidgetToApplicationContext () from /usr/X11R6/lib/libXt.so.11.0 Current language: auto; currently minimal (gdb) q The program is running. Exit anyway? (y or n) y
Странно. Надо проверить будет на старом Linux, или Unix. Я вот чего думаю, может, OpenBSD как-то валит эту прогу? Хотя не, это - бред. Может, просто она писалась под Linux, и тестировалась на нем же, хотя и заявлял автор:Platform: Linux (or any UNIX with X11/Motif 2.0 library)
, и поэтому ее тяжело заставить работать под опенком?