/*
 * Imakefile for the Hyper-G 3D Scene Viewer
 *
 *
 * Author :  Keith Andrews, IICM, TU Graz, Austria
 *            <kandrews@iicm.tu-graz.ac.at>
 *
 * Changes:  Michael Pichler
 *
 * Created:  20 Mar 92
 *
 * Changed:  22 Sep 94  (adaption for Open-GL)
 * Changed:   9 Feb 95  (both Open-GL and Iris-GL on SGI)
 * Changed:  15 Mar 95  (added Mesa support)
 * Changed:  24 Apr 95  (VRML support)
 * Changed:  20 Jul 95  (Mosaic CCI)
 * Changed:  19 Jan 96
 *
 */


#ifdef InObjectCodeDir

SHELL = /bin/sh
IICMBINDIR = ../bin
HARMBINDIR = ../bin

MY_LIB_DIR = $(ROOTDIR)/lib

# build and install standalone viewer and harmony scene daemon depending on GL version
AllTarget(compdate)
AllTarget(compdate.o)

/* activate next line to build Mosaic CCI version */
/* #define MAKE_CCI */

/* for Spaceball support activate appropriate define in config/gl.conf */

#include <gl.conf>

#ifdef OPEN_GL
OGL_CONTEXT = oglcontext
OGL_LIB_DIR = -L$(SRC)/../ge3d/ogl/$(ARCH)
OGL_LIBS = -lGLU -lGL
OGL_GE3D = ge3dOGL
AllTarget(vrweb-ogl)
AllTarget(harscened-ogl)
#ifdef MAKE_CCI
AllTarget(vrwebmc.ogl)
#endif
InstallProgram(vrweb-ogl,$(IICMBINDIR),vrweb-ogl)
#  ifdef DEFAULT_OPEN_GL
InstallProgram(harscened-ogl,$(HARMBINDIR),harscened)
#  else
InstallProgram(harscened-ogl,$(HARMBINDIR),harscened-ogl)
#  endif
#endif

#ifdef IRIS_GL
GL_CONTEXT = gecontext
GL_LIB_DIR = -L$(SRC)/../ge3d/gl/$(ARCH)
GL_LIBS = -lgl_s -lc_s
GL_GE3D = ge3d
AllTarget(vrweb-gl)
AllTarget(harscened-gl)
#ifdef MAKE_CCI
AllTarget(vrwebmc.gl)
#endif
InstallProgram(vrweb-gl,$(IICMBINDIR),vrweb-gl)
#  ifdef DEFAULT_IRIS_GL
InstallProgram(harscened-gl,$(HARMBINDIR),harscened)
#  else
InstallProgram(harscened-gl,$(HARMBINDIR),harscened-gl)
#  endif
#endif

#ifdef MESA_GL
MESA_CONTEXT = mesacontext
MESA_LIB_DIR = -L$(SRC)/../ge3d/mesa/$(ARCH) -L$(SRC)/../mesa/src/$(ARCH) -L$(SRC)/../mesa/src-glu/$(ARCH)
MESA_LIBS = -lMesaGLU -lMesaGL
MESA_GE3D = ge3dMESA
AllTarget(vrweb-mesa)
AllTarget(harscened-mesa)
#ifdef MAKE_CCI
AllTarget(vrwebmc.mesa)
#endif
InstallProgram(vrweb-mesa,$(IICMBINDIR),vrweb-mesa)
#  ifdef DEFAULT_MESA_GL
InstallProgram(harscened-mesa,$(HARMBINDIR),harscened)
#  else
InstallProgram(harscened-mesa,$(HARMBINDIR),harscened-mesa)
#  endif
#endif


# debugging with debug_malloc -- only link again (rm executable)
# #define debug_malloc

# debugging with memleak (works not well with InterViews) -- must compile again (rm *.o)
# #define debug_memleak

#ifdef MAKE_CCI
CCI_INCLUDES = -I$(SRC)/../lib
#else
CCI_INCLUDES =
#endif

APP_CCINCLUDES = -I$(SRC)/.. -I$(SRC)/../mesa/include -I$(SRC)/../qv/include $(CCI_INCLUDES)

#ifdef debug_malloc
APP_CCLDLIBS = -ldbmalloc
#else
APP_CCLDLIBS =
#endif


