blob: 18e3d175a2292cf6634db83dee766bbfce68a0d6 [file] [log] [blame]
#
# 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 <target>
# where <target> 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 = link
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 = /DLL
!ELSE
SHLIB_CFLAGS = /DLL
!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 =
DEFAULT_MSVCRT=msvcrt.lib
!ELSE
CFLAGS = $(CFLAGS_DEFAULT) $(CFLAGS_DEBUG) $(EXTRA_CFLAGS) $(INCLUDES)
LD_CFLAGS = /DEBUG
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) \
tclAppInit.$(OBJEXT) websh$(VERSION).lib \
$(TCL_LIB_SPEC) $(TCL_STUB_LIB_SPEC) $(TCL_LIBS) \
/out:websh$(VERSION).exe \
/nodefaultlib:$(DEFAULT_MSVCRT)
mod_websh$(VERSION).so: $(web_OBJECTS_ap) websh$(VERSION).dll
$(CCLD) $(LD_CFLAGS) $(SHLIB_CFLAGS) /out:mod_websh$(VERSION).so \
$(web_OBJECTS_ap) websh$(VERSION).lib $(TCL_LIB_SPEC) \
$(TCL_STUB_LIB_SPEC) $(HTTPD_LIBS) $(TCL_LIBS) \
/nodefaultlib:$(DEFAULT_MSVCRT) /subsystem:windows
websh$(VERSION).dll: $(web_OBJECTS)
$(CCLD) $(LD_CFLAGS) $(SHLIB_CFLAGS) /out:websh$(VERSION).dll \
$(web_OBJECTS) $(TCL_LIB_SPEC) $(TCL_STUB_LIB_SPEC) \
$(TCL_LIBS) /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)"