# The file Setup is used by the makesetup script to construct the files
# Makefile and config.c, from Makefile.pre and config.c.in,
# respectively.  The file Setup itself is initially copied from
# Setup.in; once it exists it will not be overwritten, so you can edit
# Setup to your heart's content.  Note that Makefile.pre is created
# from Makefile.pre.in by the toplevel configure script.

# (VPATH notes: Setup and Makefile.pre are in the build directory, as
# are Makefile and config.c; the *.in files are in the source
# directory.)

# Each line in this file describes one or more optional modules.
# Comment out lines to suppress modules.
# Lines have the following structure:
#
# <module> ... [<sourcefile> ...] [<cpparg> ...] [<library> ...]
#
# <sourcefile> is anything ending in .c (.C, .cc, .c++ are C++ files)
# <cpparg> is anything starting with -I, -D, -U or -C
# <library> is anything ending in .a or beginning with -l or -L
# <module> is anything else but should be a valid Python
# identifier (letters, digits, underscores, beginning with non-digit)
#
# Lines can also have the form
#
# <name> = <value>
#
# which defines a Make variable definition inserted into Makefile.in
#
# Finally, if a line has the literal form
#
# *noconfig*
#
# (that is including the '*' and '*' !) then the following modules will
# not be included in the config.c file, nor in the list of objects to be
# added to the library archive, and their linker options won't be added 
# to the linker options, but rules to create their .o files and their
# shared libraries will still be added to the Makefile, and their
# names will be collected in the Make variable SHAREDMODS.  This is
# used to build modules as shared libraries.  (They must be installed
# using "make sharedinstall".)

# NOTE: As a standard policy, as many modules as can be supported by a
# platform should be present.  The distribution comes with all modules
# enabled that are supported by most platforms and don't require you
# to ftp sources from elsewhere.


# Some special rules to define PYTHONPATH.
# Edit the definitions below to indicate which options you are using.
# Don't add any whitespace or comments!

# Don't edit this (usually)
DESTLIB=$(prefix)/lib/python

# Site specific path insertions -- should begin with : if non-empty
SITEPATH=

# Standard path -- don't edit
DESTPATH=:$(DESTLIB)

# Standard enabled (tests are always available)
TESTPATH=:$(DESTLIB)/test

# Path for machine- or system-dependent modules (and shared libraries)
MACHDEPPATH=:$(DESTLIB)/$(MACHDEP)

COREPYTHONPATH=.$(SITEPATH)$(DESTPATH)$(TESTPATH)$(MACHDEPPATH)$(STDWINPATH)$(TKPATH)
PYTHONPATH=$(COREPYTHONPATH)


# The modules listed here can't be built as shared libraries for
# various reasons; therefore they are listed here instead of in the
# normal order.

# Some modules that are normally always on:

posix posixmodule.c		# posix (UNIX) system calls
signal signalmodule.c		# signal(2)

# The SGI specific GL module:

#gl glmodule.c -lgl -lX11	# Graphics Library -- SGI only

# Thread module -- works on selected systems only, e.g. SGI IRIX and
# on SunOS 5.x (SOLARIS) only.
# Note that you must have configured (and built!) Python with the
# --with-thread option passed to the configure script for this to work:

#thread threadmodule.c

# Uncommenting the following line tells makesetup that all following
# modules are to be built as shared libraries (see above for more
# detail):

#*noconfig*


# Modules that should always be present (non UNIX dependent):

array arraymodule.c	# array objects
cmath cmathmodule.c	# complex math library functions
math mathmodule.c -lm	# math library functions, e.g. sin()
regex regexmodule.c regexpr.c	# Regular expressions, GNU Emacs style
strop stropmodule.c	# fast string operations implemented in C
struct structmodule.c	# binary structure packing/unpacking
time timemodule.c	# time operations and variables


# Modules with some UNIX dependencies -- on by default:
# (If you have a really backward UNIX, select and socket may not be
# supported...)

fcntl fcntlmodule.c	# fcntl(2) and ioctl(2)
pwd pwdmodule.c		# pwd(3) 
grp grpmodule.c		# grp(3)
crypt cryptmodule.c # -lcrypt	# crypt(3); needs -lcrypt on some systems
select selectmodule.c	# select(2); not on ancient System V
socket socketmodule.c	# socket(2); not on ancient System V


# Some more UNIX dependent modules -- off by default, since these
# are not supported by all UNIX systems:

#dbm dbmmodule.c 	# dbm(3) may require -lndbm or similar
#nis nismodule.c 	# Sun yellow pages -- not everywhere
#termios termios.c	# Steen Lumholt's termios module


# Multimedia modules -- on by default.
# These represent audio samples or images as strings:

audioop audioop.c	# Operations on audio samples
imageop imageop.c	# Operations on images
rgbimg rgbimgmodule.c   # Read SGI RGB image files (but coded portably)


# The stdwin module provides a simple, portable (between X11 and Mac)
# windowing interface.  You need to ftp the STDWIN library, e.g. from
# ftp://ftp.cwi.nl/pub/stdwin.  (If you get it elsewhere, be sure to
# get version 1.0 or higher!)  The STDWIN variable must point to the
# STDWIN toplevel directory.

# Uncomment and edit as needed:
#STDWIN=/ufs/guido/src/stdwin

# Uncomment these lines:
#STDWINPATH=:$(DESTLIB)/stdwin
#LIBTEXTEDIT=$(STDWIN)/$(MACHDEP)/Packs/textedit/libtextedit.a
#LIBX11STDWIN=$(STDWIN)/$(MACHDEP)/Ports/x11/libstdwin.a
#stdwin stdwinmodule.c -I$(STDWIN)/H $(LIBTEXTEDIT) $(LIBX11STDWIN) -lX11

