Проблема сборки PAPyRUS под OpenBSD 6.2
-
Эх, отпишусь через неделю. Нелегка доля говнокодера. Хотя, нет. Не говнокодера. Как назвать того, кто пытается оживить древний код, при этом не зная ЯП, на котором оный написан? Некромант-самоучка?
-
Ну, я пишу немного раньше недели. Убрал все предупреждения, в основном связанные с неправильным использованием указателей и попыткой записи в
Пришлось наделать жутких костылей, вроде:char *bla-bla;
char list_c[][2][128]={ {"AddEntry", "ae"}, {"AddFont", "af"}, {"AddStyle", "as"}, {"DeleteStyle", "ds"}, {"PapyConfigure", "ppc"}, {"DocConfigure", "dc"}, {"ParaConfigure", "pc"}, {"WordConfigure", "wc"}, {"PapyQuery", "ppq"}, {"DocQuery", "dq"}, {"ParaQuery", "pq"}, {"WordQuery", "wq"}, {"NewDocument", "nd"}, {"NewParagraph", "np"}, {"NewWord", "nw"}, {"CloseDocument", "cld"}, {"InsertCharacter", "ic"}, {"InsertImage", "ii"}, {"InsertString", "is"}, {"DeleteCharacterBefore", "dcb"}, {"DeleteCharacterAfter", "dca"}, {"MoveCursorLeft", "mcl"}, {"MoveCursorRight", "mcr"}, {"MoveCursorUp", "mcu"}, {"MoveCursorDown", "mcd"}, {"MoveCursorNextWord", "mcnw"}, {"MoveCursorPreviousWord", "mcpw"}, {"MoveCursorBeginLine", "mcbl"}, {"MoveCursorEndLine", "mcel"}, {"MoveCursorXY", "mcxy"}, {"SelectRegion", "sr"}, {"SetZoom", "sz"}, {"SetKey", "sk"}, {"SetCursor", "sc"}, {"DocOutput", "do"}, {"WordOutput", "wo"}, {"RefreshScreen", "rs"}, {"Debug", "dbg"} }; <b>[bla-bla-bla]</b> /* * List of the new functions. */ Papyrus_Cmd baseCommands[] = { { list_c[0][0], list_c[0][1], AddEntry_Cmd }, { list_c[1][0], list_c[1][1], AddFont_Cmd }, { list_c[2][0], list_c[2][1], AddStyle_Cmd }, { list_c[3][0], list_c[3][1], DeleteStyle_Cmd }, { list_c[4][0], list_c[4][1], PapyrusConfigure_Cmd }, { list_c[5][0], list_c[5][1], DocumentConfigure_Cmd }, { list_c[6][0], list_c[6][1], ParagraphConfigure_Cmd }, { list_c[7][0], list_c[7][1], WordConfigure_Cmd }, { list_c[8][0], list_c[8][1], PapyrusQuery_Cmd }, { list_c[9][0], list_c[9][1], DocumentQuery_Cmd }, { list_c[10][0], list_c[10][1], ParagraphQuery_Cmd }, { list_c[11][0], list_c[11][1], WordQuery_Cmd }, { list_c[12][0], list_c[12][1], NewDocument_Cmd }, { list_c[13][0], list_c[13][1], NewParagraph_Cmd }, { list_c[14][0], list_c[14][1], NewWord_Cmd }, { list_c[15][0], list_c[15][1], CloseDocument_Cmd }, { list_c[16][0], list_c[16][1], InsertCharacter_Cmd }, { list_c[17][0], list_c[17][1], InsertImage_Cmd }, { list_c[18][0], list_c[18][1], InsertString_Cmd }, { list_c[19][0], list_c[19][1], DeleteCharacterBefore_Cmd }, { list_c[20][0], list_c[20][1], DeleteCharacterAfter_Cmd }, { list_c[21][0], list_c[21][1], MoveCursorLeft_Cmd }, { list_c[22][0], list_c[22][1], MoveCursorRight_Cmd }, { list_c[23][0], list_c[23][1], MoveCursorUp_Cmd }, { list_c[24][0], list_c[24][1], MoveCursorDown_Cmd }, { list_c[25][0], list_c[25][1], MoveCursorNextWord_Cmd }, { list_c[26][0], list_c[26][1], MoveCursorPreviousWord_Cmd }, { list_c[27][0], list_c[27][1], MoveCursorBeginLine_Cmd }, { list_c[28][0], list_c[28][1], MoveCursorEndLine_Cmd }, { list_c[30][0], list_c[30][1], SelectRegion_Cmd }, { list_c[31][0], list_c[31][1], SetZoom_Cmd }, { list_c[32][0], list_c[32][1], SetKey_Cmd }, { list_c[33][0], list_c[33][1], SetCursor_Cmd }, { list_c[34][0], list_c[34][1], DocumentOutput_Cmd }, { list_c[35][0], list_c[35][1], WordOutput_Cmd }, { list_c[36][0], list_c[36][1], RefreshScreen_Cmd }, { list_c[37][0], list_c[37][1], Debug_Cmd }, { NULL, NULL, NULL } };
вместо того, что было:/* * List of the new functions. */ Papyrus_Cmd baseCommands[] = { { "AddEntry", "ae", AddEntry_Cmd }, { "AddFont", "af", AddFont_Cmd }, { "AddStyle", "as", AddStyle_Cmd }, { "DeleteStyle", "ds", DeleteStyle_Cmd }, { "PapyConfigure", "ppc", PapyrusConfigure_Cmd }, { "DocConfigure", "dc", DocumentConfigure_Cmd }, { "ParaConfigure", "pc", ParagraphConfigure_Cmd }, { "WordConfigure", "wc", WordConfigure_Cmd }, { "PapyQuery", "ppq", PapyrusQuery_Cmd }, { "DocQuery", "dq", DocumentQuery_Cmd }, { "ParaQuery", "pq", ParagraphQuery_Cmd }, { "WordQuery", "wq", WordQuery_Cmd }, { "NewDocument", "nd", NewDocument_Cmd }, { "NewParagraph", "np", NewParagraph_Cmd }, { "NewWord", "nw", NewWord_Cmd }, { "CloseDocument", "cld", CloseDocument_Cmd }, { "InsertCharacter", "ic", InsertCharacter_Cmd }, { "InsertImage", "ii", InsertImage_Cmd }, { "InsertString", "is", InsertString_Cmd }, { "DeleteCharacterBefore", "dcb", DeleteCharacterBefore_Cmd }, { "DeleteCharacterAfter", "dca", DeleteCharacterAfter_Cmd }, { "MoveCursorLeft", "mcl", MoveCursorLeft_Cmd }, { "MoveCursorRight", "mcr", MoveCursorRight_Cmd }, { "MoveCursorUp", "mcu", MoveCursorUp_Cmd }, { "MoveCursorDown", "mcd", MoveCursorDown_Cmd }, { "MoveCursorNextWord", "mcnw", MoveCursorNextWord_Cmd }, { "MoveCursorPreviousWord", "mcpw", MoveCursorPreviousWord_Cmd }, { "MoveCursorBeginLine", "mcbl", MoveCursorBeginLine_Cmd }, { "MoveCursorEndLine", "mcel", MoveCursorEndLine_Cmd }, { "MoveCursorXY", "mcxy", MoveCursorXY_Cmd }, { "SelectRegion", "sr", SelectRegion_Cmd }, { "SetZoom", "sz", SetZoom_Cmd }, { "SetKey", "sk", SetKey_Cmd }, { "SetCursor", "sc", SetCursor_Cmd }, { "DocOutput", "do", DocumentOutput_Cmd }, { "WordOutput", "wo", WordOutput_Cmd }, { "RefreshScreen", "rs", RefreshScreen_Cmd }, { "Debug", "dbg", Debug_Cmd }, { NULL, NULL, NULL } };
-
Ну и пару мелочей вроде отсутсвующего заголовка string.h, не ясно почему вываливавшуюся не в ошибку, а в предупреждение вида "бла-бла-бла неявная инциализация функции strcpy".
Теперь предупреждений у меня осталось только 9 штук из 144, НО только это не помогло.
Оные:tcl/../kernel/shape.h:71: warning: inline function 'virtual const BOOL Shape::can_append() const' used but never defined tcl/../kernel/shape.h:72: warning: inline function 'virtual void* Shape::get_absolute_attr(Attributes*, AttrType) const' used but never defined tcl/../kernel/shape.h:85: warning: inline function 'virtual char* Shape::get_string() const' used but never defined misc/parseAFM.c:103: warning: useless storage class specifier in empty declaration /usr/local/lib/libXm.so.6.1: warning: warning: wcscat() is almost always misused, please use wcslcat() /usr/local/lib/libXm.so.6.1: warning: warning: wcscpy() is almost always misused, please use wcslcpy() /usr/local/lib/libXm.so.6.1: warning: warning: strcat() is almost always misused, please use strlcat() /usr/local/lib/libXm.so.6.1: warning: warning: strcpy() is almost always misused, please use strlcpy() /usr/local/lib/libXm.so.6.1: warning: warning: sprintf() is often misused, please use snprintf()
Ошибка в конце сборки:Configured with: OpenBSD/i386 system compiler Thread model: posix gcc version 4.2.1 20070719 /usr/lib/gcc-lib/i386-unknown-openbsd6.2/4.2.1/collect2 --eh-frame-hdr -e __start -Bdynamic -dynamic-linker /usr/libexec/ld.so -o bin/papyrus /usr/lib/crt0.o /usr/lib/crtbegin.o -L/usr/X11R6/lib -L/usr/X11R6/lib -L/usr/X11R6/lib -L/usr/X11R6/lib -L/usr/local/lib/tcl/tcl8.6 -L/usr/local/lib -L/usr/dt/lib/ -L/usr/X11R6/lib/ -L/usr/local/lib/tcl/ -L/usr/lib/gcc-lib/i386-unknown-openbsd6.2/4.2.1 -lpcap -lXm -lXmu -lXt -lSM -lICE -lXext -lXpm -lX11 -lX11 -lgcc -lc -lgcc /usr/lib/crtend.o /usr/local/lib/libXm.so.6.1: warning: warning: wcscat() is almost always misused, please use wcslcat() /usr/local/lib/libXm.so.6.1: warning: warning: wcscpy() is almost always misused, please use wcslcpy() /usr/local/lib/libXm.so.6.1: warning: warning: strcat() is almost always misused, please use strlcat() /usr/local/lib/libXm.so.6.1: warning: warning: strcpy() is almost always misused, please use strlcpy() /usr/local/lib/libXm.so.6.1: warning: warning: sprintf() is often misused, please use snprintf() /usr/lib/crt0.o: In function `_start': (.text+0x52): undefined reference to `main' collect2: ld returned 1 exit status *** Error 1 in /home/Sataja/Downloads/Papyrus1.1.1 (Makefile:152 'bin/papyrus') $ exit Script done on Mon Oct 9 06:02:41 2023
-
/usr/local/lib/libXm.so.6.1: warning: warning: wcscat() is almost always misused, please use wcslcat()
/usr/local/lib/libXm.so.6.1: warning: warning: wcscpy() is almost always misused, please use wcslcpy()
/usr/local/lib/libXm.so.6.1: warning: warning: strcat() is almost always misused, please use strlcat()
/usr/local/lib/libXm.so.6.1: warning: warning: strcpy() is almost always misused, please use strlcpy()
/usr/local/lib/libXm.so.6.1: warning: warning: sprintf() is often misused, please use snprintf()
Просит замены, wcscat() на wcslcat() и т.д.
И ещё где находится _start?
Может ещё разраб своими именами переменных типа "bla-bla-bla" весь код проставил и теперь непонятно что где.
Про жуткие костыли, это ещё не жуть, у меня в Python такие листы списков были в трёх функциях, и в каждом списке куча переменных была(где-то 5шт.). -
olegus:/usr/local/lib/libXm.so.6.1: warning: warning: wcscat() is almost always misused, please use wcslcat()
/usr/local/lib/libXm.so.6.1: warning: warning: wcscpy() is almost always misused, please use wcslcpy()
/usr/local/lib/libXm.so.6.1: warning: warning: strcat() is almost always misused, please use strlcat()
/usr/local/lib/libXm.so.6.1: warning: warning: strcpy() is almost always misused, please use strlcpy()
/usr/local/lib/libXm.so.6.1: warning: warning: sprintf() is often misused, please use snprintf()
Просит замены, wcscat() на wcslcat() и т.д.
Это я понял. Только вот я даже grep'ом искал - нету нигде в коде ни wcscat, ни wcslcat - скорее, всего, это в самом Motif'е проблема, но отражаться то не должно, другие же основанные на Motif приложения работают, ровно, как и сама CDE. Не знаю, насколько это реалистично.
_start тоже найти не могу. Подозреваю, а не может ли быть, что он просто не в состоянии слинковать функцию main()? Но на то ведь должна же быть причина? Может, проблема вwarning: inline function 'virtual const BOOL Shape::can_append() const' used but never defined
и в:warning: useless storage class specifier in empty declaration
Типа, класс имеет пустую инициализацию? Но как? Либо стандарт изменился настолько сильно? Я ничего не понимаю. Не хватает знаний.
Вообще, меня все больше терзают смутные сомнения, когда я вижу конструкции типа:if(...) if() else
вместо
что это все-таки студенческий проект француза, а не приложение вроде того-же GNU Oleo или GNUmeric.if(/*bla-bla*/){ if(/*la-la*/){ } else{ /*some code*/ } }
Но все равно, буду благодарен за помощь. И, кстати, спасибо за оную. -
Кстати, у Вас архив открылся?
-
Понятно. Я чего только не делал. И extern "C"{} одевал на функцию main и снимал. И пытался без флага -DHAVE_GUI откомпилировать, на что получил кучу ошибок ввиде не найденной библиотеки Xm и забил болт на эту идею, сочтя ее дуратской, и по англоязычным форумам лазил - все бестолку, как писал "неопределленная ссылка на main", так и пишет. Мда.
-
Даже думал, может символ каой-то в
int main(int argc, char*argv[])
не такой стоит, ан нет.