# $Id: shared-objects,v 2.5 2011/04/29 08:39:13 cal103 Exp $

LIB := shared-objects

include $(KARMAROOT)/source/lib/makefiles/GNUmakefile.h1

target_dir := $(KARMALIBPATH)/shared-objects

# Now define all the objects and flags
csource :=
ccsource :=
cflags :=
ldflags :=
dependflags :=
TARGETS :=


.PHONY: all build
all : $(target_dir) build clean

$(target_dir):
	mkdir -p $(target_dir)


# XGL start ###################################################################
ifdef XGLHOME
xgl_target := $(target_dir)/kwin_xgl.so
TARGETS += $(xgl_target)

$(xgl_target):	kwin_xgl.o kwin_xgl.c
	$(LDso) -o kwin_xgl.so kwin_xgl.o $(LDFLAGS)
	rm -f $(target_dir)/kwin_xgl.so
	cp -p kwin_xgl.so $(target_dir)
	rm kwin_xgl.so
	@echo "$(XGLHOME)/lib" > $(target_dir)/kwin_xgl.libs
	@echo "xgl" >> $(target_dir)/kwin_xgl.libs
	@echo "Contents of: $(target_dir)/kwin_xgl.libs follow"
	@cat $(target_dir)/kwin_xgl.libs

kwin_xgl.o:	kwin_xgl.c
	$(CC) $(cc_picflag) -c $(csourcedir)/kwin_xgl.c -I$(XGLHOME)/include \
	-I$(XINCLUDEPATH)

csource += kwin_xgl.c
cflags += -I$(XGLHOME)/include
dependflags += -I$(XGLHOME)/include
x11flags = -I$(XINCLUDEPATH)
endif
# XGL end #####################################################################

# GLISH start #################################################################
ifdef GLISHROOT
  GLISHINCD := -I$(GLISHROOT)/include
  GLISHLIBD := $(GLISHROOT)/$(MYOS)/lib
  GLISHLIBS := -lglish -lsos -lnpd

  lpath :=
  rpath := $(KARMALIBPATH):$(GLISHLIBD)

  ifdef MAKE_MULTIBEAMVIS
    # Put suitably modified (noDL) versions directly into libkarma for static
    # linking of MultibeamVis/View 1.7.20.
    TARGETS += ../karma/gls_main.o ../karma/kvis-multibeam.o

    ../karma/gls_main.o : gls_main_noDL.cc
	-@ echo ""
	   $(CCpp) -c $< -o $@ $(GLISHINCD)

    ../karma/kvis-multibeam.o : kvis-multibeam_noDL.cc
	-@ echo ""
	   $(CCpp) -c $< -o $@ $(GLISHINCD)
  else
    # Generate sharable objects for dynamic loading.  These may also be used
    # by kvis 1.7.25 (only available as a binary) for which they were built
    # using an older version of Glish.
    TARGETS += $(target_dir)/gls_main.so $(target_dir)/kvis-multibeam.so

    gls_main.o : gls_main.cc
	-@ echo ""
	   $(CCpp) $(CC_picflag) -c $< -o $@ $(GLISHINCD)

    kvis-multibeam.o : kvis-multibeam.cc
	-@ echo ""
	   $(CCpp) $(CC_picflag) -c $< -o $@ $(GLISHINCD)
  endif

  ifdef __disabled__
    $(target_dir)/gls_main.so : gls_main.o
	$(LDso) -o gls_main.so gls_main.o $(LDFLAGS)
	$(RM) $(target_dir)/gls_main.so
	cp -p gls_main.so $(target_dir)
	$(RM) gls_main.so
	@echo "$(GLISHLIBD):$(CCpp_libdirs)" > $(target_dir)/gls_main.libs
	@echo "$(CCpp_libs) npd sos glish" >> $(target_dir)/gls_main.libs
	@echo "Contents of: $(target_dir)/gls_main.libs follow"
	@cat $(target_dir)/gls_main.libs
  else
    GLIBS := -L$(KARMALIBPATH) -lkarma -L$(GLISHLIBD) $(GLISHLIBS)

    $(target_dir)/gls_main.so : gls_main.o
	-@ echo ""
	   $(LDpp) -o $(@F) $< $(LDFLAGS) -shared $(GLIBS)
	-@ $(RM) $@
	   cp -p $(@F) $(@D)
	   $(RM) $(@F)
  endif

  # Simple linking seems to be OK here, since Glish should already be loaded.
  # Also require simple linking so that g++ does not put in its own _init
  # symbol.

  KLIBS := -L$(KARMALIBPATH) -lkarmagraphics -lkarmawidgets -lkarmaXt -lkarma 
  KLIBS += -L$(GLISHLIBD) $(GLISHLIBS) -L$(XLIBPATH) -lXt

  $(target_dir)/kvis-multibeam.so : kvis-multibeam.o
	-@ echo ""
	   $(LDso) -o $(@F) $< $(LDFLAGS) $(KLIBS)
	-@ $(RM) $@
	   cp -p $(@F) $(@D)
	   $(RM) $(@F)

  ccsource    += gls_main.cc kvis-multibeam.cc
  cflags      += $(GLISHINCD)
  dependflags += $(GLISHINCD)
endif
# GLISH end ###################################################################


# Common section
CFLAGS := $(cflags) $(x11flags)
DEPENDFLAGS := $(dependflags) $(x11flags)
all_cflags := $(CFLAGS)

.PRECIOUS: $(TARGETS)

build:	$(TARGETS)


include $(KARMAROOT)/source/lib/makefiles/GNUmakefile.h2
