1##
2# Makefile for tcl
3##
4
5Project = tcl
6
7install_source:: check_for_autoconf
8check_for_autoconf:
9	$(_v) autoconf -V > /dev/null 2>&1 || (echo "installsrc phase needs autoconf installed" && false)
10
11include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make
12
13## Build settings ##
14
15TCL_DSTROOT           = $(if $(DSTROOT),$(DSTROOT),/tmp/tcl/Release)
16
17TCL_FRAMEWORK_DIR     = $(TCL_DSTROOT)$(NSFRAMEWORKDIR)
18TCLSH                 = $(TCL_DSTROOT)$(USRBINDIR)/tclsh
19WISH                  = $(TCL_DSTROOT)$(USRBINDIR)/wish
20
21TCL_EXT_DIR           = $(NSLIBRARYDIR)/Tcl
22TCL_SRC_DIR           = $(SRCROOT)/tcl
23TCL_VERSION           = $(shell $(GREP) "TCL_VERSION=" "$(TCL_SRC_DIR)/tcl/unix/configure" | $(CUT) -d '=' -f 2)
24TCL_INIT              = $(TCL_FRAMEWORK_DIR)/Tcl.framework/Versions/$(TCL_VERSION)/Resources/Scripts/init.tcl
25
26ext ext84: TCL_EXT_DIR= $(NSLIBRARYDIR)/Tcl/$(TCL_VERSION)
27ext84: TCL_SRC_DIR    = $(SRCROOT)/tcl84
28ext:   TCL_VERSCHECK  = [catch {package present Tcl $(TCL_VERSION)-}]
29ext84: TCL_VERSCHECK  = [package vcompare $(TCL_VERSION) $$::tcl_version]
30ext84: TCL_AUTOPATH   = $(NSFRAMEWORKDIR)/Tk.framework/Versions/$(TCL_VERSION)/Resources
31fetch:: SRCROOT       = $(CURDIR)
32
33TCL_CONFIG_DIR        = $(OBJROOT)
34AC_VALS               = ac_cv_path_tclsh=$(TCLSH) ac_cv_path_wish=$(WISH) ac_cv_header_stdc=yes
35
36MAKE_ARGS             = TclExtLibDir=$(TCL_EXT_DIR) LicenseInstallDir=$(OSL) Plist=$(PLIST) \
37                        TclFramework=$(TCL_FRAMEWORK_DIR)/Tcl.framework Tclsh=$(TCLSH) \
38                        TkFramework=$(TCL_FRAMEWORK_DIR)/Tk.framework Wish=$(WISH) \
39                        CONFIG_SITE=$(TCL_CONFIG_DIR)/config.site
40
41ext:   EXT_MAKE_ARGS  = PureTclExt=NO Tcl84Ext=NO
42ext84: EXT_MAKE_ARGS  = PureTclExt=NO Tcl84Ext=YES
43ext_puretcl: EXT_MAKE_ARGS = PureTclExt=YES
44
45PLIST                 = $(SRCROOT)/$(Project).plist
46OSV                   = /usr/local/OpenSourceVersions
47OSL                   = /usr/local/OpenSourceLicenses
48
49export PATH          := $(PATH):/usr/X11/bin
50Cruft                += .git
51
52SubProjects          := tcl84 tk84 tcl tk tcl_ext
53Actions              := almostclean extract fetch install-license
54Actions_nodeps       := install
55include tcl_ext/SubprojActions.make
56
57## Targets ##
58
59core84               := install-tcl84 install-tk84 ext84 cleanup84
60core                 := install-tcl install-tk ext ext_puretcl
61ext                  := install-tcl_ext
62
63install_source:: extract
64
65build::
66	$(_v) $(MKDIR) $(TCL_CONFIG_DIR)
67	$(_v) echo "cache_file=$(TCL_CONFIG_DIR)/config.cache" > "$(TCL_CONFIG_DIR)/config.site"
68	$(_v) for v in $(AC_VALS); do echo "$$v" >> "$(TCL_CONFIG_DIR)/config.site"; done
69
70install:: $(core84) $(core) install-plist
71
72install1:: build $(core84)
73install2:: build $(core)
74install3:: install-plist
75
76ext ext84:
77	$(_v) $(MAKE) $(ext) $(EXT_MAKE_ARGS) \
78		TCL_EXT_DIR=$(TCL_EXT_DIR) TCL_CONFIG_DIR=$(OBJROOT) \
79		OBJROOT=$(OBJROOT)/$@ SYMROOT=$(SYMROOT)/$@ 
80	$(_v) printf '%s\n%s%s\n' 'if {$(TCL_VERSCHECK)} {return}' \
81		'if {[lsearch -exact $$::auto_path $$dir] == -1} {' \
82		'lappend ::auto_path $$dir; lappend ::tcl_pkgPath $$dir}' \
83		> $(OBJROOT)/$@/pkgIndex.tcl
84	$(_v) printf '\n%s\n    %s%s\n\t%s\n\t    %s%s\n\t%s\n    %s\n' \
85		'proc tcl::DarwinFixAutoPath {} {' \
86		'if {[lsearch -exact $$::auto_path $(TCL_EXT_DIR)] == -1 && ' \
87		'[lsearch -exact $$::auto_path $(shell dirname $(TCL_EXT_DIR))] != -1} {' \
88		'foreach g {::auto_path ::tcl_pkgPath} {' \
89		'set $$g [linsert [set $$g] [expr {[lsearch -exact [set $$g] ' \
90		'$(shell dirname $(TCL_EXT_DIR))]+1}] $(TCL_EXT_DIR)]' '}' '}'\
91	        >> $(TCL_INIT)
92	$(_v) if [ -n "$(TCL_AUTOPATH)" ]; then printf '%s%s\n' \
93		'if {[lsearch -exact $$::auto_path $(TCL_AUTOPATH)] == -1} {' \
94		'lappend ::auto_path $(TCL_AUTOPATH)}' \
95		>> $(OBJROOT)/$@/pkgIndex.tcl; \
96		printf '    %s%s\n\t%s%s\n    %s\n' \
97		'if {[lsearch -exact $$::auto_path $(TCL_AUTOPATH)] == -1 && ' \
98		'[lsearch -exact $$::auto_path $(NSFRAMEWORKDIR)] != -1} {' \
99		'set ::auto_path [linsert $$::auto_path [expr {[lsearch -exact ' \
100		'$$::auto_path $(NSFRAMEWORKDIR)]+1}] $(TCL_AUTOPATH)]' '}' \
101	        >> $(TCL_INIT); fi
102	$(_v) printf '%s\n%s\n%s\n' \
103		'}' 'tcl::DarwinFixAutoPath' 'rename tcl::DarwinFixAutoPath {}' \
104	        >> $(TCL_INIT)
105	$(_v) $(INSTALL_FILE) $(OBJROOT)/$@/pkgIndex.tcl $(DSTROOT)$(TCL_EXT_DIR)
106
107ext_puretcl:
108	$(_v) $(MAKE) $(ext) $(EXT_MAKE_ARGS)
109
110cleanup84:
111	$(_v) $(RMDIR) $(DSTROOT)$(USRDIR)/{include,lib,share/man/{man3,mann},local/include}
112	$(_v) $(RM) $(DSTROOT)$(NSFRAMEWORKDIR)/{Tcl,Tk}.framework/*8.4*
113	$(_v) $(RMDIR) $(DSTROOT)$(NSFRAMEWORKDIR)/{Tcl,Tk}.framework/Versions/8.4/Resources/Documentation
114
115install-plist: install-license
116	$(_v) $(MKDIR) $(DSTROOT)$(OSV) && $(INSTALL_FILE) $(PLIST) $(DSTROOT)$(OSV)/$(Project).plist
117
118extract::
119	$(_v) $(FIND) "$(SRCROOT)" $(Find_Cruft) -depth -exec $(RMDIR) "{}" \;
120
121.PHONY: ext ext84 ext_puretcl cleanup84 install-plist
122.NOTPARALLEL:
123