# 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.  One possibility is to overwrite it
# with a copy of Setup.sgi or Setup.sunos[45] before you start editing.
# 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; Setup.in and config.c.in 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

# 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.  To make this easier for SGI
# platforms, you can copy Setup.sgi to Setup (or edit Makefile.in.in
# to use Setup.sgi instead of Setup).


# 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

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

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

COREPYTHONPATH=.:$(DESTLIB)$(TESTPATH)$(MACHDEPPATH)$(STDWINPATH)$(TKPATH)
PYTHONPATH=$(COREPYTHONPATH)


# If you want to build most modules as shared libraries, here are
# a couple of lines to enable.  The modules listed here can't be
# built as shared libraries for various reasons.
# IF YOU ENABLE THEM HERE, DISABLE THEM LATER IN THE Setup FILE!

#posix posixmodule.c		# posix (UNIX) system calls
#signal signalmodule.c		# signal(2)
#gl glmodule.c -lgl -lX11	# Graphics Library -- SGI only
#thread threadmodule.c		# threads -- see below

# 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)
# NB when using shared libraries, don't make posix a shared library!

array arraymodule.c	# array objects
math mathmodule.c -lm	# math library functions, e.g. sin()
parser parsermodule.c	# raw interface to the Python parser
posix posixmodule.c	# posix (UNIX) system calls
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...)
# NB when using shared libraries, don't make signal a shared library!

fcntl fcntlmodule.c	# fcntl(2) and ioctl(2)
pwd pwdmodule.c		# pwd(3) 
grp grpmodule.c		# grp(3)
crypt cryptmodule.c	# crypt(3)
select selectmodule.c	# select(2); not on ancient System V
socket socketmodule.c	# socket(2); not on ancient System V
signal signalmodule.c	# signal(2)


# 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.  The STDWIN variable must point to the
# STDWIN toplevel directory.  The ARCH variable must be set to the
# architecture identifier used to build STDWIN.  NB if you combine this
# with the gl module on an SGI IRIX 4 machine, you should replace
# "-lX11" with "-lX11_s".

#STDWIN=/ufs/guido/src/stdwin
#ARCH=???
#stdwin stdwinmodule.c -I$(STDWIN)/H $(STDWIN)/Build/$(ARCH)/x11/lib/lib.a -lX11
#STDWINPATH=:$(DESTLIB)/stdwin

# For STDWIN 0.9.9 or higher, it's a bit different:

#STDWIN=/ufs/guido/src/stdwin
#LIBTEXTEDIT=$(STDWIN)/$(MACHDEP)/Packs/textedit/libtextedit.a
#LIBX11STDWIN=$(STDWIN)/$(MACHDEP)/Ports/x11/libstdwin.a
#LIBALFASTDWIN=$(STDWIN)/$(MACHDEP)/Ports/alfa/libstdwin.a
#stdwin stdwinmodule.c -I$(STDWIN)/H $(LIBTEXTEDIT) $(LIBX11STDWIN) -lX11

# Or use the following for the alphanumeric version:

#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.
# NB when using shared libraries, don't make gl a shared library!

#fm fmmodule.c -lfm -lgl		# Font Manager
#gl glmodule.c -lgl -lX11		# Graphics Library
#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).
# Note that -lmediad and -lawareaudio are only present on IRIX 5 and
# should be taken out for IRIX 4.

#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


# Thread module -- works on 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.
# NB when using shared libraries, don't make thread a shared library!

#thread threadmodule.c


# GNN'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).

# *** Use ONE of the following two lines, see previous comments ***
#tkinter tkintermodule.c -I/usr/local/include -L/usr/local/lib -ltk -ltcl -lX11
#tkinter tkintermodule.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 Ellinghouse's modules

rotor rotormodule.c		# enigma-inspired encryption
#syslog syslogmodule.c		# syslog daemon interface
#curses cursesmodule.c -lcurses -ltermcap	# guess what?



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

#new newmodule.c


# John Redford's sybase module

#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


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