# NOTE: Makefile.in is converted into Makefile by the configure script
# in the parent directory.  Once configure has run, you can recreate
# the Makefile by running just config.status.

# === Variables set by config.stat ===

VERSION=	@VERSION@

srcdir=		@srcdir@
VPATH=		@srcdir@

CC=		@CC@
RANLIB=		@RANLIB@
AR=		@AR@

DEFS=		@DEFS@
LIBOBJS=	@LIBOBJS@
LIBS=		@LIBS@
DLINCLDIR=	@DLINCLDIR@

# Machine-dependent subdirectories
MACHDEP=	@MACHDEP@


# === Other things that are customizable but not by configure ===

INCLDIR=	$(srcdir)/../Include
OPT=		@OPT@
CFLAGS=		$(OPT) -I$(INCLDIR) -I.. $(DEFS)

MKDEP=		mkdep
SHELL=		/bin/sh


# === Fixed definitions ===

AROBJS=		\
		bltinmodule.o \
		ceval.o compile.o \
		errors.o \
		frozen.o frozenmain.o \
		getargs.o getcompiler.o getcopyright.o getmtime.o \
		getplatform.o getversion.o graminit.o \
		import.o importdl.o \
		marshal.o modsupport.o mystrtoul.o \
		pyfpe.o pystate.o pythonrun.o \
		structmember.o sysmodule.o \
		traceback.o \
		$(LIBOBJS)
OBJS=		$(AROBJS) sigcheck.o

LIBRARY=	../libpython$(VERSION).a


# === Rules ===

all:		$(OBJS)

# This target is used by the master Makefile to add the objects to the library
add2lib:	$(OBJS)
		$(AR) cr $(LIBRARY) $(AROBJS)
		if test ! -f ../Modules/hassignal; \
		then echo adding sigcheck.o; $(AR) r $(LIBRARY) sigcheck.o; \
		else echo leaving sigcheck.o out; fi
		touch add2lib

clean:
		-rm -f *.o core *~ [@,#]* *.old *.orig *.rej add2lib

clobber:	clean
		-rm -f *.a tags TAGS

Makefile:	$(srcdir)/Makefile.in ../config.status
		(cd ..; CONFIG_FILES=Python/Makefile CONFIG_HEADERS= \
		$(SHELL) config.status)

getplatform.o:	getplatform.c Makefile
		$(CC) -c $(CFLAGS) -DPLATFORM='"$(MACHDEP)"' \
		      $(srcdir)/getplatform.c

importdl.o:	importdl.c
		$(CC) -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c

depend:
		$(MKDEP) $(CFLAGS) `echo $(OBJS) | tr ' ' '\012' | \
					sed 's|\(.*\)\.o|$(srcdir)/\1.c|'`

.PRECIOUS:	Makefile

bltinmodule.o: bltinmodule.c
ceval.o: ceval.c
compile.o: compile.c
dup2.o: dup2.c
errors.o: errors.c
fmod.o: fmod.c
frozen.o: frozen.c
frozenmain.o: frozenmain.c
getargs.o: getargs.c
getcompiler.o: getcompiler.c
getcopyright.o: getcopyright.c
getcwd.o: getcwd.c
getmtime.o: getmtime.c
getopt.o: getopt.c
getplatform.o: getplatform.c
getversion.o: getversion.c ../Include/patchlevel.h
graminit.o: graminit.c
import.o: import.c
importdl.o: importdl.c
marshal.o: marshal.c
memmove.o: memmove.c
modsupport.o: modsupport.c
mystrtoul.o: mystrtoul.c
pyfpe.o: pyfpe.c
pystate.o: pystate.c
pythonrun.o: pythonrun.c
sigcheck.o: sigcheck.c
strerror.o: strerror.c
strtod.o: strtod.c
structmember.o: structmember.c
sysmodule.o: sysmodule.c
thread.o: thread.c
traceback.o: traceback.c
version.o: version.c

# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
