#
# Copyright (c) 2003-2008, John Hurst
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# GNUmakefile for asdcplib
#
# $Id: GNUmakefile,v 1.47 2008/02/17 00:45:02 jhurst Exp $
#

#
# choose architecture
# OS is an environment variable set by bash under Cygwin
ifeq ($(OS),Windows_NT)
ARCH	= win32
else
ARCH	= $(shell uname)
endif


ifndef BUILD_DIR
BUILD_DIR = ./$(ARCH)
endif

PACKAGE_NAME = asdcplib

# Announce configuration
$(warning *** Building $(PROJ_NAME) / $(ARCH) *** )


SSL_ROOT	= $(wildcard ../openssl)
ifneq ($(SSL_ROOT),)
$(warning *** Local OpenSSL library found, using ../openssl instead of system library ***)
SSL_INC		= $(SSL_ROOT)/include
SSL_LIB		= $(SSL_ROOT)
endif

ifeq ($(OS),Windows_NT)
SSL_INC		= $(SSL_ROOT)/inc32
SSL_LIB		= $(SSL_ROOT)/out32dll
endif

# 
# win32 Build ###################################
ifeq ($(ARCH),win32)
CXX     = cl.exe
CC      = cl.exe
LD      = link.exe
AR      = lib.exe

ifdef WITH_VC6
CFLAGS  = /nologo /W3 /GR /GX /YX /DWIN32 /DKM_WIN32 /D_CONSOLE /I. /DASDCP_PLATFORM=\"win32\" \
		/GZ /Fd"$(BUILD_DIR)/libasdcp"
else
CFLAGS  = /nologo /W3 /GR /EHsc /DWIN32 /DKM_WIN32 /D_CONSOLE /I. /DASDCP_PLATFORM=\"win32\" \
		/D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS \
		/RTC1 /Fd"$(BUILD_DIR)/libasdcp"
endif

LDFLAGS = /NOLOGO /SUBSYSTEM:console /MACHINE:I386 \
		/LIBPATH:$(BUILD_DIR) /LIBPATH:$(SSL_LIB)

ifdef WITH_MD
VC_LIB_TYPE = /MD
else
VC_LIB_TYPE = /MT
endif

ifeq ($(CFG),Release)
CFLAGS += $(VC_LIB_TYPE) /Ot /DNDEBUG
LDFLAGS += /OUT:
else
CFLAGS += $(VC_LIB_TYPE)d /Od /ZI /DDEBUG /D_DEBUG
LDFLAGS += /DEBUG /OUT:
endif

ifneq ($(SSL_ROOT),)
CFLAGS  += /I$(SSL_INC)
endif

ARFLAGS = /NOLOGO /OUT:

EXT     = .exe
AREXT   = .lib
LIBS	= libasdcp.lib libkumu.lib libeay32.lib Advapi32.lib

$(BUILD_DIR)/%.o : %.cpp
	@if [ ! -d $(BUILD_DIR) ]; then mkdir $(BUILD_DIR); fi
	$(CXX) $(CFLAGS) /c /Fo$@ $<

$(BUILD_DIR)/%.o : %.c
	@if [ ! -d $(BUILD_DIR) ]; then mkdir $(BUILD_DIR); fi
	$(CC) $(CFLAGS) /c /Fo$@ $<

else
# POSIX Build ###################################

CXX     = g++
CC      = gcc
LD	= g++
ARFLAGS = -rvsc 

PLATFORM	= $(shell uname -sm|sed 's/"/\\\\\\"/g')
CFLAGS  	= -fPIC -Wall -Wno-switch -O3 -g -I. -DASDCP_PLATFORM="\"$(PLATFORM)\""
ifdef SSL_INC
CFLAGS  += -I$(SSL_INC)
endif

ifeq ($(ARCH),Linux)
CFLAGS	+= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
endif

