############################################################################
#                                                                          #
#  Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/.          #
#                                                                          #
#  NXCOMP, NX protocol compression and NX extensions to this software      #
#  are copyright of NoMachine. Redistribution and use of the present       #
#  software is allowed according to terms specified in the file LICENSE    #
#  which comes in the source distribution.                                 #
#                                                                          #
#  Check http://www.nomachine.com/licensing.html for applicability.        #
#                                                                          #
#  NX and NoMachine are trademarks of Medialogic S.p.A.                    #
#                                                                          #
#  All rights reserved.                                                    #
#                                                                          #
############################################################################

#
# Get these values from the configure script. The
# version printed by the program should be derived
# from the CHANGELOG. For example we may use the
# following command:
#
# head -n 3 CHANGELOG | grep 'nxcomp-' | cut -d '-' -f 2-3
#

VERSION=@VERSION@
LIBVERSION=@LIBVERSION@

#
# We would really like to enable all warnings, -Wredundant-decls,
# though, gives a warning caused by pthread.h and unistd.h and
# GCC 3.4 was changed in a way that it now complains about some
# of the -W directives we used before (-Wmissing-declarations,
# -Wnested-externs, -Wstrict-prototypes and -Wmissing-prototypes).
#

CXX         = @CXX@
CXXFLAGS    = @CXXFLAGS@ @X_CFLAGS@ @DEFS@ \
              -Wall -Wpointer-arith
CXXINCLUDES =
CXXDEFINES  =

CPPFLAGS    = @CPPFLAGS@

#
# C programs have their own CFLAGS.
# 

CC          = @CC@
CCFLAGS     = @CFLAGS@ @X_CFLAGS@ @DEFS@ \
              -Wall -Wpointer-arith
CCINCLUDES  =
CCDEFINES   =

LDFLAGS     = @LDFLAGS@
LIBS        = @LIBS@

#
# Other autoconfigured settings, not used at the moment.
#

srcdir       = @srcdir@
prefix       = @prefix@
datarootdir  = @datarootdir@
datadir      = @datadir@
exec_prefix  = @exec_prefix@
bindir       = @bindir@
man1dir      = @mandir@/man1
VPATH        = @srcdir@
libdir       = @libdir@
includedir   = @includedir@
pkgconfigdir = @pkgconfigdir@

INSTALL         = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@
INSTALL_LINK    = cp -av
DESTDIR         =
RM_FILE         = rm -f

#
# This should be autodetected.
#

MAKEDEPEND     = @MAKEDEPEND@
DEPENDINCLUDES = -I/usr/include/c++ -I/usr/include/g++ -I/usr/include/g++-3 

.SUFFIXES: .cpp.c

.cpp.o:
	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CXXINCLUDES) $(CXXDEFINES) $<
.c.o:
	$(CC) -c $(CPPFLAGS) $(CCFLAGS) $(CCINCLUDES) $(CCDEFINES) $<

LIBRARY = Xcomp

LIBNAME    = lib$(LIBRARY)
ifeq ($(shell uname),Darwin)
LIBFULL    = lib$(LIBRARY).$(VERSION).dylib
LIBLOAD    = lib$(LIBRARY).$(LIBVERSION).dylib
LIBSHARED  = lib$(LIBRARY).dylib
COMP_VER   = $(shell echo '$(VERSION)' | cut -d '.' -f 1-3)
LIBFLAGS   = -install_name $(libdir)/$(LIBLOAD) -compatibility_version $(LIBVERSION) -current_version $(COMP_VER)
else
LIBFULL    = lib$(LIBRARY).so.$(VERSION)
LIBLOAD    = lib$(LIBRARY).so.$(LIBVERSION)
LIBSHARED  = lib$(LIBRARY).so
LIBFLAGS   =
endif
LIBARCHIVE = lib$(LIBRARY).a

LIBCYGSHARED  = cyg$(LIBRARY).dll
LIBCYGARCHIVE = lib$(LIBRARY).dll.a

all: depend @ALL@

MSRC   =

CSRC   = MD5.c					\
	 Pack.c					\
	 Vars.c					\
	 Version.c

