SHELL = /bin/sh
OS := $(shell uname)

include $(TOPDIR)/Make/dependencies

## We don't care about architectural distinguishers in the OS
## such as IRIX64, IRIX32, etc. so we truncate IRIX?? to IRIX
ifeq ($(findstring IRIX,$(OS)),IRIX)
OS := IRIX
endif

## Make CYGWIN_XXXX CYGWIN so it's "Windows cross platform" :)
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
OS := CYGWIN
#OS := MINGW
endif

# uncomment if you want allocation counting turned on.
# Used for debugging memory leaks.
#
# DEF += -DOSGPLANET_ENABLE_ALLOCATION_COUNT
# Enable Predator video (uncomment the next line)
ifneq ("$(ENABLE_PREDATOR)","no")
DEF += -DOSSIMPLANET_ENABLE_PREDATOR -DOSSIMPLANET_ENABLE_EPHEMERIS
endif


## Make MINGW_XXXX MINGW so it's "Windows cross platform" :)
ifeq ($(findstring MINGW,$(OS)),MINGW)
OS := MINGW
endif

# TOPDIR needs to be redefined for every GNUmakefile
TOPDIR     ?= ../
THISDIR    = .
MAKEDEPEND = ignore

####################################################################### 
##
##                   VERSIONING SEMANTICS
##
## Version consistes of <major> . <minor> . <release> - <revision>
## Where:
##    major   : Production (0 = pre-production)
##    minor   : 0-7 = Production minor, 8 = Alpha, 9 = Beta
##    release : Release tag
##    revision: Release revision - 0 = development (cutting edge). 
##
## Usage:
##     Default - VERSION_REVISION is set to the value defined here
##     Env variable OSGPLANET_VERSION_REVISION overrides default    
##           e.g.:
##               % setenv OSGPLANET_VERSION_REVISION 5
##               % make version
##     Command line overrides env variable
##               % make VERSION_REVISION=  
####################################################################### 
VERSION_MAJOR    = 1
VERSION_MINOR    = 0
VERSION_RELEASE  = 0
VERSION_REVISION ?= 0
VERSION       = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_RELEASE)

INC        = -I$(TOPDIR)/include

############################################################################
## NOTE - Semantics for the use of ARCH, ARCHARGS, and ARCHINST parameters
## ARCH     - must be defined if the OS supports both 64 and 32 bit 
##           architectures may remain undefined if it does not.
## ARCHARGS - Compiler directives to indicate for which architecture 
##           to build for
## ARCHINST - Installation target directory.  Define if the OS supports 
##           more than one architecture (32 and 64).
##              for ARCH=32 - define ARCHINST only if the system uses an 
##                            extension on 'lib' to indicate 32 bit.  e.g. 
##                            IRIX defines /usr/lib32
##              for ARCH=64 - Always define ARCHINST.  Even if the OS 
##                            doesn't make a distinction, we will.
############################################################################

CXXFLAGS   = $(ARCHARGS) $(DOF) $(DEF) $(INC)
LDFLAGS    = $(ARCHARGS) $(DOF) $(LINKARGS) -L$(TOPDIR)/lib/$(OS)$(ARCH) 
OBJS       = $(C++FILES:.cpp=.o) \
             $(CXXFILES:.cpp=.o) \
             $(CFILES:.c=.o) \

EXE_EXT    =

DOF        = $(OPTF)
DEBUGDIR   = $(OS)$(ARCH).Debug
OPTDIR     = $(OS)$(ARCH).Opt
BININST    = bin
LIBINST    = lib


