export TOPDIR ?= $(CURDIR)/..
include $(TOPDIR)/global_config

OVERLAYS := \
	$(OBJDIR)/overlay_direct_rgb161616.o \
	$(OBJDIR)/overlay_direct_rgb888.o \
	$(OBJDIR)/overlay_direct_rgba16161616.o \
	$(OBJDIR)/overlay_direct_rgba8888.o \
	$(OBJDIR)/overlay_direct_rgba_float.o \
	$(OBJDIR)/overlay_direct_rgb_float.o \
	$(OBJDIR)/overlay_direct_yuv161616.o \
	$(OBJDIR)/overlay_direct_yuv888.o \
	$(OBJDIR)/overlay_direct_yuva16161616.o \
	$(OBJDIR)/overlay_direct_yuva8888.o \
	$(OBJDIR)/overlay_nearest_rgb161616.o \
	$(OBJDIR)/overlay_nearest_rgb888.o \
	$(OBJDIR)/overlay_nearest_rgba16161616.o \
	$(OBJDIR)/overlay_nearest_rgba8888.o \
	$(OBJDIR)/overlay_nearest_rgba_float.o \
	$(OBJDIR)/overlay_nearest_rgb_float.o \
	$(OBJDIR)/overlay_nearest_yuv161616.o \
	$(OBJDIR)/overlay_nearest_yuv888.o \
	$(OBJDIR)/overlay_nearest_yuva16161616.o \
	$(OBJDIR)/overlay_nearest_yuva8888.o \
	$(OBJDIR)/overlay_sample_rgb161616.o \
	$(OBJDIR)/overlay_sample_rgb888.o \
	$(OBJDIR)/overlay_sample_rgba16161616.o \
	$(OBJDIR)/overlay_sample_rgba8888.o \
	$(OBJDIR)/overlay_sample_rgba_float.o \
	$(OBJDIR)/overlay_sample_rgb_float.o \
	$(OBJDIR)/overlay_sample_yuv161616.o \
	$(OBJDIR)/overlay_sample_yuv888.o \
	$(OBJDIR)/overlay_sample_yuva16161616.o \
	$(OBJDIR)/overlay_sample_yuva8888.o \

