bug-ncurses
[Top][All Lists]
Advanced

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

Re: How do I resolve ncurses build error in source file generated by MKl


From: Thomas Dickey
Subject: Re: How do I resolve ncurses build error in source file generated by MKlib_gen.sh
Date: Sat, 31 Aug 2024 18:54:44 -0400

On Fri, Aug 30, 2024 at 10:51:45AM +0000, Peter Groves wrote:
> HI Thomas
> 
> Thank you so much for your prompt response. Much appreciated.
> 
> I should just mention that my build is on a VMWare Workstation 16 Player. The 
> host version of awk is GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0).
> I've included three logfiles, 
> - the first showing just the ncurses 5.3 package build error i.e. with 
> "--disable-client" set in bluez-5.65.spec 
> - the second with "--disable-client" removed, such that the logfile will also 
> show the linker error for the bluez package build. 
> - the third with ncurses package 6.5 (using 5.3 spec file to begin with) - 
> for some reason the "--with-build-cc=gcc" setting that worked for 5.3 doesn't 
> seem to work in this instance. Looking at 
> https://invisible-island.net/ncurses/ncurses.faq.html#where_patches, it 
> doesn't seem as 6.5 requires any patches.
> 
>       checking for native build C compiler... gcc
>       checking for native build C preprocessor... ${BUILD_CC} -E
>       checking for native build C flags... 
>       checking for native build C preprocessor-flags... 
>       checking for native build linker-flags... 
>       checking for native build linker-libraries... 
>       checking if the build-compiler "gcc" works... no
>       configure: error: Cross-build requires two compilers.
>       Use --with-build-cc to specify the native compiler.
>       error: Bad exit status from 
> /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/rpm-tmp.95026 (%build)

something is missing in your build log - this chunk in my build:

make[1]: Leaving directory '/tmp/ncurses-5.3/include'
cd ncurses && make 
DESTDIR="/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/ncurses" all
/tmp/ncurses-5.3/ncurses
make[1]: Entering directory '/tmp/ncurses-5.3/ncurses'
sh ./base/MKlib_gen.sh "gcc -E -DHAVE_CONFIG_H -I../ncurses -I.  -DNDEBUG 
-D_GNU_SOURCE -I. -I../include" "mawk" generated <../include/curses.h | \
        fgrep undef >../include/nomacros.h
mawk -f ./tinfo/MKnames.awk ./../include/Caps
cat namehdr boolnames boolfnames numnames numfnames strnames strfnames nameftr 
>names.c
cat namehdr boolcodes numcodes strcodes codeftr >codes.c
rm -f namehdr nameftr codeftr boolnames boolfnames boolcodes numnames numfnames 
numcodes strnames strfnames strcodes
gcc -o make_hash -DHAVE_CONFIG_H -I../ncurses -I. -O2  -DHAVE_CONFIG_H 
-I../ncurses -I.  -DNDEBUG -D_GNU_SOURCE -I. -I../include -DMAIN_PROGRAM 
./tinfo/comp_hash.c  
sh ./tinfo/MKcaptab.awk mawk ./../include/Caps > comp_captab.c
sh ./tty/MKexpanded.sh "gcc -E" -DHAVE_CONFIG_H -I../ncurses -I.  -DNDEBUG 
-D_GNU_SOURCE -I. -I../include > expanded.c
sh ./tinfo/MKfallback.sh /usr/share/terminfo ../misc/terminfo.src  >fallback.c
gcc -o make_keys -DHAVE_CONFIG_H -I../ncurses -I. -O2  -DHAVE_CONFIG_H 
-I../ncurses -I.  -DNDEBUG -D_GNU_SOURCE -I. -I../include ./tinfo/make_keys.c  
AWK=mawk sh ./tinfo/MKkeys_list.sh ../include/Caps | sort >keys.list
./make_keys keys.list > init_keytry.h
sh ./base/MKlib_gen.sh "gcc -E -DHAVE_CONFIG_H -I../ncurses -I.  -DNDEBUG 
-D_GNU_SOURCE -I. -I../include" "mawk" generated <../include/curses.h >lib_gen.c
mawk -f ./base/MKkeyname.awk keys.list > lib_keyname.c
sh ./base/MKlib_gen.sh "gcc -E -DHAVE_CONFIG_H -I../ncurses -I.  -DNDEBUG 
-D_GNU_SOURCE -I. -I../include" "mawk" implemented <../include/curses.h 
>link_test.c
echo | mawk -f ./base/MKunctrl.awk >unctrl.c