ifeq ("$(INST_LOCATION)","")
INST_LOCATION  = /usr/local
endif
#INST_LOCATION  = /Users/Shared/Development/package/ossimPlanetInstall
INST_LIBS      = $(INST_LOCATION)/lib$(ARCHINST)
INST_INCLUDE   = $(INST_LOCATION)/include
INST_SHARE     = $(INST_LOCATION)/share
INST_EXAMPLES  = $(INST_SHARE)/libossimplanet/bin
INST_SRC       = $(INST_SHARE)/libossimplanet/src
INST_EXAMPLE_SRC = $(INST_SRC)/examples
INST_DOC       = $(INST_SHARE)/libossimplanet/doc
INST_DATA      = $(INST_SHARE)/libossimplanet/data
LINK           = ln -sf
INSTBINCMD     = install -m 755
INSTDEVCMD     = install -m 644
INSTLINKBINCMD = $(LINK)
INSTLINKDEVCMD = $(LINK)
LIB_PREFIX     = lib
LIB_EXT        = so
PLUGIN_EXT     = so
MAKEDIST       = echo "   === Distribution build is not implemented yet for $(OS)"; printf "\n"
INSTLOGFILE    = /tmp/.ossimplanet_inst_log

ifneq ("$(LIBWMS_INC_DIR)","")
INC += -I$(LIBWMS_INC_DIR)
endif

ifneq ("$(LIBWMS_LIB_DIR)","")
LDFLAGS += -L$(LIBWMS_LIB_DIR)
endif

ifneq ("$(OSSIMPREDATOR_INC_DIR)","")
INC += -I$(OSSIMPREDATOR_INC_DIR)
endif

ifneq ("$(OSSIMPREDATOR_LIB_DIR)","")
LDFLAGS += -L$(OSSIMPREDATOR_LIB_DIR) -lossimPredator
endif

ifneq ("$(OSSIM_INC_DIR)","")
INC += -I$(OSSIM_INC_DIR)
endif

ifneq ("$(OSSIM_LIB_DIR)","")
LDFLAGS += -L$(OSSIM_LIB_DIR)
endif

ifneq ("$(GPSTK_INC_DIR)","")
INC += -I$(GPSTK_INC_DIR)
endif

ifneq ("$(GPSTK_LIB_DIR)","")
LDFLAGS += -L$(GPSTK_LIB_DIR)
endif

ifneq ("$(OSSIM_LIB_DIR)","")
LDFLAGS += -L$(OSSIM_LIB_DIR)
endif

ifneq ("$(OPENTHREADS_INC_DIR)","")
INC += -I$(OPENTHREADS_INC_DIR)
endif

ifneq ("$(OPENTHREADS_LIB_DIR)","")
LDFLAGS += -L$(OPENTHREADS_LIB_DIR)
endif

ifneq ("$(PRODUCER_INC_DIR)","")
INC += -I$(PRODUCER_INC_DIR)
endif

ifneq ("$(PRODUCER_LIB_DIR)","")
LDFLAGS += -L$(PRODUCER_LIB_DIR)
endif

ifneq ("$(OSG_INC_DIR)","")
INC += -I$(OSG_INC_DIR)
endif

ifneq ("$(OSG_LIB_DIR)","")
LDFLAGS += -L$(OSG_LIB_DIR)
endif

ifneq ("$(OSSIM_PREDATOR_LIB)","")
LDFLAGS += -L$(OSSIM_PREDATOR_LIB)
endif

CC=gcc

OSSIM_LIBS=
OSG_LIBS          = -L/usr/local/lib64 -L/usr/local/lib -L/usr/local/bin -losgViewer -losgText -losgGA -losgDB -losgUtil -losg -lOpenThreads -lossimPredator -lossim -ljpeg -lz -lgpstk

RECURSIVE_TARGETS = \
	  opt\
	  debug\
	  clean\
	  cleandepend\
	  cleandependopt\
	  cleandependdbg\
	  cleandbg\
	  cleanopt\
	  cleantarget\
	  cleantargetopt\
	  cleantargetdbg\
	  clobber\
	  clobberdbg\
	  clobberopt\
	  cleantmp\
	  docs\
	  depend

