# Make file for SciTE on Windows
# Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
# The License.txt file describes the conditions under which this software may be distributed.
# This makefile assumes the mingw32 version of GCC 4.x is used and changes will
# be needed to use other compilers.

.SUFFIXES: .cxx .properties
CC = g++
ifndef CYGWIN
DEL = del /q
COPY = copy
else
DEL = rm
COPY = cp
endif

PROG	= ../bin/SciTE.exe
PROGSTATIC = ../bin/Sc1.exe
WIDEFLAGS=-DUNICODE -D_UNICODE

vpath %.h ../src ../../scintilla/include ../../scintilla/win32
vpath %.cxx ../src
vpath %.o ../../scintilla/win32
vpath %.a ../../scintilla/win32

ifndef NO_LUA
LUA_CORE_OBJS = lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
		lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o \
		ltable.o ltm.o lundump.o lvm.o lzio.o

LUA_LIB_OBJS =	lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o ltablib.o \
		lstrlib.o loadlib.o loslib.o linit.o

LUA_OBJS = LuaExtension.o SingleThreadExtension.o $(LUA_CORE_OBJS) $(LUA_LIB_OBJS)

vpath %.c ../lua/src ../lua/src/lib

LUA_INCLUDES = -I ../lua/include
#LUA_SCRIPTS = ..\bin\SciTEExtension.lua ..\bin\SciTEStartup.lua
LUA_DEFINES = -DLUA_USER_H=\"scite_lua_win.h\"
else
LUA_DEFINES = -DNO_LUA
endif

INCLUDEDIRS=-I ../../scintilla/include -I ../../scintilla/win32 -I ../src $(LUA_INCLUDES)
RCINCLUDEDIRS=--include-dir ../../scintilla/win32 --include-dir ../src

CBASEFLAGS = -W -Wall $(INCLUDEDIRS) $(LUA_DEFINES) $(WIDEFLAGS) -mno-cygwin

ifdef DEBUG
CFLAGS=-DDEBUG -g $(CBASEFLAGS)
else
CFLAGS=-DNDEBUG -Os $(CBASEFLAGS)
STRIPFLAG="-Wl,-s"
endif

CXXFLAGS = $(CFLAGS) -Wno-char-subscripts -pedantic -fno-rtti -mno-cygwin

LDFLAGS=-mwindows -lmsimg32 -lcomctl32 -limm32 -lole32 -luuid -luxtheme $(LUA_LDFLAGS) -mno-cygwin

.cxx.o:
	$(CC) $(CXXFLAGS) -c $< -o $@

.c.o:
	gcc $(CFLAGS) -c $< -o $@

OTHER_OBJS	= FilePath.o SciTEBuffers.o SciTEIO.o Exporters.o PropSetFile.o StringHelpers.o StringList.o \
SciTEProps.o SciTEWin.o SciTEWinBar.o SciTEWinDlg.o MultiplexExtension.o \
StyleWriter.o UniqueInstance.o \
Utf8_16.o SciTERes.o GUIWin.o \
IFaceTable.o DirectorExtension.o JobQueue.o WinMutex.o $(LUA_OBJS)

OBJS = SciTEBase.o $(OTHER_OBJS)

DLLS=..\bin\Scintilla.dll ..\bin\SciLexer.dll

#++Autogenerated -- run scintilla/src/LexGen.py to regenerate
#**LEXPROPS=\\\n\(../bin/\* \)
LEXPROPS=\
../bin/abaqus.properties ../bin/ada.properties ../bin/asm.properties \
../bin/asn1.properties ../bin/au3.properties ../bin/ave.properties \
../bin/baan.properties ../bin/blitzbasic.properties ../bin/bullant.properties \
../bin/caml.properties ../bin/cmake.properties ../bin/cobol.properties \
../bin/conf.properties ../bin/cpp.properties ../bin/csound.properties \
../bin/css.properties ../bin/d.properties ../bin/eiffel.properties \
../bin/erlang.properties ../bin/escript.properties ../bin/flagship.properties \
../bin/forth.properties ../bin/fortran.properties ../bin/freebasic.properties \
../bin/gap.properties ../bin/html.properties ../bin/inno.properties \
../bin/kix.properties ../bin/latex.properties ../bin/lisp.properties \
../bin/lot.properties ../bin/lout.properties ../bin/lua.properties \
../bin/matlab.properties ../bin/metapost.properties ../bin/mmixal.properties \
../bin/modula3.properties ../bin/nimrod.properties ../bin/nncrontab.properties \
../bin/nsis.properties ../bin/opal.properties ../bin/others.properties \
../bin/pascal.properties ../bin/perl.properties ../bin/pov.properties \
../bin/powerpro.properties ../bin/powershell.properties ../bin/ps.properties \
../bin/purebasic.properties ../bin/python.properties ../bin/r.properties \
../bin/rebol.properties ../bin/ruby.properties ../bin/scriptol.properties \
../bin/smalltalk.properties ../bin/sorcins.properties \
../bin/specman.properties ../bin/spice.properties ../bin/sql.properties \
../bin/tacl.properties ../bin/tal.properties ../bin/tcl.properties \
../bin/tex.properties ../bin/txt2tags.properties ../bin/vb.properties \
../bin/verilog.properties ../bin/vhdl.properties ../bin/yaml.properties
#--Autogenerated -- end of automatically generated section