##
ifdef WITH_SHARED
ifeq ($(ARCH),Darwin)
AREXT   = .dylib
else
AREXT   = .so
endif
LIBS	= $(BUILD_DIR)/libasdcp$(AREXT) $(BUILD_DIR)/libkumu$(AREXT) -lpthread
AR	= g++
ifeq ($(ARCH),Darwin)
ARFLAGS	= -dynamiclib $(LDFLAGS)
else
ARFLAGS	= -shared $(LDFLAGS)
endif
KUMU_SHLIB	= $(BUILD_DIR)/libkumu$(AREXT)
ASDCP_SHLIB	= $(BUILD_DIR)/libasdcp$(AREXT)
else
AREXT   = .a
LIBS	= -lasdcp -lkumu -lpthread
endif

##
ifdef SSL_LIB
LDFLAGS += -L$(SSL_LIB)
LIBS	+= $(SSL_LIB)/libcrypto.a
ifdef WITH_SHARED
LIBS	+= $(SSL_LIB)/libcrypto$(AREXT)
SSL_SHLIB	= $(SSL_LIB)/libcrypto$(AREXT)
endif
else
LIBS	+= -lcrypto
ifdef WITH_SHARED
LIBS	+= /usr/lib/libcrypto$(AREXT)
SSL_SHLIB	= /usr/lib/libcrypto$(AREXT)
endif
endif
LDFLAGS += -L$(BUILD_DIR) -o 

##
ifdef WITH_XML_PARSER
LIBS	+= -lexpat
CFLAGS	+= -DASDCP_USE_EXPAT
endif


