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