--- ../Python-2.2b1/configure.in Fri Oct 19 03:31:59 2001 +++ ./configure.in Sat Oct 20 19:59:35 2001 @@ -8,6 +8,10 @@ AC_SUBST(VERSION) VERSION=2.2 +# Set SOVERSION +AC_SUBST(SOVERSION) +SOVERSION=0.0 + # Arguments passed to configure. AC_SUBST(CONFIG_ARGS) CONFIG_ARGS="$ac_configure_args" @@ -259,6 +263,7 @@ # python might then depend on the C++ runtime # This is altered for AIX in order to build the export list before # linking. +# For Linux, we now build a shared library, too. AC_SUBST(LINKCC) AC_MSG_CHECKING(LINKCC) if test -z "$LINKCC" @@ -284,6 +289,9 @@ LINKCC="LD_RUN_PATH=$libdir $(LINKCC)";; Monterey64*) LINKCC="$(LINKCC) -L/usr/lib/ia64l64";; + Linux*|GNU*) + LDLIBRARY='libpython$(VERSION).so.$(SOVERSION)' + LINKCC="\$(CC)";; esac fi AC_MSG_RESULT($LINKCC) @@ -777,7 +785,7 @@ # No framework. Ignore undefined symbols, assuming they come from Python LDSHARED="$LDSHARED -undefined suppress" fi ;; - Linux*) LDSHARED="gcc -shared";; + Linux*|GNU*) LDSHARED="gcc -shared";; dgux*) LDSHARED="ld -G";; BSD/OS*/4*) LDSHARED="gcc -shared";; OpenBSD*|NetBSD*|FreeBSD*) @@ -813,7 +821,7 @@ then CCSHARED="-fPIC"; else CCSHARED="+z"; fi;; - Linux*) CCSHARED="-fPIC";; + Linux*|GNU*) CCSHARED="-fPIC";; BSD/OS*/4*) CCSHARED="-fpic";; FreeBSD*|NetBSD*|OpenBSD*) CCSHARED="-fPIC";; OpenUNIX*|UnixWare*) @@ -841,7 +849,7 @@ hp*|HP*) LINKFORSHARED="-Wl,-E -Wl,+s -Wl,+b\$(BINLIBDEST)/lib-dynload";; BSD/OS/4*) LINKFORSHARED="-Xlinker -export-dynamic";; - Linux*) LINKFORSHARED="-Xlinker -export-dynamic";; + Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";; # -u libsys_s pulls in all symbols in libsys Darwin/*) # -u __dummy makes the linker aware of the objc runtime --- python2.2-2.1.99c1.orig/Makefile.pre.in Thu Dec 6 22:47:20 2001 +++ python2.2-2.1.99c1/Makefile.pre.in Sat Dec 15 18:13:20 2001 @@ -25,6 +25,7 @@ # === Variables set by configure VERSION= @VERSION@ +SOVERSION= @SOVERSION@ srcdir= @srcdir@ VPATH= @srcdir@ @@ -65,7 +66,7 @@ # Extra C flags added for building the interpreter object files. CFLAGSFORSHARED=@CFLAGSFORSHARED@ # C flags used for building the interpreter object files -PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) +PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) # Machine-dependent subdirectories @@ -97,6 +98,7 @@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ DESTSHARED= $(BINLIBDEST)/lib-dynload +RUNSHARED= LD_PRELOAD=./$(LDLIBRARY) # Executable suffix (.exe on Windows and Mac OS X) EXE= @EXEEXT@ @@ -288,7 +290,7 @@ # Rules # Default target -all: $(BUILDPYTHON) oldsharedmods sharedmods +all: $(BUILDPYTHON) $(LIBRARY) oldsharedmods sharedmods # Build the interpreter $(BUILDPYTHON): Modules/$(MAINOBJ) $(LDLIBRARY) @@ -297,14 +299,14 @@ $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) platform: $(BUILDPYTHON) - ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform + $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform # Build the shared modules sharedmods: $(BUILDPYTHON) case $$MAKEFLAGS in \ - *-s*) CC='$(CC)' LDSHARED='$(LDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) CC='$(CC)' LDSHARED='$(LDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(LDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(LDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ esac # buildno should really depend on something like LIBRARY_SRC @@ -332,6 +334,20 @@ $(AR) cr $@ $(MODOBJS) $(RANLIB) $@ +# WARNING: The following is only tested for Debian GNU/Linux. +# This rule is silly and needs to be cleaned up ASAP! +# Gregor Hoffleit +# +# This rule is here for Linux shared libs +# The PIC code will be built additionally to the static lib! +libpython$(VERSION).so.$(SOVERSION): $(LIBRARY_OBJS:%.o=%.pic_o) + case `uname -s | tr -d '/ ' | tr '[A-Z]' '[a-z]'` in \ + *linux*|*gnu*) \ + $(CC) -shared -Wl,-soname,$@ -o $@ $(LIBRARY_OBJS:%.o=%.pic_o) \ + $(LIBS) $(LIBM) \ + ;; \ + esac + # This rule is only here for DG/UX and BeOS!!! libpython$(VERSION).so: $(LIBRARY) case `uname -s | tr -d '/ ' | tr '[A-Z]' '[a-z]'` in \ @@ -391,6 +407,9 @@ Modules/getbuildinfo.o: $(srcdir)/Modules/getbuildinfo.c buildno $(CC) -c $(PY_CFLAGS) -DBUILD=`cat buildno` -o $@ $(srcdir)/Modules/getbuildinfo.c +Modules/getbuildinfo.pic_o: $(srcdir)/Modules/getbuildinfo.c buildno + $(CC) -c $(PY_CFLAGS) $(CCSHARED) -DBUILD=`cat buildno` -o $@ $(srcdir)/Modules/getbuildinfo.c + Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ -DPREFIX='"$(prefix)"' \ @@ -399,9 +418,20 @@ -DVPATH='"$(VPATH)"' \ -o $@ $(srcdir)/Modules/getpath.c +Modules/getpath.pic_o: $(srcdir)/Modules/getpath.c Makefile + $(CC) -c $(PY_CFLAGS) $(CCSHARED) -DPYTHONPATH='"$(PYTHONPATH)"' \ + -DPREFIX='"$(prefix)"' \ + -DEXEC_PREFIX='"$(exec_prefix)"' \ + -DVERSION='"$(VERSION)"' \ + -DVPATH='"$(VPATH)"' \ + -o $@ $(srcdir)/Modules/getpath.c + Modules/ccpython.o: $(srcdir)/Modules/ccpython.cc $(CXX) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/ccpython.cc +Modules/ccpython.pic_o: $(srcdir)/Modules/ccpython.cc + $(CXX) -c $(PY_CFLAGS) $(CCSHARED) -o $@ $(srcdir)/Modules/ccpython.cc + $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) @@ -420,9 +450,15 @@ Python/getplatform.o: $(srcdir)/Python/getplatform.c $(CC) -c $(CFLAGS) $(CPPFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c +Python/getplatform.pic_o: $(srcdir)/Python/getplatform.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CCSHARED) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c + Python/importdl.o: $(srcdir)/Python/importdl.c $(CC) -c $(CFLAGS) $(CPPFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c +Python/importdl.pic_o: $(srcdir)/Python/importdl.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CCSHARED) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c + Objects/object.o: $(srcdir)/Objects/object.c $(srcdir)/Objects/obmalloc.c Objects/unicodectype.o: $(srcdir)/Objects/unicodectype.c \ @@ -486,7 +522,7 @@ # Test the interpreter (twice, once without .pyc files, once with) TESTOPTS= -l TESTPROG= $(srcdir)/Lib/test/regrtest.py -TESTPYTHON= ./$(BUILDPYTHON) -E -tt +TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -E -tt test: all platform -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) @@ -556,6 +592,12 @@ fi; \ done $(INSTALL_PROGRAM) $(BUILDPYTHON) $(BINDIR)/python$(VERSION)$(EXE) + if test -f libpython$(VERSION).so.$(SOVERSION); then \ + mkdir $(LIBDIR); \ + $(INSTALL_DATA) libpython$(VERSION).so.$(SOVERSION) $(LIBDIR); \ + (cd $(LIBDIR) && $(LN) -sf libpython$(VERSION).so.$(SOVERSION) libpython$(VERSION).so); \ + else true; \ + fi if test -f libpython$(VERSION).so; then \ $(INSTALL_DATA) libpython$(VERSION).so $(LIBDIR); \ else true; \ @@ -640,11 +682,11 @@ done; \ done $(INSTALL_DATA) $(srcdir)/LICENSE $(LIBDEST)/LICENSE.txt - PYTHONPATH=$(LIBDEST) \ - ./$(BUILDPYTHON) -tt $(LIBDEST)/compileall.py -x badsyntax \ - $(LIBDEST) - PYTHONPATH=$(LIBDEST) \ - ./$(BUILDPYTHON) -O $(LIBDEST)/compileall.py -x badsyntax $(LIBDEST) +## PYTHONPATH=$(LIBDEST) \ +## ./$(BUILDPYTHON) -tt $(LIBDEST)/compileall.py -x badsyntax \ +## $(LIBDEST) +## PYTHONPATH=$(LIBDEST) \ +## ./$(BUILDPYTHON) -O $(LIBDEST)/compileall.py -x badsyntax $(LIBDEST) # Create the PLATDIR source directory, if one wasn't distributed.. $(srcdir)/Lib/$(PLATDIR): @@ -686,12 +728,12 @@ else true; \ fi; \ done - @if test -d $(LDLIBRARY); then :; else \ + @if test -d $(LIBRARY); then :; else \ if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ - $(INSTALL_DATA) $(LDLIBRARY) $(LIBPL)/$(LDLIBRARY) ; \ - $(RANLIB) $(LIBPL)/$(LDLIBRARY) ; \ + $(INSTALL_DATA) $(LIBRARY) $(LIBPL)/$(LIBRARY) ; \ + $(RANLIB) $(LIBPL)/$(LIBRARY) ; \ else \ - echo Skip install of $(LDLIBRARY) - use make frameworkinstall; \ + echo Skip install of $(LIBRARY) - use make frameworkinstall; \ fi; \ fi $(INSTALL_DATA) Modules/config.c $(LIBPL)/config.c @@ -733,7 +775,8 @@ # Install the dynamically loadable modules # This goes into $(exec_prefix) sharedinstall: - ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ + $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ + --prefix=$(prefix) \ --install-scripts=$(BINDIR) \ --install-platlib=$(DESTSHARED) @@ -809,6 +852,11 @@ # Some make's put the object file in the current directory .c.o: $(CC) -c $(PY_CFLAGS) -o $@ $< + +.SUFFIXES: .pic_o + +.c.pic_o: + $(CC) -c $(PY_CFLAGS) $(CCSHARED) -o $@ $< # Rerun configure with the same options as it was run last time, # provided the config.status script exists