#
#     Copyright 2003 Matthew Marjanovic <maddog@mir.com>
#
#     This file is part of y4mscaler.
#
#     y4mscaler is free software; you can redistribute it and/or modify
#     it under the terms of the GNU General Public License as published by
#     the Free Software Foundation; either version 2 of the License, or
#     (at your option) any later version.
#
#     y4mscaler is distributed in the hope that it will be useful,
#     but WITHOUT ANY WARRANTY; without even the implied warranty of
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#     GNU General Public License for more details.
#
#     You should have received a copy of the GNU General Public License
#     along with y4mscaler; if not, write to the Free Software
#     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

# Default:  no specialization.  See the arch-specific targets....
CPU_OPT = 

YS_VERSION_MAJOR = 9
YS_VERSION_MINOR = 0

ifeq ($(strip $(shell pkg-config --exists mjpegtools; echo $$?)),0)
MJPEG_CXXFLAGS := $(shell pkg-config --cflags mjpegtools)
MJPEG_LDFLAGS  := $(shell pkg-config --libs mjpegtools)
else
MJPEG_PREFIX = /usr/local
MJPEG_LIBDIR = ${MJPEG_PREFIX}/lib
MJPEG_INCDIR = ${MJPEG_PREFIX}/include/mjpegtools

MJPEG_CXXFLAGS = -I ${MJPEG_INCDIR}
MJPEG_LDFLAGS  = -L ${MJPEG_LIBDIR} -lmjpegutils
endif


#COPT = -O2 ${CPU_OPT} #-fomit-frame-pointer #-mno-fp-ret-in-387  #-fdelayed-branch
COPT = -O2 ${CPU_OPT}

VER_FLAGS = -DYS_VERSION_MAJOR=${YS_VERSION_MAJOR} -DYS_VERSION_MINOR=${YS_VERSION_MINOR}

CXXFLAGS = ${VER_FLAGS} ${DEV_FLAGS} ${COPT} ${MJPEG_CXXFLAGS} -Wall -W #-pg -g -a
#STATFLAGS = -static
LDFLAGS = ${STATFLAGS} ${MJPEG_LDFLAGS} #-pg -fprofile-arcs -ftest-coverage -a


all:  y4mscaler

#
# Until some fancy auto-configuration is in place,
# choose your favorite optimization by using one of these targets.
#

# List the targets:
arches:
	@echo "Available arch-specific targets:  i686, tbird, ppc-g4, ppc-g5"

# Tuned for an i686 machine:
i686:
	${MAKE} CPU_OPT="-mtune=i686" all

# ...for an AMD athlon/thunderbird:
tbird:
	${MAKE} CPU_OPT="-march=athlon-tbird" all

# ...for the G4 PPC (courtesy of sms):
ppc-g4:
	${MAKE} CPU_OPT="-mtune=7450 -mcpu=7450 -finline-functions -mdynamic-no-pic" all

# ...for the G5 PPC (courtesy of sms):
ppc-g5:
	${MAKE} CPU_OPT="-mtune=G5 -mcpu=G5 -ffast-math -finline-functions -mdynamic-no-pic" all



dbg:
	${MAKE} DEV_FLAGS=-D_YS_DEV_BRANCH_ all


#y4mscaler:  graphics.o ysStreamInfo.o y4mscaler.o  scaler-matto.o kernels.o ysSource.o ysTarget.o ysScaling.o   scaler-jit.o scaler-exp.o
#	${CXX} -o y4mscaler graphics.o ysStreamInfo.o ysSource.o ysTarget.o ysScaling.o y4mscaler.o scaler-matto.o scaler-jit.o scaler-exp.o kernels.o ${LDFLAGS} -lm
y4mscaler:  graphics.o ysStreamInfo.o y4mscaler.o  scaler-matto.o kernels.o ysSource.o ysTarget.o ysScaling.o
	${CXX} -o y4mscaler graphics.o ysStreamInfo.o ysSource.o ysTarget.o ysScaling.o y4mscaler.o scaler-matto.o kernels.o ${LDFLAGS} -lm

graphics.o: graphics.H y4m-config.h

ysStreamInfo.o: ysStreamInfo.H graphics.H y4m-config.h

ysSource.o: ysSource.H ysStreamInfo.H y4m-config.h graphics.H

ysTarget.o: ysTarget.H ysStreamInfo.H ysSource.H y4m-config.h graphics.H