$(BUILD_DIR)/%.o : %.cpp
	@if [ ! -d $(BUILD_DIR) ]; then mkdir $(BUILD_DIR); fi
	$(CXX) $(CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.o : %.c
	@if [ ! -d $(BUILD_DIR) ]; then mkdir $(BUILD_DIR); fi
	$(CC) $(CFLAGS) -c -o $@ $<

#################################################
endif

CLI_TOOLS = \
	$(BUILD_DIR)/asdcp-test$(EXT) \
	$(BUILD_DIR)/klvwalk$(EXT) \
	$(BUILD_DIR)/wavesplit$(EXT) \
	$(BUILD_DIR)/blackwave$(EXT) \
	$(BUILD_DIR)/kmfilegen$(EXT) \
	$(BUILD_DIR)/kmuuidgen$(EXT) \
	$(BUILD_DIR)/kmrandgen$(EXT)
#	$(BUILD_DIR)/S429-5-cgi

.PHONY : all
all : $(CLI_TOOLS)

.PHONY : test
test : rng-tst gen-tst jp2k-tst jp2k-crypt-tst jp2k-stereo-tst jp2k-stereo-crypt-tst \
		wav-tst wav-crypt-tst mpeg-tst mpeg-crypt-tst

KUMU_FILES = \
	$(BUILD_DIR)/KM_fileio.o \
	$(BUILD_DIR)/KM_log.o \
	$(BUILD_DIR)/KM_prng.o \
	$(BUILD_DIR)/KM_util.o \
	$(BUILD_DIR)/KM_xml.o

LIBASDCP_FILES = \
	$(BUILD_DIR)/MPEG2_Parser.o \
	$(BUILD_DIR)/MPEG.o \
	$(BUILD_DIR)/JP2K_Codestream_Parser.o \
	$(BUILD_DIR)/JP2K_Sequence_Parser.o \
	$(BUILD_DIR)/JP2K.o \
	$(BUILD_DIR)/PCM_Parser.o \
	$(BUILD_DIR)/Wav.o \
	$(BUILD_DIR)/TimedText_Parser.o \
	$(BUILD_DIR)/KLV.o \
	$(BUILD_DIR)/Dict.o \
	$(BUILD_DIR)/MXFTypes.o \
	$(BUILD_DIR)/MXF.o \
	$(BUILD_DIR)/Index.o \
	$(BUILD_DIR)/Metadata.o \
	$(BUILD_DIR)/AS_DCP.o \
	$(BUILD_DIR)/AS_DCP_MXF.o \
	$(BUILD_DIR)/AS_DCP_AES.o \
	$(BUILD_DIR)/h__Reader.o \
	$(BUILD_DIR)/h__Writer.o \
	$(BUILD_DIR)/AS_DCP_MPEG2.o \
	$(BUILD_DIR)/AS_DCP_JP2K.o \
	$(BUILD_DIR)/AS_DCP_PCM.o \
	$(BUILD_DIR)/AS_DCP_TimedText.o

ifdef CODE_GEN
MDD.h : ullist.pl ULList.xml dict.xml DMS_Crypto.xml
	./ullist.pl ULList.xml dict.xml DMS_Crypto.xml > MDD.h

MDD.cpp : ullist.pl ULList.xml dict.xml DMS_Crypto.xml
	./ullist.pl -s ULList.xml dict.xml DMS_Crypto.xml > MDD.cpp

Metadata.h : Metadata_h.tt2 mxfgen.pl MXF_def.pl
	./mxfgen.pl MXF_def.pl Metadata_h.tt2 > Metadata.h

Metadata.cpp : Metadata.h Metadata_cpp.tt2
	./mxfgen.pl MXF_def.pl Metadata_cpp.tt2 > Metadata.cpp
endif

dep.make :
	for file in *.cpp; do \
	    srcname=`echo $$file | perl -pe 'm|([^/]+).cpp|; $$_=$$1'`; \
	    gcc -I. -MT "\$$(BUILD_DIR)/$$srcname.o" -MM $$file; \
	done > dep.make

DIST_FILES = README COPYING GNUmakefile dep.make \
		MPEG.h MPEG.cpp MPEG2_Parser.cpp \
		Wav.h Wav.cpp PCM_Parser.cpp PCMParserList.h PCMParserList.cpp WavFileWriter.h \
		JP2K.h JP2K.cpp JP2K_Codestream_Parser.cpp JP2K_Sequence_Parser.cpp \
		MDD.h MDD.cpp Dict.cpp KLV.h KLV.cpp MXFTypes.h MXFTypes.cpp \
		MXF.h MXF.cpp Index.cpp Metadata.h Metadata.cpp S12MTimecode.h \
		AS_DCP.h AS_DCP_internal.h AS_DCP.cpp AS_DCP_MXF.cpp \
		AS_DCP_TimedText.cpp TimedText_Parser.cpp \
		AS_DCP_AES.cpp AS_DCP_MPEG2.cpp AS_DCP_JP2K.cpp AS_DCP_PCM.cpp h__Reader.cpp h__Writer.cpp \
		KM_error.h KM_fileio.cpp KM_fileio.h KM_log.cpp KM_log.h KM_memio.h KM_mutex.h KM_platform.h \
		KM_prng.cpp KM_prng.h KM_util.cpp KM_util.h KM_xml.h KM_xml.cpp \
		asdcp-test.cpp blackwave.cpp klvwalk.cpp wavesplit.cpp kmrandgen.cpp kmuuidgen.cpp kmfilegen.cpp \
		asdcp-version.cpp asdcp-mem-test.cpp jp2k-test.cpp S429-5-cgi.cpp \
		fips-186-rng-test.cpp fips-186-test-harness.pl path-test.cpp

include ./dep.make


$(BUILD_DIR)/libkumu$(AREXT) : $(KUMU_FILES)
	rm -f $@
	$(AR) $(ARFLAGS)$@ $(KUMU_FILES) $(SSL_SHLIB)

$(BUILD_DIR)/libasdcp$(AREXT) : $(BUILD_DIR)/libkumu$(AREXT) $(LIBASDCP_FILES)
	rm -f $@
	$(AR) $(ARFLAGS)$@ $(LIBASDCP_FILES) $(KUMU_SHLIB) $(SSL_SHLIB)

TEST_OBJ = $(BUILD_DIR)/asdcp-test.o $(BUILD_DIR)/PCMParserList.o
$(BUILD_DIR)/asdcp-test$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(TEST_OBJ)
	$(LD) $(LDFLAGS)$@ $(TEST_OBJ) $(LIBS)

$(BUILD_DIR)/wavesplit$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(BUILD_DIR)/wavesplit.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/wavesplit.o $(LIBS)

$(BUILD_DIR)/blackwave$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(BUILD_DIR)/blackwave.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/blackwave.o $(LIBS)

MEM_TEST_OBJ = $(BUILD_DIR)/asdcp-mem-test.o
$(BUILD_DIR)/asdcp-mem-test$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(MEM_TEST_OBJ)
	$(LD) $(LDFLAGS)$@ $(MEM_TEST_OBJ) $(LIBS)

# large file test
ifeq ($(ARCH),win32)
LF_TEST_LIBS	= ole32.lib libeay32.lib
else
LF_TEST_LIBS	= $(SSL_LIB)/libcrypto.a
endif

$(BUILD_DIR)/kmuuidgen$(EXT) : $(BUILD_DIR)/libkumu$(AREXT) $(BUILD_DIR)/kmuuidgen.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/kmuuidgen.o $(LIBS)

$(BUILD_DIR)/kmrandgen$(EXT) : $(BUILD_DIR)/libkumu$(AREXT) $(BUILD_DIR)/kmrandgen.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/kmrandgen.o $(LIBS)

$(BUILD_DIR)/kmfilegen$(EXT) : $(BUILD_DIR)/libkumu$(AREXT) $(BUILD_DIR)/kmfilegen.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/kmfilegen.o $(LIBS)

$(BUILD_DIR)/path-test$(EXT) : $(BUILD_DIR)/libkumu$(AREXT) $(BUILD_DIR)/path-test.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/path-test.o $(LIBS)


JP2K_TEST_OBJ = $(BUILD_DIR)/JP2K.o $(BUILD_DIR)/jp2k-test.o
$(BUILD_DIR)/jp2k-test$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(JP2K_TEST_OBJ)
	$(LD) $(LDFLAGS)$@ $(JP2K_TEST_OBJ) $(LIBS)

KLVWALK_OBJ = $(BUILD_DIR)/klvwalk.o
$(BUILD_DIR)/klvwalk$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(KLVWALK_OBJ)
	$(LD) $(LDFLAGS)$@ $(KLVWALK_OBJ) $(LIBS)

TT_CGI_OBJ = $(BUILD_DIR)/S429-5-cgi.o
$(BUILD_DIR)/S429-5-cgi$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(TT_CGI_OBJ)
	$(LD) $(LDFLAGS)$@ $(TT_CGI_OBJ) $(LIBS)

RNG_TEST_OBJ = $(BUILD_DIR)/fips-186-rng-test.o
$(BUILD_DIR)/fips-186-rng-test$(EXT) : $(BUILD_DIR)/libasdcp$(AREXT) $(RNG_TEST_OBJ)
	$(LD) $(LDFLAGS)$@ $(RNG_TEST_OBJ) $(LIBS)


###
# test targets

path-tst : $(BUILD_DIR)/path-test
	$(BUILD_DIR)/path-test

TEST_FILES = ../test
TEST_FILE_PREFIX = DCPd1-M1

CRYPT_KEY = 70e0de21c98fbd455ad5b8042edb41a6
CRYPT_KEY_B = aa2d05475d568cd52cb3415e65cba76f

rng-tst : $(BUILD_DIR)/fips-186-rng-test$(EXT) fips-186-test-harness.pl
	./fips-186-test-harness.pl $(BUILD_DIR)/fips-186-rng-test$(EXT)

gen-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -g

mem-tst : $(BUILD_DIR)/asdcp-mem-test$(EXT)
	$(BUILD_DIR)/asdcp-mem-test$(EXT) $(TEST_FILES)/sample_mpeg.mxf

lf-tst	: $(BUILD_DIR)/kmfilegen$(EXT)
	$(BUILD_DIR)/kmfilegen$(EXT) -c 50 $(TEST_FILES)/large_file.bin
	$(BUILD_DIR)/kmfilegen$(EXT) $(TEST_FILES)/large_file.bin

# mxfwrap mpeg compatibility test
compat-tst: mxfwrap-mpeg-tst mxfwrap-wav-tst
mxfwrap-mpeg-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -x $(TEST_FILES)/compat $(TEST_FILES)/sample_mpeg.mxf
	cmp $(TEST_FILES)/$(TEST_FILE_PREFIX).mpg $(TEST_FILES)/compat.ves

mxfwrap-wav-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -x $(TEST_FILES)/compat $(TEST_FILES)/sample_wav.mxf
	cmp $(TEST_FILES)/$(TEST_FILE_PREFIX).wav $(TEST_FILES)/compat_1.wav

# MPEG tests
mpeg-tst : mpeg-write-tst mpeg-read-tst
mpeg-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -c $(TEST_FILES)/write_test_mpeg.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX).mpg