#### SUN OS Specific definitions 
ifeq ($(OS),SunOS)

  #### if useing g++ on a sun
  ifeq ($(COMPILER),gnu)
    C++               = g++
    DEPARG            = -M
    INC               += 
    DEF               += -W -Wall -fPIC -fpermissive
    OPTF              = -O2
    DBGF              = -g 
    SHARED            = -shared -fPIC 
    ARCH              = 32
  ifeq ($(ARCH),64)
      ARCHARGS        = -m64 -DARCH64
      ARCHINST        = 64 
  else
      ARCHARGS        = 
  endif
    OTHER_LIBS        = -lexpat -lcurl 

  #### using forte compilers (default)
  else
    C++               = CC
    DEPARG            = -xM1
    INC               += 
    DEF               += -features=extensions -w
    OPTF              = -xO4
    DBGF              = -g 
    SHARED            = -G
    ARCH              = 32
  ifeq ($(ARCH),64)
      ARCHARGS        = -xarch=v9 -DARCH64
      ARCHINST        = 64
  else
      ARCHARGS        = 
      ARCHINST        = 
  endif
    OTHER_LIBS        = -lCstd -lexpat -lcurl
    LINKARGS          =  
  endif 
    DYNAMICLIBRARYLIB = -ldl
    SOCKET_LIBS       = -lsocket -lnsl
    INSTBINCMD        = cp
    INSTDEVCMD        = cp
    INST_LOCATION     = /opt/libossimPlanet
    MAKEDIST          = $(TOPDIR)/Make/makepkg
    OTHER_LIBS        = -lexpat -lcurl -lfreetype
    PNG_LIBS          = -lpng -lz
    JPEG_LIBS         = -ljpeg
    GIF_LIBS          = -lungif
    TIFF_LIB          = -ltiff -lz -ljpeg
    FREETYPE_LIB      = -lfreetype
endif

#### IRIX Specific definitions
ifeq ($(OS),IRIX)
	CXX = CC
	ifeq ($(CXX),CC)
		LINKARGS          = -L${TOPDIR}/lib -LANG:std -OPT:Olimit=0  
		C++               = CC
		DEPARG            = -M
		INC               += -I${TOPDIR}/include -I/usr/freeware/include
		DEF               += -LANG:std -OPT:Olimit=0 \
		                   -DEBUG:woff=1681 -DEBUG:woff=1682 -DEBUG:woff=3303\
		                   -MDupdate $(MAKEDEPEND)
		OPTF              = -O2 
		DBGF              = -g 
		SHARED            = -shared
		PFLIBS            = \
		                  -lpf3ds -lpfdem -lpfdted -lpfdwb -lpfdxf -lpfevt \
		                  -lpfflt -lpfgds -lpfgfo -lpfim -lpflsa -lpflsb \
		                  -lpfnff -lpfobj -lpfpegg -lpfpfb -lpfphd -lpfpts \
		                  -lpfrot -lpfscale -lpfsgf -lpfsgo -lpfsphere -lpfsv \
		                  -lpftri -lpfunc -lpfvct -lpfdu -lpfutil -lpf -all -limage
		ARCH              = 32
		ifeq ($(ARCH),64)
			ARCHARGS          = -64 -DARCH64
			ARCHINST          = 64
			LINKARGS          += -L/usr/freeware/lib64
			PF_XTRA_LIBS      = -L/usr/lib64/libpfdb -rpath /usr/lib64/libpfdb \
			                     $(PFLIBS)
		else 
			ARCHARGS          = -n32
			ARCHINST          = 32
			LINKARGS          += -L/usr/freeware/lib32
			PF_XTRA_LIBS      = -L/usr/lib32/libpfdb -rpath /usr/lib32/libpfdb \
			                     $(PFLIBS)
		endif
	else		
	 	LIBS              = -lstdc++
		LINKARGS          = -L${TOPDIR}/lib  
		C++               = g++
		INC               += -I${TOPDIR}/include -I/usr/freeware/include
		DEF               += -fPIC -W -Wno-unused 
		OPTF              = -O2 
		DBGF              = -g -gstabs+
		SHARED            = -shared
		PFLIBS            = \
		                  -lpf3ds -lpfdem -lpfdted -lpfdwb -lpfdxf -lpfevt \
		                  -lpfflt -lpfgds -lpfgfo -lpfim -lpflsa -lpflsb \
		                  -lpfnff -lpfobj -lpfpegg -lpfpfb -lpfphd -lpfpts \
		                  -lpfrot -lpfscale -lpfsgf -lpfsgo -lpfsphere -lpfsv \
		                  -lpftri -lpfunc -lpfvct -lpfdu -lpfutil -lpf -all -limage
		ARCH              = 32
		ifeq ($(ARCH),64)
			ARCHARGS          = -mabi=64 -mips4 -DARCH64
			ARCHINST          = 64
			LINKARGS          += -L/usr/freeware/lib64
			PF_XTRA_LIBS      = -L/usr/lib64/libpfdb -rpath /usr/lib64/libpfdb \
			                     $(PFLIBS)
		else 
			ARCHARGS          = -mabi=n32 -mips4
			ARCHINST          = 32
			LINKARGS          += -L/usr/freeware/lib32
			PF_XTRA_LIBS      = -L/usr/lib32/libpfdb -rpath /usr/lib32/libpfdb \
			                     $(PFLIBS)
		endif	
	endif

	DYNAMICLIBRARYLIB = 
	OTHER_LIBS        = -lm -lexpat -lcurl  -lfreetype
	PNG_LIBS          = -lpng -lz
	JPEG_LIBS         = -ljpeg
	GIF_LIBS          = -lungif
	TIFF_LIB          = -ltiff -lz -ljpeg
	FREETYPE_LIB      = -lfreetype
	MAKEDIST          = $(TOPDIR)/Make/makeirixdist
