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

LIBROOT = pgm
LIBPGM = lib$(LIBROOT).so
MAJ = 1
MIN = 0

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

INCLUDE = -I$(SRCDIR) $(INCLUDEPBM)

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

PORTBINARIES =	asciitopgm bioradtopgm fstopgm hipstopgm \
		lispmtopgm pbmtopgm pgmbentley pgmenhance pgmhist \
		pgmnoise pgmnorm pgmoil pgmramp pgmtofs pgmtolispm \
		pgmtopbm psidtopgm spottopgm sbigtopgm
MATHBINARIES =	pgmcrater pgmedge pgmtexture rawtopgm pgmkernel
BINARIES =	$(PORTBINARIES) $(MATHBINARIES)

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

LIBOBJECTS = libpgm1.o libpgm2.o

MANUALS1 =	$(BINARIES)
MANUALS3 =	libpgm
MANUALS5 =	pgm

MERGENAME = pgmmerge

INTERFACE_HEADERS = pgm.h

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

# 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)

# 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)

.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: