mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 d4fcdb1ea8
			
		
	
	
		d4fcdb1ea8
		
	
	
	
	
		
			
			configure to append to Python's default values for those variables, and similarly allow users to set $XXFLAGS on the make command line to append to the values set by configure. In the makefile, this renames the variables that used to be $XXFLAGS to $PY_XXFLAGS, and renames the old $PY_CFLAGS to $PY_CORE_CFLAGS. To compensate, sysconfig now aliases $XXFLAGS=$PY_XXFLAGS so that scripts using it keep working. I see that as the right interface, not a backward-compatibility hack, since these are logically the $XXFLAGS variables; we just use a different name in the makefile to deal with make's semantics.
		
			
				
	
	
		
			297 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
	
		
			7.3 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 .)
 | |
| # -l directory: library source directory (default derived from $0)
 | |
| # -c file:      alternative config.c template (default $libdir/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.dist 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 PyObject* PyInit_<module>(void);' before MARKER 1
 | |
| #   + insert '{"<module>", PyInit_<module>},' 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] [-l libdir] [-c config.c.in] [-m Makefile.pre]
 | |
|                  [Setup] ... [-n [Setup] ...]'
 | |
| srcdir='.'
 | |
| libdir=''
 | |
| config=''
 | |
| makepre=''
 | |
| noobjects=''
 | |
| doconfig=yes
 | |
| while :
 | |
| do
 | |
| 	case $1 in
 | |
| 	-s)	shift; srcdir=$1; shift;;
 | |
| 	-l)	shift; libdir=$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 libdir and config if not set by command line
 | |
| # (Not all systems have dirname)
 | |
| case $libdir in
 | |
| '')	case $0 in
 | |
