# # Makefile -- make file for websh for Windows XP # # (adopted from Unix Makefile.in) # # See the file "license.terms" for information on usage an # redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Based on a version contributed by # Ruslan Shevchenko, Grad-Soft Ltd, Kiev, Ukraine. # # How to use: # 1. set configuration variables bellow # 2. run nmake # where is one of # all websh.exe mod_websh.so test apachetest clean install # ## configuration variables TCL_PREFIX=C:/Program Files/Tcl TCL_VERSION=85 HTTPD_PREFIX=C:/Program Files/Apache Software Foundation/Apache2 INSTALL_PREFIX=C:/Program Files/Apache Software Foundation/Websh ## no modifications should be necessary below this line # # debug objects? !IF "$(DEBUG)"=="" DEBUG=0 !ELSE DEBUG=1 !ENDIF # local directories TOP_DIR = .. SRC_DIR = ../generic # sources for script.h SCRIPT_SOURCES = \ ../generic/context.tcl \ ../generic/script.ws3 \ ../generic/cookie.ws3 \ ../generic/sessctx.ws3 # generic objects web_OBJECTS = \ args.obj \ cfg.obj \ checksum.obj \ command.obj \ conv.obj \ crypt.obj \ nca_d.obj \ dispatch.obj \ filecounter.obj \ filelock.obj \ formdata.obj \ hashutl.obj \ htmlify.obj \ log.obj \ logtocmd.obj \ logtochannel.obj \ logtofile.obj \ logutl.obj \ messages.obj \ messagesCmd.obj \ paramlist.obj \ querystring.obj \ request.obj \ uricode.obj \ script.obj \ url.obj \ web.obj \ webout.obj \ weboutint.obj \ webutl.obj \ webutlcmd.obj \ varchannel.obj \ modwebsh_cgi.obj \ request_cgi.obj \ response_cgi.obj # Apache objects (for mod_websh.so) web_OBJECTS_ap = \ apchannel.obj \ interpool.obj \ logtoap.obj \ mod_websh.obj \ modwebsh_ap.obj \ request_ap.obj \ response_ap.obj # install directories bindir = $(INSTALL_PREFIX)/bin moddir = $(INSTALL_PREFIX)/modules docdir = $(INSTALL_PREFIX)/htdocs libdir = $(INSTALL_PREFIX)/lib cfgdir = $(INSTALL_PREFIX)/conf # compiler, linker, and other binaries CC = cl CCLD = $(CC) INSTALL = xcopy /y PACKAGE = web VERSION = 3.6.0b5 CFLAGS_DEFAULT = /D"WIN32" /D"VERSION=\"$(VERSION)\"" /D"_MBCS" /W3 /EHsc CFLAGS_DEBUG = /Od /Yd /Zi /D"_DEBUG" CFLAGS_OPTIMIZE = /O2 /Ob1 CLEANFILES = *.obj *.ilk *.pdb *.tlb *.tli *.tlh *.tmp *.rsp *.exe *.dll *.lib *.exp *.so OBJEXT = obj EXEC_CFLAGS = /D"_CONSOLE" !IF "$(DEBUG)" == "1" SHLIB_CFLAGS = /LDd /MDd /Gy !ELSE SHLIB_CFLAGS = /LD /MD /Gy !ENDIF # TCL stuff TCL_INCLUDES = "$(TCL_PREFIX)/include" TCL_DEFS = /DTHREAD_SAFE=1 TCL_LIBS = kernel32.lib user32.lib advapi32.lib ws2_32.lib odbc32.lib TCL_STUB_LIB_SPEC = "$(TCL_PREFIX)/lib/tclstub$(TCL_VERSION).lib" TCL_LIB_SPEC = "$(TCL_PREFIX)/lib/tcl$(TCL_VERSION).lib" TCLSH_PROG = "$(TCL_PREFIX)\bin\tclsh$(TCL_VERSION)" # Apache stuff HTTPD_INCLUDES = "$(HTTPD_PREFIX)/include" !IF EXIST("$(HTTPD_PREFIX)/include/apr_strings.h") # Apache 2 !IF EXIST("$(HTTPD_PREFIX)/lib/libapr.lib") # Apache 2.0 HTTPD_LIBS = "$(HTTPD_PREFIX)/lib/libhttpd.lib" \ "$(HTTPD_PREFIX)/lib/libapr.lib" \ "$(HTTPD_PREFIX)/lib/libaprutil.lib" !ELSE # Apache 2.2 HTTPD_LIBS = "$(HTTPD_PREFIX)/lib/libhttpd.lib" \ "$(HTTPD_PREFIX)/lib/libapr-1.lib" \ "$(HTTPD_PREFIX)/lib/libaprutil-1.lib" !ENDIF !ELSE # Apache 1.3 HTTPD_LIBS = "$(HTTPD_PREFIX)/lib/ap.lib" \ "$(HTTPD_PREFIX)/lib/ApacheOS.lib" \ "$(HTTPD_PREFIX)/libexec/ApacheCore.lib" !ENDIF INCLUDES = -I$(TCL_INCLUDES) -I$(HTTPD_INCLUDES) EXTRA_CFLAGS = $(TCL_DEFS) !IF "$(DEBUG)" == "0" CFLAGS = $(CFLAGS_DEFAULT) $(CFLAGS_OPTIMIZE) $(EXTRA_CFLAGS) $(INCLUDES) LD_CFLAGS = $(CFLAGS_DEFAULT) $(CFLAGS_OPTIMIZE) DEFAULT_MSVCRT=msvcrt.lib !ELSE CFLAGS = $(CFLAGS_DEFAULT) $(CFLAGS_DEBUG) $(EXTRA_CFLAGS) $(INCLUDES) LD_CFLAGS = $(CFLAGS_DEFAULT) DEFAULT_MSVCRT=msvcrtd.lib !ENDIF !IF "$(DEBUG)" == "1" !MESSAGE ================================================== !MESSAGE Creating objects with debug information (DEBUG=1) !MESSAGE ================================================== !ENDIF # find apache binary (needed for apachetest) !IF EXIST("$(HTTPD_PREFIX)/bin/Apache.exe") HTTPD_BIN = "$(HTTPD_PREFIX)/bin/Apache.exe" !ELSE !IF EXIST("$(HTTPD_PREFIX)/bin/httpd.exe") HTTPD_BIN = "$(HTTPD_PREFIX)/bin/httpd.exe" !ELSE !IF EXIST("$(HTTPD_PREFIX)/Apache.exe") HTTPD_BIN = "$(HTTPD_PREFIX)/Apache.exe" !ELSE !MESSAGE Warning: Apache binary not found in "$(HTTPD_PREFIX)/bin" !ENDIF !ENDIF !ENDIF # ============================================================================= # main targets # ============================================================================= default: @echo. @echo ----------------------------------------------------------------- @echo Target must be one of websh.exe, mod_websh.so, all, clean, @echo test, or install @echo Use DEBUG=1 to for debug objects (e.g. nmake websh.exe DEBUG=1) @echo ----------------------------------------------------------------- @echo. all: websh.exe mod_websh.so script.h: ..\generic\tcldecmt.tcl $(SCRIPT_SOURCES) $(TCLSH_PROG) ..\generic\tcldecmt.tcl $(SCRIPT_SOURCES) > $@ script.obj: script.h ../generic/script.c $(CC) -I. $(CFLAGS) -c ../generic/script.c /Fo$@ interpool.obj: ../generic/interpool.c $(CC) $(CFLAGS) -UUSE_TCL_STUBS -c ../generic/interpool.c /Fo$@ {$(SRC_DIR)}.c{}.obj:: $(CC) $(CFLAGS) -Fd.\ -c $< websh.exe: websh$(VERSION).exe websh$(VERSION).dll mod_websh.so: mod_websh$(VERSION).so websh$(VERSION).dll websh$(VERSION).exe: tclAppInit.$(OBJEXT) websh$(VERSION).dll $(CCLD) $(LD_CFLAGS) $(EXEC_CFLAGS) \ tclAppInit.$(OBJEXT) websh$(VERSION).lib \ $(TCL_LIB_SPEC) $(TCL_STUB_LIB_SPEC) $(TCL_LIBS) -o websh$(VERSION).exe \ /link /nodefaultlib:$(DEFAULT_MSVCRT) mod_websh$(VERSION).so: $(web_OBJECTS_ap) websh$(VERSION).dll $(CCLD) $(LD_CFLAGS) $(SHLIB_CFLAGS) -o mod_websh$(VERSION).so \ $(web_OBJECTS_ap) websh$(VERSION).lib $(TCL_LIB_SPEC) \ $(TCL_STUB_LIB_SPEC) $(HTTPD_LIBS) $(TCL_LIBS) \ /link /dll /nodefaultlib:msvcrt.lib /subsystem:windows websh$(VERSION).dll: $(web_OBJECTS) $(CCLD) $(LD_CFLAGS) $(SHLIB_CFLAGS) -o websh$(VERSION).dll \ $(web_OBJECTS) $(TCL_LIB_SPEC) $(TCL_STUB_LIB_SPEC) \ $(TCL_LIBS) /link /dll \ /nodefaultlib:$(DEFAULT_MSVCRT) /subsystem:windows test: websh.exe set TCL_LIBRARY="$(TCL_PREFIX)/lib" set TCLLIBPATH=$(TCL_PACKAGE_PATH) set WEB_LIBRARY=$(TOP_DIR)/win/websh$(VERSION).dll cd $(TOP_DIR)/tests $(TOP_DIR)\win\websh$(VERSION).exe webtest.ws3 apachetest: mod_websh.so websh.exe cd $(TOP_DIR)/apachetests $(TCLSH_PROG) runtests.tcl $(HTTPD_BIN) clean: -del /Q $(CLEANFILES) -del /Q script.h -rmdir /S /Q ..\apachetests\logs -del /Q ..\apachetests\conf\server.conf -del /Q ..\apachetests\conf\websh.conf distclean: clean # ============================================================================= # Install Websh # As there are no symbolic links under Windows, files are installed twice: # once with version number and once without. # ============================================================================= install: installdirs installtargets installdocs installsample installtargets: @echo. @echo ----------------------------------------------------------------- @echo Note that only targets that have been built are installed @echo ----------------------------------------------------------------- @echo. if exist mod_websh$(VERSION).so \ $(INSTALL) mod_websh$(VERSION).so "$(moddir)" if exist mod_websh$(VERSION).lib \ $(INSTALL) mod_websh$(VERSION).lib "$(libdir)" if exist mod_websh$(VERSION).exp \ $(INSTALL) mod_websh$(VERSION).exp "$(libdir)" if exist mod_websh$(VERSION).so \ copy /Y mod_websh$(VERSION).so "$(moddir)/mod_websh.so" if exist websh$(VERSION).exe \ $(INSTALL) websh$(VERSION).exe "$(bindir)" if exist websh$(VERSION).exe \ copy /Y websh$(VERSION).exe "$(bindir)/websh.exe" if exist websh$(VERSION).dll \ $(INSTALL) websh$(VERSION).dll "$(bindir)" if exist websh$(VERSION).lib \ $(INSTALL) websh$(VERSION).lib "$(libdir)" if exist websh$(VERSION).exp \ $(INSTALL) websh$(VERSION).exp "$(libdir)" if exist websh$(VERSION).dll \ copy /Y websh$(VERSION).dll "$(bindir)/websh.dll" copy /Y "$(TOP_DIR)\..\src\win\pkgIndex.tcl" "$(bindir)" installdocs: # $(INSTALL) "$(TOP_DIR)\..\doc\html\*.html" "$(docdir)" installsample: $(INSTALL) "$(TOP_DIR)\..\doc\mod_websh\conf\*.*" "$(cfgdir)" $(INSTALL) "$(TOP_DIR)\..\doc\mod_websh\htdocs\*.*" "$(docdir)" copy /Y "$(TOP_DIR)\..\doc\mod_websh\README" "$(INSTALL_PREFIX)\README.txt" installdirs: -mkdir "$(bindir)" -mkdir "$(libdir)" -mkdir "$(moddir)" -mkdir "$(docdir)" -mkdir "$(cfgdir)"