endif

#### Linux specific definitions

ifeq ($(OS),Linux)

  ifeq (x$(CXX),x)
    C++             = g++
  else
    C++             = $(CXX)
  endif

  DEPARG            = -M
  INC               += 

  ifeq ($(COMPILER),intel)
    C++             = ecc
    LIBS            = -lgcc_s
    DEF             += -KPIC
    OPTF            = -O2 
    DBGF            = -g 
    ifeq ($(SYSARCH),ia64)
      ARCHARGS        = 
      ARCH            = IA64
      ARCHINST        = IA64
    else
      ARCHARGS        = 
      ARCH            = 32
      ARCHINST        = 
    endif
  else
    LIBS            = -lstdc++
    DEF             += -W -Wall -fPIC
    OPTF            = -O2 
    DBGF            = -g -gstabs+
    SYSARCH           := $(shell arch)
    ifeq ($(SYSARCH),x86_64)
      ARCHARGS        =
      ARCH            = 64
      ARCHINST        = 64
    else
      ARCHARGS        = 
      ARCH            = 32
      ARCHINST        = 
    endif
  endif


  SHARED            = -shared
  DYNAMICLIBRARYLIB = -ldl
  PF_XTRA_LIBS      = -L/usr/lib/libpfdb   -Xlinker -rpath /usr/lib/libpfdb \
                      -lpfdu -lpfutil -lpf -lossimPredator
  SOCKET_LIBS       = 
  OTHER_LIBS        = -lwms -lexpat -lcurl -lfreetype
  PNG_LIBS          = -lpng -lz
  JPEG_LIBS         = -ljpeg
  GIF_LIBS          = -lungif
  TIFF_LIB          = -ltiff -lz -ljpeg
  FREETYPE_LIB      = -lfreetype
  MAKEDIST          = $(TOPDIR)/Make/makerpms
endif

#### FreeBSD specific definitions
ifeq ($(OS),FreeBSD)
  C++               = g++
  DEPARG            = -MM
  INC               +=  -I/usr/local/include
  DEF               += -W -Wall
  OPTF              = -O2 
  DBGF              = -g 
  SHARED            = -shared
  ARCH              = 
  ARCHINST          = 
  ARCHARGS          = 
  LINKARGS          = -L/usr/local/lib -rpath /usr/local/lib
 DYNAMICLIBRARYLIB = 
  SOCKET_LIBS       = 
  OTHER_LIBS        = -lwms -lexpat -lcurl -lfreetype
  PNG_LIBS          = -lpng -lz
  JPEG_LIBS         = -ljpeg
  GIF_LIBS          = -lungif
  TIFF_LIB          = -ltiff -lz -ljpeg
  FREETYPE_LIB      = -lfreetype
endif

