1# tcl.m4 -- 2# 3# This file provides a set of autoconf macros to help TEA-enable 4# a Tcl extension. 5# 6# Copyright (c) 1999-2000 Ajuba Solutions. 7# Copyright (c) 2002-2005 ActiveState Corporation. 8# 9# See the file "license.terms" for information on usage and redistribution 10# of this file, and for a DISCLAIMER OF ALL WARRANTIES. 11 12AC_PREREQ([2.69]) 13 14# Possible values for key variables defined: 15# 16# TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') 17# TEA_PLATFORM - windows unix 18# TEA_TK_EXTENSION - True if this is a Tk extension 19# 20 21#------------------------------------------------------------------------ 22# TEA_PATH_TCLCONFIG -- 23# 24# Locate the tclConfig.sh file and perform a sanity check on 25# the Tcl compile flags 26# 27# Arguments: 28# none 29# 30# Results: 31# 32# Adds the following arguments to configure: 33# --with-tcl=... 34# 35# Defines the following vars: 36# TCL_BIN_DIR Full path to the directory containing 37# the tclConfig.sh file 38#------------------------------------------------------------------------ 39 40AC_DEFUN([TEA_PATH_TCLCONFIG], [ 41 dnl TEA specific: Make sure we are initialized 42 AC_REQUIRE([TEA_INIT]) 43 # 44 # Ok, lets find the tcl configuration 45 # First, look for one uninstalled. 46 # the alternative search directory is invoked by --with-tcl 47 # 48 49 if test x"${no_tcl}" = x ; then 50 # we reset no_tcl in case something fails here 51 no_tcl=true 52 AC_ARG_WITH(tcl, 53 AS_HELP_STRING([--with-tcl], 54 [directory containing tcl configuration (tclConfig.sh)]), 55 [with_tclconfig="${withval}"]) 56 AC_MSG_CHECKING([for Tcl configuration]) 57 AC_CACHE_VAL(ac_cv_c_tclconfig,[ 58 59 # First check to see if --with-tcl was specified. 60 if test x"${with_tclconfig}" != x ; then 61 case "${with_tclconfig}" in 62 */tclConfig.sh ) 63 if test -f "${with_tclconfig}"; then 64 AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) 65 with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" 66 fi ;; 67 esac 68 if test -f "${with_tclconfig}/tclConfig.sh" ; then 69 ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" 70 else 71 AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) 72 fi 73 fi 74 75 # then check for a private Tcl installation 76 if test x"${ac_cv_c_tclconfig}" = x ; then 77 for i in \ 78 ../tcl \ 79 `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 80 `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ 81 `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ 82 ../../tcl \ 83 `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 84 `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ 85 `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ 86 ../../../tcl \ 87 `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 88 `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ 89 `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do 90 if test "${TEA_PLATFORM}" = "windows" \ 91 -a -f "$i/win/tclConfig.sh" ; then 92 ac_cv_c_tclconfig="`(cd $i/win; pwd)`" 93 break 94 fi 95 if test -f "$i/unix/tclConfig.sh" ; then 96 ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" 97 break 98 fi 99 done 100 fi 101 102 # on Darwin, check in Framework installation locations 103 if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then 104 for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ 105 `ls -d /Library/Frameworks 2>/dev/null` \ 106 `ls -d /Network/Library/Frameworks 2>/dev/null` \ 107 `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks/Tcl.framework 2>/dev/null` \ 108 `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Network/Library/Frameworks/Tcl.framework 2>/dev/null` \ 109 `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tcl.framework 2>/dev/null` \ 110 ; do 111 if test -f "$i/Tcl.framework/tclConfig.sh" ; then 112 ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" 113 break 114 fi 115 done 116 fi 117 118 # TEA specific: on Windows, check in common installation locations 119 if test "${TEA_PLATFORM}" = "windows" \ 120 -a x"${ac_cv_c_tclconfig}" = x ; then 121 for i in `ls -d C:/Tcl/lib 2>/dev/null` \ 122 `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ 123 ; do 124 if test -f "$i/tclConfig.sh" ; then 125 ac_cv_c_tclconfig="`(cd $i; pwd)`" 126 break 127 fi 128 done 129 fi 130 131 # check in a few common install locations 132 if test x"${ac_cv_c_tclconfig}" = x ; then 133 for i in `ls -d ${libdir} 2>/dev/null` \ 134 `ls -d ${exec_prefix}/lib 2>/dev/null` \ 135 `ls -d ${prefix}/lib 2>/dev/null` \ 136 `ls -d /usr/local/lib 2>/dev/null` \ 137 `ls -d /usr/contrib/lib 2>/dev/null` \ 138 `ls -d /usr/pkg/lib 2>/dev/null` \ 139 `ls -d /usr/lib 2>/dev/null` \ 140 `ls -d /usr/lib64 2>/dev/null` \ 141 `ls -d /usr/lib/tcl8.6 2>/dev/null` \ 142 `ls -d /usr/lib/tcl8.5 2>/dev/null` \ 143 `ls -d /usr/local/lib/tcl8.6 2>/dev/null` \ 144 `ls -d /usr/local/lib/tcl8.5 2>/dev/null` \ 145 `ls -d /usr/local/lib/tcl/tcl8.6 2>/dev/null` \ 146 `ls -d /usr/local/lib/tcl/tcl8.5 2>/dev/null` \ 147 ; do 148 if test -f "$i/tclConfig.sh" ; then 149 ac_cv_c_tclconfig="`(cd $i; pwd)`" 150 break 151 fi 152 done 153 fi 154 155 # check in a few other private locations 156 if test x"${ac_cv_c_tclconfig}" = x ; then 157 for i in \ 158 ${srcdir}/../tcl \ 159 `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 160 `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ 161 `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do 162 if test "${TEA_PLATFORM}" = "windows" \ 163 -a -f "$i/win/tclConfig.sh" ; then 164 ac_cv_c_tclconfig="`(cd $i/win; pwd)`" 165 break 166 fi 167 if test -f "$i/unix/tclConfig.sh" ; then 168 ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" 169 break 170 fi 171 done 172 fi 173 ]) 174 175 if test x"${ac_cv_c_tclconfig}" = x ; then 176 TCL_BIN_DIR="# no Tcl configs found" 177 AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) 178 else 179 no_tcl= 180 TCL_BIN_DIR="${ac_cv_c_tclconfig}" 181 AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) 182 fi 183 fi 184]) 185 186#------------------------------------------------------------------------ 187# TEA_PATH_TKCONFIG -- 188# 189# Locate the tkConfig.sh file 190# 191# Arguments: 192# none 193# 194# Results: 195# 196# Adds the following arguments to configure: 197# --with-tk=... 198# 199# Defines the following vars: 200# TK_BIN_DIR Full path to the directory containing 201# the tkConfig.sh file 202#------------------------------------------------------------------------ 203 204AC_DEFUN([TEA_PATH_TKCONFIG], [ 205 # 206 # Ok, lets find the tk configuration 207 # First, look for one uninstalled. 208 # the alternative search directory is invoked by --with-tk 209 # 210 211 if test x"${no_tk}" = x ; then 212 # we reset no_tk in case something fails here 213 no_tk=true 214 AC_ARG_WITH(tk, 215 AS_HELP_STRING([--with-tk], 216 [directory containing tk configuration (tkConfig.sh)]), 217 [with_tkconfig="${withval}"]) 218 AC_MSG_CHECKING([for Tk configuration]) 219 AC_CACHE_VAL(ac_cv_c_tkconfig,[ 220 221 # First check to see if --with-tkconfig was specified. 222 if test x"${with_tkconfig}" != x ; then 223 case "${with_tkconfig}" in 224 */tkConfig.sh ) 225 if test -f "${with_tkconfig}"; then 226 AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) 227 with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" 228 fi ;; 229 esac 230 if test -f "${with_tkconfig}/tkConfig.sh" ; then 231 ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" 232 else 233 AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) 234 fi 235 fi 236 237 # then check for a private Tk library 238 if test x"${ac_cv_c_tkconfig}" = x ; then 239 for i in \ 240 ../tk \ 241 `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 242 `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ 243 `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ 244 ../../tk \ 245 `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 246 `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ 247 `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ 248 ../../../tk \ 249 `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 250 `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ 251 `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do 252 if test "${TEA_PLATFORM}" = "windows" \ 253 -a -f "$i/win/tkConfig.sh" ; then 254 ac_cv_c_tkconfig="`(cd $i/win; pwd)`" 255 break 256 fi 257 if test -f "$i/unix/tkConfig.sh" ; then 258 ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" 259 break 260 fi 261 done 262 fi 263 264 # on Darwin, check in Framework installation locations 265 if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then 266 for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ 267 `ls -d /Library/Frameworks 2>/dev/null` \ 268 `ls -d /Network/Library/Frameworks 2>/dev/null` \ 269 ; do 270 if test -f "$i/Tk.framework/tkConfig.sh" ; then 271 ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" 272 break 273 fi 274 done 275 fi 276 277 # check in a few common install locations 278 if test x"${ac_cv_c_tkconfig}" = x ; then 279 for i in `ls -d ${libdir} 2>/dev/null` \ 280 `ls -d ${exec_prefix}/lib 2>/dev/null` \ 281 `ls -d ${prefix}/lib 2>/dev/null` \ 282 `ls -d /usr/local/lib 2>/dev/null` \ 283 `ls -d /usr/contrib/lib 2>/dev/null` \ 284 `ls -d /usr/pkg/lib 2>/dev/null` \ 285 `ls -d /usr/lib/tk8.6 2>/dev/null` \ 286 `ls -d /usr/lib/tk8.5 2>/dev/null` \ 287 `ls -d /usr/lib 2>/dev/null` \ 288 `ls -d /usr/lib64 2>/dev/null` \ 289 `ls -d /usr/local/lib/tk8.6 2>/dev/null` \ 290 `ls -d /usr/local/lib/tk8.5 2>/dev/null` \ 291 `ls -d /usr/local/lib/tcl/tk8.6 2>/dev/null` \ 292 `ls -d /usr/local/lib/tcl/tk8.5 2>/dev/null` \ 293 ; do 294 if test -f "$i/tkConfig.sh" ; then 295 ac_cv_c_tkconfig="`(cd $i; pwd)`" 296 break 297 fi 298 done 299 fi 300 301 # TEA specific: on Windows, check in common installation locations 302 if test "${TEA_PLATFORM}" = "windows" \ 303 -a x"${ac_cv_c_tkconfig}" = x ; then 304 for i in `ls -d C:/Tcl/lib 2>/dev/null` \ 305 `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ 306 ; do 307 if test -f "$i/tkConfig.sh" ; then 308 ac_cv_c_tkconfig="`(cd $i; pwd)`" 309 break 310 fi 311 done 312 fi 313 314 # check in a few other private locations 315 if test x"${ac_cv_c_tkconfig}" = x ; then 316 for i in \ 317 ${srcdir}/../tk \ 318 `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ 319 `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ 320 `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do 321 if test "${TEA_PLATFORM}" = "windows" \ 322 -a -f "$i/win/tkConfig.sh" ; then 323 ac_cv_c_tkconfig="`(cd $i/win; pwd)`" 324 break 325 fi 326 if test -f "$i/unix/tkConfig.sh" ; then 327 ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" 328 break 329 fi 330 done 331 fi 332 ]) 333 334 if test x"${ac_cv_c_tkconfig}" = x ; then 335 TK_BIN_DIR="# no Tk configs found" 336 AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) 337 else 338 no_tk= 339 TK_BIN_DIR="${ac_cv_c_tkconfig}" 340 AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) 341 fi 342 fi 343]) 344 345#------------------------------------------------------------------------ 346# TEA_LOAD_TCLCONFIG -- 347# 348# Load the tclConfig.sh file 349# 350# Arguments: 351# 352# Requires the following vars to be set: 353# TCL_BIN_DIR 354# 355# Results: 356# 357# Substitutes the following vars: 358# TCL_BIN_DIR 359# TCL_SRC_DIR 360# TCL_LIB_FILE 361# TCL_ZIP_FILE 362# TCL_ZIPFS_SUPPORT 363#------------------------------------------------------------------------ 364 365AC_DEFUN([TEA_LOAD_TCLCONFIG], [ 366 AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) 367 368 if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then 369 AC_MSG_RESULT([loading]) 370 . "${TCL_BIN_DIR}/tclConfig.sh" 371 else 372 AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) 373 fi 374 375 # If the TCL_BIN_DIR is the build directory (not the install directory), 376 # then set the common variable name to the value of the build variables. 377 # For example, the variable TCL_LIB_SPEC will be set to the value 378 # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC 379 # instead of TCL_BUILD_LIB_SPEC since it will work with both an 380 # installed and uninstalled version of Tcl. 381 if test -f "${TCL_BIN_DIR}/Makefile" ; then 382 TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" 383 TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" 384 TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" 385 elif test "`uname -s`" = "Darwin"; then 386 # If Tcl was built as a framework, attempt to use the libraries 387 # from the framework at the given location so that linking works 388 # against Tcl.framework installed in an arbitrary location. 389 case ${TCL_DEFS} in 390 *TCL_FRAMEWORK*) 391 if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then 392 for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ 393 "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do 394 if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then 395 TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" 396 break 397 fi 398 done 399 fi 400 if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then 401 TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" 402 TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" 403 fi 404 ;; 405 esac 406 fi 407 408 AC_SUBST(TCL_VERSION) 409 AC_SUBST(TCL_PATCH_LEVEL) 410 AC_SUBST(TCL_BIN_DIR) 411 AC_SUBST(TCL_SRC_DIR) 412 413 AC_SUBST(TCL_LIB_FILE) 414 AC_SUBST(TCL_LIB_FLAG) 415 AC_SUBST(TCL_LIB_SPEC) 416 417 AC_SUBST(TCL_STUB_LIB_FILE) 418 AC_SUBST(TCL_STUB_LIB_FLAG) 419 AC_SUBST(TCL_STUB_LIB_SPEC) 420 421 AC_MSG_CHECKING([platform]) 422 hold_cc=$CC; CC="$TCL_CC" 423 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ 424 #ifdef _WIN32 425 #error win32 426 #endif 427 ]])],[ 428 # first test we've already retrieved platform (cross-compile), fallback to unix otherwise: 429 TEA_PLATFORM="${TEA_PLATFORM-unix}" 430 CYGPATH=echo 431 ],[ 432 TEA_PLATFORM="windows" 433 AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo) 434 ]) 435 CC=$hold_cc 436 AC_MSG_RESULT($TEA_PLATFORM) 437 438 # The BUILD_$pkg is to define the correct extern storage class 439 # handling when making this package 440 AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], 441 [Building extension source?]) 442 # Do this here as we have fully defined TEA_PLATFORM now 443 if test "${TEA_PLATFORM}" = "windows" ; then 444 EXEEXT=".exe" 445 CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" 446 fi 447 448 # TEA specific: 449 AC_SUBST(CLEANFILES) 450 AC_SUBST(TCL_LIBS) 451 AC_SUBST(TCL_DEFS) 452 AC_SUBST(TCL_EXTRA_CFLAGS) 453 AC_SUBST(TCL_LD_FLAGS) 454 AC_SUBST(TCL_SHLIB_LD_LIBS) 455]) 456 457#------------------------------------------------------------------------ 458# TEA_LOAD_TKCONFIG -- 459# 460# Load the tkConfig.sh file 461# 462# Arguments: 463# 464# Requires the following vars to be set: 465# TK_BIN_DIR 466# 467# Results: 468# 469# Sets the following vars that should be in tkConfig.sh: 470# TK_BIN_DIR 471#------------------------------------------------------------------------ 472 473AC_DEFUN([TEA_LOAD_TKCONFIG], [ 474 AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) 475 476 if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then 477 AC_MSG_RESULT([loading]) 478 . "${TK_BIN_DIR}/tkConfig.sh" 479 else 480 AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) 481 fi 482 483 # If the TK_BIN_DIR is the build directory (not the install directory), 484 # then set the common variable name to the value of the build variables. 485 # For example, the variable TK_LIB_SPEC will be set to the value 486 # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC 487 # instead of TK_BUILD_LIB_SPEC since it will work with both an 488 # installed and uninstalled version of Tcl. 489 if test -f "${TK_BIN_DIR}/Makefile" ; then 490 TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" 491 TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" 492 TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" 493 elif test "`uname -s`" = "Darwin"; then 494 # If Tk was built as a framework, attempt to use the libraries 495 # from the framework at the given location so that linking works 496 # against Tk.framework installed in an arbitrary location. 497 case ${TK_DEFS} in 498 *TK_FRAMEWORK*) 499 if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then 500 for i in "`cd "${TK_BIN_DIR}"; pwd`" \ 501 "`cd "${TK_BIN_DIR}"/../..; pwd`"; do 502 if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then 503 TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" 504 break 505 fi 506 done 507 fi 508 if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then 509 TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" 510 TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" 511 fi 512 ;; 513 esac 514 fi 515 516 # TEA specific: Ensure windowingsystem is defined 517 if test "${TEA_PLATFORM}" = "unix" ; then 518 case ${TK_DEFS} in 519 *MAC_OSX_TK*) 520 AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) 521 TEA_WINDOWINGSYSTEM="aqua" 522 ;; 523 *) 524 TEA_WINDOWINGSYSTEM="x11" 525 ;; 526 esac 527 elif test "${TEA_PLATFORM}" = "windows" ; then 528 TEA_WINDOWINGSYSTEM="win32" 529 fi 530 531 AC_SUBST(TK_VERSION) 532 AC_SUBST(TK_BIN_DIR) 533 AC_SUBST(TK_SRC_DIR) 534 535 AC_SUBST(TK_LIB_FILE) 536 AC_SUBST(TK_LIB_FLAG) 537 AC_SUBST(TK_LIB_SPEC) 538 539 AC_SUBST(TK_STUB_LIB_FILE) 540 AC_SUBST(TK_STUB_LIB_FLAG) 541 AC_SUBST(TK_STUB_LIB_SPEC) 542 543 # TEA specific: 544 AC_SUBST(TK_LIBS) 545 AC_SUBST(TK_XINCLUDES) 546]) 547 548#------------------------------------------------------------------------ 549# TEA_PROG_TCLSH 550# Determine the fully qualified path name of the tclsh executable 551# in the Tcl build directory or the tclsh installed in a bin 552# directory. This macro will correctly determine the name 553# of the tclsh executable even if tclsh has not yet been 554# built in the build directory. The tclsh found is always 555# associated with a tclConfig.sh file. This tclsh should be used 556# only for running extension test cases. It should never be 557# or generation of files (like pkgIndex.tcl) at build time. 558# 559# Arguments: 560# none 561# 562# Results: 563# Substitutes the following vars: 564# TCLSH_PROG 565#------------------------------------------------------------------------ 566 567AC_DEFUN([TEA_PROG_TCLSH], [ 568 AC_MSG_CHECKING([for tclsh]) 569 if test -f "${TCL_BIN_DIR}/Makefile" ; then 570 # tclConfig.sh is in Tcl build directory 571 if test "${TEA_PLATFORM}" = "windows"; then 572 if test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${EXEEXT}" ; then 573 TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${EXEEXT}" 574 elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}s${EXEEXT}" ; then 575 TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}s${EXEEXT}" 576 elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}t${EXEEXT}" ; then 577 TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}t${EXEEXT}" 578 elif test -f "${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}st${EXEEXT}" ; then 579 TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}st${EXEEXT}" 580 fi 581 else 582 TCLSH_PROG="${TCL_BIN_DIR}/tclsh" 583 fi 584 else 585 # tclConfig.sh is in install location 586 if test "${TEA_PLATFORM}" = "windows"; then 587 TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${EXEEXT}" 588 else 589 TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}" 590 fi 591 list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ 592 `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ 593 `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" 594 for i in $list ; do 595 if test -f "$i/${TCLSH_PROG}" ; then 596 REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" 597 break 598 fi 599 done 600 TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" 601 fi 602 AC_MSG_RESULT([${TCLSH_PROG}]) 603 AC_SUBST(TCLSH_PROG) 604]) 605 606#------------------------------------------------------------------------ 607# TEA_PROG_WISH 608# Determine the fully qualified path name of the wish executable 609# in the Tk build directory or the wish installed in a bin 610# directory. This macro will correctly determine the name 611# of the wish executable even if wish has not yet been 612# built in the build directory. The wish found is always 613# associated with a tkConfig.sh file. This wish should be used 614# only for running extension test cases. It should never be 615# or generation of files (like pkgIndex.tcl) at build time. 616# 617# Arguments: 618# none 619# 620# Results: 621# Substitutes the following vars: 622# WISH_PROG 623#------------------------------------------------------------------------ 624 625AC_DEFUN([TEA_PROG_WISH], [ 626 AC_MSG_CHECKING([for wish]) 627 if test -f "${TK_BIN_DIR}/Makefile" ; then 628 # tkConfig.sh is in Tk build directory 629 if test "${TEA_PLATFORM}" = "windows"; then 630 if test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${EXEEXT}" ; then 631 WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${EXEEXT}" 632 elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}s${EXEEXT}" ; then 633 WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}$s{EXEEXT}" 634 elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}t${EXEEXT}" ; then 635 WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}t${EXEEXT}" 636 elif test -f "${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}st${EXEEXT}" ; then 637 WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}st${EXEEXT}" 638 fi 639 else 640 WISH_PROG="${TK_BIN_DIR}/wish" 641 fi 642 else 643 # tkConfig.sh is in install location 644 if test "${TEA_PLATFORM}" = "windows"; then 645 WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${EXEEXT}" 646 else 647 WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}" 648 fi 649 list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ 650 `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ 651 `ls -d ${TK_PREFIX}/bin 2>/dev/null`" 652 for i in $list ; do 653 if test -f "$i/${WISH_PROG}" ; then 654 REAL_TK_BIN_DIR="`cd "$i"; pwd`/" 655 break 656 fi 657 done 658 WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" 659 fi 660 AC_MSG_RESULT([${WISH_PROG}]) 661 AC_SUBST(WISH_PROG) 662]) 663 664#------------------------------------------------------------------------ 665# TEA_ENABLE_SHARED -- 666# 667# Allows the building of shared libraries 668# 669# Arguments: 670# none 671# 672# Results: 673# 674# Adds the following arguments to configure: 675# --enable-shared=yes|no 676# --enable-stubs=yes|no 677# 678# Defines the following vars: 679# STATIC_BUILD Used for building import/export libraries 680# on Windows. 681# 682# Sets the following vars: 683# SHARED_BUILD Value of 1 or 0 684# STUBS_BUILD Value if 1 or 0 685# USE_TCL_STUBS Value true: if SHARED_BUILD or --enable-stubs 686# USE_TCLOO_STUBS Value true: if SHARED_BUILD or --enable-stubs 687# USE_TK_STUBS Value true: if SHARED_BUILD or --enable-stubs 688# AND TEA_WINDOWING_SYSTEM != "" 689#------------------------------------------------------------------------ 690AC_DEFUN([TEA_ENABLE_SHARED], [ 691 AC_MSG_CHECKING([how to build libraries]) 692 AC_ARG_ENABLE(shared, 693 AS_HELP_STRING([--enable-shared], 694 [build and link with shared libraries (default: on)]), 695 [shared_ok=$enableval], [shared_ok=yes]) 696 697 if test "${enable_shared+set}" = set; then 698 enableval="$enable_shared" 699 shared_ok=$enableval 700 else 701 shared_ok=yes 702 fi 703 704 AC_ARG_ENABLE(stubs, 705 AS_HELP_STRING([--enable-stubs], 706 [build and link with stub libraries. Always true for shared builds (default: on)]), 707 [stubs_ok=$enableval], [stubs_ok=yes]) 708 709 if test "${enable_stubs+set}" = set; then 710 enableval="$enable_stubs" 711 stubs_ok=$enableval 712 else 713 stubs_ok=yes 714 fi 715 716 # Stubs are always enabled for shared builds 717 if test "$shared_ok" = "yes" ; then 718 AC_MSG_RESULT([shared]) 719 SHARED_BUILD=1 720 STUBS_BUILD=1 721 else 722 AC_MSG_RESULT([static]) 723 SHARED_BUILD=0 724 AC_DEFINE(STATIC_BUILD, 1, [This a static build]) 725 if test "$stubs_ok" = "yes" ; then 726 STUBS_BUILD=1 727 else 728 STUBS_BUILD=0 729 fi 730 fi 731 if test "${STUBS_BUILD}" = "1" ; then 732 AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) 733 AC_DEFINE(USE_TCLOO_STUBS, 1, [Use TclOO stubs]) 734 if test "${TEA_WINDOWINGSYSTEM}" != ""; then 735 AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) 736 fi 737 fi 738 739 AC_SUBST(SHARED_BUILD) 740 AC_SUBST(STUBS_BUILD) 741]) 742 743#------------------------------------------------------------------------ 744# TEA_ENABLE_THREADS -- 745# 746# Specify if thread support should be enabled. If "yes" is specified 747# as an arg (optional), threads are enabled by default, "no" means 748# threads are disabled. "yes" is the default. 749# 750# TCL_THREADS is checked so that if you are compiling an extension 751# against a threaded core, your extension must be compiled threaded 752# as well. 753# 754# Note that it is legal to have a thread enabled extension run in a 755# threaded or non-threaded Tcl core, but a non-threaded extension may 756# only run in a non-threaded Tcl core. 757# 758# Arguments: 759# none 760# 761# Results: 762# 763# Adds the following arguments to configure: 764# --enable-threads 765# 766# Sets the following vars: 767# THREADS_LIBS Thread library(s) 768# 769# Defines the following vars: 770# TCL_THREADS 771# _REENTRANT 772# _THREAD_SAFE 773#------------------------------------------------------------------------ 774 775AC_DEFUN([TEA_ENABLE_THREADS], [ 776 AC_ARG_ENABLE(threads, 777 AS_HELP_STRING([--enable-threads], 778 [build with threads (default: on)]), 779 [tcl_ok=$enableval], [tcl_ok=yes]) 780 781 if test "${enable_threads+set}" = set; then 782 enableval="$enable_threads" 783 tcl_ok=$enableval 784 else 785 tcl_ok=yes 786 fi 787 788 if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then 789 TCL_THREADS=1 790 791 if test "${TEA_PLATFORM}" != "windows" ; then 792 # We are always OK on Windows, so check what this platform wants: 793 794 # USE_THREAD_ALLOC tells us to try the special thread-based 795 # allocator that significantly reduces lock contention 796 AC_DEFINE(USE_THREAD_ALLOC, 1, 797 [Do we want to use the threaded memory allocator?]) 798 AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) 799 if test "`uname -s`" = "SunOS" ; then 800 AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, 801 [Do we really want to follow the standard? Yes we do!]) 802 fi 803 AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) 804 AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) 805 if test "$tcl_ok" = "no"; then 806 # Check a little harder for __pthread_mutex_init in the same 807 # library, as some systems hide it there until pthread.h is 808 # defined. We could alternatively do an AC_TRY_COMPILE with 809 # pthread.h, but that will work with libpthread really doesn't 810 # exist, like AIX 4.2. [Bug: 4359] 811 AC_CHECK_LIB(pthread, __pthread_mutex_init, 812 tcl_ok=yes, tcl_ok=no) 813 fi 814 815 if test "$tcl_ok" = "yes"; then 816 # The space is needed 817 THREADS_LIBS=" -lpthread" 818 else 819 AC_CHECK_LIB(pthreads, pthread_mutex_init, 820 tcl_ok=yes, tcl_ok=no) 821 if test "$tcl_ok" = "yes"; then 822 # The space is needed 823 THREADS_LIBS=" -lpthreads" 824 else 825 AC_CHECK_LIB(c, pthread_mutex_init, 826 tcl_ok=yes, tcl_ok=no) 827 if test "$tcl_ok" = "no"; then 828 AC_CHECK_LIB(c_r, pthread_mutex_init, 829 tcl_ok=yes, tcl_ok=no) 830 if test "$tcl_ok" = "yes"; then 831 # The space is needed 832 THREADS_LIBS=" -pthread" 833 else 834 TCL_THREADS=0 835 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) 836 fi 837 fi 838 fi 839 fi 840 fi 841 else 842 TCL_THREADS=0 843 fi 844 # Do checking message here to not mess up interleaved configure output 845 AC_MSG_CHECKING([for building with threads]) 846 if test "${TCL_THREADS}" = 1; then 847 AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) 848 AC_MSG_RESULT([yes (default)]) 849 else 850 AC_MSG_RESULT([no]) 851 fi 852 # TCL_THREADS sanity checking. See if our request for building with 853 # threads is the same as the way Tcl was built. If not, warn the user. 854 case ${TCL_DEFS} in 855 *THREADS=1*) 856 if test "${TCL_THREADS}" = "0"; then 857 AC_MSG_WARN([ 858 Building ${PACKAGE_NAME} without threads enabled, but building against Tcl 859 that IS thread-enabled. It is recommended to use --enable-threads.]) 860 fi 861 ;; 862 esac 863 AC_SUBST(TCL_THREADS) 864]) 865 866#------------------------------------------------------------------------ 867# TEA_ENABLE_SYMBOLS -- 868# 869# Specify if debugging symbols should be used. 870# Memory (TCL_MEM_DEBUG) debugging can also be enabled. 871# 872# Arguments: 873# none 874# 875# TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives 876# the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. 877# Requires the following vars to be set in the Makefile: 878# CFLAGS_DEFAULT 879# LDFLAGS_DEFAULT 880# 881# Results: 882# 883# Adds the following arguments to configure: 884# --enable-symbols 885# 886# Defines the following vars: 887# CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true 888# Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false 889# LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true 890# Sets to $(LDFLAGS_OPTIMIZE) if false 891#------------------------------------------------------------------------ 892 893AC_DEFUN([TEA_ENABLE_SYMBOLS], [ 894 dnl TEA specific: Make sure we are initialized 895 AC_REQUIRE([TEA_CONFIG_CFLAGS]) 896 AC_MSG_CHECKING([for build with symbols]) 897 AC_ARG_ENABLE(symbols, 898 AS_HELP_STRING([--enable-symbols], 899 [build with debugging symbols (default: off)]), 900 [tcl_ok=$enableval], [tcl_ok=no]) 901 if test "$tcl_ok" = "no"; then 902 CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" 903 LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" 904 AC_MSG_RESULT([no]) 905 AC_DEFINE(TCL_CFG_OPTIMIZED, 1, [Is this an optimized build?]) 906 else 907 CFLAGS_DEFAULT="${CFLAGS_DEBUG}" 908 LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" 909 if test "$tcl_ok" = "yes"; then 910 AC_MSG_RESULT([yes (standard debugging)]) 911 fi 912 fi 913 AC_SUBST(CFLAGS_DEFAULT) 914 AC_SUBST(LDFLAGS_DEFAULT) 915 916 if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then 917 AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) 918 fi 919 920 if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then 921 if test "$tcl_ok" = "all"; then 922 AC_MSG_RESULT([enabled symbols mem debugging]) 923 else 924 AC_MSG_RESULT([enabled $tcl_ok debugging]) 925 fi 926 fi 927]) 928 929#------------------------------------------------------------------------ 930# TEA_ENABLE_LANGINFO -- 931# 932# Allows use of modern nl_langinfo check for better l10n. 933# This is only relevant for Unix. 934# 935# Arguments: 936# none 937# 938# Results: 939# 940# Adds the following arguments to configure: 941# --enable-langinfo=yes|no (default is yes) 942# 943# Defines the following vars: 944# HAVE_LANGINFO Triggers use of nl_langinfo if defined. 945#------------------------------------------------------------------------ 946 947AC_DEFUN([TEA_ENABLE_LANGINFO], [ 948 AC_ARG_ENABLE(langinfo, 949 AS_HELP_STRING([--enable-langinfo], 950 [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), 951 [langinfo_ok=$enableval], [langinfo_ok=yes]) 952 953 HAVE_LANGINFO=0 954 if test "$langinfo_ok" = "yes"; then 955 AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) 956 fi 957 AC_MSG_CHECKING([whether to use nl_langinfo]) 958 if test "$langinfo_ok" = "yes"; then 959 AC_CACHE_VAL(tcl_cv_langinfo_h, [ 960 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[nl_langinfo(CODESET);]])], 961 [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) 962 AC_MSG_RESULT([$tcl_cv_langinfo_h]) 963 if test $tcl_cv_langinfo_h = yes; then 964 AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) 965 fi 966 else 967 AC_MSG_RESULT([$langinfo_ok]) 968 fi 969]) 970 971#-------------------------------------------------------------------- 972# TEA_CONFIG_SYSTEM 973# 974# Determine what the system is (some things cannot be easily checked 975# on a feature-driven basis, alas). This can usually be done via the 976# "uname" command. 977# 978# Arguments: 979# none 980# 981# Results: 982# Defines the following var: 983# 984# system - System/platform/version identification code. 985# 986#-------------------------------------------------------------------- 987 988AC_DEFUN([TEA_CONFIG_SYSTEM], [ 989 AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ 990 # TEA specific: 991 if test "${TEA_PLATFORM}" = "windows" ; then 992 tcl_cv_sys_version=windows 993 else 994 tcl_cv_sys_version=`uname -s`-`uname -r` 995 if test "$?" -ne 0 ; then 996 AC_MSG_WARN([can't find uname command]) 997 tcl_cv_sys_version=unknown 998 else 999 if test "`uname -s`" = "AIX" ; then 1000 tcl_cv_sys_version=AIX-`uname -v`.`uname -r` 1001 fi 1002 if test "`uname -s`" = "NetBSD" -a -f /etc/debian_version ; then 1003 tcl_cv_sys_version=NetBSD-Debian 1004 fi 1005 fi 1006 fi 1007 ]) 1008 system=$tcl_cv_sys_version 1009]) 1010 1011#-------------------------------------------------------------------- 1012# TEA_CONFIG_CFLAGS 1013# 1014# Try to determine the proper flags to pass to the compiler 1015# for building shared libraries and other such nonsense. 1016# 1017# Arguments: 1018# none 1019# 1020# Results: 1021# 1022# Defines and substitutes the following vars: 1023# 1024# DL_OBJS, DL_LIBS - removed for TEA, only needed by core. 1025# LDFLAGS - Flags to pass to the compiler when linking object 1026# files into an executable application binary such 1027# as tclsh. 1028# LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", 1029# that tell the run-time dynamic linker where to look 1030# for shared libraries such as libtcl.so. Depends on 1031# the variable LIB_RUNTIME_DIR in the Makefile. Could 1032# be the same as CC_SEARCH_FLAGS if ${CC} is used to link. 1033# CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", 1034# that tell the run-time dynamic linker where to look 1035# for shared libraries such as libtcl.so. Depends on 1036# the variable LIB_RUNTIME_DIR in the Makefile. 1037# SHLIB_CFLAGS - Flags to pass to cc when compiling the components 1038# of a shared library (may request position-independent 1039# code, among other things). 1040# SHLIB_LD - Base command to use for combining object files 1041# into a shared library. 1042# SHLIB_LD_LIBS - Dependent libraries for the linker to scan when 1043# creating shared libraries. This symbol typically 1044# goes at the end of the "ld" commands that build 1045# shared libraries. The value of the symbol defaults to 1046# "${LIBS}" if all of the dependent libraries should 1047# be specified when creating a shared library. If 1048# dependent libraries should not be specified (as on 1049# SunOS 4.x, where they cause the link to fail, or in 1050# general if Tcl and Tk aren't themselves shared 1051# libraries), then this symbol has an empty string 1052# as its value. 1053# SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable 1054# extensions. An empty string means we don't know how 1055# to use shared libraries on this platform. 1056# LIB_SUFFIX - Specifies everything that comes after the "libfoo" 1057# in a static or shared library name, using the $PACKAGE_VERSION variable 1058# to put the version in the right place. This is used 1059# by platforms that need non-standard library names. 1060# Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs 1061# to have a version after the .so, and ${PACKAGE_VERSION}.a 1062# on AIX, since a shared library needs to have 1063# a .a extension whereas shared objects for loadable 1064# extensions have a .so extension. Defaults to 1065# ${PACKAGE_VERSION}${SHLIB_SUFFIX}. 1066# CFLAGS_DEBUG - 1067# Flags used when running the compiler in debug mode 1068# CFLAGS_OPTIMIZE - 1069# Flags used when running the compiler in optimize mode 1070# CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) 1071#-------------------------------------------------------------------- 1072 1073AC_DEFUN([TEA_CONFIG_CFLAGS], [ 1074 dnl TEA specific: Make sure we are initialized 1075 AC_REQUIRE([TEA_INIT]) 1076 1077 # Step 0.a: Enable 64 bit support? 1078 1079 AC_MSG_CHECKING([if 64bit support is requested]) 1080 AC_ARG_ENABLE(64bit, 1081 AS_HELP_STRING([--enable-64bit], 1082 [enable 64bit support (default: off)]), 1083 [do64bit=$enableval], [do64bit=no]) 1084 AC_MSG_RESULT([$do64bit]) 1085 1086 # Step 0.b: Enable Solaris 64 bit VIS support? 1087 1088 AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) 1089 AC_ARG_ENABLE(64bit-vis, 1090 AS_HELP_STRING([--enable-64bit-vis], 1091 [enable 64bit Sparc VIS support (default: off)]), 1092 [do64bitVIS=$enableval], [do64bitVIS=no]) 1093 AC_MSG_RESULT([$do64bitVIS]) 1094 # Force 64bit on with VIS 1095 AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) 1096 1097 # Step 0.c: Check if visibility support is available. Do this here so 1098 # that platform specific alternatives can be used below if this fails. 1099 1100 AC_CACHE_CHECK([if compiler supports visibility "hidden"], 1101 tcl_cv_cc_visibility_hidden, [ 1102 hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" 1103 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 1104 extern __attribute__((__visibility__("hidden"))) void f(void); 1105 void f(void) {}]], [[f();]])],[tcl_cv_cc_visibility_hidden=yes], 1106 [tcl_cv_cc_visibility_hidden=no]) 1107 CFLAGS=$hold_cflags]) 1108 AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ 1109 AC_DEFINE(MODULE_SCOPE, 1110 [extern __attribute__((__visibility__("hidden")))], 1111 [Compiler support for module scope symbols]) 1112 AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) 1113 ]) 1114 1115 # Step 0.d: Disable -rpath support? 1116 1117 AC_MSG_CHECKING([if rpath support is requested]) 1118 AC_ARG_ENABLE(rpath, 1119 AS_HELP_STRING([--disable-rpath], 1120 [disable rpath support (default: on)]), 1121 [doRpath=$enableval], [doRpath=yes]) 1122 AC_MSG_RESULT([$doRpath]) 1123 1124 # Set the variable "system" to hold the name and version number 1125 # for the system. 1126 1127 TEA_CONFIG_SYSTEM 1128 1129 # Require ranlib early so we can override it in special cases below. 1130 1131 AC_REQUIRE([AC_PROG_RANLIB]) 1132 1133 # Set configuration options based on system name and version. 1134 # This is similar to Tcl's unix/tcl.m4 except that we've added a 1135 # "windows" case and removed some core-only vars. 1136 1137 do64bit_ok=no 1138 # default to '{$LIBS}' and set to "" on per-platform necessary basis 1139 SHLIB_LD_LIBS='${LIBS}' 1140 # When ld needs options to work in 64-bit mode, put them in 1141 # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] 1142 # is disabled by the user. [Bug 1016796] 1143 LDFLAGS_ARCH="" 1144 UNSHARED_LIB_SUFFIX="" 1145 # TEA specific: use PACKAGE_VERSION instead of VERSION 1146 TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' 1147 ECHO_VERSION='`echo ${PACKAGE_VERSION}`' 1148 TCL_LIB_VERSIONS_OK=ok 1149 CFLAGS_DEBUG=-g 1150 AS_IF([test "$GCC" = yes], [ 1151 CFLAGS_OPTIMIZE=-O2 1152 CFLAGS_WARNING="-Wall" 1153 ], [ 1154 CFLAGS_OPTIMIZE=-O 1155 CFLAGS_WARNING="" 1156 ]) 1157 AC_CHECK_TOOL(AR, ar) 1158 STLIB_LD='${AR} cr' 1159 LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" 1160 AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"]) 1161 case $system in 1162 # TEA specific: 1163 windows) 1164 MACHINE="X86" 1165 if test "$do64bit" != "no" ; then 1166 case "$do64bit" in 1167 amd64|x64|yes) 1168 MACHINE="AMD64" ; # default to AMD64 64-bit build 1169 ;; 1170 arm64|aarch64) 1171 MACHINE="ARM64" 1172 ;; 1173 ia64) 1174 MACHINE="IA64" 1175 ;; 1176 esac 1177 fi 1178 1179 if test "$GCC" != "yes" ; then 1180 if test "${SHARED_BUILD}" = "0" ; then 1181 runtime=-MT 1182 else 1183 runtime=-MD 1184 fi 1185 case "x`echo \${VisualStudioVersion}`" in 1186 x1[[4-9]]*) 1187 lflags="${lflags} -nodefaultlib:libucrt.lib" 1188 TEA_ADD_LIBS([ucrt.lib]) 1189 ;; 1190 *) 1191 ;; 1192 esac 1193 1194 if test "$do64bit" != "no" ; then 1195 CC="cl.exe" 1196 RC="rc.exe" 1197 lflags="${lflags} -nologo -MACHINE:${MACHINE} " 1198 LINKBIN="link.exe" 1199 CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" 1200 CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" 1201 # Avoid 'unresolved external symbol __security_cookie' 1202 # errors, c.f. http://support.microsoft.com/?id=894573 1203 TEA_ADD_LIBS([bufferoverflowU.lib]) 1204 else 1205 RC="rc" 1206 lflags="${lflags} -nologo" 1207 LINKBIN="link" 1208 CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" 1209 CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" 1210 fi 1211 fi 1212 1213 if test "$GCC" = "yes"; then 1214 # mingw gcc mode 1215 AC_CHECK_TOOL(RC, windres) 1216 CFLAGS_DEBUG="-g" 1217 CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" 1218 SHLIB_LD='${CC} -shared' 1219 UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' 1220 LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" 1221 LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" 1222 1223 AC_CACHE_CHECK(for cross-compile version of gcc, 1224 ac_cv_cross, 1225 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 1226 #ifdef _WIN32 1227 #error cross-compiler 1228 #endif 1229 ]], [[]])], 1230 [ac_cv_cross=yes], 1231 [ac_cv_cross=no]) 1232 ) 1233 if test "$ac_cv_cross" = "yes"; then 1234 case "$do64bit" in 1235 amd64|x64|yes) 1236 CC="x86_64-w64-mingw32-${CC}" 1237 LD="x86_64-w64-mingw32-ld" 1238 AR="x86_64-w64-mingw32-ar" 1239 RANLIB="x86_64-w64-mingw32-ranlib" 1240 RC="x86_64-w64-mingw32-windres" 1241 ;; 1242 arm64|aarch64) 1243 CC="aarch64-w64-mingw32-clang" 1244 LD="aarch64-w64-mingw32-ld" 1245 AR="aarch64-w64-mingw32-ar" 1246 RANLIB="aarch64-w64-mingw32-ranlib" 1247 RC="aarch64-w64-mingw32-windres" 1248 ;; 1249 *) 1250 CC="i686-w64-mingw32-${CC}" 1251 LD="i686-w64-mingw32-ld" 1252 AR="i686-w64-mingw32-ar" 1253 RANLIB="i686-w64-mingw32-ranlib" 1254 RC="i686-w64-mingw32-windres" 1255 ;; 1256 esac 1257 fi 1258 1259 else 1260 SHLIB_LD="${LINKBIN} -dll ${lflags}" 1261 # link -lib only works when -lib is the first arg 1262 STLIB_LD="${LINKBIN} -lib ${lflags}" 1263 UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' 1264 PATHTYPE=-w 1265 # For information on what debugtype is most useful, see: 1266 # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 1267 # and also 1268 # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx 1269 # This essentially turns it all on. 1270 LDFLAGS_DEBUG="-debug -debugtype:cv" 1271 LDFLAGS_OPTIMIZE="-release" 1272 LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" 1273 LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" 1274 fi 1275 1276 SHLIB_SUFFIX=".dll" 1277 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' 1278 1279 TCL_LIB_VERSIONS_OK=nodots 1280 ;; 1281 AIX-*) 1282 AS_IF([test "$GCC" != "yes"], [ 1283 # AIX requires the _r compiler when gcc isn't being used 1284 case "${CC}" in 1285 *_r|*_r\ *) 1286 # ok ... 1287 ;; 1288 *) 1289 # Make sure only first arg gets _r 1290 CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` 1291 ;; 1292 esac 1293 AC_MSG_RESULT([Using $CC for compiling with threads]) 1294 ]) 1295 LIBS="$LIBS -lc" 1296 SHLIB_CFLAGS="" 1297 SHLIB_SUFFIX=".so" 1298 1299 LD_LIBRARY_PATH_VAR="LIBPATH" 1300 1301 # Check to enable 64-bit flags for compiler/linker 1302 AS_IF([test "$do64bit" = yes], [ 1303 AS_IF([test "$GCC" = yes], [ 1304 AC_MSG_WARN([64bit mode not supported with GCC on $system]) 1305 ], [ 1306 do64bit_ok=yes 1307 CFLAGS="$CFLAGS -q64" 1308 LDFLAGS_ARCH="-q64" 1309 RANLIB="${RANLIB} -X64" 1310 AR="${AR} -X64" 1311 SHLIB_LD_FLAGS="-b64" 1312 ]) 1313 ]) 1314 1315 AS_IF([test "`uname -m`" = ia64], [ 1316 # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC 1317 SHLIB_LD="/usr/ccs/bin/ld -G -z text" 1318 AS_IF([test "$GCC" = yes], [ 1319 CC_SEARCH_FLAGS='"-Wl,-R,${LIB_RUNTIME_DIR}"' 1320 ], [ 1321 CC_SEARCH_FLAGS='"-R${LIB_RUNTIME_DIR}"' 1322 ]) 1323 LD_SEARCH_FLAGS='-R "${LIB_RUNTIME_DIR}"' 1324 ], [ 1325 AS_IF([test "$GCC" = yes], [ 1326 SHLIB_LD='${CC} -shared -Wl,-bexpall' 1327 ], [ 1328 SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" 1329 LDFLAGS="$LDFLAGS -brtl" 1330 ]) 1331 SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" 1332 CC_SEARCH_FLAGS='"-L${LIB_RUNTIME_DIR}"' 1333 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1334 ]) 1335 ;; 1336 BeOS*) 1337 SHLIB_CFLAGS="-fPIC" 1338 SHLIB_LD='${CC} -nostart' 1339 SHLIB_SUFFIX=".so" 1340 1341 #----------------------------------------------------------- 1342 # Check for inet_ntoa in -lbind, for BeOS (which also needs 1343 # -lsocket, even if the network functions are in -lnet which 1344 # is always linked to, for compatibility. 1345 #----------------------------------------------------------- 1346 AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) 1347 ;; 1348 BSD/OS-2.1*|BSD/OS-3*) 1349 SHLIB_CFLAGS="" 1350 SHLIB_LD="shlicc -r" 1351 SHLIB_SUFFIX=".so" 1352 CC_SEARCH_FLAGS="" 1353 LD_SEARCH_FLAGS="" 1354 ;; 1355 BSD/OS-4.*) 1356 SHLIB_CFLAGS="-export-dynamic -fPIC" 1357 SHLIB_LD='${CC} -shared' 1358 SHLIB_SUFFIX=".so" 1359 LDFLAGS="$LDFLAGS -export-dynamic" 1360 CC_SEARCH_FLAGS="" 1361 LD_SEARCH_FLAGS="" 1362 ;; 1363 CYGWIN_*) 1364 SHLIB_CFLAGS="" 1365 SHLIB_LD='${CC} -shared' 1366 SHLIB_SUFFIX=".dll" 1367 SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a" 1368 EXEEXT=".exe" 1369 do64bit_ok=yes 1370 CC_SEARCH_FLAGS="" 1371 LD_SEARCH_FLAGS="" 1372 ;; 1373 dgux*) 1374 SHLIB_CFLAGS="-K PIC" 1375 SHLIB_LD='${CC} -G' 1376 SHLIB_LD_LIBS="" 1377 SHLIB_SUFFIX=".so" 1378 CC_SEARCH_FLAGS="" 1379 LD_SEARCH_FLAGS="" 1380 ;; 1381 Haiku*) 1382 LDFLAGS="$LDFLAGS -Wl,--export-dynamic" 1383 SHLIB_CFLAGS="-fPIC" 1384 SHLIB_SUFFIX=".so" 1385 SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared' 1386 AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) 1387 ;; 1388 HP-UX-*.11.*) 1389 # Use updated header definitions where possible 1390 AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) 1391 # TEA specific: Needed by Tcl, but not most extensions 1392 #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) 1393 #LIBS="$LIBS -lxnet" # Use the XOPEN network library 1394 1395 AS_IF([test "`uname -m`" = ia64], [ 1396 SHLIB_SUFFIX=".so" 1397 ], [ 1398 SHLIB_SUFFIX=".sl" 1399 ]) 1400 AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) 1401 AS_IF([test "$tcl_ok" = yes], [ 1402 SHLIB_CFLAGS="+z" 1403 SHLIB_LD="ld -b" 1404 LDFLAGS="$LDFLAGS -Wl,-E" 1405 CC_SEARCH_FLAGS='"-Wl,+s,+b,${LIB_RUNTIME_DIR}:."' 1406 LD_SEARCH_FLAGS='+s +b "${LIB_RUNTIME_DIR}:."' 1407 LD_LIBRARY_PATH_VAR="SHLIB_PATH" 1408 ]) 1409 AS_IF([test "$GCC" = yes], [ 1410 SHLIB_LD='${CC} -shared' 1411 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1412 ], [ 1413 CFLAGS="$CFLAGS -z" 1414 ]) 1415 1416 # Check to enable 64-bit flags for compiler/linker 1417 AS_IF([test "$do64bit" = "yes"], [ 1418 AS_IF([test "$GCC" = yes], [ 1419 case `${CC} -dumpmachine` in 1420 hppa64*) 1421 # 64-bit gcc in use. Fix flags for GNU ld. 1422 do64bit_ok=yes 1423 SHLIB_LD='${CC} -shared' 1424 AS_IF([test $doRpath = yes], [ 1425 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"']) 1426 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1427 ;; 1428 *) 1429 AC_MSG_WARN([64bit mode not supported with GCC on $system]) 1430 ;; 1431 esac 1432 ], [ 1433 do64bit_ok=yes 1434 CFLAGS="$CFLAGS +DD64" 1435 LDFLAGS_ARCH="+DD64" 1436 ]) 1437 ]) ;; 1438 HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) 1439 SHLIB_SUFFIX=".sl" 1440 AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) 1441 AS_IF([test "$tcl_ok" = yes], [ 1442 SHLIB_CFLAGS="+z" 1443 SHLIB_LD="ld -b" 1444 SHLIB_LD_LIBS="" 1445 LDFLAGS="$LDFLAGS -Wl,-E" 1446 CC_SEARCH_FLAGS='"-Wl,+s,+b,${LIB_RUNTIME_DIR}:."' 1447 LD_SEARCH_FLAGS='+s +b "${LIB_RUNTIME_DIR}:."' 1448 LD_LIBRARY_PATH_VAR="SHLIB_PATH" 1449 ]) ;; 1450 IRIX-5.*) 1451 SHLIB_CFLAGS="" 1452 SHLIB_LD="ld -shared -rdata_shared" 1453 SHLIB_SUFFIX=".so" 1454 AC_LIBOBJ(mkstemp) 1455 AS_IF([test $doRpath = yes], [ 1456 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' 1457 LD_SEARCH_FLAGS='-rpath "${LIB_RUNTIME_DIR}"']) 1458 ;; 1459 IRIX-6.*) 1460 SHLIB_CFLAGS="" 1461 SHLIB_LD="ld -n32 -shared -rdata_shared" 1462 SHLIB_SUFFIX=".so" 1463 AS_IF([test $doRpath = yes], [ 1464 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' 1465 LD_SEARCH_FLAGS='-rpath "${LIB_RUNTIME_DIR}"']) 1466 AS_IF([test "$GCC" = yes], [ 1467 CFLAGS="$CFLAGS -mabi=n32" 1468 LDFLAGS="$LDFLAGS -mabi=n32" 1469 ], [ 1470 case $system in 1471 IRIX-6.3) 1472 # Use to build 6.2 compatible binaries on 6.3. 1473 CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" 1474 ;; 1475 *) 1476 CFLAGS="$CFLAGS -n32" 1477 ;; 1478 esac 1479 LDFLAGS="$LDFLAGS -n32" 1480 ]) 1481 ;; 1482 IRIX64-6.*) 1483 SHLIB_CFLAGS="" 1484 SHLIB_LD="ld -n32 -shared -rdata_shared" 1485 SHLIB_SUFFIX=".so" 1486 AS_IF([test $doRpath = yes], [ 1487 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' 1488 LD_SEARCH_FLAGS='-rpath "${LIB_RUNTIME_DIR}"']) 1489 1490 # Check to enable 64-bit flags for compiler/linker 1491 1492 AS_IF([test "$do64bit" = yes], [ 1493 AS_IF([test "$GCC" = yes], [ 1494 AC_MSG_WARN([64bit mode not supported by gcc]) 1495 ], [ 1496 do64bit_ok=yes 1497 SHLIB_LD="ld -64 -shared -rdata_shared" 1498 CFLAGS="$CFLAGS -64" 1499 LDFLAGS_ARCH="-64" 1500 ]) 1501 ]) 1502 ;; 1503 Linux*|GNU*|NetBSD-Debian|DragonFly-*|FreeBSD-*) 1504 SHLIB_CFLAGS="-fPIC" 1505 SHLIB_SUFFIX=".so" 1506 1507 # TEA specific: 1508 CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" 1509 1510 # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS 1511 SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS_DEFAULT} -shared' 1512 LDFLAGS="$LDFLAGS -Wl,--export-dynamic" 1513 1514 case $system in 1515 DragonFly-*|FreeBSD-*) 1516 AS_IF([test "${TCL_THREADS}" = "1"], [ 1517 # The -pthread needs to go in the LDFLAGS, not LIBS 1518 LIBS=`echo $LIBS | sed s/-pthread//` 1519 CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 1520 LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) 1521 ;; 1522 esac 1523 1524 AS_IF([test $doRpath = yes], [ 1525 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"']) 1526 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1527 AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) 1528 AS_IF([test $do64bit = yes], [ 1529 AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ 1530 hold_cflags=$CFLAGS 1531 CFLAGS="$CFLAGS -m64" 1532 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], 1533 [tcl_cv_cc_m64=yes],[tcl_cv_cc_m64=no]) 1534 CFLAGS=$hold_cflags]) 1535 AS_IF([test $tcl_cv_cc_m64 = yes], [ 1536 CFLAGS="$CFLAGS -m64" 1537 do64bit_ok=yes 1538 ]) 1539 ]) 1540 1541 # The combo of gcc + glibc has a bug related to inlining of 1542 # functions like strtod(). The -fno-builtin flag should address 1543 # this problem but it does not work. The -fno-inline flag is kind 1544 # of overkill but it works. Disable inlining only when one of the 1545 # files in compat/*.c is being linked in. 1546 1547 AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) 1548 ;; 1549 Lynx*) 1550 SHLIB_CFLAGS="-fPIC" 1551 SHLIB_SUFFIX=".so" 1552 CFLAGS_OPTIMIZE=-02 1553 SHLIB_LD='${CC} -shared' 1554 LD_FLAGS="-Wl,--export-dynamic" 1555 AS_IF([test $doRpath = yes], [ 1556 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' 1557 LD_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"']) 1558 ;; 1559 OpenBSD-*) 1560 arch=`arch -s` 1561 case "$arch" in 1562 alpha|sparc64) 1563 SHLIB_CFLAGS="-fPIC" 1564 ;; 1565 *) 1566 SHLIB_CFLAGS="-fpic" 1567 ;; 1568 esac 1569 SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared' 1570 SHLIB_SUFFIX=".so" 1571 AS_IF([test $doRpath = yes], [ 1572 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"']) 1573 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1574 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}' 1575 LDFLAGS="$LDFLAGS -Wl,-export-dynamic" 1576 CFLAGS_OPTIMIZE="-O2" 1577 # On OpenBSD: Compile with -pthread 1578 # Don't link with -lpthread 1579 LIBS=`echo $LIBS | sed s/-lpthread//` 1580 CFLAGS="$CFLAGS -pthread" 1581 # OpenBSD doesn't do version numbers with dots. 1582 UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' 1583 TCL_LIB_VERSIONS_OK=nodots 1584 ;; 1585 NetBSD-*) 1586 # NetBSD has ELF and can use 'cc -shared' to build shared libs 1587 SHLIB_CFLAGS="-fPIC" 1588 SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared' 1589 SHLIB_SUFFIX=".so" 1590 LDFLAGS="$LDFLAGS -export-dynamic" 1591 AS_IF([test $doRpath = yes], [ 1592 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"']) 1593 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1594 # The -pthread needs to go in the CFLAGS, not LIBS 1595 LIBS=`echo $LIBS | sed s/-pthread//` 1596 CFLAGS="$CFLAGS -pthread" 1597 LDFLAGS="$LDFLAGS -pthread" 1598 ;; 1599 Darwin-*) 1600 CFLAGS_OPTIMIZE="-Os" 1601 SHLIB_CFLAGS="-fno-common" 1602 # To avoid discrepancies between what headers configure sees during 1603 # preprocessing tests and compiling tests, move any -isysroot and 1604 # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: 1605 CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ 1606 awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ 1607 if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" 1608 CFLAGS="`echo " ${CFLAGS}" | \ 1609 awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ 1610 if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" 1611 AS_IF([test $do64bit = yes], [ 1612 case `arch` in 1613 ppc) 1614 AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], 1615 tcl_cv_cc_arch_ppc64, [ 1616 hold_cflags=$CFLAGS 1617 CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" 1618 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], 1619 [tcl_cv_cc_arch_ppc64=yes],[tcl_cv_cc_arch_ppc64=no]) 1620 CFLAGS=$hold_cflags]) 1621 AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ 1622 CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" 1623 do64bit_ok=yes 1624 ]);; 1625 i386) 1626 AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], 1627 tcl_cv_cc_arch_x86_64, [ 1628 hold_cflags=$CFLAGS 1629 CFLAGS="$CFLAGS -arch x86_64" 1630 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], 1631 [tcl_cv_cc_arch_x86_64=yes],[tcl_cv_cc_arch_x86_64=no]) 1632 CFLAGS=$hold_cflags]) 1633 AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ 1634 CFLAGS="$CFLAGS -arch x86_64" 1635 do64bit_ok=yes 1636 ]);; 1637 *) 1638 AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; 1639 esac 1640 ], [ 1641 # Check for combined 32-bit and 64-bit fat build 1642 AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ 1643 && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ 1644 fat_32_64=yes]) 1645 ]) 1646 # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS 1647 SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' 1648 AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ 1649 hold_ldflags=$LDFLAGS 1650 LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" 1651 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int i;]])], 1652 [tcl_cv_ld_single_module=yes],[tcl_cv_ld_single_module=no]) 1653 LDFLAGS=$hold_ldflags]) 1654 AS_IF([test $tcl_cv_ld_single_module = yes], [ 1655 SHLIB_LD="${SHLIB_LD} -Wl,-single_module" 1656 ]) 1657 # TEA specific: link shlib with current and compatibility version flags 1658 vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` 1659 SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" 1660 SHLIB_SUFFIX=".dylib" 1661 LDFLAGS="$LDFLAGS -headerpad_max_install_names" 1662 AC_CACHE_CHECK([if ld accepts -search_paths_first flag], 1663 tcl_cv_ld_search_paths_first, [ 1664 hold_ldflags=$LDFLAGS 1665 LDFLAGS="$LDFLAGS -Wl,-search_paths_first" 1666 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int i;]])], 1667 [tcl_cv_ld_search_paths_first=yes],[tcl_cv_ld_search_paths_first=no]) 1668 LDFLAGS=$hold_ldflags]) 1669 AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ 1670 LDFLAGS="$LDFLAGS -Wl,-search_paths_first" 1671 ]) 1672 AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ 1673 AC_DEFINE(MODULE_SCOPE, [__private_extern__], 1674 [Compiler support for module scope symbols]) 1675 tcl_cv_cc_visibility_hidden=yes 1676 ]) 1677 CC_SEARCH_FLAGS="" 1678 LD_SEARCH_FLAGS="" 1679 LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" 1680 # TEA specific: for combined 32 & 64 bit fat builds of Tk 1681 # extensions, verify that 64-bit build is possible. 1682 AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ 1683 AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ 1684 AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ 1685 for v in CFLAGS CPPFLAGS LDFLAGS; do 1686 eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' 1687 done 1688 CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" 1689 LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" 1690 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>]], [[XrmInitialize();]])], 1691 [tcl_cv_lib_x11_64=yes],[tcl_cv_lib_x11_64=no]) 1692 for v in CFLAGS CPPFLAGS LDFLAGS; do 1693 eval $v'="$hold_'$v'"' 1694 done]) 1695 ]) 1696 AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ 1697 AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ 1698 for v in CFLAGS CPPFLAGS LDFLAGS; do 1699 eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' 1700 done 1701 CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" 1702 LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" 1703 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <tk.h>]], [[Tk_InitStubs(NULL, "", 0);]])], 1704 [tcl_cv_lib_tk_64=yes],[tcl_cv_lib_tk_64=no]) 1705 for v in CFLAGS CPPFLAGS LDFLAGS; do 1706 eval $v'="$hold_'$v'"' 1707 done]) 1708 ]) 1709 # remove 64-bit arch flags from CFLAGS et al. if configuration 1710 # does not support 64-bit. 1711 AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ 1712 AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) 1713 for v in CFLAGS CPPFLAGS LDFLAGS; do 1714 eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' 1715 done]) 1716 ]) 1717 ;; 1718 OS/390-*) 1719 CFLAGS_OPTIMIZE="" # Optimizer is buggy 1720 AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h 1721 [Should OS/390 do the right thing with sockets?]) 1722 ;; 1723 OSF1-V*) 1724 # Digital OSF/1 1725 SHLIB_CFLAGS="" 1726 AS_IF([test "$SHARED_BUILD" = 1], [ 1727 SHLIB_LD='ld -shared -expect_unresolved "*"' 1728 ], [ 1729 SHLIB_LD='ld -non_shared -expect_unresolved "*"' 1730 ]) 1731 SHLIB_SUFFIX=".so" 1732 AS_IF([test $doRpath = yes], [ 1733 CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' 1734 LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) 1735 AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ 1736 CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) 1737 # see pthread_intro(3) for pthread support on osf1, k.furukawa 1738 CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" 1739 CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" 1740 LIBS=`echo $LIBS | sed s/-lpthreads//` 1741 AS_IF([test "$GCC" = yes], [ 1742 LIBS="$LIBS -lpthread -lmach -lexc" 1743 ], [ 1744 CFLAGS="$CFLAGS -pthread" 1745 LDFLAGS="$LDFLAGS -pthread" 1746 ]) 1747 ;; 1748 QNX-6*) 1749 # QNX RTP 1750 # This may work for all QNX, but it was only reported for v6. 1751 SHLIB_CFLAGS="-fPIC" 1752 SHLIB_LD="ld -Bshareable -x" 1753 SHLIB_LD_LIBS="" 1754 SHLIB_SUFFIX=".so" 1755 CC_SEARCH_FLAGS="" 1756 LD_SEARCH_FLAGS="" 1757 ;; 1758 SCO_SV-3.2*) 1759 AS_IF([test "$GCC" = yes], [ 1760 SHLIB_CFLAGS="-fPIC -melf" 1761 LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" 1762 ], [ 1763 SHLIB_CFLAGS="-Kpic -belf" 1764 LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" 1765 ]) 1766 SHLIB_LD="ld -G" 1767 SHLIB_LD_LIBS="" 1768 SHLIB_SUFFIX=".so" 1769 CC_SEARCH_FLAGS="" 1770 LD_SEARCH_FLAGS="" 1771 ;; 1772 SunOS-5.[[0-6]]) 1773 # Careful to not let 5.10+ fall into this case 1774 1775 # Note: If _REENTRANT isn't defined, then Solaris 1776 # won't define thread-safe library routines. 1777 1778 AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) 1779 AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, 1780 [Do we really want to follow the standard? Yes we do!]) 1781 1782 SHLIB_CFLAGS="-KPIC" 1783 SHLIB_SUFFIX=".so" 1784 AS_IF([test "$GCC" = yes], [ 1785 SHLIB_LD='${CC} -shared' 1786 CC_SEARCH_FLAGS='"-Wl,-R,${LIB_RUNTIME_DIR}"' 1787 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1788 ], [ 1789 SHLIB_LD="/usr/ccs/bin/ld -G -z text" 1790 CC_SEARCH_FLAGS='-R "${LIB_RUNTIME_DIR}"' 1791 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1792 ]) 1793 ;; 1794 SunOS-5*) 1795 # Note: If _REENTRANT isn't defined, then Solaris 1796 # won't define thread-safe library routines. 1797 1798 AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) 1799 AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, 1800 [Do we really want to follow the standard? Yes we do!]) 1801 1802 SHLIB_CFLAGS="-KPIC" 1803 1804 # Check to enable 64-bit flags for compiler/linker 1805 AS_IF([test "$do64bit" = yes], [ 1806 arch=`isainfo` 1807 AS_IF([test "$arch" = "sparcv9 sparc"], [ 1808 AS_IF([test "$GCC" = yes], [ 1809 AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ 1810 AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) 1811 ], [ 1812 do64bit_ok=yes 1813 CFLAGS="$CFLAGS -m64 -mcpu=v9" 1814 LDFLAGS="$LDFLAGS -m64 -mcpu=v9" 1815 SHLIB_CFLAGS="-fPIC" 1816 ]) 1817 ], [ 1818 do64bit_ok=yes 1819 AS_IF([test "$do64bitVIS" = yes], [ 1820 CFLAGS="$CFLAGS -xarch=v9a" 1821 LDFLAGS_ARCH="-xarch=v9a" 1822 ], [ 1823 CFLAGS="$CFLAGS -xarch=v9" 1824 LDFLAGS_ARCH="-xarch=v9" 1825 ]) 1826 # Solaris 64 uses this as well 1827 #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" 1828 ]) 1829 ], [AS_IF([test "$arch" = "amd64 i386"], [ 1830 AS_IF([test "$GCC" = yes], [ 1831 case $system in 1832 SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) 1833 do64bit_ok=yes 1834 CFLAGS="$CFLAGS -m64" 1835 LDFLAGS="$LDFLAGS -m64";; 1836 *) 1837 AC_MSG_WARN([64bit mode not supported with GCC on $system]);; 1838 esac 1839 ], [ 1840 do64bit_ok=yes 1841 case $system in 1842 SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) 1843 CFLAGS="$CFLAGS -m64" 1844 LDFLAGS="$LDFLAGS -m64";; 1845 *) 1846 CFLAGS="$CFLAGS -xarch=amd64" 1847 LDFLAGS="$LDFLAGS -xarch=amd64";; 1848 esac 1849 ]) 1850 ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) 1851 ]) 1852 1853 SHLIB_SUFFIX=".so" 1854 AS_IF([test "$GCC" = yes], [ 1855 SHLIB_LD='${CC} -shared' 1856 CC_SEARCH_FLAGS='"-Wl,-R,${LIB_RUNTIME_DIR}"' 1857 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} 1858 AS_IF([test "$do64bit_ok" = yes], [ 1859 AS_IF([test "$arch" = "sparcv9 sparc"], [ 1860 # We need to specify -static-libgcc or we need to 1861 # add the path to the sparv9 libgcc. 1862 # JH: static-libgcc is necessary for core Tcl, but may 1863 # not be necessary for extensions. 1864 SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" 1865 # for finding sparcv9 libgcc, get the regular libgcc 1866 # path, remove so name and append 'sparcv9' 1867 #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." 1868 #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" 1869 ], [AS_IF([test "$arch" = "amd64 i386"], [ 1870 # JH: static-libgcc is necessary for core Tcl, but may 1871 # not be necessary for extensions. 1872 SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" 1873 ])]) 1874 ]) 1875 ], [ 1876 case $system in 1877 SunOS-5.[[1-9]][[0-9]]*) 1878 # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS 1879 SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; 1880 *) 1881 SHLIB_LD='/usr/ccs/bin/ld -G -z text';; 1882 esac 1883 CC_SEARCH_FLAGS='"-Wl,-R,${LIB_RUNTIME_DIR}"' 1884 LD_SEARCH_FLAGS='-R "${LIB_RUNTIME_DIR}"' 1885 ]) 1886 ;; 1887 UNIX_SV* | UnixWare-5*) 1888 SHLIB_CFLAGS="-KPIC" 1889 SHLIB_LD='${CC} -G' 1890 SHLIB_LD_LIBS="" 1891 SHLIB_SUFFIX=".so" 1892 # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers 1893 # that don't grok the -Bexport option. Test that it does. 1894 AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ 1895 hold_ldflags=$LDFLAGS 1896 LDFLAGS="$LDFLAGS -Wl,-Bexport" 1897 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int i;]])], 1898 [tcl_cv_ld_Bexport=yes],[tcl_cv_ld_Bexport=no]) 1899 LDFLAGS=$hold_ldflags]) 1900 AS_IF([test $tcl_cv_ld_Bexport = yes], [ 1901 LDFLAGS="$LDFLAGS -Wl,-Bexport" 1902 ]) 1903 CC_SEARCH_FLAGS="" 1904 LD_SEARCH_FLAGS="" 1905 ;; 1906 esac 1907 1908 AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ 1909 AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) 1910 ]) 1911 1912dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so 1913dnl # until the end of configure, as configure's compile and link tests use 1914dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's 1915dnl # preprocessing tests use only CPPFLAGS. 1916 AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) 1917 1918 # Add in the arch flags late to ensure it wasn't removed. 1919 # Not necessary in TEA, but this is aligned with core 1920 LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" 1921 1922 # If we're running gcc, then change the C flags for compiling shared 1923 # libraries to the right flags for gcc, instead of those for the 1924 # standard manufacturer compiler. 1925 1926 AS_IF([test "$GCC" = yes], [ 1927 case $system in 1928 AIX-*) ;; 1929 BSD/OS*) ;; 1930 CYGWIN_*|MINGW32_*|MINGW64_*|MSYS_*) ;; 1931 IRIX*) ;; 1932 NetBSD-*|DragonFly-*|FreeBSD-*|OpenBSD-*) ;; 1933 Darwin-*) ;; 1934 SCO_SV-3.2*) ;; 1935 windows) ;; 1936 *) SHLIB_CFLAGS="-fPIC" ;; 1937 esac]) 1938 1939 AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ 1940 AC_DEFINE(MODULE_SCOPE, [extern], 1941 [No Compiler support for module scope symbols]) 1942 ]) 1943 1944 AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ 1945 # TEA specific: use PACKAGE_VERSION instead of VERSION 1946 SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) 1947 AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ 1948 # TEA specific: use PACKAGE_VERSION instead of VERSION 1949 UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) 1950 1951 if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then 1952 AC_CACHE_CHECK(for SEH support in compiler, 1953 tcl_cv_seh, 1954 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 1955#define WIN32_LEAN_AND_MEAN 1956#include <windows.h> 1957#undef WIN32_LEAN_AND_MEAN 1958 1959 int main(int argc, char** argv) { 1960 int a, b = 0; 1961 __try { 1962 a = 666 / b; 1963 } 1964 __except (EXCEPTION_EXECUTE_HANDLER) { 1965 return 0; 1966 } 1967 return 1; 1968 } 1969 ]])], 1970 [tcl_cv_seh=yes], 1971 [tcl_cv_seh=no], 1972 [tcl_cv_seh=no]) 1973 ) 1974 if test "$tcl_cv_seh" = "no" ; then 1975 AC_DEFINE(HAVE_NO_SEH, 1, 1976 [Defined when mingw does not support SEH]) 1977 fi 1978 1979 # 1980 # Check to see if the excpt.h include file provided contains the 1981 # definition for EXCEPTION_DISPOSITION; if not, which is the case 1982 # with Cygwin's version as of 2002-04-10, define it to be int, 1983 # sufficient for getting the current code to work. 1984 # 1985 AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, 1986 tcl_cv_eh_disposition, 1987 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 1988# define WIN32_LEAN_AND_MEAN 1989# include <windows.h> 1990# undef WIN32_LEAN_AND_MEAN 1991 ]], [[ 1992 EXCEPTION_DISPOSITION x; 1993 ]])], 1994 [tcl_cv_eh_disposition=yes], 1995 [tcl_cv_eh_disposition=no]) 1996 ) 1997 if test "$tcl_cv_eh_disposition" = "no" ; then 1998 AC_DEFINE(EXCEPTION_DISPOSITION, int, 1999 [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) 2000 fi 2001 2002 # Check to see if winnt.h defines CHAR, SHORT, and LONG 2003 # even if VOID has already been #defined. The win32api 2004 # used by mingw and cygwin is known to do this. 2005 2006 AC_CACHE_CHECK(for winnt.h that ignores VOID define, 2007 tcl_cv_winnt_ignore_void, 2008 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2009#define VOID void 2010#define WIN32_LEAN_AND_MEAN 2011#include <windows.h> 2012#undef WIN32_LEAN_AND_MEAN 2013 ]], [[ 2014 CHAR c; 2015 SHORT s; 2016 LONG l; 2017 ]])], 2018 [tcl_cv_winnt_ignore_void=yes], 2019 [tcl_cv_winnt_ignore_void=no]) 2020 ) 2021 if test "$tcl_cv_winnt_ignore_void" = "yes" ; then 2022 AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, 2023 [Defined when cygwin/mingw ignores VOID define in winnt.h]) 2024 fi 2025 fi 2026 2027 # See if the compiler supports casting to a union type. 2028 # This is used to stop gcc from printing a compiler 2029 # warning when initializing a union member. 2030 2031 AC_CACHE_CHECK(for cast to union support, 2032 tcl_cv_cast_to_union, 2033 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ 2034 union foo { int i; double d; }; 2035 union foo f = (union foo) (int) 0; 2036 ]])], 2037 [tcl_cv_cast_to_union=yes], 2038 [tcl_cv_cast_to_union=no]) 2039 ) 2040 if test "$tcl_cv_cast_to_union" = "yes"; then 2041 AC_DEFINE(HAVE_CAST_TO_UNION, 1, 2042 [Defined when compiler supports casting to union type.]) 2043 fi 2044 2045 AC_CHECK_HEADER(stdbool.h, [AC_DEFINE(HAVE_STDBOOL_H, 1, [Do we have <stdbool.h>?])],) 2046 2047 AC_SUBST(CFLAGS_DEBUG) 2048 AC_SUBST(CFLAGS_OPTIMIZE) 2049 AC_SUBST(CFLAGS_WARNING) 2050 AC_SUBST(LDFLAGS_DEBUG) 2051 AC_SUBST(LDFLAGS_OPTIMIZE) 2052 2053 AC_SUBST(STLIB_LD) 2054 AC_SUBST(SHLIB_LD) 2055 2056 AC_SUBST(SHLIB_LD_LIBS) 2057 AC_SUBST(SHLIB_CFLAGS) 2058 2059 AC_SUBST(LD_LIBRARY_PATH_VAR) 2060 2061 # These must be called after we do the basic CFLAGS checks and 2062 # verify any possible 64-bit or similar switches are necessary 2063 TEA_TCL_EARLY_FLAGS 2064 TEA_TCL_64BIT_FLAGS 2065]) 2066 2067#-------------------------------------------------------------------- 2068# TEA_SERIAL_PORT 2069# 2070# Determine which interface to use to talk to the serial port. 2071# Note that #include lines must begin in leftmost column for 2072# some compilers to recognize them as preprocessor directives, 2073# and some build environments have stdin not pointing at a 2074# pseudo-terminal (usually /dev/null instead.) 2075# 2076# Arguments: 2077# none 2078# 2079# Results: 2080# 2081# Defines only one of the following vars: 2082# HAVE_SYS_MODEM_H 2083# USE_TERMIOS 2084# USE_TERMIO 2085# USE_SGTTY 2086#-------------------------------------------------------------------- 2087 2088AC_DEFUN([TEA_SERIAL_PORT], [ 2089 AC_CHECK_HEADERS(sys/modem.h) 2090 AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ 2091 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2092#include <termios.h> 2093 2094int main() { 2095 struct termios t; 2096 if (tcgetattr(0, &t) == 0) { 2097 cfsetospeed(&t, 0); 2098 t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; 2099 return 0; 2100 } 2101 return 1; 2102}]])],[tcl_cv_api_serial=termios],[tcl_cv_api_serial=no],[tcl_cv_api_serial=no]) 2103 if test $tcl_cv_api_serial = no ; then 2104 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2105#include <termio.h> 2106 2107int main() { 2108 struct termio t; 2109 if (ioctl(0, TCGETA, &t) == 0) { 2110 t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; 2111 return 0; 2112 } 2113 return 1; 2114}]])],[tcl_cv_api_serial=termio],[tcl_cv_api_serial=no],[tcl_cv_api_serial=no]) 2115 fi 2116 if test $tcl_cv_api_serial = no ; then 2117 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2118#include <sgtty.h> 2119 2120int main() { 2121 struct sgttyb t; 2122 if (ioctl(0, TIOCGETP, &t) == 0) { 2123 t.sg_ospeed = 0; 2124 t.sg_flags |= ODDP | EVENP | RAW; 2125 return 0; 2126 } 2127 return 1; 2128}]])],[tcl_cv_api_serial=sgtty],[tcl_cv_api_serial=no],[tcl_cv_api_serial=no]) 2129 fi 2130 if test $tcl_cv_api_serial = no ; then 2131 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2132#include <termios.h> 2133#include <errno.h> 2134 2135int main() { 2136 struct termios t; 2137 if (tcgetattr(0, &t) == 0 2138 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { 2139 cfsetospeed(&t, 0); 2140 t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; 2141 return 0; 2142 } 2143 return 1; 2144}]])],[tcl_cv_api_serial=termios],[tcl_cv_api_serial=no],[tcl_cv_api_serial=no]) 2145 fi 2146 if test $tcl_cv_api_serial = no; then 2147 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2148#include <termio.h> 2149#include <errno.h> 2150 2151int main() { 2152 struct termio t; 2153 if (ioctl(0, TCGETA, &t) == 0 2154 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { 2155 t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; 2156 return 0; 2157 } 2158 return 1; 2159 }]])],[tcl_cv_api_serial=termio],[tcl_cv_api_serial=no],[tcl_cv_api_serial=no]) 2160 fi 2161 if test $tcl_cv_api_serial = no; then 2162 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2163#include <sgtty.h> 2164#include <errno.h> 2165 2166int main() { 2167 struct sgttyb t; 2168 if (ioctl(0, TIOCGETP, &t) == 0 2169 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { 2170 t.sg_ospeed = 0; 2171 t.sg_flags |= ODDP | EVENP | RAW; 2172 return 0; 2173 } 2174 return 1; 2175}]])],[tcl_cv_api_serial=sgtty],[tcl_cv_api_serial=none],[tcl_cv_api_serial=none]) 2176 fi]) 2177 case $tcl_cv_api_serial in 2178 termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; 2179 termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; 2180 sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; 2181 esac 2182]) 2183 2184#-------------------------------------------------------------------- 2185# TEA_PATH_X 2186# 2187# Locate the X11 header files and the X11 library archive. Try 2188# the ac_path_x macro first, but if it doesn't find the X stuff 2189# (e.g. because there's no xmkmf program) then check through 2190# a list of possible directories. Under some conditions the 2191# autoconf macro will return an include directory that contains 2192# no include files, so double-check its result just to be safe. 2193# 2194# This should be called after TEA_CONFIG_CFLAGS as setting the 2195# LIBS line can confuse some configure macro magic. 2196# 2197# Arguments: 2198# none 2199# 2200# Results: 2201# 2202# Sets the following vars: 2203# XINCLUDES 2204# XLIBSW 2205# PKG_LIBS (appends to) 2206#-------------------------------------------------------------------- 2207 2208AC_DEFUN([TEA_PATH_X], [ 2209 if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then 2210 TEA_PATH_UNIX_X 2211 fi 2212]) 2213 2214AC_DEFUN([TEA_PATH_UNIX_X], [ 2215 AC_PATH_X 2216 not_really_there="" 2217 if test "$no_x" = ""; then 2218 if test "$x_includes" = ""; then 2219 AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <X11/Xlib.h>]])],[],[not_really_there="yes"]) 2220 else 2221 if test ! -r $x_includes/X11/Xlib.h; then 2222 not_really_there="yes" 2223 fi 2224 fi 2225 fi 2226 if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then 2227 AC_MSG_CHECKING([for X11 header files]) 2228 found_xincludes="no" 2229 AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <X11/Xlib.h>]])],[found_xincludes="yes"],[found_xincludes="no"]) 2230 if test "$found_xincludes" = "no"; then 2231 dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" 2232 for i in $dirs ; do 2233 if test -r $i/X11/Xlib.h; then 2234 AC_MSG_RESULT([$i]) 2235 XINCLUDES=" -I$i" 2236 found_xincludes="yes" 2237 break 2238 fi 2239 done 2240 fi 2241 else 2242 if test "$x_includes" != ""; then 2243 XINCLUDES="-I$x_includes" 2244 found_xincludes="yes" 2245 fi 2246 fi 2247 if test "$found_xincludes" = "no"; then 2248 AC_MSG_RESULT([couldn't find any!]) 2249 fi 2250 2251 if test "$no_x" = yes; then 2252 AC_MSG_CHECKING([for X11 libraries]) 2253 XLIBSW=nope 2254 dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" 2255 for i in $dirs ; do 2256 if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then 2257 AC_MSG_RESULT([$i]) 2258 XLIBSW="-L$i -lX11" 2259 x_libraries="$i" 2260 break 2261 fi 2262 done 2263 else 2264 if test "$x_libraries" = ""; then 2265 XLIBSW=-lX11 2266 else 2267 XLIBSW="-L$x_libraries -lX11" 2268 fi 2269 fi 2270 if test "$XLIBSW" = nope ; then 2271 AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) 2272 fi 2273 if test "$XLIBSW" = nope ; then 2274 AC_MSG_RESULT([could not find any! Using -lX11.]) 2275 XLIBSW=-lX11 2276 fi 2277 # TEA specific: 2278 if test x"${XLIBSW}" != x ; then 2279 PKG_LIBS="${PKG_LIBS} ${XLIBSW}" 2280 fi 2281]) 2282 2283#-------------------------------------------------------------------- 2284# TEA_BLOCKING_STYLE 2285# 2286# The statements below check for systems where POSIX-style 2287# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. 2288# On these systems (mostly older ones), use the old BSD-style 2289# FIONBIO approach instead. 2290# 2291# Arguments: 2292# none 2293# 2294# Results: 2295# 2296# Defines some of the following vars: 2297# HAVE_SYS_IOCTL_H 2298# HAVE_SYS_FILIO_H 2299# USE_FIONBIO 2300# O_NONBLOCK 2301#-------------------------------------------------------------------- 2302 2303AC_DEFUN([TEA_BLOCKING_STYLE], [ 2304 AC_CHECK_HEADERS(sys/ioctl.h) 2305 AC_CHECK_HEADERS(sys/filio.h) 2306 TEA_CONFIG_SYSTEM 2307 AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) 2308 case $system in 2309 OSF*) 2310 AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) 2311 AC_MSG_RESULT([FIONBIO]) 2312 ;; 2313 *) 2314 AC_MSG_RESULT([O_NONBLOCK]) 2315 ;; 2316 esac 2317]) 2318 2319#-------------------------------------------------------------------- 2320# TEA_TIME_HANDLER 2321# 2322# Checks how the system deals with time.h, what time structures 2323# are used on the system, and what fields the structures have. 2324# 2325# Arguments: 2326# none 2327# 2328# Results: 2329# 2330# Defines some of the following vars: 2331# USE_DELTA_FOR_TZ 2332# HAVE_TM_GMTOFF 2333# HAVE_TM_TZADJ 2334# HAVE_TIMEZONE_VAR 2335# 2336#-------------------------------------------------------------------- 2337 2338AC_DEFUN([TEA_TIME_HANDLER], [ 2339 AC_CHECK_HEADERS(sys/time.h) 2340 AC_HEADER_TIME 2341 AC_STRUCT_TIMEZONE 2342 2343 AC_CHECK_FUNCS(gmtime_r localtime_r mktime) 2344 2345 AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ 2346 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[struct tm tm; (void)tm.tm_tzadj;]])], 2347 [tcl_cv_member_tm_tzadj=yes], 2348 [tcl_cv_member_tm_tzadj=no])]) 2349 if test $tcl_cv_member_tm_tzadj = yes ; then 2350 AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) 2351 fi 2352 2353 AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ 2354 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h>]], [[struct tm tm; (void)tm.tm_gmtoff;]])], 2355 [tcl_cv_member_tm_gmtoff=yes], 2356 [tcl_cv_member_tm_gmtoff=no])]) 2357 if test $tcl_cv_member_tm_gmtoff = yes ; then 2358 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) 2359 fi 2360 2361 # 2362 # Its important to include time.h in this check, as some systems 2363 # (like convex) have timezone functions, etc. 2364 # 2365 AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ 2366 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h> 2367#include <stdlib.h>]], 2368 [[extern long timezone; 2369 timezone += 1; 2370 exit (0);]])], 2371 [tcl_cv_timezone_long=yes], [tcl_cv_timezone_long=no])]) 2372 if test $tcl_cv_timezone_long = yes ; then 2373 AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) 2374 else 2375 # 2376 # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. 2377 # 2378 AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ 2379 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <time.h> 2380#include <stdlib.h>]], 2381 [[extern time_t timezone; 2382 timezone += 1; 2383 exit (0);]])], 2384 [tcl_cv_timezone_time=yes], [tcl_cv_timezone_time=no])]) 2385 if test $tcl_cv_timezone_time = yes ; then 2386 AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) 2387 fi 2388 fi 2389]) 2390 2391#-------------------------------------------------------------------- 2392# TEA_BUGGY_STRTOD 2393# 2394# Under Solaris 2.4, strtod returns the wrong value for the 2395# terminating character under some conditions. Check for this 2396# and if the problem exists use a substitute procedure 2397# "fixstrtod" (provided by Tcl) that corrects the error. 2398# Also, on Compaq's Tru64 Unix 5.0, 2399# strtod(" ") returns 0.0 instead of a failure to convert. 2400# 2401# Arguments: 2402# none 2403# 2404# Results: 2405# 2406# Might defines some of the following vars: 2407# strtod (=fixstrtod) 2408#-------------------------------------------------------------------- 2409 2410AC_DEFUN([TEA_BUGGY_STRTOD], [ 2411 AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) 2412 if test "$tcl_strtod" = 1; then 2413 AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ 2414 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2415 #include <stdlib.h> 2416 extern double strtod(); 2417 int main() { 2418 char *infString="Inf", *nanString="NaN", *spaceString=" "; 2419 char *term; 2420 double value; 2421 value = strtod(infString, &term); 2422 if ((term != infString) && (term[-1] == 0)) { 2423 exit(1); 2424 } 2425 value = strtod(nanString, &term); 2426 if ((term != nanString) && (term[-1] == 0)) { 2427 exit(1); 2428 } 2429 value = strtod(spaceString, &term); 2430 if (term == (spaceString+1)) { 2431 exit(1); 2432 } 2433 exit(0); 2434 }]])], [tcl_cv_strtod_buggy=ok], [tcl_cv_strtod_buggy=buggy], 2435 [tcl_cv_strtod_buggy=buggy])]) 2436 if test "$tcl_cv_strtod_buggy" = buggy; then 2437 AC_LIBOBJ([fixstrtod]) 2438 USE_COMPAT=1 2439 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) 2440 fi 2441 fi 2442]) 2443 2444#-------------------------------------------------------------------- 2445# TEA_TCL_LINK_LIBS 2446# 2447# Search for the libraries needed to link the Tcl shell. 2448# Things like the math library (-lm), socket stuff (-lsocket vs. 2449# -lnsl), zlib (-lz) and libtommath (-ltommath) are dealt with here. 2450# 2451# Arguments: 2452# None. 2453# 2454# Results: 2455# 2456# Might append to the following vars: 2457# LIBS 2458# MATH_LIBS 2459# 2460# Might define the following vars: 2461# HAVE_NET_ERRNO_H 2462# 2463#-------------------------------------------------------------------- 2464 2465AC_DEFUN([TEA_TCL_LINK_LIBS], [ 2466 #-------------------------------------------------------------------- 2467 # On a few very rare systems, all of the libm.a stuff is 2468 # already in libc.a. Set compiler flags accordingly. 2469 #-------------------------------------------------------------------- 2470 2471 AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") 2472 2473 #-------------------------------------------------------------------- 2474 # Interactive UNIX requires -linet instead of -lsocket, plus it 2475 # needs net/errno.h to define the socket-related error codes. 2476 #-------------------------------------------------------------------- 2477 2478 AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) 2479 AC_CHECK_HEADER(net/errno.h, [ 2480 AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have <net/errno.h>?])]) 2481 2482 #-------------------------------------------------------------------- 2483 # Check for the existence of the -lsocket and -lnsl libraries. 2484 # The order here is important, so that they end up in the right 2485 # order in the command line generated by make. Here are some 2486 # special considerations: 2487 # 1. Use "connect" and "accept" to check for -lsocket, and 2488 # "gethostbyname" to check for -lnsl. 2489 # 2. Use each function name only once: can't redo a check because 2490 # autoconf caches the results of the last check and won't redo it. 2491 # 3. Use -lnsl and -lsocket only if they supply procedures that 2492 # aren't already present in the normal libraries. This is because 2493 # IRIX 5.2 has libraries, but they aren't needed and they're 2494 # bogus: they goof up name resolution if used. 2495 # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. 2496 # To get around this problem, check for both libraries together 2497 # if -lsocket doesn't work by itself. 2498 #-------------------------------------------------------------------- 2499 2500 tcl_checkBoth=0 2501 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) 2502 if test "$tcl_checkSocket" = 1; then 2503 AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, 2504 LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) 2505 fi 2506 if test "$tcl_checkBoth" = 1; then 2507 tk_oldLibs=$LIBS 2508 LIBS="$LIBS -lsocket -lnsl" 2509 AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) 2510 fi 2511 AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, 2512 [LIBS="$LIBS -lnsl"])]) 2513 AC_CHECK_FUNC(mp_log_u32, , [AC_CHECK_LIB(tommath, mp_log_u32, 2514 [LIBS="$LIBS -ltommath"])]) 2515 AC_CHECK_FUNC(deflateSetHeader, , [AC_CHECK_LIB(z, deflateSetHeader, 2516 [LIBS="$LIBS -lz"])]) 2517]) 2518 2519#-------------------------------------------------------------------- 2520# TEA_TCL_EARLY_FLAGS 2521# 2522# Check for what flags are needed to be passed so the correct OS 2523# features are available. 2524# 2525# Arguments: 2526# None 2527# 2528# Results: 2529# 2530# Might define the following vars: 2531# _ISOC99_SOURCE 2532# _LARGEFILE64_SOURCE 2533# _LARGEFILE_SOURCE64 2534# 2535#-------------------------------------------------------------------- 2536 2537AC_DEFUN([TEA_TCL_EARLY_FLAG],[ 2538 AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), 2539 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$2]], [[$3]])], 2540 [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#define ]$1[ 1 2541]$2]], [[$3]])], 2542 [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, 2543 [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)])) 2544 if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then 2545 AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) 2546 tcl_flags="$tcl_flags $1" 2547 fi 2548]) 2549 2550AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ 2551 AC_MSG_CHECKING([for required early compiler flags]) 2552 tcl_flags="" 2553 TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>], 2554 [char *p = (char *)strtoll; char *q = (char *)strtoull;]) 2555 TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>], 2556 [struct stat64 buf; int i = stat64("/", &buf);]) 2557 TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>], 2558 [char *p = (char *)open64;]) 2559 if test "x${tcl_flags}" = "x" ; then 2560 AC_MSG_RESULT([none]) 2561 else 2562 AC_MSG_RESULT([${tcl_flags}]) 2563 fi 2564]) 2565 2566#-------------------------------------------------------------------- 2567# TEA_TCL_64BIT_FLAGS 2568# 2569# Check for what is defined in the way of 64-bit features. 2570# 2571# Arguments: 2572# None 2573# 2574# Results: 2575# 2576# Might define the following vars: 2577# TCL_WIDE_INT_IS_LONG 2578# TCL_WIDE_INT_TYPE 2579# HAVE_STRUCT_DIRENT64, HAVE_DIR64 2580# HAVE_STRUCT_STAT64 2581# HAVE_TYPE_OFF64_T 2582# 2583#-------------------------------------------------------------------- 2584 2585AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ 2586 AC_MSG_CHECKING([for 64-bit integer type]) 2587 AC_CACHE_VAL(tcl_cv_type_64bit,[ 2588 tcl_cv_type_64bit=none 2589 # See if the compiler knows natively about __int64 2590 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[__int64 value = (__int64) 0;]])], 2591 [tcl_type_64bit=__int64],[tcl_type_64bit="long long"]) 2592 # See if we could use long anyway Note that we substitute in the 2593 # type that is our current guess for a 64-bit type inside this check 2594 # program, so it should be modified only carefully... 2595 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[switch (0) { 2596 case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; 2597 }]])],[tcl_cv_type_64bit=${tcl_type_64bit}],[])]) 2598 if test "${tcl_cv_type_64bit}" = none ; then 2599 AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Do 'long' and 'long long' have the same size (64-bit)?]) 2600 AC_MSG_RESULT([yes]) 2601 elif test "${tcl_cv_type_64bit}" = "__int64" \ 2602 -a "${TEA_PLATFORM}" = "windows" ; then 2603 # TEA specific: We actually want to use the default tcl.h checks in 2604 # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* 2605 AC_MSG_RESULT([using Tcl header defaults]) 2606 else 2607 AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, 2608 [What type should be used to define wide integers?]) 2609 AC_MSG_RESULT([${tcl_cv_type_64bit}]) 2610 2611 # Now check for auxiliary declarations 2612 AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ 2613 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 2614#include <dirent.h>]], [[struct dirent64 p;]])], 2615 [tcl_cv_struct_dirent64=yes],[tcl_cv_struct_dirent64=no])]) 2616 if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then 2617 AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in <sys/types.h>?]) 2618 fi 2619 2620 AC_CACHE_CHECK([for DIR64], tcl_cv_DIR64,[ 2621 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 2622#include <dirent.h>]], [[struct dirent64 *p; DIR64 d = opendir64("."); 2623 p = readdir64(d); rewinddir64(d); closedir64(d);]])], 2624 [tcl_cv_DIR64=yes], [tcl_cv_DIR64=no])]) 2625 if test "x${tcl_cv_DIR64}" = "xyes" ; then 2626 AC_DEFINE(HAVE_DIR64, 1, [Is 'DIR64' in <sys/types.h>?]) 2627 fi 2628 2629 AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ 2630 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/stat.h>]], [[struct stat64 p; 2631]])], 2632 [tcl_cv_struct_stat64=yes], [tcl_cv_struct_stat64=no])]) 2633 if test "x${tcl_cv_struct_stat64}" = "xyes" ; then 2634 AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in <sys/stat.h>?]) 2635 fi 2636 2637 AC_CHECK_FUNCS(open64 lseek64) 2638 AC_MSG_CHECKING([for off64_t]) 2639 AC_CACHE_VAL(tcl_cv_type_off64_t,[ 2640 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]], [[off64_t offset; 2641]])], 2642 [tcl_cv_type_off64_t=yes], [tcl_cv_type_off64_t=no])]) 2643 dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the 2644 dnl functions lseek64 and open64 are defined. 2645 if test "x${tcl_cv_type_off64_t}" = "xyes" && \ 2646 test "x${ac_cv_func_lseek64}" = "xyes" && \ 2647 test "x${ac_cv_func_open64}" = "xyes" ; then 2648 AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in <sys/types.h>?]) 2649 AC_MSG_RESULT([yes]) 2650 else 2651 AC_MSG_RESULT([no]) 2652 fi 2653 fi 2654]) 2655 2656## 2657## Here ends the standard Tcl configuration bits and starts the 2658## TEA specific functions 2659## 2660 2661#------------------------------------------------------------------------ 2662# TEA_INIT -- 2663# 2664# Init various Tcl Extension Architecture (TEA) variables. 2665# This should be the first called TEA_* macro. 2666# 2667# Arguments: 2668# none 2669# 2670# Results: 2671# 2672# Defines and substs the following vars: 2673# CYGPATH 2674# EXEEXT 2675# Defines only: 2676# TEA_VERSION 2677# TEA_INITED 2678# TEA_PLATFORM (windows or unix) 2679# 2680# "cygpath" is used on windows to generate native path names for include 2681# files. These variables should only be used with the compiler and linker 2682# since they generate native path names. 2683# 2684# EXEEXT 2685# Select the executable extension based on the host type. This 2686# is a lightweight replacement for AC_EXEEXT that doesn't require 2687# a compiler. 2688#------------------------------------------------------------------------ 2689 2690AC_DEFUN([TEA_INIT], [ 2691 TEA_VERSION="3.13" 2692 2693 AC_MSG_CHECKING([TEA configuration]) 2694 if test x"${PACKAGE_NAME}" = x ; then 2695 AC_MSG_ERROR([ 2696The PACKAGE_NAME variable must be defined by your TEA configure.ac]) 2697 fi 2698 AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) 2699 2700 # If the user did not set CFLAGS, set it now to keep macros 2701 # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". 2702 if test "${CFLAGS+set}" != "set" ; then 2703 CFLAGS="" 2704 fi 2705 2706 case "`uname -s`" in 2707 *win32*|*WIN32*|*MINGW32_*|*MINGW64_*|*MSYS_*) 2708 AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo) 2709 EXEEXT=".exe" 2710 TEA_PLATFORM="windows" 2711 ;; 2712 *CYGWIN_*) 2713 EXEEXT=".exe" 2714 # CYGPATH and TEA_PLATFORM are determined later in LOAD_TCLCONFIG 2715 ;; 2716 *) 2717 CYGPATH=echo 2718 # Maybe we are cross-compiling.... 2719 case ${host_alias} in 2720 *mingw32*) 2721 EXEEXT=".exe" 2722 TEA_PLATFORM="windows" 2723 ;; 2724 *) 2725 EXEEXT="" 2726 TEA_PLATFORM="unix" 2727 ;; 2728 esac 2729 ;; 2730 esac 2731 2732 # Check if exec_prefix is set. If not use fall back to prefix. 2733 # Note when adjusted, so that TEA_PREFIX can correct for this. 2734 # This is needed for recursive configures, since autoconf propagates 2735 # $prefix, but not $exec_prefix (doh!). 2736 if test x$exec_prefix = xNONE ; then 2737 exec_prefix_default=yes 2738 exec_prefix=$prefix 2739 fi 2740 2741 AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) 2742 2743 AC_SUBST(EXEEXT) 2744 AC_SUBST(CYGPATH) 2745 2746 # This package name must be replaced statically for AC_SUBST to work 2747 AC_SUBST(PKG_LIB_FILE) 2748 AC_SUBST(PKG_LIB_FILE8) 2749 AC_SUBST(PKG_LIB_FILE9) 2750 # Substitute STUB_LIB_FILE in case package creates a stub library too. 2751 AC_SUBST(PKG_STUB_LIB_FILE) 2752 2753 # We AC_SUBST these here to ensure they are subst'ed, 2754 # in case the user doesn't call TEA_ADD_... 2755 AC_SUBST(PKG_STUB_SOURCES) 2756 AC_SUBST(PKG_STUB_OBJECTS) 2757 AC_SUBST(PKG_TCL_SOURCES) 2758 AC_SUBST(PKG_HEADERS) 2759 AC_SUBST(PKG_INCLUDES) 2760 AC_SUBST(PKG_LIBS) 2761 AC_SUBST(PKG_CFLAGS) 2762 2763 # Configure the installer. 2764 TEA_INSTALLER 2765]) 2766 2767#------------------------------------------------------------------------ 2768# TEA_ADD_SOURCES -- 2769# 2770# Specify one or more source files. Users should check for 2771# the right platform before adding to their list. 2772# It is not important to specify the directory, as long as it is 2773# in the generic, win or unix subdirectory of $(srcdir). 2774# 2775# Arguments: 2776# one or more file names 2777# 2778# Results: 2779# 2780# Defines and substs the following vars: 2781# PKG_SOURCES 2782# PKG_OBJECTS 2783#------------------------------------------------------------------------ 2784AC_DEFUN([TEA_ADD_SOURCES], [ 2785 vars="$@" 2786 for i in $vars; do 2787 case $i in 2788 [\$]*) 2789 # allow $-var names 2790 PKG_SOURCES="$PKG_SOURCES $i" 2791 PKG_OBJECTS="$PKG_OBJECTS $i" 2792 ;; 2793 *) 2794 # check for existence - allows for generic/win/unix VPATH 2795 # To add more dirs here (like 'src'), you have to update VPATH 2796 # in Makefile.in as well 2797 if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ 2798 -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ 2799 -a ! -f "${srcdir}/macosx/$i" \ 2800 ; then 2801 AC_MSG_ERROR([could not find source file '$i']) 2802 fi 2803 PKG_SOURCES="$PKG_SOURCES $i" 2804 # this assumes it is in a VPATH dir 2805 i=`basename $i` 2806 # handle user calling this before or after TEA_SETUP_COMPILER 2807 if test x"${OBJEXT}" != x ; then 2808 j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" 2809 else 2810 j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" 2811 fi 2812 PKG_OBJECTS="$PKG_OBJECTS $j" 2813 ;; 2814 esac 2815 done 2816 AC_SUBST(PKG_SOURCES) 2817 AC_SUBST(PKG_OBJECTS) 2818]) 2819 2820#------------------------------------------------------------------------ 2821# TEA_ADD_STUB_SOURCES -- 2822# 2823# Specify one or more source files. Users should check for 2824# the right platform before adding to their list. 2825# It is not important to specify the directory, as long as it is 2826# in the generic, win or unix subdirectory of $(srcdir). 2827# 2828# Arguments: 2829# one or more file names 2830# 2831# Results: 2832# 2833# Defines and substs the following vars: 2834# PKG_STUB_SOURCES 2835# PKG_STUB_OBJECTS 2836#------------------------------------------------------------------------ 2837AC_DEFUN([TEA_ADD_STUB_SOURCES], [ 2838 vars="$@" 2839 for i in $vars; do 2840 # check for existence - allows for generic/win/unix VPATH 2841 if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ 2842 -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ 2843 -a ! -f "${srcdir}/macosx/$i" \ 2844 ; then 2845 AC_MSG_ERROR([could not find stub source file '$i']) 2846 fi 2847 PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" 2848 # this assumes it is in a VPATH dir 2849 i=`basename $i` 2850 # handle user calling this before or after TEA_SETUP_COMPILER 2851 if test x"${OBJEXT}" != x ; then 2852 j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" 2853 else 2854 j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" 2855 fi 2856 PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" 2857 done 2858 AC_SUBST(PKG_STUB_SOURCES) 2859 AC_SUBST(PKG_STUB_OBJECTS) 2860]) 2861 2862#------------------------------------------------------------------------ 2863# TEA_ADD_TCL_SOURCES -- 2864# 2865# Specify one or more Tcl source files. These should be platform 2866# independent runtime files. 2867# 2868# Arguments: 2869# one or more file names 2870# 2871# Results: 2872# 2873# Defines and substs the following vars: 2874# PKG_TCL_SOURCES 2875#------------------------------------------------------------------------ 2876AC_DEFUN([TEA_ADD_TCL_SOURCES], [ 2877 vars="$@" 2878 for i in $vars; do 2879 # check for existence, be strict because it is installed 2880 if test ! -f "${srcdir}/$i" ; then 2881 AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) 2882 fi 2883 PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" 2884 done 2885 AC_SUBST(PKG_TCL_SOURCES) 2886]) 2887 2888#------------------------------------------------------------------------ 2889# TEA_ADD_HEADERS -- 2890# 2891# Specify one or more source headers. Users should check for 2892# the right platform before adding to their list. 2893# 2894# Arguments: 2895# one or more file names 2896# 2897# Results: 2898# 2899# Defines and substs the following vars: 2900# PKG_HEADERS 2901#------------------------------------------------------------------------ 2902AC_DEFUN([TEA_ADD_HEADERS], [ 2903 vars="$@" 2904 for i in $vars; do 2905 # check for existence, be strict because it is installed 2906 if test ! -f "${srcdir}/$i" ; then 2907 AC_MSG_ERROR([could not find header file '${srcdir}/$i']) 2908 fi 2909 PKG_HEADERS="$PKG_HEADERS $i" 2910 done 2911 AC_SUBST(PKG_HEADERS) 2912]) 2913 2914#------------------------------------------------------------------------ 2915# TEA_ADD_INCLUDES -- 2916# 2917# Specify one or more include dirs. Users should check for 2918# the right platform before adding to their list. 2919# 2920# Arguments: 2921# one or more file names 2922# 2923# Results: 2924# 2925# Defines and substs the following vars: 2926# PKG_INCLUDES 2927#------------------------------------------------------------------------ 2928AC_DEFUN([TEA_ADD_INCLUDES], [ 2929 vars="$@" 2930 for i in $vars; do 2931 PKG_INCLUDES="$PKG_INCLUDES $i" 2932 done 2933 AC_SUBST(PKG_INCLUDES) 2934]) 2935 2936#------------------------------------------------------------------------ 2937# TEA_ADD_LIBS -- 2938# 2939# Specify one or more libraries. Users should check for 2940# the right platform before adding to their list. For Windows, 2941# libraries provided in "foo.lib" format will be converted to 2942# "-lfoo" when using GCC (mingw). 2943# 2944# Arguments: 2945# one or more file names 2946# 2947# Results: 2948# 2949# Defines and substs the following vars: 2950# PKG_LIBS 2951#------------------------------------------------------------------------ 2952AC_DEFUN([TEA_ADD_LIBS], [ 2953 vars="$@" 2954 for i in $vars; do 2955 if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then 2956 # Convert foo.lib to -lfoo for GCC. No-op if not *.lib 2957 i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.[[lL]][[iI]][[bB]][$]/-l\1/'` 2958 fi 2959 PKG_LIBS="$PKG_LIBS $i" 2960 done 2961 AC_SUBST(PKG_LIBS) 2962]) 2963 2964#------------------------------------------------------------------------ 2965# TEA_ADD_CFLAGS -- 2966# 2967# Specify one or more CFLAGS. Users should check for 2968# the right platform before adding to their list. 2969# 2970# Arguments: 2971# one or more file names 2972# 2973# Results: 2974# 2975# Defines and substs the following vars: 2976# PKG_CFLAGS 2977#------------------------------------------------------------------------ 2978AC_DEFUN([TEA_ADD_CFLAGS], [ 2979 PKG_CFLAGS="$PKG_CFLAGS $@" 2980 AC_SUBST(PKG_CFLAGS) 2981]) 2982 2983#------------------------------------------------------------------------ 2984# TEA_ADD_CLEANFILES -- 2985# 2986# Specify one or more CLEANFILES. 2987# 2988# Arguments: 2989# one or more file names to clean target 2990# 2991# Results: 2992# 2993# Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG 2994#------------------------------------------------------------------------ 2995AC_DEFUN([TEA_ADD_CLEANFILES], [ 2996 CLEANFILES="$CLEANFILES $@" 2997]) 2998 2999#------------------------------------------------------------------------ 3000# TEA_PREFIX -- 3001# 3002# Handle the --prefix=... option by defaulting to what Tcl gave 3003# 3004# Arguments: 3005# none 3006# 3007# Results: 3008# 3009# If --prefix or --exec-prefix was not specified, $prefix and 3010# $exec_prefix will be set to the values given to Tcl when it was 3011# configured. 3012#------------------------------------------------------------------------ 3013AC_DEFUN([TEA_PREFIX], [ 3014 if test "${prefix}" = "NONE"; then 3015 prefix_default=yes 3016 if test x"${TCL_PREFIX}" != x; then 3017 AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) 3018 prefix=${TCL_PREFIX} 3019 else 3020 AC_MSG_NOTICE([--prefix defaulting to /usr/local]) 3021 prefix=/usr/local 3022 fi 3023 fi 3024 if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ 3025 -o x"${exec_prefix_default}" = x"yes" ; then 3026 if test x"${TCL_EXEC_PREFIX}" != x; then 3027 AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) 3028 exec_prefix=${TCL_EXEC_PREFIX} 3029 else 3030 AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) 3031 exec_prefix=$prefix 3032 fi 3033 fi 3034]) 3035 3036#------------------------------------------------------------------------ 3037# TEA_SETUP_COMPILER_CC -- 3038# 3039# Do compiler checks the way we want. This is just a replacement 3040# for AC_PROG_CC in TEA configure.ac files to make them cleaner. 3041# 3042# Arguments: 3043# none 3044# 3045# Results: 3046# 3047# Sets up CC var and other standard bits we need to make executables. 3048#------------------------------------------------------------------------ 3049AC_DEFUN([TEA_SETUP_COMPILER_CC], [ 3050 # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) 3051 # in this macro, they need to go into TEA_SETUP_COMPILER instead. 3052 3053 AC_PROG_CC 3054 AC_PROG_CPP 3055 3056 #-------------------------------------------------------------------- 3057 # Checks to see if the make program sets the $MAKE variable. 3058 #-------------------------------------------------------------------- 3059 3060 AC_PROG_MAKE_SET 3061 3062 #-------------------------------------------------------------------- 3063 # Find ranlib 3064 #-------------------------------------------------------------------- 3065 3066 AC_CHECK_TOOL(RANLIB, ranlib) 3067 3068 #-------------------------------------------------------------------- 3069 # Determines the correct binary file extension (.o, .obj, .exe etc.) 3070 #-------------------------------------------------------------------- 3071 3072 AC_OBJEXT 3073 AC_EXEEXT 3074]) 3075 3076#------------------------------------------------------------------------ 3077# TEA_SETUP_COMPILER -- 3078# 3079# Do compiler checks that use the compiler. This must go after 3080# TEA_SETUP_COMPILER_CC, which does the actual compiler check. 3081# 3082# Arguments: 3083# none 3084# 3085# Results: 3086# 3087# Sets up CC var and other standard bits we need to make executables. 3088#------------------------------------------------------------------------ 3089AC_DEFUN([TEA_SETUP_COMPILER], [ 3090 # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. 3091 AC_REQUIRE([TEA_SETUP_COMPILER_CC]) 3092 3093 #------------------------------------------------------------------------ 3094 # If we're using GCC, see if the compiler understands -pipe. If so, use it. 3095 # It makes compiling go faster. (This is only a performance feature.) 3096 #------------------------------------------------------------------------ 3097 3098 if test -z "$no_pipe" -a -n "$GCC"; then 3099 AC_CACHE_CHECK([if the compiler understands -pipe], 3100 tcl_cv_cc_pipe, [ 3101 hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" 3102 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[tcl_cv_cc_pipe=yes],[tcl_cv_cc_pipe=no]) 3103 CFLAGS=$hold_cflags]) 3104 if test $tcl_cv_cc_pipe = yes; then 3105 CFLAGS="$CFLAGS -pipe" 3106 fi 3107 fi 3108 3109 #-------------------------------------------------------------------- 3110 # Common compiler flag setup 3111 #-------------------------------------------------------------------- 3112 3113 AC_C_BIGENDIAN 3114]) 3115 3116#------------------------------------------------------------------------ 3117# TEA_MAKE_LIB -- 3118# 3119# Generate a line that can be used to build a shared/unshared library 3120# in a platform independent manner. 3121# 3122# Arguments: 3123# none 3124# 3125# Requires: 3126# 3127# Results: 3128# 3129# Defines the following vars: 3130# CFLAGS - Done late here to note disturb other AC macros 3131# MAKE_LIB - Command to execute to build the Tcl library; 3132# differs depending on whether or not Tcl is being 3133# compiled as a shared library. 3134# MAKE_SHARED_LIB Makefile rule for building a shared library 3135# MAKE_STATIC_LIB Makefile rule for building a static library 3136# MAKE_STUB_LIB Makefile rule for building a stub library 3137# VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL 3138# VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE 3139#------------------------------------------------------------------------ 3140 3141AC_DEFUN([TEA_MAKE_LIB], [ 3142 if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then 3143 MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" 3144 MAKE_SHARED_LIB="\${SHLIB_LD} \${LDFLAGS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" 3145 AC_EGREP_CPP([manifest needed], [ 3146#if defined(_MSC_VER) && _MSC_VER >= 1400 3147print("manifest needed") 3148#endif 3149 ], [ 3150 # Could do a CHECK_PROG for mt, but should always be with MSVC8+ 3151 VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" 3152 VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" 3153 MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" 3154 TEA_ADD_CLEANFILES([*.manifest]) 3155 ]) 3156 MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)" 3157 else 3158 MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" 3159 MAKE_SHARED_LIB="\${SHLIB_LD} \${LDFLAGS} \${LDFLAGS_DEFAULT} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" 3160 MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" 3161 fi 3162 3163 if test "${SHARED_BUILD}" = "1" ; then 3164 MAKE_LIB="${MAKE_SHARED_LIB} " 3165 else 3166 MAKE_LIB="${MAKE_STATIC_LIB} " 3167 fi 3168 3169 #-------------------------------------------------------------------- 3170 # Shared libraries and static libraries have different names. 3171 # Use the double eval to make sure any variables in the suffix is 3172 # substituted. (@@@ Might not be necessary anymore) 3173 #-------------------------------------------------------------------- 3174 3175 PACKAGE_LIB_PREFIX8="${PACKAGE_LIB_PREFIX}" 3176 PACKAGE_LIB_PREFIX9="${PACKAGE_LIB_PREFIX}tcl9" 3177 if test "${TCL_MAJOR_VERSION}" -gt 8 ; then 3178 PACKAGE_LIB_PREFIX="${PACKAGE_LIB_PREFIX9}" 3179 else 3180 PACKAGE_LIB_PREFIX="${PACKAGE_LIB_PREFIX8}" 3181 fi 3182 if test "${TEA_PLATFORM}" = "windows" ; then 3183 if test "${SHARED_BUILD}" = "1" ; then 3184 # We force the unresolved linking of symbols that are really in 3185 # the private libraries of Tcl and Tk. 3186 if test x"${TK_BIN_DIR}" != x ; then 3187 SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" 3188 fi 3189 SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" 3190 if test "$GCC" = "yes"; then 3191 SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" 3192 fi 3193 eval eval "PKG_LIB_FILE8=${PACKAGE_LIB_PREFIX8}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" 3194 eval eval "PKG_LIB_FILE9=${PACKAGE_LIB_PREFIX9}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" 3195 eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" 3196 else 3197 if test "$GCC" = "yes"; then 3198 PACKAGE_LIB_PREFIX=lib${PACKAGE_LIB_PREFIX} 3199 fi 3200 eval eval "PKG_LIB_FILE8=${PACKAGE_LIB_PREFIX8}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" 3201 eval eval "PKG_LIB_FILE9=${PACKAGE_LIB_PREFIX9}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" 3202 eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" 3203 fi 3204 # Some packages build their own stubs libraries 3205 eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" 3206 if test "$GCC" = "yes"; then 3207 PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} 3208 fi 3209 # These aren't needed on Windows (either MSVC or gcc) 3210 RANLIB=: 3211 RANLIB_STUB=: 3212 else 3213 RANLIB_STUB="${RANLIB}" 3214 if test "${SHARED_BUILD}" = "1" ; then 3215 SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" 3216 if test x"${TK_BIN_DIR}" != x ; then 3217 SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" 3218 fi 3219 eval eval "PKG_LIB_FILE8=lib${PACKAGE_LIB_PREFIX8}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" 3220 eval eval "PKG_LIB_FILE9=lib${PACKAGE_LIB_PREFIX9}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" 3221 eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" 3222 RANLIB=: 3223 else 3224 eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX8}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" 3225 eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX9}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" 3226 eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" 3227 fi 3228 # Some packages build their own stubs libraries 3229 eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX8}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" 3230 fi 3231 3232 # These are escaped so that only CFLAGS is picked up at configure time. 3233 # The other values will be substituted at make time. 3234 CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" 3235 if test "${SHARED_BUILD}" = "1" ; then 3236 CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" 3237 fi 3238 3239 AC_SUBST(MAKE_LIB) 3240 AC_SUBST(MAKE_SHARED_LIB) 3241 AC_SUBST(MAKE_STATIC_LIB) 3242 AC_SUBST(MAKE_STUB_LIB) 3243 AC_SUBST(RANLIB_STUB) 3244 AC_SUBST(VC_MANIFEST_EMBED_DLL) 3245 AC_SUBST(VC_MANIFEST_EMBED_EXE) 3246]) 3247 3248#------------------------------------------------------------------------ 3249# TEA_LIB_SPEC -- 3250# 3251# Compute the name of an existing object library located in libdir 3252# from the given base name and produce the appropriate linker flags. 3253# 3254# Arguments: 3255# basename The base name of the library without version 3256# numbers, extensions, or "lib" prefixes. 3257# extra_dir Extra directory in which to search for the 3258# library. This location is used first, then 3259# $prefix/$exec-prefix, then some defaults. 3260# 3261# Requires: 3262# TEA_INIT and TEA_PREFIX must be called first. 3263# 3264# Results: 3265# 3266# Defines the following vars: 3267# ${basename}_LIB_NAME The computed library name. 3268# ${basename}_LIB_SPEC The computed linker flags. 3269#------------------------------------------------------------------------ 3270 3271AC_DEFUN([TEA_LIB_SPEC], [ 3272 AC_MSG_CHECKING([for $1 library]) 3273 3274 # Look in exec-prefix for the library (defined by TEA_PREFIX). 3275 3276 tea_lib_name_dir="${exec_prefix}/lib" 3277 3278 # Or in a user-specified location. 3279 3280 if test x"$2" != x ; then 3281 tea_extra_lib_dir=$2 3282 else 3283 tea_extra_lib_dir=NONE 3284 fi 3285 3286 for i in \ 3287 `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ 3288 `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ 3289 `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ 3290 `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ 3291 `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ 3292 `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ 3293 `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ 3294 `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ 3295 `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ 3296 `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do 3297 if test -f "$i" ; then 3298 tea_lib_name_dir=`dirname $i` 3299 $1_LIB_NAME=`basename $i` 3300 $1_LIB_PATH_NAME=$i 3301 break 3302 fi 3303 done 3304 3305 if test "${TEA_PLATFORM}" = "windows"; then 3306 $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" 3307 else 3308 # Strip off the leading "lib" and trailing ".a" or ".so" 3309 3310 tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` 3311 $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" 3312 fi 3313 3314 if test "x${$1_LIB_NAME}" = x ; then 3315 AC_MSG_ERROR([not found]) 3316 else 3317 AC_MSG_RESULT([${$1_LIB_SPEC}]) 3318 fi 3319]) 3320 3321#------------------------------------------------------------------------ 3322# TEA_PRIVATE_TCL_HEADERS -- 3323# 3324# Locate the private Tcl include files 3325# 3326# Arguments: 3327# 3328# Requires: 3329# TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has 3330# already been called. 3331# 3332# Results: 3333# 3334# Substitutes the following vars: 3335# TCL_TOP_DIR_NATIVE 3336# TCL_INCLUDES 3337#------------------------------------------------------------------------ 3338 3339AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ 3340 # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} 3341 AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) 3342 AC_MSG_CHECKING([for Tcl private include files]) 3343 3344 TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` 3345 TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" 3346 3347 # Check to see if tcl<Plat>Port.h isn't already with the public headers 3348 # Don't look for tclInt.h because that resides with tcl.h in the core 3349 # sources, but the <plat>Port headers are in a different directory 3350 if test "${TEA_PLATFORM}" = "windows" -a \ 3351 -f "${ac_cv_c_tclh}/tclWinPort.h"; then 3352 result="private headers found with public headers" 3353 elif test "${TEA_PLATFORM}" = "unix" -a \ 3354 -f "${ac_cv_c_tclh}/tclUnixPort.h"; then 3355 result="private headers found with public headers" 3356 else 3357 TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" 3358 if test "${TEA_PLATFORM}" = "windows"; then 3359 TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" 3360 else 3361 TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" 3362 fi 3363 # Overwrite the previous TCL_INCLUDES as this should capture both 3364 # public and private headers in the same set. 3365 # We want to ensure these are substituted so as not to require 3366 # any *_NATIVE vars be defined in the Makefile 3367 TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" 3368 if test "`uname -s`" = "Darwin"; then 3369 # If Tcl was built as a framework, attempt to use 3370 # the framework's Headers and PrivateHeaders directories 3371 case ${TCL_DEFS} in 3372 *TCL_FRAMEWORK*) 3373 if test -d "${TCL_BIN_DIR}/Headers" -a \ 3374 -d "${TCL_BIN_DIR}/PrivateHeaders"; then 3375 TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" 3376 else 3377 TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" 3378 fi 3379 ;; 3380 esac 3381 result="Using ${TCL_INCLUDES}" 3382 else 3383 if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then 3384 AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) 3385 fi 3386 result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" 3387 fi 3388 fi 3389 3390 AC_SUBST(TCL_TOP_DIR_NATIVE) 3391 3392 AC_SUBST(TCL_INCLUDES) 3393 AC_MSG_RESULT([${result}]) 3394]) 3395 3396#------------------------------------------------------------------------ 3397# TEA_PUBLIC_TCL_HEADERS -- 3398# 3399# Locate the installed public Tcl header files 3400# 3401# Arguments: 3402# None. 3403# 3404# Requires: 3405# CYGPATH must be set 3406# 3407# Results: 3408# 3409# Adds a --with-tclinclude switch to configure. 3410# Result is cached. 3411# 3412# Substitutes the following vars: 3413# TCL_INCLUDES 3414#------------------------------------------------------------------------ 3415 3416AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ 3417 AC_MSG_CHECKING([for Tcl public headers]) 3418 3419 AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) 3420 3421 AC_CACHE_VAL(ac_cv_c_tclh, [ 3422 # Use the value from --with-tclinclude, if it was given 3423 3424 if test x"${with_tclinclude}" != x ; then 3425 if test -f "${with_tclinclude}/tcl.h" ; then 3426 ac_cv_c_tclh=${with_tclinclude} 3427 else 3428 AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) 3429 fi 3430 else 3431 list="" 3432 if test "`uname -s`" = "Darwin"; then 3433 # If Tcl was built as a framework, attempt to use 3434 # the framework's Headers directory 3435 case ${TCL_DEFS} in 3436 *TCL_FRAMEWORK*) 3437 list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" 3438 ;; 3439 esac 3440 fi 3441 3442 # Look in the source dir only if Tcl is not installed, 3443 # and in that situation, look there before installed locations. 3444 if test -f "${TCL_BIN_DIR}/Makefile" ; then 3445 list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" 3446 fi 3447 3448 # Check order: pkg --prefix location, Tcl's --prefix location, 3449 # relative to directory of tclConfig.sh. 3450 3451 eval "temp_includedir=${includedir}" 3452 list="$list \ 3453 `ls -d ${temp_includedir} 2>/dev/null` \ 3454 `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ 3455 `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" 3456 if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then 3457 list="$list /usr/local/include /usr/include" 3458 if test x"${TCL_INCLUDE_SPEC}" != x ; then 3459 d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` 3460 list="$list `ls -d ${d} 2>/dev/null`" 3461 fi 3462 fi 3463 for i in $list ; do 3464 if test -f "$i/tcl.h" ; then 3465 ac_cv_c_tclh=$i 3466 break 3467 fi 3468 done 3469 fi 3470 ]) 3471 3472 # Print a message based on how we determined the include path 3473 3474 if test x"${ac_cv_c_tclh}" = x ; then 3475 AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) 3476 else 3477 AC_MSG_RESULT([${ac_cv_c_tclh}]) 3478 fi 3479 3480 # Convert to a native path and substitute into the output files. 3481 3482 INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` 3483 3484 TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" 3485 3486 AC_SUBST(TCL_INCLUDES) 3487]) 3488 3489#------------------------------------------------------------------------ 3490# TEA_PRIVATE_TK_HEADERS -- 3491# 3492# Locate the private Tk include files 3493# 3494# Arguments: 3495# 3496# Requires: 3497# TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has 3498# already been called. 3499# 3500# Results: 3501# 3502# Substitutes the following vars: 3503# TK_INCLUDES 3504#------------------------------------------------------------------------ 3505 3506AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ 3507 # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} 3508 AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) 3509 AC_MSG_CHECKING([for Tk private include files]) 3510 3511 TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` 3512 TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" 3513 3514 # Check to see if tk<Plat>Port.h isn't already with the public headers 3515 # Don't look for tkInt.h because that resides with tk.h in the core 3516 # sources, but the <plat>Port headers are in a different directory 3517 if test "${TEA_PLATFORM}" = "windows" -a \ 3518 -f "${ac_cv_c_tkh}/tkWinPort.h"; then 3519 result="private headers found with public headers" 3520 elif test "${TEA_PLATFORM}" = "unix" -a \ 3521 -f "${ac_cv_c_tkh}/tkUnixPort.h"; then 3522 result="private headers found with public headers" 3523 else 3524 TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" 3525 TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" 3526 if test "${TEA_PLATFORM}" = "windows"; then 3527 TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" 3528 else 3529 TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" 3530 fi 3531 # Overwrite the previous TK_INCLUDES as this should capture both 3532 # public and private headers in the same set. 3533 # We want to ensure these are substituted so as not to require 3534 # any *_NATIVE vars be defined in the Makefile 3535 TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" 3536 # Detect and add ttk subdir 3537 if test -d "${TK_SRC_DIR}/generic/ttk"; then 3538 TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" 3539 fi 3540 if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then 3541 TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" 3542 fi 3543 if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then 3544 TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" 3545 fi 3546 if test "`uname -s`" = "Darwin"; then 3547 # If Tk was built as a framework, attempt to use 3548 # the framework's Headers and PrivateHeaders directories 3549 case ${TK_DEFS} in 3550 *TK_FRAMEWORK*) 3551 if test -d "${TK_BIN_DIR}/Headers" -a \ 3552 -d "${TK_BIN_DIR}/PrivateHeaders"; then 3553 TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" 3554 else 3555 TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" 3556 fi 3557 ;; 3558 esac 3559 result="Using ${TK_INCLUDES}" 3560 else 3561 if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then 3562 AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) 3563 fi 3564 result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" 3565 fi 3566 fi 3567 3568 AC_SUBST(TK_TOP_DIR_NATIVE) 3569 AC_SUBST(TK_XLIB_DIR_NATIVE) 3570 3571 AC_SUBST(TK_INCLUDES) 3572 AC_MSG_RESULT([${result}]) 3573]) 3574 3575#------------------------------------------------------------------------ 3576# TEA_PUBLIC_TK_HEADERS -- 3577# 3578# Locate the installed public Tk header files 3579# 3580# Arguments: 3581# None. 3582# 3583# Requires: 3584# CYGPATH must be set 3585# 3586# Results: 3587# 3588# Adds a --with-tkinclude switch to configure. 3589# Result is cached. 3590# 3591# Substitutes the following vars: 3592# TK_INCLUDES 3593#------------------------------------------------------------------------ 3594 3595AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ 3596 AC_MSG_CHECKING([for Tk public headers]) 3597 3598 AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) 3599 3600 AC_CACHE_VAL(ac_cv_c_tkh, [ 3601 # Use the value from --with-tkinclude, if it was given 3602 3603 if test x"${with_tkinclude}" != x ; then 3604 if test -f "${with_tkinclude}/tk.h" ; then 3605 ac_cv_c_tkh=${with_tkinclude} 3606 else 3607 AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) 3608 fi 3609 else 3610 list="" 3611 if test "`uname -s`" = "Darwin"; then 3612 # If Tk was built as a framework, attempt to use 3613 # the framework's Headers directory. 3614 case ${TK_DEFS} in 3615 *TK_FRAMEWORK*) 3616 list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" 3617 ;; 3618 esac 3619 fi 3620 3621 # Look in the source dir only if Tk is not installed, 3622 # and in that situation, look there before installed locations. 3623 if test -f "${TK_BIN_DIR}/Makefile" ; then 3624 list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" 3625 fi 3626 3627 # Check order: pkg --prefix location, Tk's --prefix location, 3628 # relative to directory of tkConfig.sh, Tcl's --prefix location, 3629 # relative to directory of tclConfig.sh. 3630 3631 eval "temp_includedir=${includedir}" 3632 list="$list \ 3633 `ls -d ${temp_includedir} 2>/dev/null` \ 3634 `ls -d ${TK_PREFIX}/include 2>/dev/null` \ 3635 `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ 3636 `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ 3637 `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" 3638 if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then 3639 list="$list /usr/local/include /usr/include" 3640 if test x"${TK_INCLUDE_SPEC}" != x ; then 3641 d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` 3642 list="$list `ls -d ${d} 2>/dev/null`" 3643 fi 3644 fi 3645 for i in $list ; do 3646 if test -f "$i/tk.h" ; then 3647 ac_cv_c_tkh=$i 3648 break 3649 fi 3650 done 3651 fi 3652 ]) 3653 3654 # Print a message based on how we determined the include path 3655 3656 if test x"${ac_cv_c_tkh}" = x ; then 3657 AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) 3658 else 3659 AC_MSG_RESULT([${ac_cv_c_tkh}]) 3660 fi 3661 3662 # Convert to a native path and substitute into the output files. 3663 3664 INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` 3665 3666 TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" 3667 3668 AC_SUBST(TK_INCLUDES) 3669 3670 if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then 3671 # On Windows and Aqua, we need the X compat headers 3672 AC_MSG_CHECKING([for X11 header files]) 3673 if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then 3674 INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" 3675 TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" 3676 AC_SUBST(TK_XINCLUDES) 3677 fi 3678 AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) 3679 fi 3680]) 3681 3682#------------------------------------------------------------------------ 3683# TEA_PATH_CONFIG -- 3684# 3685# Locate the ${1}Config.sh file and perform a sanity check on 3686# the ${1} compile flags. These are used by packages like 3687# [incr Tk] that load *Config.sh files from more than Tcl and Tk. 3688# 3689# Arguments: 3690# none 3691# 3692# Results: 3693# 3694# Adds the following arguments to configure: 3695# --with-$1=... 3696# 3697# Defines the following vars: 3698# $1_BIN_DIR Full path to the directory containing 3699# the $1Config.sh file 3700#------------------------------------------------------------------------ 3701 3702AC_DEFUN([TEA_PATH_CONFIG], [ 3703 # 3704 # Ok, lets find the $1 configuration 3705 # First, look for one uninstalled. 3706 # the alternative search directory is invoked by --with-$1 3707 # 3708 3709 if test x"${no_$1}" = x ; then 3710 # we reset no_$1 in case something fails here 3711 no_$1=true 3712 AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) 3713 AC_MSG_CHECKING([for $1 configuration]) 3714 AC_CACHE_VAL(ac_cv_c_$1config,[ 3715 3716 # First check to see if --with-$1 was specified. 3717 if test x"${with_$1config}" != x ; then 3718 case ${with_$1config} in 3719 */$1Config.sh ) 3720 if test -f ${with_$1config}; then 3721 AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) 3722 with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` 3723 fi;; 3724 esac 3725 if test -f "${with_$1config}/$1Config.sh" ; then 3726 ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` 3727 else 3728 AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) 3729 fi 3730 fi 3731 3732 # then check for a private $1 installation 3733 if test x"${ac_cv_c_$1config}" = x ; then 3734 for i in \ 3735 ../$1 \ 3736 `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ 3737 `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ 3738 `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ 3739 `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ 3740 ../../$1 \ 3741 `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ 3742 `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ 3743 `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ 3744 `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ 3745 ../../../$1 \ 3746 `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ 3747 `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ 3748 `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ 3749 `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ 3750 ${srcdir}/../$1 \ 3751 `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ 3752 `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ 3753 `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ 3754 `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ 3755 ; do 3756 if test -f "$i/$1Config.sh" ; then 3757 ac_cv_c_$1config=`(cd $i; pwd)` 3758 break 3759 fi 3760 if test -f "$i/unix/$1Config.sh" ; then 3761 ac_cv_c_$1config=`(cd $i/unix; pwd)` 3762 break 3763 fi 3764 done 3765 fi 3766 3767 # check in a few common install locations 3768 if test x"${ac_cv_c_$1config}" = x ; then 3769 for i in `ls -d ${libdir} 2>/dev/null` \ 3770 `ls -d ${exec_prefix}/lib 2>/dev/null` \ 3771 `ls -d ${prefix}/lib 2>/dev/null` \ 3772 `ls -d /usr/local/lib 2>/dev/null` \ 3773 `ls -d /usr/contrib/lib 2>/dev/null` \ 3774 `ls -d /usr/pkg/lib 2>/dev/null` \ 3775 `ls -d /usr/lib 2>/dev/null` \ 3776 `ls -d /usr/lib64 2>/dev/null` \ 3777 ; do 3778 if test -f "$i/$1Config.sh" ; then 3779 ac_cv_c_$1config=`(cd $i; pwd)` 3780 break 3781 fi 3782 done 3783 fi 3784 ]) 3785 3786 if test x"${ac_cv_c_$1config}" = x ; then 3787 $1_BIN_DIR="# no $1 configs found" 3788 AC_MSG_WARN([Cannot find $1 configuration definitions]) 3789 exit 0 3790 else 3791 no_$1= 3792 $1_BIN_DIR=${ac_cv_c_$1config} 3793 AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) 3794 fi 3795 fi 3796]) 3797 3798#------------------------------------------------------------------------ 3799# TEA_LOAD_CONFIG -- 3800# 3801# Load the $1Config.sh file 3802# 3803# Arguments: 3804# 3805# Requires the following vars to be set: 3806# $1_BIN_DIR 3807# 3808# Results: 3809# 3810# Substitutes the following vars: 3811# $1_SRC_DIR 3812# $1_LIB_FILE 3813# $1_LIB_SPEC 3814#------------------------------------------------------------------------ 3815 3816AC_DEFUN([TEA_LOAD_CONFIG], [ 3817 AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) 3818 3819 if test -f "${$1_BIN_DIR}/$1Config.sh" ; then 3820 AC_MSG_RESULT([loading]) 3821 . "${$1_BIN_DIR}/$1Config.sh" 3822 else 3823 AC_MSG_RESULT([file not found]) 3824 fi 3825 3826 # 3827 # If the $1_BIN_DIR is the build directory (not the install directory), 3828 # then set the common variable name to the value of the build variables. 3829 # For example, the variable $1_LIB_SPEC will be set to the value 3830 # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC 3831 # instead of $1_BUILD_LIB_SPEC since it will work with both an 3832 # installed and uninstalled version of Tcl. 3833 # 3834 3835 if test -f "${$1_BIN_DIR}/Makefile" ; then 3836 AC_MSG_WARN([Found Makefile - using build library specs for $1]) 3837 $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} 3838 $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} 3839 $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} 3840 $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} 3841 $1_LIBRARY_PATH=${$1_LIBRARY_PATH} 3842 fi 3843 3844 AC_SUBST($1_VERSION) 3845 AC_SUBST($1_BIN_DIR) 3846 AC_SUBST($1_SRC_DIR) 3847 3848 AC_SUBST($1_LIB_FILE) 3849 AC_SUBST($1_LIB_SPEC) 3850 3851 AC_SUBST($1_STUB_LIB_FILE) 3852 AC_SUBST($1_STUB_LIB_SPEC) 3853 AC_SUBST($1_STUB_LIB_PATH) 3854 3855 # Allow the caller to prevent this auto-check by specifying any 2nd arg 3856 AS_IF([test "x$2" = x], [ 3857 # Check both upper and lower-case variants 3858 # If a dev wanted non-stubs libs, this function could take an option 3859 # to not use _STUB in the paths below 3860 AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], 3861 [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], 3862 [TEA_LOAD_CONFIG_LIB($1_STUB)]) 3863 ]) 3864]) 3865 3866#------------------------------------------------------------------------ 3867# TEA_LOAD_CONFIG_LIB -- 3868# 3869# Helper function to load correct library from another extension's 3870# ${PACKAGE}Config.sh. 3871# 3872# Results: 3873# Adds to LIBS the appropriate extension library 3874#------------------------------------------------------------------------ 3875AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ 3876 AC_MSG_CHECKING([For $1 library for LIBS]) 3877 # This simplifies the use of stub libraries by automatically adding 3878 # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, 3879 # but this is called before CONFIG_CFLAGS. More importantly, this adds 3880 # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. 3881 if test "x${$1_LIB_SPEC}" != "x" ; then 3882 if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then 3883 TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) 3884 AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) 3885 else 3886 TEA_ADD_LIBS([${$1_LIB_SPEC}]) 3887 AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) 3888 fi 3889 else 3890 AC_MSG_RESULT([file not found]) 3891 fi 3892]) 3893 3894#------------------------------------------------------------------------ 3895# TEA_EXPORT_CONFIG -- 3896# 3897# Define the data to insert into the ${PACKAGE}Config.sh file 3898# 3899# Arguments: 3900# 3901# Requires the following vars to be set: 3902# $1 3903# 3904# Results: 3905# Substitutes the following vars: 3906#------------------------------------------------------------------------ 3907 3908AC_DEFUN([TEA_EXPORT_CONFIG], [ 3909 #-------------------------------------------------------------------- 3910 # These are for $1Config.sh 3911 #-------------------------------------------------------------------- 3912 3913 # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) 3914 eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" 3915 if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then 3916 eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}" 3917 eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}" 3918 else 3919 eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`" 3920 eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`" 3921 fi 3922 $1_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${$1_LIB_FLAG}" 3923 $1_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${$1_LIB_FLAG}" 3924 $1_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` [$]{$1_STUB_LIB_FLAG}" 3925 $1_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` [$]{$1_STUB_LIB_FLAG}" 3926 $1_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/[$]{PKG_STUB_LIB_FILE}" 3927 $1_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/[$]{PKG_STUB_LIB_FILE}" 3928 3929 AC_SUBST($1_BUILD_LIB_SPEC) 3930 AC_SUBST($1_LIB_SPEC) 3931 AC_SUBST($1_BUILD_STUB_LIB_SPEC) 3932 AC_SUBST($1_STUB_LIB_SPEC) 3933 AC_SUBST($1_BUILD_STUB_LIB_PATH) 3934 AC_SUBST($1_STUB_LIB_PATH) 3935 3936 AC_SUBST(MAJOR_VERSION) 3937 AC_SUBST(MINOR_VERSION) 3938 AC_SUBST(PATCHLEVEL) 3939]) 3940 3941 3942#------------------------------------------------------------------------ 3943# TEA_INSTALLER -- 3944# 3945# Configure the installer. 3946# 3947# Arguments: 3948# none 3949# 3950# Results: 3951# Substitutes the following vars: 3952# INSTALL 3953# INSTALL_DATA_DIR 3954# INSTALL_DATA 3955# INSTALL_PROGRAM 3956# INSTALL_SCRIPT 3957# INSTALL_LIBRARY 3958#------------------------------------------------------------------------ 3959 3960AC_DEFUN([TEA_INSTALLER], [ 3961 INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c' 3962 INSTALL_DATA_DIR='${INSTALL} -d -m 755' 3963 INSTALL_DATA='${INSTALL} -m 644' 3964 INSTALL_PROGRAM='${INSTALL} -m 755' 3965 INSTALL_SCRIPT='${INSTALL} -m 755' 3966 3967 TEA_CONFIG_SYSTEM 3968 case $system in 3969 HP-UX-*) INSTALL_LIBRARY='${INSTALL} -m 755' ;; 3970 *) INSTALL_LIBRARY='${INSTALL} -m 644' ;; 3971 esac 3972 3973 AC_SUBST(INSTALL) 3974 AC_SUBST(INSTALL_DATA_DIR) 3975 AC_SUBST(INSTALL_DATA) 3976 AC_SUBST(INSTALL_PROGRAM) 3977 AC_SUBST(INSTALL_SCRIPT) 3978 AC_SUBST(INSTALL_LIBRARY) 3979]) 3980 3981### 3982# Tip 430 - ZipFS Modifications 3983### 3984#------------------------------------------------------------------------ 3985# TEA_ZIPFS_SUPPORT 3986# Locate a zip encoder installed on the system path, or none. 3987# 3988# Arguments: 3989# none 3990# 3991# Results: 3992# Substitutes the following vars: 3993# MACHER_PROG 3994# ZIP_PROG 3995# ZIP_PROG_OPTIONS 3996# ZIP_PROG_VFSSEARCH 3997# ZIP_INSTALL_OBJS 3998#------------------------------------------------------------------------ 3999 4000AC_DEFUN([TEA_ZIPFS_SUPPORT], [ 4001 MACHER_PROG="" 4002 ZIP_PROG="" 4003 ZIP_PROG_OPTIONS="" 4004 ZIP_PROG_VFSSEARCH="" 4005 ZIP_INSTALL_OBJS="" 4006 4007 AC_MSG_CHECKING([for macher]) 4008 AC_CACHE_VAL(ac_cv_path_macher, [ 4009 search_path=`echo ${PATH} | sed -e 's/:/ /g'` 4010 for dir in $search_path ; do 4011 for j in `ls -r $dir/macher 2> /dev/null` \ 4012 `ls -r $dir/macher 2> /dev/null` ; do 4013 if test x"$ac_cv_path_macher" = x ; then 4014 if test -f "$j" ; then 4015 ac_cv_path_macher=$j 4016 break 4017 fi 4018 fi 4019 done 4020 done 4021 ]) 4022 if test -f "$ac_cv_path_macher" ; then 4023 MACHER_PROG="$ac_cv_path_macher" 4024 AC_MSG_RESULT([$MACHER_PROG]) 4025 AC_MSG_RESULT([Found macher in environment]) 4026 fi 4027 AC_MSG_CHECKING([for zip]) 4028 AC_CACHE_VAL(ac_cv_path_zip, [ 4029 search_path=`echo ${PATH} | sed -e 's/:/ /g'` 4030 for dir in $search_path ; do 4031 for j in `ls -r $dir/zip 2> /dev/null` \ 4032 `ls -r $dir/zip 2> /dev/null` ; do 4033 if test x"$ac_cv_path_zip" = x ; then 4034 if test -f "$j" ; then 4035 ac_cv_path_zip=$j 4036 break 4037 fi 4038 fi 4039 done 4040 done 4041 ]) 4042 if test -f "$ac_cv_path_zip" ; then 4043 ZIP_PROG="$ac_cv_path_zip" 4044 AC_MSG_RESULT([$ZIP_PROG]) 4045 ZIP_PROG_OPTIONS="-rq" 4046 ZIP_PROG_VFSSEARCH="*" 4047 AC_MSG_RESULT([Found INFO Zip in environment]) 4048 # Use standard arguments for zip 4049 else 4050 # It is not an error if an installed version of Zip can't be located. 4051 # We can use the locally distributed minizip instead 4052 ZIP_PROG="./minizip${EXEEXT_FOR_BUILD}" 4053 ZIP_PROG_OPTIONS="-o -r" 4054 ZIP_PROG_VFSSEARCH="*" 4055 ZIP_INSTALL_OBJS="minizip${EXEEXT_FOR_BUILD}" 4056 AC_MSG_RESULT([No zip found on PATH. Building minizip]) 4057 fi 4058 AC_SUBST(MACHER_PROG) 4059 AC_SUBST(ZIP_PROG) 4060 AC_SUBST(ZIP_PROG_OPTIONS) 4061 AC_SUBST(ZIP_PROG_VFSSEARCH) 4062 AC_SUBST(ZIP_INSTALL_OBJS) 4063]) 4064 4065# Local Variables: 4066# mode: autoconf 4067# End: