# Makefile for Independent JPEG Group's software

# This makefile is suitable for Amiga systems using Manx Aztec C ver 5.x.
# Thanks to D.J. James for this version.

# See README and edit jconfig.h before saying "make" !!

CC= cc

# You may need to adjust these cc options:
CFLAGS= -MC -MD -DTWO_FILE_COMMANDLINE
LDFLAGS=
LDLIBS= -lml -lcl

# miscellaneous OS-dependent stuff
LN= ln		# linker
RM= delete quiet # file deletion command
AR= lb		# library (.lib) file creation command


# source files
INCLUDES= jinclude.h jconfig.h jpegdata.h 
SOURCES= jbsmooth.c jcarith.c jccolor.c jcdeflts.c jcexpand.c \
	 jchuff.c jcmain.c jcmaster.c jcmcu.c jcpipe.c jcsample.c \
	 jdarith.c jdcolor.c jdhuff.c jdmain.c jdmaster.c jdmcu.c \
	 jdpipe.c jdsample.c jerror.c jfwddct.c jquant1.c jquant2.c \
	 jrdjfif.c jrdgif.c jrdppm.c jrevdct.c jutils.c jvirtmem.c \
	 jwrjfif.c jwrgif.c jwrppm.c egetopt.c
DOCS= README architecture codingrules
MAKEFILES= makefile.unix makefile.amiga \
	   makefile.mc5 makefile.mc6 makcjpeg.lnk makdjpeg.lnk \
	   makefile.pwc makcjpeg.cf makdjpeg.cf makljpeg.cf
TESTFILES= testorig.jpg testimg.ppm testimg.jpg
DISTFILES= $(DOCS) $(MAKEFILES) ansi2knr.c $(SOURCES) $(INCLUDES) $(TESTFILES)

# compression objectfiles
COBJECTS = jcmain.o jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o \
	   jchuff.o jcmcu.o jcpipe.o jcsample.o jfwddct.o \
	   jrdgif.o jrdppm.o jwrjfif.o \
	   jutils.o jvirtmem.o jerror.o
# decompression objectfiles
DOBJECTS = jdmain.o jdmaster.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \
	   jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o \
	   jrdjfif.o jwrgif.o jwrppm.o \
	   jutils.o jvirtmem.o jerror.o
# These objectfiles are included in libjpeg.lib (all but jcmain.o, jdmain.o)
LIBOBJECTS = jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o \
	     jchuff.o jcmcu.o jcpipe.o jcsample.o jfwddct.o \
	     jrdgif.o jrdppm.o jwrjfif.o \
	     jdmaster.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \
	     jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o \
	     jrdjfif.o jwrgif.o jwrppm.o \
	     jutils.o jvirtmem.o jerror.o


all: cjpeg djpeg
# By default, libjpeg.lib is not built unless you explicitly request it.


# If you have a C compiler that doesn't understand function prototypes,
# uncomment the 5 lines below and make sure PROTO is not defined by jconfig.h.
# Then say "make ansi2knr" before "make".

#.c.o:
#	./ansi2knr $*.c tmpansi.c
#	$(CC) $(CFLAGS) -c tmpansi.c
#	mv tmpansi.o $*.o
#	$(RM) tmpansi.c

ansi2knr: ansi2knr.c
	$(CC) -o ansi2knr ansi2knr.c
# You may need to add one of -DBSD, -DVMS, or -DMSDOS to the line above.


cjpeg: $(COBJECTS)
	$(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) $(LDLIBS)

djpeg: $(DOBJECTS)
	$(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) $(LDLIBS)

# libjpeg.lib is useful if you are including the JPEG software in a larger
# program; you'd include it in your link, rather than the individual modules.
libjpeg.lib: $(LIBOBJECTS)
	-$(RM) libjpeg.lib
	$(AR) libjpeg.lib  $(LIBOBJECTS)