Presumably your build-tree is clean (if not, that's a problem), or
the build is using parallel make (but I don't see a "make -j4", etc).

> 
> Package extraction is not shown, as this would have occurred in earlier logs. 
> I hope this will assist with regard to the ncurses build error.
> Yes, the ncurses package is very old and would prefer to use a later version
> of ncurses if I had more confidence in generating an appropriate spec file. 
> 
> Kind Regards.
> Peter
> 
> 
> -----Original Message-----
> From: Thomas Dickey <dickey@his.com> 
> Sent: 30 August 2024 01:31
> To: Peter Groves <pgroves@miurasystems.com>
> Cc: bug-ncurses@gnu.org
> Subject: Re: How do I resolve ncurses build error in source file generated by 
> MKlib_gen.sh
> 
> On Thu, Aug 29, 2024 at 12:36:44PM +0000, Peter Groves wrote:
> > Hi
> > 
> > Stack Overflow issue "How do I resolve ncurses build error in source file 
> > generated by 
> > MKlib_gen.sh<https://stackoverflow.com/staging-ground/78924563>" refers.
> > 
> > Thank you for your comment in directing me to your bug reporting portal - 
> > please pardon my hesitation in terms of not having used this option. I 
> > thought it might have seemed inappropriate as I believe the problem I am 
> > facing is probably of my own making rather than a bug associated with the 
> > ncurses software itself.
> > Following your recommendation, I have therefore outlined the issue 
> > below, by including additional info which may be useful.
> > 
> > Problem description
> > 
> > I have been tasked with upgrading to bluez-5.65.tar.gz as part of a 
> > linux development build cross-compiled for a target 
> > arm-none-linux-gnueabi processor.  The build system uses the 
> > opensource Freescale GNU/Linux Target Image Builder (LTIB) tool.  The 
> > build was simplified initially by dropping 'readline' with the 
> > --disable-client option in the bluez spec file however this comes at a cost 
> > because 'bluetoothctl' is consequently also excluded.
> > Reconfiguring to include 'readline' leads to dependencies on other 
> > packages and in particular a number of undefined references in the 
> > package bluez build (see attached), despite the readline package building 
> > successfully.
> > 
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `tputs'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `tgoto'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `tgetflag'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `UP'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `tgetent'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `tgetnum'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `PC'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `tgetstr'
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rootfs/usr/lib//libreadline.so:
> >  undefined reference to `BC'
> > collect2: error: ld returned 1 exit status
> > make[1]: *** [Makefile:5401: client/bluetoothctl] Error 1
> > make[1]: *** Waiting for unfinished jobs....
> > 
> > Some investigation revealed that libtinfo installed as part of ncurses 
> > could resolve this.  A LTIB sample ncurses spec file is provided with 
> > reference to a very early version (see attached), namely, 
> > ncurses-5.3.tar.gz.  This was downloaded from the ncurses website 
> > https://invisible-island.net/ncurses/ncurses.faq.html#other_versions, 
> > along with the associated path file patch-5.3-5.4.sh.gz located here 
> > https://invisible-island.net/ncurses/ncurses.faq.html#where_patches.  
> > I was able to apply the patches successfully using the example 
> > provided on the website as a reference.  It would doubtless be prudent 
> > to consider using a later version of ncurses except for the fact that 
> > I'm not very confident of deriving a corresponding spec file.
> 
> ncurses 5.3 is more than 20 years old.
> 
> Actually in a quick check, I can compile it on this (Debian/oldstable) 
> machine.  Some versions of gcc won't do that -- but that would be reflected 
> in other parts of the build.
>  
> > For the moment I have disabled PKG_LIBTERMCAP, though may need to 
> > revert this setting at some stage.
> 
> The spec file (better, a pointer to where it can be inspected) would help to 
> see if that's needed.
>  
> > config PKG_NCURSES
> >     #select PKG_LIBTERMCAP
> >     bool "ncurses"
> >     help
> >       The curses library routines are a terminal-independent method of
> >       updating character screens with reasonable optimization. The ncurses
> >       (new curses) library is a freely distributable replacement for the
> >       discontinued 4.4BSD classic curses library.
> > 
> > The build for ncurses initially generated the following error, which I 
> > resolved by setting "--with-build-cc=gcc" in the ncurses spec file, to 
> > ensure that the 'make_keys' is compiled using the host compiler rather 
> > than being cross-compiled for the target.  A similar issue was raised here:
> > https://lists.gnu.org/archive/html/bug-ncurses/2002-10/msg00091.html
> > 
> > gcc -o make_hash -DHAVE_CONFIG_H -I../ncurses -I. -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 
> > -DMAIN_PROGRAM ./tinfo/comp_hash.c sh ./tinfo/MKcaptab.awk mawk 
> > ./../include/Caps > comp_captab.c
> > ./tinfo/MKcaptab.awk: line 20: ./make_hash: cannot execute binary 
> > file: Exec format error
> > ./tinfo/MKcaptab.awk: line 21: ./make_hash: cannot execute binary 
> > file: Exec format error sh ./tty/MKexpanded.sh "gcc -E" 
> > -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE 
> > -DNDEBUG > expanded.c sh ./tinfo/MKfallback.sh /usr/share/terminfo 
> > ../misc/terminfo.src  >fallback.c gcc -o make_keys -DHAVE_CONFIG_H 
> > -I../ncurses -I. -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 ./tinfo/make_keys.c AWK=mawk sh 
> > ./tinfo/MKkeys_list.sh ../include/Caps | sort >keys.list ./make_keys 
> > keys.list > init_keytry.h
> > /bin/sh: ./make_keys: cannot execute binary file: Exec format error
> > make[1]: *** [Makefile:196: init_keytry.h] Error 126
> > make[1]: Leaving directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/ncurses'
> > make: *** [Makefile:96: all] Error 2
> > error: Bad exit status from 
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/rpm-tmp.65852 
> > (%build)
> > 
> > The build for ncurses generates the following error (see attached) in 
> > the source file ../ncurses/comp_captab.c, which is in fact generated 
> > by the ncurses script MKlib_gen.sh.
> 
> no - ncurses/tinfo/MKcaptab.sh - which uses awk.
>  
> > + make -j1 'HOSTCC=ccache /usr/bin/gcc -B/usr/bin/'
> > cd man && make 
> > DESTDIR="/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/ncurs
> > es" all
> > make[1]: Entering directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/man'
> > sh ./MKterminfo.sh ./terminfo.head ./../include/Caps ./terminfo.tail 
> > >terminfo.5
> > make[1]: Leaving directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/man'
> > cd include && make 
> > DESTDIR="/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/ncurs
> > es" all
> > make[1]: Entering directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/include'
> > cat curses.head >curses.h
> > AWK=mawk sh ./MKkey_defs.sh ./Caps >>curses.h sh -c 'if test "chtype" 
> > = "cchar_t" ; then cat ./curses.wide >>curses.h ; fi'
> > cat ./curses.tail >>curses.h
> > mawk -f MKterm.h.awk ./Caps > term.h
> > sh ./edit_cfg.sh ../include/ncurses_cfg.h term.h
> > ** edit: HAVE_TCGETATTR 1
> > ** edit: HAVE_TERMIOS_H 1
> > ** edit: HAVE_TERMIO_H 1
> > ** edit: BROKEN_LINKER 0
> > make[1]: Leaving directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/include'
> > cd ncurses && make 
> > DESTDIR="/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/ncurs
> > es" all
> > make[1]: Entering directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/ncurses'
> > sh ./base/MKlib_gen.sh "gcc -E -DHAVE_CONFIG_H -I../ncurses -I. -I. 
> > -I../include  -D_GNU_SOURCE -DNDEBUG" "mawk" generated <../include/curses.h 
> > | \
> >     fgrep undef >../include/nomacros.h sh ./base/MKlib_gen.sh "gcc -E 
> > -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE 
> > -DNDEBUG" "mawk" generated <../include/curses.h >lib_gen.c sh 
> > ./base/MKlib_gen.sh "gcc -E -DHAVE_CONFIG_H -I../ncurses -I. -I. 
> > -I../include  -D_GNU_SOURCE -DNDEBUG" "mawk" implemented 
> > <../include/curses.h >link_test.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./tty/hashmap.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_beep.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_color.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_endwin.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_flash.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/lib_gen.c cd ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses 
> > -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_getstr.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_mouse.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./tty/lib_mvcur.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_newterm.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_restart.c cd ../obj_s;  gcc -DHAVE_CONFIG_H 
> > -I../ncurses -I. -I. -I../include  -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c 
> > ../ncurses/./base/lib_screen.c
> > ../ncurses/./base/lib_screen.c: In function 'getwin':
> > ../ncurses/./base/lib_screen.c:48:5: warning: ignoring return value of 
> > 'fread', declared with attribute warn_unused_result [-Wunused-result]
> >      (void) fread(&tmp, sizeof(WINDOW), 1, filep);
> >      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > ../ncurses/./base/lib_screen.c:95:6: warning: ignoring return value of 
> > 'fread', declared with attribute warn_unused_result [-Wunused-result]
> >       (void) fread(nwin->_line[n].text,
> >       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >      sizeof(NCURSES_CH_T),
> >      ~~~~~~~~~~~~~~~~~~~~~
> >      (size_t) (nwin->_maxx + 1),
> >      ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >      filep);
> >      ~~~~~~
> > cd ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./base/lib_set_term.c 
> > cd ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./base/lib_slk.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./base/lib_slkrefr.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./tty/lib_vidattr.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./tty/tty_update.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./base/lib_dft_fgbg.c 
> > cd ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./tinfo/lib_print.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./base/resizeterm.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./base/wresize.c cd 
> > ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./tinfo/alloc_entry.c 
> > cd ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/./tinfo/alloc_ttype.c 
> > cd ../obj_s;  gcc -DHAVE_CONFIG_H -I../ncurses -I. -I. -I../include  
> > -D_GNU_SOURCE -DNDEBUG -O2 -fPIC -c ../ncurses/comp_captab.c
> > ../ncurses/comp_captab.c: In function '_nc_get_table':
> > ../ncurses/comp_captab.c:74:19: error: '_nc_cap_table' undeclared (first 
> > use in this function)
> >   return termcap ? _nc_cap_table: _nc_info_table ;
> >                    ^~~~~~~~~~~~~
> > ../ncurses/comp_captab.c:74:19: note: each undeclared identifier is 
> > reported only once for each function it appears in
> > ../ncurses/comp_captab.c:74:34: error: '_nc_info_table' undeclared (first 
> > use in this function)
> >   return termcap ? _nc_cap_table: _nc_info_table ;
> >                                   ^~~~~~~~~~~~~~
> 
> The generated source should have those names.  Perhaps your build machine 
> doesn't have awk (though that seems unlikely).  Attaching what I built just 
> now for that, and lib_gen.c
> 
> If I had the complete build logs, I might see the problem.
> I prefer having a compressed tar file of the logs, as an attachment.
> 
> https://invisible-island.net/personal/bug-reports.html
> 
> > make[1]: *** [Makefile:974: ../obj_s/comp_captab.o] Error 1
> > make[1]: Leaving directory 
> > '/home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/rpm/BUILD/ncurses-5.3/ncurses'
> > make: *** [Makefile:96: all] Error 2
> > error: Bad exit status from 
> > /home/pgroves/workspace/RELEASE5301.orig/Eagle-Ltib/tmp/rpm-tmp.48770 
> > (%build) ` To summarize, I was expecting ncurses to build 
> > successfully, hopefully to resolve my linker error associated with the 
> > bluez-5.65 package.  I wasn't expecting the build to fail for a file 
> > generated by the ncurses script.
> > How may I resolve this issue please?  I do anticipate further ncurses 
> > package dependencies that may still be required in order to ultimately 
> > generate a 'bluetoolctl' executable file.
> 
> --
> Thomas E. Dickey <dickey@invisible-island.net> https://invisible-island.net



-- 
Thomas E. Dickey <dickey@invisible-island.net>
https://invisible-island.net

Attachment: signature.asc
Description: PGP signature


reply via email to

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