mpeg-read-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -x $(TEST_FILES)/extract $(TEST_FILES)/write_test_mpeg.mxf
	cmp $(TEST_FILES)/$(TEST_FILE_PREFIX).mpg $(TEST_FILES)/extract.ves

mpeg-start-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -G $(TEST_FILES)/write_test_mpeg.mxf

# crypto MPEG tests
mpeg-crypt-tst : mpeg-crypt-write-tst mpeg-crypt-read-tst
mpeg-crypt-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY) \
		-c $(TEST_FILES)/write_crypt_test_mpeg.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX).mpg
	$(BUILD_DIR)/asdcp-test$(EXT) -i $(TEST_FILES)/write_crypt_test_mpeg.mxf

mpeg-crypt-read-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	($(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY_B) \
		-x $(TEST_FILES)/plaintext $(TEST_FILES)/write_crypt_test_mpeg.mxf; \
	  if [ $$? -eq 1 ]; then exit 0; fi; exit 1 )
	$(BUILD_DIR)/asdcp-test$(EXT) -m -k $(CRYPT_KEY) \
		-x $(TEST_FILES)/plaintext $(TEST_FILES)/write_crypt_test_mpeg.mxf
	cmp $(TEST_FILES)/$(TEST_FILE_PREFIX).mpg $(TEST_FILES)/plaintext.ves

