annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/config-3.8-x86_64-linux-gnu/makesetup @ 68:5028fdace37b

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 16:23:26 -0400
parents
children
rev   line source
jpayne@68 1 #! /bin/sh
jpayne@68 2
jpayne@68 3 # Convert templates into Makefile and config.c, based on the module
jpayne@68 4 # definitions found in the file Setup.
jpayne@68 5 #
jpayne@68 6 # Usage: makesetup [-s dir] [-c file] [-m file] [Setup] ... [-n [Setup] ...]
jpayne@68 7 #
jpayne@68 8 # Options:
jpayne@68 9 # -s directory: alternative source directory (default .)
jpayne@68 10 # -l directory: library source directory (default derived from $0)
jpayne@68 11 # -c file: alternative config.c template (default $libdir/config.c.in)
jpayne@68 12 # -c -: don't write config.c
jpayne@68 13 # -m file: alternative Makefile template (default ./Makefile.pre)
jpayne@68 14 # -m -: don't write Makefile
jpayne@68 15 #
jpayne@68 16 # Remaining arguments are one or more Setup files (default ./Setup).
jpayne@68 17 # Setup files after a -n option are used for their variables, modules
jpayne@68 18 # and libraries but not for their .o files.
jpayne@68 19 #
jpayne@68 20 # See Setup for a description of the format of the Setup file.
jpayne@68 21 #
jpayne@68 22 # The following edits are made:
jpayne@68 23 #
jpayne@68 24 # Copying config.c.in to config.c:
jpayne@68 25 # - insert an identifying comment at the start
jpayne@68 26 # - for each <module> mentioned in Setup before *noconfig*:
jpayne@68 27 # + insert 'extern PyObject* PyInit_<module>(void);' before MARKER 1
jpayne@68 28 # + insert '{"<module>", PyInit_<module>},' before MARKER 2
jpayne@68 29 #
jpayne@68 30 # Copying Makefile.pre to Makefile:
jpayne@68 31 # - insert an identifying comment at the start
jpayne@68 32 # - replace _MODBUILT_NAMES_ by the list of *static* and *shared* modules
jpayne@68 33 # from Setup
jpayne@68 34 # - replace _MODDISABLED_NAMES_ by the list of *disabled* modules from Setup
jpayne@68 35 # - replace _MODOBJS_ by the list of objects from Setup (except for
jpayne@68 36 # Setup files after a -n option)
jpayne@68 37 # - replace _MODLIBS_ by the list of libraries from Setup
jpayne@68 38 # - for each object file mentioned in Setup, append a rule
jpayne@68 39 # '<file>.o: <file>.c; <build commands>' to the end of the Makefile
jpayne@68 40 # - for each module mentioned in Setup, append a rule
jpayne@68 41 # which creates a shared library version to the end of the Makefile
jpayne@68 42 # - for each variable definition found in Setup, insert the definition
jpayne@68 43 # before the comment 'Definitions added by makesetup'
jpayne@68 44
jpayne@68 45 # Loop over command line options
jpayne@68 46 usage='
jpayne@68 47 usage: makesetup [-s srcdir] [-l libdir] [-c config.c.in] [-m Makefile.pre]
jpayne@68 48 [Setup] ... [-n [Setup] ...]'
jpayne@68 49 srcdir='.'
jpayne@68 50 libdir=''
jpayne@68 51 config=''
jpayne@68 52 makepre=''
jpayne@68 53 noobjects=''
jpayne@68 54 doconfig=yes
jpayne@68 55 while :
jpayne@68 56 do
jpayne@68 57 case $1 in
jpayne@68 58 -s) shift; srcdir=$1; shift;;
jpayne@68 59 -l) shift; libdir=$1; shift;;
jpayne@68 60 -c) shift; config=$1; shift;;
jpayne@68 61 -m) shift; makepre=$1; shift;;
jpayne@68 62 --) shift; break;;
jpayne@68 63 -n) noobjects=yes;;
jpayne@68 64 -*) echo "$usage" 1>&2; exit 2;;
jpayne@68 65 *) break;;
jpayne@68 66 esac
jpayne@68 67 done
jpayne@68 68
jpayne@68 69 # Set default libdir and config if not set by command line
jpayne@68 70 # (Not all systems have dirname)
jpayne@68 71 case $libdir in
jpayne@68 72 '') case $0 in
jpayne@68 73 */*) libdir=`echo $0 | sed 's,/[^/]*$,,'`;;
jpayne@68 74 *) libdir=.;;
jpayne@68 75 esac;;
jpayne@68 76 esac
jpayne@68 77 case $config in
jpayne@68 78 '') config=$libdir/config.c.in;;
jpayne@68 79 esac
jpayne@68 80 case $makepre in
jpayne@68 81 '') makepre=Makefile.pre;;
jpayne@68 82 esac
jpayne@68 83
jpayne@68 84 # Newline for sed i and a commands
jpayne@68 85 NL='\
jpayne@68 86 '
jpayne@68 87
jpayne@68 88 # Setup to link with extra libraries when making shared extensions.
jpayne@68 89 # Currently, only Cygwin needs this baggage.
jpayne@68 90 case `uname -s` in
jpayne@68 91 CYGWIN*) if test $libdir = .
jpayne@68 92 then
jpayne@68 93 ExtraLibDir=.
jpayne@68 94 else
jpayne@68 95 ExtraLibDir='$(LIBPL)'
jpayne@68 96 fi
jpayne@68 97 ExtraLibs="-L$ExtraLibDir -lpython\$(LDVERSION)";;
jpayne@68 98 esac
jpayne@68 99
jpayne@68 100 # Main loop
jpayne@68 101 for i in ${*-Setup}
jpayne@68 102 do
jpayne@68 103 case $i in
jpayne@68 104 -n) echo '*noobjects*';;
jpayne@68 105 *) echo '*doconfig*'; cat "$i";;
jpayne@68 106 esac
jpayne@68 107 done |
jpayne@68 108 sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
jpayne@68 109 (
jpayne@68 110 rulesf="@rules.$$"
jpayne@68 111 trap 'rm -f $rulesf' 0 1 2 3
jpayne@68 112 echo "
jpayne@68 113 # Rules appended by makesetup
jpayne@68 114 " >$rulesf
jpayne@68 115 DEFS=
jpayne@68 116 BUILT=
jpayne@68 117 DISABLED=
jpayne@68 118 MODS=
jpayne@68 119 SHAREDMODS=
jpayne@68 120 OBJS=
jpayne@68 121 LIBS=
jpayne@68 122 LOCALLIBS=
jpayne@68 123 BASELIBS=
jpayne@68 124 while read line
jpayne@68 125 do
jpayne@68 126 # to handle backslashes for sh's that don't automatically
jpayne@68 127 # continue a read when the last char is a backslash
jpayne@68 128 while echo $line | grep '\\$' > /dev/null
jpayne@68 129 do
jpayne@68 130 read extraline
jpayne@68 131 line=`echo $line| sed s/.$//`$extraline
jpayne@68 132 done
jpayne@68 133
jpayne@68 134 # Output DEFS in reverse order so first definition overrides
jpayne@68 135 case $line in
jpayne@68 136 *=*) DEFS="$line$NL$DEFS"; continue;;
jpayne@68 137 'include '*) DEFS="$line$NL$DEFS"; continue;;
jpayne@68 138 '*noobjects*')
jpayne@68 139 case $noobjects in
jpayne@68 140 yes) ;;
jpayne@68 141 *) LOCALLIBS=$LIBS; LIBS=;;
jpayne@68 142 esac
jpayne@68 143 noobjects=yes;
jpayne@68 144 continue;;
jpayne@68 145 '*doconfig*') doconfig=yes; continue;;
jpayne@68 146 '*static*') doconfig=yes; continue;;
jpayne@68 147 '*noconfig*') doconfig=no; continue;;
jpayne@68 148 '*shared*') doconfig=no; continue;;
jpayne@68 149 '*disabled*') doconfig=disabled; continue;;
jpayne@68 150 esac
jpayne@68 151 srcs=
jpayne@68 152 cpps=
jpayne@68 153 libs=
jpayne@68 154 mods=
jpayne@68 155 skip=
jpayne@68 156 for arg in $line
jpayne@68 157 do
jpayne@68 158 case $skip in
jpayne@68 159 libs) libs="$libs $arg"; skip=; continue;;
jpayne@68 160 cpps) cpps="$cpps $arg"; skip=; continue;;
jpayne@68 161 srcs) srcs="$srcs $arg"; skip=; continue;;
jpayne@68 162 esac
jpayne@68 163 case $arg in
jpayne@68 164 -framework) libs="$libs $arg"; skip=libs;
jpayne@68 165 # OSX/OSXS/Darwin framework link cmd
jpayne@68 166 ;;
jpayne@68 167 -[IDUCfF]*) cpps="$cpps $arg";;
jpayne@68 168 -Xcompiler) skip=cpps;;
jpayne@68 169 -Xlinker) libs="$libs $arg"; skip=libs;;
jpayne@68 170 -rpath) libs="$libs $arg"; skip=libs;;
jpayne@68 171 --rpath) libs="$libs $arg"; skip=libs;;
jpayne@68 172 -[A-Zl]*) libs="$libs $arg";;
jpayne@68 173 *.a) libs="$libs $arg";;
jpayne@68 174 *.so) libs="$libs $arg";;
jpayne@68 175 *.sl) libs="$libs $arg";;
jpayne@68 176 /*.o) libs="$libs $arg";;
jpayne@68 177 *.def) libs="$libs $arg";;
jpayne@68 178 *.o) srcs="$srcs `basename $arg .o`.c";;
jpayne@68 179 *.[cC]) srcs="$srcs $arg";;
jpayne@68 180 *.m) srcs="$srcs $arg";; # Objective-C src
jpayne@68 181 *.cc) srcs="$srcs $arg";;
jpayne@68 182 *.c++) srcs="$srcs $arg";;
jpayne@68 183 *.cxx) srcs="$srcs $arg";;
jpayne@68 184 *.cpp) srcs="$srcs $arg";;
jpayne@68 185 \$*) libs="$libs $arg"
jpayne@68 186 cpps="$cpps $arg";;
jpayne@68 187 *.*) echo 1>&2 "bad word $arg in $line"
jpayne@68 188 exit 1;;
jpayne@68 189 -u) skip=libs; libs="$libs -u";;
jpayne@68 190 [a-zA-Z_]*) mods="$mods $arg";;
jpayne@68 191 *) echo 1>&2 "bad word $arg in $line"
jpayne@68 192 exit 1;;
jpayne@68 193 esac
jpayne@68 194 done
jpayne@68 195 case $doconfig in
jpayne@68 196 yes)
jpayne@68 197 LIBS="$LIBS $libs"
jpayne@68 198 MODS="$MODS $mods"
jpayne@68 199 BUILT="$BUILT $mods"
jpayne@68 200 ;;
jpayne@68 201 no)
jpayne@68 202 BUILT="$BUILT $mods"
jpayne@68 203 ;;
jpayne@68 204 disabled)
jpayne@68 205 DISABLED="$DISABLED $mods"
jpayne@68 206 continue
jpayne@68 207 ;;
jpayne@68 208 esac
jpayne@68 209 case $noobjects in
jpayne@68 210 yes) continue;;
jpayne@68 211 esac
jpayne@68 212 objs=''
jpayne@68 213 for src in $srcs
jpayne@68 214 do
jpayne@68 215 case $src in
jpayne@68 216 *.c) obj=`basename $src .c`.o; cc='$(CC)';;
jpayne@68 217 *.cc) obj=`basename $src .cc`.o; cc='$(CXX)';;
jpayne@68 218 *.c++) obj=`basename $src .c++`.o; cc='$(CXX)';;
jpayne@68 219 *.C) obj=`basename $src .C`.o; cc='$(CXX)';;
jpayne@68 220 *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';;
jpayne@68 221 *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';;
jpayne@68 222 *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C
jpayne@68 223 *) continue;;
jpayne@68 224 esac
jpayne@68 225 obj="$srcdir/$obj"
jpayne@68 226 objs="$objs $obj"
jpayne@68 227 case $src in
jpayne@68 228 glmodule.c) ;;
jpayne@68 229 /*) ;;
jpayne@68 230 \$*) ;;
jpayne@68 231 *) src='$(srcdir)/'"$srcdir/$src";;
jpayne@68 232 esac
jpayne@68 233 case $doconfig in
jpayne@68 234 no) cc="$cc \$(CCSHARED) \$(PY_CFLAGS) \$(PY_CPPFLAGS)";;
jpayne@68 235 *)
jpayne@68 236 cc="$cc \$(PY_BUILTIN_MODULE_CFLAGS)";;
jpayne@68 237 esac
jpayne@68 238 rule="$obj: $src; $cc $cpps -c $src -o $obj"
jpayne@68 239 echo "$rule" >>$rulesf
jpayne@68 240 done
jpayne@68 241 case $doconfig in
jpayne@68 242 yes) OBJS="$OBJS $objs";;
jpayne@68 243 esac
jpayne@68 244 for mod in $mods
jpayne@68 245 do
jpayne@68 246 file="$srcdir/$mod\$(EXT_SUFFIX)"
jpayne@68 247 case $doconfig in
jpayne@68 248 no) SHAREDMODS="$SHAREDMODS $file";;
jpayne@68 249 esac
jpayne@68 250 rule="$file: $objs"
jpayne@68 251 rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file"
jpayne@68 252 echo "$rule" >>$rulesf
jpayne@68 253 done
jpayne@68 254 done
jpayne@68 255
jpayne@68 256 case $SHAREDMODS in
jpayne@68 257 '') ;;
jpayne@68 258 *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";;
jpayne@68 259 esac
jpayne@68 260
jpayne@68 261 case $noobjects in
jpayne@68 262 yes) BASELIBS=$LIBS;;
jpayne@68 263 *) LOCALLIBS=$LIBS;;
jpayne@68 264 esac
jpayne@68 265 LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)'
jpayne@68 266 DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS"
jpayne@68 267 DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS"
jpayne@68 268
jpayne@68 269 EXTDECLS=
jpayne@68 270 INITBITS=
jpayne@68 271 for mod in $MODS
jpayne@68 272 do
jpayne@68 273 EXTDECLS="${EXTDECLS}extern PyObject* PyInit_$mod(void);$NL"
jpayne@68 274 INITBITS="${INITBITS} {\"$mod\", PyInit_$mod},$NL"
jpayne@68 275 done
jpayne@68 276
jpayne@68 277
jpayne@68 278 case $config in
jpayne@68 279 -) ;;
jpayne@68 280 *) sed -e "
jpayne@68 281 1i$NL/* Generated automatically from $config by makesetup. */
jpayne@68 282 /MARKER 1/i$NL$EXTDECLS
jpayne@68 283
jpayne@68 284 /MARKER 2/i$NL$INITBITS
jpayne@68 285
jpayne@68 286 " $config >config.c
jpayne@68 287 ;;
jpayne@68 288 esac
jpayne@68 289
jpayne@68 290 case $makepre in
jpayne@68 291 -) ;;
jpayne@68 292 *) sedf="@sed.in.$$"
jpayne@68 293 trap 'rm -f $sedf' 0 1 2 3
jpayne@68 294 echo "1i\\" >$sedf
jpayne@68 295 str="# Generated automatically from $makepre by makesetup."
jpayne@68 296 echo "$str" >>$sedf
jpayne@68 297 echo "s%_MODBUILT_NAMES_%$BUILT%" >>$sedf
jpayne@68 298 echo "s%_MODDISABLED_NAMES_%$DISABLED%" >>$sedf
jpayne@68 299 echo "s%_MODOBJS_%$OBJS%" >>$sedf
jpayne@68 300 echo "s%_MODLIBS_%$LIBS%" >>$sedf
jpayne@68 301 echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf
jpayne@68 302 sed -f $sedf $makepre >Makefile
jpayne@68 303 cat $rulesf >>Makefile
jpayne@68 304 rm -f $sedf
jpayne@68 305 ;;
jpayne@68 306 esac
jpayne@68 307
jpayne@68 308 rm -f $rulesf
jpayne@68 309 )