forked from python/cpython
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Makefile.pre.in, my generic makefile
- Loading branch information
1 parent
f62e5bf
commit 1631cbe
Showing
2 changed files
with
265 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,264 @@ | ||
# Universal Unix Makefile for Python extensions | ||
# ============================================= | ||
|
||
# Short Instructions | ||
# ------------------ | ||
|
||
# 1. Build and install Python (1.4 or newer). | ||
# 2. "make -f Makefile.pre.in boot" | ||
# 3. "make" | ||
# You should now have a shared library. | ||
|
||
# Long Instructions | ||
# ----------------- | ||
|
||
# Build *and install* the basic Python 1.4 distribution. See the | ||
# Python README for instructions. | ||
|
||
# Create a file Setup.in for your extension. This file follows the | ||
# format of the Modules/Setup.in file; see the instructions there. | ||
# For a simple module called "spam" on file "spammodule.c", it can | ||
# contain a single line: | ||
# spam spammodule.c | ||
# You can build as many modules as you want in the same directory -- | ||
# just have a separate line for each of them in the Setup.in file. | ||
|
||
# If you want to build your extension as a shared library, insert a | ||
# line containing just the string | ||
# *shared* | ||
# at the top of your Setup.in file. | ||
|
||
# Note that the build process copies Setup.in to Setup, and then works | ||
# with Setup. It doesn't overwrite Setup when Setup.in is changed, so | ||
# while you're in the process of debugging your Setup.in file, you may | ||
# want to edit Setup instead, and copy it back to Setup.in later. | ||
# (All this is done so you can distribute your extension easily and | ||
# someone else can select the modules they actually want to build by | ||
# commenting out lines in the Setup file, without editing the | ||
# original. Editing Setup is also used to specify nonstandard | ||
# locations for include or library files.) | ||
|
||
# Copy this file (Misc/Makefile.pre.in) to the directory containing | ||
# your extension. | ||
|
||
# Run "make -f Makefile.pre.in boot". This creates Makefile | ||
# (producing Makefile.pre and sedscript as intermediate files) and | ||
# config.c, incorporating the values for sys.prefix, sys.exec_prefix | ||
# and sys.version from the installed Python binary. For this to work, | ||
# the python binary must be on your path. If this fails, try | ||
# make -f Makefile.pre.in Makefile VERSION=1.4 installdir=<prefix> | ||
# where <prefix> is the prefix used to install Python for installdir | ||
# (and possibly similar for exec_installdir=<exec_prefix>). | ||
|
||
# If you are building your extension as a shared library (your | ||
# Setup.in file starts with *shared*), run "make" or "make sharedmods" | ||
# to build the shared library files. If you are building a statically | ||
# linked Python binary (the only solution of your platform doesn't | ||
# support shared libraries, and sometimes handy if you want to | ||
# distribute or install the resulting Python binary), run "make | ||
# python". | ||
|
||
# Note: Each time you edit Makefile.pre.in or Setup, you must run | ||
# "make Makefile" before running "make". | ||
|
||
# Hint: if you want to use VPATH, you can start in an empty | ||
# subdirectory and say (e.g.): | ||
# make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. | ||
|
||
|
||
# === Bootstrap variables (edited through "make boot") === | ||
|
||
# The prefix used by "make inclinstall libainstall" of core python | ||
installdir= /usr/local | ||
|
||
# The exec_prefix used by the same | ||
exec_installdir=$(installdir) | ||
|
||
# Source directory and VPATH in case you want to use VPATH. | ||
# (You will have to edit these two lines yourself -- there is no | ||
# automatic support as the Makefile is not generated by | ||
# config.status.) | ||
srcdir= . | ||
VPATH= . | ||
|
||
# === Variables that you may want to customize (rarely) === | ||
|
||
# Add more -I and -D options here | ||
CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(LIBPL) $(DEFS) | ||
|
||
# These two variables can be set in Setup to merge extensions. | ||
# See example[23]. | ||
BASELIB= | ||
BASESETUP= | ||
|
||
# === Variables set by makesetup === | ||
|
||
MODOBJS= _MODOBJS_ | ||
MODLIBS= _MODLIBS_ | ||
|
||
# === Definitions added by makesetup === | ||
|
||
# === Variables from configure (through sedscript) === | ||
|
||
VERSION= @VERSION@ | ||
CC= @CC@ | ||
OPT= @OPT@ | ||
LDFLAGS= @LDFLAGS@ | ||
DEFS= @DEFS@ | ||
LIBS= @LIBS@ | ||
LIBM= @LIBM@ | ||
LIBC= @LIBC@ | ||
RANLIB= @RANLIB@ | ||
MACHDEP= @MACHDEP@ | ||
SO= @SO@ | ||
LDSHARED= @LDSHARED@ | ||
CCSHARED= @CCSHARED@ | ||
LINKFORSHARED= @LINKFORSHARED@ | ||
|
||
# Install prefix for architecture-independent files | ||
prefix= /usr/local | ||
|
||
# Install prefix for architecture-dependent files | ||
exec_prefix= $(prefix) | ||
|
||
# === Fixed definitions === | ||
|
||
# Expanded directories | ||
BINDIR= $(exec_installdir)/bin | ||
LIBDIR= $(exec_prefix)/lib | ||
MANDIR= $(installdir)/man | ||
INCLUDEDIR= $(installdir)/include | ||
SCRIPTDIR= $(prefix)/lib | ||
|
||
# Detailed destination directories | ||
BINLIBDEST= $(LIBDIR)/python$(VERSION) | ||
LIBDEST= $(SCRIPTDIR)/python$(VERSION) | ||
INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) | ||
LIBP= $(exec_installdir)/lib/python$(VERSION) | ||
|
||
LIBPL= $(LIBP)/config | ||
|
||
PYTHONLIBS= $(LIBPL)/libModules.a \ | ||
$(LIBPL)/libPython.a \ | ||
$(LIBPL)/libObjects.a \ | ||
$(LIBPL)/libParser.a | ||
|
||
MAKESETUP= $(LIBPL)/makesetup | ||
MAKEFILE= $(LIBPL)/Makefile | ||
CONFIGC= $(LIBPL)/config.c | ||
CONFIGCIN= $(LIBPL)/config.c.in | ||
SETUP= $(LIBPL)/Setup | ||
|
||
SYSLIBS= $(LIBM) $(LIBC) | ||
|
||
ADDOBJS= $(LIBPL)/main.o getpath.o config.o | ||
|
||
# === Fixed rules === | ||
|
||
# Default target. This builds shared libraries only | ||
default: sharedmods | ||
|
||
# Build everything | ||
all: python sharedmods | ||
|
||
# Build shared libraries from our extension modules | ||
sharedmods: $(SHAREDMODS) | ||
|
||
# Build a static Python binary containing our extension modules | ||
python: $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) | ||
$(CC) $(LDFLAGS) $(ADDOBJS) lib.a $(PYTHONLIBS) \ | ||
$(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python | ||
|
||
# Build the library containing our extension modules | ||
lib.a: $(MODOBJS) | ||
-rm -f lib.a | ||
ar cr lib.a $(MODOBJS) | ||
-$(RANLIB) lib.a || \ | ||
echo "don't worry if ranlib fails -- probably SYSV or equiv" | ||
|
||
# This runs makesetup *twice* to use the BASESETUP definition from Setup | ||
config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) | ||
$(MAKESETUP) \ | ||
-m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) | ||
$(MAKE) -f Makefile do-it-again | ||
|
||
# Internal target to run makesetup for the second time | ||
do-it-again: | ||
$(MAKESETUP) \ | ||
-m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) | ||
|
||
# Make config.o from the config.c created by makesetup | ||
config.o: config.c | ||
$(CC) $(CFLAGS) -c config.c | ||
|
||
# Make our own private getpath.o from the installed source and our PYTHONPATH | ||
getpath.o: $(LIBPL)/getpath.c Makefile | ||
$(CC) $(CFLAGS) -DPYTHONPATH=\"$(PYTHONPATH)\" -c $(LIBPL)/getpath.c | ||
|
||
# Setup is copied from Setup.in *only* if it doesn't yet exist | ||
Setup: | ||
cp $(srcdir)/Setup.in Setup | ||
|
||
# Make the intermediate Makefile.pre from Makefile.pre.in | ||
Makefile.pre: Makefile.pre.in sedscript | ||
sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre | ||
|
||
# Shortcuts to make the sed arguments on one line | ||
P=prefix | ||
E=exec_prefix | ||
H=Generated automatically from Makefile.pre.in by sedscript. | ||
L=LINKFORSHARED | ||
|
||
# Make the sed script used to create Makefile.pre from Makefile.pre.in | ||
sedscript: $(MAKEFILE) | ||
sed -n \ | ||
-e '1s/.*/1i\\/p' \ | ||
-e '2s%.*%# $H%p' \ | ||
-e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ | ||
-e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ | ||
-e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ | ||
-e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ | ||
-e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ | ||
-e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ | ||
-e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ | ||
-e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ | ||
-e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ | ||
-e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ | ||
-e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ | ||
-e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ | ||
-e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ | ||
-e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ | ||
-e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ | ||
-e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ | ||
$(MAKEFILE) >sedscript | ||
echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript | ||
echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript | ||
echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript | ||
echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript | ||
echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript | ||
echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript | ||
echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript | ||
|
||
# Bootstrap target | ||
boot: | ||
VERSION=`python -c "import sys; print sys.version[:3]"`; \ | ||
installdir=`python -c "import sys; print sys.prefix"`; \ | ||
exec_installdir=`python -c "import sys; print sys.exec_prefix"`; \ | ||
make -f Makefile.pre.in Makefile VPATH=$(VPATH) srcdir=$(srcdir) \ | ||
VERSION=$$VERSION \ | ||
installdir=$$installdir \ | ||
exec_installdir=$$exec_installdir | ||
|
||
# Handy target to remove intermediate files and backups | ||
clean: | ||
-rm -f *.o *~ | ||
|
||
# Handy target to remove everything that is easily regenerated | ||
clobber: clean | ||
-rm -f *.a tags TAGS config.c Makefile.pre python sedscript | ||
-rm -f *.so *.sl so_locations | ||
|
||
|
||
# Handy target to remove everything you don't want to distribute | ||
distclean: clobber | ||
-rm -f Makefile Setup |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters