PACKAGE = 'perfect-os-junk'
VERSION = '0.0.1'

PREFIX := /usr/local
BINDIR := $(PREFIX)/bin
LIBDIR := $(PREFIX)/lib
SHAREDIR := $(PREFIX)/share
INCLUDEDIR := $(PREFIX)/include

CC := cc
AR := ar
RANLIB := ranlib
CFLAGS := -O2 -Wall -Wextra -Wshadow -ansi -pedantic -std=c99
LDFLAGS := 

Q := @

all: libposj init-connection service-test

libposj: libposj.so libposj.a
	@:
libposj.install: libposj.so.install libposj.a.install

libposj.clean: libposj.so.clean libposj.a.clean

libposj.uninstall: libposj.so.uninstall libposj.a.uninstall

init-connection: init-connection.o lib/communication.o 
	@echo '  [LD]    init-connection'
	$(Q)$(CC) -o init-connection $(LDFLAGS) init-connection.o lib/communication.o 

init-connection.install: init-connection
	@echo '  [IN]    $(BINDIR)/init-connection'
	$(Q)mkdir -p '$(DESTDIR)$(BINDIR)'
	$(Q)install -m0755 init-connection $(DESTDIR)$(BINDIR)/init-connection

init-connection.clean:  init-connection.o.clean lib/communication.o.clean
	@echo '  [RM]    init-connection'
	$(Q)rm -f init-connection

init-connection.uninstall:
	@echo '  [RM]    $(BINDIR)/init-connection'
	$(Q)rm -f '$(DESTDIR)$(BINDIR)/init-connection'

service-test: service-test.o lib/communication.o 
	@echo '  [LD]    service-test'
	$(Q)$(CC) -o service-test $(LDFLAGS) service-test.o lib/communication.o 

service-test.install: service-test
	@echo '  [IN]    $(BINDIR)/service-test'
	$(Q)mkdir -p '$(DESTDIR)$(BINDIR)'
	$(Q)install -m0755 service-test $(DESTDIR)$(BINDIR)/service-test

service-test.clean:  service-test.o.clean lib/communication.o.clean
	@echo '  [RM]    service-test'
	$(Q)rm -f service-test

service-test.uninstall:
	@echo '  [RM]    $(BINDIR)/service-test'
	$(Q)rm -f '$(DESTDIR)$(BINDIR)/service-test'

libposj.so: lib/communication.o 
	@echo '  [LD]    libposj.so'
	$(Q)$(CC) -o libposj.so -shared $(LDFLAGS) lib/communication.o 

libposj.so.install: libposj.so
	@echo '  [IN]    $(LIBDIR)/libposj.so.0.0.1'
	$(Q)mkdir -p '$(DESTDIR)$(LIBDIR)'
	$(Q)install -m0755 libposj.so $(DESTDIR)$(LIBDIR)/libposj.so.0.0.1
	@echo '  [LN]    $(LIBDIR)/libposj.so.0.0'
	$(Q)ln -sf '$(LIBDIR)/libposj.so.0.0.1' '$(DESTDIR)/$(LIBDIR)/libposj.so.0.0'
	@echo '  [LN]    $(LIBDIR)/libposj.so.0'
	$(Q)ln -sf '$(LIBDIR)/libposj.so.0.0.1' '$(DESTDIR)/$(LIBDIR)/libposj.so.0'
	@echo '  [LN]    $(LIBDIR)/libposj.so'
	$(Q)ln -sf '$(LIBDIR)/libposj.so.0.0.1' '$(DESTDIR)/$(LIBDIR)/libposj.so'

libposj.so.clean:
	@echo '  [RM]    libposj.so'
	$(Q)rm -f libposj.so

