Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Commit [ca568f] Maximize Restore History

Repo status: analyzing...

Port of universal binary support for Mac OSX from python 2.5. This takes away

the need for the out-of-tree universal binary support that was used to build
the 2.4.3 installer.

Missing here relative to that tree are some changes to IDLE, IMHO those patches
aren't appropriate for the 2.4 branch and users are better of using 2.5's IDLE.

git-svn-id: http://svn.python.org/projects/python/branches/release24-maint@52231 6015fed2-1504-0410-9fe1-9d1591cc4771

ronald.oussoren ronald.oussoren 2006-10-08

<< < 1 2 3 > >> (Page 2 of 3)
added Mac/OSX/pythonw.c
added Mac/BuildScript/resources/ReadMe.txt
added Mac/BuildScript/resources/Welcome.rtf
added Mac/BuildScript/resources/background.jpg
added Mac/BuildScript/scripts/postflight.documentation
added Mac/BuildScript/scripts/postflight.framework
added Mac/BuildScript/scripts/postflight.patch-profile
added Mac/BuildScript/README.txt
added Mac/BuildScript/build-installer.py
added Mac/BuildScript/ncurses-5.5.patch
added Modules/expat/expat_config.h
changed Mac/OSX/Extras.install.py
changed Mac/OSX/fixapplepython23.py
changed Mac/OSXResources/app/Resources/PythonApplet.icns
changed Mac/OSXResources/app/Resources/PythonInterpreter.icns
changed Mac/scripts/BuildApplet.icns
changed Modules/posixmodule.c
changed Modules/socketmodule.c
changed Modules/timemodule.c
changed Python/mactoolboxglue.c
copied Mac/OSX/Makefile -> Mac/OSX/Makefile.in
Mac/OSX/pythonw.c Diff Switch to side-by-side view
Loading...
Mac/BuildScript/resources/ReadMe.txt Diff Switch to side-by-side view
Loading...
Mac/BuildScript/resources/Welcome.rtf Diff Switch to side-by-side view
Loading...
Mac/BuildScript/resources/background.jpg Diff Switch to side-by-side view
Loading...
Mac/BuildScript/scripts/postflight.documentation Diff Switch to side-by-side view
Loading...
Mac/BuildScript/scripts/postflight.framework Diff Switch to side-by-side view
Loading...
Mac/BuildScript/scripts/postflight.patch-profile Diff Switch to side-by-side view
Loading...
Mac/BuildScript/README.txt Diff Switch to side-by-side view
Loading...
Mac/BuildScript/build-installer.py Diff Switch to side-by-side view
Loading...
Mac/BuildScript/ncurses-5.5.patch Diff Switch to side-by-side view
Loading...
Modules/expat/expat_config.h Diff Switch to side-by-side view
Loading...
Mac/OSX/Extras.install.py Diff Switch to side-by-side view
Loading...
Mac/OSX/fixapplepython23.py Diff Switch to side-by-side view
Loading...
Mac/OSXResources/app/Resources/PythonApplet.icns Diff Switch to side-by-side view
Loading...
Mac/OSXResources/app/Resources/PythonInterpreter.icns Diff Switch to side-by-side view
Loading...
Mac/scripts/BuildApplet.icns Diff Switch to side-by-side view
Loading...
Modules/posixmodule.c Diff Switch to side-by-side view
Loading...
Modules/socketmodule.c Diff Switch to side-by-side view
Loading...
Modules/timemodule.c Diff Switch to side-by-side view
Loading...
Python/mactoolboxglue.c Diff Switch to side-by-side view
Loading...
Mac/OSX/Makefile to Mac/OSX/Makefile.in
--- a/Mac/OSX/Makefile
+++ b/Mac/OSX/Makefile.in
@@ -2,85 +2,83 @@
 # main Makefile. The next couple of variables are overridden on the 
 # commandline in that case.
 
-VERSION=2.4
+VERSION=@VERSION@
 builddir = ../..
-srcdir = ../..
+srcdir = @srcdir@
 prefix=/Library/Frameworks/Python.framework/Versions/$(VERSION)
 LIBDEST=$(prefix)/lib/python$(VERSION)
 BUILDPYTHON=$(builddir)/python.exe
