blob: 964daf55e7eff2e4357b9466bd6a2d5e0e3a62df [file] [log] [blame]
#
# makefile for mod_dtcl and MingW32
#
#
# Global settings
#
# Tweak these as needed to match your environment
# Most of these variables can be set from the shell or command line
#
#
# Command line options differ for different versions of gcc
#
#GCCVER = 2
#
GCCVER = 3
#
# Threaded flag - set this and mod_dtcl will link against a
# threaded version of Tcl. You MUST build a threaded version of Tcl for
# this to work - ActiveState's binary Tcl distribution does not include
# threads!
#
# This overrides the THREADED_TCL flag in mod_dtcl.h !
#
#THREADED ?= YES
#
#
THREADED ?= NO
#
# I use this as a pointer to a good temporary location.
# The default works for most people. You won't need any of the cruft
# we create while building.
#
TEMP_LIBS ?= C:/TEMP
#
# Set this to your TCL version
#
# TCL_VERSION ?= 83
TCL_VERSION ?= 84
#
# Set TCL_HOME to where you have installed Tcl
#
TCL_HOME ?= C:/"Program Files/Tcl8.4"
#
# Set this to where you have installed Apache - used for the install step.
#
APACHE_HOME ?= C:/"Program Files/Apache Group/Apache"
#
# Set APACHE_SRC to where your APACHE sources live.
# NOTE: You must apply the diff to the os.h file as described in the
# readme, and this directory must contain built sources, e.g. object files
# If you use a binary install of Apache just set this to the same location
# as APACHE_HOME like this:
#APACHE_SRC ?= $(APACHE_HOME)
#
APACHE_SRC ?= ../../apache
#
# Set APACHE_INC to where the Apache source include files live. This default
# should be OK if you built Apache from source. If you used a binary install
# of Apache, you probably want something like this assuming you set APACHE_SRC
# as suggested above:
#APACHE_INC ?= -I $(APACHE_SRC)/include
#
APACHE_INC ?= -I $(APACHE_SRC)/src/include -I $(APACHE_SRC)/src/os/win32
#
# You shouldn't have to change anything below this
#
ROOT_DIR = ../
OUTPUT_DIR = ./output
TCL_INC = -I $(TCL_HOME)/include
APACHE_LIB ?= $(TEMP_LIBS)
APACHE_DEF ?= $(TEMP_LIBS)/ApacheCore.def
ifeq ($(GCCVER), 3)
NATIVESTRUCT ?= -mms-bitfields
else
NATIVESTRUCT ?= -fnative-struct
endif
ifeq ($(THREADED), YES)
TCL_LIB = $(TCL_HOME)/lib/tcl$(TCL_VERSION)t.lib
CFLAGS = $(NATIVESTRUCT) -shared -mwindows -DSHARED_MODULE -DDTCL_VERSION="\"`cat $(ROOT_DIR)/VERSION`\"" -DTHREADED_TCL=1
else
TCL_LIB = $(TCL_HOME)/lib/tcl$(TCL_VERSION).lib
CFLAGS = $(NATIVESTRUCT) -shared -mwindows -DSHARED_MODULE -DDTCL_VERSION="\"`cat $(ROOT_DIR)/VERSION`\""
endif
CC = gcc $(CFLAGS)
LIBS = $(TCL_LIB) -L$(APACHE_LIB) -lapachecore
INCLUDES = $(TCL_INC) $(APACHE_INC)
APREQ_OBJECTS = apache_cookie.o apache_multipart_buffer.o apache_request.o
OBJECTS = tcl_commands.o parser.o channel.o $(APREQ_OBJECTS)
DLL_CFLAGS = -DEAPI=1
DLL_DYNAMIC = ApacheModuleDtcl.dll
DLL_SO = mod_dtcl.so
DLL_OBJS = mod_dtcl.o $(OBJECTS)
#
# By default we build a .so file (Apache > 1.3.14)
#
# "make so_style" gives you a mod_dtcl.so file
# "make dll_style" gives you a ApacheModuleDtcl.dll
# "make bin_style" gives you a mod_dtcl.so and assumes you used a binary install
# of Apache
all : so_style
bin_style: APACHE_EXP=$(APACHE_HOME)/libexec/ApacheCore.exp
bin_style: DLL_BUILD=$(DLL_SO)
bin_style: apache_libs $(DLL_SO)
dll_style: APACHE_EXP=$(APACHE_SRC)/CoreR/ApacheCore.exp
dll_style: DLL_BUILD=$(DLL_DYNAMIC)
dll_style: apache_libs $(DLL_DYNAMIC)
so_style: APACHE_EXP=$(APACHE_SRC)/src/Release/ApacheCore.exp
so_style: DLL_BUILD=$(DLL_SO)
so_style: apache_libs $(DLL_SO)
$(DLL_DYNAMIC): $(OUTPUT_DIR) $(DLL_OBJS) makefile
$(CC) --dll --kill-at --disable-stdcall-fixup \
$(DLL_OBJS) $(LIBS) -o $(OUTPUT_DIR)/$(DLL_DYNAMIC)
#
# This does the same thing as the above, yet names the output file
# with a .so extension to match the "new" Apache style.
#
$(DLL_SO): $(OUTPUT_DIR) $(DLL_OBJS) makefile
$(CC) --dll --kill-at --disable-stdcall-fixup \
$(DLL_OBJS) $(LIBS) -o $(OUTPUT_DIR)/$(DLL_SO)
$(OUTPUT_DIR):
-@mkdir $(OUTPUT_DIR)
apache_cookie.o: $(ROOT_DIR)apache_cookie.c $(ROOT_DIR)apache_cookie.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -D_AP_OS_IS_PATH_ABS_ -o $@ $<
apache_multipart_buffer.o: $(ROOT_DIR)apache_multipart_buffer.c $(ROOT_DIR)apache_multipart_buffer.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -D_AP_OS_IS_PATH_ABS_ -o $@ $<
apache_request.o: $(ROOT_DIR)apache_request.c $(ROOT_DIR)apache_request.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -D_AP_OS_IS_PATH_ABS_ -o $@ $<
mod_dtcl.o: $(ROOT_DIR)mod_dtcl.c $(ROOT_DIR)mod_dtcl.h $(ROOT_DIR)tcl_commands.h $(ROOT_DIR)apache_request.h $(ROOT_DIR)parser.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -o $@ $<
tcl_commands.o: $(ROOT_DIR)tcl_commands.c $(ROOT_DIR)tcl_commands.h $(ROOT_DIR)mod_dtcl.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -D_AP_OS_IS_PATH_ABS_ -o $@ $<
parser.o: $(ROOT_DIR)parser.c $(ROOT_DIR)mod_dtcl.h $(ROOT_DIR)parser.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -D_AP_OS_IS_PATH_ABS_ -o $@ $<
channel.o: $(ROOT_DIR)channel.c $(ROOT_DIR)mod_dtcl.h $(ROOT_DIR)channel.h
$(CC) -c $(DLL_CFLAGS) $(INCLUDES) -D_AP_OS_IS_PATH_ABS_ -o $@ $<
clean:
-@rm -f $(DLL_OBJS) $(DLL_DYNAMIC) $(DLL_SO)
-@rm -rf $(OUTPUT_DIR)
install:
@echo Installing mod_dtcl...
-@cp $(OUTPUT_DIR)/* $(APACHE_HOME)/modules
apache_libs:
-@mkdir $(TEMP_LIBS)
-@rm $(APACHE_DEF)
echo EXPORTS > $(APACHE_DEF)
nm $(APACHE_EXP) |grep " U _" | sed "s/.* U _//" >> $(APACHE_DEF)
dlltool --def $(APACHE_DEF) --dllname ApacheCore.dll \
--output-lib $(TEMP_LIBS)/libapachecore.a -k