CXXSRC = Loop.cpp 				\
	 Children.cpp				\
	 Control.cpp				\
	 Misc.cpp				\
	 Socket.cpp				\
	 Fork.cpp				\
	 Pipe.cpp				\
	 List.cpp				\
	 Keeper.cpp				\
	 Timestamp.cpp				\
	 Transport.cpp				\
	 Statistics.cpp				\
	 Auth.cpp				\
	 Agent.cpp				\
	 Proxy.cpp				\
	 Channel.cpp				\
	 Message.cpp				\
	 Split.cpp				\
	 ClientProxy.cpp			\
	 ServerProxy.cpp			\
	 OpcodeStore.cpp			\
	 ClientStore.cpp			\
	 ServerStore.cpp			\
	 ChannelCache.cpp			\
	 ClientCache.cpp			\
	 ServerCache.cpp			\
	 ClientChannel.cpp			\
	 ServerChannel.cpp			\
	 GenericChannel.cpp			\
	 ChannelEndPoint.cpp			\
	 ReadBuffer.cpp				\
	 ProxyReadBuffer.cpp			\
	 ClientReadBuffer.cpp			\
	 ServerReadBuffer.cpp			\
	 GenericReadBuffer.cpp			\
	 EncodeBuffer.cpp			\
	 DecodeBuffer.cpp			\
	 WriteBuffer.cpp			\
	 SequenceQueue.cpp			\
	 IntCache.cpp				\
	 CharCache.cpp				\
	 XidCache.cpp				\
	 ActionCache.cpp			\
	 BlockCache.cpp				\
	 BlockCacheSet.cpp			\
	 StaticCompressor.cpp			\
	 Unpack.cpp				\
	 Alpha.cpp				\
	 Colormap.cpp				\
	 Jpeg.cpp				\
	 Pgn.cpp				\
	 Bitmap.cpp				\
	 Rgb.cpp				\
	 Rle.cpp				\
	 Z.cpp					\
	 ChangeProperty.cpp			\
	 SendEvent.cpp				\
	 ChangeGC.cpp				\
	 CreateGC.cpp				\
	 CreatePixmap.cpp			\
	 SetClipRectangles.cpp			\
	 CopyArea.cpp				\
	 PolyLine.cpp				\
	 PolySegment.cpp			\
	 PolyFillRectangle.cpp			\
	 PutImage.cpp				\
	 TranslateCoords.cpp			\
	 GetImage.cpp				\
	 ClearArea.cpp				\
	 ConfigureWindow.cpp			\
	 PolyText8.cpp				\
	 PolyText16.cpp				\
	 ImageText8.cpp				\
	 ImageText16.cpp			\
	 PolyPoint.cpp				\
	 PolyFillArc.cpp			\
	 PolyArc.cpp				\
	 FillPoly.cpp				\
	 InternAtom.cpp				\
	 GetProperty.cpp			\
	 SetUnpackGeometry.cpp			\
	 SetUnpackColormap.cpp			\
	 SetUnpackAlpha.cpp			\
	 PutPackedImage.cpp			\
	 ShapeExtension.cpp			\
	 RenderExtension.cpp			\
	 GenericRequest.cpp			\
	 QueryFontReply.cpp			\
	 ListFontsReply.cpp			\
	 GetImageReply.cpp			\
	 GetPropertyReply.cpp			\
	 GenericReply.cpp			\
	 RenderGenericRequest.cpp		\
	 RenderCreatePicture.cpp		\
	 RenderChangePicture.cpp		\
	 RenderFreePicture.cpp			\
	 RenderPictureClip.cpp			\
	 RenderPictureTransform.cpp		\
	 RenderPictureFilter.cpp		\
	 RenderCreateGlyphSet.cpp		\
	 RenderFreeGlyphSet.cpp			\
	 RenderAddGlyphs.cpp			\
	 RenderComposite.cpp			\
	 RenderCompositeGlyphs.cpp		\
	 RenderFillRectangles.cpp		\
	 RenderTrapezoids.cpp			\
	 RenderTriangles.cpp

MOBJ   = $(MSRC:.c=.o)
COBJ   = $(CSRC:.c=.o)
CXXOBJ = $(CXXSRC:.cpp=.o)

$(LIBFULL):	 $(CXXOBJ) $(COBJ)
		 $(CXX) -o $@ $(LDFLAGS) $(LIBFLAGS) $(CXXOBJ) $(COBJ) $(LIBS)

$(LIBLOAD):	 $(LIBFULL)
		 rm -f $(LIBLOAD)
		 ln -s $(LIBFULL) $(LIBLOAD)

