[Buildroot] [PATCH v3] tcl: bump to version 8.6.1

Andrew Ruder andrew.ruder at elecsyscorp.com
Tue Apr 8 20:54:04 UTC 2014


Turn off building compatibility layers for old/broken versions of
standard functions (strstr, strtoul, strtod) with the assumption that
anything buildroot is using as a standard C library will be good enough
to not have broken behavior.

Signed-off-by: Andrew Ruder <andrew.ruder at elecsyscorp.com>
Cc: Peter Korsgaard <jacmet at uclibc.org>
---

Ok, Peter, round 3.  I promise I'm trying to get better at this :)

Changes from v2:

. Fixed the dependencies (only depends on ipv6 and mmu, verified that it
  compiled without wchar/largefile/etc..):

. Pass --with-system-sqlite so that system sqlite gets used.

. Specifically remove the database-related packages that ship with tcl
  so that we don't waste time compiling them.  Note: I tried to make due
  with the configure flags to disable the packages but this did not work
  well at all.  This seemed like the simpler solution than overhauling the
  tcl build system.

  We don't remove the sqlite related tcl packages when sql is already
  available in the image.

. Remove installed locale information.  It is actually pretty
  complicated afaict to determine from our locale whitelist the correct
  tcl files to retain.  Leave this to someone that needs their
  ::tcl::clock information localized?

. Remove usr/lib/tcl8.6/tclAppInit.c which shouldn't need to be on
  the target filesystem.

. This puts us down to the following diff when enabling tcl:

  + usr/bin/tclsh8.6
  + usr/lib/itcl4.0.0/itclConfig.sh
  + usr/lib/itcl4.0.0/itclHullCmds.tcl
  + usr/lib/itcl4.0.0/itcl.tcl
  + usr/lib/itcl4.0.0/itclWidget.tcl
  + usr/lib/itcl4.0.0/libitcl4.0.0.so
  + usr/lib/itcl4.0.0/pkgIndex.tcl
  + usr/lib/libtcl8.6.so
  + usr/lib/tcl8.6/auto.tcl
  + usr/lib/tcl8.6/clock.tcl
  + usr/lib/tcl8.6/history.tcl
  + usr/lib/tcl8.6/http1.0/http.tcl
  + usr/lib/tcl8.6/http1.0/pkgIndex.tcl
  + usr/lib/tcl8.6/init.tcl
  + usr/lib/tcl8.6/opt0.4/optparse.tcl
  + usr/lib/tcl8.6/opt0.4/pkgIndex.tcl
  + usr/lib/tcl8.6/package.tcl
  + usr/lib/tcl8.6/parray.tcl
  + usr/lib/tcl8.6/safe.tcl
  + usr/lib/tcl8.6/tclIndex
  + usr/lib/tcl8.6/tm.tcl
  + usr/lib/tcl8.6/word.tcl
  + usr/lib/tcl8/8.4/platform-1.0.12.tm
  + usr/lib/tcl8/8.4/platform/shell-1.1.4.tm
  + usr/lib/tcl8/8.5/msgcat-1.5.2.tm
  + usr/lib/tcl8/8.5/tcltest-2.3.6.tm
  + usr/lib/tcl8/8.6/http-2.8.7.tm
  + usr/lib/thread2.7.0/libthread2.7.0.so
  + usr/lib/thread2.7.0/pkgIndex.tcl
  + usr/lib/thread2.7.0/ttrace.tcl

. And when further enabling sqlite:

 + usr/bin/sqlite3
 + usr/lib/libsqlite3.so.0.8.6
 + usr/lib/sqlite3.8.0/libsqlite3.8.0.so
 + usr/lib/sqlite3.8.0/pkgIndex.tcl
 + usr/lib/tcl8/8.6/tdbc/sqlite3-1.0.0.tm
 + usr/lib/tdbc1.0.0/libtdbc1.0.0.so
 + usr/lib/tdbc1.0.0/pkgIndex.tcl
 + usr/lib/tdbc1.0.0/tdbcConfig.sh
 + usr/lib/tdbc1.0.0/tdbc.tcl

. And the normal diffstat
 package/tcl/Config.in                        | 13 ++++++--
 package/tcl/tcl-0001-dont-build-compat.patch | 32 ++++++++++++++++++
 package/tcl/tcl-8.4.19-strtod.patch          | 11 ------
 package/tcl/tcl.mk                           | 50 ++++++++++++++++++++++++----
 package/tcllib/tcllib.mk                     |  2 +-
 5 files changed, 86 insertions(+), 22 deletions(-)
 create mode 100644 package/tcl/tcl-0001-dont-build-compat.patch
 delete mode 100644 package/tcl/tcl-8.4.19-strtod.patch

diff --git a/package/tcl/Config.in b/package/tcl/Config.in
index 5dcf63d..db41d65 100644
--- a/package/tcl/Config.in
+++ b/package/tcl/Config.in
@@ -1,28 +1,35 @@
 config BR2_PACKAGE_TCL
 	bool "tcl"