OBJS := $(OVERLAYS) \
	$(OBJDIR)/aattachmentpoint.o \
	$(OBJDIR)/aautomation.o \
	$(OBJDIR)/aboutprefs.o \
	$(OBJDIR)/adeviceprefs.o \
	$(OBJDIR)/aedit.o \
	$(OBJDIR)/aedits.o \
	$(OBJDIR)/affine.o \
	$(OBJDIR)/amodule.o \
	$(OBJDIR)/androidcontrol.o \
	$(OBJDIR)/apatchgui.o \
	$(OBJDIR)/apluginarray.o \
	$(OBJDIR)/aplugin.o \
	$(OBJDIR)/apluginset.o \
	$(OBJDIR)/appearanceprefs.o \
	$(OBJDIR)/arender.o \
	$(OBJDIR)/assetedit.o \
	$(OBJDIR)/asset.o \
	$(OBJDIR)/assetpopup.o \
	$(OBJDIR)/assetremove.o \
	$(OBJDIR)/assets.o \
	$(OBJDIR)/atrack.o \
	$(OBJDIR)/attachmentpoint.o \
	$(OBJDIR)/audioalsa.o \
	$(OBJDIR)/audiodevice.o \
	$(OBJDIR)/audiodvb.o \
	$(OBJDIR)/audioesound.o \
	$(OBJDIR)/audioidevice.o \
	$(OBJDIR)/audioodevice.o \
	$(OBJDIR)/audiooss.o \
	$(OBJDIR)/audiopulse.o \
	$(OBJDIR)/audiov4l2mpeg.o \
	$(OBJDIR)/autoconf.o \
	$(OBJDIR)/automation.o \
	$(OBJDIR)/auto.o \
	$(OBJDIR)/autos.o \
	$(OBJDIR)/awindowgui.o \
	$(OBJDIR)/awindow.o \
	$(OBJDIR)/batch.o \
	$(OBJDIR)/batchrender.o \
	$(OBJDIR)/bdcreate.o \
	$(OBJDIR)/binfolder.o \
	$(OBJDIR)/bitspopup.o \
	$(OBJDIR)/boxblur.o \
	$(OBJDIR)/brender.o \
	$(OBJDIR)/browsebutton.o \
	$(OBJDIR)/byteorderpopup.o \
	$(OBJDIR)/cachebase.o \
	$(OBJDIR)/cache.o \
	$(OBJDIR)/canvas.o \
	$(OBJDIR)/canvastools.o \
	$(OBJDIR)/channeldb.o \
	$(OBJDIR)/channeledit.o \
	$(OBJDIR)/channelinfo.o \
	$(OBJDIR)/channel.o \
	$(OBJDIR)/channelpicker.o \
	$(OBJDIR)/chantables.o \
	$(OBJDIR)/clipedit.o \
	$(OBJDIR)/clipedls.o \
	$(OBJDIR)/clippopup.o \
	$(OBJDIR)/colorpicker.o \
	$(OBJDIR)/commonrender.o \
	$(OBJDIR)/compressortools.o \
	$(OBJDIR)/confirmquit.o \
	$(OBJDIR)/confirmsave.o \
	$(OBJDIR)/convert.o \
	$(OBJDIR)/cpanel.o \
	$(OBJDIR)/cplayback.o \
	$(OBJDIR)/ctimebar.o \
	$(OBJDIR)/ctracking.o \
	$(OBJDIR)/cursor.o \
	$(OBJDIR)/cwindowgui.o \
	$(OBJDIR)/cwindow.o \
	$(OBJDIR)/cwindowtool.o \
	$(OBJDIR)/dcoffset.o \
	$(OBJDIR)/deleteallindexes.o \
	$(OBJDIR)/devicedvbinput.o \
	$(OBJDIR)/devicev4l2base.o \
	$(OBJDIR)/devicev4l2input.o \
	$(OBJDIR)/dragcheckbox.o \
	$(OBJDIR)/drivesync.o \
	$(OBJDIR)/dvdcreate.o \
	$(OBJDIR)/edithandles.o \
	$(OBJDIR)/editlength.o \
	$(OBJDIR)/edit.o \
	$(OBJDIR)/editpanel.o \
	$(OBJDIR)/editpopup.o \
	$(OBJDIR)/edits.o \
	$(OBJDIR)/edl.o \
	$(OBJDIR)/edlsession.o \
	$(OBJDIR)/effectlist.o \
	$(OBJDIR)/eqcanvas.o \
	$(OBJDIR)/exportedl.o \
	$(OBJDIR)/fadeengine.o \
	$(OBJDIR)/ffmpeg.o \
	$(OBJDIR)/filebaseaudio.o \
	$(OBJDIR)/filebase.o \
	$(OBJDIR)/filebaseulaw.o \
	$(OBJDIR)/filecr2.o \
	$(OBJDIR)/filedv.o \
	$(OBJDIR)/filedpx.o \
	$(OBJDIR)/fileexr.o \
	$(OBJDIR)/fileffmpeg.o \
	$(OBJDIR)/fileflac.o \
	$(OBJDIR)/fileformat.o \
	$(OBJDIR)/filegif.o \
	$(OBJDIR)/filejpeg.o \
	$(OBJDIR)/filelist.o \
	$(OBJDIR)/file.o \
	$(OBJDIR)/fileogg.o \
	$(OBJDIR)/filepng.o \
	$(OBJDIR)/fileppm.o \
	$(OBJDIR)/fileref.o \
	$(OBJDIR)/filescene.o \
	$(OBJDIR)/filesndfile.o \
	$(OBJDIR)/filetga.o \
	$(OBJDIR)/filethread.o \
	$(OBJDIR)/filetiff.o \
	$(OBJDIR)/filevorbis.o \
	$(OBJDIR)/filexml.o \
	$(OBJDIR)/floatauto.o \
	$(OBJDIR)/floatautos.o \
	$(OBJDIR)/folderlistmenu.o \
	$(OBJDIR)/forkbase.o \
	$(OBJDIR)/formatcheck.o \
	$(OBJDIR)/formatpopup.o \
	$(OBJDIR)/formatpresets.o \
	$(OBJDIR)/formattools.o \
	$(OBJDIR)/fourier.o \
	$(OBJDIR)/framecache.o \
	$(OBJDIR)/garbage.o \
	$(OBJDIR)/gwindowgui.o \
	$(OBJDIR)/gwindow.o \
	$(OBJDIR)/indexable.o \
	$(OBJDIR)/indexfile.o \
	$(OBJDIR)/indexstate.o \
	$(OBJDIR)/indexthread.o \
	$(OBJDIR)/intauto.o \
	$(OBJDIR)/intautos.o \
	$(OBJDIR)/interfaceprefs.o \
	$(OBJDIR)/interlacemodes.o \
	$(OBJDIR)/keyframegui.o \
	$(OBJDIR)/keyframehandles.o \
	$(OBJDIR)/keyframe.o \
	$(OBJDIR)/keyframepopup.o \
	$(OBJDIR)/keyframes.o \
	$(OBJDIR)/labeledit.o \
	$(OBJDIR)/labelpopup.o \
	$(OBJDIR)/labelnavigate.o \
	$(OBJDIR)/labels.o \
	$(OBJDIR)/levelwindowgui.o \
	$(OBJDIR)/levelwindow.o \
	$(OBJDIR)/libdv.o \
	$(OBJDIR)/libmjpeg.o \
	$(OBJDIR)/loadbalance.o \
	$(OBJDIR)/loadfile.o \
	$(OBJDIR)/loadmode.o \
	$(OBJDIR)/localsession.o \
	$(OBJDIR)/mainclock.o \
	$(OBJDIR)/maincursor.o \
	$(OBJDIR)/mainerror.o \
	$(OBJDIR)/mainindexes.o \
	$(OBJDIR)/mainmenu.o \
	$(OBJDIR)/main.o \
	$(OBJDIR)/mainprogress.o \
	$(OBJDIR)/mainsession.o \
	$(OBJDIR)/mainundo.o \
	$(OBJDIR)/manualgoto.o \
	$(OBJDIR)/maskauto.o \
	$(OBJDIR)/maskautos.o \
	$(OBJDIR)/maskengine.o \
	$(OBJDIR)/mbuttons.o \
	$(OBJDIR)/menuaeffects.o \
	$(OBJDIR)/menuattacheffect.o \
	$(OBJDIR)/menuattachtransition.o \
	$(OBJDIR)/menueditlength.o \
	$(OBJDIR)/menueffects.o \
	$(OBJDIR)/menutransitionlength.o \
	$(OBJDIR)/menuveffects.o \
	$(OBJDIR)/meterhistory.o \
	$(OBJDIR)/meterpanel.o \
	$(OBJDIR)/mixersalign.o \
	$(OBJDIR)/module.o \
	$(OBJDIR)/mtimebar.o \
	$(OBJDIR)/mwindowedit.o \
	$(OBJDIR)/mwindowgui.o \
	$(OBJDIR)/mwindowmove.o \
	$(OBJDIR)/mwindow.o \
	$(OBJDIR)/new.o \
	$(OBJDIR)/overlayframe.o \
	$(OBJDIR)/overlaydirect.o \
	$(OBJDIR)/overlaynearest.o \
	$(OBJDIR)/overlaysample.o \
	$(OBJDIR)/packagedispatcher.o \
	$(OBJDIR)/packagerenderer.o \
	$(OBJDIR)/packagingengine.o \
	$(OBJDIR)/panauto.o \
	$(OBJDIR)/panautos.o \
	$(OBJDIR)/panedividers.o \
	$(OBJDIR)/patchbay.o \
	$(OBJDIR)/patchgui.o \
	$(OBJDIR)/performanceprefs.o \
	$(OBJDIR)/picture.o \
	$(OBJDIR)/playabletracks.o \
	$(OBJDIR)/playback3d.o \
	$(OBJDIR)/playbackconfig.o \
	$(OBJDIR)/playbackengine.o \
	$(OBJDIR)/playbackprefs.o \
	$(OBJDIR)/playtransport.o \
	$(OBJDIR)/pluginaclientlad.o \
	$(OBJDIR)/pluginaclient.o \
	$(OBJDIR)/pluginarray.o \
	$(OBJDIR)/pluginclient.o \
	$(OBJDIR)/plugindialog.o \
	$(OBJDIR)/pluginfclient.o \
	$(OBJDIR)/pluginlv2.o \
	$(OBJDIR)/pluginlv2config.o \
	$(OBJDIR)/pluginlv2client.o \
	$(OBJDIR)/pluginlv2gui.o \
	$(OBJDIR)/plugin.o \
	$(OBJDIR)/pluginpopup.o \
	$(OBJDIR)/pluginserver.o \
	$(OBJDIR)/pluginset.o \
	$(OBJDIR)/plugintclient.o \
	$(OBJDIR)/plugintoggles.o \
	$(OBJDIR)/pluginvclient.o \
	$(OBJDIR)/preferences.o \
	$(OBJDIR)/preferencesthread.o \
	$(OBJDIR)/presets.o \
	$(OBJDIR)/probeprefs.o \
	$(OBJDIR)/proxy.o \
	$(OBJDIR)/proxypopup.o \
	$(OBJDIR)/question.o \
	$(OBJDIR)/quit.o \
	$(OBJDIR)/recconfirmdelete.o \
	$(OBJDIR)/recordableatracks.o \
	$(OBJDIR)/recordablevtracks.o \
	$(OBJDIR)/recordaudio.o \
	$(OBJDIR)/recordbatches.o \
	$(OBJDIR)/recordconfig.o \
	$(OBJDIR)/recordgui.o \
	$(OBJDIR)/recordlabel.o \
	$(OBJDIR)/recordmonitor.o \
	$(OBJDIR)/record.o \
	$(OBJDIR)/recordprefs.o \
	$(OBJDIR)/recordscopes.o \
	$(OBJDIR)/recordthread.o \
	$(OBJDIR)/recordtransport.o \
	$(OBJDIR)/recordvideo.o \
	$(OBJDIR)/remotecontrol.o \
	$(OBJDIR)/removefile.o \
	$(OBJDIR)/renderengine.o \
	$(OBJDIR)/renderfarmclient.o \
	$(OBJDIR)/renderfarm.o \
	$(OBJDIR)/render.o \
	$(OBJDIR)/renderprofiles.o \
	$(OBJDIR)/resample.o \
	$(OBJDIR)/rescale.o \
	$(OBJDIR)/resizetrackthread.o \
	$(OBJDIR)/resourcepixmap.o \
	$(OBJDIR)/resourcethread.o \
	$(OBJDIR)/samplescroll.o \
	$(OBJDIR)/samples.o \
	$(OBJDIR)/savefile.o \
	$(OBJDIR)/scenegraph.o \
	$(OBJDIR)/scopewindow.o \
	$(OBJDIR)/setformat.o \
	$(OBJDIR)/sha1.o \
	$(OBJDIR)/sharedlocation.o \
	$(OBJDIR)/shbtnprefs.o \
	$(OBJDIR)/shmemory.o \
	$(OBJDIR)/shuttle.o \
	$(OBJDIR)/sighandler.o \
	$(OBJDIR)/signalstatus.o \
	$(OBJDIR)/splashgui.o \
	$(OBJDIR)/statusbar.o \
	$(OBJDIR)/strack.o \
	$(OBJDIR)/swindow.o \
	$(OBJDIR)/theme.o \
	$(OBJDIR)/threadexec.o \
	$(OBJDIR)/threadloader.o \
	$(OBJDIR)/timebar.o \
	$(OBJDIR)/timeentry.o \
	$(OBJDIR)/timelinepane.o \
	$(OBJDIR)/tipwindow.o \
	$(OBJDIR)/trackcanvas.o \
	$(OBJDIR)/tracking.o \
	$(OBJDIR)/track.o \
	$(OBJDIR)/trackpopup.o \
	$(OBJDIR)/trackscroll.o \
	$(OBJDIR)/tracksedit.o \
	$(OBJDIR)/tracks.o \
	$(OBJDIR)/transitionhandles.o \
	$(OBJDIR)/transition.o \
	$(OBJDIR)/transitionpopup.o \
	$(OBJDIR)/transportque.o \
	$(OBJDIR)/tunerserver.o \
	$(OBJDIR)/undostack.o \
	$(OBJDIR)/vattachmentpoint.o \
	$(OBJDIR)/vautomation.o \
	$(OBJDIR)/vdevicebase.o \
	$(OBJDIR)/vdevicedvb.o \
	$(OBJDIR)/vdeviceprefs.o \
	$(OBJDIR)/vdevicev4l2jpeg.o \
	$(OBJDIR)/vdevicev4l2mpeg.o \
	$(OBJDIR)/vdevicev4l2.o \
	$(OBJDIR)/vdevicex11.o \
	$(OBJDIR)/vedit.o \
	$(OBJDIR)/vedits.o \
	$(OBJDIR)/videodevice.o \
	$(OBJDIR)/viewmenu.o \
	$(OBJDIR)/virtualaconsole.o \
	$(OBJDIR)/virtualanode.o \
	$(OBJDIR)/virtualconsole.o \
	$(OBJDIR)/virtualnode.o \
	$(OBJDIR)/virtualvconsole.o \
	$(OBJDIR)/virtualvnode.o \
	$(OBJDIR)/vmodule.o \
	$(OBJDIR)/vpatchgui.o \
	$(OBJDIR)/vplayback.o \
	$(OBJDIR)/vpluginarray.o \
	$(OBJDIR)/vplugin.o \
	$(OBJDIR)/vpluginset.o \
	$(OBJDIR)/vrender.o \
	$(OBJDIR)/vtimebar.o \
	$(OBJDIR)/vtracking.o \
	$(OBJDIR)/vtrack.o \
	$(OBJDIR)/vwindowgui.o \
	$(OBJDIR)/vwindow.o \
	$(OBJDIR)/wavecache.o \
	$(OBJDIR)/wintv.o \
	$(OBJDIR)/wwindow.o \
	$(OBJDIR)/x10tv.o \
	$(OBJDIR)/zoombar.o \
	$(OBJDIR)/zoompanel.o \
	$(OBJDIR)/zwindow.o \
	$(OBJDIR)/zwindowgui.o \