$(LIBSHARED):	 $(LIBFULL)
		 rm -f $(LIBSHARED)
		 ln -s $(LIBFULL) $(LIBSHARED)

$(LIBARCHIVE):	 $(CXXOBJ) $(COBJ)
		 rm -f  $(LIBARCHIVE)
		 ar clq $(LIBARCHIVE) $(CXXOBJ) $(COBJ)
		 ranlib $(LIBARCHIVE)

$(LIBCYGSHARED): $(LIBARCHIVE)
		 $(CC) -shared -o $(LIBCYGSHARED) \
		 -Wl,--out-implib=$(LIBCYGARCHIVE) \
		 -Wl,--export-all-symbols \
		 -Wl,--enable-auto-import \
		 -Wl,--whole-archive $(LIBARCHIVE) \
		 -Wl,--no-whole-archive $(LIBS) \
		 $(LDFLAGS)

$(LIBCYGARCHIVE): $(LIBCYGSHARED)

depends:	depend.status

depend:		depend.status

depend.status:	
		if [ -n "$(MAKEDEPEND)" ] && [ -x "$(MAKEDEPEND)" ] ; then \
			$(MAKEDEPEND) $(CXXINCLUDES) $(CCINCLUDES) \
			$(DEPENDINCLUDES) -f Makefile $(MSRC) $(CSRC) \
			$(CXXSRC) 2>/dev/null; \
		fi
		touch depend.status

install:	install.bin install.lib install.man

install.bin:

install.lib: all
	./mkinstalldirs $(DESTDIR)${libdir}
	./mkinstalldirs $(DESTDIR)${includedir}/nx
	./mkinstalldirs $(DESTDIR)${pkgconfigdir}
	$(INSTALL_DATA) $(LIBFULL)              $(DESTDIR)${libdir}
	$(INSTALL_LINK) $(LIBLOAD)              $(DESTDIR)${libdir}
	$(INSTALL_LINK) $(LIBSHARED)            $(DESTDIR)${libdir}
	$(INSTALL_DATA) $(LIBARCHIVE)           $(DESTDIR)${libdir}
	$(INSTALL_DATA) MD5.h                   $(DESTDIR)${includedir}/nx
	$(INSTALL_DATA) NX.h                    $(DESTDIR)${includedir}/nx
	$(INSTALL_DATA) NXalert.h               $(DESTDIR)${includedir}/nx
	$(INSTALL_DATA) NXpack.h                $(DESTDIR)${includedir}/nx
	$(INSTALL_DATA) NXproto.h               $(DESTDIR)${includedir}/nx
	$(INSTALL_DATA) NXvars.h                $(DESTDIR)${includedir}/nx
	$(INSTALL_DATA) nxcomp.pc               $(DESTDIR)${pkgconfigdir}
	echo "Running ldconfig tool, this may take a while..." && ldconfig || true

install.man:

uninstall:	uninstall.bin uninstall.lib uninstall.man

uninstall.bin:

uninstall.lib:
	$(RM_FILE) $(DESTDIR)${libdir}/$(LIBFULL)
	$(RM_FILE) $(DESTDIR)${libdir}/$(LIBLOAD)
	$(RM_FILE) $(DESTDIR)${libdir}/$(LIBSHARED)
	$(RM_FILE) $(DESTDIR)${libdir}/$(LIBARCHIVE)
	$(RM_FILE) $(DESTDIR)${includedir}/nx/NXalert.h
	$(RM_FILE) $(DESTDIR)${includedir}/nx/NX.h
	$(RM_FILE) $(DESTDIR)${includedir}/nx/NXpack.h
	$(RM_FILE) $(DESTDIR)${includedir}/nx/NXproto.h
	$(RM_FILE) $(DESTDIR)${includedir}/nx/NXvars.h
	$(RM_FILE) $(DESTDIR)${includedir}/nx/MD5.h
	$(RM_FILE) $(DESTDIR)${pkgconfigdir}/nxcomp.pc
	echo "Running ldconfig tool, this may take a while..." && ldconfig || true

uninstall.man:

clean:
		-rm -f *~ *.o *.bak *.orig *.rej st?????? core core.* *.out.* *.pc \
		@ALL@

distclean:	clean
		-rm -rf autom4te.cache config.status config.log \
		config.cache depend.status Makefile tags configure