1######################################################################### 2# 3## Makefile for building libssh2 samples (Win32 version - gnu make) 4## Use: make -f GNUmakefile [help] 5## 6## Hacked by: Guenter Knauf 7# 8######################################################################### 9 10# Edit the path below to point to the base of your Zlib sources. 11ifndef ZLIB_PATH 12ZLIB_PATH = ../../../zlib-1.2.8 13endif 14 15# Edit the path below to point to the base of your OpenSSL package. 16ifndef OPENSSL_PATH 17OPENSSL_PATH = ../../../openssl-0.9.8zc 18endif 19 20# Project root 21PROOT = ../.. 22 23# Edit the var below to enable static linking of libssh2 and libz 24LINK_STATIC = 1 25 26# Edit the vars below to change target settings. 27SAMPLES = $(PROOT)/example 28TARGETS := $(filter-out x11.exe,$(patsubst $(SAMPLES)/%.c,%.exe,$(strip $(wildcard $(SAMPLES)/*.c)))) 29WWWURL = https://www.libssh2.org/ 30DESCR = libssh2 $(subst .rc,,$(notdir $@)) $(LIBSSH2_VERSION_STR) 31#STACK = 64000 32 33# must be equal to DEBUG or NDEBUG 34ifndef DB 35 DB = NDEBUG 36 # DB = DEBUG 37endif 38# Optimization: -O<n> or debugging: -g 39ifeq ($(DB),NDEBUG) 40 OPT = -O2 41 OBJDIR = release 42else 43 OPT = -g 44 OBJDIR = debug 45endif 46 47# Here you can find a native Win32 binary of the original awk: 48# http://www.gknw.net/development/prgtools/awk-20100523.zip 49AWK = awk 50ZIP = zip -qzr9 51 52# Platform-dependent helper tool macros 53ifeq ($(findstring /sh,$(SHELL)),/sh) 54DEL = rm -f $1 55RMDIR = rm -fr $1 56MKDIR = mkdir -p $1 57COPY = -cp -afv $1 $2 58#COPYR = -cp -afr $1/* $2 59COPYR = -rsync -aC $1/* $2 60TOUCH = touch $1 61CAT = cat 62ECHONL = echo "" 63DL = ' 64else 65ifeq "$(OS)" "Windows_NT" 66DEL = -del 2>NUL /q /f $(subst /,\,$1) 67RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) 68else 69DEL = -del 2>NUL $(subst /,\,$1) 70RMDIR = -deltree 2>NUL /y $(subst /,\,$1) 71endif 72MKDIR = -md 2>NUL $(subst /,\,$1) 73COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) 74COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) 75TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, 76CAT = type 77ECHONL = $(ComSpec) /c echo. 78endif 79 80# The following line defines your compiler. 81ifdef METROWERKS 82 CC = mwcc 83else 84 CC = $(CROSSPREFIX)gcc 85endif 86 87# Set environment var ARCH to your architecture to override autodetection. 88ifndef ARCH 89ifeq ($(findstring gcc,$(CC)),gcc) 90ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) 91ARCH = w64 92else 93ARCH = w32 94endif 95else 96ARCH = w32 97endif 98endif 99 100# Include the version info retrieved from libssh2.h 101-include $(OBJDIR)/version.inc 102 103# Global flags for all compilers 104CFLAGS = $(OPT) -D$(DB) -DLIBSSH2_WIN32 # -DHAVE_CONFIG_H 105 106ifeq ($(CC),mwcc) 107LD = mwld 108RC = mwwinrc 109LDFLAGS = -nostdlib 110AR = $(LD) 111ARFLAGS = -nostdlib -library -o 112LIBEXT = lib 113LIBPATH += -lr "$(METROWERKS)/MSL" -lr "$(METROWERKS)/Win32-x86 Support" 114LDLIBS += -lMSL_Runtime_x86.lib -lMSL_C_x86.lib -lMSL_Extras_x86.lib 115LDLIBS += -lkernel32.lib -luser32.lib -lwsock32.lib 116RCFLAGS = 117CFLAGS += -nostdinc -gccinc -msgstyle gcc -inline off -opt nointrinsics -proc 586 118CFLAGS += -ir "$(METROWERKS)/MSL" -ir "$(METROWERKS)/Win32-x86 Support" 119CFLAGS += -w on,nounused,nounusedexpr # -ansi strict 120else 121LD = $(CROSSPREFIX)gcc 122RC = $(CROSSPREFIX)windres 123LDFLAGS = -s 124AR = $(CROSSPREFIX)ar 125ARFLAGS = -cq 126LIBEXT = a 127#LDLIBS += -lwsock32 128LDLIBS += -lws2_32 129RCFLAGS = -I $(PROOT)/include -O coff 130CFLAGS += -fno-builtin 131CFLAGS += -fno-strict-aliasing 132CFLAGS += -Wall #-Wno-unused #-pedantic 133ifeq ($(ARCH),w64) 134CFLAGS += -D_AMD64_ 135RCFLAGS += -F pe-x86-64 136else 137CFLAGS += -m32 138RCFLAGS += -F pe-i386 139endif 140endif 141 142INCLUDES = -I$(PROOT)/win32 -I$(PROOT)/include 143LIBPATH += -L$(PROOT)/win32 144 145ifdef LINK_STATIC 146 LDLIBS += -llibssh2 147else 148 LDLIBS += -llibssh2dll 149endif 150 151ifdef WITH_WINCNG 152# CFLAGS += -DLIBSSH2_WINCNG 153LDLIBS += -lbcrypt -lcrypt32 154else 155# CFLAGS += -DLIBSSH2_OPENSSL 156ifndef OPENSSL_INCLUDE 157 ifeq "$(wildcard $(OPENSSL_PATH)/outinc)" "$(OPENSSL_PATH)/outinc" 158 OPENSSL_INCLUDE = $(OPENSSL_PATH)/outinc 159 endif 160 ifeq "$(wildcard $(OPENSSL_PATH)/include)" "$(OPENSSL_PATH)/include" 161 OPENSSL_INCLUDE = $(OPENSSL_PATH)/include 162 endif 163endif 164ifneq "$(wildcard $(OPENSSL_INCLUDE)/openssl/opensslv.h)" "$(OPENSSL_INCLUDE)/openssl/opensslv.h" 165$(error Invalid OPENSSL_PATH: $(OPENSSL_PATH)) 166endif 167INCLUDES += -I"$(OPENSSL_INCLUDE)" 168ifndef OPENSSL_LIBPATH 169 OPENSSL_LIBS_STAT = crypto ssl 170 ifeq "$(wildcard $(OPENSSL_PATH)/out)" "$(OPENSSL_PATH)/out" 171 OPENSSL_LIBPATH = $(OPENSSL_PATH)/out 172 OPENSSL_LIBS_DYN = eay32 ssl32 173 endif 174 ifeq "$(wildcard $(OPENSSL_PATH)/lib)" "$(OPENSSL_PATH)/lib" 175 OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib 176 OPENSSL_LIBS_DYN = crypto.dll ssl.dll 177 endif 178endif 179ifdef LINK_STATIC 180ifdef LINK_OPENSSL_STATIC 181 LDLIBS += $(patsubst %,$(OPENSSL_LIBPATH)/lib%.$(LIBEXT), $(OPENSSL_LIBS_STAT)) -lgdi32 182else 183 LDLIBS += $(patsubst %,$(OPENSSL_LIBPATH)/lib%.$(LIBEXT), $(OPENSSL_LIBS_DYN)) 184endif 185endif 186endif 187 188ifdef WITH_ZLIB 189 CFLAGS += -DLIBSSH2_HAVE_ZLIB 190 INCLUDES += -I$(ZLIB_PATH) 191 ifdef LINK_ZLIB_STATIC 192 LDLIBS += $(ZLIB_PATH)/libz.$(LIBEXT) 193 else 194 LDLIBS += $(ZLIB_PATH)/libzdll.$(LIBEXT) 195 endif 196endif 197 198CFLAGS += $(INCLUDES) 199 200vpath %.c $(PROOT)/example 201 202.PRECIOUS: $(OBJDIR)/%.o $(OBJDIR)/%.rc $(OBJDIR)/%.res 203 204 205all: prebuild $(TARGETS) 206 207prebuild: $(OBJDIR) $(OBJDIR)/version.inc 208 209$(OBJDIR)/%.o: %.c 210# @echo Compiling $< 211 $(CC) $(CFLAGS) -c $< -o $@ 212 213$(OBJDIR)/version.inc: $(PROOT)/include/libssh2.h $(OBJDIR) 214 @echo Creating $@ 215 @$(AWK) -f $(PROOT)/get_ver.awk $< > $@ 216 217objclean: 218 $(call RMDIR, $(OBJDIR)) 219 220clean: objclean 221 $(call DEL, $(TARGETS)) 222 223$(OBJDIR): 224 $(call MKDIR, $@) 225 226%.exe: $(OBJDIR)/%.o $(OBJDIR)/%.res 227 @echo Linking $@ 228 @$(call DEL, $@) 229 $(LD) $(LDFLAGS) $^ -o $@ $(LIBPATH) $(LDLIBS) 230 231$(OBJDIR)/%.res: $(OBJDIR)/%.rc 232 @echo Creating $@ 233 @$(RC) $(RCFLAGS) -i $< -o $@ 234 235$(OBJDIR)/%.rc: GNUmakefile $(OBJDIR)/version.inc 236 @echo $(DL)1 VERSIONINFO$(DL) > $@ 237 @echo $(DL) FILEVERSION $(LIBSSH2_VERSION),0$(DL) >> $@ 238 @echo $(DL) PRODUCTVERSION $(LIBSSH2_VERSION),0$(DL) >> $@ 239 @echo $(DL) FILEFLAGSMASK 0x3fL$(DL) >> $@ 240 @echo $(DL) FILEOS 0x40004L$(DL) >> $@ 241 @echo $(DL) FILEFLAGS 0x0L$(DL) >> $@ 242 @echo $(DL) FILETYPE 0x1L$(DL) >> $@ 243 @echo $(DL) FILESUBTYPE 0x0L$(DL) >> $@ 244 @echo $(DL)BEGIN$(DL) >> $@ 245 @echo $(DL) BLOCK "StringFileInfo"$(DL) >> $@ 246 @echo $(DL) BEGIN$(DL) >> $@ 247 @echo $(DL) BLOCK "040904E4"$(DL) >> $@ 248 @echo $(DL) BEGIN$(DL) >> $@ 249 @echo $(DL) VALUE "LegalCopyright","\xA9 $(LIBSSH2_COPYRIGHT_STR)\0"$(DL) >> $@ 250ifdef COMPANY 251 @echo $(DL) VALUE "CompanyName","$(COMPANY)\0"$(DL) >> $@ 252endif 253 @echo $(DL) VALUE "ProductName","$(notdir $(@:.rc=.exe))\0"$(DL) >> $@ 254 @echo $(DL) VALUE "ProductVersion","$(LIBSSH2_VERSION_STR)\0"$(DL) >> $@ 255 @echo $(DL) VALUE "License","Released under GPL.\0"$(DL) >> $@ 256 @echo $(DL) VALUE "FileDescription","$(DESCR)\0"$(DL) >> $@ 257 @echo $(DL) VALUE "FileVersion","$(LIBSSH2_VERSION_STR)\0"$(DL) >> $@ 258 @echo $(DL) VALUE "InternalName","$(notdir $(@:.rc=))\0"$(DL) >> $@ 259 @echo $(DL) VALUE "OriginalFilename","$(notdir $(@:.rc=.exe))\0"$(DL) >> $@ 260 @echo $(DL) VALUE "WWW","$(WWWURL)\0"$(DL) >> $@ 261 @echo $(DL) END$(DL) >> $@ 262 @echo $(DL) END$(DL) >> $@ 263 @echo $(DL) BLOCK "VarFileInfo"$(DL) >> $@ 264 @echo $(DL) BEGIN$(DL) >> $@ 265 @echo $(DL) VALUE "Translation", 0x409, 1252$(DL) >> $@ 266 @echo $(DL) END$(DL) >> $@ 267 @echo $(DL)END$(DL) >> $@ 268ifdef ICON 269 @echo $(DL)10 ICON DISCARDABLE "$(ICON)"$(DL) >> $@ 270endif 271 272help: $(OBJDIR)/version.inc 273 @echo $(DL)===========================================================$(DL) 274 @echo $(DL)OpenSSL path = $(OPENSSL_PATH)$(DL) 275 @echo $(DL)Zlib path = $(ZLIB_PATH)$(DL) 276 @echo $(DL)===========================================================$(DL) 277 @echo $(DL)libssh $(LIBSSH2_VERSION_STR) - available targets are:$(DL) 278 @echo $(DL)$(MAKE) all$(DL) 279 @echo $(DL)$(MAKE) clean$(DL) 280 @echo $(DL)$(MAKE) objclean$(DL) 281 @echo $(DL)===========================================================$(DL) 282 283 284