# Makefile for pbm tools, for use with Amiga DICE
#
# Copyright (C) 1989, 1991 by Jef Poskanzer.
# Modified for Amiga DICE by Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de)
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
# that the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation.  This software is provided "as is" without express or
# implied warranty.

# CONFIG: generate executable with debugging information
#DEBUG =     -s -d1
# CONFIG: use memory pools
#MPOOL =     -L/amiga -l mpool

CC =            dcc
CFLAGS =        -E DCC_ERRORS -ms -mu -gs $(DEBUG)
#RGBDEF =        -DRGB_DB="RGBDEF"  # moved to pbmplus.h
TIFFDEF =       -DLIBTIFF
LDFLAGS =       $(MPOOL) /amiga/dice_stack.o
BINDIR =        bin
MERGE=          pbmmerge

# where to install the binaries, libraries and important header files
INSTALLBIN =    bin:pbmplus
INSTALLLIB =    dlib:local
INSTALLINCL=    dinclude:local
# install which headers
HEADERS=        pbm.h pbmfont.h /pbmplus.h

INCLUDE =       -I/
RALLCFLAGS =    $(CFLAGS) $(RGBDEF) $(TIFFDEF) $(INCLUDE) -proto -mRR
SALLCFLAGS =    $(CFLAGS) $(RGBDEF) $(TIFFDEF) $(INCLUDE) -proto
MALLCFLAGS =    $(CFLAGS) $(RGBDEF) $(TIFFDEF) $(INCLUDE) -mD -mC
DEFPBM =        pbm.h /pbmplus.h
DEFLIBPBM =     libpbm.h
RLIBPBM =       pbmsr.lib
RLLIBPBM =      pbmrl.lib
SLIBPBM =       pbms.lib
SLLIBPBM =      pbml.lib
DEFPBM2 =       /version.h /compile.h   # special dep for libpbm1.c

LIBRARIES =     $(RLIBPBM) $(RLLIBPBM) $(SLIBPBM) $(SLLIBPBM)

BINS =          atktopbm brushtopbm cmuwmtopbm \
                icontopbm gemtopbm macptopbm mgrtopbm \
                pbmlife pbmmake pbmmask \
                pbmtext pbmto10x pbmto4425 pbmtoascii pbmtoatk \
                pbmtobbnbg pbmtocmuwm pbmtoepson pbmtog3 \
                pbmtogem pbmtogo pbmtoicon pbmtolj pbmtomacp \
                pbmtomgr pbmtopi3 pbmtoplot pbmtoptx \
                pbmtox10bm pbmtoxbm pbmtoybm pbmtozinc \
                pbmupc pi3topbm xbmtopbm ybmtopbm \
                pbmtoepsi pbmclean pbmpscale pbmtoln03

LBINS   =       g3topbm

MATHBINS =      pbmreduce pbmtolps

# Compile these programs without proto checking, with stackargs & large data.
# The source is quite messy and would require too much work to clean up.
UGLYFLAGS =     -E DCC_ERRORS -ms -mu -gs -mD -mC $(RGBDEF) $(TIFFDEF) $(INCLUDE)
UGLYBINS =      pktopbm
MUGLYBINS =     pbmtopk

BINARIES =      $(BINS) $(LBINS) $(MATHBINS) $(UGLYBINS) $(MUGLYBINS)

OBJECTS =       atktopbm.om brushtopbm.om cmuwmtopbm.om g3topbm.om \
                icontopbm.om gemtopbm.om macptopbm.om mgrtopbm.om \
                pbmlife.om pbmmake.om pbmmask.om pbmreduce.om \
                pbmtext.om pbmto10x.om pbmto4425.om pbmtoascii.om pbmtoatk.om \
                pbmtobbnbg.om pbmtocmuwm.om pbmtoepson.om pbmtog3.om \
                pbmtogem.om pbmtogo.om pbmtoicon.om pbmtolj.om pbmtomacp.om \
                pbmtomgr.om pbmtopi3.om pbmtoplot.om pbmtoptx.om \
                pbmtox10bm.om pbmtoxbm.om pbmtoybm.om pbmtozinc.om \
                pbmupc.om pi3topbm.om xbmtopbm.om ybmtopbm.om \
                pbmtoepsi.om pbmclean.om pbmpscale.om \
                pbmtolps.om pbmtoln03.om

