# Makefile for pnm tools.
#
# Copyright (C) 1989, 1991 by Jef Poskanzer.
#
# 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.
#
# Makefile modifications Copyright (c) 1997 by Wayne Gramlich.
#
# 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.  (Yes, it is exactly the same as the one above.)

# Included make files:
ROOT = ../../..
include $(ROOT)/Makefile_common.mk
include $(ROOT)/Makefile_private.mk

# Install directories:
BIN_DIRECTORY = $(ROOT)/bin/$(PLATFORM)
MAN_DIRECTORY = $(ROOT)/man
MAN1_DIRECTORY = $(MAN_DIRECTORY)/man1
MAN3_DIRECTORY = $(MAN_DIRECTORY)/man3
MAN5_DIRECTORY = $(MAN_DIRECTORY)/man5

# Source directories:
PBM_DIRECTORY = ../pbm
PGM_DIRECTORY = ../pgm
PPM_DIRECTORY = ../ppm
TIFF_DIRECTORY = ../libtiff

# Includes:
PBM_INCLUDE = -I$(PBM_DIRECTORY)
PGM_INCLUDE = -I$(PGM_DIRECTORY)
PPM_INCLUDE = -I$(PPM_DIRECTORY)
TIFF_INCLUDE = -I$(TIFF_DIRECTORY)
INCLUDES = -I.. $(PBM_INCLUDE) $(PGM_INCLUDE) $(PPM_INCLUDE) $(TIFF_INCLUDE)

# Compiler flags:
# Default values, usually overridden by top-level Makefile.

#CC = cc
#CC = gcc -ansi -pedantic -fcombine-regs -fpcc-struct-return
CC = gcc -ansi -pedantic

#COPTS = -O
#COPTS = -g
#COPTS = -g -O
COPTS = -O2

TIFF_DEFINE = -DLIBTIFF
CFLAGS = ${COPTS} -DSYSV $(TIFF_DEFINE)

TIFFLIB =       $(TIFFDIR)/libtiff.a

#LDFLAGS =	-s
LDFLAGS =	

ALLCFLAGS = ${CFLAGS} ${INCLUDES} $(TIFFDEF) $(TIFFINC)

# Library files:
LIBPBM = $(PBM_DIRECTORY)/$(PLATFORM)/libpbm.a
LIBPGM = $(PGM_DIRECTORY)/$(PLATFORM)/libpgm.a
LIBPPM = $(PPM_DIRECTORY)/$(PLATFORM)/libppm.a
LIBPNM = $(PLATFORM)/libpnm.a
LIBTIFF = $(TIFF_DIRECTORY)/$(PLATFORM)/libtiff.a

# Order matters
LIBS = $(LIBPNM) $(LIBTIFF) $(LIBPPM) $(LIBPGM) $(LIBPBM)

RANLIB =	true

BASES =			\
	pnmarith	\
	pnmcat		\
	pnmconvol	\
	pnmcrop		\
	pnmcut		\
	pnmdepth	\
	pnmenlarge	\
	pnmfile		\
	pnmflip		\
	pnminvert	\
	pnmnoraw	\
	pnmpaste	\
	pnmscale	\
	pnmtile		\
	pnmtops		\
	pnmtorast	\
	pnmtoxwd	\
	rasttopnm	\
	xwdtopnm	\
	pnmgamma	\
	pnmrotate	\
	pnmshear	\
	tifftopnm	\
	pnmtotiff
C_SOURCES = ${BASES:%=%.c}
BINARIES = ${BASES}
OBJECTS = ${BASES:%=$(PLATFORM)/%.o}
SCRIPTS =		\
	anytopnm	\
	pnmindex	\
	pnmmargin	\
	pnmsmooth

LIB_BASES =		\
	libpnm1		\
	libpnm2		\
	libpnm3		\
	libpnm4
LIB_C_SOURCES = ${LIB_BASES:%=%.c}
LIB_OBJECTS = ${LIB_BASES:%=$(PLATFORM)/%.o}

#LIBUCB = 	/usr/ucblib/libucb.a
LIBUCB =

HEADERS =		\
	pnm.h		\
	rast.h		\
	x10wd.h		\
	x11wd.h
OTHER_SOURCES =		\
	Imakefile	\
	Makefile

MAN1_BASES = ${BINARIES} ${SCRIPTS}
MAN3_BASES = libpnm
MAN5_BASES = pnm

ALL_C_SOURCES =			\
	${C_SOURCES}		\
	${LIB_C_SOURCES}
MAN_SOURCES =			\
	${MAN1_BASES:%=%.1}	\
	${MAN3_BASES:%=%.3}	\
	${MAN5_BASES:%=%.5}
SOURCES = 			\
	${ALL_C_SOURCES}	\
	${HEADERS}		\
	${MAN_SOURCES}		\
	${OTHER_SOURCES}
ALL_SOURCES =			\
	${SOURCES}		\
	index.html		\
	source.html


.PHONY: all copy clean merge install install.merge install.man

all:		$(PLATFORM) $(WAIT) merge
install:	install.merge

binaries:	$(BINARIES)

merge: $(PLATFORM)/pnmmerge
$(PLATFORM)/pnmmerge: pnmmerge.c ${OBJECTS} ${LIBS} $(LIBUCB)
	$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ pnmmerge.c ${OBJECTS} \
	    -lm ${LIBS} $(LIBUCB)


