blob: 7bbf57b9de07677fcbdbd7fb95ebd78868ce6977 [file] [log] [blame]
########################################################################
# Copyright 1991, 1992, 1993, 1994 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 not be used in advertising or publicity pertaining to
# distribution of the software without specific, written prior permission.
#
# STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM 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.
########################################################################
# Toplevel Makefile for Python
# Note -- if recursive makes fail, try adding MAKE=make
# Substitutions by configure
srcdir= @srcdir@
VPATH= @srcdir@
INSTALL= @INSTALL@
RANLIB= @RANLIB@
# Machine-dependent subdirectories
MACHDEP= @MACHDEP@
# Install prefixes are treated specially by the configure script:
# it only changes these lines if it has received a --prefix=... or
# --exec-prefix=... command line option. Note that $(prefix) is
# also used when compiling config.c in Modules to set the default
# module search path, so if you change it later be sure to change it
# there too and rebuild.
# Install prefix for architecture-independent files
prefix= /usr/local
# Install prefix for architecture-dependent files
exec_prefix= $(prefix)
# Expanded directories
MANDIR=$(prefix)/man
BINDIR=$(exec_prefix)/bin
LIBDIR=$(exec_prefix)/lib
INCLUDEDIR=$(prefix)/include
SCRIPTDIR=$(prefix)/lib
# Symbols used for using shared libraries
SO= @SO@
LDSHARED= @LDSHARED@
CCSHARED= @CCSHARED@
LINKFORSHARED= @LINKFORSHARED@
DESTSHARED= $(SCRIPTDIR)/python/$(MACHDEP)
# Programs
SHELL= /bin/sh
# --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 readline 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)
# Default target
all: python
# Build the interpreter
python: Makefiles
for i in $(SUBDIRS); do \
(echo $$i; cd $$i; $(MAKE) OPT="$(OPT)" all); \
done
# Test the interpreter (twice, once without .pyc files, once with)
TESTPATH= $(srcdir)/Lib:$(srcdir)/Lib/test
test: python
-rm -f $(srcdir)/Lib/test/*.pyc
PYTHONPATH=$(TESTPATH) ./python -c 'import autotest'
PYTHONPATH=$(TESTPATH) ./python -c 'import autotest'
# Install the interpreter
install: python
$(INSTALL) python $(BINDIR)/python
@echo If this is your first time, consider make libinstall...
# Install the library.
# If your system does not support "cp -r", try "copy -r" or perhaps
# something like find Lib -print | cpio -pacvdmu $(LIBDEST)
LIBDEST= $(SCRIPTDIR)/python
libinstall:
-if test ! -d $(LIBDEST); \
then mkdir $(LIBDEST); \
fi
cp -r $(srcdir)/Lib/* $(LIBDEST)
PYTHONPATH=$(LIBDEST) \
./python $(LIBDEST)/compileall.py $(LIBDEST)
cd Modules; make sharedinstall
# install the manual page
maninstall:
$(INSTALL) $(srcdir)/Misc/python.man \
$(MANDIR)/man1/python.1
# install the include files
INCLUDEPY= $(INCLUDEDIR)/Py
inclinstall:
-if test ! -d $(INCLUDEPY); \
then mkdir $(INCLUDEPY); \
fi
cp $(srcdir)/Include/*.h $(INCLUDEPY)
# install the lib*.a files and miscellaneous stuff needed by extensions
LIBP= $(LIBDIR)/python
LIBPL= $(LIBP)/lib
libainstall: all
-if test ! -d $(LIBP); \
then mkdir $(LIBP); \
fi
-if test ! -d $(LIBPL); \
then mkdir $(LIBPL); \
fi
for i in $(SUBDIRS); do \
echo $$i; $(INSTALL) $$i/lib$$i.a $(LIBPL)/lib$$i.a; \
$(RANLIB) $(LIBPL)/lib$$i.a; \
done
$(INSTALL) Modules/config.c $(LIBPL)/config.c
$(INSTALL) $(srcdir)/Modules/config.c.in $(LIBPL)/config.c.in
$(INSTALL) Modules/Makefile $(LIBPL)/Makefile
$(INSTALL) Modules/Setup $(LIBPL)/Setup
$(INSTALL) $(srcdir)/Modules/makesetup $(LIBPL)/makesetup
$(INSTALL) config.h $(LIBPL)/config.h
$(INSTALL) $(srcdir)/Python/frozenmain.c $(LIBPL)/frozenmain.c
# install the dynamically loadable modules
sharedinstall:
cd Modules; $(MAKE) \
OPT="$(OPT)" \
SO="$(SO)" \
LDSHARED="$(LDSHARED)" \
CCSHARED="$(CCSHARED)" \
LINKFORSHARED="$(LINKFORSHARED)" \
DESTSHARED="$(DESTSHARED)" \
sharedinstall
# Build the sub-Makefiles
Makefiles: config.status
(cd Modules; $(MAKE) -f Makefile.pre Makefile)
for i in . $(SUBDIRS); do \
(echo $$i; cd $$i; $(MAKE) Makefile); \
done
# 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; \
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
# Rebuild the configure script from configure.in; also rebuild config.h.in
autoconf:
(cd $(srcdir); autoconf; 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 $$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 $$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
clobber: localclobber
-for i in $(SUBDIRS); do \
(echo $$i; cd $$i; \
if test -f Makefile; \
then $(MAKE) clobber; \
else $(MAKE) -f Makefile.in clobber; \
fi); \
done
# Make things extra clean, before making a distribution
distclean: clobber
-$(MAKE) SUBDIRS="$(SUBDIRSTOO)" clobber
-rm -f config.status config.h 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
# Find files with funny names
find:
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 RCS \
-o -name Repository \
-o -name Entries \
-o -name Tag \
-o -name tags \
-o -name TAGS \
-o -name .cvsignore \
-o -name MANIFEST \
-o -print
# Build a distribution tar file (run make distclean first)
# (This leaves the RCS and CVS directories in :-( )
tar:
tar cf - $(DIST) | gzip --best >dist.tar.gz