SOURCES = ufraw.c ufraw-gimp.c ufraw_ufraw.c ufraw_preview.c ufraw_routines.c dcraw.c dcraw_api.c iccjpeg.c
# ufraw_icon.h, ufraw_icon.ico are generated from ufraw_icon.png.
# They are included in the distribution files so ufraw does not depend on
# their generating utilities.
DIST_FILES = Makefile README ufraw.h dcraw_api.h blackbody.h ufraw_icon.png ufraw_icon.h ufraw_icon.ico ufraw_icon.rc iccjpeg.h gimp-2.0.pc
WININST_DIST = ufraw-setup.iss ufraw-setup.bmp ufraw_icon.bmp
TARGETS = ufraw ufraw-gimp
ifdef UFRAW_DCRAW
	TARGETS += dcraw
endif
CHECKS = gtk-version.check

VER = ufraw-0.4
DATE = `date +%Y%m%d`
OBJECTS = $(SOURCES:.c=.o) dcraw_nomain.o
ifndef UFRAW_DCRAW
	OBJECTS := $(filter-out dcraw.o,$(OBJECTS))
endif
CC = gcc
CFLAGS += -std=gnu99 -DUFRAW_VERSION='"$(VER)"'
# To check that deprecated features are not used:
#CFLAGS += -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED
LDFLAGS += -llcms
GIMPTOOL = gimptool-2.0
INSTALLER = install-admin
INSTALL_USER = $(GIMPTOOL) --install-bin ufraw-gimp
INSTALL_ADMIN = $(GIMPTOOL) --install-admin-bin ufraw-gimp
UFRAW_ICON = 
ENV := $(shell uname -o 2> /dev/null || uname)
ifeq ($(ENV),Cygwin)
	WIN32 = yes
	ifndef PREFIX
		PREFIX = /cygdrive/c/mingw32
	endif
endif
ifeq ($(ENV),MINGW32_NT-5.1)
	WIN32 = yes
	ifndef PREFIX
		PREFIX = /c/mingw32
	endif
endif
ifdef WIN32
	CC += -mno-cygwin -mwindows -mms-bitfields
	CONSOLE = -mconsole
	LDFLAGS += -lws2_32
	# For some reason this is needed on Windows:
	CFLAGS += -DPACKAGE_NAME=lcms
	GIMPTOOL = pkg-config --define-variable=prefix=$(PREFIX) gimp-2.0
	export PKG_CONFIG_PATH := .
	COMMON_PLUGINS = "$(PROGRAMFILES)\GIMP-2.0\lib\gimp\2.0\plug-ins"
	USER_PLUGINS = "$(USERPROFILE)\.gimp-2.0\plug-ins"
	INSTALLER = install-windows
	INSTALL_ADMIN = cp ufraw-gimp.exe $(COMMON_PLUGINS)
	INSTALL_USER = cp ufraw-gimp.exe $(USER_PLUGINS)
	TARGETS := $(TARGETS:%=%.exe)
	EXEEXT = .exe
	UFRAW_ICON = ufraw_icon.opc
	ISCC = "$(PROGRAMFILES)\Inno Setup 5\ISCC.exe"
else
	ISCC = wine $(HOME)/.wine/dosdevices/c\:/Program\ Files/Inno\ Setup\ 5/ISCC.exe
endif
ifdef PREFIX
	CFLAGS += -I$(PREFIX)/include
	LDFLAGS += -L$(PREFIX)/lib
	ifdef PKG_CONFIG_PATH
		export PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):$(PREFIX)/lib/pkgconfig
	else
		export PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig
	endif
else
	PREFIX = /usr/local
endif
CFLAGS += `$(GIMPTOOL) --cflags`
CWARNINGS = -W -Wall
LDFLAGS += `$(GIMPTOOL) --libs` -lm
OPTIMIZE = -O3 -ffast-math -fomit-frame-pointer
MACHINE := $(shell uname -m)
ifeq ($(MACHINE),i686)
	OPTIMIZE += -march=i686
endif
# if you have pentium4, uncommenting the next line will give better results
#OPTIMIZE += -march=pentium4

# There is a -floop-optimize bug in gcc 3.3.2 on powerpc (resolved in gcc 3.4)
ifeq ($(MACHINE),Power Macintosh)
	OPTIMIZE += -fno-loop-optimize -mcpu=powerpc
endif
ifeq ($(MACHINE),ppc)
	OPTIMIZE += -fno-loop-optimize -mcpu=powerpc
endif
ifdef UFRAW_NO_JPEG
	CFLAGS += -DNO_JPEG
