mirror of https://github.com/python/cpython
522 lines
16 KiB
Makefile
522 lines
16 KiB
Makefile
########################################################################
|
|
# Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
|
|
# The Netherlands.
|
|
#
|
|
# All Rights Reserved
|
|
#
|
|
# Permission to use, copy, modify, and distribute this software and its
|
|
# documentation for any purpose and without fee is hereby granted,
|
|
# provided that the above copyright notice appear in all copies and that
|
|
# both that copyright notice and this permission notice appear in
|
|
# supporting documentation, and that the names of Stichting Mathematisch
|
|
# Centrum or CWI or Corporation for National Research Initiatives or
|
|
# CNRI not be used in advertising or publicity pertaining to
|
|
# distribution of the software without specific, written prior
|
|
# permission.
|
|
#
|
|
# While CWI is the initial source for this software, a modified version
|
|
# is made available by the Corporation for National Research Initiatives
|
|
# (CNRI) at the Internet address ftp://ftp.python.org.
|
|
#
|
|
# STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
|
|
# REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
|
|
# MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
|
|
# CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
|
# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
|
# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
# PERFORMANCE OF THIS SOFTWARE.
|
|
########################################################################
|
|
|
|
# Top-level Makefile for Python
|
|
#
|
|
# As distributed, this file is called Makefile.in; it is processed
|
|
# into the real Makefile by running the script ./configure, which
|
|
# replaces things like @spam@ with values appropriate for your system.
|
|
# This means that if you edit Makefile, your changes get lost the next
|
|
# time you run the configure script. Ideally, you can do:
|
|
#
|
|
# ./configure
|
|
# make
|
|
# make test
|
|
# make install
|
|
#
|
|
# The top-level Makefile invokes make recursively in a number of
|
|
# subdirectories (see the SUBDIRS variable below). If you want to,
|
|
# you can invoke make in individual subdirectories. However, the
|
|
# sub-Makefiles are also generated by configure, and the quickest way
|
|
# to make sure they are up to date is by running make (or "make
|
|
# Makefiles") at the top level. This is particularly important for
|
|
# Modules/Makefile, which has to be regenerated every time you edit
|
|
# Modules/Setup. The python executable is built in the Modules
|
|
# directory and then moved to the top-level directory. The recursive
|
|
# makes pass three options to subordinate makes: OPT (a quick way to
|
|
# change some compiler options; it usually defaults to -O), prefix and
|
|
# exec_prefix (the installation paths).
|
|
#
|
|
# If you have a previous version of Python installed that you don't
|
|
# want to overwrite, you can use "make altinstall" instead of "make
|
|
# install". This changes the install procedure so it installs the
|
|
# Python binary as "python<version>". The libraries and include files
|
|
# are always installed in a subdirectory called "python<version>".
|
|
# "make altinstall" does not install the manual page. If you want to
|
|
# make this installation the "official" installation but want to keep
|
|
# the old binary around "just in case", rename the installed python
|
|
# binary to "python<oldversion>" before running "make install".
|
|
# (This only works between different versions, e.g. 1.3 and 1.4 --
|
|
# different betas of the same version will overwrite each other in
|
|
# installation unless you override the VERSION Make variable.)
|
|
#
|
|
# In fact, "make install" or "make bininstall" installs the binary
|
|
# as python<version> and makes a hard link to python, so when
|
|
# installing a new version in the future, nothing of the current
|
|
# version will be lost (except for the man page).
|
|
#
|
|
# If recursive makes fail, try invoking make as "make MAKE=make".
|
|
#
|
|
# See also the section "Build instructions" in the README file.
|
|
|
|
# Substitutions by configure
|
|
VERSION= @VERSION@
|
|
srcdir= @srcdir@
|
|
VPATH= @srcdir@
|
|
CC= @CC@
|
|
AR= @AR@
|
|
RANLIB= @RANLIB@
|
|
DEFS= @DEFS@
|
|
|
|
# Machine-dependent subdirectories
|
|
MACHDEP= @MACHDEP@
|
|
|
|
# Install prefix for architecture-independent files
|
|
prefix= @prefix@
|
|
|
|
# Install prefix for architecture-dependent files
|
|
exec_prefix= @exec_prefix@
|
|
|
|
# Expanded directories
|
|
BINDIR= $(exec_prefix)/bin
|
|
LIBDIR= $(exec_prefix)/lib
|
|
MANDIR= $(prefix)/man
|
|
INCLUDEDIR= $(prefix)/include
|
|
CONFINCLUDEDIR= $(exec_prefix)/include
|
|
SCRIPTDIR= $(prefix)/lib
|
|
|
|
# Detailed destination directories
|
|
BINLIBDEST= $(LIBDIR)/python$(VERSION)
|
|
LIBDEST= $(SCRIPTDIR)/python$(VERSION)
|
|
INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)
|
|
CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION)
|
|
LIBP= $(LIBDIR)/python$(VERSION)
|
|
|
|
# Symbols used for using shared libraries
|
|
SO= @SO@
|
|
LDSHARED= @LDSHARED@
|
|
CCSHARED= @CCSHARED@
|
|
LINKFORSHARED= @LINKFORSHARED@
|
|
DESTSHARED= $(BINLIBDEST)/sharedmodules
|
|
|
|
# Shell used by make (some versions default to the login shell, which is bad)
|
|
SHELL= /bin/sh
|
|
|
|
# Portable install script (configure doesn't always guess right)
|
|
INSTALL= @srcdir@/install-sh -c
|
|
INSTALL_PROGRAM=${INSTALL} -m 755
|
|
INSTALL_DATA= ${INSTALL} -m 644
|
|
|
|
# --with-PACKAGE options for configure script
|
|
# e.g. --with-readline --with-svr5 --with-solaris --with-thread
|
|
# (see README for an explanation)
|
|
WITH=
|
|
|
|
# Compiler options passed to subordinate makes
|
|
OPT= @OPT@
|
|
|
|
# Subdirectories where to run make recursively
|
|
SUBDIRS= Parser Objects Python Modules
|
|
|
|
# Other subdirectories
|
|
SUBDIRSTOO= Include Lib Doc Misc Demo Grammar
|
|
|
|
# Files and directories to be distributed
|
|
CONFIGFILES= configure configure.in acconfig.h config.h.in Makefile.in
|
|
DISTFILES= README ChangeLog $(CONFIGFILES)
|
|
DISTDIRS= $(SUBDIRS) $(SUBDIRSTOO) Ext-dummy
|
|
DIST= $(DISTFILES) $(DISTDIRS)
|
|
|
|
# Compilation flags for getbuildinfo.c only
|
|
CFLAGS= $(OPT) -I. $(DEFS)
|
|
|
|
LIBRARY= libpython$(VERSION).a
|
|
|
|
# Default target
|
|
all: $(LIBRARY) python sharedmods
|
|
|
|
# Build the interpreter
|
|
python: $(LIBRARY) buildno
|
|
expr `cat buildno` + 1 >buildno1
|
|
mv -f buildno1 buildno
|
|
$(CC) -c $(CFLAGS) -DBUILD=`cat buildno` \
|
|
$(srcdir)/Modules/getbuildinfo.c
|
|
$(AR) cr $(LIBRARY) getbuildinfo.o
|
|
$(RANLIB) $(LIBRARY)
|
|
cd Modules; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
|
|
prefix="$(prefix)" exec_prefix="$(exec_prefix)" \
|
|
LIBRARY=../$(LIBRARY) link
|
|
|
|
buildno:
|
|
echo 0 >buildno
|
|
|
|
# Build the shared modules
|
|
sharedmods: python
|
|
cd Modules; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
|
|
prefix="$(prefix)" exec_prefix="$(exec_prefix)" \
|
|
sharedmods
|
|
|
|
# Build the library
|
|
$(LIBRARY): $(SUBDIRS)
|
|
if test ! -f $(LIBRARY); \
|
|
then for i in $(SUBDIRS); do rm -f $$i/add2lib; done; true; \
|
|
else true; fi
|
|
for i in $(SUBDIRS); do \
|
|
(cd $$i; $(MAKE) VERSION="$(VERSION)" add2lib); done
|
|
|
|
$(SUBDIRS): Makefiles
|
|
|
|
Parser:
|
|
cd Parser ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
|
|
prefix="$(prefix)" exec_prefix="$(exec_prefix)" all
|
|
|
|
Python:
|
|
cd Python ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
|
|
prefix="$(prefix)" exec_prefix="$(exec_prefix)" all
|
|
|
|
Objects:
|
|
cd Objects ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
|
|
prefix="$(prefix)" exec_prefix="$(exec_prefix)" all
|
|
|
|
Modules: Parser Python Objects
|
|
cd Modules ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \
|
|
prefix="$(prefix)" exec_prefix="$(exec_prefix)" all
|
|
|
|
# Test the interpreter (twice, once without .pyc files, once with)
|
|
TESTOPTS=
|
|
TESTPROG= $(srcdir)/Lib/test/regrtest.py
|
|
TESTPYTHON= ./python
|
|
test: python
|
|
-rm -f $(srcdir)/Lib/test/*.pyc
|
|
-PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
|
|
PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
|
|
|
|
# Install everything
|
|
install: altinstall bininstall maninstall
|
|
|
|
# Install almost everything without disturbing previous versions
|
|
altinstall: altbininstall libinstall inclinstall libainstall sharedinstall
|
|
|
|
# Install the interpreter (by creating a hard link to python$(VERSION))
|
|
bininstall: altbininstall
|
|
-if test -f $(BINDIR)/python; \
|
|
then rm -f $(BINDIR)/python; \
|
|
else true; \
|
|
fi
|
|
(cd $(BINDIR); ln python$(VERSION) python)
|
|
|
|
# Install the interpreter with $(VERSION) affixed
|
|
# This goes into $(exec_prefix)
|
|
altbininstall: python
|
|
@for i in $(BINDIR); \
|
|
do \
|
|
if test ! -d $$i; then \
|
|
echo "Creating directory $$i"; \
|
|
mkdir $$i; \
|
|
chmod 755 $$i; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
$(INSTALL_PROGRAM) python $(BINDIR)/python$(VERSION)
|
|
|
|
# Install the manual page
|
|
maninstall:
|
|
@for i in $(MANDIR) $(MANDIR)/man1; \
|
|
do \
|
|
if test ! -d $$i; then \
|
|
echo "Creating directory $$i"; \
|
|
mkdir $$i; \
|
|
chmod 755 $$i; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
$(INSTALL_DATA) $(srcdir)/Misc/python.man \
|
|
$(MANDIR)/man1/python.1
|
|
|
|
# Install the library
|
|
PLATDIR= plat-$(MACHDEP)
|
|
MACHDEPS= $(PLATDIR)
|
|
LIBSUBDIRS= lib-stdwin lib-tk test test/output $(MACHDEPS)
|
|
libinstall: python $(srcdir)/Lib/$(PLATDIR)
|
|
@for i in $(SCRIPTDIR) $(LIBDEST); \
|
|
do \
|
|
if test ! -d $$i; then \
|
|
echo "Creating directory $$i"; \
|
|
mkdir $$i; \
|
|
chmod 755 $$i; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
@for d in $(LIBSUBDIRS); \
|
|
do \
|
|
a=$(srcdir)/Lib/$$d; \
|
|
if test ! -d $$a; then continue; else true; fi; \
|
|
b=$(LIBDEST)/$$d; \
|
|
if test ! -d $$b; then \
|
|
echo "Creating directory $$b"; \
|
|
mkdir $$b; \
|
|
chmod 755 $$b; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
@for i in $(srcdir)/Lib/*.py $(srcdir)/Lib/*.doc; \
|
|
do \
|
|
if test -x $$i; then \
|
|
$(INSTALL_PROGRAM) $$i $(LIBDEST); \
|
|
echo $(INSTALL_PROGRAM) $$i $(LIBDEST); \
|
|
else \
|
|
$(INSTALL_DATA) $$i $(LIBDEST); \
|
|
echo $(INSTALL_DATA) $$i $(LIBDEST); \
|
|
fi; \
|
|
done
|
|
@for d in $(LIBSUBDIRS); \
|
|
do \
|
|
a=$(srcdir)/Lib/$$d; \
|
|
if test ! -d $$a; then continue; else true; fi; \
|
|
b=$(LIBDEST)/$$d; \
|
|
for i in $$a/*; \
|
|
do \
|
|
case $$i in \
|
|
*CVS) ;; \
|
|
*.pyc) ;; \
|
|
*~) ;; \
|
|
*) \
|
|
if test -x $$i; then \
|
|
echo $(INSTALL_PROGRAM) $$i $$b; \
|
|
$(INSTALL_PROGRAM) $$i $$b; \
|
|
else \
|
|
echo $(INSTALL_DATA) $$i $$b; \
|
|
$(INSTALL_DATA) $$i $$b; \
|
|
fi;; \
|
|
esac; \
|
|
done; \
|
|
done
|
|
PYTHONPATH=$(LIBDEST) \
|
|
./python $(LIBDEST)/compileall.py $(LIBDEST)
|
|
PYTHONPATH=$(LIBDEST) \
|
|
./python -O $(LIBDEST)/compileall.py $(LIBDEST)
|
|
|
|
# Create the PLATDIR source directory, if one wasn't distributed..
|
|
$(srcdir)/Lib/$(PLATDIR):
|
|
mkdir $(srcdir)/Lib/$(PLATDIR)
|
|
cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen
|
|
export PATH; PATH="`pwd`:$$PATH"; \
|
|
export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \
|
|
cd $(srcdir)/Lib/$(PLATDIR); ./regen
|
|
|
|
# Install the include files
|
|
INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY)
|
|
inclinstall:
|
|
@for i in $(INCLDIRSTOMAKE); \
|
|
do \
|
|
if test ! -d $$i; then \
|
|
echo "Creating directory $$i"; \
|
|
mkdir $$i; \
|
|
chmod 755 $$i; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
@for i in $(srcdir)/Include/*.h; \
|
|
do \
|
|
echo $(INSTALL_DATA) $$i $(INCLUDEPY); \
|
|
$(INSTALL_DATA) $$i $(INCLUDEPY); \
|
|
done
|
|
$(INSTALL_DATA) config.h $(CONFINCLUDEPY)/config.h
|
|
|
|
# Install the library and miscellaneous stuff needed for extending/embedding
|
|
# This goes into $(exec_prefix)
|
|
LIBPL= $(LIBP)/config
|
|
libainstall: all
|
|
@for i in $(LIBDIR) $(LIBP) $(LIBPL); \
|
|
do \
|
|
if test ! -d $$i; then \
|
|
echo "Creating directory $$i"; \
|
|
mkdir $$i; \
|
|
chmod 755 $$i; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
$(INSTALL_DATA) $(LIBRARY) $(LIBPL)/$(LIBRARY)
|
|
$(RANLIB) $(LIBPL)/$(LIBRARY)
|
|
$(INSTALL_DATA) Modules/config.c $(LIBPL)/config.c
|
|
$(INSTALL_DATA) Modules/python.o $(LIBPL)/python.o
|
|
$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(LIBPL)/config.c.in
|
|
$(INSTALL_DATA) Modules/Makefile $(LIBPL)/Makefile
|
|
$(INSTALL_DATA) Modules/Setup $(LIBPL)/Setup
|
|
$(INSTALL_DATA) Modules/Setup.local $(LIBPL)/Setup.local
|
|
$(INSTALL_PROGRAM) $(srcdir)/Modules/makesetup $(LIBPL)/makesetup
|
|
$(INSTALL_PROGRAM) $(srcdir)/install-sh $(LIBPL)/install-sh
|
|
|
|
# Install the dynamically loadable modules
|
|
# This goes into $(exec_prefix)
|
|
sharedinstall:
|
|
cd Modules; $(MAKE) \
|
|
OPT="$(OPT)" \
|
|
VERSION="$(VERSION)" \
|
|
SO="$(SO)" \
|
|
LDSHARED="$(LDSHARED)" \
|
|
CCSHARED="$(CCSHARED)" \
|
|
LINKFORSHARED="$(LINKFORSHARED)" \
|
|
DESTSHARED="$(DESTSHARED)" \
|
|
prefix="$(prefix)" \
|
|
exec_prefix="$(exec_prefix)" \
|
|
sharedinstall
|
|
|
|
# Build the sub-Makefiles
|
|
Makefiles: config.status Modules/Makefile.pre
|
|
(cd Modules; $(MAKE) -f Makefile.pre Makefile)
|
|
@for i in . $(SUBDIRS); do \
|
|
(echo making Makefile in subdirectory $$i; cd $$i; \
|
|
$(MAKE) Makefile); \
|
|
done
|
|
|
|
# Build the intermediate Makefile in Modules
|
|
Modules/Makefile.pre: config.status
|
|
$(SHELL) config.status
|
|
|
|
# Build the toplevel Makefile
|
|
Makefile: Makefile.in config.status
|
|
CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) config.status
|
|
|
|
# Run the configure script. If config.status already exists,
|
|
# call it with the --recheck argument, which reruns configure with the
|
|
# same options as it was run last time; otherwise run the configure
|
|
# script with options taken from the $(WITH) variable
|
|
config.status: $(srcdir)/configure
|
|
if test -f config.status; \
|
|
then $(SHELL) config.status --recheck; \
|
|
$(SHELL) config.status; \
|
|
else $(SHELL) $(srcdir)/configure $(WITH); \
|
|
fi
|
|
|
|
.PRECIOUS: config.status python
|
|
|
|
# Rerun configure with the same options as it was run last time,
|
|
# provided the config.status script exists
|
|
recheck:
|
|
$(SHELL) config.status --recheck
|
|
$(SHELL) config.status
|
|
|
|
# Rebuild the configure script from configure.in; also rebuild config.h.in
|
|
autoconf:
|
|
(cd $(srcdir); autoconf)
|
|
(cd $(srcdir); autoheader)
|
|
|
|
# Create a tags file for vi
|
|
tags::
|
|
ctags -w -t Include/*.h
|
|
for i in $(SUBDIRS); do ctags -w -t -a $$i/*.[ch]; done
|
|
sort tags -o tags
|
|
|
|
# Create a tags file for GNU Emacs
|
|
TAGS::
|
|
etags Include/*.h
|
|
for i in $(SUBDIRS); do etags -a $$i/*.[ch]; done
|
|
|
|
# Add dependencies to sub-Makefiles
|
|
depend:
|
|
@for i in $(SUBDIRS); do \
|
|
(echo making depend in subdirectory $$i; cd $$i; \
|
|
$(MAKE) depend); \
|
|
done
|
|
|
|
# Sanitation targets -- clean leaves libraries, executables and tags
|
|
# files, which clobber removes those as well
|
|
|
|
localclean:
|
|
-rm -f core *~ [@,#]* *.old *.orig *.rej
|
|
|
|
clean: localclean
|
|
-for i in $(SUBDIRS); do \
|
|
(echo making clean in subdirectory $$i; cd $$i; \
|
|
if test -f Makefile; \
|
|
then $(MAKE) clean; \
|
|
else $(MAKE) -f Makefile.*in clean; \
|
|
fi); \
|
|
done
|
|
|
|
localclobber: localclean
|
|
-rm -f tags TAGS python $(LIBRARY) *.o
|
|
-rm -f config.log config.cache config.h
|
|
|
|
clobber: localclobber
|
|
-for i in $(SUBDIRS); do \
|
|
(echo clobbering subdirectory $$i; cd $$i; \
|
|
if test -f Makefile; \
|
|
then $(MAKE) clobber; \
|
|
else $(MAKE) -f $(srcdir)/Makefile.in clobber; \
|
|
fi); \
|
|
done
|
|
|
|
# Make things extra clean, before making a distribution:
|
|
# remove all generated files, even Makefile[.pre]
|
|
distclean: clobber
|
|
-$(MAKE) -f $(srcdir)/Makefile.in \
|
|
SUBDIRS="$(SUBDIRSTOO)" clobber
|
|
-rm -f config.status config.log config.cache config.h Makefile
|
|
-rm -f buildno
|
|
-rm -f Modules/Makefile
|
|
-for i in $(SUBDIRS) $(SUBDIRSTOO); do \
|
|
for f in $$i/*.in; do \
|
|
f=`basename "$$f" .in`; \
|
|
if test "$$f" != "*"; then \
|
|
echo rm -f "$$i/$$f"; \
|
|
rm -f "$$i/$$f"; \
|
|
fi; \
|
|
done; \
|
|
done
|
|
|
|
# Check for smelly exported symbols (not starting with Py/_Py)
|
|
smelly: all
|
|
for i in $(SUBDIRS); do \
|
|
echo --- $$i ---; \
|
|
nm -p $$i/lib$$i.a | \
|
|
sed -n "/ [TDB] /s/.* //p" | grep -v "^_*Py" | sort -u; \
|
|
done
|
|
|
|
# Find files with funny names
|
|
funny:
|
|
find $(DISTDIRS) -type d \
|
|
-o -name '*.[chs]' \
|
|
-o -name '*.py' \
|
|
-o -name '*.doc' \
|
|
-o -name '*.sty' \
|
|
-o -name '*.bib' \
|
|
-o -name '*.dat' \
|
|
-o -name '*.el' \
|
|
-o -name '*.fd' \
|
|
-o -name '*.in' \
|
|
-o -name '*.tex' \
|
|
-o -name '*,[vpt]' \
|
|
-o -name 'Setup' \
|
|
-o -name 'Setup.*' \
|
|
-o -name README \
|
|
-o -name Makefile \
|
|
-o -name ChangeLog \
|
|
-o -name Repository \
|
|
-o -name Root \
|
|
-o -name Entries \
|
|
-o -name Tag \
|
|
-o -name tags \
|
|
-o -name TAGS \
|
|
-o -name .cvsignore \
|
|
-o -name MANIFEST \
|
|
-o -print
|