| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 1 | #! /bin/sh | 
|  | 2 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 3 | # Convert templates into Makefile and config.c, based on the module | 
|  | 4 | # definitions found in the file Setup. | 
|  | 5 | # | 
|  | 6 | # Usage: makesetup [-s dir] [-c file] [-m file] [Setup] ... [-n [Setup] ...] | 
|  | 7 | # | 
|  | 8 | # Options: | 
|  | 9 | # -s directory: alternative source directory (default derived from $0) | 
|  | 10 | # -c file:      alternative config.c template (default $srcdir/config.c.in) | 
|  | 11 | # -c -:         don't write config.c | 
|  | 12 | # -m file:      alternative Makefile template (default ./Makefile.pre) | 
|  | 13 | # -m -:         don't write Makefile | 
|  | 14 | # | 
|  | 15 | # Remaining arguments are one or more Setup files (default ./Setup). | 
|  | 16 | # Setup files after a -n option are used for their variables, modules | 
|  | 17 | # and libraries but not for their .o files. | 
|  | 18 | # | 
|  | 19 | # See Setup.in for a description of the format of the Setup file. | 
|  | 20 | # | 
|  | 21 | # The following edits are made: | 
|  | 22 | # | 
|  | 23 | # Copying config.c.in to config.c: | 
|  | 24 | # - insert an identifying comment at the start | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 25 | # - for each <module> mentioned in Setup before *noconfig*: | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 26 | #   + insert 'extern void init<module>();' before MARKER 1 | 
|  | 27 | #   + insert '{"<module>", initmodule},' before MARKER 2 | 
|  | 28 | # | 
|  | 29 | # Copying Makefile.pre to Makefile: | 
|  | 30 | # - insert an identifying comment at the start | 
| Guido van Rossum | 3bbc62e | 1995-01-02 19:30:30 +0000 | [diff] [blame] | 31 | # - replace _MODOBJS_ by the list of objects from Setup (except for | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 32 | #   Setup files after a -n option) | 
| Guido van Rossum | 3bbc62e | 1995-01-02 19:30:30 +0000 | [diff] [blame] | 33 | # - replace _MODLIBS_ by the list of libraries from Setup | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 34 | # - for each object file mentioned in Setup, append a rule | 
|  | 35 | #   '<file>.o: <file>.c; <build commands>' to the end of the Makefile | 
|  | 36 | # - for each module mentioned in Setup, append a rule | 
|  | 37 | #   which creates a shared library version to the end of the Makefile | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 38 | # - for each variable definition found in Setup, insert the definition | 
|  | 39 | #   before the comment 'Definitions added by makesetup' | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 40 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 41 | # Loop over command line options | 
|  | 42 | usage=' | 
|  | 43 | usage: makesetup [-s srcdir] [-c config.c.in] [-m Makefile.pre] | 
|  | 44 | [Setup] ... [-n [Setup] ...]' | 
|  | 45 | srcdir='' | 
|  | 46 | config='' | 
|  | 47 | makepre='' | 
|  | 48 | noobjects='' | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 49 | doconfig=yes | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 50 | while : | 
|  | 51 | do | 
|  | 52 | case $1 in | 
|  | 53 | -s)	shift; srcdir=$1; shift;; | 
|  | 54 | -c)	shift; config=$1; shift;; | 
|  | 55 | -m)	shift; makepre=$1; shift;; | 
|  | 56 | --)	shift; break;; | 
|  | 57 | -n)	noobjects=yes;; | 
|  | 58 | -*)	echo "$usage" 1>&2; exit 2;; | 
|  | 59 | *)	break;; | 
|  | 60 | esac | 
|  | 61 | done | 
|  | 62 |  | 
|  | 63 | # Set default srcdir and config if not set by command line | 
|  | 64 | # (Not all systems have dirname) | 
|  | 65 | case $srcdir in | 
|  | 66 | '')	case $0 in | 
|  | 67 | */*)	srcdir=`echo $0 | sed 's,/[^/]*$,,'`;; | 
|  | 68 | *)	srcdir=.;; | 
|  | 69 | esac;; | 
|  | 70 | esac | 
|  | 71 | case $config in | 
|  | 72 | '')	config=$srcdir/config.c.in;; | 
|  | 73 | esac | 
|  | 74 | case $makepre in | 
|  | 75 | '')	makepre=Makefile.pre;; | 
|  | 76 | esac | 
|  | 77 |  | 
|  | 78 | # Newline for sed i and a commands | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 79 | NL='\ | 
|  | 80 | ' | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 81 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 82 | # Main loop | 
|  | 83 | for i in ${*-Setup} | 
|  | 84 | do | 
|  | 85 | case $i in | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 86 | -n)	echo '*noobjects*';; | 
|  | 87 | *)	echo '*doconfig*'; cat "$i";; | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 88 | esac | 
|  | 89 | done | | 
|  | 90 | sed -e 's/[ 	]*#.*//' -e '/^[ 	]*$/d' | | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 91 | ( | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 92 | rulesf="@rules.$$" | 
|  | 93 | trap 'rm -f $rulesf' 0 1 2 3 | 
|  | 94 | echo " | 
|  | 95 | # Rules appended by makedepend | 
|  | 96 | " >$rulesf | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 97 | DEFS= | 
|  | 98 | MODS= | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 99 | SHAREDMODS= | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 100 | OBJS= | 
|  | 101 | LIBS= | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 102 | LOCALLIBS= | 
|  | 103 | BASELIBS= | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 104 | while read line | 
|  | 105 | do | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 106 | # Output DEFS in reverse order so first definition overrides | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 107 | case $line in | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 108 | *=*)	DEFS="$line$NL$DEFS"; continue;; | 
| Guido van Rossum | 9bf8445 | 1997-04-02 05:33:00 +0000 | [diff] [blame] | 109 | 'include '*)	DEFS="$line$NL$DEFS"; continue;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 110 | '*noobjects*') | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 111 | case $noobjects in | 
|  | 112 | yes)	;; | 
|  | 113 | *)	LOCALLIBS=$LIBS; LIBS=;; | 
|  | 114 | esac | 
|  | 115 | noobjects=yes; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 116 | continue;; | 
|  | 117 | '*doconfig*')	doconfig=yes; continue;; | 
| Guido van Rossum | 4355454 | 1996-08-20 19:49:13 +0000 | [diff] [blame] | 118 | '*static*')	doconfig=yes; continue;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 119 | '*noconfig*')	doconfig=no; continue;; | 
| Guido van Rossum | 4355454 | 1996-08-20 19:49:13 +0000 | [diff] [blame] | 120 | '*shared*')	doconfig=no; continue;; | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 121 | esac | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 122 | srcs= | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 123 | cpps= | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 124 | libs= | 
|  | 125 | mods= | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 126 | skip= | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 127 | for arg in $line | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 128 | do | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 129 | case $skip in | 
|  | 130 | libs)	libs="$libs $arg"; skip=; continue;; | 
|  | 131 | cpps)	cpps="$cpps $arg"; skip=; continue;; | 
|  | 132 | srcs)	srcs="$srcs $arg"; skip=; continue;; | 
|  | 133 | esac | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 134 | case $arg in | 
|  | 135 | -[IDUC]*)	cpps="$cpps $arg";; | 
| Guido van Rossum | b447d11 | 1997-12-02 20:38:11 +0000 | [diff] [blame] | 136 | -Xlinker)	libs="$libs $arg"; skip=libs;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 137 | -[A-Zl]*)	libs="$libs $arg";; | 
|  | 138 | *.a)		libs="$libs $arg";; | 
| Guido van Rossum | a29756c | 1996-08-19 22:00:05 +0000 | [diff] [blame] | 139 | *.so)		libs="$libs $arg";; | 
|  | 140 | *.sl)		libs="$libs $arg";; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 141 | *.o)		srcs="$srcs `basename $arg .o`.c";; | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 142 | *.[cC])		srcs="$srcs $arg";; | 
|  | 143 | *.cc)		srcs="$srcs $arg";; | 
|  | 144 | *.c++)		srcs="$srcs $arg";; | 
| Guido van Rossum | babacb0 | 1997-02-14 16:44:04 +0000 | [diff] [blame] | 145 | *.cxx)		srcs="$srcs $arg";; | 
|  | 146 | *.cpp)		srcs="$srcs $arg";; | 
| Sjoerd Mullender | 4237efc | 1995-10-11 08:45:15 +0000 | [diff] [blame] | 147 | \$*)		libs="$libs $arg" | 
|  | 148 | cpps="$cpps $arg";; | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 149 | *.*)		echo 1>&2 "bad word $arg in $line" | 
|  | 150 | exit 1;; | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 151 | -u)		skip=libs; libs="$libs -u";; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 152 | [a-zA-Z_]*)	mods="$mods $arg";; | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 153 | *)		echo 1>&2 "bad word $arg in $line" | 
|  | 154 | exit 1;; | 
|  | 155 | esac | 
|  | 156 | done | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 157 | case $doconfig in | 
|  | 158 | yes) | 
|  | 159 | LIBS="$LIBS $libs" | 
|  | 160 | MODS="$MODS $mods" | 
|  | 161 | ;; | 
|  | 162 | esac | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 163 | case $noobjects in | 
|  | 164 | yes)	continue;; | 
|  | 165 | esac | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 166 | objs='' | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 167 | for src in $srcs | 
|  | 168 | do | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 169 | case $src in | 
|  | 170 | *.c)   obj=`basename $src .c`.o; cc='$(CC)';; | 
|  | 171 | *.cc)  obj=`basename $src .cc`.o; cc='$(CCC)';; | 
|  | 172 | *.c++) obj=`basename $src .c++`.o; cc='$(CCC)';; | 
|  | 173 | *.C)   obj=`basename $src .C`.o; cc='$(CCC)';; | 
| Guido van Rossum | 16cb6f4 | 1997-10-21 19:30:29 +0000 | [diff] [blame] | 174 | *.cxx) obj=`basename $src .cxx`.o; cc='$(CCC)';; | 
|  | 175 | *.cpp) obj=`basename $src .cpp`.o; cc='$(CCC)';; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 176 | *)     continue;; | 
|  | 177 | esac | 
|  | 178 | objs="$objs $obj" | 
|  | 179 | case $src in | 
|  | 180 | glmodule.c) ;; | 
|  | 181 | *) src='$(srcdir)/'$src;; | 
|  | 182 | esac | 
|  | 183 | case $doconfig in | 
| Guido van Rossum | 8991065 | 1994-10-20 21:58:30 +0000 | [diff] [blame] | 184 | no)	cc="$cc \$(CCSHARED)";; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 185 | esac | 
|  | 186 | rule="$obj: $src; $cc \$(CFLAGS) $cpps -c $src" | 
|  | 187 | echo "$rule" >>$rulesf | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 188 | done | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 189 | case $doconfig in | 
|  | 190 | yes)	OBJS="$OBJS $objs";; | 
|  | 191 | esac | 
|  | 192 | for mod in $mods | 
|  | 193 | do | 
|  | 194 | case $objs in | 
|  | 195 | *$mod.o*)	base=$mod;; | 
|  | 196 | *)		base=${mod}module;; | 
|  | 197 | esac | 
|  | 198 | file="$base\$(SO)" | 
|  | 199 | case $doconfig in | 
|  | 200 | no)	SHAREDMODS="$SHAREDMODS $file";; | 
|  | 201 | esac | 
|  | 202 | rule="$file: $objs" | 
| Sjoerd Mullender | 4eba0c9 | 1994-10-13 09:09:05 +0000 | [diff] [blame] | 203 | rule="$rule; \$(LDSHARED) $objs $libs -o $file" | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 204 | echo "$rule" >>$rulesf | 
|  | 205 | done | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 206 | done | 
|  | 207 |  | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 208 | case $SHAREDMODS in | 
|  | 209 | '')	;; | 
|  | 210 | *)	DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; | 
|  | 211 | esac | 
|  | 212 |  | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 213 | case $noobjects in | 
|  | 214 | yes)	BASELIBS=$LIBS;; | 
|  | 215 | *)	LOCALLIBS=$LIBS;; | 
|  | 216 | esac | 
|  | 217 | LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)' | 
|  | 218 | DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS" | 
|  | 219 | DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS" | 
|  | 220 |  | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 221 | EXTDECLS= | 
|  | 222 | INITBITS= | 
|  | 223 | for mod in $MODS | 
|  | 224 | do | 
|  | 225 | EXTDECLS="${EXTDECLS}extern void init$mod();$NL" | 
|  | 226 | INITBITS="${INITBITS}	{\"$mod\", init$mod},$NL" | 
|  | 227 | done | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 228 |  | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 229 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 230 | case $config in | 
|  | 231 | -)  ;; | 
|  | 232 | *)  sed -e " | 
|  | 233 | 1i$NL/* Generated automatically from $config by makesetup. */ | 
|  | 234 | /MARKER 1/i$NL$EXTDECLS | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 235 | /MARKER 2/i$NL$INITBITS | 
|  | 236 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 237 | " $config >config.c | 
|  | 238 | ;; | 
|  | 239 | esac | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 240 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 241 | case $makepre in | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 242 | -)	;; | 
|  | 243 | *)	sedf="@sed.in.$$" | 
|  | 244 | trap 'rm -f $sedf' 0 1 2 3 | 
|  | 245 | echo "1i\\" >$sedf | 
|  | 246 | str="# Generated automatically from $makepre by makesetup." | 
|  | 247 | echo "$str" >>$sedf | 
| Guido van Rossum | 3bbc62e | 1995-01-02 19:30:30 +0000 | [diff] [blame] | 248 | echo "s%_MODOBJS_%$OBJS%" >>$sedf | 
|  | 249 | echo "s%_MODLIBS_%$LIBS%" >>$sedf | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 250 | echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf | 
|  | 251 | sed -f $sedf $makepre >Makefile | 
|  | 252 | cat $rulesf >>Makefile | 
|  | 253 | rm -f $sedf | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 254 | ;; | 
|  | 255 | esac | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 256 |  | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 257 | rm -f $rulesf | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 258 | ) |