| 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*: | 
| Thomas Wouters | 53e7fd7 | 2000-07-23 00:02:15 +0000 | [diff] [blame] | 26 | #   + insert 'extern void init<module>(void);' before MARKER 1 | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 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 | ae84e8d | 1999-04-19 17:16:12 +0000 | [diff] [blame] | 106 | 		# to handle backslashes for sh's that don't automatically | 
 | 107 | 		# continue a read when the last char is a backslash | 
 | 108 | 		while echo $line | grep '\\$' > /dev/null | 
 | 109 | 		do | 
 | 110 | 			read extraline | 
 | 111 | 			line=`echo $line| sed s/.$//`$extraline | 
 | 112 | 		done | 
 | 113 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 114 | 		# Output DEFS in reverse order so first definition overrides | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 115 | 		case $line in | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 116 | 		*=*)	DEFS="$line$NL$DEFS"; continue;; | 
| Guido van Rossum | 9bf8445 | 1997-04-02 05:33:00 +0000 | [diff] [blame] | 117 | 		'include '*)	DEFS="$line$NL$DEFS"; continue;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 118 | 		'*noobjects*') | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 119 | 			case $noobjects in | 
 | 120 | 			yes)	;; | 
 | 121 | 			*)	LOCALLIBS=$LIBS; LIBS=;; | 
 | 122 | 			esac | 
 | 123 | 			noobjects=yes; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 124 | 			continue;; | 
 | 125 | 		'*doconfig*')	doconfig=yes; continue;; | 
| Guido van Rossum | 4355454 | 1996-08-20 19:49:13 +0000 | [diff] [blame] | 126 | 		'*static*')	doconfig=yes; continue;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 127 | 		'*noconfig*')	doconfig=no; continue;; | 
| Guido van Rossum | 4355454 | 1996-08-20 19:49:13 +0000 | [diff] [blame] | 128 | 		'*shared*')	doconfig=no; continue;; | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 129 | 		esac | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 130 | 		srcs= | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 131 | 		cpps= | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 132 | 		libs= | 
 | 133 | 		mods= | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 134 | 		skip= | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 135 | 		for arg in $line | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 136 | 		do | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 137 | 			case $skip in | 
 | 138 | 			libs)	libs="$libs $arg"; skip=; continue;; | 
 | 139 | 			cpps)	cpps="$cpps $arg"; skip=; continue;; | 
 | 140 | 			srcs)	srcs="$srcs $arg"; skip=; continue;; | 
 | 141 | 			esac | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 142 | 			case $arg in | 
| Fred Drake | e55d544 | 2000-07-07 16:21:31 +0000 | [diff] [blame] | 143 | 			-[IDUCf]*)	cpps="$cpps $arg";; | 
| Guido van Rossum | b447d11 | 1997-12-02 20:38:11 +0000 | [diff] [blame] | 144 | 			-Xlinker)	libs="$libs $arg"; skip=libs;; | 
| Guido van Rossum | 8bfefce | 1999-05-21 19:18:49 +0000 | [diff] [blame] | 145 | 			-rpath)		libs="$libs $arg"; skip=libs;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 146 | 			-[A-Zl]*)	libs="$libs $arg";; | 
 | 147 | 			*.a)		libs="$libs $arg";; | 
| Guido van Rossum | a29756c | 1996-08-19 22:00:05 +0000 | [diff] [blame] | 148 | 			*.so)		libs="$libs $arg";; | 
 | 149 | 			*.sl)		libs="$libs $arg";; | 
