mirror of
https://github.com/python/cpython.git
synced 2024-11-29 00:56:12 +01:00
3bbc62e9c2
Note addition of gethostbyaddr() and improved repr() for sockets, renaming of md5.md5() to md5.new(), and fixing of leaks in threads.
241 lines
5.5 KiB
Bash
Executable File
241 lines
5.5 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
# Convert templates into Makefile and config.c, based on the module
|
|
# definitions found in the file Setup.
|
|
#
|
|
# Usage: makesetup [-s dir] [-c file] [-m file] [Setup] ... [-n [Setup] ...]
|
|
#
|
|
# Options:
|
|
# -s directory: alternative source directory (default derived from $0)
|
|
# -c file: alternative config.c template (default $srcdir/config.c.in)
|
|
# -c -: don't write config.c
|
|
# -m file: alternative Makefile template (default ./Makefile.pre)
|
|
# -m -: don't write Makefile
|
|
#
|
|
# Remaining arguments are one or more Setup files (default ./Setup).
|
|
# Setup files after a -n option are used for their variables, modules
|
|
# and libraries but not for their .o files.
|
|
#
|
|
# See Setup.in for a description of the format of the Setup file.
|
|
#
|
|
# The following edits are made:
|
|
#
|
|
# Copying config.c.in to config.c:
|
|
# - insert an identifying comment at the start
|
|
# - for each <module> mentioned in Setup before *noconfig*:
|
|
# + insert 'extern void init<module>();' before MARKER 1
|
|
# + insert '{"<module>", initmodule},' before MARKER 2
|
|
#
|
|
# Copying Makefile.pre to Makefile:
|
|
# - insert an identifying comment at the start
|
|
# - 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, 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'
|
|
|
|
# Loop over command line options
|
|
usage='
|
|
usage: makesetup [-s srcdir] [-c config.c.in] [-m Makefile.pre]
|
|
[Setup] ... [-n [Setup] ...]'
|
|
srcdir=''
|
|
config=''
|
|
makepre=''
|
|
noobjects=''
|
|
doconfig=yes
|
|
while :
|
|
do
|
|
case $1 in
|
|
-s) shift; srcdir=$1; shift;;
|
|
-c) shift; config=$1; shift;;
|
|
-m) shift; makepre=$1; shift;;
|
|
--) shift; break;;
|
|
-n) noobjects=yes;;
|
|
-*) echo "$usage" 1>&2; exit 2;;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
# Set default srcdir and config if not set by command line
|
|
# (Not all systems have dirname)
|
|
case $srcdir in
|
|
'') case $0 in
|
|
*/*) srcdir=`echo $0 | sed 's,/[^/]*$,,'`;;
|
|
*) srcdir=.;;
|
|
esac;;
|
|
esac
|
|
case $config in
|
|
'') config=$srcdir/config.c.in;;
|
|
esac
|
|
case $makepre in
|
|
'') makepre=Makefile.pre;;
|
|
esac
|
|
|
|
# Newline for sed i and a commands
|
|
NL="\\
|
|
"
|
|
|
|
# Main loop
|
|
for i in ${*-Setup}
|
|
do
|
|
case $i in
|
|
-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=
|
|
LOCALLIBS=
|
|
BASELIBS=
|
|
while read line
|
|
do
|
|
# Output DEFS in reverse order so first definition overrides
|
|
case $line in
|
|
*=*) DEFS="$line$NL$DEFS"; continue;;
|
|
'*noobjects*')
|
|
case $noobjects in
|
|
yes) ;;
|
|
*) LOCALLIBS=$LIBS; LIBS=;;
|
|
esac
|
|
noobjects=yes;
|
|
continue;;
|
|
'*doconfig*') doconfig=yes; continue;;
|
|
'*noconfig*') doconfig=no; continue;;
|
|
esac
|
|
srcs=
|
|
cpps=
|
|
libs=
|
|
mods=
|
|
for arg in $line
|
|
do
|
|
case $arg in
|
|
-[IDUC]*) cpps="$cpps $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";;
|
|
\$*) libs="$libs $arg";;
|
|
*.*) echo 1>&2 "bad word $arg in $line"
|
|
exit 1;;
|
|
[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
|
|
objs=''
|
|
for src in $srcs
|
|
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
|
|
case $doconfig in
|
|
no) cc="$cc \$(CCSHARED)";;
|
|
esac
|
|
rule="$obj: $src; $cc \$(CFLAGS) $cpps -c $src"
|
|
echo "$rule" >>$rulesf
|
|
done
|
|
case $doconfig in
|
|
yes) OBJS="$OBJS $objs";;
|
|
esac
|
|
for mod in $mods
|
|
do
|
|
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
|
|
done
|
|
|
|
case $SHAREDMODS in
|
|
'') ;;
|
|
*) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";;
|
|
esac
|
|
|
|
case $noobjects in
|
|
yes) BASELIBS=$LIBS;;
|
|
*) LOCALLIBS=$LIBS;;
|
|
esac
|
|
LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)'
|
|
DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS"
|
|
DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS"
|
|
|
|
EXTDECLS=
|
|
INITBITS=
|
|
for mod in $MODS
|
|
do
|
|
EXTDECLS="${EXTDECLS}extern void init$mod();$NL"
|
|
INITBITS="${INITBITS} {\"$mod\", init$mod},$NL"
|
|
done
|
|
|
|
|
|
case $config in
|
|
-) ;;
|
|
*) sed -e "
|
|
1i$NL/* Generated automatically from $config by makesetup. */
|
|
/MARKER 1/i$NL$EXTDECLS
|
|
/MARKER 2/i$NL$INITBITS
|
|
|
|
" $config >config.c
|
|
;;
|
|
esac
|
|
|
|
case $makepre in
|
|
-) ;;
|
|
*) 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
|
|
)
|