#-----------------------------------------------------------
# GOGGLES BUILD SYSTEM
#-----------------------------------------------------------
#
# The actual make file
#
#-----------------------------------------------------------

include config.make
include build/version

# Set suffixes
.SUFFIXES:
.SUFFIXES: .cpp .h .gif .png $(OBJEXT) $(BINEXT) $(LIBEXT)

.PHONY : all clean realclean cleanicons install install-desktop

INSTALL=install


# Convert to Platform specific names
#----------------------------------------------------------
BINNAME=src/gogglesmm$(BINEXT)    						# XXX on Linux, X.exe on Windows

# Installation Directory
ifdef DESTDIR
INSTALL_DIR=$(DESTDIR)$(PREFIX)
INSTALL_LOCALEDIR=$(DESTDIR)$(LOCALEDIR)
INSTALL_MANDIR=$(DESTDIR)$(MANDIR)
else
INSTALL_DIR=$(PREFIX)
INSTALL_LOCALEDIR=$(LOCALEDIR)
INSTALL_MANDIR=$(MANDIR)
endif

all: $(BINNAME)
TARNAME=gogglesmm-$(MAJOR).$(MINOR).$(LEVEL)

ICONS := icons/cursor_hand.gif \
icons/about.png \
icons/gogglesmm_16.png \
icons/gogglesmm_32.png

# Objects to Compile
#----------------------------------------------------------
SRCFILES := src/fxext.cpp \
src/GMAbout.cpp \
src/GMAnimImage.cpp \
src/GMApp.cpp \
src/GMAudioScrobbler.cpp \
src/GMClipboard.cpp \
src/GMColumnDialog.cpp \
src/GMDatabase.cpp \
src/GMDatabaseSource.cpp \
src/GMFetch.cpp \
src/GMFilename.cpp \
src/GMFontDialog.cpp \
src/GMImageView.cpp \
src/GMEQDialog.cpp \
src/GMIconTheme.cpp \
src/GMImportDialog.cpp \
src/GMList.cpp \
src/GMPlayer.cpp \
src/GMPlayerManager.cpp \
src/GMPlayListSource.cpp \
src/GMPreferences.cpp \
src/GMPreferencesDialog.cpp \
src/GMQuery.cpp \
src/GMRemote.cpp \
src/GMSearch.cpp \
src/GMSource.cpp \
src/GMSourceView.cpp \
src/GMTag.cpp \
src/GMThread.cpp \
src/GMTrackDatabase.cpp \
src/GMTrackList.cpp \
src/GMTrackItem.cpp \
src/GMTrackView.cpp \
src/GMTrayIcon.cpp \
src/GMStreamSource.cpp \
src/GMURL.cpp \
src/GMWindow.cpp \
src/main.cpp \
src/gmutils.cpp \
src/ap_buffer.cpp \
src/ap_http.cpp \
src/ap_xml_parser.cpp \
src/icons.cpp

ifneq (,$(findstring md5,$(OPTIONS)))
	SRCFILES += src/md5.cpp
endif

ifneq (,$(findstring fox16,$(OPTIONS)))
	SRCFILES += src/GMMessageChannel.cpp
endif

ifneq (,$(findstring dbus,$(OPTIONS)))
	SRCFILES += src/GMDBus.cpp \
	src/GMNotifyDaemon.cpp \
	src/GMMediaPlayerService.cpp \
	src/GMSettingsDaemon.cpp
endif

OBJECTS := $(patsubst %.cpp,%$(OBJEXT),$(SRCFILES))
DEPENDENCIES = $(patsubst %.cpp,%.d,$(SRCFILES))

$(BINNAME): $(OBJECTS)
	@echo "    Linking $@ ..."
#	@echo "$(LINK) $(LDFLAGS) $(OUTPUTBIN)$(BINNAME) $(OBJECTS) $(LIBS)"
	@$(LINK) $(LDFLAGS) $(OUTPUTBIN)$(BINNAME) $(OBJECTS) $(LIBS)

%$(OBJEXT):	%.cpp
	@echo "    Compiling $< ..."
#	@echo "$(CXX) $(CFLAGS) $(DEFS) $(CPPFLAGS) -MM -o $*.d -MT $@ $<"
	@$(CXX) $(CFLAGS) $(DEFS) $(CPPFLAGS) -MM -o $*.d -MT $@ $<
#	@echo "$(CXX) $(CFLAGS) $(DEFS) $(CPPFLAGS) $(OUTPUTOBJ)$@ -c $<"
	@$(CXX) $(CFLAGS) $(DEFS) $(CPPFLAGS) $(OUTPUTOBJ)$@ -c $<

ifneq (,$(findstring dbus,$(OPTIONS)))

src/gogglesmm_xml.h: src/gogglesmm.xml
	@echo "    Creating src/gogglesmm_xml.h..."
	@$(RESWRAP_TEXT) -o $@ src/gogglesmm.xml