| Guido van Rossum | fa1fb7d | 1998-05-14 02:37:45 +0000 | [diff] [blame] | 150 | 			/*.o)		libs="$libs $arg";; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 151 | 			*.o)		srcs="$srcs `basename $arg .o`.c";; | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 152 | 			*.[cC])		srcs="$srcs $arg";; | 
 | 153 | 			*.cc)		srcs="$srcs $arg";; | 
 | 154 | 			*.c++)		srcs="$srcs $arg";; | 
| Guido van Rossum | babacb0 | 1997-02-14 16:44:04 +0000 | [diff] [blame] | 155 | 			*.cxx)		srcs="$srcs $arg";; | 
 | 156 | 			*.cpp)		srcs="$srcs $arg";; | 
| Sjoerd Mullender | 4237efc | 1995-10-11 08:45:15 +0000 | [diff] [blame] | 157 | 			\$*)		libs="$libs $arg" | 
 | 158 | 					cpps="$cpps $arg";; | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 159 | 			*.*)		echo 1>&2 "bad word $arg in $line" | 
 | 160 | 					exit 1;; | 
| Guido van Rossum | 4a26986 | 1995-06-14 22:52:06 +0000 | [diff] [blame] | 161 | 			-u)		skip=libs; libs="$libs -u";; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 162 | 			[a-zA-Z_]*)	mods="$mods $arg";; | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 163 | 			*)		echo 1>&2 "bad word $arg in $line" | 
 | 164 | 					exit 1;; | 
 | 165 | 			esac | 
 | 166 | 		done | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 167 | 		case $doconfig in | 
 | 168 | 		yes) | 
 | 169 | 			LIBS="$LIBS $libs" | 
 | 170 | 			MODS="$MODS $mods" | 
 | 171 | 			;; | 
 | 172 | 		esac | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 173 | 		case $noobjects in | 
 | 174 | 		yes)	continue;; | 
 | 175 | 		esac | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 176 | 		objs='' | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 177 | 		for src in $srcs | 
 | 178 | 		do | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 179 | 			case $src in | 
 | 180 | 			*.c)   obj=`basename $src .c`.o; cc='$(CC)';; | 
 | 181 | 			*.cc)  obj=`basename $src .cc`.o; cc='$(CCC)';; | 
 | 182 | 			*.c++) obj=`basename $src .c++`.o; cc='$(CCC)';; | 
 | 183 | 			*.C)   obj=`basename $src .C`.o; cc='$(CCC)';; | 
| Guido van Rossum | 16cb6f4 | 1997-10-21 19:30:29 +0000 | [diff] [blame] | 184 | 			*.cxx) obj=`basename $src .cxx`.o; cc='$(CCC)';; | 
 | 185 | 			*.cpp) obj=`basename $src .cpp`.o; cc='$(CCC)';; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 186 | 			*)     continue;; | 
 | 187 | 			esac | 
 | 188 | 			objs="$objs $obj" | 
 | 189 | 			case $src in | 
 | 190 | 			glmodule.c) ;; | 
| Guido van Rossum | 76d1f96 | 1998-09-09 14:04:51 +0000 | [diff] [blame] | 191 | 			/*) ;; | 
| Skip Montanaro | fd02267 | 2000-07-06 17:58:06 +0000 | [diff] [blame] | 192 | 			\$*) ;; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 193 | 			*) src='$(srcdir)/'$src;; | 
 | 194 | 			esac | 
 | 195 | 			case $doconfig in | 
| Guido van Rossum | 8991065 | 1994-10-20 21:58:30 +0000 | [diff] [blame] | 196 | 			no)	cc="$cc \$(CCSHARED)";; | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 197 | 			esac | 
| Guido van Rossum | 732aa2f | 1998-12-11 01:10:29 +0000 | [diff] [blame] | 198 | 			rule="$obj: $src; $cc $cpps \$(CFLAGS) -c $src" | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 199 | 			echo "$rule" >>$rulesf | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 200 | 		done | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 201 | 		case $doconfig in | 
 | 202 | 		yes)	OBJS="$OBJS $objs";; | 
 | 203 | 		esac | 
 | 204 | 		for mod in $mods | 
 | 205 | 		do | 
 | 206 | 			case $objs in | 
 | 207 | 			*$mod.o*)	base=$mod;; | 
 | 208 | 			*)		base=${mod}module;; | 
 | 209 | 			esac | 
 | 210 | 			file="$base\$(SO)" | 
 | 211 | 			case $doconfig in | 
 | 212 | 			no)	SHAREDMODS="$SHAREDMODS $file";; | 
 | 213 | 			esac | 
 | 214 | 			rule="$file: $objs" | 
| Sjoerd Mullender | 4eba0c9 | 1994-10-13 09:09:05 +0000 | [diff] [blame] | 215 | 			rule="$rule; \$(LDSHARED) $objs $libs -o $file" | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 216 | 			echo "$rule" >>$rulesf | 
 | 217 | 		done | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 218 | 	done | 
 | 219 |  | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 220 | 	case $SHAREDMODS in | 
 | 221 | 	'')	;; | 
 | 222 | 	*)	DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; | 
 | 223 | 	esac | 
 | 224 |  | 
| Guido van Rossum | 0b498be | 1994-08-23 13:49:15 +0000 | [diff] [blame] | 225 | 	case $noobjects in | 
 | 226 | 	yes)	BASELIBS=$LIBS;; | 
 | 227 | 	*)	LOCALLIBS=$LIBS;; | 
 | 228 | 	esac | 
 | 229 | 	LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)' | 
 | 230 | 	DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS" | 
 | 231 | 	DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS" | 
 | 232 |  | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 233 | 	EXTDECLS= | 
 | 234 | 	INITBITS= | 
 | 235 | 	for mod in $MODS | 
 | 236 | 	do | 
| Thomas Wouters | 53e7fd7 | 2000-07-23 00:02:15 +0000 | [diff] [blame] | 237 | 		EXTDECLS="${EXTDECLS}extern void init$mod(void);$NL" | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 238 | 		INITBITS="${INITBITS}	{\"$mod\", init$mod},$NL" | 
 | 239 | 	done | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 240 |  | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 241 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 242 | 	case $config in | 
 | 243 | 	-)  ;; | 
 | 244 | 	*)  sed -e " | 
 | 245 | 		1i$NL/* Generated automatically from $config by makesetup. */ | 
 | 246 | 		/MARKER 1/i$NL$EXTDECLS | 