#### MacOS X specific definitions
ifeq ($(OS),Darwin)
  ifeq (x$(CXX),x)
    C++             = g++
  else
    C++             = $(CXX)
  endif
  INC               += -F/System/Library/Frameworks -I/opt/local/include
  LDFLAGS	    += -F/System/Library/Frameworks -L/usr/X11R6/lib -L/opt/local/lib
  DEF               += -Wall -D__USE_OSX_AGL_IMPLEMENTATION__
  OPTF              = -O2
  DBGF              = -g
  DEPARG            = -M $(DEF)
  SHARED            = -dynamic
  ARCH              = 32
  ARCHINST          = 
  ARCHARGS          = 
  LINKARGS          =
  DYNAMICLIBRARYLIB =
  CARBON_LIB        = -framework Carbon
#  OTHER_LIBS        = -lm -lstdc++ -lwms -lexpat -lcurl -ljpeg -lOpenThreads -lossim -llammpi++ -lmpi -llam -llammpio -flat_namespace -undefined suppress -lfreetype -lpng12
  OTHER_LIBS        = -lm -lstdc++ -lwms -lexpat -lcurl -ljpeg -lOpenThreads -lossim -flat_namespace -undefined suppress -lfreetype -lpng12 -framework OpenGL
  PNG_LIBS          = -lpng -lz
  JPEG_LIBS         = -ljpeg
  GIF_LIBS          = -lungif
  TIFF_LIB          = -ltiff -lz -ljpeg
  FREETYPE_LIB      = -lfreetype
  X_INC             = -I/usr/X11R6/include
  X_LIBS            = -lX11 
  LIB_EXT           = dylib
  LIBVERSION	    = -current_version $(VERSION) \
                        -compatibility_version \
                        $(VERSION_MAJOR).$(VERSION_MINOR).0

  ifeq ($(DARWIN_QUICKTIME),yes)
    DEF             += -DDARWIN_QUICKTIME
  endif

  QUICKTIME	    = -framework QuickTime $(CARBON_LIB)

endif

#### Cygwin specific definitions
ifeq ($(OS),CYGWIN)
  C++               = c++
  DEPARG            = -M
  INC               += 
  DEF               += -DWIN32 -W -Wall -DNOMINMAX -D_WIN32_IMPLEMENTATION
  OPTF              = -O2 
  DBGF              = -g 
  SHARED            = -shared\
                        -Wl,--out-implib,$(TOPDIR)/lib/$(OS)/lib$(TARGET_BASENAME).dll.a -Wl,--export-all-symbols

  EXE_EXT           =.exe
  ARCH              = 
  ARCHINST          =
  ARCHARGS          = 
  LINKARGS          = -W -Wall
  DYNAMICLIBRARYLIB =
  SOCKET_LIBS       = 
  OTHER_LIBS        = -lwms -lexpat `curl-config --libs`  -lfreetype -ljpeg -lz -lOpenThreads
  PNG_LIBS          = -lpng -lz
  JPEG_LIBS         = -ljpeg
  GIF_LIBS          = -lungif
  TIFF_LIB          = -ltiff -lz -ljpeg
  FREETYPE_LIB      = -lfreetype

  LIBINST    = bin
  PLUGININST = bin/$(OS)$(ARCH)

  LIB_PREFIX        = cyg
  LIB_EXT           = dll
  PLUGIN_EXT        = dll
  LINK              = cp -f
  INST_LOCATION   = /usr/local/libossimPlanet
  INST_LIBS         = $(INST_LOCATION)/bin
  INST_PLUGINS      = $(INST_LOCATION)/bin
  INST_INCLUDE      = $(INST_LOCATION)/include
  INST_SHARE_PREFIX = /usr/local/libossimPlanet
  INST_SRC          = $(INST_SHARE_PREFIX)/src
  INST_EXAMPLES        = $(INST_SHARE_PREFIX)/bin
  INST_EXAMPLE_SRC     = $(INST_SHARE_PREFIX)/src/demos
  INST_DOC          = $(INST_SHARE_PREFIX)/doc
  INST_DATA         = $(INST_SHARE_PREFIX)/data
  MAKEDIST          = $(TOPDIR)/Make/makeinnosetup
endif

