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