# JPEG 2000 tests
# jp2k test output directories
JP2K_PREFIX = MM_2k_XYZ_

$(TEST_FILES)/extract :
	mkdir $(TEST_FILES)/extract

$(TEST_FILES)/plaintext :
	mkdir $(TEST_FILES)/plaintext

jp2k-tst : jp2k-write-tst jp2k-read-tst

jp2k-p-tst : $(BUILD_DIR)/jp2k-test$(EXT)
	$(BUILD_DIR)/jp2k-test$(EXT) $(TEST_FILES)/$(TEST_FILE_PREFIX)/MM_2k_XYZ_000000.j2c

jp2k-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -c $(TEST_FILES)/write_test_jp2k.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX)

jp2k-read-tst : $(TEST_FILES)/extract $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -x $(TEST_FILES)/extract/$(JP2K_PREFIX) $(TEST_FILES)/write_test_jp2k.mxf
	for file in `ls ../test/$(TEST_FILE_PREFIX)`; do \
	  echo "$$file"; \
	  cmp ../test/$(TEST_FILE_PREFIX)/$$file ../test/extract/$$file; \
	  if [ $$? -ne 0 ]; then \
	    exit 1; \
	  fi; \
	done

# crypto JPEG 2000 tests
jp2k-crypt-tst : jp2k-crypt-write-tst jp2k-crypt-read-tst
jp2k-crypt-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY) \
		-c $(TEST_FILES)/write_crypt_test_jp2k.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX)
	$(BUILD_DIR)/asdcp-test$(EXT) -i $(TEST_FILES)/write_crypt_test_jp2k.mxf