ifneq ($(WANT_FIREWIRE),no)
OBJS += \
	$(OBJDIR)/audio1394.o \
	$(OBJDIR)/avc1394control.o \
	$(OBJDIR)/avc1394transport.o \
	$(OBJDIR)/vdevice1394.o \
	$(OBJDIR)/device1394input.o \
	$(OBJDIR)/device1394output.o \
	$(OBJDIR)/iec61883input.o \
	$(OBJDIR)/iec61883output.o \

endif
ifneq ($(WANT_LIBZMPEG),no)
OBJS += \
	$(OBJDIR)/audiompeg.o \
	$(OBJDIR)/devicempeginput.o \
	$(OBJDIR)/filempeg.o \
	$(OBJDIR)/vdevicempeg.o \

endif
ifneq ($(WANT_COMMERCIAL),no)
OBJS += \
	$(OBJDIR)/commercials.o \
	$(OBJDIR)/dbwindow.o \
	$(OBJDIR)/filedb.o \
	$(OBJDIR)/mediadb.o \

endif
ifneq ($(WANT_CIN_3RDPARTY),no)
OBJS += \
	$(OBJDIR)/fileac3.o \

endif

#	$(OBJDIR)/dvbtune.o \
#	$(OBJDIR)/renderfarmfsclient.o \
#	$(OBJDIR)/renderfarmfsserver.o \

