###
# $Id: makelibcore 13689 2008-10-07 12:26:45Z dburken $
###

@INCLUDE_COMMON@

DIRECTORIES=$(wildcard *)

OSSIM_LIB=ossim
OSSIM_IMP_LIB=$(OSSIM_LIB_PATH)/$(OSSIM_LIB).dll.a
OSSIM_DLL_LIB=$(OSSIM_LIB_PATH)/$(OSSIM_LIB).dll
OSSIM_DLL_DEF=$(OSSIM_LIB_PATH)/$(OSSIM_LIB).def
SHARED_LIB_VERSIONLESS=$(OSSIM_LIB).$(SO_VERSIONLESS_EXT)
SHARED_LIB_SONAME=$(OSSIM_LIB).$(SO_SONAME_EXT)
SHARED_LIB_REALNAME=$(OSSIM_LIB).$(SO_REALNAME_EXT)
SHARED_LIB_TARGET=$(OSSIM_LIB_PATH)/$(SHARED_LIB_REALNAME)
SHARED_OBJ_DIR_PATH=$(BASELIBPATH)/$(SHARED_OBJ_DIR)

STATIC_LIB=$(OSSIM_LIB).a
STATIC_LIB_TARGET=$(OSSIM_LIB_PATH)/$(STATIC_LIB)
STATIC_OBJ_DIR_PATH=$(BASELIBPATH)/$(STATIC_OBJ_DIR)

# Path to ossimVersion.h
VERSION_FILE=$(OSSIM_TOP)/include/ossim/ossimVersion.h

# ---
# To handle "for d in $(VAR);" expanding to  "for d in ;"
# if no directories present and producing an error on sun os.
# Substitute empty string with bogus string.
# ---
ifeq ($(strip $(DIRECTORIES)),)
DIRECTORIES=BOGUS_DIR
endif

all:	version-config
	./version-config $(VERSION_FILE) $(OSSIM_VERSION)
	for d in $(DIRECTORIES); do \
		if [ -d $$d ]; then \
			if [ "$$d" != "CVS" -a "$$d" != "."  -a "$$d" != "test_endian"  -a "$$d" != "test" -a "$$d" != "generator" -a "$$d" != ".obj" ]; then \
				(cd $$d; $(MAKE) all) ; \
			fi ; \
		fi ; \
	done ;
	$(build_single_shared_lib)
	$(build_single_static_lib)

version-config:
	if test ! -f "$(OSSIM_TOP)/src/ossim/version-config" ; then \
		$(CXX) -I$(OSSIM_TOP)/include -o version-config version-config.cpp ; \
	fi

clean:	clean-version
	$(RM_CMD)
	if [ -d ".obj" ]; then \
		cd .obj ; \
		rm -f *; \
	fi
	for d in $(DIRECTORIES); do \
		if [ -d $$d ]; then \
			if [ "$$d" != "CVS" -a "$$d" != "."  -a "$$d" != "test_endian"  -a "$$d" != "test" -a "$$d" != ".obj" -a "$$d" != "generator" ]; then \
			(cd $$d; $(MAKE) clean) ; \
			fi ; \
		fi ; \
	done ;

clean-version:
	$(RM_NOPROMPT) version-config
	$(RM_NOPROMPT) $(VERSION_FILE)

depends: 
	for d in $(DIRECTORIES); do \
		if [ -d $$d ]; then \
			if [ "$$d" != "CVS" -a "$$d" != "."  -a "$$d" != "test_endian"  -a "$$d" != "test" -a "$$d" != ".obj" -a "$$d" != "generator" ]; then \
				(cd $$d; $(MAKE) depends) ; \
			fi ; \
		fi ; \
	done ;

clean_depends:
	for d in $(DIRECTORIES); do \
		if [ -d $$d ]; then \
			if [ "$$d" != "CVS" -a "$$d" != "."  -a "$$d" != "test_endian"  -a "$$d" != "test" -a "$$d" != ".obj" -a "$$d" != "generator" ]; then \
				(cd $$d; $(MAKE) clean_depends) ; \
			fi ; \
		fi ; \
	done ;


shared: 
	for d in $(DIRECTORIES); do \
		if [ -d $$d ]; then \
			if [ "$$d" != "CVS" -a "$$d" != "."  -a "$$d" != "test_endian"  -a "$$d" != "test" -a "$$d" != ".obj" -a "$$d" != "generator" ]; then \
				(cd $$d; $(MAKE) shared) ; \
			fi ; \
		fi ; \
	done ;

install:
	for f in `find . -name "*.h"` ; do \
		$(INSTALL) -d  $(INST_INC)/`$(DIRNAME) $$f`; \
		$(INSTALL) $$f $(INST_INC)/`$(DIRNAME) $$f`; \
	done

dll:
	$(build_single_shared_lib)

# ---
# NOTE:
# Have to use relative path to shared object directories.  With absolute paths
# the args list passed to dllwrap get too long.
# ---
ifeq ($(BUILD_SINGLE_SHARED_LIBS),yes)
define build_single_shared_lib
@LD_SHARED@ -o $(OSSIM_DLL_LIB) \
   matrix/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   kbool/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   base/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   font/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   vpfutil/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   vec/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   support_data/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   elevation/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   projection/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   imaging/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   parallel/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   plugin/$(SHARED_OBJ_DIR)/*.$(OBJEXT) \
   init/$(SHARED_OBJ_DIR)/*.$(OBJEXT) $(OSSIM_LIB_LINK) ;
endef
else
define build_single_shared_lib
echo "Single shared library build disabled.";
endef
endif

# ---
# Define command sequences conditional upon "$(BUILD_STATIC_LIBS) = yes"
# ---
ifeq ($(BUILD_SINGLE_STATIC_LIBS),yes)

define build_single_static_lib
$(AR) $(AR_FLAGS) $(STATIC_LIB_TARGET) \
   $(MATRIX_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(KBOOL_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(BASE_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(FONT_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(VPFUTIL_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(VEC_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(SUPPORT_DATA_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(ELEVATION_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(PROJECTION_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(IMAGING_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(PARALLEL_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(PLUGIN_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) \
   $(INIT_ROOT)/$(STATIC_OBJ_DIR)/*.$(OBJEXT) $(OSSIM_LIB_LINK) ; \
$(RANLIB) $(STATIC_LIB_TARGET) ;
endef

else

define build_single_static_lib
echo "Single static library build disabled.";
endef

endif
# End of "ifeq ($(BUILD_SINGLE_STATIC_LIBS),yes)"