| 	*/*)	libdir=`echo $0 | sed 's,/[^/]*$,,'`;;
 | |
| 	*)	libdir=.;;
 | |
| 	esac;;
 | |
| esac
 | |
| case $config in
 | |
| '')	config=$libdir/config.c.in;;
 | |
| esac
 | |
| case $makepre in
 | |
| '')	makepre=Makefile.pre;;
 | |
| esac
 | |
| 
 | |
| # Newline for sed i and a commands
 | |
| NL='\
 | |
| '
 | |
| 
 | |
| # Setup to link with extra libraries when makeing shared extensions.
 | |
| # Currently, only Cygwin needs this baggage.
 | |
| case `uname -s` in
 | |
| CYGWIN*) if test $libdir = .
 | |
| 	 then
 | |
| 	 	ExtraLibDir=.
 | |
| 	 else
 | |
| 	 	ExtraLibDir='$(LIBPL)'
 | |
| 	 fi
 | |
| 	 ExtraLibs="-L$ExtraLibDir -lpython\$(VERSION)";;
 | |
| esac
 | |
| 
 | |
| # 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
 | |
| 		# to handle backslashes for sh's that don't automatically
 | |
| 		# continue a read when the last char is a backslash
 | |
| 		while echo $line | grep '\\$' > /dev/null
 | |
| 		do
 | |
| 			read extraline
 | |
| 			line=`echo $line| sed s/.$//`$extraline
 | |
| 		done
 | |
| 
 | |
| 		# Output DEFS in reverse order so first definition overrides
 | |
| 		case $line in
 | |
| 		*=*)	DEFS="$line$NL$DEFS"; continue;;
 | |
| 		'include '*)	DEFS="$line$NL$DEFS"; continue;;
 | |
| 		'*noobjects*')
 | |
| 			case $noobjects in
 | |
| 			yes)	;;
 | |
| 			*)	LOCALLIBS=$LIBS; LIBS=;;
 | |
| 			esac
 | |
| 			noobjects=yes;
 | |
| 			continue;;
 | |
| 		'*doconfig*')	doconfig=yes; continue;;
 | |
| 		'*static*')	doconfig=yes; continue;;
 | |
| 		'*noconfig*')	doconfig=no; continue;;
 | |
| 		'*shared*')	doconfig=no; continue;;
 | |
| 		esac
 | |
| 		srcs=
 | |
| 		cpps=
 | |
| 		libs=
 | |
| 		mods=
 | |
| 		skip=
 | |
| 		for arg in $line
 | |
| 		do
 | |
| 			case $skip in
 | |
| 			libs)	libs="$libs $arg"; skip=; continue;;
 | |
| 			cpps)	cpps="$cpps $arg"; skip=; continue;;
 | |
| 			srcs)	srcs="$srcs $arg"; skip=; continue;;
 | |
| 			esac
 | |
| 			case $arg in
 | |
| 			-framework)	libs="$libs $arg"; skip=libs;
 | |
| 				        # OSX/OSXS/Darwin framework link cmd
 | |
| 					;;
 | |
| 			-[IDUCfF]*)	cpps="$cpps $arg";;
 | |
| 			-Xcompiler)	skip=cpps;;
 | |
| 			-Xlinker)	libs="$libs $arg"; skip=libs;;
 | |
| 			-rpath)		libs="$libs $arg"; skip=libs;;
 | |
| 			--rpath)	libs="$libs $arg"; skip=libs;;
 | |
| 			-[A-Zl]*)	libs="$libs $arg";;
 | |
| 			*.a)		libs="$libs $arg";;
 | |
| 			*.so)		libs="$libs $arg";;
 | |
| 			*.sl)		libs="$libs $arg";;
 | |
| 			/*.o)		libs="$libs $arg";;
 | |
| 			*.def)		libs="$libs $arg";;
 | |
| 			*.o)		srcs="$srcs `basename $arg .o`.c";;
 | |
| 			*.[cC])		srcs="$srcs $arg";;
 | |
| 			*.m)		srcs="$srcs $arg";; # Objective-C src
 | |
| 			*.cc)		srcs="$srcs $arg";;
 | |
| 			*.c++)		srcs="$srcs $arg";;
 | |
| 			*.cxx)		srcs="$srcs $arg";;
 | |
| 			*.cpp)		srcs="$srcs $arg";;
 | |
| 			\$*)		libs="$libs $arg"
 | |
| 					cpps="$cpps $arg";;
 | |
| 			*.*)		echo 1>&2 "bad word $arg in $line"
 | |
| 					exit 1;;
 | |
| 			-u)		skip=libs; libs="$libs -u";;
 | |
| 			[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='$(CXX)';;
 | |
| 			*.c++) obj=`basename $src .c++`.o; cc='$(CXX)';;
 | |
| 			*.C)   obj=`basename $src .C`.o; cc='$(CXX)';;
 | |
| 			*.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';;
 | |
| 			*.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';;
 | |
| 			*.m)   obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C
 | |
| 			*)     continue;;
 | |
| 			esac
 | |
| 			obj="$srcdir/$obj"
 | |
| 			objs="$objs $obj"
 | |
| 			case $src in
 | |
| 			glmodule.c) ;;
 | |
| 			/*) ;;
 | |
| 			\$*) ;;
 | |
| 			*) src='$(srcdir)/'"$srcdir/$src";;
 | |
| 			esac
 | |
| 			case $doconfig in
 | |
| 			no)	cc="$cc \$(CCSHARED) \$(CFLAGS) \$(CPPFLAGS)";;
 | |
| 			*)
 | |
| 				cc="$cc \$(PY_CORE_CFLAGS)";;
 | |
| 			esac
 | |
| 			rule="$obj: $src; $cc $cpps -c $src -o $obj"
 | |
| 			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="$srcdir/$base\$(SO)"
 | |
| 			case $doconfig in
 | |
| 			no)	SHAREDMODS="$SHAREDMODS $file";;
 | |
| 			esac
 | |
| 			rule="$file: $objs"
 | |
| 			rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -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 PyObject* PyInit_$mod(void);$NL"
 | |
| 		INITBITS="${INITBITS}	{\"$mod\", PyInit_$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
 | |
| )
 |