| Guido van Rossum | 3886bb6 | 1998-12-04 18:50:17 +0000 | [diff] [blame] | 247 |   | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 248 | 		/MARKER 2/i$NL$INITBITS | 
 | 249 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 250 | 		" $config >config.c | 
 | 251 | 	    ;; | 
 | 252 | 	esac | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 253 |  | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 254 | 	case $makepre in | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 255 | 	-)	;; | 
 | 256 | 	*)	sedf="@sed.in.$$" | 
 | 257 | 		trap 'rm -f $sedf' 0 1 2 3 | 
 | 258 | 		echo "1i\\" >$sedf | 
 | 259 | 		str="# Generated automatically from $makepre by makesetup." | 
 | 260 | 		echo "$str" >>$sedf | 
| Guido van Rossum | 3bbc62e | 1995-01-02 19:30:30 +0000 | [diff] [blame] | 261 | 		echo "s%_MODOBJS_%$OBJS%" >>$sedf | 
 | 262 | 		echo "s%_MODLIBS_%$LIBS%" >>$sedf | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 263 | 		echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf | 
 | 264 | 		sed -f $sedf $makepre >Makefile | 
 | 265 | 		cat $rulesf >>Makefile | 
 | 266 | 		rm -f $sedf | 
| Guido van Rossum | b6775db | 1994-08-01 11:34:53 +0000 | [diff] [blame] | 267 | 	    ;; | 
 | 268 | 	esac | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 269 |  | 
| Guido van Rossum | 7cc5abd | 1994-09-12 10:42:20 +0000 | [diff] [blame] | 270 | 	rm -f $rulesf | 
| Guido van Rossum | fba715a | 1994-01-02 00:26:09 +0000 | [diff] [blame] | 271 | ) |