UGLYOBJS =      pktopbm.ou pbmtopk.ou

all:            lib binaries

bindir:
                -makedir $(BINDIR)

binaries:       lib bindir $(BINARIES)

lib:            $(LIBRARIES)

merge:          lib bindir $(MERGE)


# Rules for merged binary
.c.ou:    $(DEFPBM) $<
        $(CC) $(MALLCFLAGS) "-Dmain=$*_main" -c $*.c -o $*.ou
.c.om:       $(DEFPBM) $<
        $(CC) -proto $(MALLCFLAGS) "-Dmain=$*_main" -c $*.c -o $*.om
$(MERGE):       pbmmerge.c $(OBJECTS) $(UGLYOBJS) $(SLLIBPBM)
        $(CC) $(MALLCFLAGS) $(LDFLAGS) -o $(BINDIR)/$@ $@.c $(OBJECTS) $(UGLYOBJS) -l $(SLLIBPBM) -lm
#$(OBJECTS):     $(DEFPBM)
#        $(CC) -mD -mC $(SALLCFLAGS) "-Dmain=$*_main" -c $*.c


# Rules for plain programs.
$(BINS):        $(DEFPBM) $(RLIBPBM)
        $(CC) -r $(RALLCFLAGS) $(LDFLAGS) -o $(BINDIR)/$@ $@.c -l $(RLIBPBM)

$(LBINS):       $(DEFPBM) $(RLLIBPBM)
        $(CC) -mD -mC $(RALLCFLAGS) $(LDFLAGS) -o $(BINDIR)/$@ $@.c -l $(RLLIBPBM)

$(MATHBINS):    $(DEFPBM) $(RLIBPBM)
        $(CC) -r $(RALLCFLAGS) $(LDFLAGS) -o $(BINDIR)/$@ $@.c -l $(RLIBPBM) -lm

$(UGLYBINS):    $(DEFPBM) $(SLLIBPBM)
        $(CC) $(UGLYFLAGS) $(LDFLAGS) -o $(BINDIR)/$@ $@.c -l $(SLLIBPBM)

$(MUGLYBINS):   $(DEFPBM) $(SLLIBPBM)
        $(CC) $(UGLYFLAGS) $(LDFLAGS) -o $(BINDIR)/$@ $@.c -l $(SLLIBPBM) -lm


# And libraries.
# small data version of libpbm, registerized (arguments in registers)
$(RLIBPBM):     libpbm1.or libpbm2.or libpbm3.or libpbm4.or libpbm5.or
        -delete $(RLIBPBM)
        join libpbm1.or libpbm2.or libpbm3.or libpbm4.or libpbm5.or to $(RLIBPBM)
libpbm1.or:      $(DEFPBM) $(DEFPBM2) $(DEFLIBPBM) libpbm1.c
        $(CC) -r $(RALLCFLAGS) -S -o $@ -c libpbm1.c
libpbm2.or:      $(DEFPBM) $(DEFLIBPBM) libpbm2.c
        $(CC) -r $(RALLCFLAGS) -S -o $@ -c libpbm2.c
libpbm3.or:      $(DEFPBM) $(DEFLIBPBM) libpbm3.c
        $(CC) -r $(RALLCFLAGS) -S -o $@ -c libpbm3.c
libpbm4.or:      $(DEFPBM) $(DEFLIBPBM) libpbm4.c
        $(CC) -r $(RALLCFLAGS) -S -o $@ -c libpbm4.c