GCC ?= gcc
DCRAW := $(OBJDIR)/dcraw.o
THEME_DATA := $(OBJDIR)/theme_data.o

OUTPUT = $(BINDIR)/$(WANT_CIN)
OUTPUT_G = $(OBJDIR)/$(WANT_CIN).debuginfo

LIBRARIES := \
	$(GUICAST)/$(OBJDIR)/libguicast.a \

ifneq ($(WANT_LIBZMPEG),no)
LIBRARIES += \
	$(MPEG2ENC)/$(OBJDIR)/hveg2enc.a \
	$(LIBZMPEG3)/$(OBJDIR)/libzmpeg3.a \

endif
ifneq ($(WANT_COMMERCIAL),no)
LIBRARIES += \
	$(TDB)/$(OBJDIR)/db.a \

endif

LIBS := $(LIBRARIES)

ifeq ($(WANT_CIN_3RDPARTY),no)
LIBS += -lavfilter -lavformat -lavcodec -lavutil
LIBS += -lswresample -lswscale
PLATFORM = $(shell uname -s)
ifneq (, $(filter $(PLATFORM), NetBSD))
LIBS += -lintl -liconv
endif
ifneq (, $(filter $(PLATFORM), FreeBSD))
LIBS += -lintl -liconv
LIBS += -lexecinfo
endif
LIBS += `pkg-config --libs OpenEXR 2>/dev/null`
LIBS += `pkg-config --libs flac 2>/dev/null`
LIBS += `pkg-config --libs libjpeg 2>/dev/null`
LIBS += `pkg-config --libs uuid 2>/dev/null`
LIBS += `pkg-config --libs theora 2>/dev/null`
LIBS += `pkg-config --libs vorbis 2>/dev/null`
LIBS += `pkg-config --libs sndfile 2>/dev/null`
LIBS += `pkg-config --libs x11 2>/dev/null`
ifeq ($(WANT_DV),yes)
LIBS += `pkg-config --libs libiec61883 2>/dev/null`
LIBS += `pkg-config --libs libdv 2>/dev/null`
LIBS += `pkg-config --libs libavc1394  2>/dev/null`
endif
ifeq ($(WANT_LIBZMPEG),yes)
LIBS += -la52 -ltwolame -lmp3lame
endif
LIBS += -lgif -ltheoraenc -ltheoradec -lvorbisfile -lvorbisenc -ltiff
ifeq ($(shell uname -o), Android)
LIBS += -landroid-shmem -liconv ../libbthread-master/jpt.a
endif
ifeq ($(WANT_ESOUND),yes)
LIBS += -lesd
endif
LIBS += $(shared_libs)
LIBS += $(system_libs)
else
LIBS += $(libraries)
endif