# Rules for plain programs.
${BINARIES}: $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)
	$(CC) ${ALLCFLAGS} ${LDFLAGS} -o $@ $@.c \
	    $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)

# Rule for math-dependent programs.
$(MATHBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) \
	$(LIBPPM) $(LIBPGM) $(LIBPBM)
	$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c -lm $(LIBPNM) \
		$(LIBPPM) $(LIBPGM) $(LIBPBM)

# Rule for objects.
${OBJECTS}:
	$(CC) ${ALLCFLAGS} "-Dmain=$(@:$(PLATFORM)/%.o=%)_main" \
	    -c $(@:$(PLATFORM)/%.o=%.c) -o $@
${LIB_OBJECTS}:
	$(CC) ${ALLCFLAGS} -c $(@:$(PLATFORM)/%.o=%.c) -o $@


# And libraries.
$(LIBPBM):
	cd $(PBM_DIRECTORY) ; $(MAKE) lib
$(LIBPGM) FOO:
	cd $(PGM_DIRECTORY) ; $(MAKE) lib
$(LIBPPM) BAR:
	cd $(PPM_DIRECTORY) ; $(MAKE) lib
$(LIBTIFF):
	cd $(TIFF_DIRECTORY) ; $(MAKE) lib

lib: $(LIBPNM)
$(LIBPNM): ${LIB_OBJECTS}
	rm -f $(LIBPNM)
	ar rc $(LIBPNM) ${LIB_OBJECTS}
	$(RANLIB) $(LIBPNM)

$(PLATFORM):
	rm -rf $@
	mkdir $@

clean: site

copy: source.html
	set -e ;							\
	if [ "$(COPY_DIRECTORY)" = "" ] ;				\
	  then								\
	    echo "Please set COPY_DIRECTORY in `pwd`" ;			\
	    exit 1 ;							\
	  fi
	rm -rf $(COPY_DIRECTORY)
	mkdir -p $(COPY_DIRECTORY)
	cp ${ALL_SOURCES} $(COPY_DIRECTORY)

site:
	rm -rf $(PLATFORM)
	rm -f core `ls | grep "~$$"`

source.html: Makefile ${SOURCES}
	@echo -n "Generating $@..."
	@rm -f $@
	@echo '<HTML>' > $@
	@echo '<Head>' >> $@
	@echo '<Title>PBMPlus PNM Directory Source Files</Title>' >> $@
	@echo '</Head>' >> $@
	@echo '<Body>' >> $@
	@echo '<P>These are the source files for the' >> $@
	@echo '<A HRef="index.html">PBMPlus Download</A>' >> $@
	@echo 'top-level directory.</P>' >> $@
	@echo '<H1>' >> $@
	@echo 'PBMPlus PNM Directory Source Files' >> $@
	@echo '</H1>' >> $@
	@echo '<P>The following source files are available:</P>' >> $@
	@echo '<UL>' >> $@
	@for i in `ls ${SOURCES} | sort` ; do 				\
		echo "  <LI><A HRef='$$i'>$$i</A></LI>" >> $@ ;		\
		done
	@echo '</UL>' >> $@
	@echo '<HR>' >> $@
	@echo '<Address>' >> $@
	@echo 'This page is' >> $@
	@echo '<A HRef="../../../../copyright.html">' >> $@
	@echo 'Copyright</A> (c) 1998 by' >> $@
	@echo '<A HRef="../../../../gramlich.html">' >> $@
	@echo 'Wayne Gramlich</A> All rights reserved.' >> $@
	@echo '</Address>' >> $@
	@echo '</Body>' >> $@
	@echo '</HTML>' >> $@
	@echo "Done"
	
# Installation stuff:
install: install.merge install.man

install.merge: $(PLATFORM)/pnmmerge
	mkdir -p $(BIN_DIRECTORY)
	cd $(BIN_DIRECTORY) ; rm -f ${BASES}
	cp $(PLATFORM)/pnmmerge $(BIN_DIRECTORY)
	cd $(BIN_DIRECTORY) ;		\
	    for i in ${BASES} ; do	\
		ln -s pnmmerge $$i ;	\
	    done
	cd $(BIN_DIRECTORY) ; rm -f ${SCRIPTS}
	cp ${SCRIPTS} $(BIN_DIRECTORY) 
	cd $(BIN_DIRECTORY) ; chmod +x ${SCRIPTS}

install.man:
	mkdir -p $(MAN_DIRECTORY) -p $(MAN1_DIRECTORY)
	for i in ${MAN1_BASES} ; do		\
	    rm -f $(MAN1_DIRECTORY)/$$i.1 ;	\
	    cp $$i.1 $(MAN1_DIRECTORY)/$$i.1 ;	\
	done
	mkdir -p $(MAN3_DIRECTORY)
	for i in ${MAN3_BASES} ; do		\
	    rm -f $(MAN3_DIRECTORY)/$$i.3 ;	\
	    cp $$i.3 $(MAN3_DIRECTORY)/$$i.3 ;	\
	done
	mkdir -p $(MAN5_DIRECTORY)
	for i in ${MAN5_BASES} ; do		\
	    rm -f $(MAN5_DIRECTORY)/$$i.5 ;	\
	    cp $$i.5 $(MAN5_DIRECTORY)/$$i.5 ;	\
	done