libpbm5.or:      $(DEFPBM) pbmfont.h libpbm5.c
        $(CC) -r $(RALLCFLAGS) -S -o $@ -c libpbm5.c

# small data version, not registerized (arguments on stack)
$(SLIBPBM):      libpbm1.os libpbm2.os libpbm3.os libpbm4.os libpbm5.os
        -delete $(SLIBPBM)
        join libpbm1.os libpbm2.os libpbm3.os libpbm4.os libpbm5.os to $(SLIBPBM)
libpbm1.os:     $(DEFPBM) $(DEFPBM2) $(DEFLIBPBM) libpbm1.c
        $(CC) -r $(SALLCFLAGS) -S -o $@ -c libpbm1.c
libpbm2.os:     $(DEFPBM) $(DEFLIBPBM) libpbm2.c
        $(CC) -r $(SALLCFLAGS) -S -o $@ -c libpbm2.c
libpbm3.os:     $(DEFPBM) $(DEFLIBPBM) libpbm3.c
        $(CC) -r $(SALLCFLAGS) -S -o $@ -c libpbm3.c
libpbm4.os:     $(DEFPBM) $(DEFLIBPBM) libpbm4.c
        $(CC) -r $(SALLCFLAGS) -S -o $@ -c libpbm4.c
libpbm5.os:     $(DEFPBM) pbmfont.h libpbm5.c
        $(CC) -r $(SALLCFLAGS) -S -o $@ -c libpbm5.c

# large data version of libpbm, registerized (arguments in registers)
$(RLLIBPBM):    libpbm1.olr libpbm2.olr libpbm3.olr libpbm4.olr libpbm5.olr
        -delete $(RLLIBPBM)
        join libpbm1.olr libpbm2.olr libpbm3.olr libpbm4.olr libpbm5.olr to $(RLLIBPBM)
libpbm1.olr:      $(DEFPBM) $(DEFPBM2) $(DEFLIBPBM) libpbm1.c
        $(CC) -mD $(RALLCFLAGS) -S -o $@ -c libpbm1.c
libpbm2.olr:      $(DEFPBM) $(DEFLIBPBM) libpbm2.c
        $(CC) -mD $(RALLCFLAGS) -S -o $@ -c libpbm2.c
libpbm3.olr:      $(DEFPBM) $(DEFLIBPBM) libpbm3.c
        $(CC) -mD $(RALLCFLAGS) -S -o $@ -c libpbm3.c
libpbm4.olr:      $(DEFPBM) $(DEFLIBPBM) libpbm4.c
        $(CC) -mD $(RALLCFLAGS) -S -o $@ -c libpbm4.c
libpbm5.olr:      $(DEFPBM) pbmfont.h libpbm5.c
        $(CC) -mD $(RALLCFLAGS) -S -o $@ -c libpbm5.c

# large data version of libpbm, not registerized (arguments on stack)
$(SLLIBPBM):      libpbm1.ols libpbm2.ols libpbm3.ols libpbm4.ols libpbm5.ols
        -delete $(SLLIBPBM)
        join libpbm1.ols libpbm2.ols libpbm3.ols libpbm4.ols libpbm5.ols to $(SLLIBPBM)
libpbm1.ols:    $(DEFPBM) $(DEFPBM2) $(DEFLIBPBM) libpbm1.c
        $(CC) -mD $(SALLCFLAGS) -S -o $@ -c libpbm1.c
libpbm2.ols:    $(DEFPBM) $(DEFLIBPBM) libpbm2.c
        $(CC) -mD $(SALLCFLAGS) -S -o $@ -c libpbm2.c
libpbm3.ols:    $(DEFPBM) $(DEFLIBPBM) libpbm3.c
        $(CC) -mD $(SALLCFLAGS) -S -o $@ -c libpbm3.c
libpbm4.ols:    $(DEFPBM) $(DEFLIBPBM) libpbm4.c
        $(CC) -mD $(SALLCFLAGS) -S -o $@ -c libpbm4.c
