Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Feb 2007 18:34:14 +0100 (CET)
From:      Martin Matuska <martin@matuska.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/109097: [PATCH] Mk/bsd.tcl.mk improvement proposal
Message-ID:  <20070212173414.EBA753F443@mail.vx.sk>
Resent-Message-ID: <200702121740.l1CHe3Ko031823@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         109097
>Category:       ports
>Synopsis:       [PATCH] Mk/bsd.tcl.mk improvement proposal
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Feb 12 17:40:03 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Martin Matuska
>Release:        FreeBSD 6.2-RELEASE amd64
>Organization:
>Environment:
System: FreeBSD 6.2-RELEASE amd64/i386
>Description:
- adds threads support for tcl
- enables settings for 83+ 84+ and 85+ (Tcl and Tk),
  others are possible
- supersedes ports/109082
>How-To-Repeat:
>Fix:
--- Mk/bsd.tcl.mk.orig	Mon Feb 12 10:30:50 2007
+++ Mk/bsd.tcl.mk	Mon Feb 12 17:29:25 2007
@@ -13,16 +13,23 @@
 #				  different TCL versions the version can be specified directly.
 #				  If version is not specified (USE_TCL=yes) then the latest
 #				  version is used (8.4 currently).
-#				  Available values are: 85, 85-thread, 84, 84-thread, 83, 82,
-#				  81 and 80.
-# USE_TCL_BUILD	- Build time dependency on tcl. Same semantics as USE_TCL.
+#				  Available values are: 85+, 84+, 83+, 85, 84, 83, 82, 81 and 80.
+# USE_TCL_BUILD		- Set to add build time dependency on tcl, requires USE_TCL.
+# TCL_NO_RUN_DEPENDS	- Set to disable runtime dependency on Tcl (requires USE_TCL_BUILD)
+#
+# USE_TCL_THREADS 	- If unset, non-threaded TCL is required by default. If a threaded version 
+#			  is installed, port uses the threaded version.
+#			  If set, a threaded build of TCL is always required.
+# USE_TCL_NOTHREADS	- If set, a non-threaded TCL is always required. 
+#			  (overrides USE_TCL_THREADS if set)
 #
 # USE_TK		- Depend on tk to run. In case of incompatible APIs of different
 #				  TK versions the version can be specified directly. If version
 #				  is not specified (USE_TK=yes) then the latest version is
 #				  used (8.4 currently).
-#				  Available values are: 85, 84, 83, 82, 81 and 80.
-# USE_TK_BUILD	- Build time dependency on tk. Same semantics as USE_TK.
+#				  Available values are: 85+, 84+, 83+, 85, 84, 83, 82, 81 and 80.
+# USE_TK_BUILD		- Set to add build time dependency on tk.
+# TK_NO_RUN_DEPENDS	- Set to disable runtime dependency on Tk (requires USE_TK_BUILD)
 ##
 # TCL_LIBDIR	- Path where tcl libraries can be found
 #
@@ -47,61 +54,138 @@
 # 				  wish calls with wish${TK_VER} calls. Also note that
 # 				  post-patch target is used.
 
-.if defined(USE_TCL) || defined(USE_TCL_BUILD)
-
-_TCL_VERSIONS=	85 85-thread 84 84-thread 83 82 81 80
+# Backwards compatibility with old USE_TCL_BUILD
+.if defined(USE_TCL_BUILD) && !defined(USE_TCL)
+USE_TCL=	${USE_TCL_BUILD}
+USE_TCL_BUILD=	yes
+.endif
 
+# TCL part
 .if defined(USE_TCL)
-_RUN=		yes
-.endif
 