libposj.so.uninstall:
	@echo '  [RM]    $(LIBDIR)/libposj.so.0.0.1'
	$(Q)rm -f '$(DESTDIR)$(LIBDIR)/libposj.so.0.0.1'
	@echo '  [RM]    $(LIBDIR)/libposj.so.0.0'
	$(Q)rm -f '$(DESTDIR)$(LIBDIR)/libposj.so.0.0'
	@echo '  [RM]    $(LIBDIR)/libposj.so.0'
	$(Q)rm -f '$(DESTDIR)$(LIBDIR)/libposj.so.0'
	@echo '  [RM]    $(LIBDIR)/libposj.so'
	$(Q)rm -f '$(DESTDIR)$(LIBDIR)/libposj.so'

libposj.a: lib/communication.o 
	@echo '  [LD]    libposj.a'
	$(Q)$(AR) rc 'libposj.a' lib/communication.o

libposj.a.install: libposj.a
	@echo '  [IN]    $(LIBDIR)/libposj.a'
	$(Q)mkdir -p '$(DESTDIR)$(LIBDIR)'
	$(Q)install -m0755 libposj.a $(DESTDIR)$(LIBDIR)/libposj.a

libposj.a.clean:
	@echo '  [RM]    libposj.a'
	$(Q)rm -f libposj.a

libposj.a.uninstall:
	@echo '  [RM]    $(LIBDIR)/libposj.a'
	$(Q)rm -f '$(DESTDIR)$(LIBDIR)/libposj.a'

init-connection.o: init-connection.c ./lib/communication.h
	@echo '  [CC]    init-connection.o'
	$(Q)$(CC) $(CFLAGS)  -c init-connection.c   -o init-connection.o

init-connection.o.install:

init-connection.o.clean:
	@echo '  [RM]    init-connection.o'
	$(Q)rm -f init-connection.o

init-connection.o.uninstall:

lib/communication.o: lib/communication.c lib/communication.h
	@echo '  [CC]    lib/communication.o'
	$(Q)$(CC) $(CFLAGS) -fPIC  -c lib/communication.c  -fPIC  -o lib/communication.o

lib/communication.o.install:

lib/communication.o.clean:
	@echo '  [RM]    lib/communication.o'
	$(Q)rm -f lib/communication.o

lib/communication.o.uninstall:

service-test.o: service-test.c ./lib/communication.h
	@echo '  [CC]    service-test.o'
	$(Q)$(CC) $(CFLAGS)  -c service-test.c   -o service-test.o

service-test.o.install:

service-test.o.clean:
	@echo '  [RM]    service-test.o'
	$(Q)rm -f service-test.o

service-test.o.uninstall:

$(DESTDIR)$(PREFIX):
	@echo '  [DIR]   $(PREFIX)'
	$(Q)mkdir -p $(DESTDIR)$(PREFIX)
$(DESTDIR)$(BINDIR):
	@echo '  [DIR]   $(BINDIR)'
	$(Q)mkdir -p $(DESTDIR)$(BINDIR)
$(DESTDIR)$(LIBDIR):
	@echo '  [DIR]   $(LIBDIR)'
	$(Q)mkdir -p $(DESTDIR)$(LIBDIR)
$(DESTDIR)$(SHAREDIR):
	@echo '  [DIR]   $(SHAREDIR)'
	$(Q)mkdir -p $(DESTDIR)$(SHAREDIR)
$(DESTDIR)$(INCLUDEDIR):
	@echo '  [DIR]   $(INCLUDEDIR)'
	$(Q)mkdir -p $(DESTDIR)$(INCLUDEDIR)
install: subdirs.install libposj.install init-connection.install service-test.install libposj.so.install libposj.a.install init-connection.o.install lib/communication.o.install service-test.o.install lib/communication.o.install lib/communication.o.install lib/communication.o.install
	@:

subdirs.install:

uninstall: subdirs.uninstall libposj.uninstall init-connection.uninstall service-test.uninstall libposj.so.uninstall libposj.a.uninstall init-connection.o.uninstall lib/communication.o.uninstall service-test.o.uninstall lib/communication.o.uninstall lib/communication.o.uninstall lib/communication.o.uninstall
	@:

subdirs.uninstall:

