[binutils-gdb] gdb: implement Tcl platform detection and improve private headers scan
Patrick Monnerat via Gdb-cvs <[email protected]>
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5e0a318b0aa54631a2c4d74b1a5582d196fcbe56 commit 5e0a318b0aa54631a2c4d74b1a5582d196fcbe56 Author: Patrick Monnerat <[email protected]> Date: Thu Apr 2 16:19:05 2026 +0200 gdb: implement Tcl platform detection and improve private headers scan This is needed for recent TEA support. Autoconf macro CY_AC_TCL_PRIVATE_HEADERS checks more file locations and determines TCL_PLATFORM according to the private header files found. A C macro TCL_PLATFORM_DEFINE is computed accordingly and defined from command line. The same applies to Tk. As in-tree Tcl/Tk sources have been removed, this case is left out. This change primarily targets Insight. Diff: --- gdb/Makefile.in | 2 +- gdb/acinclude.m4 | 56 ++++++++++++++++++++++------- gdb/configure | 105 ++++++++++++++++++++++++++++++------------------------- gdb/configure.ac | 54 ++++++++-------------------- 4 files changed, 116 insertions(+), 101 deletions(-) diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 0668351b6c0..2488d789580 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -583,7 +583,7 @@ SUBDIR_GDBTK_SRCS = \ SUBDIR_GDBTK_DEPS = $(LIBGUI) $(TCL_DEPS) $(TK_DEPS) SUBDIR_GDBTK_LDFLAGS = -SUBDIR_GDBTK_CFLAGS = -DGDBTK +SUBDIR_GDBTK_CFLAGS= -DGDBTK -D@TCL_PLATFORM_DEFINE@ -D@TK_PLATFORM_DEFINE@ CONFIG_OBS = @CONFIG_OBS@ CONFIG_SRCS = @CONFIG_SRCS@ diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4 index 547dd14d62f..64cbab0b93a 100644 --- a/gdb/acinclude.m4 +++ b/gdb/acinclude.m4 @@ -132,44 +132,76 @@ fi ]) dnl Find the location of the private Tcl headers -dnl When Tcl is installed, this is TCL_INCLUDE_SPEC/tcl-private/generic -dnl When Tcl is in the build tree, this is not needed. +dnl This is TCL_INCLUDE_SPEC/tcl-private/generic or TCL_SRC_DIR/generic. +dnl As a side effect, determine the TCL platform. dnl dnl Note: you must use first use SC_LOAD_TCLCONFIG! AC_DEFUN([CY_AC_TCL_PRIVATE_HEADERS], [ AC_MSG_CHECKING([for Tcl private headers]) private_dir="" - dir=`echo ${TCL_INCLUDE_SPEC}/tcl-private/generic | sed -e s/-I//` - if test -f ${dir}/tclInt.h ; then - private_dir=${dir} - fi + for dir in "${TCL_INCLUDE_SPEC}/tcl-private" "${TCL_SRC_DIR}"; do + dir=`echo "${dir}/generic" | sed -e s/-I//` + if test -f "${dir}/tclInt.h"; then + private_dir="${dir}" + break + fi + done if test x"${private_dir}" = x; then AC_MSG_ERROR(could not find private Tcl headers) else TCL_PRIVATE_INCLUDE="-I${private_dir}" AC_MSG_RESULT(${private_dir}) + TCL_PLATFORM=unknown + dir="`dirname \"${private_dir}\"`" + for platform in Unix Win MacOSX; do + # FIXME: actually, MacOSX is not detected. How to do it ? + pf="`echo \"${platform}\" | tr 'A-Z' 'a-z'`" + if test -f "${dir}/generic/tcl${platform}Port.h"; then + TCL_PLATFORM="${pf}" + break + elif test -f "${dir}/${pf}/tcl${platform}Port.h"; then + TCL_PLATFORM="${pf}" + TCL_PRIVATE_INCLUDE="${TCL_PRIVATE_INCLUDE} -I${dir}/${pf}" + break + fi + done fi ]) dnl Find the location of the private Tk headers -dnl When Tk is installed, this is TK_INCLUDE_SPEC/tk-private/generic -dnl When Tk is in the build tree, this not needed. +dnl This is TK_INCLUDE_SPEC/tk-private/generic or TK_SRC_DIR/generic. dnl dnl Note: you must first use SC_LOAD_TKCONFIG AC_DEFUN([CY_AC_TK_PRIVATE_HEADERS], [ AC_MSG_CHECKING([for Tk private headers]) private_dir="" - dir=`echo ${TK_INCLUDE_SPEC}/tk-private/generic | sed -e s/-I//` - if test -f ${dir}/tkInt.h; then - private_dir=${dir} - fi + for dir in "${TK_INCLUDE_SPEC}/tk-private" "${TK_SRC_DIR}"; do + dir=`echo "${dir}/generic" | sed -e s/-I//` + if test -f "${dir}/tkInt.h"; then + private_dir="${dir}" + break + fi + done if test x"${private_dir}" = x; then AC_MSG_ERROR(could not find Tk private headers) else TK_PRIVATE_INCLUDE="-I${private_dir}" AC_MSG_RESULT(${private_dir}) + TK_PLATFORM=unknown + dir="`dirname \"${private_dir}\"`" + for platform in Unix Win MacOSX; do + pf="`echo \"${platform}\" | tr 'A-Z' 'a-z'`" + if test -f "${dir}/generic/tk${platform}Port.h"; then + TK_PLATFORM="${pf}" + break + elif test -f "${dir}/${pf}/tk${platform}Port.h"; then + TK_PLATFORM="${pf}" + TK_PRIVATE_INCLUDE="${TK_PRIVATE_INCLUDE} -I${dir}/${pf}" + break + fi + done fi ]) diff --git a/gdb/configure b/gdb/configure index 0f5a26878e2..2ff36178a7e 100755 --- a/gdb/configure +++ b/gdb/configure @@ -674,6 +674,7 @@ X_LIBS X_LDFLAGS X_CFLAGS TK_XINCLUDES +TK_PLATFORM_DEFINE TK_DEPS TK_LIBRARY TK_INCLUDE @@ -686,6 +687,7 @@ TK_LIB_FILE TK_SRC_DIR TK_BIN_DIR TK_VERSION +TCL_PLATFORM_DEFINE TCL_DEPS TCL_LIBRARY TCL_INCLUDE @@ -11886,7 +11888,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11889 "configure" +#line 11891 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11992,7 +11994,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11995 "configure" +#line 11997 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -32924,27 +32926,18 @@ $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } - # Check for in-tree tcl - here=`pwd` - cd ${srcdir}/.. - topdir=`pwd` - cd ${here} - - intree="no" - if test "${TCL_SRC_DIR}" = "${topdir}/tcl"; then - intree="yes" - fi - # Find Tcl private headers - if test x"${intree}" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl private headers" >&5 $as_echo_n "checking for Tcl private headers... " >&6; } private_dir="" - dir=`echo ${TCL_INCLUDE_SPEC}/tcl-private/generic | sed -e s/-I//` - if test -f ${dir}/tclInt.h ; then - private_dir=${dir} - fi + for dir in "${TCL_INCLUDE_SPEC}/tcl-private" "${TCL_SRC_DIR}"; do + dir=`echo "${dir}/generic" | sed -e s/-I//` + if test -f "${dir}/tclInt.h"; then + private_dir="${dir}" + break + fi + done if test x"${private_dir}" = x; then as_fn_error $? "could not find private Tcl headers" "$LINENO" 5 @@ -32952,19 +32945,28 @@ $as_echo_n "checking for Tcl private headers... " >&6; } TCL_PRIVATE_INCLUDE="-I${private_dir}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${private_dir}" >&5 $as_echo "${private_dir}" >&6; } + TCL_PLATFORM=unknown + dir="`dirname \"${private_dir}\"`" + for platform in Unix Win MacOSX; do + # FIXME: actually, MacOSX is not detected. How to do it ? + pf="`echo \"${platform}\" | tr 'A-Z' 'a-z'`" + if test -f "${dir}/generic/tcl${platform}Port.h"; then + TCL_PLATFORM="${pf}" + break + elif test -f "${dir}/${pf}/tcl${platform}Port.h"; then + TCL_PLATFORM="${pf}" + TCL_PRIVATE_INCLUDE="${TCL_PRIVATE_INCLUDE} -I${dir}/${pf}" + break + fi + done fi - TCL_INCLUDE="${TCL_INCLUDE_SPEC} ${TCL_PRIVATE_INCLUDE}" - TCL_LIBRARY="${TCL_LIB_SPEC}" - TCL_DEPS="" - else - # If building tcl in the same src tree, private headers - # are not needed, but we need to be sure to use the right - # headers library - TCL_INCLUDE="-I${TCL_SRC_DIR}/generic" - TCL_LIBRARY="${TCL_BUILD_LIB_SPEC}" - TCL_DEPS="../tcl/${configdir}${TCL_LIB_FILE}" - fi + TCL_INCLUDE="${TCL_INCLUDE_SPEC} ${TCL_PRIVATE_INCLUDE}" + TCL_LIBRARY="${TCL_LIB_SPEC}" + TCL_DEPS="" + TCL_PLATFORM_DEFINE="TCL_PLATFORM_`echo \"${TCL_PLATFORM}\" | tr 'a-z-' 'A-Z_'`" + TCL_PLATFORM_DEFINE="${TCL_PLATFORM_DEFINE}=${TCL_PLATFORM_DEFINE}" + @@ -33038,22 +33040,18 @@ $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } - # Check for in-tree Tk - intree="no" - if test "${TK_SRC_DIR}" = "${topdir}/tk"; then - intree="yes" - fi - # Find Tk private headers - if test x"${intree}" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk private headers" >&5 $as_echo_n "checking for Tk private headers... " >&6; } private_dir="" - dir=`echo ${TK_INCLUDE_SPEC}/tk-private/generic | sed -e s/-I//` - if test -f ${dir}/tkInt.h; then - private_dir=${dir} - fi + for dir in "${TK_INCLUDE_SPEC}/tk-private" "${TK_SRC_DIR}"; do + dir=`echo "${dir}/generic" | sed -e s/-I//` + if test -f "${dir}/tkInt.h"; then + private_dir="${dir}" + break + fi + done if test x"${private_dir}" = x; then as_fn_error $? "could not find Tk private headers" "$LINENO" 5 @@ -33061,16 +33059,27 @@ $as_echo_n "checking for Tk private headers... " >&6; } TK_PRIVATE_INCLUDE="-I${private_dir}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${private_dir}" >&5 $as_echo "${private_dir}" >&6; } + TK_PLATFORM=unknown + dir="`dirname \"${private_dir}\"`" + for platform in Unix Win MacOSX; do + pf="`echo \"${platform}\" | tr 'A-Z' 'a-z'`" + if test -f "${dir}/generic/tk${platform}Port.h"; then + TK_PLATFORM="${pf}" + break + elif test -f "${dir}/${pf}/tk${platform}Port.h"; then + TK_PLATFORM="${pf}" + TK_PRIVATE_INCLUDE="${TK_PRIVATE_INCLUDE} -I${dir}/${pf}" + break + fi + done fi - TK_INCLUDE="${TK_INCLUDE_SPEC} ${TK_PRIVATE_INCLUDE}" - TK_LIBRARY=${TK_LIB_SPEC} - TK_DEPS="" - else - TK_INCLUDE="-I${TK_SRC_DIR}/generic" - TK_LIBRARY="${TK_BUILD_LIB_SPEC}" - TK_DEPS="../tk/${configdir}/${TK_LIB_FILE}" - fi + TK_INCLUDE="${TK_INCLUDE_SPEC} ${TK_PRIVATE_INCLUDE}" + TK_LIBRARY=${TK_LIB_SPEC} + TK_DEPS="" + TK_PLATFORM_DEFINE="TK_PLATFORM_`echo \"${TK_PLATFORM}\" | tr 'a-z-' 'A-Z_'`" + TK_PLATFORM_DEFINE="${TK_PLATFORM_DEFINE}=${TK_PLATFORM_DEFINE}" + diff --git a/gdb/configure.ac b/gdb/configure.ac index cf8078e1d89..dc918ae28c7 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -2111,57 +2111,31 @@ if test "${enable_gdbtk}" = "yes"; then if test -z "${no_tcl}" -a -z "${no_tk}"; then SC_LOAD_TCLCONFIG - # Check for in-tree tcl - here=`pwd` - cd ${srcdir}/.. - topdir=`pwd` - cd ${here} - - intree="no" - if test "${TCL_SRC_DIR}" = "${topdir}/tcl"; then - intree="yes" - fi - # Find Tcl private headers - if test x"${intree}" = xno; then - CY_AC_TCL_PRIVATE_HEADERS - TCL_INCLUDE="${TCL_INCLUDE_SPEC} ${TCL_PRIVATE_INCLUDE}" - TCL_LIBRARY="${TCL_LIB_SPEC}" - TCL_DEPS="" - else - # If building tcl in the same src tree, private headers - # are not needed, but we need to be sure to use the right - # headers library - TCL_INCLUDE="-I${TCL_SRC_DIR}/generic" - TCL_LIBRARY="${TCL_BUILD_LIB_SPEC}" - TCL_DEPS="../tcl/${configdir}${TCL_LIB_FILE}" - fi + CY_AC_TCL_PRIVATE_HEADERS + TCL_INCLUDE="${TCL_INCLUDE_SPEC} ${TCL_PRIVATE_INCLUDE}" + TCL_LIBRARY="${TCL_LIB_SPEC}" + TCL_DEPS="" + TCL_PLATFORM_DEFINE="TCL_PLATFORM_`echo \"${TCL_PLATFORM}\" | tr 'a-z-' 'A-Z_'`" + TCL_PLATFORM_DEFINE="${TCL_PLATFORM_DEFINE}=${TCL_PLATFORM_DEFINE}" AC_SUBST(TCL_INCLUDE) AC_SUBST(TCL_LIBRARY) AC_SUBST(TCL_DEPS) + AC_SUBST(TCL_PLATFORM_DEFINE) SC_LOAD_TKCONFIG - # Check for in-tree Tk - intree="no" - if test "${TK_SRC_DIR}" = "${topdir}/tk"; then - intree="yes" - fi - # Find Tk private headers - if test x"${intree}" = xno; then - CY_AC_TK_PRIVATE_HEADERS - TK_INCLUDE="${TK_INCLUDE_SPEC} ${TK_PRIVATE_INCLUDE}" - TK_LIBRARY=${TK_LIB_SPEC} - TK_DEPS="" - else - TK_INCLUDE="-I${TK_SRC_DIR}/generic" - TK_LIBRARY="${TK_BUILD_LIB_SPEC}" - TK_DEPS="../tk/${configdir}/${TK_LIB_FILE}" - fi + CY_AC_TK_PRIVATE_HEADERS + TK_INCLUDE="${TK_INCLUDE_SPEC} ${TK_PRIVATE_INCLUDE}" + TK_LIBRARY=${TK_LIB_SPEC} + TK_DEPS="" + TK_PLATFORM_DEFINE="TK_PLATFORM_`echo \"${TK_PLATFORM}\" | tr 'a-z-' 'A-Z_'`" + TK_PLATFORM_DEFINE="${TK_PLATFORM_DEFINE}=${TK_PLATFORM_DEFINE}" AC_SUBST(TK_INCLUDE) AC_SUBST(TK_LIBRARY) AC_SUBST(TK_DEPS) + AC_SUBST(TK_PLATFORM_DEFINE) AC_SUBST(TK_XINCLUDES) ENABLE_CFLAGS="${ENABLE_CFLAGS} \$(SUBDIR_GDBTK_CFLAGS)"