bug-ncurses
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Compiling ncurses-6.1 on OpenBSD


From: Thomas Dickey
Subject: Re: Compiling ncurses-6.1 on OpenBSD
Date: Sat, 10 Aug 2019 20:29:53 -0400
User-agent: NeoMutt/20170113 (1.7.2)

On Mon, Jul 22, 2019 at 10:21:28AM +0900, Robert Smith wrote:
> Dear Thomas, here is my build script for 5.9, when I change the source file 
> to 6.1 all it does it duplicate this 5.6 file to a 6.1 file, and I have to 
> manually add any tweaks if necessary.
> 
> root@h1up:/usr/src/build_system_v2/build_scripts# cat ncurses-5.9_ug
> echo Compiling and Installing ncurses-5.9

I revisited this, and can see half of the problem, which offers a different
workaround.  Comparing the specs files for the compiler in 6.2 and 6.5,
I see that someone added a fallback for -L/usr/lib, apparently to compensate
for some other change.

I'm looking at this file:
        /usr/lib/gcc-lib/amd64-unknown-openbsd6.5/4.2.1/specs

which has a line with this information:
        %{!static:--eh-frame-hdr} %{!shared:%{!nostdlib:%{!r*:%{!e*:-e 
__start}}}}    %{shared:-shared} %{R*}    %{static:-Bstatic}    
%{!static:-Bdynamic}    %{rdynamic:-export-dynamic}    %{assert*}    
%{!dynamic-linker:-dynamic-linker /usr/libexec/ld.so}    %{!nostdlib:-L/usr/lib}

That
        %{!nostdlib:-L/usr/lib}

is the added text.  Using ktrace, I could see that the arguments passed
to collect2 (part of the compiler) put a "-L/usr/lib" before any of the
command-line arguments:

        [0] = "/usr/lib/gcc-lib/amd64-unknown-openbsd6.5/4.2.1/collect2"
        [1] = "--eh-frame-hdr"
        [2] = "-e"
        [3] = "__start"
        [4] = "-Bdynamic"
        [5] = "-dynamic-linker"
        [6] = "/usr/libexec/ld.so"
        [7] = "-L/usr/lib"
        [8] = "-o"
        [9] = "clear"
        [10] = "/usr/lib/crt0.o"
        [11] = "/usr/lib/crtbegin.o"
        [12] = "-L../lib"
        [13] = "-L/usr/lib/gcc-lib/amd64-unknown-openbsd6.5/4.2.1"
        [14] = "../obj_s/clear.o"
        [15] = "../obj_s/clear_cmd.o"
        [16] = "../obj_s/tty_settings.o"
        [17] = "-lncurses"
        [18] = "-lgcc"
        [19] = "-lc"
        [20] = "-lgcc"
        [21] = "/usr/lib/crtend.o"

So the loader gets libncurses.so immediately without bothering to pay
any attention to its parameters.

Just reverting that change doesn't work (won't link), so I can see it's
just half the story.  But it's enough to see that it probably wasn't
intended behavior.

According to

        https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html

you could make a custom "specs" file with a -L../lib before the -L/usr/lib,
using the "-specs=" flag and pass that in your $CFLAGS 

(In a quick check, that works for me).

-- 
Thomas E. Dickey <address@hidden>
https://invisible-island.net
ftp://ftp.invisible-island.net

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]