-.if defined(USE_TCL_BUILD)
-USE_TCL=	${USE_TCL_BUILD}
-_BUILD=		yes
-.endif
+_TCL_VERSIONS=			85 84 84 83 82 81 80
+_TCL_THREADED_VERSIONS= 	85 84 81
+_TCL_MINIMUM_VERSIONS= 		85+ 84+ 83+
+
+# For specifying [85, 84, 83, ..]+
+_TCL_83P=	83 84 85
+_TCL_84P=	84 85
+_TCL_85P=	85
+
+# Support for obsolete 84-thread and 85-thread definitions
+. if ${USE_TCL} == "84-thread" || ${USE_TCL} == "85-thread"
+USE_TCL=		${USE_TCL:S/-thread//}
+USE_TCL_THREADS=	yes
+. endif
 
 .if ${USE_TCL} == "yes"
 USE_TCL=	84
 .endif
 
-TCL_VER:=	${USE_TCL:S/8/8./:S/-thread//}
+.if defined(USE_TCL_BUILD)
+. if defined(TCL_NO_RUN_DEPENDS)
+_NORUN=		yes
+. endif
+_BUILD=		yes
+.endif
 
 # Special case
 .if ${USE_TCL} == "81"
-USE_TCL=	tcl81-thread
+USE_TCL_THREADS=	yes
+.endif
+
+# Check if a tcl build with threads is required
+.if defined(USE_TCL_THREADS) && !defined(USE_TCL_NOTHREADS)
+_TCL_THREADED=		_THREADED
+_TCL_THREADED_PORT=	-thread
+_TCL_THREADED_IGNORE=	(with threads)
+.endif
+
+# Check for highest installed TCL (if e.g. 83+ is specified)
+_TCL_VER=	no
+.for ver in ${_TCL_RANGE_VERSIONS}
+. if ${USE_TCL} == "${ver}" && ${_TCL_VER} == "no"
+_MATCHED_TCL_VER:=	${USE_TCL:S/+//}
+.  for tcl in ${_TCL_${_MATCHED_TCL_VER}P}
+.   if exists(${LOCALBASE}/include/tcl${tcl:S/8/8./}/tcl.h)
+_TCL_VER=${tcl}
+.   endif
+.  endfor
+. endif
+.endfor
+.if defined(_MATCHED_TCL_VER)
+. if ${_TCL_VER} != "no"
+USE_TCL=	${_TCL_VER}
+. else
+USE_TCL=	${_MATCHED_TCL_VER}
+. endif
 .endif
 
+TCL_VER:=	${USE_TCL:S/8/8./}
+
+# Check if correct TCL version was specified
 _FOUND=		no
-.for ver in ${_TCL_VERSIONS}
+.for ver in ${_TCL${_TCL_THREADED}_VERSIONS}
 . if ${USE_TCL} == "${ver}"
 _FOUND=		yes
-.  if defined(_BUILD)
-BUILD_DEPENDS+=	tclsh${TCL_VER}:${PORTSDIR}/lang/tcl${USE_TCL}
-.  endif
-.  if defined(_RUN)
-RUN_DEPENDS+=	tclsh${TCL_VER}:${PORTSDIR}/lang/tcl${USE_TCL}
-.  endif
+
 TCL_INCLUDEDIR=	${LOCALBASE}/include/tcl${TCL_VER}
 TCL_LIBDIR=		${LOCALBASE}/lib/tcl${TCL_VER}
 TCLSH=			${LOCALBASE}/bin/tclsh${TCL_VER}
+
+# Check if a threaded or non-threaded TCL is installed
+.  if exists(${TCLSH})
+_TCL_IS_THREADED!=  echo 'puts [array names tcl_platform -exact threaded]' | ${TCLSH} || return 0
+.   if ${_TCL_IS_THREADED} != "threaded"
+.    if defined(USE_TCL_THREADS)
+IGNORE= TCL ${TCL_VER} with threads required. The installed version does not support threads
+.    endif
+.   else
+.    if defined(USE_TCL_NOTHREADS)
+IGNORE= TCL ${TCL_VER} without threads required. The installed version uses threads
+.    else
+_TCL_THREADED_PORT=	-thread
+.    endif
+.   endif
+.  endif
+
+# Add dependencies
+.  if defined(_BUILD)
+BUILD_DEPENDS+=	tclsh${TCL_VER}:${PORTSDIR}/lang/tcl${USE_TCL}${_TCL_THREADED_PORT}
+.  endif
+.  if !defined(_NORUN)
+RUN_DEPENDS+=	tclsh${TCL_VER}:${PORTSDIR}/lang/tcl${USE_TCL}${_TCL_THREADED_PORT}
+.  endif
 . endif
 .endfor
 
 .if ${_FOUND} == "no"
-IGNORE=		Unknown TCL version specified: ${USE_TCL}
+IGNORE=		Unknown TCL version specified: ${USE_TCL} ${_TCL_THREADED_IGNORE}
 .endif
-.endif # defined(USE_TCL) || defined(USE_TCL_BUILD)
 
-.if defined(USE_TK) || defined(USE_TK_BUILD)
+.endif # defined(USE_TCL)
 
-_TK_VERSIONS=	85 84 83 82 81 80
+# Backwards compatibility with old USE_TK_BUILD
+.if defined(USE_TK_BUILD) && !defined(USE_TK)
+USE_TK=	${USE_TK_BUILD}
+USE_TK_BUILD=	yes
+.endif
 
+# TK part
 .if defined(USE_TK)
-_TK_RUN=	yes
-.endif
+
+_TK_VERSIONS=	85 84 83 82 81 80
+_TK_RANGE_VERSIONS= 85+ 84+ 83+
+
+# For specifying [85, 84, 83, ..]+
+_TK_83P=	83 84 85
+_TK_84P=	84 85
+_TK_85P=	85
 
 .if defined(USE_TK_BUILD)
-USE_TK=		${USE_TK_BUILD}
+. if defined(NO_TK_RUN_DEPENDS)
+_TK_NORUN=	yes
+. endif
 _TK_BUILD=	yes
 .endif
 
@@ -109,6 +193,26 @@
 USE_TK=		84
 .endif
 
+# Check for highest installed TK (if e.g. 83+ is specified)
+_TK_VER=	no
+.for ver in ${_TK_RANGE_VERSIONS}
+. if ${USE_TK} == "${ver}" && ${_TK_VER} == "no"
+_MATCHED_TK_VER:=	${USE_TK:S/+//}
+.  for tk in ${_TK_${_MATCHED_TK_VER}P}
+.   if exists(${LOCALBASE}/include/tk${tk:S/8/8./}/tk.h)
+_TK_VER=${tk}
+.   endif
+.  endfor
+. endif
+.endfor
+.if defined(_MATCHED_TK_VER)
+. if ${_TK_VER} != "no"
+USE_TK=		${_TK_VER}
+. else
+USE_TK=		${_MATCHED_TK_VER}
+. endif
+.endif
+
 TK_VER:=	${USE_TK:S/8/8./}
 TCL_VER?=	${TK_VER}
 
@@ -123,7 +227,7 @@
 .  if defined(_TK_BUILD)
 BUILD_DEPENDS+=	wish${TK_VER}:${PORTSDIR}/x11-toolkits/tk${USE_TK}
 .endif
-.  if defined(_TK_RUN)
+.  if !defined(_TK_NORUN)
 RUN_DEPENDS+=	wish${TK_VER}:${PORTSDIR}/x11-toolkits/tk${USE_TK}
 .endif
 TCL_INCLUDEDIR=	${LOCALBASE}/include/tcl${TK_VER}
@@ -138,7 +242,7 @@
 .if ${_FOUND} == "no"
 IGNORE=		Unknown TK version specified: ${USE_TK}
 .endif
-.endif # defined(USE_TK) || defined(USE_TK_BUILD)
+.endif # defined(USE_TK)
 
 .endif # !defined(_POSTMKINCLUDED) && !defined(Tcl_Pre_Include)
 
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070212173414.EBA753F443>