# This Makefile is part of Mongoose web server project, # https://github.com/valenok/mongoose # # This Makefile is GNU make compatible. You can get GNU Make from # http://gnuwin32.sourceforge.net/packages/make.htm # # Example custom build: # CFLAGS_EXTRA="-g -O0 -DNO_SSL_DL -DUSE_LUA -llua -lcrypto -lssl" make linux # # Flags are: # -DHAVE_MD5 - use system md5 library (-2kb) # -DNDEBUG - strip off all debug code (-5kb) # -DDEBUG - build debug version (very noisy) (+7kb) # -DNO_CGI - disable CGI support (-5kb) # -DNO_SSL - disable SSL functionality (-2kb) # -DNO_SSL_DL - link against system libssl library (-1kb) # -DCONFIG_FILE=\"file\" - use `file' as the default config file # -DSSL_LIB=\"libssl.so.\" - use system versioned SSL shared object # -DCRYPTO_LIB=\"libcrypto.so.\" - use system versioned CRYPTO so # -DUSE_LUA - embed Lua in Mongoose (+100kb) PROG = mongoose EXE_SUFFIX = CFLAGS = -std=c99 -O2 -W -Wall -pedantic -pthread -pipe -I. -I.. $(CFLAGS_EXTRA) VERSION = $(shell perl -lne \ 'print $$1 if /define\s+MONGOOSE_VERSION\s+"(\S+)"/' ../mongoose.c) # The order in which files are listed is important SOURCES = src/internal.h src/util.c src/string.c src/parse_date.c \ src/options.c src/crypto.c src/auth.c src/win32.c src/unix.c \ src/mg_printf.c src/ssl.c src/http_client.c src/mime.c \ src/directory.c src/log.c src/parse_http.c src/io.c src/cgi.c \ src/upload.c src/websocket.c src/webdav.c src/mongoose.c src/lua.c TINY_SOURCES = ../mongoose.c main.c LUA_SOURCES = $(TINY_SOURCES) lua_5.2.1.c LUA_SQLITE_SOURCES = $(LUA_SOURCES) sqlite3.c lsqlite3.c SQLITE_FLAGS = -DTHREADSAFE=1 -DSQLITE_ENABLE_FTS3 \ -DSQLITE_ENABLE_FTS3_PARENTHESIS LUA_FLAGS = -DUSE_LUA LUA_SQLITE_FLAGS = $(SQLITE_FLAGS) $(LUA_FLAGS) -DUSE_LUA_SQLITE3 # Using Visual Studio 6.0. To build Mongoose: # Set MSVC variable below to where VS 6.0 is installed on your system # Run "PATH_TO_VC6\bin\nmake windows" MSVC = ../../vc6 #DBG = /Zi /Od DBG = /DNDEBUG /O1 CL = $(MSVC)/bin/cl /MD /TC /nologo $(DBG) /W3 /I$(MSVC)/include /I.. /I. LINK_FLAGS = /incremental:no /libpath:$(MSVC)/lib /machine:IX86 \ user32.lib shell32.lib comdlg32.lib ws2_32.lib advapi32.lib LINK = $(MSVC)/bin/link $(LINK_FLAGS) ifeq ($(OS), Windows_NT) EXE_SUFFIX = .exe else UNAME_S := $(shell uname -s) ifeq ($(UNAME_S), Linux) CFLAGS += -ldl -lm endif endif all: @echo "make (unix|windows|macos)" ../mongoose.c: ../mongoose.h Makefile $(SOURCES) cat $(SOURCES) | sed '/#include "internal.h"/d' > $@ unix_unit_test: $(LUA_SOURCES) Makefile ../test/unit_test.c $(CC) ../test/unit_test.c lua_5.2.1.c $(CFLAGS) -g -O0 -o t && ./t # Make sure that the compiler flags come last in the compilation string. # If not so, this can break some on some Linux distros which use # "-Wl,--as-needed" turned on by default in cc command. # Also, this is turned in many other distros in static linkage builds. $(PROG): $(TINY_SOURCES) $(CC) $(TINY_SOURCES) -o $@ $(CFLAGS) $(PROG)-lua: $(LUA_SOURCES) $(CC) $(LUA_SOURCES) -o $@ $(LUA_FLAGS) $(CFLAGS) $(PROG)-lua-sqlite: $(LUA_SQLITE_SOURCES) $(CC) $(LUA_SQLITE_SOURCES) -o $@ $(LUA_SQLITE_FLAGS) $(CFLAGS) unix: $(PROG) $(PROG)-lua # Windows build $(PROG).exe: $(LUA_SQLITE_SOURCES) $(MSVC)/bin/rc res.rc $(CL) $(LUA_SQLITE_SOURCES) $(LUA_SQLITE_FLAGS) /link $(LINK_FLAGS) res.res /out:$@ $(PROG)-tiny.exe: $(TINY_SOURCES) $(MSVC)/bin/rc res.rc $(CL) $(TINY_SOURCES) /link $(LINK_FLAGS) res.res /out:$@ $(PROG).dll: $(TINY_SOURCES) Makefile $(CL) ../mongoose.c /Gz /link $(LINK_FLAGS) /DLL /DEF:dll.def /out:$@ # This is broken now due to SSL exclusion windows_unit_test.exe: $(LUA_SOURCES) Makefile $(CL) ../test/unit_test.c lua_5.2.1.c -DLUA_COMPAT_ALL \ /link /libpath:$(MSVC)/lib advapi32.lib /out:$@ ./$@ windows: $(PROG).exe $(PROG)-tiny.exe # MacOS build with Cocoa GUI # For codesign to work in non-interactive mode, unlock login keychain: # security unlock ~/Library/Keychains/login.keychain # See e.g. http://lists.apple.com/archives/apple-cdsa/2008/Jan/msg00027.html macos: $(LUA_SOURCES) DIR=dmg/Mongoose.app rm -rf dmg mkdir -p dmg/Mongoose.app/Contents/{MacOS,Resources} install -m 644 *.icns *.png dmg/Mongoose.app/Contents/Resources/ install -m 644 Info.plist dmg/Mongoose.app/Contents/ $(CC) $(LUA_SOURCES) \ -DUSE_COCOA $(CFLAGS) $(LUA_SQLITE_FLAGS) -mmacosx-version-min=10.4 \ -framework Cocoa -ObjC -arch i386 -arch x86_64 \ -o dmg/Mongoose.app/Contents/MacOS/Mongoose ln -fs /Applications dmg/ hdiutil create Mongoose-$(VERSION).dmg -volname "Mongoose $(VERSION)" \ -srcfolder dmg -ov #rm -rf dmg tests: perl ../test/test.pl $(TEST) tarball: clean rm -rf mongoose-$(VERSION) mkdir mongoose-$(VERSION) install -m 644 ../{LICENSE,*.[ch]} mongoose-$(VERSION) tar -czf mongoose-$(VERSION).tgz mongoose-$(VERSION) release: tarball macos wine make windows upx mongoose.exe upx mongoose-tiny.exe cp mongoose.exe mongoose-$(VERSION).exe cp mongoose-tiny.exe mongoose-tiny-$(VERSION).exe cp mongoose.exe mongoose_php_bundle/ zip -r mongoose-php-$(VERSION).zip mongoose_php_bundle/ clean: cd ../examples && $(MAKE) clean rm -rf *.o *.core $(PROG) *.obj *.so $(PROG).txt *.dSYM *.tgz \ $(PROG).exe *.dll *.lib res.o res.RES *.dSYM *.zip *.pdb \ *.exe *dmg* $(PROG)-* unix_unit_test