cpython/Modules/makesetup

72 lines
1.2 KiB
Bash
Executable File

#! /bin/sh
# This script converts Makefile.in.in and config.c.in into Makefile.in
# and config.c, based on the module definitions found in the file
# Setup.
NL="\\
"
sed -e 's/#.*//' -e '/^[ ]*$/d' ${1-Setup} |
(
DEFS=
MODS=
OBJS=
LIBS=
RULES=
while read line
do
case $line in
*=*) DEFS="$DEFS$line$NL"; continue;;
esac
objs=
cpps=
set $line
for arg
do
case $arg in
-[IDUC]*) cpps="$cpps $arg";;
-[Ll]*) LIBS="$LIBS $arg";;
*.a) LIBS="$LIBS $arg";;
*.o) objs="$objs $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
for obj in $objs
do
src=`basename $obj .o`.c
RULES="$RULES$obj: $src; \$(CC) \$(CFLAGS) $cpps -c $src$NL"
done
OBJS="$OBJS $objs"
done
EXTDECLS=
INITBITS=
for mod in $MODS
do
EXTDECLS="${EXTDECLS}extern void init$mod();$NL"
INITBITS="${INITBITS} {\"$mod\", init$mod},$NL"
done
sed -e "
/MARKER 1/i$NL$EXTDECLS
/MARKER 2/i$NL$INITBITS
" config.c.in >config.c
sed -e "
s%@MODOBJS@%$OBJS%
s%@MODLIBS@%$LIBS%
/Rules added by ..makesetup/a$NL$NL$RULES
/Definitions added by ..makesetup/a$NL$NL$DEFS
" Makefile.in.in >Makefile.in
)