src/mpris_xml.h:  src/mpris_root.xml src/mpris_player.xml src/mpris_tracklist.xml
	@echo "    Creating src/mpris_xml.h..."
	@$(RESWRAP_TEXT) -o $@ src/mpris_root.xml src/mpris_player.xml src/mpris_tracklist.xml

endif

$(OBJECTS): src/icons.h src/icons.cpp

src/icons.h: $(ICONS)
	@echo "    Creating Icon Resource Header"
	@$(RESWRAP_H) -o $@ $(ICONS)

src/icons.cpp: $(ICONS)
	@echo "    Creating Icon Resources"
	@$(RESWRAP_CPP) -o $@ $(ICONS)

ifneq (,$(findstring dbus,$(OPTIONS)))
src/GMPlayerManager.cpp: src/gogglesmm_xml.h
src/GMMediaPlayerService.cpp: src/mpris_xml.h
endif


TRANSLATIONS:=$(basename $(notdir $(wildcard po/*.mo)))
LINGUAS?=$(TRANSLATIONS)


# Install
#----------------------------------------------------------
install: $(BINNAME)
	@echo "    Installing $(INSTALL_DIR)/bin/gogglesmm ..."
	@$(INSTALL) -m 755 -D src/gogglesmm $(INSTALL_DIR)/bin/gogglesmm
	@echo "    Installing $(INSTALL_DIR)/share/applications/gogglesmm.desktop"
	@$(INSTALL) -m 644 -D extra/gogglesmm.desktop $(INSTALL_DIR)/share/applications/gogglesmm.desktop
	@echo "    Installing Icons"
	$(INSTALL) -m 644 -D icons/gogglesmm_16.png $(INSTALL_DIR)/share/icons/hicolor/16x16/apps/gogglesmm.png
	$(INSTALL) -m 644 -D extra/gogglesmm_22.png $(INSTALL_DIR)/share/icons/hicolor/22x22/apps/gogglesmm.png
	$(INSTALL) -m 644 -D extra/gogglesmm_24.png $(INSTALL_DIR)/share/icons/hicolor/24x24/apps/gogglesmm.png
	$(INSTALL) -m 644 -D icons/gogglesmm_32.png $(INSTALL_DIR)/share/icons/hicolor/32x32/apps/gogglesmm.png
	$(INSTALL) -m 644 -D extra/gogglesmm_48.png $(INSTALL_DIR)/share/icons/hicolor/48x48/apps/gogglesmm.png
	$(INSTALL) -m 644 -D extra/gogglesmm.svg $(INSTALL_DIR)/share/icons/hicolor/scalable/apps/gogglesmm.svg
	@echo "    Installing $(INSTALL_MANDIR)/man1/gogglesmm.1"
	@$(INSTALL) -m 644 -D extra/gogglesmm.1 $(INSTALL_MANDIR)/man1/gogglesmm.1
ifneq (,$(findstring nls,$(OPTIONS)))
	@echo "    Installing Translations"
	@linguas='$(filter $(TRANSLATIONS),$(LINGUAS))'; \
	for tr in $$linguas ; do \
    echo "    Installing $(INSTALL_LOCALEDIR)/$$tr/LC_MESSAGES/gogglesmm.mo" ;\
  	$(INSTALL) -m 644 -D po/$$tr.mo -T $(INSTALL_LOCALEDIR)/$$tr/LC_MESSAGES/gogglesmm.mo ; \
	done;
endif

# Clean
#----------------------------------------------------------
clean :
	@echo "    Remove Executables ..."
	@rm -f $(BINNAME)

	@echo "    Remove Objects ..."
	@rm -f src/*$(OBJEXT)
	@rm -f src/*.d
	@echo "    Remove Generated Files ..."
	@rm -f src/icons.cpp
	@rm -f src/icons.h
	@rm -f src/gogglesmm_xml.h
	@rm -f src/mpris_xml.h
#----------------------------------------------------------

realclean :
	@echo "    Remove Configuration ..."
	@rm -f config.make
	@rm -f src/gmconfig.h

dist: clean realclean
	sh build/makemo
	rm po/fi.mo
	rsvg-convert -w 22  extra/gogglesmm.svg -o extra/gogglesmm_22.png
	rsvg-convert -w 24  extra/gogglesmm.svg -o extra/gogglesmm_24.png
	rsvg-convert -w 48  extra/gogglesmm.svg -o extra/gogglesmm_48.png
	@echo " Creating Tarbals .."
	tar --create --xz --file='../../$(TARNAME).tar.xz' --verbose --exclude-vcs --exclude='*.tar.xz' --transform='s/^./$(TARNAME)/' --show-transformed-names .
	tar --create --bzip2 --file='../../$(TARNAME).tar.bz2' --verbose --exclude-vcs --exclude='*.tar.bz2' --transform='s/^./$(TARNAME)/' --show-transformed-names .

# Clean Icons
#----------------------------------------------------------
cleanicons :
	@rm -f src/icons.*
	@rm -f src/icons.*
#----------------------------------------------------------

# How to make everything else
-include $(DEPENDENCIES)
