# Makefile for Independent JPEG Group's software

# This makefile is for Mix Software's Power C, v2.1.1
# and Dan Grayson's pd make 2.14 under MS-DOS.
# Thanks to Bob Hardy for this version.

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

# NOTE: make sure you have converted end-of-line markers to CR/LF in this file
# and in the three mak*.cf files; otherwise pd make and the Mix linker will
# choke.  Power C doesn't seem to care whether end-of-lines are CR/LF or just
# LF in the *.h and *.c files.  If you blindly converted LF to CR/LF in ALL
# the files, then you broke the test*.* files, which contain binary data.

CC=pc

# You may need to adjust these cc options:
MODEL=m
CFLAGS=-dMEM_STATS -dMSDOS -m$(MODEL)
LDFLAGS=
# In particular:
#   -dMEM_STATS is optional -- it enables gathering of memory usage statistics.
LDLIBS=

# miscellaneous OS-dependent stuff
# linker
LN=pcl
# file deletion command
RM=del
# library (.mix) file creation command
AR=merge


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


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


cjpeg.exe: $(COBJECTS)
	$(LN) $(LDFLAGS) @makcjpeg.cf

djpeg.exe: $(DOBJECTS)
	$(LN) $(LDFLAGS) @makdjpeg.cf

# libjpeg.mix 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.mix: $(LIBOBJECTS)
	@$(RM) libjpeg.mix
	$(AR) libjpeg.mix @makljpeg.cf

clean:
	$(RM) *.mix cjpeg.exe djpeg.exe testout.*

test:
	@$(RM) testout.*
	+djpeg testorig.jpg testout.ppm
	+cjpeg testimg.ppm testout.jpg
	fc testimg.ppm testout.ppm
	fc testimg.jpg testout.jpg


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