[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