#ifdef OPEN_GL
OGL_CCLDLIBS = $(APP_CCLDLIBS) $(OGL_LIB_DIR) -l$(OGL_GE3D) $(OGL_LIBS) $(IV_CCLDLIBS) $(EXTRA_CCLDLIBS)
OGL_CCDEPLIBS = $(SRC)/../ge3d/ogl/$(ARCH)/lib$(OGL_GE3D).a
#endif
#ifdef IRIS_GL
GL_CCLDLIBS = $(APP_CCLDLIBS) $(GL_LIB_DIR) -l$(GL_GE3D) $(GL_LIBS) $(IV_CCLDLIBS) $(EXTRA_CCLDLIBS)
GL_CCDEPLIBS = $(SRC)/../ge3d/gl/$(ARCH)/lib$(GL_GE3D).a
#endif
#ifdef MESA_GL
MESA_CCLDLIBS = $(APP_CCLDLIBS) $(MESA_LIB_DIR) -l$(MESA_GE3D) $(MESA_LIBS) $(IV_CCLDLIBS) $(EXTRA_CCLDLIBS)
MESA_CCDEPLIBS = $(SRC)/../ge3d/mesa/$(ARCH)/lib$(MESA_GE3D).a $(SRC)/../mesa/src/$(ARCH)/libMesaGL.a $(SRC)/../mesa/src-glu/$(ARCH)/libMesaGLU.a
#endif

# Mosaic CCI
MC_CCLDLIBS = -lCCI
MC_CCDEPLIBS = $(SRC)/../lib/CCI/$(ARCH)/libCCI.a

#ifdef debug_memleak
APP_CCDEFINES = -DMEMLEAK -D$(ARCH)
MEMLEAK_OBJ = memleak.o
#else
APP_CCDEFINES = -D$(ARCH) -DVERBOSE -DASSERT
MEMLEAK_OBJ =
#endif

# do Optimization (old SGI compiler did errors without -O for scenepick)
APP_CCFLAGS = -O
APP_CCLDFLAGS =


# storage/display of 3D scene
SCENE_GENERAL = \
  $(MEMLEAK_OBJ) \
  slist.o \
  vecutil.o \
  camera.o \
  strarray.o \
  scene3d.o

SCENE_SDF = \
  object3d.o \
  sdfcam.o \
  geomobj.o \
  srcanch.o \
  light.o \
  polyhed.o \
  material.o \
  dummyobj.o \
  sdfscene.o \
  readscene.o \
  writescene.o \
  writevrml.o \
  scenepick.o

SCENE_VRML = \
  vrmlscene.o \
  wrltraverse.o \
  wrlbuild.o \
  wrldraw.o \
  wrlpick.o

SCENE_OBJS = $(SCENE_GENERAL) $(SCENE_SDF) $(SCENE_VRML)

# user interface: InterViews
IV_OBJS = \
  stranslate.o \
  themenus.o \
  dialogs.o \
  hgptrhand.o \
  delhand.o \
  scenewin.o

# integrated viewers for texts, images
VWR_OBJS = \
  imgview.o \
  txtview.o

#ifdef OPEN_GL
OGL_HG3D_OBJS   = $(SCENE_OBJS) $(IV_OBJS) $(OGL_CONTEXT).o $(VWR_OBJS)  main.o
OGL_HG3DVD_OBJS = $(SCENE_OBJS) $(IV_OBJS) $(OGL_CONTEXT).o iv3dvw.o hg3dvw.o imgserver.o hg3dvd.o
OGL_MOCCI_OBJS  = $(SCENE_OBJS) $(IV_OBJS) $(OGL_CONTEXT).o cciCaller.o momain.o
#endif
#ifdef IRIS_GL
GL_HG3D_OBJS   = $(SCENE_OBJS) $(IV_OBJS) $(GL_CONTEXT).o $(VWR_OBJS) main.o
GL_HG3DVD_OBJS = $(SCENE_OBJS) $(IV_OBJS) $(GL_CONTEXT).o iv3dvw.o hg3dvw.o imgserver.o hg3dvd.o
GL_MOCCI_OBJS  = $(SCENE_OBJS) $(IV_OBJS) $(GL_CONTEXT).o cciCaller.o momain.o
#endif
#ifdef MESA_GL
MESA_HG3D_OBJS   = $(SCENE_OBJS) $(IV_OBJS) $(MESA_CONTEXT).o $(VWR_OBJS) main.o
MESA_HG3DVD_OBJS = $(SCENE_OBJS) $(IV_OBJS) $(MESA_CONTEXT).o iv3dvw.o hg3dvw.o imgserver.o hg3dvd.o
MESA_MOCCI_OBJS  = $(SCENE_OBJS) $(IV_OBJS) $(MESA_CONTEXT).o cciCaller.o momain.o
#endif

# InterViews Libraries (including -lm)
Use_libInterViews()

# Starbase Libraries
SB_LIBS = -ldd98705 -lXwindow -lsb -L/usr/lib/X11R4 -lXhp11 -lX11 -ldld