#### Mingw specific definitions
ifeq ($(OS),MINGW)
  C++               = c++ -mthreads
  DEPARG            = -M
  INC               += -I/usr/local/include -I/usr/local/include/ossim -I$(HOME)/ossim/src/packages/gdal/frmts/jpeg/libjpeg -I$(HOME)/ossim/src/packages/gdal/frmts/gtiff/libtiff
   DEF               += -DWIN32 -Wall -DOSSIMUSINGDLL 
# -W
  OPTF              = -O2 
  DBGF              = -g 
  SHARED            = -shared -mthreads \
                      -Wl,--out-implib,$(TOPDIR)/lib/$(OS)/lib$(TARGET_BASENAME).dll.a -Wl,--export-all-symbols

  EXE_EXT           =.exe
  ARCH              = 
  ARCHINST          =
  ARCHARGS          = 
  LINKARGS          = -W -Wall
  DYNAMICLIBRARYLIB =
  OTHER_LIBS        = -L/usr/local/lib/ossim -L/usr/local/bin -L/usr/local/lib -lwms -lglu32 -lopengl32

  LIBINST    = bin
  PLUGININST = bin/$(OS)$(ARCH)

  LIB_PREFIX        = lib
  LIB_EXT           = dll
  PLUGIN_EXT        = dll
  LINK              = cp -f
  INST_LOCATION     = /usr/local
  INST_LIBS         = $(INST_LOCATION)/bin
  INST_PLUGINS      = $(INST_LOCATION)/bin
  INST_INCLUDE      = $(INST_LOCATION)/include
  INST_SHARE_PREFIX = /usr/local
  INST_SRC          = $(INST_SHARE_PREFIX)/src
  INST_EXAMPLES     = $(INST_SHARE_PREFIX)/bin
  INST_EXAMPLE_SRC  = $(INST_SHARE_PREFIX)/src/examples
  INST_DOC          = $(INST_SHARE_PREFIX)/doc
  INST_DATA         = $(INST_SHARE_PREFIX)/data
  PNG_LIBS          = 
  JPEG_LIBS         = 
  GIF_LIBS          = 
  TIFF_LIB          = 
  FREETYPE_LIB      = -lfreetype
endif

#### HP-UX Specific definitions
# contributed by tino.schwarze@informatik.tu-chemnitz.de

ifeq ($(OS),HP-UX)

  C++               = g++
  DEPARG            = -M
  INC               += 
  DEF               += -W -Wall -fPIC
  OPTF              = -O2 
  # gcc 3.1 uses DWARF as default, my GDB might not yet support this...
  # at least I've got problems everywhere
  DBGF              = -g -gstabs+ 
  SHARED            = -shared -fPIC
  ARCH              = 32
ifeq ($(ARCH),64)
    # not yet tested
    ARCHARGS          = -march=2.0 -DARCH64
    ARCHINST          = 64
else
   # at least my gcc 3.1 defaults to HP-PA RISC 1.1
  ARCHARGS          = 
  ARCHINST          = 
endif
  LINKARGS          = 
  LIB_EXT           = sl
  PLUGIN_EXT        = sl
  DYNAMICLIBRARYLIB = -ldld
  SOCKET_LIBS       = 
  # make sure that global constructors/destructors are called upon
  # shl_load() / shl_unload() - this is a gcc specific workaround
  OTHER_LIBS        = -lm -Wl,+init -Wl,_GLOBAL__DI -Wl,+fini -Wl,_GLOBAL__DD -lexpat -lcurl -lfreetype
  FREETYPE_INCLUDE  = -I/opt/freetype/include -I/opt/freetype/include/freetype2
  FREETYPE_LIB      = -L/opt/freetype/lib -lfreetype
  PNG_INCLUDE       = -I/opt/libpng/include
  PNG_LIBS          = -L/opt/libpng/lib -lpng -L/opt/zlib/lib -lz
  JPEG_INCLUDE		= -I/opt/jpeg-6/include
  JPEG_LIBS         = -L/opt/jpeg-6/lib -ljpeg
  TIFF_INCLUDE      = -I/opt/tiff-3.5/include
  TIFF_LIB          = -L/opt/tiff-3.5/lib -ltiff
  GIF_INCLUDE		= -I/opt/libungif/include
  GIF_LIBS          = -L/opt/libungif/lib -lungif

endif

VPATH=..