+RUNSHARED=       @RUNSHARED@
 DESTDIR=
-# Test whether to use xcodebuild (preferred) or pbxbuild:
-ifeq ($(shell ls /usr/bin/xcodebuild),/usr/bin/xcodebuild)
-PBXBUILD=xcodebuild
-else
-PBXBUILD=pbxbuild
-endif
+LDFLAGS=@LDFLAGS@
+FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@
+
 
 # These are normally glimpsed from the previous set
-bindir=/usr/local/bin
-PYTHONAPPSPATH=/Applications/MacPython-$(VERSION)
+bindir=@exec_prefix@/bin
+PYTHONAPPSPATH=/Applications/MacPython $(VERSION)
 PYTHONAPPSDIR=$(PYTHONAPPSPATH)
 APPINSTALLDIR=$(prefix)/Resources/Python.app
 
 # Variables for installing the "normal" unix binaries
+INSTALLED_PYDOC=$(prefix)/bin/pydoc
 INSTALLED_PYTHON=$(prefix)/bin/python
-INSTALLED_PYTHONW=$(APPINSTALLDIR)/Contents/MacOS/Python
+INSTALLED_PYTHONW=$(prefix)/bin/pythonw
+INSTALLED_PYTHONAPP=$(APPINSTALLDIR)/Contents/MacOS/Python
 
 # Items more-or-less copied from the main Makefile
 DIRMODE=755
 FILEMODE=644
-INSTALL=/usr/bin/install -c
+INSTALL=@INSTALL@
 INSTALL_SYMLINK=ln -fsn
-INSTALL_PROGRAM=${INSTALL}
-INSTALL_SCRIPT= ${INSTALL_PROGRAM}
-INSTALL_DATA=	${INSTALL} -m ${FILEMODE}
-LN=ln
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_SCRIPT=@INSTALL_SCRIPT@
+INSTALL_DATA=@INSTALL_DATA@
+LN=@LN@
 STRIPFLAG=-s
-##OPT=-g -O3 -Wall -Wstrict-prototypes -Wno-long-double -no-cpp-precomp \
-##	-fno-common -dynamic
-##INCLUDES=-I$(builddir) -I$(srcdir)/Include -I$(srcdir)/Mac/Include
-##DEFINES=
-##
-##CFLAGS=$(OPT) $(DEFINES) $(INCLUDES)
-##LDFLAGS=-F$(builddir) -framework System -framework Python -framework Carbon \
-##	-framework Foundation
-##CC=cc
-##LD=cc
 CPMAC=/Developer/Tools/CpMac
 
-APPTEMPLATE=$(srcdir)/Mac/OSXResources/app
+APPTEMPLATE=$(srcdir)/../OSXResources/app
 APPSUBDIRS=MacOS Resources Resources/English.lproj \
 	Resources/English.lproj/Documentation \
 	Resources/English.lproj/Documentation/doc \
 	Resources/English.lproj/Documentation/ide
-DOCDIR=$(srcdir)/Mac/OSXResources/app/Resources/English.lproj/Documentation
+DOCDIR=$(srcdir)/../OSXResources/app/Resources/English.lproj/Documentation
 DOCINDEX=$(DOCDIR)/"Documentation idx"
-CACHERSRC=$(srcdir)/Mac/scripts/cachersrc.py
-compileall=$(srcdir)/Lib/compileall.py
-bundlebuilder=$(srcdir)/Lib/plat-mac/bundlebuilder.py
+CACHERSRC=$(srcdir)/../scripts/cachersrc.py
+compileall=$(srcdir)/../../Lib/compileall.py
 
 installapps: install_PythonLauncher install_Python install_BuildApplet install_IDE \
