#!/usr/bin/make

include toc.make


#########################
# Maintenance notes:
#  expected via toc:
#   $(PACKAGE_NAMESPACE) - namespace for this code

PACKAGE_NAMESPACE ?= ns

################ the real sources are stored here:
  NAMESPACE_PREFIX = src/
################ and the namespace is filtered out via FILE_FILTERS.

NAMESPACE = $(PACKAGE_NAMESPACE)

NS_SOURCES = $(addprefix $(NAMESPACE_PREFIX),\
	stdstring_tokenizer.cpp \
	string_tokenizer.cpp \
	)

#	pointer_guard.h test_guard.cpp

NS_HEADERS = $(addprefix $(NAMESPACE_PREFIX),\
	algo.h \
	children_holder.h \
	class_name.h \
	debuggering_macros.h \
	functor.h \
	instantiator.h \
	name_type.h \
	phoenix.h \
	pointer_cleaner.h \
	pointer_list.h \
	pointer_stripper.h \
	stdstring_tokenizer.h \
	string_tokenizer.h \
	)

#	pointer_guard.h test_guard.cpp


########################################################################
# Let's create class_name specializations for built-in types:
#CLASSNAMES_H = class_names_standard.h
#CLASSNAMES_INCLUDES = '<string>'
#BASIC_TYPES = int char bool long float double size_t std::string
#$(CLASSNAMES_H): class_name.h class_names Makefile
#	@echo "Creating $@..."
#	@for i in $(CLASSNAMES_INCLUDES); do echo "#include $$i"; done > $@
#	@./class_names $(BASIC_TYPES) >> $@
# /$(CLASSNAMES_H)
########################################################################


SOURCES = $(patsubst $(NAMESPACE_PREFIX)%,%,$(NS_SOURCES))
HEADERS = $(patsubst $(NAMESPACE_PREFIX)%,%,$(NS_HEADERS))
# $(CLASSNAMES_H)


FILE_FILTERS = namespace
namespace_FILTER_RULES = -e 's|PACKAGE_NAMESPACE|$(PACKAGE_NAMESPACE)|g;'
namespace_FILTER_NAMESED = s,$(NAMESPACE_PREFIX),,
namespace_FILTER_SOURCES = $(NS_SOURCES) $(NS_HEADERS)
namespace-notice:
	@echo "Package namespace is $(PACKAGE_NAMESPACE)."
FILE_FILTERS: namespace-notice
include $(TOC_MAKESDIR)/FILE_FILTERS.make


INSTALL_PACKAGE_HEADERS_DEST = $(prefix)/include/$(PACKAGE_NAMESPACE)
INSTALL_PACKAGE_HEADERS += $(HEADERS) $(EPRINTF)

SYMLINK_HEADERS = $(INSTALL_PACKAGE_HEADERS)
SYMLINK_HEADERS_DEST = $(top_srcdir)/include/$(PACKAGE_NAMESPACE)
include $(TOC_MAKESDIR)/symlink_headers.make


OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES))

DIST_FILES += $(NS_SOURCES) $(NS_HEADERS) class_names

all: FILE_FILTERS $(EPRINTF) symlink-headers $(OBJECTS)
# $(CLASSNAMES_H)

BIN_PROGRAMS = test_guard
test_guard_bin_OBJECTS = test_guard.o
include $(TOC_MAKESDIR)/BIN_PROGRAMS.make

