# $Id$
#
# makefile for OpenJPEG codec

OPENJPEG_DIR = ../libopenjpeg

ifndef DEBUG
  LDFLAGS = -s -lm
else
  LDFLAGS = -lm
endif

CFLAGS = -Wall -O3 -fno-strength-reduce -fomit-frame-pointer -I$(OPENJPEG_DIR)

OBJ_DIR_W32 = obj.w32
BIN_DIR_W32 = bin.w32
LIB_DIR_W32 = $(OPENJPEG_DIR)/lib.w32

ifdef MINGW32
  CC = i386-mingw32-gcc
  CFLAGS += -DDONT_HAVE_GETOPT
  OBJ_DIR = $(OBJ_DIR_W32)
  BIN_DIR = $(BIN_DIR_W32)
  LIB_DIR = lib.w32
  all:	$(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) \
	$(addprefix $(BIN_DIR)/,j2k_to_image.exe image_to_j2k.exe)
else
  CC = gcc
  OBJ_DIR = obj
  BIN_DIR = bin
  LIB_DIR = lib
  all:	$(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) \
  	$(addprefix $(BIN_DIR)/,j2k_to_image image_to_j2k)
endif

ifdef DYNAMIC
  ifdef MINGW32
    LIB_OPENJPEG = $(LIB_DIR)/libopenjpeg.dll
    LDFLAGS += -L$(LIB_DIR) -lopenjpeg
  else
    LIB_OPENJPEG = $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.so
    LDFLAGS += -L$(OPENJPEG_DIR)/$(LIB_DIR) -lopenjpeg
  endif
else
  LIB_OPENJPEG = $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.a
  LDFLAGS += $(LIB_OPENJPEG)
endif

$(BIN_DIR):
	mkdir $(BIN_DIR)

$(OBJ_DIR):
	mkdir $(OBJ_DIR)

$(LIB_DIR):	
	mkdir $(LIB_DIR)

$(LIB_DIR)/libopenjpeg.dll: $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.dll
	ln -sf ../$< $@
$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.dll:
	cd $(OPENJPEG_DIR) && \
	$(MAKE) $(OBJ_DIR) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.dll
$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.a:
	cd $(OPENJPEG_DIR) && \
	$(MAKE) $(OBJ_DIR) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.a
$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.so:
	cd $(OPENJPEG_DIR) && \
	$(MAKE) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.so

$(OBJ_DIR)/%.o:
	$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

$(OBJ_DIR)/getopt.o:		compat/getopt.c
$(OBJ_DIR)/convert.o:		convert.c
$(OBJ_DIR)/j2k_to_image.o:	j2k_to_image.c
$(OBJ_DIR)/image_to_j2k.o:	image_to_j2k.c convert.h

J2I_OBJS = $(addprefix $(OBJ_DIR)/,j2k_to_image.o)
I2J_OBJS = $(addprefix $(OBJ_DIR)/,image_to_j2k.o convert.o)

$(BIN_DIR)/j2k_to_image:	$(J2I_OBJS) $(LIB_OPENJPEG)
	${CC} -o $@  $(J2I_OBJS) ${LDFLAGS} 

$(BIN_DIR)/image_to_j2k:	$(I2J_OBJS) $(LIB_OPENJPEG)
	${CC} -o $@  $(I2J_OBJS) ${LDFLAGS} 

$(BIN_DIR)/j2k_to_image.exe:	$(J2I_OBJS) $(LIB_OPENJPEG)
	${CC} -o $@  $(J2I_OBJS) ${LDFLAGS} 

$(BIN_DIR)/image_to_j2k.exe:	$(I2J_OBJS) $(LIB_OPENJPEG) $(OBJ_DIR)/getopt.o
	${CC} -o $@  $(I2J_OBJS) ${LDFLAGS} $(OBJ_DIR)/getopt.o

clean:
	rm -f $(BIN_DIR_W32)/* $(BIN_DIR)/* $(OBJ_DIR_W32)/* $(OBJ_DIR)/*