jp2k-crypt-read-tst : $(TEST_FILES)/plaintext $(BUILD_DIR)/asdcp-test$(EXT)
	($(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY_B) \
		-x $(TEST_FILES)/plaintext $(TEST_FILES)/write_crypt_test_jp2k.mxf; \
	  if [ $$? -eq 1 ]; then exit 0; fi; exit 1 )
	$(BUILD_DIR)/asdcp-test$(EXT) -m -k $(CRYPT_KEY) \
		-x $(TEST_FILES)/plaintext/$(JP2K_PREFIX) $(TEST_FILES)/write_crypt_test_jp2k.mxf
	for file in `ls ../test/$(TEST_FILE_PREFIX)`; do \
	  echo "$$file"; \
	  cmp ../test/$(TEST_FILE_PREFIX)/$$file ../test/plaintext/$$file; \
	  if [ $$? -ne 0 ]; then \
	    exit 1; \
	  fi; \
	done

# JPEG 2000 stereoscopic tests

jp2k-stereo-tst : jp2k-stereo-write-tst jp2k-stereo-read-tst

jp2k-stereo-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -3 -c $(TEST_FILES)/write_test_jp2k.mxf \
		$(TEST_FILES)/$(TEST_FILE_PREFIX) $(TEST_FILES)/$(TEST_FILE_PREFIX)

jp2k-stereo-read-tst : $(TEST_FILES)/extract $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -3 -x $(TEST_FILES)/extract/$(JP2K_PREFIX) $(TEST_FILES)/write_test_jp2k.mxf
	for file in `ls ../test/$(TEST_FILE_PREFIX)`; do \
	  echo "$$file"; \
	  cmp ../test/$(TEST_FILE_PREFIX)/$$file ../test/extract/$$file; \
	  if [ $$? -ne 0 ]; then \
	    exit 1; \
	  fi; \
	done

# crypto JPEG 2000 stereoscopic tests
jp2k-stereo-crypt-tst : jp2k-stereo-crypt-write-tst jp2k-stereo-crypt-read-tst
jp2k-stereo-crypt-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY) \
		-3 -c $(TEST_FILES)/write_crypt_test_jp2k.mxf \
			$(TEST_FILES)/$(TEST_FILE_PREFIX) $(TEST_FILES)/$(TEST_FILE_PREFIX)
	$(BUILD_DIR)/asdcp-test$(EXT) -i $(TEST_FILES)/write_crypt_test_jp2k.mxf

jp2k-stereo-crypt-read-tst : $(TEST_FILES)/plaintext $(BUILD_DIR)/asdcp-test$(EXT)
	($(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY_B) \
		-3 -x $(TEST_FILES)/plaintext $(TEST_FILES)/write_crypt_test_jp2k.mxf; \
	  if [ $$? -eq 1 ]; then exit 0; fi; exit 1 )
	$(BUILD_DIR)/asdcp-test$(EXT) -m -k $(CRYPT_KEY) \
		-3 -x $(TEST_FILES)/plaintext/$(JP2K_PREFIX) $(TEST_FILES)/write_crypt_test_jp2k.mxf
	for file in `ls ../test/$(TEST_FILE_PREFIX)`; do \
	  echo "$$file"; \
	  cmp ../test/$(TEST_FILE_PREFIX)/$$file ../test/plaintext/$$file; \
	  if [ $$? -ne 0 ]; then \
	    exit 1; \
	  fi; \
	done

# WAV tests
wav-tst : wav-write-tst wav-read-tst
wav-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -c $(TEST_FILES)/write_test_wav.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX).wav

wav-read-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -x $(TEST_FILES)/extract $(TEST_FILES)/write_test_wav.mxf
	cmp $(TEST_FILES)/$(TEST_FILE_PREFIX).wav $(TEST_FILES)/extract_1.wav

