# Makefile for Independent JPEG Group's software

# This file was adapted from makefile.mc6. Changes:
#  1. Add -DSETMODE to get unix-style command line.
#  2. Minor changes to get clean make under OS/2 and dmake 3.8
#  3. Add jpeg.def linker definition file.
#
# Darrel Hankerson hank@ducvax.auburn.edu
# 16 December 1992

# This makefile is for Microsoft C for MS-DOS, version 6.00A and up.
# Use NMAKE, not Microsoft's brain-damaged MAKE.
# Thanks to Alan Wright and Chris Turner of Olivetti Research Ltd.

# Read SETUP instructions before saying "nmake" !!

# compiler flags. -D gives a #define to the sources:
#       -AS             small memory model (or use -AM for medium model)
#       -Ox             maximum safe optimisation
#       -W3             warning level 3
#       -Za             ANSI conformance, defines __STDC__ but undefines far
#                       and near, so we DON'T use it.
#       -DHAVE_STDC     indicate we do have all the ANSI language features
#       -DINCLUDES_ARE_ANSI    and all the ANSI include files.
#       -DMSDOS         we are on an MSDOS machine
#       -DUSE_FMEM      we have _fmemcpy() and _fmemset()
#       -DSHORTxLCONST_32      enables compiler-specific multiply optimization
#       -DMEM_STATS     enable memory usage statistics (optional)
# You might also want to add -G2 if you have an 80286, etc.

.NOTABS = 1

DEFS = -DHAVE_STDC -DINCLUDES_ARE_ANSI -DMSDOS -DUSE_FMEM -DSHORTxLCONST_32 \
-DUSE_SETMODE -DDEFAULT_MAX_MEM=2000000L 

MODEL = C
CFLAGS = -A$(MODEL) -Ox -W3 -G2 $(DEFS)
LFLAGS = -Lp -A$(MODEL)

# need linker response file because file list > 128 chars
RFILE = libjpeg.ans

CC = cl
RM = rm -f
DIFF = diff

# source files (independently compilable files)
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 \
        jddeflts.c jdhuff.c jdmain.c jdmaster.c jdmcu.c jdpipe.c jdsample.c \
        jerror.c jquant1.c jquant2.c jfwddct.c jrevdct.c jutils.c jmemmgr.c \
        jrdjfif.c jrdgif.c jrdppm.c jrdrle.c jrdtarga.c jwrjfif.c jwrgif.c \
        jwrppm.c jwrrle.c jwrtarga.c
# virtual source files (not present in distribution file, see SETUP)
VIRTSOURCES= jmemsys.c
# system-dependent implementations of virtual source files
SYSDEPFILES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemdos.h \
        jmemdosa.asm
# files included by source files
INCLUDES= jinclude.h jconfig.h jpegdata.h jversion.h jmemsys.h
# documentation, test, and support files
DOCS= README SETUP USAGE CHANGELOG cjpeg.1 djpeg.1 architecture codingrules
MAKEFILES= makefile.ansi makefile.unix makefile.manx makefile.sas \
        makcjpeg.st makdjpeg.st makljpeg.st makefile.mc5 makefile.mc6 \
        makefile.bcc makefile.mms makefile.vms makvms.opt
OTHERFILES= ansi2knr.c ckconfig.c example.c
TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg
DISTFILES= $(DOCS) $(MAKEFILES) $(SOURCES) $(SYSDEPFILES) $(INCLUDES) \
        $(OTHERFILES) $(TESTFILES)
# objectfiles common to cjpeg and djpeg
# COMOBJECTS= jutils.obj jerror.obj jmemmgr.obj jmemsys.obj jmemdosa.obj
COMOBJECTS= jutils.obj jerror.obj jmemmgr.obj jmemsys.obj
# compression objectfiles
CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \
        jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \
        jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj
COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS)
# decompression objectfiles
DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \
        jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \
        jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \
        jwrrle.obj jwrtarga.obj
DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS)
# These objectfiles are included in libjpeg.lib
LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS)


all: cjpeg.exe djpeg.exe


# 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) $(RFILE)
    $(RM) libjpeg.lib
    lib @$(RFILE) ;

# linker response file for same
$(RFILE) : Makefile
[
	rem del $(RFILE)
    echo libjpeg.lib >$(RFILE)
	rem # silly want-to-create-it prompt:
    echo y >>$(RFILE)
    echo +jcmaster.obj +jcdeflts.obj +jcarith.obj +jccolor.obj ^& >>$(RFILE)
    echo +jcexpand.obj +jchuff.obj +jcmcu.obj +jcpipe.obj ^& >>$(RFILE)
    echo +jcsample.obj +jfwddct.obj +jwrjfif.obj +jrdgif.obj ^& >>$(RFILE)
    echo +jrdppm.obj +jrdrle.obj +jrdtarga.obj +jdmaster.obj ^& >>$(RFILE)
    echo +jddeflts.obj +jbsmooth.obj +jdarith.obj +jdcolor.obj ^& >>$(RFILE)
    echo +jdhuff.obj +jdmcu.obj +jdpipe.obj +jdsample.obj ^& >>$(RFILE)
    echo +jquant1.obj +jquant2.obj +jrevdct.obj +jrdjfif.obj ^& >>$(RFILE)
    echo +jwrgif.obj +jwrppm.obj +jwrrle.obj +jwrtarga.obj ^& >>$(RFILE)
    echo +jutils.obj +jerror.obj +jmemmgr.obj +jmemsys.obj >>$(RFILE)
	rem echo +jmemdosa.obj >>$(RFILE)
]

