summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1994-09-12 10:42:20 (GMT)
committerGuido van Rossum <guido@python.org>1994-09-12 10:42:20 (GMT)
commit7cc5abd4548629cc41d3951576f41ff2ddd7b5f7 (patch)
tree8b201dcbb5fb93275f2013675751f25a9ab5289f /Modules
parent9adae8e182452da538f8f97199f39c942293f220 (diff)
downloadcpython-7cc5abd4548629cc41d3951576f41ff2ddd7b5f7.zip
cpython-7cc5abd4548629cc41d3951576f41ff2ddd7b5f7.tar.gz
cpython-7cc5abd4548629cc41d3951576f41ff2ddd7b5f7.tar.bz2
Support shared library creation.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/Makefile.pre.in25
-rw-r--r--Modules/Setup.in32
-rwxr-xr-xModules/makesetup133
3 files changed, 128 insertions, 62 deletions
diff --git a/Modules/Makefile.pre.in b/Modules/Makefile.pre.in
index 7afa0b9..39c3b7c 100644
--- a/Modules/Makefile.pre.in
+++ b/Modules/Makefile.pre.in
@@ -27,9 +27,19 @@ LIBS= @LIBS@
LIBM= @LIBM@
LIBC= @LIBC@
+# Machine-dependent subdirectories
+MACHDEP= @MACHDEP@
+
# Install prefix, may be changed by configure
prefix= /usr/local
+# Symbols used for using shared libraries
+SO= @SO@
+LDSHARED= @LDSHARED@
+CCSHARED= @CCSHARED@
+LINKFORSHARED= @LINKFORSHARED@
+DESTSHARED= $(prefix)/lib/python/$(MACHDEP)
+
# === Variables that are customizable by hand ===
@@ -60,13 +70,13 @@ SYSLIBS= $(LIBM) $(LIBC)
all: $(LIB) ../python
-$(LIB): $(OBJS)
+$(LIB): $(OBJS) Makefile
-rm -f $(LIB)
$(AR) cr $(LIB) $(OBJS)
$(RANLIB) $(LIB)
-../python: config.o $(MYLIBS)
- $(CC) $(OPT) config.o \
+../python: config.o $(MYLIBS) Makefile
+ $(CC) $(OPT) config.o $(LINKFORSHARED) \
$(MYLIBS) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python
mv python ../python
@@ -136,8 +146,9 @@ timingmodule.o: timingmodule.c
xxmodule.o: xxmodule.c
yuvconvert.o: yuvconvert.c
-# === Rules added by makesetup ===
+# Rules to build and install all shared modules
+sharedmods: $(SHAREDMODS)
+sharedinstall: $(SHAREDMODS)
+ mv $(SHAREDMODS) $(DESTSHARED)
-# DO NOT DELETE THIS LINE -- mkdep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
+# Stuff is appended here by makesetup and make depend
diff --git a/Modules/Setup.in b/Modules/Setup.in
index d657e9e..af7d235 100644
--- a/Modules/Setup.in
+++ b/Modules/Setup.in
@@ -28,6 +28,16 @@
# <name> = <value>
#
# which defines a Make variable definition inserted into Makefile.in
+#
+# Finally, if a line has the literal form
+#
+# *noconfig*
+#
+# (that is including the '*' and '*' !) then the following modules will
+# not be included in the config.c file, nor in the list of objects to be
+# added to the library archive, and their linker options won't be added
+# to the linker options, but rules to create their .o files and their
+# shared libraries will still be added to the Makefile
# NOTE: As a standard policy, as many modules as can be supported by a
# platform should be present. The distribution comes with all modules
@@ -47,13 +57,10 @@ DESTLIB=$(prefix)/lib/python
# Standard enabled (tests are always available)
TESTPATH=:$(DESTLIB)/test
-# Enable this for SGI systems
-#ARCHPATH=:$(DESTLIB)/sgi
+# Path for machine- or system-dependent modules (and shared libraries)
+MACHDEPPATH=:$(DESTLIB)/$(MACHDEP)
-# Enable this for Sun systems
-#ARCHPATH=:$(DESTLIB)/sun4
-
-PYTHONPATH=.:$(DESTLIB)$(TESTPATH)$(ARCHPATH)$(STDWINPATH)$(TKPATH)
+PYTHONPATH=.:$(DESTLIB)$(TESTPATH)$(MACHDEPPATH)$(STDWINPATH)$(TKPATH)
# Modules that should always be present (non UNIX dependent)
@@ -86,6 +93,7 @@ signal signalmodule.c # signal(2)
#dbm dbmmodule.c # dbm(3) may require -lndbm or similar
#nis nismodule.c # Sun yellow pages -- not everywhere
+#termios termios.c # Steen Lumholt's termios module
# Multimedia modules -- on by default.
@@ -109,6 +117,18 @@ rgbimg rgbimgmodule.c # Read SGI RGB image files (but coded portably)
#stdwin stdwinmodule.c -I$(STDWIN)/H $(STDWIN)/Build/$(ARCH)/x11/lib/lib.a -lX11
#STDWINPATH=:$(DESTLIB)/stdwin
+# For STDWIN 1.0 it's a bit different:
+
+#STDWIN=/ufs/guido/src/stdwin
+#LIBTEXTEDIT=$(STDWIN)/$(MACHDEP)/Packs/textedit/libtextedit.a
+#LIBX11STDWIN=$(STDWIN)/$(MACHDEP)/Ports/x11/libstdwin.a
+#LIBALFASTDWIN=$(STDWIN)/$(MACHDEP)/Ports/alfa/libstdwin.a
+#stdwin stdwinmodule.c -I$(STDWIN)/H $(LIBTEXTEDIT) $(LIBX11STDWIN) -lX11
+
+# Or use the following for the alphanumeric version:
+
+#stdwin stdwinmodule.c -I$(STDWIN)/H $(LIBTEXTEDIT) $(LIBALFASTDWIN) -ltermcap
+
# The md5 module implements the RSA Data Security, Inc. MD5
# Message-Digest Algorithm, described in RFC 1321. The necessary files
diff --git a/Modules/makesetup b/Modules/makesetup
index 88b87b9..35294c0 100755
--- a/Modules/makesetup
+++ b/Modules/makesetup
@@ -22,7 +22,7 @@
#
# Copying config.c.in to config.c:
# - insert an identifying comment at the start
-# - for each <module> mentioned in Setup:
+# - for each <module> mentioned in Setup before *noconfig*:
# + insert 'extern void init<module>();' before MARKER 1
# + insert '{"<module>", initmodule},' before MARKER 2
#
@@ -31,9 +31,10 @@
# - replace @MODOBJS@ by the list of objects from Setup (except for
# Setup files after a -n option)
# - replace @MODLIBS@ by the list of libraries from Setup
-# - for each object file mentioned in Setup, insert a rule
-# '<file>.o: <file>.c; <build commands>' before the comment
-# 'Rules added by makesetup'
+# - for each object file mentioned in Setup, append a rule
+# '<file>.o: <file>.c; <build commands>' to the end of the Makefile
+# - for each module mentioned in Setup, append a rule
+# which creates a shared library version to the end of the Makefile
# - for each variable definition found in Setup, insert the definition
# before the comment 'Definitions added by makesetup'
@@ -45,6 +46,7 @@ srcdir=''
config=''
makepre=''
noobjects=''
+doconfig=yes
while :
do
case $1 in
@@ -81,17 +83,22 @@ NL="\\
for i in ${*-Setup}
do
case $i in
- -n) echo '<noobjects>';;
- *) cat "$i";;
+ -n) echo '*noobjects*';;
+ *) echo '*doconfig*'; cat "$i";;
esac
done |
sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
(
+ rulesf="@rules.$$"
+ trap 'rm -f $rulesf' 0 1 2 3
+ echo "
+# Rules appended by makedepend
+" >$rulesf
DEFS=
MODS=
+ SHAREDMODS=
OBJS=
LIBS=
- RULES=
LOCALLIBS=
BASELIBS=
while read line
@@ -99,68 +106,91 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
# Output DEFS in reverse order so first definition overrides
case $line in
*=*) DEFS="$line$NL$DEFS"; continue;;
- '<noobjects>')
+ '*noobjects*')
case $noobjects in
yes) ;;
*) LOCALLIBS=$LIBS; LIBS=;;
esac
noobjects=yes;
- continue;;
+ continue;;
+ '*doconfig*') doconfig=yes; continue;;
+ '*noconfig*') doconfig=no; continue;;
esac
- objs=
srcs=
cpps=
- set $line
- for arg
+ libs=
+ mods=
+ for arg in $line
do
case $arg in
-[IDUC]*) cpps="$cpps $arg";;
- -[A-Zl]*) LIBS="$LIBS $arg";;
- *.a) LIBS="$LIBS $arg";;
- *.o) objs="$objs $arg";;
+ -[A-Zl]*) libs="$libs $arg";;
+ *.a) libs="$libs $arg";;
+ *.o) srcs="$srcs `basename $arg .o`.c";;
*.[cC]) srcs="$srcs $arg";;
*.cc) srcs="$srcs $arg";;
*.c++) srcs="$srcs $arg";;
*.*) echo 1>&2 "bad word $arg in $line"
exit 1;;
- [a-zA-Z_]*) MODS="$MODS $arg";;
+ [a-zA-Z_]*) mods="$mods $arg";;
*) echo 1>&2 "bad word $arg in $line"
exit 1;;
esac
done
+ case $doconfig in
+ yes)
+ LIBS="$LIBS $libs"
+ MODS="$MODS $mods"
+ ;;
+ esac
case $noobjects in
yes) continue;;
esac
- for obj in $objs
+ objs=''
+ for src in $srcs
do
- src=`basename $obj .o`.c
- case $src in
- glmodule.c) ;;
- *) src='$(srcdir)/'$src;;
- esac
- RULES="$RULES$obj: $src; \$(CC) \$(CFLAGS) $cpps -c $src$NL"
+ case $src in
+ *.c) obj=`basename $src .c`.o; cc='$(CC)';;
+ *.cc) obj=`basename $src .cc`.o; cc='$(CCC)';;
+ *.c++) obj=`basename $src .c++`.o; cc='$(CCC)';;
+ *.C) obj=`basename $src .C`.o; cc='$(CCC)';;
+ *) continue;;
+ esac
+ objs="$objs $obj"
+ case $src in
+ glmodule.c) ;;
+ *) src='$(srcdir)/'$src;;
+ esac
+ case $doconfig in
+ no) cc="cc $(CCSHARED)";;
+ esac
+ rule="$obj: $src; $cc \$(CFLAGS) $cpps -c $src"
+ echo "$rule" >>$rulesf
done
- OBJS="$OBJS $objs"
- objs=
- for src in $srcs
+ case $doconfig in
+ yes) OBJS="$OBJS $objs";;
+ esac
+ for mod in $mods
do
- case $src in
- *.c) obj=`basename $src .c`.o; cc='$(CC)';;
- *.cc) obj=`basename $src .cc`.o; cc='$(CCC)';;
- *.c++) obj=`basename $src .c++`.o; cc='$(CCC)';;
- *.C) obj=`basename $src .C`.o; cc='$(CCC)';;
- *) continue;;
- esac
- objs="$objs $obj"
- case $src in
- glmodule.c) ;;
- *) src='$(srcdir)/'$src;;
- esac
- RULES="$RULES$obj: $src; $cc \$(CFLAGS) $cpps -c $src$NL"
+ case $objs in
+ *$mod.o*) base=$mod;;
+ *) base=${mod}module;;
+ esac
+ file="$base\$(SO)"
+ case $doconfig in
+ no) SHAREDMODS="$SHAREDMODS $file";;
+ esac
+ rule="$file: $objs"
+ rule="$rule; $(LDSHARED) $objs $libs -o $file"
+ echo "$rule" >>$rulesf
done
- OBJS="$OBJS $objs"
done
+ case $SHAREDMODS in
+ '') ;;
+ *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";;
+ esac
+
case $noobjects in
yes) BASELIBS=$LIBS;;
*) LOCALLIBS=$LIBS;;
@@ -177,6 +207,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
INITBITS="${INITBITS} {\"$mod\", init$mod},$NL"
done
+
case $config in
-) ;;
*) sed -e "
@@ -189,16 +220,20 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
esac
case $makepre in
- -) ;;
- *) sed -e "
- 1i$NL# Generated automatically from $makepre by makesetup.
- s%@MODOBJS@%$OBJS%
- s%@MODLIBS@%$LIBS%
- /Rules added by makesetup/a$NL$NL$RULES
- /Definitions added by makesetup/a$NL$NL$DEFS
-
- " $makepre >Makefile
+ -) ;;
+ *) sedf="@sed.in.$$"
+ trap 'rm -f $sedf' 0 1 2 3
+ echo "1i\\" >$sedf
+ str="# Generated automatically from $makepre by makesetup."
+ echo "$str" >>$sedf
+ echo "s%@MODOBJS@%$OBJS%" >>$sedf
+ echo "s%@MODLIBS@%$LIBS%" >>$sedf
+ echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf
+ sed -f $sedf $makepre >Makefile
+ cat $rulesf >>Makefile
+ rm -f $sedf
;;
esac
+ rm -f $rulesf
)