-	install_IDLE install_PackageManager checkapplepython
+	install_IDLE install_PackageManager checkapplepython install_pythonw \
+	install_versionedtools
+
+install_pythonw: pythonw
+	$(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)"
+	$(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/python$(VERSION)"
+	ln -sf python$(VERSION) "$(DESTDIR)$(prefix)/bin/python"
+	ln -sf pythonw$(VERSION) "$(DESTDIR)$(prefix)/bin/pythonw"
+
+pythonw: $(srcdir)/pythonw.c
+	$(CC) $(LDFLAGS) -o $@ $(srcdir)/pythonw.c \
+	-DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/Python"'
 
 install_PythonLauncher:
-	cd $(srcdir)/Mac/OSX/PythonLauncher/PythonLauncher.pbproj ; \
-	$(PBXBUILD) -target PythonLauncher -buildstyle Deployment install \
-		DSTROOT=$(DESTDIR)/ INSTALL_PATH=$(PYTHONAPPSPATH)
+	cd PythonLauncher && make install
 
 install_Python:
 	@if test ! -f $(DOCINDEX); then \
 		echo WARNING: you should run Apple Help Indexing Tool on $(DOCDIR); \
 	fi
-	@for i in $(PYTHONAPPSDIR) $(APPINSTALLDIR) $(APPINSTALLDIR)/Contents; do \
+	@for i in "$(PYTHONAPPSDIR)" "$(APPINSTALLDIR)" "$(APPINSTALLDIR)/Contents"; do \
 		if test ! -d $(DESTDIR)$$i; then \
 			echo "Creating directory $(DESTDIR)$$i"; \
-			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
+			$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$$i"; \
 		fi;\
 	done
 	@for i in $(APPSUBDIRS); do \
 		if test ! -d $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i; then \
 			echo "Creating directory $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
-			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i; \
+			$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
 		else	true; \
 		fi; \
 	done
@@ -88,7 +86,7 @@
 	do \
 		a=$(APPTEMPLATE)/$$d; \
 		if test ! -d $$a; then continue; else true; fi; \
-		b=$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d; \
+		b="$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d"; \
 		for i in $$a/*; \
 		do \
 			case $$i in \
@@ -101,53 +99,53 @@
 				$(CPMAC) "$$i" $$b; \
 				;; \
 			*) \
-				if test -d $$i; then continue; fi; \
-				if test -x $$i; then \
-				    echo $(INSTALL_SCRIPT) $$i $$b; \
-				    $(INSTALL_SCRIPT) $$i $$b; \
+				if test -d "$$i"; then continue; fi; \
+				if test -x "$$i"; then \
+				    echo $(INSTALL_SCRIPT) "$$i" "$$b"; \
+				    $(INSTALL_SCRIPT) "$$i" "$$b"; \
 				else \
-				    echo $(INSTALL_DATA) $$i $$b; \
-				    $(INSTALL_DATA) $$i $$b; \
+				    echo $(INSTALL_DATA) "$$i" "$$b"; \
+				    $(INSTALL_DATA) "$$i" "$$b"; \
 				fi;; \
 			esac; \
 		done; \
 	done
-	$(INSTALL_PROGRAM) $(STRIPFLAG) $(BUILDPYTHON) $(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/Python
+	$(INSTALL_PROGRAM) $(STRIPFLAG) "$(BUILDPYTHON)" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/Python"
 
 install_IDE:
-	@if ! $(BUILDPYTHON) -c "import waste"; then  \
+	@if ! $(RUNSHARED) $(BUILDPYTHON) -c "import waste"; then  \
 		echo PythonIDE needs the \"waste\" extension module; \
 		echo See Mac/OSX/README for details; \
 	else \
-		echo $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
-		    --destroot "$(DESTDIR)" \
-			--python $(INSTALLED_PYTHONW) \
-			--output $(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app --noargv \
+		echo $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/../scripts/BuildApplet.py \
+		    --destroot "$(DESTDIR)" \
+			--python "$(INSTALLED_PYTHONAPP)" \
+			--output "$(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app" --noargv \
 			$(srcdir)/Mac/Tools/IDE/PythonIDE.py ; \
-		$(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
-		    --destroot "$(DESTDIR)" \
-			--python $(INSTALLED_PYTHONW) \
-			--output $(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app --noargv \
+		$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/../scripts/BuildApplet.py \
+		    --destroot "$(DESTDIR)" \
+			--python "$(INSTALLED_PYTHONAPP)" \
+			--output "$(DESTDIR)$(PYTHONAPPSDIR)/PythonIDE.app" --noargv \
 			$(srcdir)/Mac/Tools/IDE/PythonIDE.py; \
 	fi
 
 install_PackageManager:
-	@if ! $(BUILDPYTHON) -c "import waste"; then  \
+	@if ! $(RUNSHARED) $(BUILDPYTHON) -c "import waste"; then  \
 		echo PackageManager needs the \"waste\" extension module; \
 		echo See Mac/OSX/README for details; \
 	else \
-		echo $(BUILDPYTHON) $(bundlebuilder) \
+		echo $(RUNSHARED) $(BUILDPYTHON) $(bundlebuilder) \
 			--builddir $(DESTDIR)$(PYTHONAPPSDIR)/ \
 		    --destroot "$(DESTDIR)" \
-			--python $(INSTALLED_PYTHONW) \
+			--python $(INSTALLED_PYTHONAPP) \
 			--resource $(srcdir)/Mac/Tools/IDE/PythonIDE.rsrc \
 			--mainprogram $(srcdir)/Mac/Tools/IDE/PackageManager.py \
 			--iconfile $(srcdir)/Mac/Tools/IDE/PackageManager.icns \
 			--creator Pimp build; \
-		$(BUILDPYTHON) $(bundlebuilder) \
+		$(RUNSHARED) $(BUILDPYTHON) $(bundlebuilder) \
 			--builddir $(DESTDIR)$(PYTHONAPPSDIR)/ \
 		    --destroot "$(DESTDIR)" \
-			--python $(INSTALLED_PYTHONW) \
+			--python $(INSTALLED_PYTHONAPP) \
 			--resource $(srcdir)/Mac/Tools/IDE/PythonIDE.rsrc \
 			--mainprogram $(srcdir)/Mac/Tools/IDE/PackageManager.py \
 			--iconfile $(srcdir)/Mac/Tools/IDE/PackageManager.icns \
@@ -155,31 +153,20 @@
 	fi
 
 install_IDLE:
-	@if ! $(BUILDPYTHON) -c "import _tkinter"; then \
+	@if ! $(RUNSHARED) $(BUILDPYTHON) -c "import _tkinter"; then \
 		echo IDLE needs the \"Tkinter\" extension module; \
 		echo See Mac/OSX/README for details; \
 	else \
-		echo $(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
-			--python $(INSTALLED_PYTHONW) \
-		    --destroot "$(DESTDIR)" \
-			--output $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app \
-			--extra $(srcdir)/Lib/idlelib \
-			$(srcdir)/Tools/scripts/idle ; \
-		$(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
-			--python $(INSTALLED_PYTHONW) \
-		    --destroot "$(DESTDIR)" \
-			--output $(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app \
-			--extra $(srcdir)/Lib/idlelib:Contents/Resources/idlelib \
-			$(srcdir)/Tools/scripts/idle ; \
+		cd IDLE && make install ;\
 	fi
 
 
 install_BuildApplet:
-	$(BUILDPYTHON) $(srcdir)/Mac/scripts/BuildApplet.py \
+	$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/../scripts/BuildApplet.py \
 		--destroot "$(DESTDIR)" \
-		--python $(INSTALLED_PYTHONW) \
-		--output $(DESTDIR)$(PYTHONAPPSDIR)/BuildApplet.app \
-		$(srcdir)/Mac/scripts/BuildApplet.py
+		--python "$(INSTALLED_PYTHONAPP)" \
+		--output "$(DESTDIR)$(PYTHONAPPSDIR)/BuildApplet.app" \
+		"$(srcdir)/../scripts/BuildApplet.py"
 
 MACLIBDEST=$(LIBDEST)/plat-mac
 MACTOOLSDEST=$(prefix)/Mac/Tools
@@ -235,12 +222,12 @@
 	done
 
 
-	$(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
-	$(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
-	$(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
+	$(RUNSHARED) $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
+	$(RUNSHARED) $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
+	$(RUNSHARED) $(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
 
 #
-# We use the full name here in stead of $(INSTALLED_PYTHONW), because
+# We use the full name here in stead of $(INSTALLED_PYTHONAPP), because
 # the latter may be overridden by Makefile.jaguar when building for a pre-installed
 # /usr/bin/python
 $(APPINSTALLDIR)/Contents/MacOS/Python: install_Python
@@ -249,25 +236,59 @@
 # At least this rule will give an error if it doesn't exist.
 
 installunixtools:
-	$(INSTALL) -d $(DESTDIR)$(bindir)
-	$(INSTALL_SYMLINK) $(INSTALLED_PYTHON) $(DESTDIR)$(bindir)/python$(VERSION)
-	$(INSTALL_SYMLINK) python$(VERSION) $(DESTDIR)$(bindir)/python
-	echo "#!/bin/sh" > pythonw.sh
-	echo "exec \"$(INSTALLED_PYTHONW)\" \"\$$@\"" >> pythonw.sh
-	$(INSTALL) pythonw.sh $(DESTDIR)$(bindir)/pythonw$(VERSION)
-	$(INSTALL_SYMLINK) pythonw$(VERSION) $(DESTDIR)$(bindir)/pythonw
-
-installextras:
-	$(INSTALL) -d $(DESTDIR)$(PYTHONAPPSDIR)/Extras
-	$(INSTALL) $(srcdir)/Mac/OSX/Extras.ReadMe.txt $(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe
-	$(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Demo \
-		$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo
-	$(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Tools \
-		$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Tools
+	if [ ! -d "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ]; then  \
+		$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ;\
+	fi
+	for fn in python pythonw idle pydoc smtpd.py   \
+		python$(VERSION) pythonw$(VERSION) idle$(VERSION) \
+		pydoc$(VERSION) smtpd$(VERSION).py ;\
+	do \
+		ln -fs "$(prefix)/bin/$${fn}" "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin/$${fn}" ;\
+	done
+
+#
+# Like installunixtools, but only install links to the versioned binaries.
+
+altinstallunixtools:
+	if [ ! -d "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ]; then  \
+		$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ;\
+	fi        
+	for fn in python$(VERSION) pythonw$(VERSION) idle$(VERSION) \
+		pydoc$(VERSION) smtpd$(VERSION).py ;\
+	do \
+		  ln -fs "$(prefix)/bin/$${fn}" "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin/$${fn}" ;\
+	done
+
+
+
+installextras:$(srcdir)/Extras.ReadMe.txt $(srcdir)/Extras.install.py
+	$(INSTALL) -d "$(DESTDIR)$(PYTHONAPPSDIR)/Extras"
+	$(INSTALL) $(srcdir)/Extras.ReadMe.txt "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe"
+	$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/../Demo \
+		"$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo.Mac"
+	$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/../../Demo \
+		"$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo"
 
 checkapplepython:
-	@if ! $(BUILDPYTHON) $(srcdir)/Mac/OSX/fixapplepython23.py -n; then \
+	@if ! $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/fixapplepython23.py -n; then \
 		echo "* WARNING: Apple-installed Python 2.3 will have trouble building extensions from now on."; \
-		echo "* WARNING: Run $(srcdir)/Mac/OSX/fixapplepython23.py with \"sudo\" to fix this."; \
-	fi
-    
+		echo "* WARNING: Run $(srcdir)/fixapplepython23.py with \"sudo\" to fix this."; \
+	fi
+
+# By default most tools are installed without a version in their basename, to
+# make it easier to install (and use) several python versions side-by-side move
+# the tools to a version-specific name and add the non-versioned name as an
+# alias.
+install_versionedtools:
+	for fn in idle pydoc ;\
+	do \
+		if [ -h "$(DESTDIR)$(prefix)/bin/$${fn}" ]; then \
+			continue ;\
+		fi ;\
+		mv "$(DESTDIR)$(prefix)/bin/$${fn}" "$(DESTDIR)$(prefix)/bin/$${fn}$(VERSION)"  ;\
+		ln -sf "$${fn}$(VERSION)" "$(DESTDIR)$(prefix)/bin/$${fn}" ;\
+	done
+	if [ ! -h "$(DESTDIR)$(prefix)/bin/smtpd.py" ]; then \
+		mv "$(DESTDIR)$(prefix)/bin/smtpd.py" "$(DESTDIR)$(prefix)/bin/smtpd$(VERSION).py"  ;\
+		ln -sf "smtpd$(VERSION).py" "$(DESTDIR)$(prefix)/bin/smtpd.py" ;\
+	fi
<< < 1 2 3 > >> (Page 2 of 3)