else
	LDFLAGS += -ljpeg
endif
ifdef UFRAW_NO_TIFF
	CFLAGS += -DNO_TIFF
else
	LDFLAGS += -ltiff
endif
ifdef UFRAW_NO_ZLIB
	CFLAGS += -DNO_ZLIB
else
	LDFLAGS += -lz
endif
ifdef UFRAW_DEBUG
	CFLAGS += -g -DDEBUG
	LDFLAGS += $(CONSOLE)
endif

build: $(CHECKS) $(TARGETS)

compile: $(CHECKS) $(OBJECTS)

gtk-version.check:
	pkg-config --atleast-version 2.4 gtk+-2.0 && touch $@

ufraw$(EXEEXT): ufraw.o ufraw_ufraw.o ufraw_routines.o ufraw_preview.o dcraw_api.o dcraw_nomain.o iccjpeg.o $(UFRAW_ICON)
	$(CC) -o $@ $^ $(LDFLAGS)

ufraw-gimp$(EXEEXT): ufraw-gimp.o ufraw_ufraw.o ufraw_preview.o ufraw_routines.o dcraw_api.o dcraw_nomain.o $(UFRAW_ICON)
	$(CC) -o $@ $^ $(LDFLAGS)
 
dcraw$(EXEEXT): dcraw.o
	$(CC) $(CONSOLE) -o $@ $^ $(LDFLAGS)

dcraw.o: dcraw.c Makefile
	$(CC) -c $(CFLAGS) $(OPTIMIZE) -Wall -o $@ $<

dcraw_nomain.o: dcraw.c Makefile
	$(CC) -c $(CFLAGS) $(OPTIMIZE) $(CWARNINGS) -Wno-sign-compare -DDCRAW_NOMAIN -o $@ $<

%.o: %.c
	$(CC) -c $(CFLAGS) $(OPTIMIZE) $(CWARNINGS) -o $@ $<

ufraw_icon.h: ufraw_icon.png
	gdk-pixbuf-csource --raw $^ --name=ufraw_icon > $@

ufraw_icon.ico: ufraw_icon.png
	{ pngtopnm $^ | pnmquant 256; pngtopnm -alpha $^; } | ppmtowinicon -andpgms -output $@ - -

ufraw_icon.opc: ufraw_icon.rc ufraw_icon.ico
	windres -i $< -o $@

ufraw.o: ufraw.c ufraw.h ufraw_icon.h iccjpeg.h Makefile

ufraw-gimp.o: ufraw-gimp.c ufraw.h ufraw_icon.h Makefile
 
ufraw_ufraw.o: ufraw_ufraw.c ufraw.h dcraw_api.h Makefile

ufraw_preview.o: ufraw_preview.c ufraw.h ufraw_icon.h Makefile

ufraw_routines.o: ufraw_routines.c ufraw.h blackbody.h Makefile
 
dcraw_api.o: dcraw_api.c dcraw_api.h Makefile

iccjpeg.o: iccjpeg.c iccjpeg.h

install: $(INSTALLER)
 
install-user: build
	$(INSTALL_USER)
 
install-admin: build
	$(INSTALL_ADMIN)
	install ufraw$(EXEEXT) $(PREFIX)/bin/ufraw$(EXEEXT)

uninstall-user:
	gimptool-2.0 --uninstall-bin ufraw-gimp

uninstall-admin:
	gimptool-2.0 --uninstall-admin-bin ufraw-gimp
	rm $(PREFIX)/bin/ufraw$(EXEEXT)

uninstall-rawphoto-user:
	gimptool-2.0 --uninstall-bin rawphoto

uninstall-rawphoto-admin:
	gimptool-2.0 --uninstall-admin-bin rawphoto

install-windows: windows-installer
	./$(VER)-setup

windows-installer: $(VER)-setup.exe

$(VER)-setup.exe: ufraw-setup.iss ufraw.exe ufraw-gimp.exe ufraw-setup.bmp ufraw_icon.bmp ufraw_icon.ico
	$(ISCC) //Q //F$(VER)-setup ufraw-setup.iss

clean:
	rm -f $(TARGETS) $(OBJECTS) $(CHECKS) $(UFRAW_ICON)

dist:
	mkdir $(VER)
	cp --parents $(SOURCES) $(DIST_FILES) $(VER)
	tar czf $(VER)-$(DATE).tar.gz $(VER)
	rm -rf $(VER)

wininst-dist:
	mkdir $(VER)
	cp --parents $(WININST_DIST) $(VER)
	tar -czf $(VER)-setup-$(DATE).tar.gz $(VER)
	rm -rf $(VER)