ysScaling.o: ysScaling.H ysTarget.H ysSource.H y4m-config.h graphics.H scaler-matto.H

y4mscaler.o:  ysScaling.H ysTarget.H ysSource.H scaler-matto.H ysStreamInfo.H graphics.H y4m-config.h

scaler-matto.o:  scaler-matto.H scaler.H kernels.H y4m-config.h

scaler-matto.s:  scaler-matto.C scaler-matto.H scaler.H kernels.H y4m-config.h
	${CXX} ${CXXFLAGS} -g -dp -S scaler-matto.C

kernels.o:  kernels.H y4m-config.h

scaler-jit.o:  scaler-jit.H scaler.H kernels.H y4m-config.h

scaler-exp.o:  scaler-exp.H scaler.H kernels.H y4m-config.h

scaler-exp.s:  scaler-exp.C scaler-exp.H scaler.H kernels.H y4m-config.h
	${CXX} ${CXXFLAGS} -g -dp -S scaler-exp.C


y4mscaler.1.html:  y4mscaler.1
	man -l y4mscaler.1 -Thtml > y4mscaler.1.html

clean:
	-rm *.o *.bb *.bbg *.da *.gcov *.s gmon.out
	-rm y4mscaler 
	-rm y4mscaler.1.html

squeaky:  clean
	-rm *~

TEXTFILES = COPYING README INSTALL TODO ChangeLog

SRCFILES = y4mscaler.C \
           graphics.H graphics.C \
           ysStreamInfo.H ysStreamInfo.C \
           ysSource.H ysSource.C \
           ysTarget.H ysTarget.C \
           ysScaling.H ysScaling.C \
           scaler-matto.H scaler-matto.C \
           kernels.H kernels.C \
           y4m-config.h debug.h \
           scaler.H

MANFILES = y4mscaler.1

BINFILES = y4mscaler

SRCDISTFILES = ${TEXTFILES} Makefile ${SRCFILES} ${MANFILES}

BINDISTFILES = ${TEXTFILES} ${BINFILES} ${MANFILES}

TEMPDIR = xxxTEMPDIRxxx

SRCTARBALL = y4mscaler-${YS_VERSION_MAJOR}.${YS_VERSION_MINOR}-src.tgz
BINTARBALL = y4mscaler-${YS_VERSION_MAJOR}.${YS_VERSION_MINOR}-bin-x86.tgz

dist: ${SRCTARBALL} ${BINTARBALL} y4mscaler.1.html

distclean: squeaky
	-rm -f ${SRCTARBALL} ${BINTARBALL}


DISTSRCDIR = y4mscaler-${YS_VERSION_MAJOR}.${YS_VERSION_MINOR}
DISTBINDIR = y4mscaler-${YS_VERSION_MAJOR}.${YS_VERSION_MINOR}-bin


${SRCTARBALL}:  ${SRCDISTFILES}
	-mkdir ${TEMPDIR}
	-rm -rf ${TEMPDIR}/${DISTSRCDIR}
	mkdir ${TEMPDIR}/${DISTSRCDIR}
	chmod 755 ${TEMPDIR}/${DISTSRCDIR}
	for f in ${SRCDISTFILES}; do cp $$f ${TEMPDIR}/${DISTSRCDIR} ; done
	(cd ${TEMPDIR}/${DISTSRCDIR} ; chmod 644 ${SRCDISTFILES})
	(cd ${TEMPDIR}; tar -c -z --group root --owner root -f ${SRCTARBALL} ${DISTSRCDIR})
	mv ${TEMPDIR}/${SRCTARBALL} .
	rm -rf ${TEMPDIR}

${BINTARBALL}:  ${BINDISTFILES}
	-mkdir ${TEMPDIR}
	-rm -rf ${TEMPDIR}/${DISTBINDIR}
	mkdir ${TEMPDIR}/${DISTBINDIR}
	chmod 755 ${TEMPDIR}/${DISTBINDIR}
	cp ${BINDISTFILES} ${TEMPDIR}/${DISTBINDIR}
	(cd ${TEMPDIR}/${DISTBINDIR} ; chmod 644 ${BINDISTFILES})
	(cd ${TEMPDIR}/${DISTBINDIR} ; chmod 755 ${BINFILES})
	(cd ${TEMPDIR}; tar -c -z --group root --owner root -f ${BINTARBALL} ${DISTBINDIR})
	mv ${TEMPDIR}/${BINTARBALL} .
	rm -rf ${TEMPDIR}