cjpeg.exe: jcmain.obj libjpeg.lib jpeg.def
    $(CC) $(LFLAGS) -o $@ $< /link /STACK:4096 /EXEPACK 

djpeg.exe: jdmain.obj libjpeg.lib jpeg.def
    $(CC) $(LFLAGS) -o $@ $< /link /STACK:4096 /EXEPACK 

jmemsys.c:
	+echo You must select a system-dependent jmemsys.c file.
	+echo Please read the SETUP directions.
	exit 1

clean:
	$(RM) *.obj
	$(RM) libjpeg.lib
	$(RM) cjpeg.exe
	$(RM) djpeg.exe
	$(RM) testout.*

test:
        $(RM) testout.*
        djpeg testorig.jpg > testout.ppm
        djpeg -gif testorig.jpg > testout.gif
        cjpeg testimg.ppm > testout.jpg
        $(DIFF) testimg.ppm testout.ppm
        $(DIFF) testimg.gif testout.gif
        $(DIFF) testimg.jpg testout.jpg


jbsmooth.obj : jbsmooth.c jinclude.h jconfig.h jpegdata.h
jcarith.obj : jcarith.c jinclude.h jconfig.h jpegdata.h
jccolor.obj : jccolor.c jinclude.h jconfig.h jpegdata.h
jcdeflts.obj : jcdeflts.c jinclude.h jconfig.h jpegdata.h
jcexpand.obj : jcexpand.c jinclude.h jconfig.h jpegdata.h
jchuff.obj : jchuff.c jinclude.h jconfig.h jpegdata.h
jcmain.obj : jcmain.c jinclude.h jconfig.h jpegdata.h jversion.h
jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpegdata.h
jcmcu.obj : jcmcu.c jinclude.h jconfig.h jpegdata.h
jcpipe.obj : jcpipe.c jinclude.h jconfig.h jpegdata.h
jcsample.obj : jcsample.c jinclude.h jconfig.h jpegdata.h
jdarith.obj : jdarith.c jinclude.h jconfig.h jpegdata.h
jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpegdata.h
jddeflts.obj : jddeflts.c jinclude.h jconfig.h jpegdata.h
jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpegdata.h
jdmain.obj : jdmain.c jinclude.h jconfig.h jpegdata.h jversion.h
jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpegdata.h
jdmcu.obj : jdmcu.c jinclude.h jconfig.h jpegdata.h
jdpipe.obj : jdpipe.c jinclude.h jconfig.h jpegdata.h
jdsample.obj : jdsample.c jinclude.h jconfig.h jpegdata.h
jerror.obj : jerror.c jinclude.h jconfig.h jpegdata.h
jquant1.obj : jquant1.c jinclude.h jconfig.h jpegdata.h
jquant2.obj : jquant2.c jinclude.h jconfig.h jpegdata.h
jfwddct.obj : jfwddct.c jinclude.h jconfig.h jpegdata.h
jrevdct.obj : jrevdct.c jinclude.h jconfig.h jpegdata.h
jutils.obj : jutils.c jinclude.h jconfig.h jpegdata.h
jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpegdata.h jmemsys.h
jrdjfif.obj : jrdjfif.c jinclude.h jconfig.h jpegdata.h
jrdgif.obj : jrdgif.c jinclude.h jconfig.h jpegdata.h
jrdppm.obj : jrdppm.c jinclude.h jconfig.h jpegdata.h
jrdrle.obj : jrdrle.c jinclude.h jconfig.h jpegdata.h
jrdtarga.obj : jrdtarga.c jinclude.h jconfig.h jpegdata.h
jwrjfif.obj : jwrjfif.c jinclude.h jconfig.h jpegdata.h
jwrgif.obj : jwrgif.c jinclude.h jconfig.h jpegdata.h
jwrppm.obj : jwrppm.c jinclude.h jconfig.h jpegdata.h
jwrrle.obj : jwrrle.c jinclude.h jconfig.h jpegdata.h
jwrtarga.obj : jwrtarga.c jinclude.h jconfig.h jpegdata.h
jmemsys.obj : jmemsys.c jinclude.h jconfig.h jpegdata.h jmemsys.h
# jmemdosa.obj : jmemdosa.asm
#     masm /mx $*;
