# ---------------------------------------------------------------
# SWIG Perl5 Makefile
# 
# This file can be used to build various Perl5 extensions with SWIG.
# By default this file is set up for dynamic loading, but it can
# be easily customized for static extensions by modifying various
# portions of the file.
#
#        SRCS       = C source files
#        CXXSRCS    = C++ source files
#        OBJCSRCS   = Objective-C source files
#        OBJS       = Additional .o files (compiled previously)
#        INTERFACE  = SWIG interface file
#        TARGET     = Name of target module or executable
#
# Many portions of this file were created by the SWIG configure
# script and should already reflect your machine.
#----------------------------------------------------------------

SRCS          = 
CXXSRCS       = 
OBJCSRCS      = 
OBJS          = 
INTERFACE     = 
WRAPFILE      = $(INTERFACE:.i=_wrap.c)
WRAPOBJ       = $(INTERFACE:.i=_wrap.o)
TARGET        = module@SO@ # Use this kind of target for dynamic loading
#TARGET        = myperl  # Use this target for static linking

prefix        = @prefix@
exec_prefix   = @exec_prefix@

CC            = @CC@
CXX           = @CXX@
OBJC          = @CC@ -Wno-import # -Wno-import needed for gcc 
CFLAGS        = 
INCLUDES      =
LIBS          =

# SWIG Options
#     SWIG      = location of the SWIG executable
#     SWIGOPT   = SWIG compiler options
#     SWIGCC    = Compiler used to compile the wrapper file

SWIG          = $(exec_prefix)/bin/swig 
SWIGOPT       = -perl5 
SWIGCC        = $(CC) 

# SWIG Library files.  Uncomment this to staticly rebuild Perl
#SWIGLIB       = -static -lperlmain.i

# Rules for creating .o files from source.

COBJS         = $(SRCS:.c=.o)
CXXOBJS       = $(CXXSRCS:.cxx=.o)
OBJCOBJS      = $(OBJCSRCS:.m=.o)
ALLOBJS       = $(COBJS) $(CXXOBJS) $(OBJCOBJS) $(OBJS)

# Command that will be used to build the final extension.
BUILD         = $(SWIGCC)

# Uncomment the following if you are using dynamic loading
CCSHARED      = @CCSHARED@
BUILD         = @LDSHARED@

# Uncomment the following if you are using dynamic loading with C++ and
# need to provide additional link libraries (this is not always required).

#DLL_LIBS      = -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.7.2 \
             -L/usr/local/lib -lg++ -lstdc++ -lgcc

# X11 installation (possibly needed if using Perl-Tk)

XLIB          = @XLIBSW@
XINCLUDE      = @XINCLUDES@

# Perl installation

PERL_INCLUDE  = -I@PERL5EXT@
PERL_LIB      = -L@PERL5EXT@ -lperl 
PERL_FLAGS    = -Dbool=char -Dexplicit=

# Tcl installation.  If using Tk you might need this

TCL_INCLUDE   = @TCLINCLUDE@
TCL_LIB       = @TCLLIB@

# Build libraries (needed for static builds)

LIBM          = @LIBM@
LIBC          = @LIBC@
SYSLIBS       = $(LIBM) $(LIBC) @LIBS@

# Build options (uncomment only one these)

#TK_LIB        = $(TCL_LIB) -ltcl -ltk $(XLIB)
BUILD_LIBS    = $(LIBS) # Dynamic loading
#BUILD_LIBS    = $(PERL_LIB) $(TK_LIB) $(LIBS) $(SYSLIBS)  # Static linking

# Compilation rules for non-SWIG components

.SUFFIXES: .c .cxx .m

.c.o:
	$(CC) $(CCSHARED) $(CFLAGS) $(INCLUDES) -c $<

.cxx.o:
	$(CXX) $(CCSHARED) $(CXXFLAGS) $(INCLUDES) -c $<

.m.o:
	$(OBJC) $(CCSHARED) $(CFLAGS) $(INCLUDES) -c $<


# ----------------------------------------------------------------------
# Rules for building the extension
# ----------------------------------------------------------------------

all: $(TARGET)

# Convert the wrapper file into an object file

$(WRAPOBJ) : $(WRAPFILE)
	$(SWIGCC) -c $(CCSHARED) $(CFLAGS) $(INCLUDES) $(PERL_INCLUDE) $(PERL_FLAGS) $(WRAPFILE)

$(WRAPFILE) : $(INTERFACE)
	$(SWIG) $(SWIGOPT) -o $(WRAPFILE) $(SWIGLIB) $(INTERFACE)

$(TARGET): $(WRAPOBJ) $(ALLOBJS)
	$(BUILD) $(WRAPOBJ) $(ALLOBJS) $(BUILD_LIBS) -o $(TARGET)

clean:
	rm -f $(COBJS) $(CXXOBJS) $(OBJCOBJS) $(WRAPOBJ) $(WRAPFILE) $(TARGET)






