all: library samples 

# OpenMP support
#OPENMP_CFLAGS=-fopenmp

# LCMS support
#LCMS_DEF=-DUSE_LCMS -I/usr/local/include
#LCMS_LIB=-L/usr/local/lib -llcms

# Common flags
# WARNING: library order matters
COMMON_LIBS=-lws2_32 -lm ${LCMS_LIB}
CLIBS=-L./lib  -lraw ${COMMON_LIBS}
CFLAGS=-O4 -I. -w -DLIBRAW_NODLL ${OPENMP_CFLAGS}

DCRAW_LIB_OBJECTS=object/libraw_cxx.o object/libraw_c_api.o object/dcraw_common.o object/foveon.o object/dcraw_fileio.o

library: lib/libraw.a

samples: bin/raw-identify bin/simple_dcraw bin/dcraw_emu bin/dcraw_half bin/mem_image bin/mem_image bin/unprocessed_raw bin/4channels

install: library
	@if [ -d /usr/local/include ] ; then cp -R libraw /usr/local/include/ ; else echo 'no /usr/local/include' ; fi
	@if [ -d /usr/local/lib ] ; then cp lib/libraw.a /usr/local/lib/ ; else echo 'no /usr/local/lib' ; fi

install-samples: samples
	@if [ -d /usr/local/bin ] ; then cp bin/[a-z]* /usr/local/bin/ ; else echo 'no /usr/local/bin' ; fi

# Samples

bin/raw-identify: lib/libraw.a samples/raw-identify.cpp
	g++ -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/raw-identify samples/raw-identify.cpp ${CLIBS} 

bin/unprocessed_raw: lib/libraw.a samples/unprocessed_raw.cpp
	g++ -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/unprocessed_raw samples/unprocessed_raw.cpp ${CLIBS}

bin/4channels: lib/libraw.a samples/4channels.cpp
	g++ -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/4channels samples/4channels.cpp ${CLIBS}

bin/simple_dcraw: lib/libraw.a samples/simple_dcraw.cpp
	g++ -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/simple_dcraw samples/simple_dcraw.cpp ${CLIBS}

bin/mem_image: lib/libraw.a samples/mem_image.cpp
	g++ -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/mem_image samples/mem_image.cpp ${CLIBS}

bin/dcraw_half: lib/libraw.a object/dcraw_half.o
	gcc -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/dcraw_half object/dcraw_half.o ${CLIBS} -lstdc++

bin/dcraw_emu: lib/libraw.a samples/dcraw_emu.cpp
	g++ -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o bin/dcraw_emu samples/dcraw_emu.cpp ${CLIBS}

#Libraries

# Non-threaded library

object/dcraw_common.o: internal/dcraw_common.cpp
	g++ -c -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o object/dcraw_common.o internal/dcraw_common.cpp

object/dcraw_fileio.o: internal/dcraw_fileio.cpp
	g++ -c -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o object/dcraw_fileio.o internal/dcraw_fileio.cpp

object/foveon.o: internal/foveon.cpp
	g++ -c -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o object/foveon.o internal/foveon.cpp

object/libraw_cxx.o: src/libraw_cxx.cpp
	g++ -c -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o object/libraw_cxx.o src/libraw_cxx.cpp

object/libraw_c_api.o: src/libraw_c_api.cpp
	g++ -c -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o object/libraw_c_api.o src/libraw_c_api.cpp

object/dcraw_half.o: samples/dcraw_half.c
	gcc -c -DLIBRAW_NOTHREADS ${LCMS_DEF} ${CFLAGS} -o object/dcraw_half.o samples/dcraw_half.c

lib/libraw.a: ${DCRAW_LIB_OBJECTS}
	del lib\\libraw.a
	ar crv lib/libraw.a ${DCRAW_LIB_OBJECTS}
	ranlib lib/libraw.a	

# Clean	

clean:
	del bin\\*.dSYM
	del lib\\lib*.a bin\\*.exe object\\*o 