# Use this instead of the last two lines above for alphanumeric stdwin:
#LIBALFASTDWIN=$(STDWIN)/$(MACHDEP)/Ports/alfa/libstdwin.a
#stdwin stdwinmodule.c -I$(STDWIN)/H $(LIBTEXTEDIT) $(LIBALFASTDWIN) -ltermcap


# The md5 module implements the RSA Data Security, Inc. MD5
# Message-Digest Algorithm, described in RFC 1321.  The necessary files
# md5c.c and md5.h are included here.

md5 md5module.c md5c.c


# The mpz module interfaces to the GNU Multiple Precision library.
# You need to ftp the GNU MP library.  
# The GMP variable must point to the GMP source directory.
# This was originally written and tested against GMP 1.2.  I have
# compiled it against GMP 1.3.2 (the latest I believe) and it seems to
# work OK, but I haven't tested it thoroughly (lacking knowledge about
# it).

# A compatible MP library unencombered by the GPL also exists.  It was
# posted to comp.sources.misc in volume 40 and is widely available from
# FTP archive sites. One URL for it is:
# ftp://gatekeeper.dec.com/.b/usenet/comp.sources.misc/volume40/fgmp/part01.Z

#GMP=/ufs/guido/src/gmp
#mpz mpzmodule.c -I$(GMP) $(GMP)/libgmp.a


# SGI IRIX specific modules -- off by default.

# These module work on any SGI machine:

# *** gl must be enabled higher up in this file ***
#fm fmmodule.c -lfm -lgl		# Font Manager
#sgi sgimodule.c			# sgi.nap() and a few more

# This module requires the header file
# /usr/people/4Dgifts/iristools/include/izoom.h:

#imgfile imgfile.c -limage -lgutil -lm	# Image Processing Utilities


# These modules require the Multimedia Development Option (I think):

#al almodule.c -laudio			# Audio Library
#cd cdmodule.c -lcdaudio -lds -lmediad	# CD Audio Library
#cl clmodule.c -lcl -lawareaudio	# Compression Library
#sv svmodule.c yuvconvert.c -lsvideo -lXext -lX11	# Starter Video


# The FORMS library, by Mark Overmars, implements user interface
# components such as dialogs and buttons using SGI's GL and FM
# libraries.  You must ftp the FORMS library separately from
# ftp://ftp.cs.ruu.nl/pub/SGI/FORMS.  It was tested with FORMS 2.2a.
# The FORMS variable must point to the FORMS subdirectory of the forms
# toplevel directory:

#FORMS=/ufs/guido/src/forms/FORMS
#fl flmodule.c -I$(FORMS) $(FORMS)/libforms.a -lfm -lgl


# SunOS specific modules -- off by default:

#sunaudiodev sunaudiodev.c


# George Neville-Neil's timing module:

#timing timingmodule.c


# Steen Lumholt's tkinter module.
#
# For use with plain Tk, use the first line.
#
# For use with extended Tk (i.e. if you have added extra widgets to
# the Tk library, such as the common "studButton" and "triButton"
# extensions), edit tkappinit.c, add appropriate -DWITH_... and
# libraries/objects to the second line, and use that.
#
# In all cases also enable the last line (TKPATH).
#
# See the section "The Tk interface" in ../README for more info.

# *** Use ONE of the following two lines, see previous comments ***
#_tkinter _tkinter.c -I/usr/local/include -L/usr/local/lib -ltk4.0 -ltcl7.4 -lX11
#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/usr/local/include -L/usr/local/lib -ltk -ltcl -lX11

# *** ALWAYS use this line as well ***
#TKPATH=:$(DESTLIB)/tkinter


# Lance Ellinghaus's modules:

rotor rotormodule.c		# enigma-inspired encryption
#syslog syslogmodule.c		# syslog daemon interface


# Lance's curses module.  This requires the System V version of
# curses, sometimes known as ncurses (e.g. on Linux, link with
# -lncurses instead of -lcurses; on SunOS 4.1.3, insert -I/usr/5include
# -L/usr/5lib before -lcurses).

#curses cursesmodule.c -lcurses -ltermcap



# Tommy Burnette's 'new' module (creates new empty objects of certain kinds):

#new newmodule.c


# John Redford's sybase module (requires sybase):
# (Unfortunately this code is orphaned.  Read the source for documentation.)

#sybase sybasemodule.c


# Generic (SunOS / SVR4) dynamic loading module.
# This is not needed for dynamic loading of Python modules --
# it is a highly experimental and dangerous device for calling
# *arbitrary* C functions in *arbitrary* shared libraries:

#dl dlmodule.c


# Anthony Baxter's gdbm module (derived from Jack's dbm module)
# GNU dbm(3) will require -lgdbm:

#gdbm gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm


# Berkeley DB interface.
#
# This requires the Berkeley DB code, see
# ftp://ftp.cs.berkeley.edu/pub/4bsd/db.1.85.tar.gz
#
# Edit the variables DB and DBPORT to point to the db top directory
# and the subdirectory of PORT where you built it.

#DB=/depot/sundry/src/db.1.85/
#DBPORT=$(DB)/PORT/sunos.5.2
#bsddb bsddbmodule.o -I$(DB)/include -I$(DBPORT) $(DBPORT)/libdb.a



# Andy Bensky's "environment" module (contains putenv())
#environment environment.c

# David Wayne Williams' soundex module
#soundex soundex.c

# Objective-C (incomplete!!!)
#objc.c

# Helper module for various ascii-encoders
binascii binascii.c

# Fred Drake's interface to the Python parser.
# (Not enabled by default because it is big and doesn't compile with
# cc on SunOS 4.1.3)
#parser parsermodule.c


# Example -- included for reference only:
# xx xxmodule.c
