kconfig/lxdialog/check-lxdialog.sh
author Daniel Price <daniel.price@gmail.com>
Tue Nov 20 16:59:17 2012 -0800 (2012-11-20)
changeset 3126 333d3e40cbd1
parent 2125 4009fc9c47d5
permissions -rw-r--r--
scripts: refine static linking check to better guide the user

The current mechanism to check if static linking is possible, and the mesage
displayed on failure, can be puzzling to the unsuspecting user.

Also, the current implementation is not using the existing infrastructure,
and is thus difficult to enhance with new tests.

So, switch to using the standard CT_DoExecLog infra, and use four tests to
check for the host compiler:
- check we can run it
- check it can build a trivial program
- check it can statically link that program
- check if it statically link with libstdc++

That should cover most of the problems. Hopefully.

(At the same time, fix a typo in a comment)

Signed-off-by: Daniel Price <daniel.price@gmail.com>
[yann.morin.1998@free.fr: split original patch for self-contained changes]
[yann.morin.1998@free.fr: use steps to better see gcc's output]
[yann.morin.1998@free.fr: commit log]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Message-Id: <163f86b5216fc08c672a.1353459722@nipigon.dssd.com>
Patchwork-Id: 200536
     1 #!/bin/sh
     2 # Check ncurses compatibility
     3 
     4 # What library to link
     5 ldflags()
     6 {
     7 	for ext in so a dylib ; do
     8 		for lib in ncursesw ncurses curses ; do
     9 			$cc -print-file-name=lib${lib}.${ext} | grep -q /
    10 			if [ $? -eq 0 ]; then
    11 				echo "-l${lib}"
    12 				exit
    13 			fi
    14 		done
    15 	done
    16 	exit 1
    17 }
    18 
    19 # Where is ncurses.h?
    20 ccflags()
    21 {
    22 	if [ -f /usr/include/ncurses/ncurses.h ]; then
    23 		echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
    24 	elif [ -f /usr/include/ncurses/curses.h ]; then
    25 		echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
    26 	elif [ -f /usr/include/ncursesw/curses.h ]; then
    27 		echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
    28 	elif [ -f /usr/include/ncurses.h ]; then
    29 		echo '-DCURSES_LOC="<ncurses.h>"'
    30 	else
    31 		echo '-DCURSES_LOC="<curses.h>"'
    32 	fi
    33 }
    34 
    35 # Temp file, try to clean up after us
    36 tmp=.lxdialog.tmp
    37 trap "rm -f $tmp" 0 1 2 3 15
    38 
    39 # Check if we can link to ncurses
    40 check() {
    41         $cc -xc - -o $tmp 2>/dev/null <<'EOF'
    42 #include CURSES_LOC
    43 main() {}
    44 EOF
    45 	if [ $? != 0 ]; then
    46 	    echo " *** Unable to find the ncurses libraries or the"       1>&2
    47 	    echo " *** required header files."                            1>&2
    48 	    echo " *** 'make menuconfig' requires the ncurses libraries." 1>&2
    49 	    echo " *** "                                                  1>&2
    50 	    echo " *** Install ncurses (ncurses-devel) and try again."    1>&2
    51 	    echo " *** "                                                  1>&2
    52 	    exit 1
    53 	fi
    54 }
    55 
    56 usage() {
    57 	printf "Usage: $0 [-check compiler options|-ccflags|-ldflags compiler options]\n"
    58 }
    59 
    60 if [ $# -eq 0 ]; then
    61 	usage
    62 	exit 1
    63 fi
    64 
    65 cc=""
    66 case "$1" in
    67 	"-check")
    68 		shift
    69 		cc="$@"
    70 		check
    71 		;;
    72 	"-ccflags")
    73 		ccflags
    74 		;;
    75 	"-ldflags")
    76 		shift
    77 		cc="$@"
    78 		ldflags
    79 		;;
    80 	"*")
    81 		usage
    82 		exit 1
    83 		;;
    84 esac