1##
2# Makefile for Tcl
3##
4# Daniel A. Steffen <das@users.sourceforge.net>:
5#   01/Jun/04: modified for tcl 8.4.6, no apple patches needed anymore,
6#              all apple specific fixes now done by makefile override
7#   25/Jul/04: submitted with framework build support (3333098)
8##
9
10# Project info
11Project               = tcl
12ProjectName           = Tcl
13UserType              = Developer
14ToolType              = Commands
15
16# Fetch info
17Release               = 8.5.9
18UrlFile               = $(Project)$(Release)
19Url                   = $(UrlBase)/$(Project)/$(ProjectName)/$(Release)/$(UrlFile)-src$(UrlExt)
20
21Configure             = $(Sources)/unix/configure
22Extra_Environment     = INSTALL_PATH="$(NSFRAMEWORKDIR)" PREFIX="$(USRDIR)" \
23			SYMROOT="$(SYMROOT)" OBJROOT="$(OBJROOT)" \
24			MANDIR="$(MANDIR)" INSTALL_MANPAGES=1 \
25			EXTRA_CONFIGURE_ARGS="$(Configure_Flags)" \
26			TCL_PACKAGE_PATH="$(Tcl_Package_Path)" \
27			TCL_MODULE_PATH="$(Tcl_Module_Path)"
28AfterInstall          = extra-int-headers fix-tclConfig lipo links compress_man_pages fix-perms
29
30include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make
31include ../tcl_ext/Fetch.make
32
33# Tcl needs to be built thread-safe, using --enable-threads. As of 8.4.4
34# the Mac OS X framework Makefile passes --enable-threads to configure
35# by default. (3290551)
36#Configure_Flags       += --enable-threads
37
38Install_Flags         = INSTALL_ROOT="$(DSTROOT)"
39
40Version               = $(shell $(GREP) "TCL_VERSION=" "$(Configure)" | $(CUT) -d '=' -f 2)
41
42FmwkDir               = $(NSFRAMEWORKDIR)/$(ProjectName).framework/Versions/$(Version)
43LibItems              = tclConfig.sh libtclstub$(Version).a
44HeaderItems           = tcl.h tclDecls.h tclPlatDecls.h tclTomMath.h tclTomMathDecls.h
45PrivateHeaderItems    = tclInt.h tclIntDecls.h tclIntPlatDecls.h \
46                        tclPort.h tclUnixPort.h tclCompile.h
47
48Tcl_Module_Path       = ~/Library/Tcl /Library/Tcl /System/Library/Tcl
49Tcl_Package_Path      = $(Tcl_Module_Path) \
50                        ~/Library/Frameworks /Library/Frameworks /System/Library/Frameworks
51
52# add suffix to tcl manpage names to avoid conflicts (3212727)
53Manpage_Suffix        = tcl
54Configure_Flags       += --enable-man-suffix=$(Manpage_Suffix)
55
56extra-int-headers:
57	$(_v) $(INSTALL_FILE) "$(Sources)/generic/tclCompile.h" \
58	        "$(DSTROOT)$(FmwkDir)/PrivateHeaders"
59	$(_v) $(MKDIR) "$(DSTROOT)$(FmwkDir)/Headers/tcl-private"
60	$(_v) $(MV) -f $(foreach f,$(PrivateHeaderItems),"$(DSTROOT)$(FmwkDir)/PrivateHeaders/$(f)") "$(DSTROOT)$(FmwkDir)/Headers/tcl-private"
61	$(_v) $(RMDIR) "$(DSTROOT)$(FmwkDir)/PrivateHeaders"
62	$(_v) $(LN) -fsh "Headers/tcl-private" "$(DSTROOT)$(FmwkDir)/PrivateHeaders"
63
64fix-tclConfig:
65	$(_v) $(SED) -e "s#$(CFLAGS)##g" -e "s#$(LDFLAGS)##g" -e "/^TCL_CC=/s#'.*/usr/bin#'/usr/bin#" "$(DSTROOT)$(FmwkDir)/tclConfig.sh" > "$(SYMROOT)/tclConfig.sh"
66	$(_v) $(INSTALL_FILE) "$(SYMROOT)/tclConfig.sh" "$(DSTROOT)$(FmwkDir)"
67
68lipo_archs := $(filter ppc,$(RC_ARCHS))
69ifdef lipo_archs
70define lipo
71	$(_v) lipo $(patsubst %,-remove %,$(patsubst ppc,ppc7400,$(lipo_archs))) -output $(1) $(1)
72endef
73endif
74lipo:
75	$(call lipo,$(DSTROOT)$(USRBINDIR)/tclsh$(Version))
76
77links:
78	$(_v) $(INSTALL_DIRECTORY) "$(DSTROOT)$(USRLIBDIR)"
79	$(_v) $(LN) -fs "../..$(FmwkDir)/$(ProjectName)" "$(DSTROOT)$(USRLIBDIR)/libtcl$(Version).dylib"
80	$(_v) $(LN) -fs "libtcl$(Version).dylib" "$(DSTROOT)$(USRLIBDIR)/libtcl.dylib"
81	$(_v) $(LN) -fs $(foreach f,$(LibItems),"../..$(FmwkDir)/$(f)") "$(DSTROOT)$(USRLIBDIR)"
82	$(_v) $(INSTALL_DIRECTORY) "$(DSTROOT)$(USRINCLUDEDIR)"
83	$(_v) $(LN) -fs $(foreach f,$(HeaderItems),"../..$(FmwkDir)/Headers/$(f)") \
84	        "$(DSTROOT)$(USRINCLUDEDIR)"
85# Install compat sym links for private headers in /usr/local/include (3198305)
86	$(_v) $(INSTALL_DIRECTORY) "$(DSTROOT)$(USRDIR)/local/include"
87	$(_v) $(LN) -fs $(foreach f,$(PrivateHeaderItems),"../../..$(FmwkDir)/Headers/tcl-private/$(f)") \
88	        "$(DSTROOT)$(USRDIR)/local/include/"
89# Move tclsh.1 to tclsh$(Version).1 and link tclsh.1 to tclsh$(Version).1 (2853545)
90	$(_v) $(MV) -f "$(DSTROOT)$(MANDIR)/man1/tclsh.1$(Manpage_Suffix)" \
91	        "$(DSTROOT)$(MANDIR)/man1/tclsh$(Version).1$(Manpage_Suffix)"
92	$(_v) $(LN) -fs "tclsh$(Version).1$(Manpage_Suffix)" \
93	        "$(DSTROOT)$(MANDIR)/man1/tclsh.1$(Manpage_Suffix)"
94# Move tclsh binary into framework and install symlink to it in $(USRBINDIR)
95	$(_v) $(MV) -f "$(DSTROOT)$(USRBINDIR)/tclsh$(Version)" "$(DSTROOT)$(FmwkDir)"
96	$(_v) $(LN) -fs "../..$(FmwkDir)/tclsh$(Version)" "$(DSTROOT)$(USRBINDIR)/"
97
98fix-perms:
99	$(_v)- $(CHOWN) -R $(Install_User):$(Install_Group) $(DSTROOT)
100	$(_v)- $(FIND) $(DSTROOT) -type f ! -perm -+x ! -perm $(Install_File_Mode) -print0 | $(XARGS) -0 $(CHMOD) $(Install_File_Mode)
101	$(_v)- $(FIND) $(DSTROOT) -type f -perm -+x ! -perm $(Install_Program_Mode) -print0 | $(XARGS) -0 $(CHMOD) $(Install_Program_Mode)
102	$(_v)- $(FIND) $(DSTROOT) -type d ! -perm $(Install_Directory_Mode) -print0 | $(XARGS) -0 $(CHMOD) $(Install_Directory_Mode)
103
104###
105
106Sources               = $(SRCROOT)/$(Project)
107MakeDir               = $(Sources)/macosx
108
109Fmwk                  = $(SYMROOT)/$(ProjectName).framework
110BuildTarget           = $(Project) BUILD_STYLE=Deployment EXTRA_CFLAGS=-DNDEBUG
111InstallTarget         = install-deploy
112
113all: build
114
115build:: $(Fmwk) $(Fmwk).dSYM
116
117$(Fmwk):
118	@echo "Building $(Project)..."
119	$(_v) $(Environment) $(MAKE) -C $(MakeDir) $(BuildTarget)
120
121$(Fmwk).dSYM: $(Fmwk)
122	$(_v) $(DSYMUTIL) -o $(Fmwk).dSYM $(Fmwk)/$(ProjectName)
123	$(call lipo,$(SYMROOT)/tclsh$(Version))
124	$(_v) $(DSYMUTIL) $(SYMROOT)/tclsh$(Version)
125
126install:: $(Fmwk) $(Fmwk).dSYM
127	@echo "Installing $(Project)..."
128	-@$(RM) -f "$(DSTROOT)$(FmwkDir)/PrivateHeaders"
129	$(_v) umask $(Install_Mask) ; $(Environment) $(MAKE) -C $(MakeDir) \
130	        $(Install_Flags) $(InstallTarget)
131	$(_v) $(FIND) $(DSTROOT) $(Find_Cruft) -print0 | $(XARGS) -0 $(RMDIR)
132	$(_v) $(MAKE) $(AfterInstall)
133
134almostclean::
135	@echo "Cleaning $(Project)..."
136	$(_v) $(Environment) $(MAKE) -C $(MakeDir) clean-$(BuildTarget)
137
138.PHONY: almostclean $(AfterInstall)
139.NOTPARALLEL:
140