all::

CAT=cat
FIND=find
XARGS=xargs
SED=sed
M4=m4
LS=ls
CD=cd
ZIP=zip
INSTALL=install
MKDIR=mkdir
CP=cp
RISCOS_ZIP=ZIP
APPCP ?= $(CP)

INSTALL_PATH=/usr/local
PREFIX=$(INSTALL_PATH)

ARCHIVE_DIR=..

sinclude nonogram-env.mk

TARGETS=nonogram
BINARIES=nonogram
INTERMEDIATES=

all:: $(TARGETS)

### Target components

nonogram_obj=nonogram.o context.o display.o
nonogram_hdr=bbcgfxcf.h context.h display.h options.h
nonogram_lib=-lnonogram

DOCS=CONTACT HISTORY INSTALL LICENSE MANIFEST README VERSION	\
README.nonogram

### Linking

nonogram: $(nonogram_obj)
	$(LINK.c) -o $@ $(nonogram_obj) $(nonogram_lib)

### C compilation

CFLAGS += -DVERSION=\"`$(CAT) VERSION`\"

context.o: context.c context.h options.h display.h
display.o: display.c display.h options.h context.h
nonogram.o: nonogram.c options.h context.h display.h

### Installation

install:: install-binaries

$(PREFIX)/bin:
	$(INSTALL) -d $(PREFIX)/bin

install-binaries: $(PREFIX)/bin $(BINARIES)
	$(INSTALL) -m 0755 $(BINARIES) $(PREFIX)/bin

### Housekeeping

tidy:
	-$(RM) *~ core

clean: tidy
	-$(RM) *.o

blank: clean
	-$(RM) $(TARGETS) $(INTERMEDIATES)

manifest: blank
	-$(RM) MANIFEST
	$(LS) -l > MANIFEST

archive: manifest

archive: blank
	(FILENAME="$(ARCHIVE_DIR)/nonogram-`$(CAT) VERSION`.zip" ; \
	$(CD) .. ; \
	$(RM) "$$FILENAME" ; \
	$(ZIP) -r "$$FILENAME" nonogram -x \*/CVS/ \*/CVS/\* )

install-apps:: \
	$(DOCS:%=$(PREFIX)/apps/Nonogram/Docs/%,fff) \
	$(PREFIX)/apps/Nonogram/!Boot/Library/nonogram,$(APPTYPE) \
	$(nonogram_obj:%.o=$(PREFIX)/apps/Nonogram/Source/c/%,fff) \
	$(nonogram_hdr:%.h=$(PREFIX)/apps/Nonogram/Source/h/%,fff)

$(PREFIX)/apps/Nonogram/!Boot/Library/nonogram,$(APPTYPE): nonogram
	$(MKDIR) -p "$(@D)"
	$(APPCP) "$<" "$@"

$(PREFIX)/apps/Nonogram/Source/c/%,fff: %.c
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

$(PREFIX)/apps/Nonogram/Source/h/%,fff: %.h
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

$(PREFIX)/apps/Nonogram/Docs/%,fff: %
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

riscos-archive: manifest install-apps
	FILENAME="$(ARCHIVE_DIR)/nonogram-riscos-`$(CAT) VERSION`.zip" ; \
	$(CD) $(PREFIX)/apps/Nonogram ; \
	$(RM) "$$FILENAME" ; \
	$(RISCOS_ZIP) -, -r "$$FILENAME" *

windows-archive: manifest install-windows
	FILENAME="$(ARCHIVE_DIR)/nonogram-windows-`$(CAT) VERSION`.zip" ; \
	$(CD) $(PREFIX)/windows-package/Nonogram ; \
	$(RM) "$$FILENAME" ; \
	$(ZIP) -r "$$FILENAME" *

install-windows:: \
	$(DOCS:%=$(PREFIX)/windows-package/Nonogram/Docs/%.txt) \
	$(PREFIX)/windows-package/Nonogram/nonogram.exe \
	$(nonogram_obj:%.o=$(PREFIX)/windows-package/Nonogram/%.c) \
	$(nonogram_hdr:%.h=$(PREFIX)/windows-package/Nonogram/%.h)


$(PREFIX)/windows-package/Nonogram/Docs/%.txt: %
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

$(PREFIX)/windows-package/Nonogram/nonogram.exe: nonogram
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

$(PREFIX)/windows-package/Nonogram/%.c: %.c
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

$(PREFIX)/windows-package/Nonogram/%.h: %.h
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"


# Set this to the comma-separated list of years that should appear in
# the licence.  Do not use characters other than [0-9,] - no spaces.
YEARS=2001,2005-7,2012

update-licence:
	$(FIND) . -name ".svn" -prune -or -type f -print0 | $(XARGS) -0 \
	$(SED) -i 's/Copyright (C) [0-9,-]\+  Steven Simpson/Copyright (C) $(YEARS)  Steven Simpson/g'
