######################################################################### # ## Makefile for building libssh2 (Win32 version - gnu make) ## Use: make -f Makefile.mingw [help|all|clean|dev|devclean|dist|distclean|dll|objclean] ## ## Comments to: Guenter Knauf http://www.gknw.net/phpbb # ######################################################################### # Edit the path below to point to the base of your Zlib sources. ifndef ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.5 endif # since currently always enabled in libssh2_config.h set here too! WITH_ZLIB = 1 # Edit the path below to point to the base of your OpenSSL package. ifndef OPENSSL_PATH OPENSSL_PATH = ../../openssl-0.9.8r endif # Edit the var below to set to your architecture or set environment var. ifndef ARCH ARCH = w32 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 # Edit the vars below to change target settings. TARGET = libssh2 VERSION = $(LIBSSH2_VERSION) COPYR = (c) $(LIBSSH2_COPYRIGHT_STR) WWWURL = http://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 or debugging: -g ifeq ($(DB),NDEBUG) OPT = -O2 OBJDIR = release else OPT = -g OPT += -DLIBSSH2DEBUG OBJDIR = debug endif # Include the version info retrieved from libssh2.h -include $(OBJDIR)/version.inc ifeq ($(findstring /sh,$(SHELL)),/sh) CP = cp -afv # RM = rm -f MD = mkdir RD = rm -fr DL = ' DS = / else CP = copy RM = del /q /f 2>NUL MD = md RD = rd /q /s 2>NUL XX = DS = $(XX)\$(XX) 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 # The following line defines your compiler. ifdef METROWERKS CC = mwcc else CC = $(CROSSPREFIX)gcc endif # Global flags for all compilers CFLAGS = $(OPT) -D$(DB) -DWIN32 -DLIBSSH2_WIN32 # -DHAVE_CONFIG_H ifeq ($(ARCH),w64) CFLAGS += -D_AMD64_ endif 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 LDLIBS += -lkernel32.lib -luser32.lib -lwsock32.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 LD = $(CROSSPREFIX)gcc RC = $(CROSSPREFIX)windres LDFLAGS = -s -shared -Wl,--out-implib,$(TARGET)dll.a AR = $(CROSSPREFIX)ar ARFLAGS = -cq LIBEXT = a RANLIB = $(CROSSPREFIX)ranlib #LDLIBS += -lwsock32 LDLIBS += -lws2_32 RCFLAGS = -DLIBSSH2_VERSION_ONLY -I. -I ../include -O coff -i CFLAGS += -fno-strict-aliasing CFLAGS += -Wall # -pedantic endif INCLUDES = -I. -I../include INCLUDES += -I$(OPENSSL_PATH)/outinc -I$(OPENSSL_PATH)/outinc/openssl ifdef LINK_STATIC LDLIBS += $(OPENSSL_PATH)/out/libcrypto.$(LIBEXT) $(OPENSSL_PATH)/out/libssl.$(LIBEXT) else LDLIBS += $(OPENSSL_PATH)/out/libeay32.$(LIBEXT) $(OPENSSL_PATH)/out/libssl32.$(LIBEXT) endif ifdef WITH_ZLIB INCLUDES += -I$(ZLIB_PATH) LDLIBS += $(ZLIB_PATH)/libz.$(LIBEXT) endif CFLAGS += $(INCLUDES) vpath %.c . ../src # include Makefile.inc to get CSOURCES define include ../Makefile.inc OBJECTS := $(patsubst %.c,%.o,$(CSOURCES)) OBJS := $(addprefix $(OBJDIR)/,$(OBJECTS)) OBJL = $(OBJS) $(OBJDIR)/$(TARGET).res all: lib dll dll: prebuild $(TARGET).dll lib: prebuild $(TARGET).$(LIBEXT) prebuild: $(OBJDIR) $(OBJDIR)/version.inc # libssh2_config.h test: all $(MAKE) -C test -f Makefile.mingw $(OBJDIR)/%.o: %.c # @echo Compiling $< $(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/version.inc: ../include/libssh2.h $(OBJDIR) @echo Creating $@ @$(AWK) -f ../get_ver.awk $< > $@ dist: all $(DISTDIR) $(DISTDIR)/readme.txt @-$(MD) $(DISTDIR)$(DS)bin @-$(CP) ..$(DS)INSTALL $(DISTDIR) @-$(CP) ..$(DS)LICENSE $(DISTDIR) @-$(CP) ..$(DS)README $(DISTDIR) @$(CP) $(TARGET).dll $(DISTDIR)$(DS)bin @echo Creating $(DISTARC) @$(ZIP) $(DISTARC) $(DISTDIR)/* < $(DISTDIR)/readme.txt dev: all $(DEVLDIR) $(DEVLDIR)/readme.txt @-$(MD) $(DEVLDIR)$(DS)bin @-$(MD)$(DEVLDIR)$(DS)include @-$(MD) $(DEVLDIR)$(DS)win32 @-$(CP) ..$(DS)INSTALL $(DEVLDIR) @-$(CP) ..$(DS)LICENSE $(DEVLDIR) @-$(CP) ..$(DS)README $(DEVLDIR) @$(CP) $(TARGET).dll $(DEVLDIR)$(DS)bin @$(CP) ..$(DS)include$(DS)*.h $(DEVLDIR)$(DS)include @$(CP) libssh2_config.h $(DEVLDIR)/include @$(CP) *.$(LIBEXT) $(DEVLDIR)/win32 @echo Creating $(DEVLARC) @$(ZIP) $(DEVLARC) $(DEVLDIR)/* < $(DEVLDIR)/readme.txt distclean: clean -$(RD) $(DISTDIR) -$(RM) $(DISTARC) devclean: clean -$(RD) $(DEVLDIR) -$(RM) $(DEVLARC) objclean: all -$(RD) $(OBJDIR) testclean: clean $(MAKE) -C test -f Makefile.win32 clean clean: # -$(RM) libssh2_config.h -$(RM) $(TARGET).dll $(TARGET).$(LIBEXT) $(TARGET)dll.$(LIBEXT) -$(RD) $(OBJDIR) $(OBJDIR): @$(MD) $@ $(DISTDIR): @$(MD) $@ $(DEVLDIR): @$(MD) $@ $(TARGET).$(LIBEXT): $(OBJS) @echo Creating $@ @-$(RM) $@ @$(AR) $(ARFLAGS) $@ $^ ifdef RANLIB @$(RANLIB) $@ endif $(TARGET).dll $(TARGET)dll.a: $(OBJL) @echo Linking $@ @-$(RM) $@ @$(LD) $(LDFLAGS) $^ -o $@ $(LIBPATH) $(LDLIBS) $(OBJDIR)/%.res: %.rc @echo Creating $@ @$(RC) $(RCFLAGS) $< -o $@ $(DISTDIR)/readme.txt: Makefile.win32 @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: Makefile.win32 @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)