libpbm5.ols:    $(DEFPBM) pbmfont.h libpbm5.c
        $(CC) -mD $(SALLCFLAGS) -S -o $@ -c libpbm5.c


# Other dependencies.
atktopbm atktopbm.om:            atktopbm.c
brushtopbm brushtopbm.om:        brushtopbm.c
cmuwmtopbm cmuwmtopbm.om:        cmuwmtopbm.c cmuwm.h
g3topbm g3topbm.om:              g3topbm.c g3.h
icontopbm icontopbm.om:          icontopbm.c
gemtopbm gemtopbm.om:            gemtopbm.c
macptopbm macptopbm.om:          macptopbm.c macp.h
mgrtopbm mgrtopbm.om:            mgrtopbm.c mgr.h
pbmlife pbmlife.om:              pbmlife.c
pbmmake pbmmake.om:              pbmmake.c
pbmmask pbmmask.om:              pbmmask.c
pbmreduce pbmreduce.om:          pbmreduce.c
pbmtext pbmtext.om:              pbmtext.c pbmfont.h
pbmto10x pbmto10x.om:            pbmto10x.c
pbmto4425 pbmto4425.om:          pbmto4425.c
pbmtoascii pbmtoascii.om:        pbmtoascii.c
pbmtoatk pbmtoatk.om:            pbmtoatk.c
pbmtobbnbg pbmtobbnbg.om:        pbmtobbnbg.c
pbmtocmuwm pbmtocmuwm.om:        pbmtocmuwm.c cmuwm.h
pbmtoepson pbmtoepson.om:        pbmtoepson.c
pbmtog3 pbmtog3.om:              pbmtog3.c g3.h
pbmtogem pbmtogem.om:            pbmtogem.c
pbmtogo pbmtogo.om:              pbmtogo.c
pbmtoicon pbmtoicon.om:          pbmtoicon.c
pbmtolj pbmtolj.om:              pbmtolj.c
pbmtomacp pbmtomacp.om:          pbmtomacp.c macp.h
pbmtomgr pbmtomgr.om:            pbmtomgr.c mgr.h
pbmtopi3 pbmtopi3.om:            pbmtopi3.c
pbmtoplot pbmtoplot.om:          pbmtoplot.c
pbmtoptx pbmtoptx.om:            pbmtoptx.c
pbmtox10bm pbmtox10bm.om:        pbmtox10bm.c
pbmtoxbm pbmtoxbm.om:            pbmtoxbm.c
pbmtoybm pbmtoybm.om:            pbmtoybm.c
pbmtozinc pbmtozinc.om:          pbmtozinc.c
pbmupc pbmupc.om:                pbmupc.c
pi3topbm pi3topbm.om:            pi3topbm.c
xbmtopbm xbmtopbm.om:            xbmtopbm.c
ybmtopbm ybmtopbm.om:            ybmtopbm.c
pbmtoepsi pbmtoepsi.om:          pbmtoepsi.c
pbmtopk pbmtopk.om:              pbmtopk.c
pktopbm pktopbm.om:              pktopbm.c
pbmclean pbmclean.om:            pbmclean.c
pbmpscale pbmpscale.om:          pbmpscale.c
pbmtolps pbmtolps.om:            pbmtolps.c
pbmtoln03 pbmtoln03.om:          pbmtoln03.c

clean:
        -delete \#.om \#?.ou \#?.os \#?.or \#?.ols \#?.olr DCC_ERRORS

cleanall:   clean
        -delete \#?.lib
        -delete $(BINDIR) all

installlib:     lib
        copy $(LIBRARIES) to $(INSTALLLIB)
        copy $(HEADERS) to $(INSTALLINCL)

installbin:     binaries
        copy $(BINDIR) all to $(INSTALLBIN)

installall:     installlib installbin

install:
        @echo "Please select: installlib, installbin, installall"

