# Makefile for StarPlot

prefix  = /usr/local
DESTDIR = $(prefix)

# installation locations: -----------------------------------------------
export BINARYNAME  =  starplot
export CONVERTNAME =  starconvert
export DATADIR     =  $(DESTDIR)/share/$(BINARYNAME)
export DOCDIR      =  $(DESTDIR)/share/doc/$(BINARYNAME)
INSTALLDIR         =  $(DESTDIR)/bin
MANDIR             =  $(DESTDIR)/man/man1

# locations of programs needed for compiling / installing:
export CXX    =  g++
export SED    =  sed
INSTALL       =  install

# compiler flags
export CFLAGS =  -Wall -pedantic -O2
LFLAGS        =  `gtk-config --libs`

# targets ---------------------------------------------------------------

.PHONY: all object-files conv-files doc-files starplot starconvert debian \
	clean dist-clean debian-clean install install-bin install-doc     \
	install-debian install-examples install-gpl install-man uninstall

all: object-files conv-files doc-files

object-files:
	$(MAKE) -C classes
	$(MAKE) -C gui
	$(CXX) gui/*.o classes/*.o -o $(BINARYNAME) $(CFLAGS) $(LFLAGS)

conv-files:
	$(MAKE) -C convert
	$(CXX) convert/*.o classes/*.o -o $(CONVERTNAME) $(CFLAGS) -lm

doc-files:
	$(MAKE) -C doc

# The next two targets are not used by the default build and are just for
#  convenience if you only want to build one of the two programs.
starplot: object-files
starconvert:
	$(MAKE) -C classes
	$(MAKE) conv-files

debian:
	dpkg-buildpackage -rfakeroot

clean:
	$(MAKE) -C gui clean
	$(MAKE) -C classes clean
	$(MAKE) -C convert clean

dist-clean: clean
	rm -f $(BINARYNAME) $(CONVERTNAME)
	$(MAKE) -C doc clean

debian-clean: dist-clean
	fakeroot debian/rules clean

# install everything
install: install-bin install-examples install-doc install-man install-gpl

# install only things relevant to creating a Debian package
install-debian: install-bin install-examples install-doc

# install just the binary and create an empty data directory
install-bin:
	$(INSTALL) -d -m 0755 $(INSTALLDIR) $(DATADIR)
	$(INSTALL) -m 0755 -s $(BINARYNAME) $(INSTALLDIR)
	$(INSTALL) -m 0755 -s $(CONVERTNAME) $(INSTALLDIR)

# install example star data files as well as the binary
install-examples:
	$(INSTALL) -d -m 0755 $(DATADIR) $(DATADIR)/examples
	$(INSTALL) -m 0644 examples/*.stars $(DATADIR)/examples

# install the text and HTML documentation only
install-doc:
	$(INSTALL) -d -m 0755 $(DOCDIR) $(DOCDIR)/examples
	$(INSTALL) -m 0644 examples/example.spec $(DOCDIR)/examples
	$(INSTALL) -m 0644 README INSTALL Makefile $(DOCDIR)
	$(INSTALL) -d -m 0755 $(DOCDIR)/html $(DOCDIR)/html/images
	$(INSTALL) -m 0644 doc/html/*.html $(DOCDIR)/html
	$(INSTALL) -m 0644 doc/html/images/* $(DOCDIR)/html/images

# install man pages
install-man:
	$(INSTALL) -d -m 0755 $(MANDIR)
	$(INSTALL) -m 0644 doc/man/starplot.1 $(MANDIR)/$(BINARYNAME).1
	$(INSTALL) -m 0644 doc/man/starconvert.1 $(MANDIR)/$(CONVERTNAME).1

# install the license
# (this is separate since most people already have more than enough copies
# of the GPL lying around on their hard drives)
install-gpl:
	$(INSTALL) -d -m 0755 $(DOCDIR)
	$(INSTALL) -m 0644 COPYING $(DOCDIR)

# You can uninstall StarPlot even after deleting the source tree because
# this Makefile will have been installed in $(DOCDIR).
# NOTE: Make sure $(prefix) is set correctly.
# DO NOT USE THIS TARGET IF YOU INSTALLED STARPLOT AS A DEBIAN PACKAGE!!!

uninstall:
	-rm -f $(INSTALLDIR)/$(BINARYNAME) $(INSTALLDIR)/$(CONVERTNAME)
	-rm -rf $(DATADIR)/examples
	-rmdir $(DATADIR)
	-rm -rf $(DOCDIR)
	-rm -f $(MANDIR)/$(BINARYNAME).* $(MANDIR)/$(CONVERTNAME).*
	-rmdir $(MANDIR)

