SRCDIR = ..
include $(SRCDIR)/Makefile.config

LIBROOT = ppm
LIBPPM = lib$(LIBROOT).so
MAJ = 1
MIN = 3

PGMDIR = $(SRCDIR)/pgm
LIBPGM = libpgm.so

PBMDIR = $(SRCDIR)/pbm
LIBPBM = libpbm.so

INCLUDE= -I$(SRCDIR) -I$(PGMDIR) -I$(PBMDIR) -I$(SRCDIR)/shhopt

ifneq ($(JPEGHDR_DIR), NONE)
  INCLUDE+= -I$(JPEGHDR_DIR)
endif

NETPBMLIBS = $(LIBPPM) $(PBMDIR)/$(LIBPBM) $(PGMDIR)/$(LIBPGM)
LIBLIBS = $(PBMDIR)/$(LIBPBM) $(PGMDIR)/$(LIBPGM)

PORTBINARIES =	bmptoppm eyuvtoppm gouldtoppm hpcdtoppm ilbmtoppm imgtoppm \
		mtvtoppm pcxtoppm pgmtoppm pi1toppm picttoppm \
		pjtoppm \
		ppm3d ppmbrighten ppmchange ppmdim ppmdist ppmdither \
		ppmflash ppmhist ppmmake ppmmix ppmnorm \
		ppmntsc ppmquant ppmrelief ppmshift ppmspread \
		ppmtoacad \
		ppmtobmp ppmtoeyuv ppmtogif ppmtoicr ppmtoilbm ppmtomitsu \
		ppmtopcx ppmtopgm ppmtopi1 ppmtopict ppmtopj \
		ppmtopjxl ppmtopuzz ppmtorgb3 ppmtosixel \
		ppmtotga ppmtouil ppmtoxpm ppmtoyuv \
		ppmtoyuvsplit \
		qrttoppm rawtoppm rgb3toppm sldtoppm spctoppm \
		sputoppm tgatoppm ximtoppm xpmtoppm xvminitoppm \
		yuvtoppm yuvsplittoppm

# We don't build vidtoppm by default, because it requires special libraries
# and there is no known requirement for vidtoppm.

ifneq ($(JPEGLIB_DIR), NONE)
  ifneq ($(JPEGHDR_DIR), NONE)
      NOMERGEBINARIES += ppmtojpeg
  endif
endif

MATHBINARIES = ppmcie ppmforge ppmlabel ppmpat ppmqvga ppmtomap
BINARIES = $(PORTBINARIES) $(NOMERGEBINARIES) $(MATHBINARIES)
SCRIPTS = ppmquantall ppmshadow ppmfade

OBJECTS = $(patsubst %, %.o, $(BINARIES))

MERGE_OBJECTS = $(patsubst %,%.o2, $(PORTBINARIES) $(MATHBINARIES))

LIBOBJECTS = libppm1.o libppm2.o libppm3.o libppm4.o libppm5.o bitio.o

MANUALS1 = $(BINARIES) $(SCRIPTS)
MANUALS3 = libppm
MANUALS5 = ppm

MERGENAME= ppmmerge

INTERFACE_HEADERS = ppm.h

.PHONY: all
all:        $(BINARIES)
.PHONY: merge
merge:      $(MERGENAME) $(NOMERGEBINARIES)


# Rules for plain programs.
$(PORTBINARIES): %: %.o $(NETPBMLIBS)
	$(LD) $(LDFLAGS) -o $@ $@.o $(NETPBMLIBS) \
	  $(CDEBUG)

# Rule for math-dependent programs.
$(MATHBINARIES): %: %.o $(NETPBMLIBS)
	$(LD) $(LDFLAGS) -o $@ $@.o -lm $(NETPBMLIBS) $(CDEBUG)

ppmtojpeg: %: %.o $(NETPBMLIBS)
	$(LD) $(LDFLAGS) -o $@ $@.o $(NETPBMLIBS) \
	  -L $(JPEGLIB_DIR) -ljpeg $(CDEBUG)

# Rule for objects.
$(OBJECTS) $(LIBOBJECTS): %.o: %.c
	$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $<

$(MERGE_OBJECTS): %.o2: %.c
	$(CC) -c $(CFLAGS) $(INCLUDE) "-Dmain=$*_main" -o $@ $<

# And libraries.
$(PBMDIR)/$(LIBPBM): FORCE
	cd $(PBMDIR) ; make $(LIBPBM)
$(PGMDIR)/$(LIBPGM): FORCE
	cd $(PGMDIR) ; make $(LIBPGM)

.PHONY: install.bin
install.bin: install.bin.common

.PHONY: install.lib
install.lib: install.lib.common

include $(SRCDIR)/Makefile.common

.PHONY: clean
clean:
	-rm -f *.o *.o2 *.a *.so* *.cat *~ core $(BINARIES) $(MERGENAME)

FORCE: