libssh2-sys 0.3.0

Native bindings to the libssh2 library
Documentation
#########################################################################
#
## Makefile for building libssh2 (Win32 version - gnu make)
## Use: make -f GNUmakefile [help|all|clean|dev|devclean|dist|distclean|dll|objclean]
##
## Hacked by: Guenter Knauf
#
#########################################################################

# Edit the path below to point to the base of your Zlib sources.
ifndef ZLIB_PATH

ZLIB_PATH = ../../zlib-1.2.8

endif

# Edit the path below to point to the base of your OpenSSL package.
ifndef OPENSSL_PATH

OPENSSL_PATH = ../../openssl-1.0.2d

endif

# Edit the path below to point to your Distribution folder.
ifndef DISTDIR

DISTDIR	= libssh2-$(LIBSSH2_VERSION_STR)-bin-$(ARCH)

endif
DISTARC	= $(DISTDIR).zip


# Edit the path below to point to your Development folder.
ifndef DEVLDIR

DEVLDIR	= libssh2-$(LIBSSH2_VERSION_STR)-dev-$(ARCH)

endif
DEVLARC	= $(DEVLDIR).zip


# Project root
PROOT	= ..


# Edit the vars below to change target settings.
TARGET	= libssh2

WWWURL	= https://www.libssh2.org/

DESCR	= libssh2 $(LIBSSH2_VERSION_STR)

#STACK	= 64000

# must be equal to DEBUG or NDEBUG
ifndef DB

	DB	= NDEBUG

	# DB	= DEBUG
endif
# Optimization: -O<n> or debugging: -g
ifeq ($(DB),NDEBUG)

	OPT	= -O2

	OBJDIR	= release

else
	OPT	= -g

	OPT	+= -DLIBSSH2DEBUG

	OBJDIR	= debug

endif

# Here you can find a native Win32 binary of the original awk:
# http://www.gknw.net/development/prgtools/awk-20100523.zip
AWK	= awk

ZIP	= zip -qzr9


# Platform-dependent helper tool macros
ifeq ($(findstring /sh,$(SHELL)),/sh)

DEL	= rm -f $1

RMDIR	= rm -fr $1

MKDIR	= mkdir -p $1

COPY	= -cp -afv $1 $2

#COPYR	= -cp -afr $1/* $2
COPYR	= -rsync -aC $1/* $2

TOUCH	= touch $1

CAT	= cat

ECHONL	= echo ""

DL	= '

else
ifeq "$(OS)" "Windows_NT"

DEL	= -del 2>NUL /q /f $(subst /,\,$1)

RMDIR	= -rd 2>NUL /q /s $(subst /,\,$1)

else
DEL	= -del 2>NUL $(subst /,\,$1)

RMDIR	= -deltree 2>NUL /y $(subst /,\,$1)

endif
MKDIR	= -md 2>NUL $(subst /,\,$1)

COPY	= -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2)

COPYR	= -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2)

TOUCH	= copy 2>&1>NUL /b $(subst /,\,$1) +,,

CAT	= type

ECHONL	= $(ComSpec) /c echo.

endif

ifeq ($(LIBSSH2_CC),)

LIBSSH2_CC := $(CROSSPREFIX)gcc

endif
ifeq ($(LIBSSH2_AR),)

LIBSSH2_AR := $(CROSSPREFIX)ar

endif
ifeq ($(LIBSSH2_RANLIB),)

LIBSSH2_RANLIB := $(CROSSPREFIX)ranlib

endif
ifeq ($(LIBSSH2_DLL_A_SUFFIX),)

LIBSSH2_DLL_A_SUFFIX := dll

endif

libssh2_dll_LIBRARY = $(TARGET)$(LIBSSH2_DLL_SUFFIX).dll


# The following line defines your compiler.
ifdef METROWERKS

	CC = mwcc

else
	CC = $(LIBSSH2_CC)

endif

# Set environment var ARCH to your architecture to override autodetection.
ifndef ARCH

ifeq ($(findstring gcc,$(CC)),gcc)

ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64)

ARCH	= w64

else
ARCH	= w32

endif
else
ARCH	= w32

endif
endif

# Include the version info retrieved from libssh2.h
-include $(OBJDIR)/version.inc


# Global flags for all compilers
CFLAGS	= $(LIBSSH2_CFLAG_EXTRAS) $(OPT) -D$(DB) -DLIBSSH2_WIN32 -DHAVE_WINDOWS_H # -DHAVE_CONFIG_H
LDFLAGS = $(LIBSSH2_LDFLAG_EXTRAS)


ifeq ($(CC),mwcc)

LD	= mwld

RC	= mwwinrc

LDFLAGS	+= -nostdlib

AR	= $(LD)

ARFLAGS	= -nostdlib -library -o

LIBEXT	= lib

#RANLIB	=
LIBPATH	+= -lr "$(METROWERKS)/MSL" -lr "$(METROWERKS)/Win32-x86 Support"

LDLIBS	+= -lMSL_Runtime_x86.lib -lMSL_C_x86.lib -lMSL_Extras_x86.lib

RCFLAGS	=
CFLAGS	+= -nostdinc -gccinc -msgstyle gcc -inline off -opt nointrinsics -proc 586

CFLAGS	+= -ir "$(METROWERKS)/MSL" -ir "$(METROWERKS)/Win32-x86 Support"

CFLAGS	+= -w on,nounused,nounusedexpr # -ansi strict
else
LIBEXT	= a

LD	= $(LIBSSH2_CC)

RC	= $(CROSSPREFIX)windres

LDFLAGS	+= -s -shared -Wl,--output-def,$(libssh2_dll_LIBRARY:.dll=.def),--out-implib,$(TARGET)$(LIBSSH2_DLL_A_SUFFIX).$(LIBEXT)

AR	= $(LIBSSH2_AR)

ARFLAGS	= cru

RANLIB	= $(LIBSSH2_RANLIB)

RCFLAGS	= -I $(PROOT)/include -O coff

CFLAGS	+= -fno-builtin

CFLAGS	+= -fno-strict-aliasing

CFLAGS	+= -Wall # -pedantic
ifeq ($(ARCH),w64)

CFLAGS	+= -m64 -D_AMD64_

LDFLAGS += -m64

RCFLAGS	+= -F pe-x86-64

else
CFLAGS	+= -m32

LDFLAGS += -m32

RCFLAGS	+= -F pe-i386

endif
endif

INCLUDES = -I$(PROOT)/win32 -I$(PROOT)/include


ifdef WITH_WINCNG

CFLAGS	+= -DLIBSSH2_WINCNG

LDLIBS	+= -lbcrypt -lcrypt32

else
CFLAGS	+= -DLIBSSH2_OPENSSL

ifndef OPENSSL_INCLUDE

	ifeq "$(wildcard $(OPENSSL_PATH)/outinc)" "$(OPENSSL_PATH)/outinc"

		OPENSSL_INCLUDE = $(OPENSSL_PATH)/outinc

	endif
	ifeq "$(wildcard $(OPENSSL_PATH)/include)" "$(OPENSSL_PATH)/include"

		OPENSSL_INCLUDE = $(OPENSSL_PATH)/include

	endif
endif
ifneq "$(wildcard $(OPENSSL_INCLUDE)/openssl/opensslv.h)" "$(OPENSSL_INCLUDE)/openssl/opensslv.h"

$(error Invalid OPENSSL_PATH: $(OPENSSL_PATH))
endif
INCLUDES += -I"$(OPENSSL_INCLUDE)"

ifndef OPENSSL_LIBPATH

	OPENSSL_LIBS_STAT = crypto ssl

	ifeq "$(wildcard $(OPENSSL_PATH)/out)" "$(OPENSSL_PATH)/out"

		OPENSSL_LIBPATH = $(OPENSSL_PATH)/out

		OPENSSL_LIBS_DYN = eay32 ssl32

	endif
	ifeq "$(wildcard $(OPENSSL_PATH)/lib)" "$(OPENSSL_PATH)/lib"

		OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib

		OPENSSL_LIBS_DYN = crypto.dll ssl.dll

	endif
endif
ifdef LINK_OPENSSL_STATIC

	LDLIBS += $(patsubst %,$(OPENSSL_LIBPATH)/lib%.$(LIBEXT), $(OPENSSL_LIBS_STAT)) -lgdi32

else
	LDLIBS += $(patsubst %,$(OPENSSL_LIBPATH)/lib%.$(LIBEXT), $(OPENSSL_LIBS_DYN))

endif
endif
ifeq ($(CC),mwcc)

LDLIBS	+= -lkernel32.lib -luser32.lib -lwsock32.lib

else
#LDLIBS	+= -lwsock32
LDLIBS	+= -lws2_32

endif

ifdef WITH_ZLIB

	CFLAGS += -DLIBSSH2_HAVE_ZLIB

	INCLUDES += -I$(ZLIB_PATH)

	ifdef LINK_ZLIB_STATIC

		LDLIBS += $(ZLIB_PATH)/libz.$(LIBEXT)

	else
		LDLIBS += $(ZLIB_PATH)/libz.dll.$(LIBEXT)

	endif
endif

CFLAGS	+= $(INCLUDES)


vpath %.c $(PROOT)/src


ifdef WITH_WINCNG

include $(PROOT)/Makefile.WinCNG.inc

else
include $(PROOT)/Makefile.OpenSSL.inc

endif

# include Makefile.inc to get CSOURCES define
include $(PROOT)/Makefile.inc


OBJECTS	:= $(patsubst %.c,%.o,$(CSOURCES))

OBJS	:= $(addprefix $(OBJDIR)/,$(OBJECTS))

OBJL	= $(OBJS) $(OBJDIR)/$(TARGET).res



all: lib dll


dll: prebuild $(libssh2_dll_LIBRARY)


lib: prebuild $(TARGET).$(LIBEXT)


prebuild: $(OBJDIR) $(OBJDIR)/version.inc

# libssh2_config.h

test: all

	$(MAKE) -C test -f GNUmakefile


$(OBJDIR)/%.o: %.c

#	@echo Compiling $<
	$(CC) $(CFLAGS) -c $< -o $@


$(OBJDIR)/version.inc: $(PROOT)/get_ver.awk $(PROOT)/include/libssh2.h $(OBJDIR)

	@echo Creating $@

	@$(AWK) -f $^ > $@


dist: all $(DISTDIR) $(DISTDIR)/readme.txt

	@$(call MKDIR, $(DISTDIR)/bin)

	@$(call COPY, $(PROOT)/AUTHORS, $(DISTDIR))

	@$(call COPY, $(PROOT)/COPYING, $(DISTDIR))

	@$(call COPY, $(PROOT)/INSTALL, $(DISTDIR))

	@$(call COPY, $(PROOT)/README, $(DISTDIR))

	@$(call COPY, $(PROOT)/RELEASE-NOTES, $(DISTDIR))

	@$(call COPY, $(libssh2_dll_LIBRARY), $(DISTDIR)/bin)

	@echo Creating $(DISTARC)

	@$(ZIP) $(DISTARC) $(DISTDIR)/* < $(DISTDIR)/readme.txt


dev: all $(DEVLDIR) $(DEVLDIR)/readme.txt

	@$(call MKDIR, $(DEVLDIR)/bin)

	@$(call MKDIR, $(DEVLDIR)/include)

	@$(call MKDIR, $(DEVLDIR)/win32)

	@$(call COPY, $(PROOT)/AUTHORS, $(DEVLDIR))

	@$(call COPY, $(PROOT)/COPYING, $(DEVLDIR))

	@$(call COPY, $(PROOT)/INSTALL, $(DEVLDIR))

	@$(call COPY, $(PROOT)/README, $(DEVLDIR))

	@$(call COPY, $(PROOT)/RELEASE-NOTES, $(DEVLDIR))

	@$(call COPY, $(libssh2_dll_LIBRARY), $(DEVLDIR)/bin)

	@$(call COPY, $(PROOT)/include/*.h, $(DEVLDIR)/include)

	@$(call COPY, libssh2_config.h, $(DEVLDIR)/include)

	@$(call COPY, *.$(LIBEXT), $(DEVLDIR)/win32)

	@echo Creating $(DEVLARC)

	@$(ZIP) $(DEVLARC) $(DEVLDIR)/* < $(DEVLDIR)/readme.txt


distclean vclean: clean

	$(call RMDIR, $(DISTDIR))

	$(call DEL, $(DISTARC))


devclean: clean

	$(call RMDIR, $(DEVLDIR))

	$(call DEL, $(DEVLARC))


objclean: all

	$(call RMDIR, $(OBJDIR))


testclean: clean

	$(MAKE) -C test -f GNUmakefile clean


clean:
#	$(call DEL, libssh2_config.h)
	$(call DEL, $(libssh2_dll_LIBRARY) $(libssh2_dll_LIBRARY:.dll=.def) $(TARGET).$(LIBEXT) $(TARGET)$(LIBSSH2_DLL_A_SUFFIX).$(LIBEXT))

	$(call RMDIR, $(OBJDIR))


$(OBJDIR):
	@$(call MKDIR, $@)


$(DISTDIR):
	@$(call MKDIR, $@)


$(DEVLDIR):
	@$(call MKDIR, $@)


$(TARGET).$(LIBEXT): $(OBJS)

	@echo Creating $@

	@$(call DEL, $@)

	@$(AR) $(ARFLAGS) $@ $^

ifdef RANLIB

	@$(RANLIB) $@

endif

$(libssh2_dll_LIBRARY) $(TARGET)$(LIBSSH2_DLL_A_SUFFIX).$(LIBEXT): $(OBJL)

	@echo Linking $@

	@$(call DEL, $@)

	@$(LD) $(LDFLAGS) $^ -o $@ $(LIBPATH) $(LDLIBS)



$(OBJDIR)/%.res: %.rc

	@echo Creating $@

	@$(RC) $(RCFLAGS) -i $< -o $@



$(DISTDIR)/readme.txt: GNUmakefile

	@echo Creating $@

	@echo $(DL)This is a binary distribution for Win32 platform.$(DL) > $@

	@echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@

	@echo $(DL)Please download the complete libssh package for$(DL) >> $@

	@echo $(DL)any further documentation:$(DL) >> $@

	@echo $(DL)$(WWWURL)$(DL) >> $@


$(DEVLDIR)/readme.txt: GNUmakefile

	@echo Creating $@

	@echo $(DL)This is a development distribution for Win32 platform.$(DL) > $@

	@echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@

	@echo $(DL)Please download the complete libssh package for$(DL) >> $@

	@echo $(DL)any further documentation:$(DL) >> $@

	@echo $(DL)$(WWWURL)$(DL) >> $@


help: $(OBJDIR)/version.inc

	@echo $(DL)===========================================================$(DL)

	@echo $(DL)OpenSSL path    = $(OPENSSL_PATH)$(DL)

	@echo $(DL)Zlib path       = $(ZLIB_PATH)$(DL)

	@echo $(DL)===========================================================$(DL)

	@echo $(DL)libssh $(LIBSSH2_VERSION_STR) - available targets are:$(DL)

	@echo $(DL)$(MAKE) all$(DL)

	@echo $(DL)$(MAKE) dll$(DL)

	@echo $(DL)$(MAKE) lib$(DL)

	@echo $(DL)$(MAKE) clean$(DL)

	@echo $(DL)$(MAKE) dev$(DL)

	@echo $(DL)$(MAKE) devclean$(DL)

	@echo $(DL)$(MAKE) dist$(DL)

	@echo $(DL)$(MAKE) distclean$(DL)

	@echo $(DL)$(MAKE) objclean$(DL)

	@echo $(DL)$(MAKE) test$(DL)

	@echo $(DL)===========================================================$(DL)