######################################################################## # 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 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. ######################################################################## # 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 defaults to -O), prefix and # exec_prefix (the installation paths). # # If recursive makes fail, try invoking make as "make MAKE=make". # # See also the section "Build instructions" in the README file. # Substitutions by configure srcdir= @srcdir@ VPATH= @srcdir@ RANLIB= @RANLIB@ # 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 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) # 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} 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 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)" \ prefix="$(prefix)" \ exec_prefix="$(exec_prefix)" \ all); \ done # Test the interpreter (twice, once without .pyc files, once with) TESTPATH= $(srcdir)/Lib:$(srcdir)/Lib/test:./Modules test: python -rm -f $(srcdir)/Lib/test/*.pyc PYTHONPATH=$(TESTPATH) ./python -c 'import autotest' PYTHONPATH=$(TESTPATH) ./python -c 'import autotest' # Install everything install: bininstall libinstall maninstall inclinstall \ libainstall sharedinstall # Install the interpreter bininstall: 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 # 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: python for i in $(SCRIPTDIR) $(LIBDEST); \ do \ if test ! -d $$i; then \ echo "Creating directory $$i"; \ mkdir $$i; \ chmod 755 $$i; \ else true; \ fi; \ done cp -r $(srcdir)/Lib/* $(LIBDEST) PYTHONPATH=$(LIBDEST) \ ./python $(LIBDEST)/compileall.py $(LIBDEST) $(MAKE) \ OPT="$(OPT)" \ SO="$(SO)" \ LDSHARED="$(LDSHARED)" \ CCSHARED="$(CCSHARED)" \ LINKFORSHARED="$(LINKFORSHARED)" \ DESTSHARED="$(DESTSHARED)" \ sharedinstall # 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 include files INCLUDEPY= $(INCLUDEDIR)/Py inclinstall: for i in $(INCLUDEDIR) $(INCLUDEPY); \ do \ if test ! -d $$i; then \ echo "Creating directory $$i"; \ mkdir $$i; \ chmod 755 $$i; \ else true; \ fi; \ done $(INSTALL_DATA) $(srcdir)/Include/*.h $(INCLUDEPY) # Install the lib*.a files and miscellaneous stuff needed by extensions LIBP= $(LIBDIR)/python LIBPL= $(LIBP)/lib 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 for i in $(SUBDIRS); do \ echo $$i; \ $(INSTALL_DATA) $$i/lib$$i.a $(LIBPL)/lib$$i.a; \ $(RANLIB) $(LIBPL)/lib$$i.a; \ done $(INSTALL_DATA) Modules/config.c $(LIBPL)/config.c $(INSTALL_DATA) $(srcdir)/Modules/getpath.c $(LIBPL)/getpath.c $(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) $(srcdir)/Modules/makesetup $(LIBPL)/makesetup $(INSTALL_DATA) config.h $(LIBPL)/config.h $(INSTALL_DATA) $(srcdir)/Python/frozenmain.c $(LIBPL)/frozenmain.c $(INSTALL_DATA) Modules/main.o $(LIBPL)/main.o # 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 Modules/Makefile.pre (cd Modules; $(MAKE) -f Makefile.pre Makefile) for i in . $(SUBDIRS); do \ (echo $$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; 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 -rm -f config.log config.cache config.h Makefile clobber: localclobber -for i in $(SUBDIRS); do \ (echo $$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 distclean: clobber -$(MAKE) -f $(srcdir)/Makefile.in \ SUBDIRS="$(SUBDIRSTOO)" clobber -rm -f config.status config.log config.cache config.h Makefile -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 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