+	# fork()
+	depends on BR2_USE_MMU
+	depends on BR2_INET_IPV6
 	help
 	  TCL (Tool Command Language) is a simple textual language.
 
 	  http://www.tcl.tk
 
+comment "tcl needs a toolchain w/ ipv6"
+	depends on BR2_USE_MMU
+	depends on !BR2_INET_IPV6
+
 if BR2_PACKAGE_TCL
 
 config BR2_PACKAGE_TCL_DEL_ENCODINGS
-	bool "delete encodings (saves 1.4Mb)"
+	bool "delete encodings (saves 1.6Mb)"
 	default y
 	help
 	  Delete encoding files for TCL. If your programs do not use
 	  various tcl character recoding functions, you may safely
 	  choose Y here.
 
-	  It saves approx. 1.4 Mb of space.
+	  It saves approx. 1.6 Mb of space.
 
 config BR2_PACKAGE_TCL_SHLIB_ONLY
 	bool "install only shared library"
 	default y
 	help
 	  Install only TCL shared library and not binary tcl
-	  interpreter(tclsh8.4).
+	  interpreter (tclsh).
 
 	  Saves ~14kb.
 
diff --git a/package/tcl/tcl-0001-dont-build-compat.patch b/package/tcl/tcl-0001-dont-build-compat.patch
new file mode 100644
index 0000000..85c5c57
--- /dev/null
+++ b/package/tcl/tcl-0001-dont-build-compat.patch
@@ -0,0 +1,32 @@
+From: Andrew Ruder <andrew.ruder at elecsyscorp.com>
+Subject: [PATCH] Disable tcl compatibility layers
+
+Turn off building compatibility layers for old/broken versions of
+standard functions (strstr, strtoul, strtod) with the assumption that
+anything buildroot is using as a standard C library will be good enough
+to not have broken behavior.
+
+Signed-off-by: Andrew Ruder <andrew.ruder at elecsyscorp.com>
+---
+
+diff --git a/unix/tcl.m4 b/unix/tcl.m4
+--- a/unix/tcl.m4
++++ b/unix/tcl.m4
+@@ -2466,7 +2466,7 @@ AC_DEFUN([SC_BUGGY_STRTOD], [
+ 		    }
+ 		    exit(0);
+ 		}], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
+-		    tcl_cv_strtod_buggy=buggy)])
++		    tcl_cv_strtod_buggy=ok)])
+ 	if test "$tcl_cv_strtod_buggy" = buggy; then
+ 	    AC_LIBOBJ([fixstrtod])
+ 	    USE_COMPAT=1
+@@ -2725,7 +2725,7 @@ AC_DEFUN([SC_TCL_CHECK_BROKEN_FUNC],[
+     if test ["$tcl_ok"] = 1; then
+ 	AC_CACHE_CHECK([proper ]$1[ implementation], [tcl_cv_]$1[_unbroken],
+ 	    AC_TRY_RUN([[int main() {]$2[}]],[tcl_cv_]$1[_unbroken]=ok,
+-		[tcl_cv_]$1[_unbroken]=broken,[tcl_cv_]$1[_unbroken]=unknown))
++		[tcl_cv_]$1[_unbroken]=broken,[tcl_cv_]$1[_unbroken]=ok))
+ 	if test ["$tcl_cv_]$1[_unbroken"] = "ok"; then
+ 	    tcl_ok=1
+ 	else
diff --git a/package/tcl/tcl-8.4.19-strtod.patch b/package/tcl/tcl-8.4.19-strtod.patch
deleted file mode 100644
index a997454..0000000
--- a/package/tcl/tcl-8.4.19-strtod.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- tcl8.4.9/compat/strtod.c	2002-02-25 16:26:12.000000000 +0200
-+++ tcl8.4.9/compat/strtod.c	2005-05-30 08:55:18.000000000 +0300
-@@ -24,6 +24,8 @@
- #define NULL 0
- #endif
- 
-+#undef strtod
-+
- static int maxExponent = 511;	/* Largest possible base 10 exponent.  Any
- 				 * exponent larger than this will already
- 				 * produce underflow or overflow, so there's
diff --git a/package/tcl/tcl.mk b/package/tcl/tcl.mk
index 4647f03..efb2ec8 100644
--- a/package/tcl/tcl.mk
+++ b/package/tcl/tcl.mk
@@ -4,24 +4,52 @@
 #
 ################################################################################
 
-TCL_VERSION_MAJOR = 8.4
-TCL_VERSION = $(TCL_VERSION_MAJOR).19
+TCL_VERSION_MAJOR = 8.6
+TCL_VERSION = $(TCL_VERSION_MAJOR).1
 TCL_SOURCE = tcl$(TCL_VERSION)-src.tar.gz
 TCL_SITE = http://downloads.sourceforge.net/project/tcl/Tcl/$(TCL_VERSION)
 TCL_LICENSE = tcl license
 TCL_LICENSE_FILES = license.terms
 TCL_SUBDIR = unix
 TCL_INSTALL_STAGING = YES
+TCL_AUTORECONF = YES
+
+# Note that --with-system-sqlite will only make a difference
+# in the sqlite package (which gets removed if sqlite not
+# configured).  Don't need to worry about conditionally including
+# it in the configure options
 TCL_CONF_OPT = \
 		--disable-symbols \
 		--disable-langinfo \
-		--disable-framework
+		--disable-framework \
+		--with-system-sqlite
 
 HOST_TCL_CONF_OPT = \
 		--disable-symbols \
 		--disable-langinfo \
 		--disable-framework
 
+# I haven't found a good way to force pkgs to not build
+# or configure without just removing the entire pkg directory.
+define HOST_TCL_REMOVE_PACKAGES
+	rm -fr $(@D)/pkgs/sqlite3.8.0 \
+	       $(@D)/pkgs/tdbc1.0.0 \
+	       $(@D)/pkgs/tdbcmysql1.0.0 \
+	       $(@D)/pkgs/tdbcodbc1.0.0 \
+	       $(@D)/pkgs/tdbcpostgres1.0.0 \
+	       $(@D)/pkgs/tdbcsqlite3-1.0.0
+endef
+HOST_TCL_PRE_CONFIGURE_HOOKS += HOST_TCL_REMOVE_PACKAGES
+define TCL_REMOVE_PACKAGES
+	rm -fr $(if $(BR2_PACKAGE_SQLITE),,$(@D)/pkgs/sqlite3.8.0) \
+	       $(if $(BR2_PACKAGE_SQLITE),,$(@D)/pkgs/tdbc1.0.0) \
+	       $(@D)/pkgs/tdbcmysql1.0.0 \
+	       $(@D)/pkgs/tdbcodbc1.0.0 \
+	       $(@D)/pkgs/tdbcpostgres1.0.0 \
+	       $(if $(BR2_PACKAGE_SQLITE),,$(@D)/pkgs/tdbcsqlite3-1.0.0)
+endef
+TCL_PRE_CONFIGURE_HOOKS += TCL_REMOVE_PACKAGES
+
 ifeq ($(BR2_PACKAGE_TCL_DEL_ENCODINGS),y)
 define TCL_REMOVE_ENCODINGS
 	rm -rf $(TARGET_DIR)/usr/lib/tcl$(TCL_VERSION_MAJOR)/encoding/*
@@ -41,12 +69,20 @@ endef
 TCL_POST_INSTALL_TARGET_HOOKS += TCL_SYMLINK_TCLSH
 endif
 
-# library get installed read only, so strip fails
-define TCL_FIXUP_RO_LIB
-	chmod +w $(TARGET_DIR)/usr/lib/libtcl*
+# Until someone needs it, we don't handle locale installation.  tcl has
+# a complicated method of translating LANG-style locale names into its internal
+# .msg name which makes it difficult to save the correct locales per the
+# configured whitelist.
+define TCL_REMOVE_EXTRA
+	rm -fr $(TARGET_DIR)/usr/lib/tclConfig.sh \
+	       $(TARGET_DIR)/usr/lib/tclooConfig.sh \
+	       $(TARGET_DIR)/usr/lib/tcl$(TCL_VERSION_MAJOR)/tclAppInit.c \
+	       $(TARGET_DIR)/usr/lib/tcl$(TCL_VERSION_MAJOR)/msgs
 endef
+TCL_POST_INSTALL_TARGET_HOOKS += TCL_REMOVE_EXTRA
 
-TCL_POST_INSTALL_TARGET_HOOKS += TCL_FIXUP_RO_LIB
+TCL_DEPENDENCIES = $(if $(BR2_PACKAGE_SQLITE),sqlite)
+HOST_TCL_DEPENDENCIES =
 
 $(eval $(autotools-package))
 $(eval $(host-autotools-package))
diff --git a/package/tcllib/tcllib.mk b/package/tcllib/tcllib.mk
index f2aca36..037ec1c 100644
--- a/package/tcllib/tcllib.mk
+++ b/package/tcllib/tcllib.mk
@@ -10,6 +10,6 @@ TCLLIB_SITE          = http://downloads.sourceforge.net/project/tcllib/tcllib/$(
 TCLLIB_LICENSE       = tcl license
 TCLLIB_LICENSE_FILES = license.terms
 TCLLIB_DEPENDENCIES  = host-tcl
-TCLLIB_CONF_ENV      = ac_cv_path_tclsh="$(HOST_DIR)/usr/bin/tclsh8.4"
+TCLLIB_CONF_ENV      = ac_cv_path_tclsh="$(HOST_DIR)/usr/bin/tclsh$(TCL_VERSION_MAJOR)"
 
 $(eval $(autotools-package))
-- 
1.9.0.rc3.12.gbc97e2d



More information about the buildroot mailing list