PROPS=../bin/SciTEGlobal.properties ../bin/abbrev.properties $(LEXPROPS)

ALL:	$(PROG) $(PROGSTATIC) $(DLLS) $(PROPS) $(LUA_SCRIPTS)

clean:
	$(DEL) *.exe *.o *.obj *.dll *.res *.map

deps:
	$(CC) -MM $(CXXFLAGS) *.cxx ../src/*.cxx ../lua/src/*.c ../lua/src/lib/*.c >deps.mak

..\bin\Scintilla.dll:	..\..\scintilla\bin\Scintilla.dll
	$(COPY) ..\..\scintilla\bin\Scintilla.dll $@

..\bin\SciLexer.dll:	..\..\scintilla\bin\SciLexer.dll
	$(COPY) ..\..\scintilla\bin\SciLexer.dll $@

# Using '/' rather than '\' as that allows make to match the next rule
../bin/%.properties:	../src/%.properties
	$(COPY) $(subst /,\,$^) $(subst /,\,$@)

# Normally distributed rather than built as may not have grep on all machines
# Copy all non-comment lines from all the properties files into one combined file
..\src\Embedded.properties: $(PROPS)
	grep -v -h "^[#]" $(PROPS) >..\src\Embedded.properties

$(PROG): $(OBJS)
	$(CC) $(STRIPFLAG) -Xlinker --subsystem -Xlinker windows -o  $@ $^ $(LDFLAGS)

OBJSSTATIC = Sc1.o SciTEWinBar.o SciTEWinDlg.o MultiplexExtension.o \
	StyleWriter.o UniqueInstance.o SciTEBase.o FilePath.o SciTEBuffers.o \
	SciTEIO.o Exporters.o PropSetFile.o StringHelpers.o StringList.o SciTEProps.o ScintillaWinL.o \
	ScintillaBaseL.o Editor.o Catalogue.o Accessor.o WordList.o CharacterSet.o \
	LexerModule.o LexerSimple.o LexerBase.o \
	ExternalLexer.o StyleContext.o Lexers.a PropSetSimple.o RunStyles.o \
	ContractionState.o CharClassify.o Decoration.o Document.o CellBuffer.o CallTip.o Sc1Res.o PlatWin.o \
	PositionCache.o UniConversion.o Utf8_16.o GUIWin.o KeyMap.o Indicator.o LineMarker.o RESearch.o Selection.o Style.o \
	ViewStyle.o AutoComplete.o IFaceTable.o DirectorExtension.o MultiplexExtension.o XPM.o PerLine.o \
	JobQueue.o WinMutex.o $(LUA_OBJS)

$(PROGSTATIC): $(OBJSSTATIC)
	$(CC) $(STRIPFLAG) -Xlinker --subsystem -Xlinker windows -o $@ $^ $(LDFLAGS)

# Automatically generate dependencies for most files with "make deps"
include deps.mak

Sc1.o: SciTEWin.cxx SciTEWin.h SciTE.h PropSetFile.h \
 SString.h Scintilla.h Extender.h FilePath.h SciTEBase.h JobQueue.h
	$(CC) $(CXXFLAGS) -D STATIC_BUILD -c $< -o $@

SciTERes.o:	SciTERes.rc SciTE.h SciTE.exe.manifest
	windres $(RCINCLUDEDIRS) SciTERes.rc $@

# Also depends on ../src/Embedded.properties but may not want to build everywhere
# so must explicitly ask to build it.
Sc1Res.o:	SciTERes.rc SciTE.h SciTE.exe.manifest
	windres $(RCINCLUDEDIRS) SciTERes.rc --define STATIC_BUILD $@

# Make sure SciTEBase gets rebuilt (so its about box gets a new
# date stamp) when any of the other objects are updated.
SciTEBase.o: $(OTHER_OBJS)