# Hyper-G Viewer Daemon Libraries
# compdate moved here - avoid linking again when only compdate.o changed
HG_LIBS =  compdate.o \
-L$(MY_LIB_DIR)/WWW/$(ARCH) \
-L$(MY_LIB_DIR)/ipc/$(ARCH) \
-L$(MY_LIB_DIR)/hyperg/$(ARCH) \
-L$(MY_LIB_DIR)/utils/$(ARCH) \
-L$(MY_LIB_DIR)/widgets/$(ARCH) \
-L$(MY_LIB_DIR)/hgraster/hgraster/$(ARCH) \
-L$(SRC)/../qv/src/$(ARCH) \
-L$(SRC)/../lib/CCI/$(ARCH) \
-lHgRaster -lHgWidgets -lHgViewerStubs -lHgWWWTools -lHgHyperg -lHgUtilities -lvrmlQv

# Spaceball libraries
#ifdef SPACEBALL
SPACEBALL_LIBS = SpaceballLDFlags
#else
SPACEBALL_LIBS = 
#endif

# dependend libraries (without graphics libs)
APP_CCDEPLIBS = \
  $(MY_LIB_DIR)/utils/$(ARCH)/HgLibName(Utilities,2.0) \
  $(MY_LIB_DIR)/hyperg/$(ARCH)/HgLibName(Hyperg,1.0) \
  $(MY_LIB_DIR)/ipc/$(ARCH)/HgLibName(ViewerStubs,1.0) \
  $(MY_LIB_DIR)/widgets/$(ARCH)/HgLibName(Widgets,1.0) \
  $(SRC)/../qv/src/$(ARCH)/libvrmlQv.a

/* the programs to make: */

# hg3d_sb: 3D Scene Viewer, Starbase -- currently not executable
BuildProgram(hg3d_sb,$(HG3D_OBJS),$(HG3D_OBJS),$(HG_LIBS) $(CCLDLIBS) $(SB_LIBS),$(HG_LIBS) $(CCLDLIBS) $(SB_LIBS))

#ifdef OPEN_GL
HG_OGL_LIBS = $(HG_LIBS) $(SPACEBALL_LIBS) $(OGL_CCLDLIBS)
/* VRweb, standalone, OpenGL */
BuildProgram(vrweb-ogl,$(OGL_HG3D_OBJS),$(OGL_HG3D_OBJS),$(CCDEPLIBS) $(OGL_CCDEPLIBS),$(HG_OGL_LIBS))
/* Hyper-G Scene Viewer Daemon, OpenGL */
BuildProgram(harscened-ogl,$(OGL_HG3DVD_OBJS),$(OGL_HG3DVD_OBJS),$(CCDEPLIBS) $(OGL_CCDEPLIBS),$(HG_OGL_LIBS))
#ifdef MAKE_CCI
/* VRweb with Mosaic CCI, OpenGL */
BuildProgram(vrwebmc.ogl,$(OGL_MOCCI_OBJS),$(OGL_MOCCI_OBJS),$(CCDEPLIBS) $(OGL_CCDEPLIBS) $(MC_CCDEPLIBS),$(MC_CCLDLIBS) $(HG_OGL_LIBS))
#endif
#endif

#ifdef IRIS_GL
HG_GL_LIBS = $(HG_LIBS) $(SPACEBALL_LIBS) $(GL_CCLDLIBS)
/* VRweb, standalone, IrisGL */
BuildProgram(vrweb-gl,$(GL_HG3D_OBJS),$(GL_HG3D_OBJS),$(CCDEPLIBS) $(OGL_CCDEPLIBS),$(HG_GL_LIBS))
/* Hyper-G Scene Viewer Daemon, IrisGL */
BuildProgram(harscened-gl,$(GL_HG3DVD_OBJS),$(GL_HG3DVD_OBJS),$(CCDEPLIBS) $(OGL_CCDEPLIBS),$(HG_GL_LIBS))
#  ifdef MAKE_CCI
/* VRweb with Mosaic CCI, IrisGL */
BuildProgram(vrwebmc.gl,$(GL_MOCCI_OBS),$(GL_MOCCI_OBJS),$(CCDEPLIBS) $(GL_CCDEPLIBS) $(MC_CCDEPLIBS),$(MC_CCLDLIBS) $(HG_GL_LIBS))
#  endif
#endif

#ifdef MESA_GL
HG_MESA_LIBS = $(HG_LIBS) $(SPACEBALL_LIBS) $(MESA_CCLDLIBS)
/* VRweb, standalone, Mesa lib */
BuildProgram(vrweb-mesa,$(MESA_HG3D_OBJS),$(MESA_HG3D_OBJS),$(CCDEPLIBS) $(MESA_CCDEPLIBS),$(HG_MESA_LIBS))
/* Hyper-G Scene Viewer Daemon, Mesa lib */
BuildProgram(harscened-mesa,$(MESA_HG3DVD_OBJS),$(MESA_HG3DVD_OBJS),$(CCDEPLIBS) $(MESA_CCDEPLIBS),$(HG_MESA_LIBS))
#  ifdef MAKE_CCI
/* VRweb with Mosaic CCI, Mesa lib */
BuildProgram(vrwebmc.mesa,$(MESA_MOCCI_OBJS),$(MESA_MOCCI_OBJS),$(CCDEPLIBS) $(MESA_CCDEPLIBS) $(MC_CCDEPLIBS),$(MC_CCLDLIBS) $(HG_MESA_LIBS))
#  endif
#endif