# crypto WAV tests
wav-crypt-tst : wav-crypt-write-tst wav-crypt-read-tst
wav-crypt-write-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	$(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY) \
		-c $(TEST_FILES)/write_crypt_test_wav.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX).wav
	$(BUILD_DIR)/asdcp-test$(EXT) -i $(TEST_FILES)/write_crypt_test_wav.mxf
	$(BUILD_DIR)/asdcp-test$(EXT) -p 23 -k $(CRYPT_KEY) \
		-c $(TEST_FILES)/write_crypt_test_2398_wav.mxf $(TEST_FILES)/$(TEST_FILE_PREFIX).wav
	$(BUILD_DIR)/asdcp-test$(EXT) -i $(TEST_FILES)/write_crypt_test_2398_wav.mxf

wav-crypt-read-tst : $(BUILD_DIR)/asdcp-test$(EXT)
	( $(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY_B) \
		-x $(TEST_FILES)/plaintext $(TEST_FILES)/write_crypt_test_wav.mxf; \
	  if [ $$? -eq 1 ]; then exit 0; fi; exit 1 )
	$(BUILD_DIR)/asdcp-test$(EXT) -m -k $(CRYPT_KEY) \
		-x $(TEST_FILES)/plaintext $(TEST_FILES)/write_crypt_test_wav.mxf
	cmp $(TEST_FILES)/$(TEST_FILE_PREFIX).wav $(TEST_FILES)/plaintext_1.wav
	( $(BUILD_DIR)/asdcp-test$(EXT) -k $(CRYPT_KEY_B) \
		-x $(TEST_FILES)/plaintext_2398 $(TEST_FILES)/write_crypt_test_2398_wav.mxf; \
	  if [ $$? -eq 1 ]; then exit 0; fi; exit 1 )
	$(BUILD_DIR)/asdcp-test$(EXT) -m -k $(CRYPT_KEY) \
		-x $(TEST_FILES)/plaintext_2398 $(TEST_FILES)/write_crypt_test_2398_wav.mxf

###
# POSIX-only install target
ifneq ($(ARCH),win32)
INSTALL_PREFIX = /usr/local

.PHONY : install
install: $(BUILD_DIR)/libasdcp$(AREXT) $(CLI_TOOLS)
	for file in $(CLI_TOOLS); do \
	  install -v -p -s $$file $(INSTALL_PREFIX)/bin; \
	done
endif

###
.PHONY : clean
clean :
	rm -rf *~ $(BUILD_DIR)/*
ifeq ($(ARCH),win32)
	rm -f vc60.*
else
	rm -f core
endif


###
# docs:
#	doxygen doxyfile.cfg

###
ifeq ($(OS),Windows_NT)
MD5	= md5sum.exe
else
ifeq ($(ARCH),Darwin)
MD5	= md5
else
MD5	= md5sum
endif
endif

MANIFEST : $(DIST_FILES)
	$(MD5) $(DIST_FILES) >MANIFEST

###
$(BUILD_DIR)/asdcp-version$(EXT) : $(BUILD_DIR)/asdcp-version.o
	$(LD) $(LDFLAGS)$@ $(BUILD_DIR)/asdcp-version.o $(LIBS)


.PHONY : dist 
dist : $(BUILD_DIR)/asdcp-version$(EXT) MANIFEST $(DIST_FILES)
	( version=`$(BUILD_DIR)/asdcp-version`; \
	  if [ -d "$(PACKAGE_NAME)-$$version" ]; then \
	    echo "Archive directory exists, please remove $(PACKAGE_NAME)-$$version"; exit 1; fi; \
	  mkdir $(PACKAGE_NAME)-$$version; \
	  cp MANIFEST $(DIST_FILES) $(PACKAGE_NAME)-$$version; \
	  tar czvf $(PACKAGE_NAME)-$$version.tar.gz $(PACKAGE_NAME)-$$version )

##
$(BUILD_DIR) :
	mkdir -p $@

#
# end asdcplib GNUmakefile
#
