This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [crosstool-ng] Menuconfig problems on Mac OS X


Titus, All,

On Sunday 26 June 2011 16:07:23 Titus von Boxberg wrote:
> >>> Yann, is there a chance that you reapply my patches to kconfig?
> > hg diff -c 20f02d426e15
> I did not get an answer.
> Is there a chance for these changes to be reapplied and stay in?
> Or is a change in kconfig unwanted?

The fact is, there are changes being pushed to kconfig that I initiated
and will be initiating (by bugging them on their list), so I will from
time to time resync with upstream kconfig.

From what I understand from the messages on the list, the problem with
MacOS-X is that there can be two different implementations of the same
thing. For example, one can use the native gcc (from X-Code?), or the
gcc from MacPorts; and those two are different beasts. Same seems to go
for curses. And probably a bunch of other things.

I do not want to add too many workarounds / shortcuts / escape ways for
each possible combinations.

So, either we support MacOS-X without MacPorts at all, or we require
MacPorts to be installed, and take everything from there.

Of course, it could be that I completely mis-understood your different
mails (yours and Bryan's), so I'd like that you all clarify the situation
beforehand.

Also, it could be interesting to push these changes upstream as well,
where it makes sense to.

But, back to the patch in #20f02d426e15. I won't revert it as is, because:

> diff --git a/kconfig/kconfig.mk b/kconfig/kconfig.mk
> --- a/kconfig/kconfig.mk
> +++ b/kconfig/kconfig.mk
> @@ -65,7 +65,7 @@
> 
>  check_lxdialog = $(CT_LIB_DIR)/kconfig/lxdialog/check-lxdialog.sh
>  
>  # Build flags
> 
> -CFLAGS = 
> +CFLAGS =
> 
>  LDFLAGS =
>  

Spurious trailing space.

>  # Compiler flags to use gettext
> diff --git a/kconfig/lxdialog/check-lxdialog.sh b/kconfig/lxdialog/check-lxdialog.sh
> --- a/kconfig/lxdialog/check-lxdialog.sh
> +++ b/kconfig/lxdialog/check-lxdialog.sh
> @@ -1,14 +1,24 @@
> 
>  #!/bin/sh
>  # Check ncurses compatibility
> 
> +OS=`uname`
> +
> +# Under MACOS make sure that the macports-installed version is used.
> +case "$OS" in
> +       Darwin) BASEDIR="/opt/local";;
> +       *)      BASEDIR="/usr";;
> +esac
> +
> +INCLUDEPATH="${BASEDIR}/include"
> +LIBPATH="${BASEDIR}/lib"
> +
> 
>  # What library to link
>  ldflags()
>  {
>         for ext in so a dylib ; do
>                 for lib in ncursesw ncurses curses ; do
> -                       $cc -print-file-name=lib${lib}.${ext} | grep -q /
> -                       if [ $? -eq 0 ]; then
> -                               echo "-l${lib}"
> +                       if [ -f "${LIBPATH}/lib${lib}.${ext}" ]; then
> +                               echo "-L${LIBPATH} -l${lib}"

Why don't you leave $cc tell you if it knows where to find that specific
library? Is it because the gcc on Darwin does not know about the option
-print-file-name ?

Or why not:
> -                       $cc -print-file-name=lib${lib}.${ext} | grep -q /
> +                       $cc -L${LIBPATH} -print-file-name=lib${lib}.${ext} | grep -q /
>                         if [ $? -eq 0 ]; then
> -                               echo "-l${lib}"
> +                               echo "-L${LIBPATH} -l${lib}"

In which case the -L${LIBPATH} should be passed from the caller to
check-lxdialog.sh, in kconfig/kconfig.mk:
  ifeq ($(shell uname -s),Darwin)
  LDFLAGS += -L/opt/local/lib
  endif # Darwin
  NCURSES_LDFLAGS = $(shell $(SHELL) $(check_lxdialog) -ldflags $(HOST_CC) $(LDFLAGS))

>                                 exit
>                         fi
>                 done
> @@ -19,14 +29,20 @@
> 
>  # Where is ncurses.h?
>  ccflags()
>  {
> 
> -       if [ -f /usr/include/ncurses/ncurses.h ]; then
> -               echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
> -       elif [ -f /usr/include/ncurses/curses.h ]; then
> -               echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
> -       elif [ -f /usr/include/ncurses.h ]; then
> -               echo '-DCURSES_LOC="<ncurses.h>"'
> +       if [ -f "${INCLUDEPATH}/ncursesw/ncurses.h" ]; then
> +               echo "-I${INCLUDEPATH} \"-DCURSES_LOC=<ncursesw/ncurses.h>\""
> +       elif [ -f "${INCLUDEPATH}/ncurses/ncurses.h" ]; then
> +               echo "-I${INCLUDEPATH} \"-DCURSES_LOC=<ncurses/ncurses.h>\""
> +       elif [ -f "${INCLUDEPATH}/ncursesw/curses.h" ]; then
> +               echo "-I${INCLUDEPATH} \"-DCURSES_LOC=<ncursesw/curses.h>\""
> +       elif [ -f "${INCLUDEPATH}/ncurses/curses.h" ]; then
> +               echo "-I${INCLUDEPATH} \"-DCURSES_LOC=<ncurses/curses.h>\""
> +       elif [ -f "${INCLUDEPATH}/ncurses.h" ]; then
> +               echo "-I${INCLUDEPATH} \"-DCURSES_LOC=<ncurses.h>\""
> +       elif [ -f "${INCLUDEPATH}/curses.h" ]; then
> +               echo "-I${INCLUDEPATH} \"-DCURSES_LOC=<curses.h>\""
>         else
> -               echo '-DCURSES_LOC="<curses.h>"'
> +               exit 1
>         fi
>  }
> 

This hunk no longer applies, due to new tests being done.
Also, the test should be done the way we test for libs. We just should let
$cc try to include the stuff, rather than just check for its existence.
Maybe smthg along the lines of:

ccflags() {
  for i in ncurse/ncurses.h  \
           ncurses/curses.h  \
           ncursesw/curses.h \
           ncurses.h         \
  ; do
    $cc -xc - -o $tmp 2>/dev/null <<'EOF'
#include "${i}"
EOF
    if [ $? -eq 0 ]; then
      echo "-DCURSES_LOC=\"<${i}>\"
      exit
    fi
  done
  echo "** Unable to bnlabla..."
  exit 1
}

Then if we can get a sane check-lxdialog.sh, we can just not sync it from
upstream, and even probably push it upstream.

> @@ -36,7 +52,8 @@
> 
>  # Check if we can link to ncurses
>  check() {
> 
> -        $cc -xc - -o $tmp 2>/dev/null <<'EOF'
> +        IF=`echo $(ccflags) | sed -e 's/"//g'`
> +        $cc $IF $(ldflags) -xc - -o $tmp 2>/dev/null <<'EOF'
>  #include CURSES_LOC
>  main() {}
>  EOF

This hunk is not needed, because $cc does contain the CFLAGS and the LDFLAGS.
See where it's being called:
  kconfig/kconfig.mk:84:
    $(SILENT)$(SHELL) $(check_lxdialog) -check $(HOST_CC) $(NCURSES_CFLAGS) $(NCURSES_LDFLAGS)

NCURSES_CFLAGS and _LDFLAGS are set thus:
  kconfig/kconfig.mk:78:
    NCURSES_CFLAGS = $(shell $(SHELL) $(check_lxdialog) -ccflags)
    NCURSES_LDFLAGS = $(shell $(SHELL) $(check_lxdialog) -ldflags $(HOST_CC))

and how cc is set:
  kconfig/lxdialog/check-lxdialog.sh:65:
    cc=""
    case "$1" in
            "-check")
                    shift
                    cc="$@"
                    check
                    ;;
    [--SNIP--]

So $cc will indeed contain all that is needed to compile + link against the
curses lib.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]