# scene management (independent of file format)
MakeObjectFromSrc(slist)
MakeObjectFromSrc(vecutil)
MakeObjectFromSrc(camera)
MakeObjectFromSrc(strarray)
MakeObjectFromSrc(scene3d)

# SDF scenes
MakeObjectFromSrc(object3d)
MakeObjectFromSrc(sdfcam)
MakeObjectFromSrc(geomobj)
MakeObjectFromSrc(srcanch)
MakeObjectFromSrc(light)
#if defined(AlphaArchitecture) && !defined(HasGcc)
MakeObjectFromSrcFlags(polyhed,-Olimit 1024)  /* for cxx to optimize readObjFile */
#else
MakeObjectFromSrc(polyhed)
#endif
MakeObjectFromSrc(material)
MakeObjectFromSrc(dummyobj)
MakeObjectFromSrc(sdfscene)
MakeObjectFromSrc(readscene)
MakeObjectFromSrc(writescene)
MakeObjectFromSrc(writevrml)
MakeObjectFromSrc(scenepick)

# VRML scenes
MakeObjectFromSrc(vrmlscene)
MakeObjectFromSrc(wrltraverse)
MakeObjectFromSrc(wrlbuild)
MakeObjectFromSrc(wrldraw)
MakeObjectFromSrc(wrlpick)

# InterViews stuff (user interface)
#ifdef SPACEBALL
MakeObjectFromSrcFlags(stranslate,SpaceballCCFlags)
MakeObjectFromSrcFlags(themenus,SpaceballCCFlags)
MakeObjectFromSrcFlags(dialogs,SpaceballCCFlags)
MakeObjectFromSrcFlags(hgptrhand,SpaceballCCFlags)
MakeObjectFromSrcFlags(scenewin,SpaceballCCFlags)
#else
MakeObjectFromSrc(stranslate)
MakeObjectFromSrc(themenus)
MakeObjectFromSrc(dialogs)
MakeObjectFromSrc(hgptrhand)
MakeObjectFromSrc(scenewin)
#endif
#ifdef OPEN_GL
MakeObjectFromSrcFlags($(OGL_CONTEXT),-DGE3DTEXT)
#endif
#ifdef IRIS_GL
MakeObjectFromSrc($(GL_CONTEXT))
#endif
#ifdef MESA_GL
MakeObjectFromSrcFlags($(MESA_CONTEXT),-DGE3DTEXT)
#endif

# stubs of other viewers for standalone version
MakeObjectFromSrc(imgview)
MakeObjectFromSrc(txtview)
MakeObjectFromSrc(delhand)

# real Harmony viewer stuff (daemon)
MakeObjectFromSrc(iv3dvw)
MakeObjectFromSrc(hg3dvw)
MakeObjectFromSrc(hg3dvd)
MakeObjectFromSrc(imgserver)

#ifdef MAKE_CCI
# Mosaic CCI stuff
MakeObjectFromSrc(cciCaller)
MakeObjectFromSrc(momain)
#endif

/* MakeObjectFromSrc(compdate) includes AOUT: compdate.o dependency */

compdate.o: $(SRC)/compdate.C
	@$(RM) compdate.o compdate..c
	$(CCDRIVER) $(CCFLAGS) -c $(SRC)/compdate.C

# mains for standalone programs (not Hyper-G daemons)
MakeObjectFromSrc(main)
MakeObjectFromSrc(main1)    /* sorry, not yet ported to OpenGL */

#if defined(SunArchitecture) && (OSMajorVersion <= 4)
# simpler date format, used on SUN4
DATEFORMAT='+%a %d %h %y'
#else
# date parameters are machine dependent, this one works for SGI, DEC ALPHA, SUN5, HPUX
DATEFORMAT='+%a %e %b %Y'
#endif

# the following echo commands can be executed by any shell
compdate:
	@echo 'writing compile date "'"`date $(DATEFORMAT)`"'" to' $(SRC)/compdate.C
	@echo '#include "compdate.h"' > $(SRC)/compdate.C
	@echo 'const char* compDate () { return "'"`date $(DATEFORMAT)`"'"; }' >> $(SRC)/compdate.C


# rules for make depend
DependTarget()



#else

MakeInObjectCodeDir()

#endif /* if compiling in subdirectory */