ifneq ($(WANT_COMMERCIAL),no)
CUTADS = $(OBJDIR)/cutads
CUTOBJ = $(OBJDIR)/cutads.o
CUTOBJS = $(CUTOBJ) \
	$(OBJDIR)/mediadb.o \
	$(OBJDIR)/filexml.o
CUTLIBS = \
	$(LIBZMPEG3)/$(OBJDIR)/libzmpeg3.a -lX11 \
	$(TDB)/$(OBJDIR)/db.a
endif

BDWRITE = $(OBJDIR)/bdwrite
BDWOBJS = $(OBJDIR)/bdwrite.o

ifneq ($(WANT_LV2),no)
LV2UI = $(OBJDIR)/lv2ui
LV2OBJS = \
	$(OBJDIR)/lv2ui.o \
	$(OBJDIR)/pluginlv2.o \
	$(OBJDIR)/pluginlv2ui.o \
	$(OBJDIR)/pluginlv2config.o \
	$(OBJDIR)/forkbase.o
LIBS += `pkg-config --libs lilv-0`
endif

CFLAGS := \
	-I/usr/local/include \
	-I$(GUICAST) \
	-I$(LIBZMPEG3) \
	$(static_incs) \
	$(CFLAGS)

# Speed up linking with this linking sequence
ifeq ($(OBJDIR), alpha)

