all::

FIND=find
SED=sed
XARGS=xargs
AR=ar
RANLIB=ranlib
M4=m4
CAT=cat
ECHO=echo
CD=cd
LS=ls
ZIP=zip
MKDIR=mkdir
CP=cp
RISCOS_ZIP=ZIP
INSTALL=install

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

sinclude nonolib-env.mk

###

TARGETS=libnonogram.a nonogram_version.h
INTERMEDIATES=testline testio
HEADERS=nonogram.h nonogram_version.h
LIBRARIES=libnonogram.a
DOCS=CONTACT HISTORY LICENSE TODO VERSION

all:: $(TARGETS)

nonogram_mod=grid.o line.o puzzle.o rule.o solver.o conf.o fast.o	\
complete.o null.o oddones.o olsak.o fcomp.o

nonogram_hdrs=internal.h

testline_obj=testline.o libnonogram.a
testio_obj=testio.o libnonogram.a

libnonogram.a: $(nonogram_mod)
	$(AR) r $@ $(nonogram_mod)
	$(RANLIB) $@

testline: $(testline_obj)
	$(LINK.c) -o $@ $(testline_obj) $(testline_lib)

testio: $(testio_obj)
	$(LINK.c) -o $@ $(testio_obj) $(testio_lib)

nonogram_version.h: nonogram_version.h.m4
	$(M4) -DVERSION="\``$(CAT) VERSION`'" < "$<" > "$@"


### C dependencies

fcomp.o: nonogram.h
line.o: line.c nonogram.h
puzzle.o: puzzle.c nonogram.h internal.h
rule.o: rule.c nonogram.h
solver.o: solver.c nonogram.h internal.h
testline.o: testline.c nonogram.h
testio.o: testio.c nonogram.h
complete.o: complete.c nonogram.h internal.h
fast.o: fast.c nonogram.h internal.h
conf.o: conf.c nonogram.h
null.o: null.c nonogram.h internal.h
oddones.o: oddones.c nonogram.h internal.h

### Installation

install:: install-libraries install-headers

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

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

install-libraries: $(PREFIX)/lib $(LIBRARIES)
	$(INSTALL) -m 0644 $(LIBRARIES) $(PREFIX)/lib

install-headers: $(PREFIX)/include $(HEADERS)
	$(INSTALL) -m 0644 $(HEADERS) $(PREFIX)/include

### Housekeeping

tidy::
	-$(FIND) . -name "*~" -exec $(RM) {} \;
	-$(RM) core

clean:: tidy
	-$(RM) *.o

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

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

install-apps:: \
	$(DOCS:%=$(PREFIX)/apps/!NonoLib/Docs/%,fff) \
	$(HEADERS:%.h=$(PREFIX)/apps/!NonoLib/Library/h/%,fff) \
	$(LIBRARIES:lib%.a=$(PREFIX)/apps/!NonoLib/Library/o/%,ffd) \
	$(nonogram_mod:%.o=$(PREFIX)/apps/!NonoLib/Source/c/%,fff) \
	$(nonogram_hdrs:%.h=$(PREFIX)/apps/!NonoLib/Source/h/%,fff) \
	$(PREFIX)/apps/!NonoLib/!Boot,feb \
	$(PREFIX)/apps/!NonoLib/!Help,feb \
	$(PREFIX)/apps/!NonoLib/Source/buildshlib,fe1


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

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

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

$(PREFIX)/apps/!NonoLib/Library/o/%,ffd: lib%.a
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

$(PREFIX)/apps/%: riscos-src/%
	$(MKDIR) -p "$(@D)"
	$(CP) "$<" "$@"

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

riscos-archive: install-apps
	FILENAME="$(ARCHIVE_DIR)/nonolib-riscos-`$(CAT) VERSION`.zip" ; \
	$(CD) $(PREFIX)/apps ; \
	$(RM) "$$FILENAME" ; \
	$(RISCOS_ZIP) -, -r "$$FILENAME" !NonoLib

$(PREFIX)/apps/!NonoLib/Source/buildshlib,fe1: buildshlib.m4
	$(M4)	"-DVERSION={:$(shell cat VERSION):}" \
		"-DPARTS={:$(nonogram_mod:%.o=%):}" buildshlib.m4 > $@


# 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-8,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'
