Opened 6 months ago

Last modified 4 weeks ago

#69990 new defect

cmake-bootstrap fails to link on 10.4 due to changes in ncurses 6.5.0

Reported by: miles-martin-66 (Miles Martin) Owned by:
Priority: Normal Milestone:
Component: ports Version:
Keywords: tiger Cc:
Port: cmake-bootstrap

Description (last modified by kencu (Ken))

iMac G3 400Mhz, 1 G ram, OSX 10.4.11, Macports V2.9.3 (self update to latest), Xcode 2.5

Im following these instruction to build a usable browser on this old mac. https://github.com/classilla/tenfourfox/wiki/HowToBuildFPR

I have managed to use "sudo port install" to build and install almost every package required as a pre requisite except any that have cmake-bootstrap as a dependancy. I have run 'sudo port clean' and following that attempted to install only cmake-bootsrap with no success. I have attached the main.log file which indicates that linking is failing (excerpt below) but I don't see why. I have investigated as far as my knowledge and experience can take me.

:info:build [ 94%] Building CXX object Source/CMakeFiles/ccmake.dir/CursesDialog/ccmake.cxx.o
:info:build cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source && /opt/local/bin/g++-apple-4.2  -DCMAKE_BUILD_WITH_CMAKE -DCURL_STATICLIB -DLIBARCHIVE_STATIC -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Utilities -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source/LexerParser -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Utilities/cmcompress -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source/CTest -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source/CPack -I/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source/CursesDialog/form  -pipe -Os -arch ppc -mmacosx-version-min=10.4   -o CMakeFiles/ccmake.dir/CursesDialog/ccmake.cxx.o -c /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source/CursesDialog/ccmake.cxx
:info:build [ 94%] Linking CXX executable ../bin/ccmake
:info:build cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Source && /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6/Bootstrap.cmk/cmake -E cmake_link_script CMakeFiles/ccmake.dir/link.txt --verbose=ON
:info:build /opt/local/bin/g++-apple-4.2  -pipe -Os -arch ppc -mmacosx-version-min=10.4 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -L/opt/local/libexec/cmake-bootstrap/lib -Wl,-headerpad_max_install_names -arch ppc CMakeFiles/ccmake.dir/CursesDialog/cmCursesOptionsWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesBoolWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesCacheEntryComposite.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesDummyWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesFilePathWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesForm.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesLabelWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesLongMessageForm.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesMainForm.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesPathWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesStringWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/cmCursesWidget.cxx.o CMakeFiles/ccmake.dir/CursesDialog/ccmake.cxx.o  -o ../bin/ccmake libCMakeLib.a CursesDialog/form/libcmForm.a kwsys/libcmsys.a ../Utilities/cmexpat/libcmexpat.a ../Utilities/cmlibarchive/libarchive/libcmlibarchive.a ../Utilities/cmliblzma/libcmliblzma.a -framework CoreServices ../Utilities/cmbzip2/libcmbzip2.a ../Utilities/cmcompress/libcmcompress.a ../Utilities/cmcurl/lib/libcmcurl.a ../Utilities/cmzlib/libcmzlib.a ../Utilities/cmjsoncpp/libcmjsoncpp.a ../Utilities/cmlibrhash/libcmlibrhash.a -framework CoreFoundation /usr/lib/libncurses.dylib 
:info:build ld: warning: directory '/opt/local/libexec/cmake-bootstrap/lib' following -L not found
:info:build ld: warning: object file compiled with -mlong-branch which is no longer needed. To remove this warning, recompile without -mlong-branch: /opt/local/lib/apple-gcc42/gcc/powerpc-apple-darwin8/4.2.1/crt3.o
:info:build Undefined symbols:
:info:build   "_getattrs", referenced from:
:info:build       _Display_Or_Erase_Field in libcmForm.a(frm_driver.c.o)
:info:build   "_getmaxx", referenced from:
:info:build       cmCursesLongMessageForm::PrintKeys()      in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesLongMessageForm::Render(int, int, int, int)in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesLongMessageForm::UpdateStatusBar()       in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesMainForm::PrintKeys(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Generate()      in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Generate()      in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Configure(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Configure(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::UpdateStatusBar(char const*)in cmCursesMainForm.cxx.o
:info:build       cmCursesStringWidget::PrintKeys()      in cmCursesStringWidget.cxx.o
:info:build       cmCursesStringWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesStringWidget.cxx.o
:info:build       _onsig in ccmake.cxx.o
:info:build       _main in ccmake.cxx.o
:info:build       _post_form in libcmForm.a(frm_post.c.o)
:info:build       _Window_To_Buffer in libcmForm.a(frm_driver.c.o)
:info:build       _Buffer_To_Window in libcmForm.a(frm_driver.c.o)
:info:build   "_getmaxy", referenced from:
:info:build       cmCursesOptionsWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesOptionsWidget.cxx.o
:info:build       cmCursesOptionsWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesOptionsWidget.cxx.o
:info:build       cmCursesBoolWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesBoolWidget.cxx.o
:info:build       cmCursesLongMessageForm::PrintKeys()      in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesLongMessageForm::HandleInput()       in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesLongMessageForm::Render(int, int, int, int)in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesLongMessageForm::Render(int, int, int, int)in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesLongMessageForm::UpdateStatusBar()       in cmCursesLongMessageForm.cxx.o
:info:build       cmCursesMainForm::PrintKeys(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::UpdateProgress(char const*, float, void*)in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Generate()      in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Generate()      in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Generate()      in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Configure(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Configure(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Configure(int)   in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::HandleInput()       in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::UpdateStatusBar(char const*)in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::UpdateStatusBar(char const*)in cmCursesMainForm.cxx.o
:info:build       cmCursesMainForm::Render(int, int, int, int)in cmCursesMainForm.cxx.o
:info:build       cmCursesPathWidget::OnTab(cmCursesMainForm*, _win_st*)      in cmCursesPathWidget.cxx.o
:info:build       cmCursesStringWidget::PrintKeys()      in cmCursesStringWidget.cxx.o
:info:build       cmCursesStringWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesStringWidget.cxx.o
:info:build       cmCursesStringWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesStringWidget.cxx.o
:info:build       cmCursesStringWidget::HandleInput(int&, cmCursesMainForm*, _win_st*)   in cmCursesStringWidget.cxx.o
:info:build       _onsig in ccmake.cxx.o
:info:build       _main in ccmake.cxx.o
:info:build       _main in ccmake.cxx.o
:info:build       _main in ccmake.cxx.o
:info:build       _post_form in libcmForm.a(frm_post.c.o)
:info:build       _Window_To_Buffer in libcmForm.a(frm_driver.c.o)
:info:build       _Buffer_To_Window in libcmForm.a(frm_driver.c.o)
:info:build       _Field_Grown in libcmForm.a(frm_driver.c.o)
:info:build       __nc_Refresh_Current_Field in libcmForm.a(frm_driver.c.o)
:info:build       __nc_Refresh_Current_Field in libcmForm.a(frm_driver.c.o)
:info:build       __nc_Refresh_Current_Field in libcmForm.a(frm_driver.c.o)
:info:build       __nc_Set_Current_Field in libcmForm.a(frm_driver.c.o)
:info:build ld: symbol(s) not found
:info:build collect2: ld returned 1 exit status
:info:build make[2]: *** [bin/ccmake] Error 1
:info:build make[2]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6'
:info:build make[1]: *** [Source/CMakeFiles/ccmake.dir/all] Error 2
:info:build make[1]: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6'
:info:build make: *** [all] Error 2
:info:build make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6'
:info:build Command failed:  cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/work/cmake-3.9.6" && /usr/bin/make -w all VERBOSE=ON 
:info:build Exit code: 2
:error:build Failed to build cmake-bootstrap: command execution failed
:debug:build Error code: CHILDSTATUS 1373 2
:debug:build Backtrace: command execution failed
:debug:build     while executing
:debug:build "system {*}$notty {*}$callback {*}$nice $fullcmdstring"
:debug:build     invoked from within
:debug:build "command_exec -callback portprogress::target_progress_callback build"
:debug:build     (procedure "portbuild::build_main" line 10)
:debug:build     invoked from within
:debug:build "$procedure $targetname"
:error:build See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_cmake-bootstrap/cmake-bootstrap/main.log for details.

Attachments (3)

cmake-bootstrap-main.log (1.8 MB) - added by miles-martin-66 (Miles Martin) 6 months ago.
main.log
log.txt (2.5 MB) - added by kencu (Ken) 6 months ago.
cmake-bootstrap-main-with-ncurses-6.4.1.log
patch-cmake-bootstrap-disable-curses-gui.diff (439 bytes) - added by kencu (Ken) 6 months ago.

Change History (31)

Changed 6 months ago by miles-martin-66 (Miles Martin)

Attachment: cmake-bootstrap-main.log added

main.log

comment:1 Changed 6 months ago by kencu (Ken)

Description: modified (diff)

comment:2 Changed 6 months ago by kencu (Ken)

let me see if this port still builds on Tiger ppc for me…

comment:3 Changed 6 months ago by kencu (Ken)

although this did build for me recently:

$ port -v installed cmake-bootstrap
The following ports are currently installed:
  cmake-bootstrap @3.9.6_0 (active) requested_variants='' platform='darwin 8' archs='ppc' date='2023-11-18T11:16:51-0800'

when I try to rebuild it now, I get the same error as you.

I don't presently know what has changed to cause this error. Perhaps we can sort it out.

comment:4 Changed 6 months ago by jmroot (Joshua Root)

Keywords: tiger added
Port: cmake-bootstrap added
Summary: Linking of cmake-bootsrap failscmake-bootstrap fails to link on 10.4

comment:5 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

getattrs, getmaxx and getmaxy are part of ncurses. cmake code calls gettattrs directly once. It doesn't call getmaxx or getmaxy directly; it calls getmaxyx which is an ncurses macro that expands to getmaxx and getmaxy. cmake-bootstrap is supposed to have no dependencies, so it's supposed to be using the older ncurses that comes with macOS rather than the newer ncurses in MacPorts. Maybe having MacPorts ncurses installed while building cmake-bootstrap is causing this problem. I can see from the log that it is using the macOS ncurses library, but maybe it is inadvertently using the MacPorts ncurses headers; such a mismatch could cause problems.

comment:6 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

However I don't see any evidence in the log that that is happening. I don't, for example, see -I/opt/local/include anywhere. The Portfile goes to some lengths to ensure that MacPorts headers and libraries will not be used—by clearing compiler.cpath and compiler.library_path and overriding prefix.

If you want to test if MacPorts ncurses could be interfering, try this:

sudo port clean cmake-bootstrap
sudo port -f deactivate ncurses
sudo port -s install cmake-bootstrap

Later you can sudo port activate ncurses again.

comment:7 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

I do see from the log that MacPorts ar and ranlib are being used. If you want to test if those are interfering, do the same as above, except that the port to deactivate before and reactivate after is cctools.

It would help to do these tests one at a time so that we know which of the two ports, if any, are causing the problem.

comment:8 Changed 6 months ago by kencu (Ken)

Although I don't know why as yet, when I downgrade ncurses to 6.4.1, cmake-bootstrap builds through.

Changed 6 months ago by kencu (Ken)

Attachment: log.txt added

cmake-bootstrap-main-with-ncurses-6.4.1.log

comment:9 Changed 6 months ago by kencu (Ken)

I attached the log from the successful build of cmake-bootstrap on Tiger with ncurses 6.4.1 instead of 6.5 active.

comment:10 Changed 6 months ago by kencu (Ken)

the difference seems to be that in ncurses 6.4.1 and earlier, NCURSES_OPAQUE is 0, whereas in ncurses 6.5.0, it is "1".

and in curses.h, this appears to change whether these functions (_getattrs, etc) are visible and defined or not.

Last edited 6 months ago by kencu (Ken) (previous) (diff)

comment:11 Changed 6 months ago by kencu (Ken)

Summary: cmake-bootstrap fails to link on 10.4cmake-bootstrap fails to link on 10.4 due to changes in ncurses 6.5.0

comment:12 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Can we work out why or how cmake-bootstrap is using MacPorts ncurses and how to prevent it? Worst case we can use the conflicts_build portgroup.

comment:13 Changed 6 months ago by kencu (Ken)

we should do that, yes. conflicts_build with ncurses gets ugly fast, though, I found. tons of stuff depends on it.

it looks like the default for NCURSES_OPAQUE toggling to ON in the new ncurses is likely going to cause troubles elsewhere, though.

there are lots of reports about this on the net.

you can set

#define NCURSES_OPAQUE 0

to force the old behaviour.

Last edited 6 months ago by kencu (Ken) (previous) (diff)

comment:14 Changed 6 months ago by miles-martin-66 (Miles Martin)

Thanks so much for looking at this!

I gather that, as a workaround, should I set #define NCURSES_OPAQUE 0?

If so, and forgive the possible silly question, but where would I set it?

comment:15 in reply to:  13 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Replying to kencu:

we should do that, yes. conflicts_build with ncurses gets ugly fast, though, I found. tons of stuff depends on it.

Ok but we're not talking about tons of stuff; we're talking about cmake-bootstrap only. Users wishing to install that can deactivate ncurses first and reactivate it later. Users receiving a binary of cmake-bootstrap won't even have to do that.

it looks like the default for NCURSES_OPAQUE toggling to ON in the new ncurses is likely going to cause troubles elsewhere, though.

Ok but that's not a problem we need to solve in this ticket. In this ticket, our only objective is to ensure that cmake-bootstrap doesn't try to use MacPorts ncurses, or any other MacPorts ports.

Also, I don't have any problem building cmake-bootstrap on macOS 12 even when I do not use trace mode and MacPorts ncurses 6.5 is installed.

comment:16 Changed 6 months ago by kencu (Ken)

I wonder if there might be some ncurses-config binary that is being used, and is finding the macports version on the PATH…

comment:17 in reply to:  14 ; Changed 6 months ago by kencu (Ken)

Replying to miles-martin-66:

Thanks so much for looking at this!

I gather that, as a workaround, should I set #define NCURSES_OPAQUE 0?

If so, and forgive the possible silly question, but where would I set it?

I'm trying a few things.

For the moment, if you do what Ryan suggested:

sudo port -f deactivate ncurses
sudo port -v install cmake-bootstrap

Ignore any failures that happen after installation on rev-upgrade --- there will probably be a great many of them.

Then:

sudo port -v install ncurses

and now rev-upgrade will run again and should be clean this time

you should get cmake-bootstrap installed at least.

comment:18 in reply to:  17 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Replying to kencu:

Ignore any failures that happen after installation on rev-upgrade --- there will probably be a great many of them.

Well, just disable rev-upgrade by passing the --no-rev-upgrade flag.

comment:19 in reply to:  16 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Replying to kencu:

I wonder if there might be some ncurses-config binary that is being used, and is finding the macports version on the PATH…

When I build cmake-bootstrap in trace mode on macOS 12, there are whole lot of things that it is looking for and might use if trace mode were off:

--->  Configuring cmake-bootstrap
Warning: The following existing files were hidden from the build system by trace mode:
  /opt
  /opt/local
  /opt/local/bin/ar
  /opt/local/bin/ccache
  /opt/local/bin/ctest
  /opt/local/bin/cvs
  /opt/local/bin/fakeroot
  /opt/local/bin/git
  /opt/local/bin/gmake
  /opt/local/bin/gunzip
  /opt/local/bin/gzip
  /opt/local/bin/hg
  /opt/local/bin/ld
  /opt/local/bin/nm
  /opt/local/bin/objdump
  /opt/local/bin/pkg-config
  /opt/local/bin/ranlib
  /opt/local/bin/strip
  /opt/local/bin/svn
  /opt/local/include/atk-1.0/atk/atk.h
  /opt/local/include/cairo/cairo.h
  /opt/local/include/fontconfig/fontconfig.h
  /opt/local/include/freetype2/freetype/config/ftheader.h
  /opt/local/include/freetype2/ft2build.h
  /opt/local/include/gdk-pixbuf-2.0/gdk-pixbuf/gdk-pixbuf.h
  /opt/local/include/glib-2.0/glib-object.h
  /opt/local/include/glib-2.0/glib.h
  /opt/local/include/gtk-2.0/gdk/gdk.h
  /opt/local/include/gtk-2.0/gtk/gtk.h
  /opt/local/include/pango-1.0/pango/pango.h
  /opt/local/lib/cmake/Qt5Core/Qt5CoreConfig.cmake
  /opt/local/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake
  /opt/local/lib/glib-2.0/include/glibconfig.h
  /opt/local/lib/gtk-2.0/include/gdkconfig.h
  /opt/local/var
  /opt/local/var/macports
  /opt/local/var/macports/build
  /opt/local/var/macports/build/_Volumes_Shared_macports-ports_devel_cmake-bootstrap
  /opt/local/var/macports/build/_Volumes_Shared_macports-ports_devel_cmake-bootstrap/cmake-bootstrap
  /private/var/select/sh
  /usr/X11R6
  /usr/X11R6/include/cairo/cairo.h
  /usr/X11R6/include/fontconfig/fontconfig.h
  /usr/X11R6/include/freetype2/freetype/config/ftheader.h
  /usr/X11R6/include/freetype2/ft2build.h

I'm surprised it's doing this. We're using the --no-system-libs configure flag which is defined as "use all cmake-provided third-party libraries".

There are no ncurses files among the above but I wanted to see if ncurses files would be found if I added the pkgconfig port to depends_build, but even when I did this, trace mode hid the pkg-config program; I'm not sure why it did that.

comment:20 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

The compiler being used is g++-apple-4.2, which is the Apple fork of g++ 4.2 as installed by the MacPorts apple-gcc42 port. Could we have patched that compiler to have /opt/local/include in its default include paths? If you run this, it should show what the default include paths are:

g++-apple-4.2 -x c++ -E - -v </dev/null

Maybe it's nothing but I noticed that to build the bootstrap cmake it invokes the compiler with -Qstd=c++14 which is weird because

  • the reason this port exists is it's the last version of cmake that doesn't require c++11 so what's with the c++14 reference?
  • this compiler doesn't support c++14 (nor c++11)
  • -Qstd=c++14 isn't how you enable c++14 on any compiler I know about (-std=c++14 is)

comment:21 Changed 6 months ago by kencu (Ken)

I think you've hit on the issue. Indeed, /opt/local/include comes ahead of /usr/include on the default include path for this compiler.

Well done!

$ g++-apple-4.2 -x c++ -E - -v </dev/null
Using built-in specs.
Target: powerpc-apple-darwin8
Configured with: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_apple-gcc42/apple-gcc42/work/objroot/src/configure --disable-checking --enable-werror --prefix=/opt/local --mandir=/opt/local/share/man --enable-languages=c,c++,objc,obj-c++ --libexecdir=/opt/local/libexec/apple-gcc42 --libdir=/opt/local/lib/apple-gcc42 --includedir=/opt/local/include/apple-gcc42 --program-suffix=-apple-4.2 --with-system-zlib --disable-nls --with-slibdir=/usr/lib --build=powerpc-apple-darwin8 --with-gxx-include-dir=/usr/include/c++/4.0.0 --host=powerpc-apple-darwin8 --target=powerpc-apple-darwin8
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3) (MacPorts apple-gcc42 5666.3_16)
 /opt/local/libexec/apple-gcc42/gcc/powerpc-apple-darwin8/4.2.1/cc1plus -E -quiet -v -D__DYNAMIC__ - -fPIC -mmacosx-version-min=10.4 -D__private_extern__=extern
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/opt/local/lib/apple-gcc42/gcc/powerpc-apple-darwin8/4.2.1/../../../../powerpc-apple-darwin8/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.0.0
 /usr/include/c++/4.0.0/powerpc-apple-darwin8
 /usr/include/c++/4.0.0/backward
 /opt/local/include
 /opt/local/lib/apple-gcc42/gcc/powerpc-apple-darwin8/4.2.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"

comment:22 Changed 6 months ago by kencu (Ken)

I tried a few simple workarounds...

setting -DNCURSES_OPAQUE=0 actually doesn't work out, as the macports curses header overrides it anyway unless other, less palatable, defines are also set.

I tried forcing compiler.cpath /usr on Tiger -- but I was both disappointed and surprised that didn't work either.

We could copy the system curses.h into a folder and set that as an include folder to be used ahead of others, but hacks like that often come back to bite you later. Still, that is on the easy side.

Or we (someone we) could figure out where ${prefix}/include is being added to the default include path for the gcc compilers, fix that, and then revbump the compiler. I checked, and gcc7 on TIger (at least) does the same search order, and so I suspect all the gcc compilers do that -- and they should probably all not do that any longer :> Now there is a project for a hearty individual to take on.

We could also change the newer ncurses 6.5.0 to use NCURSES_OPAQUE=0 by default again, at least on systems where it is needed to be so (where the system curses library apparently doesn't have the accessor functions to make OPAQUE=1 work). That is Josh's port, and I'm not getting involved in suggesting changes to ncurses that will almost certainly get shot down anyway.

Of all these options -- I guess copying the system curses.h into a folder in the build tree and prioritizing that include folder is the easiest. Or some trickery that accomplishes the same outcome, such as adding /usr/include to the standard include path, so it gets accessed ahead of the system include path.

Last edited 6 months ago by kencu (Ken) (previous) (diff)

comment:23 in reply to:  22 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Replying to kencu:

Or we (someone we) could figure out where ${prefix}/include is being added to the default include path for the gcc compilers, fix that, and then revbump the compiler. I checked, and gcc7 on TIger (at least) does the same search order, and so I suspect all the gcc compilers do that -- and they should probably all not do that any longer :> Now there is a project for a hearty individual to take on.

This seems like the right fix. gcc12 and gcc13 on macOS 12 don't have ${prefix}/include in the include path. I haven't checked earlier ones.

I though I remembered that we had modified the clang compilers to have ${prefix}/include in the include path too, but upon inspection that doesn't seem to be the case.

Version 0, edited 6 months ago by ryandesign (Ryan Carsten Schmidt) (next)

comment:24 Changed 6 months ago by kencu (Ken)

It’s probably this option: with-local-prefix that we should not be setting.

although it is being used on every gcc build in MacPorts, so why you aren’t seeing it used in gcc12 and gcc13 is a question to ponder.

comment:25 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

That flag does seem related. We first added --with-local-prefix to gcc33 19 years ago to prevent the compiler from searching in /usr/local/include and have been adding it to every gcc port since then. The documentation for this flag says that it causes the given prefix to be searched instead of /usr/local. And although we do sometimes encounter problems building ports when users have headers in /usr/local/include, disabling this feature is probably wrong. After all, the user may want to use the compiler outside of MacPorts and may expect it to find things in /usr/local as compilers typically do.

Notably, the apple-gcc40 and apple-gcc42 ports do not use this flag, yet we're seeing apple-gcc42 exhibit the behavior.

With gcc12 and gcc13 on macOS 12 I see neither /usr/local/include nor /opt/local/include in the list; I would have expected to see one or the other.

comment:26 Changed 6 months ago by kencu (Ken)

while this is all getting sorted out for the formal big fix, one simple fix is to disable the failing curses gui of cmake-bootstrap, which we really don't need for anything anyway.

patch attached.

Changed 6 months ago by kencu (Ken)

comment:27 Changed 6 months ago by kencu (Ken)

In 661a95121afae0ece0505f21897158570dfed502/macports-ports (master):

cmake-bootstrap: disable ncurses GUI on Tiger

the ncurses header installed by macports ncurses port is difficult
to avoid when building on Tiger, and there is an inconsistency with the
system ncurses library.

proper fixes are discussed in #69990
but for the time being, disable to the (unneceessary) cmake ncurses GUI

see: #69990

NB. I'm not revbumping this port for everyone just for this, nor am I
adding a special revbump for Tiger.

comment:28 in reply to:  21 Changed 4 weeks ago by jmroot (Joshua Root)

Replying to kencu:

I think you've hit on the issue. Indeed, /opt/local/include comes ahead of /usr/include on the default include path for this compiler.

This is #44141, which was closed as wontfix because the maintainer wasn't going to fix it, but there is an invitation to reopen if someone can provide a fix.

Note: See TracTickets for help on using tickets.