# Use the following to test the built library
#cjpeg: jcmain.o libjpeg.lib
#	$(LN) $(LDFLAGS) -o cjpeg jcmain.o -llibjpeg $(LDLIBS)
#
#djpeg: jdmain.o libjpeg.lib
#	$(LN) $(LDFLAGS) -o djpeg jdmain.o -llibjpeg $(LDLIBS)

clean:
	-$(RM) *.o cjpeg djpeg libjpeg.lib ansi2knr core tmpansi.* testout.ppm testout.jpg

distribute:
	-$(RM) jpegsrc.tar*
	tar cvf jpegsrc.tar $(DISTFILES)
	list jpegsrc.tar
	compress -v jpegsrc.tar
	list jpegsrc.tar*

test: cjpeg djpeg
	-$(RM) testout.ppm testout.jpg
	./djpeg testorig.jpg testout.ppm
	./cjpeg testimg.ppm testout.jpg
	cmp testimg.ppm testout.ppm
	cmp testimg.jpg testout.jpg


jbsmooth.o : jbsmooth.c jinclude.h jconfig.h jpegdata.h 
jcarith.o : jcarith.c jinclude.h jconfig.h jpegdata.h 
jccolor.o : jccolor.c jinclude.h jconfig.h jpegdata.h 
jcdeflts.o : jcdeflts.c jinclude.h jconfig.h jpegdata.h 
jcexpand.o : jcexpand.c jinclude.h jconfig.h jpegdata.h 
jchuff.o : jchuff.c jinclude.h jconfig.h jpegdata.h 
jcmain.o : jcmain.c jinclude.h jconfig.h jpegdata.h egetopt.c 
jcmaster.o : jcmaster.c jinclude.h jconfig.h jpegdata.h 
jcmcu.o : jcmcu.c jinclude.h jconfig.h jpegdata.h 
jcpipe.o : jcpipe.c jinclude.h jconfig.h jpegdata.h 
jcsample.o : jcsample.c jinclude.h jconfig.h jpegdata.h 
jdarith.o : jdarith.c jinclude.h jconfig.h jpegdata.h 
jdcolor.o : jdcolor.c jinclude.h jconfig.h jpegdata.h 
jdhuff.o : jdhuff.c jinclude.h jconfig.h jpegdata.h 
jdmain.o : jdmain.c jinclude.h jconfig.h jpegdata.h egetopt.c
jdmaster.o : jdmaster.c jinclude.h jconfig.h jpegdata.h 
jdmcu.o : jdmcu.c jinclude.h jconfig.h jpegdata.h 
jdpipe.o : jdpipe.c jinclude.h jconfig.h jpegdata.h 
jdsample.o : jdsample.c jinclude.h jconfig.h jpegdata.h 
jerror.o : jerror.c jinclude.h jconfig.h jpegdata.h 
jfwddct.o : jfwddct.c jinclude.h jconfig.h jpegdata.h 
jquant1.o : jquant1.c jinclude.h jconfig.h jpegdata.h 
jquant2.o : jquant2.c jinclude.h jconfig.h jpegdata.h 
jrdjfif.o : jrdjfif.c jinclude.h jconfig.h jpegdata.h 
jrdgif.o : jrdgif.c jinclude.h jconfig.h jpegdata.h 
jrdppm.o : jrdppm.c jinclude.h jconfig.h jpegdata.h 
jrevdct.o : jrevdct.c jinclude.h jconfig.h jpegdata.h 
jutils.o : jutils.c jinclude.h jconfig.h jpegdata.h 
jvirtmem.o : jvirtmem.c jinclude.h jconfig.h jpegdata.h 
jwrjfif.o : jwrjfif.c jinclude.h jconfig.h jpegdata.h 
jwrgif.o : jwrgif.c jinclude.h jconfig.h jpegdata.h 
jwrppm.o : jwrppm.c jinclude.h jconfig.h jpegdata.h 
