From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id lFO6E3yuzmnYSQQAWB0awg (envelope-from ) for ; Thu, 02 Apr 2026 13:59:24 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=monnerat.net header.i=@monnerat.net header.a=rsa-sha256 header.s=mnet header.b=GhATVyuY; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 3B9A41E04F; Thu, 02 Apr 2026 13:59:24 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 8CD891E04F for ; Thu, 02 Apr 2026 13:59:22 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 069F04BA23D2 for ; Thu, 2 Apr 2026 17:59:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 069F04BA23D2 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=monnerat.net header.i=@monnerat.net header.a=rsa-sha256 header.s=mnet header.b=GhATVyuY Received: from jupiter.monnerat.net (jupiter.monnerat.net [46.226.111.226]) by sourceware.org (Postfix) with ESMTPS id 329D04BA2E32 for ; Thu, 2 Apr 2026 17:58:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 329D04BA2E32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=monnerat.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=monnerat.net ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 329D04BA2E32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=46.226.111.226 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775152736; cv=none; b=QOO9Zj1rWk3o3xv7mnmzRAItN19sqNcnx2pywCYgn38aeKV6adaD5P1qFxBDf1t5ItgIrwAMIsIwW+t0SgDB49t+M6Y9c2T0UDPEzc5X1aatMypCYv4E2XYd8g5VkyD2gpT7HoK2oYaofH0hcrLh3ShwxnyzWONSeikUvfdprNI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775152736; c=relaxed/simple; bh=c0sCOiArHb/JKW0JVr+2VP5wcGe41AILdRCqzkbgxyA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=URDKXrdgnGnPFI0mQzxVBaR+OdjqKuOjW+nLrxdii5QSVxRgTAB2j63IXsMM5vtTW7Rb/U/HGsqpqIjjpuRC/Yp8TEem8x6M6chDT6X/PtMptSvyYquJlEJ7ZK7QbU/GXd1nVCxyfRPLha95FsF8Q8x6yP7+U7oPR7phv/2ntKI= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 329D04BA2E32 Received: from patrick.monnerat ([192.168.0.128]) by jupiter.monnerat.net (8.14.8/8.14.8) with ESMTP id 632HwlYe017111 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 2 Apr 2026 19:58:53 +0200 DKIM-Filter: OpenDKIM Filter v2.10.3 jupiter.monnerat.net 632HwlYe017111 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=monnerat.net; s=mnet; t=1775152733; bh=c0sCOiArHb/JKW0JVr+2VP5wcGe41AILdRCqzkbgxyA=; h=From:To:Cc:Subject:Date:From; b=GhATVyuYEdXEuxkEoiBOK2kYk6g97kqaMFebuxXNpefLCcRzdQHt9g8gaYYZ7V3wb BAakgGXQwM4WcNL3dVV3Nq+cfdPsmUzhfGBbu7ybCpzYpXus0jGO4TQeSuVR15cNEU Nfqo2b+UMK2fiKeGIQtL7dHI2bAkixXZvJfXF+JY= From: Patrick Monnerat To: gdb-patches@sourceware.org Cc: Patrick Monnerat Subject: [PATCH] gdb: implement Tcl platform detection and improve private headers scan Date: Thu, 2 Apr 2026 19:58:44 +0200 Message-ID: <20260402175844.74804-1-patrick@monnerat.net> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org 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. --- 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)" -- 2.53.0