magiblot / tvision

A modern port of Turbo Vision 2.0, the classical framework for text-based user interfaces. Now cross-platform and with Unicode support.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Library `tinfow` required in Linking

AtjonTV opened this issue · comments

I was looking around to find a TUI library for C++, and I ended up here. I was trying this fork of tvision out yesterday and I noticed that all applications would segfault after compilation.

After debugging I found out that I need to link tinfow after ncursesw for it to work.

So with

if (TV_PLATF EQUAL TV_PLATF_UNIX)
    find_library(NCURSESW ncursesw REQUIRED)
    if (NCURSESW)
-        list(APPEND LIBS ${NCURSESW})
+        list(APPEND LIBS ${NCURSESW} tinfow)
        target_compile_definitions(tvision PRIVATE HAVE_NCURSES)
    endif()
    # Optional dependencies
    find_library(GPM gpm)
    if (GPM)
        list(APPEND LIBS ${GPM})
        target_compile_definitions(tvision PRIVATE HAVE_GPM)
    endif()
endif()

(This was also for the GPL fork of tvision, they have the same issue)

I am on Gentoo Linux with ncurses 6.2-r1 and gcc 9.3.0.

I would suggest checking if tinfow is available and linking it when it and ncursesw do.

Please note that tinfow is required. It will NOT work with tinfo!

Info for Gentoo Uses: tinfo and tinfow are installed when the tinfo use flag is set on ncruses.

Hi Atjon, thanks for finding out!

From what I can see, in many Linux systems there is no tinfow, just tinfo. So tinfow should be only linked when available.

Can you check if the following works for you?

if (TV_PLATF EQUAL TV_PLATF_UNIX)
    find_library(NCURSESW ncursesw REQUIRED)
    if (NCURSESW)
        list(APPEND LIBS ${NCURSESW})
        target_compile_definitions(tvision PRIVATE HAVE_NCURSES)
+       find_library(TINFOW tinfow)
+       if (TINFOW)
+           list(APPEND LIBS ${TINFOW})
+       endif()
    endif()
    # Optional dependencies
    find_library(GPM gpm)
    if (GPM)
        list(APPEND LIBS ${GPM})
        target_compile_definitions(tvision PRIVATE HAVE_GPM)
    endif()
endif()

Cheers.

Alternatively, just upgrade to the latest commit and try again.

Jap, its working. Thanks!