LDFLAGS1 = \
	--demangle=compaq -export-dynamic -L./ \
	-L$(GUICAST) -L/usr/X11R6/lib \
	-L`expr /usr/lib/compaq/cxx-*/alpha-linux/`lib -L/usr/local/lib \
	-L`expr /usr/lib/gcc-lib/alpha-redhat-linux/*` \
	-rpath `expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/ -m elf64alpha \
	-L`expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/ -dynamic-linker \
	/lib/ld-linux.so.2 `expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/crt1.o \
	`expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/crti.o \
	`expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/crtbegin.o \
	`expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/_main.o

LDFLAGS2 = -lcpml -lcxxstdma_rh60 -lcxxma_rh60 -lc -lots \
	`expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/crtend.o \
	`expr /usr/lib/compaq/cxx-*/alpha-linux/`bin/crtn.o --no-demangle \
	--warn-once $(LDFLAGS)
LINKER = ld -o $(OUTPUT)
CFLAGS += -DUSE_ALPHA

else

LDFLAGS1 = -Wl,-export-dynamic -g -Wl,-z,noexecstack
LDFLAGS2 = $(LDFLAGS)
LINKER = $(CXX) -o $(OUTPUT)

endif

$(shell mkdir -p $(OBJDIR))
$(shell echo $(CFLAGS) > $(OBJDIR)/c_flags)
$(shell echo $(LDFLAGS1) $(OBJS) $(THEME_DATA) $(DCRAW) $(LIBS) $(LDFLAGS2) > $(OBJDIR)/objs)

all:	$(OUTPUT) $(CUTADS) $(BDWRITE) $(LV2UI)

# Static linking is not possible because the plugins depend on symbols
# in the main executable.
# Also VFS only overrides the C library when dynamic linking is used.
$(OUTPUT): $(OBJS) $(THEME_DATA) $(DCRAW) $(LIBRARIES)
	$(LINKER) `cat $(OBJDIR)/objs`
	$(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(OUTPUT) $(OUTPUT_G))
	$(if $(findstring -g,$(CFLAGS)),objcopy --add-gnu-debuglink=$(OUTPUT_G) $(OUTPUT))
	$(if $(findstring -ggdb,$(CFLAGS)),,strip $(OUTPUT))
	ln -f -s ../bin/$(WANT_CIN) ci

ifneq ($(WANT_COMMERCIAL),no)
$(CUTADS):	$(CUTOBJS) $(CUTLIBS) $(LIBRARIES)
	@echo $(CXX) -o $@ $(CUTOBJS)
	@$(CXX) $(CFLAGS) -pthread -o $@ $(CUTOBJS) $(CUTLIBS) $(LIBS)
	$(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(CUTADS) $(CUTADS).debuginfo)
	$(if $(findstring -g,$(CFLAGS)),objcopy --add-gnu-debuglink=$(CUTADS).debuginfo $(CUTADS))
	$(if $(findstring -ggdb,$(CFLAGS)),,strip $(CUTADS))

install-cutads:
	cp -av $(OBJDIR)/cutads $(BINDIR)/.

install:	install-cutads
endif

$(BDWRITE):	$(BDWOBJS) $(LIBRARIES)
	@echo $(CXX) -o $@ $(BDWOBJS)
	@$(CXX) $(CFLAGS) -pthread -o $@ $(BDWOBJS) $(LIBS)
	$(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(BDWRITE) $(BDWRITE).debuginfo)
	$(if $(findstring -ggdb,$(CFLAGS)),,strip $(BDWRITE))

install-bdwrite:
	cp -av $(OBJDIR)/bdwrite $(BINDIR)/.
install:	install-bdwrite

ydiff:	ydiff.C $(LIBRARIES)
	@echo $(CXX) -o $@ ydiff.C
	@$(CXX) $(CFLAGS) ydiff.C -o $@ $(LIBS)

shdmp:	shdmp.C
	@$(CXX) $(CFLAGS) shdmp.C -o $@
shudmp:	shudmp.C
	@$(CXX) $(CFLAGS) shudmp.C -o $@ -lusb-1.0

clean:
	rm -rf $(OBJDIR)
	rm -f shuttle_keys.h

tags:
	ctags -R -h default --langmap=c:+.inc . ../guicast/ ../libzmpeg3 ../plugins ../thirdparty/ffmpeg-*

$(OBJDIR)/fileexr.o:	BFLAGS:= -Wno-deprecated -std=c++11
$(OBJDIR)/filedpx.o:	BFLAGS:= -Wno-deprecated -std=c++11
$(OBJDIR)/sha1.o:	BFLAGS:= -O3
$(OVERLAYS):		BFLAGS:= -Ofast -g0

$(OBJDIR)/%.o:		%.C
	$(CXX) `cat $(OBJDIR)/c_flags` $(BFLAGS) -DMSGQUAL=$* -c $< -o $@

#lv2
ifneq ($(WANT_LV2),no)
GTK2_INCS := `pkg-config --cflags gtk+-2.0` -Wno-deprecated-declarations
GTK2_LIBS := `pkg-config --libs gtk+-2.0`
LV2_LIBS  := `pkg-config --libs lilv-0` `pkg-config --libs suil-0`

$(OBJDIR)/pluginlv2ui.o:	pluginlv2ui.C
$(OBJDIR)/lv2ui.o:	lv2ui.C
$(OBJDIR)/pluginlv2ui.o $(OBJDIR)/lv2ui.o:
	$(CXX) `cat $(OBJDIR)/c_flags` $(GTK2_INCS) -DMSGQUAL=$* -c $< -o $@

$(OBJDIR)/lv2ui: $(LV2OBJS)
	@echo $(CXX) \`cat $(OBJDIR)/c_flags\` $^ -o $@
	@$(CXX) `cat $(OBJDIR)/c_flags` $^ -o $@ $(LIBS) $(LV2_LIBS) $(GTK2_LIBS)
	$(if $(findstring -g,$(CFLAGS)),objcopy --only-keep-debug $(LV2UI) $(LV2UI).debuginfo)
	$(if $(findstring -ggdb,$(CFLAGS)),,strip $(LV2UI))

.PHONY:	lv2ui
lv2ui:	$(LV2UI)

install-lv2ui:
	cp -av $(LV2UI) $(BINDIR)/.

install:	install-lv2ui
endif

ifneq ($(WANT_SHUTTLE),no)
X11_INCS := /usr/include/
X11_INCS1 := $(shell pkg-config --cflags-only-I x11 | sed "s/-I//")

ifneq ($(X11_INCS1),)
X11_INCS := $(X11_INCS1)
endif

$(OBJDIR)/shuttle.o:	shuttle.C shuttle_keys.h
shuttle_keys.h: $(X11_INCS)/X11/keysymdef.h
	sed -n $(X11_INCS)/X11/keysymdef.h > shuttle_keys.h -f shuttle.sed
endif

$(OBJDIR)/pluginlv2gui.o:	pluginlv2gui.C
	$(CXX) `cat $(OBJDIR)/c_flags` $(GTK2_INCS) -DMSGQUAL=$* -c $< -o $@

#dcraw
$(DCRAW): dcraw.C
	$(CXX) `cat $(OBJDIR)/c_flags` $(if $(findstring -ggdb,$(CFLAGS)),,-O4) -DNODEPS -DLOCALTIME \
		-Wno-misleading-indentation -Wno-sign-compare -Wno-narrowing dcraw.C -c -o $*.o

$(THEME_DATA):
	cd $(OBJDIR) && \
	$(GUICAST)/$(OBJDIR)/bootstrap theme_data.o $(TOPDIR)/picon/cinfinity/*.png

val-%:
	@echo $($(subst val-,,$@))

