[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: |
Peter Groves |
Subject: |
RE: How do I resolve ncurses build error in source file generated by MKlib_gen.sh |
Date: |
Fri, 30 Aug 2024 10:51:45 +0000 |
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)
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
bluez-build-logfiles.tar.gz
Description: bluez-build-logfiles.tar.gz