
include toc.make
# maintenance notes:
#  imported via toc:
#   $(PACKAGE_NAMESPACE)
#   $(LIBCL_CLIENT_LDADD) = flags for clients linking to lib$(LIBCL_LIBNAME)
#   $(LIBCL_LIBNAME)
#   $(LIBCL_VERSION)



FULL_BUILD = 1 # if it is !0 then some stuff is disabled (not useful for some trees)
ifeq (1,$(configure_class_loader_lib_only))
  # this feature is used by libs11n, which doesn't care about the test code
  # or the lib file.
  FULL_BUILD = 0
endif

PACKAGE_NAMESPACE ?= cl
LIBCL_VERSION ?= $(PACKAGE_VERSION)
LIBCL_LIBNAME ?= $(PACKAGE_NAMESPACE)_class_loader

NAMESPACE_PREFIX = src/

NS_SOURCES = $(addprefix $(NAMESPACE_PREFIX),\
			class_loader.cpp \
			path_finder.cpp \
	)
NS_HEADERS = $(addprefix $(NAMESPACE_PREFIX),\
		cllite.h \
		class_loader.h \
		cl_debuggering_macros.h \
		path_finder.h \
		)

#		dll_loader.h
#		cl_demo.cpp

DIST_FILES += $(wildcard src/*.cpp src/*.h)


# DIST_FILES += LoadableClass.cpp LoadableClass.h LoadableSubClass.cpp

ifneq (0,$(FULL_BUILD))
  NS_SOURCES += $(addprefix $(NAMESPACE_PREFIX),\
			lite.cpp \
			LoadableClass.cpp \
			LoadableSubClass.cpp \
	)
  NS_HEADERS += $(addprefix $(NAMESPACE_PREFIX),\
		LoadableClass.h \
		)
  LIBCL = lib$(LIBCL_LIBNAME)
  SHARED_LIBS = $(LIBCL) LoadableSubClass
  STATIC_LIBS = $(LIBCL)
  $(LIBCL)_so_OBJECTS = $(OBJECTS)
  $(LIBCL)_a_OBJECTS = $(OBJECTS)
  $(LIBCL)_so_VERSION = $(LIBCL_VERSION)
  LoadableSubClass_so_OBJECTS = LoadableSubClass.o
  LoadableSubClass_so_LDADD = $(LIBCL_CLIENT_LDADD)

  BIN_PROGRAMS = lite
# test_cl 
  test_cl_bin_OBJECTS = cl_demo.o LoadableClass.o
  test_cl_bin_LDADD = $(LIBCL_CLIENT_LDADD)
  lite_bin_OBJECTS = lite.o LoadableClass.o
  lite_bin_LDADD = $(LIBCL_CLIENT_LDADD)


  include $(TOC_MAKESDIR)/BIN_PROGRAMS.make
  include $(TOC_MAKESDIR)/SHARED_LIBS.make
  include $(TOC_MAKESDIR)/STATIC_LIBS.make
  INSTALL_LIBEXECS = $(LIBCL).so.$($(LIBCL)_so_VERSION)
  # ^^^ re-set the list to remove Loadable*.*, which are automatically added by SHARED_LIBS

endif
# ^^^ FULL_BUILD?

# Be careful with SOURCES/HEADERS, lest they be cleaned up when you don't
# want them to be. Simplest is to put everything into NS_{HEADERS/SOURCES} and expect
# them to be filtered by sed.
SOURCES = \
	$(patsubst $(NAMESPACE_PREFIX)%,%,$(NS_SOURCES)) 
HEADERS = \
	$(patsubst $(NAMESPACE_PREFIX)%,%,$(NS_HEADERS)) 

CLEAN_FILES += $(SOURCES) $(HEADERS)

OBJECTS = $(addsuffix .o,class_loader path_finder)

FILE_FILTERS = namespace
namespace_FILTER_RULES = -e 's|PACKAGE_NAMESPACE|$(PACKAGE_NAMESPACE)|g'
namespace_FILTER_SOURCES = $(NS_SOURCES) $(NS_HEADERS)
namespace_FILTER_NAMESED = s,src/,,
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 = $(filter-out Loadable%,$(HEADERS))


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



ALLTARGETS = FILE_FILTERS symlink-headers deps $(OBJECTS)
ifneq (0,$(FULL_BUILD))
  ALLTARGETS += SHARED_LIBS STATIC_LIBS BIN_PROGRAMS
endif

all: $(ALLTARGETS)
	@echo "When running the test binary be sure to set your LD_LIBRARY_PATH to include ${PWD}!"
	@echo "Running the 'test' target does this for you."

RUNTEST = LD_LIBRARY_PATH=$(top_srcdir)/lib/cl:${PWD}:${LD_LIBRARY_PATH} ./lite
# demo app:
test:
	$(RUNTEST)
# demonstrate a failed lookup for a DLL:
faildll:
	mv LoadableSubClass.so tmp.foo
	-$(RUNTEST)
	mv tmp.foo LoadableSubClass.so