test: all subdirs subdirs.test
	@:

subdirs.test:

clean: libposj.clean init-connection.clean service-test.clean libposj.so.clean libposj.a.clean init-connection.o.clean lib/communication.o.clean service-test.o.clean lib/communication.o.clean lib/communication.o.clean lib/communication.o.clean

distclean: clean

dist: dist-gz dist-xz dist-bz2
	$(Q)rm -- $(PACKAGE)-$(VERSION)

distdir:
	$(Q)rm -rf -- $(PACKAGE)-$(VERSION)
	$(Q)ln -s -- . $(PACKAGE)-$(VERSION)

dist-gz: $(PACKAGE)-$(VERSION).tar.gz
$(PACKAGE)-$(VERSION).tar.gz: distdir
	@echo '  [TAR]   $(PACKAGE)-$(VERSION).tar.gz'
	$(Q)tar czf $(PACKAGE)-$(VERSION).tar.gz \
		$(PACKAGE)-$(VERSION)/init-connection.c \
		$(PACKAGE)-$(VERSION)/service-test.c \
		$(PACKAGE)-$(VERSION)/lib/communication.c \
		$(PACKAGE)-$(VERSION)/lib/communication.h

dist-xz: $(PACKAGE)-$(VERSION).tar.xz
$(PACKAGE)-$(VERSION).tar.xz: distdir
	@echo '  [TAR]   $(PACKAGE)-$(VERSION).tar.xz'
	$(Q)tar cJf $(PACKAGE)-$(VERSION).tar.xz \
		$(PACKAGE)-$(VERSION)/init-connection.c \
		$(PACKAGE)-$(VERSION)/service-test.c \
		$(PACKAGE)-$(VERSION)/lib/communication.c \
		$(PACKAGE)-$(VERSION)/lib/communication.h

dist-bz2: $(PACKAGE)-$(VERSION).tar.bz2
$(PACKAGE)-$(VERSION).tar.bz2: distdir
	@echo '  [TAR]   $(PACKAGE)-$(VERSION).tar.bz2'
	$(Q)tar cjf $(PACKAGE)-$(VERSION).tar.bz2 \
		$(PACKAGE)-$(VERSION)/init-connection.c \
		$(PACKAGE)-$(VERSION)/service-test.c \
		$(PACKAGE)-$(VERSION)/lib/communication.c \
		$(PACKAGE)-$(VERSION)/lib/communication.h

help:
	@echo ' :: perfect-os-junk-0.0.1'
	@echo ''
	@echo 'Generic targets:'
	@echo '    - help          Prints this help message.'
	@echo '    - all           Builds all targets.'
	@echo '    - dist          Creates tarballs of the files of the project.'
	@echo '    - install       Installs the project.'
	@echo '    - clean         Removes compiled files.'
	@echo '    - uninstall     Deinstalls the project.'
	@echo ''
	@echo 'CLI-modifiable variables:'
	@echo '    - CC            ${CC}'
	@echo '    - CFLAGS        ${CFLAGS}'
	@echo '    - LDFLAGS       ${LDFLAGS}'
	@echo '    - DESTDIR       ${DESTDIR}'
	@echo '    - PREFIX        ${PREFIX}'
	@echo '    - BINDIR        ${BINDIR}'
	@echo '    - LIBDIR        ${LIBDIR}'
	@echo '    - SHAREDIR      ${SHAREDIR}'
	@echo '    - INCLUDEDIR    ${INCLUDEDIR}'
	@echo ''
	@echo 'Project targets: '
	@echo '    - libposj       library'
	@echo '    - init-connectionbinary'
	@echo '    - service-test  binary'
	@echo ''
	@echo 'Makefile options:'
	@echo '    - gnu:          true'
	@echo '    - colors:       true'
	@echo ''
	@echo 'Rebuild the Makefile with:'
	@echo '    zsh ./build.zsh -c -g'
.PHONY: all subdirs clean distclean dist install uninstall help