From 0e7bf875d8bf729674cfa779b70f75a50f4030e1 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Wed, 27 Jun 2012 13:13:27 -0400 Subject: Refactored the Makefile. --- src/Makefile | 524 +++++++++++++++++++++++++------------------------------- src/textadept.c | 67 +++++--- 2 files changed, 274 insertions(+), 317 deletions(-) (limited to 'src') diff --git a/src/Makefile b/src/Makefile index 044300fe..ccb3ecc9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,330 +1,276 @@ # Copyright 2007-2012 Mitchell mitchell.att.foicica.com. See LICENSE. -.SUFFIXES: .c .o .h .a .cxx +ifeq (Linux, $(shell uname -s)) + ifneq (win32, $(MAKECMDGOALS)) + CC = gcc + CXX = g++ + LUAFLAGS = -DLUA_USE_LINUX + LDFLAGS = -rdynamic -Wl,--retain-symbols-file -Wl,lua.sym -ldl -# Linux (default) -CC = gcc -CPP = g++ -PKG_CONFIG = pkg-config -PKG_CONFIG_PATH = $PKG_CONFIG_PATH -ifndef NCURSES -PLAT_FLAGS = -DGTK -D_XOPEN_SOURCE=700 -else -PLAT_FLAGS = -DNCURSES -D_XOPEN_SOURCE=700 -endif -ifdef BSD -PLAT_FLAGS += -D__BSD__ -endif -SCI_THREAD_FLAG = -LUAFLAGS = -DLUA_USE_LINUX -TEXTADEPT = textadept -TEXTADEPTJIT = textadeptjit -TEXTADEPT_RC = -EXPORTLUASYMS = -rdynamic -Wl,--retain-symbols-file -Wl,lua.sym -WINDRES = -LDL = -ldl -LUAJIT_LIB = libluajit.a -LUAJIT_MAKE = -LUADOC = luadoc + ifneq (ncurses, $(MAKECMDGOALS)) + plat_flag = -DGTK + ifndef GTK3 + gtk_version = 2.0 + else + gtk_version = 3.0 + endif + gtk_flags = $(shell pkg-config --cflags gtk+-$(gtk_version)) + gtk_libs = $(shell pkg-config --libs gtk+-$(gtk_version)) + else + plat_flag = -DNCURSES + endif -# Win32 (WIN32=1) -ifdef WIN32 -CC = i486-mingw32-gcc -mms-bitfields -CPP = i486-mingw32-g++ -mms-bitfields -mwindows -static-libgcc -static-libstdc++ -PKG_CONFIG = pkg-config --define-variable=prefix=win32gtk -PKG_CONFIG_PATH = $(shell pwd)/win32gtk/lib/pkgconfig -PLAT_FLAGS += -D__WIN32__ -SCI_THREAD_FLAG = -DG_THREADS_IMPL_NONE -LUAFLAGS = -D_WIN32 -DWIN32 -TEXTADEPT = textadept.exe -TEXTADEPTJIT = textadeptjit.exe -TEXTADEPT_RC = textadept_rc.o -EXPORTLUASYMS = -Wl,--retain-symbols-file -Wl,lua.sym -WINDRES = i486-mingw32-windres -LDL = -LUAJIT_LIB = lua51.dll -LUAJIT_MAKE = HOST_CC="gcc -m32" CROSS=i486-mingw32- TARGET_SYS=Windows -LUADOC = luadoc_start.bat -endif + luadoc = luadoc + else # (make win32) + CROSS = i586-mingw32msvc- + CC = gcc + CFLAGS = -mms-bitfields + CXX = g++ + CXXFLAGS = -mms-bitfields -mwindows -static-libgcc -static-libstdc++ + LDFLAGS = -liconv -Wl,--retain-symbols-file -Wl,lua.sym + WINDRES = windres -# Mac OSX (OSX=1) -ifdef OSX -CC = gcc -arch i386 -mdynamic-no-pic -mmacosx-version-min=10.5 \ - -isysroot /Developer/SDKs/MacOSX10.5.sdk -CPP = g++ -arch i386 -mdynamic-no-pic -mmacosx-version-min=10.5 \ - -isysroot /Developer/SDKs/MacOSX10.5.sdk -PKG_CONFIG = gtkosx/bin/pkg-config --define-variable=prefix=gtkosx -PKG_CONFIG_PATH = $(shell pwd)/gtkosx/lib/pkgconfig -PLAT_FLAGS += -D__OSX__ -SCI_THREAD_FLAG = -LUAFLAGS = -DLUA_USE_MACOSX -TEXTADEPT = textadept.osx -TEXTADEPTJIT = textadeptjit.osx -TEXTADEPT_RC = -EXPORTLUASYMS = -rdynamic -WINDRES = -LDL = -LUAJIT_LIB = libluajit.a -LUAJIT_MAKE = -LUADOC = luadoc -endif + plat_flag = -DGTK + gtk_flags = $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \ + pkg-config --define-variable=prefix=win32gtk \ + --cflags gtk+-2.0) + gtk_libs = $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \ + pkg-config --define-variable=prefix=win32gtk \ + --libs gtk+-2.0) -# No debugging unless DEBUG=1. -ifndef DEBUG -DEBUG_FLAG = -DNDEBUG -else -DEBUG_FLAG = -DDEBUG -DTRACE -g -endif + luadoc = luadoc_start.bat + endif +else ifeq (Darwin, $(shell uname -s)) + CC = gcc + CFLAGS = -arch i386 -mdynamic-no-pic -mmacosx-version-min=10.5 \ + -isysroot /Developer/SDKs/MacOSX10.5.sdk + CXX = g++ + CXXFLAGS = -arch i386 -mdynamic-no-pic -mmacosx-version-min=10.5 \ + -isysroot /Developer/SDKs/MacOSX10.5.sdk + LUAFLAGS = -DLUA_USE_MACOSX + LDFLAGS = -rdynamic -# Do not compile with LuaJIT unless LUAJIT=1. -ifndef LUAJIT -LUADIR = lua -LUAJIT_FLAG = -LUAJIT_LIB = -else -LUADIR = luajit -LUAJIT_FLAG = -DLUAJIT -endif + #ifneq (ncurses, $(MAKECMDGOALS)) + plat_flag = -DGTK + gtk_flags = $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \ + gtkosx/bin/pkg-config --define-variable=prefix=gtkosx \ + --cflags gtk+-2.0) + gtk_libs = $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \ + gtkosx/bin/pkg-config --define-variable=prefix=gtkosx \ + --libs gtk+-2.0) -framework Cocoa -lgtkmacintegration + .DEFAULT_GOAL := osx + #else + # plat_flag = -DNCURSES + # .DEFAULT_GOAL := osx-ncurses + #endif -# Single instance unless NO_SINGLE_INSTANCE=1 -ifndef NO_SINGLE_INSTANCE -SI_FLAG = -DSINGLE_INSTANCE -else -SI_FLAG = + luadoc = luadoc endif -INCLUDEDIRS = -Iscintilla/include -I$(LUADIR)/src -Igtdialog -ifdef NCURSES -INCLUDEDIRS += -Iscintilla/term -Itermkey +# No debugging unless DEBUG=1. +ifdef DEBUG + CFLAGS += -g + CXXFLAGS += -g endif -ifdef GTK3 -GTKVERSION = gtk+-3.0 -else -GTKVERSION = gtk+-2.0 +# Scintilla. + +sci_flags = -pedantic -Os $(plat_flag) -DSCI_LEXER -DNDEBUG \ + -Iscintilla/include -Iscintilla/src -Iscintilla/lexlib -Wall \ + -Wno-missing-braces -Wno-char-subscripts -Wno-long-long +ifeq (win32, $(MAKECMDGOALS)) + sci_flags += -DG_THREADS_IMPL_NONE endif -# Textadept +scintilla_objs = AutoComplete.o CallTip.o Catalogue.o CellBuffer.o \ + CharClassify.o ContractionState.o Decoration.o Document.o \ + Editor.o ExternalLexer.o Indicator.o KeyMap.o LineMarker.o \ + PerLine.o PositionCache.o RESearch.o RunStyles.o \ + ScintillaBase.o Selection.o Style.o UniConversion.o \ + ViewStyle.o XPM.o \ + Accessor.o CharacterSet.o LexerBase.o LexerModule.o \ + LexerNoExceptions.o LexerSimple.o PropSetSimple.o \ + StyleContext.o WordList.o +scintilla_gtk_objs = PlatGTK.o ScintillaGTK.o -CFLAGS = -std=c99 $(DEBUG_FLAG) $(LUAJIT_FLAG) $(SI_FLAG) -O $(PLAT_FLAGS) \ - $(INCLUDEDIRS) -W -Wall -Wno-sign-compare -Wno-unused -GTKFLAGS = $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(PKG_CONFIG) \ - --cflags $(GTKVERSION)) -ifndef NCURSES -CFLAGS += $(GTKFLAGS) -endif -GTKLIBS = $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(PKG_CONFIG) \ - --libs $(GTKVERSION)) -ifdef LIBPNG12 -GTKLIBS := $(shell sed -e 's/lpng14/lpng12/;' <<< "$(GTKLIBS)") -endif -ifdef OSX -GTKLIBS += -framework Cocoa -lgtkmacintegration -endif -GTDFLAGS = $(PLAT_FLAGS) -DNOHELP -DLIBRARY -ifndef NCURSES -GTDFLAGS += $(GTKFLAGS) -endif -ifndef NCURSES -LIBS = $(GTKLIBS) -else -LIBS = -lncursesw -lcdk -endif +# Textadept. -TEXTADEPT_OBJS = textadept.o -LUA_OBJS = lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o \ - linit.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 \ - lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o \ - loadlib.o loslib.o ltablib.o lstrlib.o \ - lpeg.o lfs.o -LUA_SRCS = lua/src/*.c lua/src/lib/*.c -LUAJIT_OBJS = -GTDIALOG = gtdialog.o -ifdef NCURSES -TERMKEY_OBJS = termkey.o driver-ti.o driver-csi.o +ta_flags = -std=c99 -O -D_POSIX_C_SOURCE=200809L -D_DARWIN_C_SOURCE \ + $(plat_flag) -Iscintilla/include -Igtdialog -W -Wall \ + -Wno-sign-compare -Wno-unused +ifndef NO_SINGLE_INSTANCE + # Single instance unless NO_SINGLE_INSTANCE=1 + ta_flags += -DSINGLE_INSTANCE endif -# Scintilla +lua_objs = lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o \ + linit.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 \ + lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o \ + lmathlib.o loadlib.o loslib.o ltablib.o lstrlib.o \ + lpeg.o lfs.o +luajit_objs = lpegjit.o lfsjit.o +termkey_objs = termkey.o driver-ti.o driver-csi.o -SCIFLAGS = $(DEBUG_FLAG) -pedantic -Os $(PLAT_FLAGS) -DSCI_LEXER \ - $(SCI_THREAD_FLAG) $(INCLUDEDIRS) -Iscintilla/src -Iscintilla/lexlib \ - -Wall -Wno-missing-braces -Wno-char-subscripts -Wno-long-long -ifndef NCURSES -SCIFLAGS += -Iscintilla/gtk -endif +# Build. -SCINTILLA_OBJS = AutoComplete.o CallTip.o Catalogue.o CellBuffer.o \ - CharClassify.o ContractionState.o Decoration.o Document.o Editor.o \ - ExternalLexer.o Indicator.o KeyMap.o LineMarker.o PerLine.o \ - PositionCache.o RESearch.o RunStyles.o ScintillaBase.o Selection.o \ - Style.o UniConversion.o ViewStyle.o XPM.o \ - Accessor.o CharacterSet.o LexerBase.o LexerModule.o LexerNoExceptions.o \ - LexerSimple.o PropSetSimple.o StyleContext.o WordList.o -ifndef NCURSES -SCINTILLA_GTK_OBJS = PlatGTK.o ScintillaGTK.o -SCINTILLA_MARSHALLER = scintilla-marshal.o -SCINTILLA_PLAT_OBJS = $(SCINTILLA_GTK_OBJS) $(SCINTILLA_MARSHALLER) -else -SCINTILLA_TERM_OBJS = ScintillaTerm.o -SCINTILLA_PLAT_OBJS = $(SCINTILLA_TERM_OBJS) -endif -SCINTILLA_LEXER = LexLPeg.o +all: textadept textadeptjit +ncurses: textadept-ncurses textadeptjit-ncurses +win32: textadept.exe textadeptjit.exe +osx: textadept.osx textadeptjit.osx +osx-ncurses: textadept-ncurses.osx textadeptjit-ncurses.osx -# Build +# Dependencies. -ifdef LUAJIT -TEXTADEPT_OBJS = textadeptjit.o -LUA_OBJS = lpegjit.o lfsjit.o -LUA_SRCS = lua/src/lib/*.c -LUAJIT_OBJS = $(LUAJIT_LIB) -SCINTILLA_LEXER = LexLPegjit.o -TEXTADEPT = $(TEXTADEPTJIT) -endif +$(scintilla_objs): scintilla/src/*.cxx scintilla/lexlib/*.cxx + $(CROSS)$(CXX) -c $(CXXFLAGS) $(sci_flags) $^ +$(scintilla_gtk_objs): scintilla/gtk/*.cxx + $(CROSS)$(CXX) -c $(CXXFLAGS) $(sci_flags) $(gtk_flags) $^ +scintilla-marshal.o: scintilla/gtk/scintilla-marshal.c + $(CROSS)$(CC) -c $(CFLAGS) $(gtk_flags) $< +ScintillaTerm.o: scintilla/term/ScintillaTerm.cxx + $(CROSS)$(CXX) -c $(CXXFLAGS) $(sci_flags) -Iscintilla/term -Itermkey $^ +LexLPeg.o: LexLPeg.cxx + $(CROSS)$(CXX) -c $(CXXFLAGS) $(LUAFLAGS) $(sci_flags) -DLPEG_LEXER \ + -DNO_SCITE -Ilua/src $< +LexLPegjit.o: LexLPeg.cxx + $(CROSS)$(CXX) -c $(CXXFLAGS) $(LUAFLAGS) $(sci_flags) -DLPEG_LEXER \ + -DNO_SCITE -Iluajit/src $< -o $@ +textadept.o: textadept.c + $(CROSS)$(CC) -c $(CFLAGS) $(ta_flags) -Ilua/src $(gtk_flags) $< +textadeptjit.o: textadept.c + $(CROSS)$(CC) -c $(CFLAGS) $(ta_flags) -DLUAJIT -Iluajit/src $(gtk_flags) $< \ + -o $@ +textadept-ncurses.o: textadept.c + $(CROSS)$(CC) -c $(CFLAGS) $(ta_flags) -Ilua/src -Iscintilla/term -Itermkey \ + $< -o $@ +textadeptjit-ncurses.o: textadept.c + $(CROSS)$(CC) -c $(CFLAGS) $(ta_flags) -DLUAJIT -Iluajit/src \ + -Iscintilla/term -Itermkey $< -o $@ +$(lua_objs): lua/src/*.c lua/src/lib/*.c + $(CROSS)$(CC) -c $(CFLAGS) $(LUAFLAGS) -Ilua/src $^ +$(luajit_objs): lua/src/lib/*.c + $(CROSS)$(CC) -c $(CFLAGS) $(LUAFLAGS) -Iluajit/src $^ + for lib in $(luajit_objs); do mv $$(echo $$lib | sed 's/jit//g') $$lib; done +libluajit.a: + cd luajit && make CC="$(CC) $(CFLAGS)" + cp luajit/src/$@ . +lua51.dll: + cd luajit && make HOST_CC="$(CC) -m32" CROSS=$(CROSS) TARGET_SYS=Windows + cp luajit/src/$@ . +gtdialog.o: gtdialog/gtdialog.c + $(CROSS)$(CC) -c $(CFLAGS) -DGTK -DNOHELP -DLIBRARY $(gtk_flags) $< +gtdialog-ncurses.o: gtdialog/gtdialog.c + $(CROSS)$(CC) -c $(CFLAGS) -DNCURSES -DNOHELP -DLIBRARY $< -o $@ +$(termkey_objs): termkey/*.c + $(CROSS)$(CC) -c $(CFLAGS) -std=c99 $^ +textadept_rc.o: textadept.rc + $(CROSS)$(WINDRES) $^ $@ -all: $(TEXTADEPT) +# Executables. -$(SCINTILLA_OBJS): scintilla/src/*.cxx scintilla/lexlib/*.cxx - $(CPP) $(SCIFLAGS) -c $^ -$(SCINTILLA_GTK_OBJS): scintilla/gtk/*.cxx - $(CPP) $(SCIFLAGS) $(GTKFLAGS) -c $^ -$(SCINTILLA_TERM_OBJS): scintilla/term/*.cxx - $(CPP) $(SCIFLAGS) -c $^ -$(SCINTILLA_MARSHALLER): scintilla/gtk/scintilla-marshal.c - $(CC) $(SCIFLAGS) $(GTKFLAGS) -w -c $< -$(SCINTILLA_LEXER): LexLPeg.cxx - $(CPP) $(SCIFLAGS) $(LUAFLAGS) -DLPEG_LEXER -DNO_SCITE -c $< -o $@ -$(TEXTADEPT_OBJS): textadept.c - $(CC) $(CFLAGS) -c $< -o $@ -$(LUA_OBJS): $(LUA_SRCS) - $(CC) $(LUAFLAGS) $(INCLUDEDIRS) -c $^ -ifdef LUAJIT - for lib in $(LUA_OBJS); do mv $$(echo $$lib | sed 's/jit//g') $$lib; done -endif -$(LUAJIT_OBJS): - cd luajit && make $(LUAJIT_MAKE) - cp luajit/src/$(LUAJIT_LIB) . -$(GTDIALOG): gtdialog/gtdialog.c - $(CC) $(GTDFLAGS) $(INCLUDEDIRS) -c $< -$(TERMKEY_OBJS): termkey/*.c - $(CC) -std=c99 -c $^ -$(TEXTADEPT):\ - $(SCINTILLA_OBJS) $(SCINTILLA_PLAT_OBJS) $(SCINTILLA_LEXER) \ - $(TEXTADEPT_OBJS) $(LUA_OBJS) $(LUAJIT_OBJS) $(GTDIALOG) \ - $(TERMKEY_OBJS) $(TEXTADEPT_RC) - $(CPP) $(EXPORTLUASYMS) -o $@ $^ $(LIBS) $(LDL) - mv $(TEXTADEPT) ../ -$(TEXTADEPT_RC): textadept.rc - $(WINDRES) $^ $@ -clean: - rm -f ../$(TEXTADEPT) *.o *.a *.dll +textadept: $(scintilla_objs) $(scintilla_gtk_objs) scintilla-marshal.o \ + LexLPeg.o textadept.o $(lua_objs) gtdialog.o + $(CROSS)$(CXX) $(CXXFLAGS) -o ../$@ $^ $(gtk_libs) $(LDFLAGS) +textadeptjit: $(scintilla_objs) $(scintilla_gtk_objs) scintilla-marshal.o \ + LexLPegjit.o textadeptjit.o $(luajit_objs) libluajit.a gtdialog.o + $(CROSS)$(CXX) $(CXXFLAGS) -o ../$@ $^ $(gtk_libs) $(LDFLAGS) +textadept-ncurses: $(scintilla_objs) ScintillaTerm.o LexLPeg.o \ + textadept-ncurses.o $(lua_objs) gtdialog-ncurses.o \ + $(termkey_objs) + $(CROSS)$(CXX) $(CXXFLAGS) -o ../$@ $^ -lncursesw -lcdk $(LDFLAGS) +textadeptjit-ncurses: $(scintilla_objs) ScintillaTerm.o LexLPegjit.o \ + textadeptjit-ncurses.o $(luajit_objs) libluajit.a \ + gtdialog-ncurses.o $(termkey_objs) + $(CROSS)$(CXX) $(CXXFLAGS) -o ../$@ $^ -lncursesw -lcdk $(LDFLAGS) +textadept32: textadept; mv ../$< ../$@ +textadeptjit32: textadeptjit; mv ../$< ../$@ +textadept32-ncurses: textadept-ncurses; mv ../$< ../$@ +textadeptjit32-ncurses: textadeptjit-ncurses; mv ../$< ../$@ +textadept.exe: $(scintilla_objs) $(scintilla_gtk_objs) scintilla-marshal.o \ + LexLPeg.o textadept.o textadept_rc.o $(lua_objs) gtdialog.o + $(CROSS)$(CXX) $(CXXFLAGS) -o ../$@ $^ $(gtk_libs) $(LDFLAGS) +textadeptjit.exe: $(scintilla_objs) $(scintilla_gtk_objs) scintilla-marshal.o \ + LexLPegjit.o textadeptjit.o textadept_rc.o $(luajit_objs) \ + lua51.dll gtdialog.o + $(CROSS)$(CXX) $(CXXFLAGS) -o ../$@ $^ $(gtk_libs) $(LDFLAGS) +textadept.osx: textadept; mv ../$< ../$@ +textadeptjit.osx: textadeptjit; mv ../$< ../$@ +textadept-ncurses.osx: textadept-ncurses; mv ../$< ../$@ +textadeptjit-ncurses.osx: textadeptjit-ncurses; mv ../$< ../$@ + +# Clean. + +clean: mostlyclean + rm -f ../textadept* *.a *.dll cd luajit && make clean +mostlyclean: + rm -f *.o + +# Documentation. doc: manual luadoc adeptsense doxygen manual: ../doc/*.md ../*.md ../doc/bombay -d ../doc -t ../doc --title Textadept --navtitle Manual $^ luadoc: ../modules ../core ../lexers/lexer.lua - cd ../doc && $(LUADOC) -d . -t . --doclet markdowndoc $^ + cd ../doc && $(luadoc) -d . -t . --doclet markdowndoc $^ adeptsense: ../modules ../core ../lexers/lexer.lua - cd ../modules && $(LUADOC) -d lua --doclet lua/adeptsensedoc $^ + cd ../modules && $(luadoc) -d lua --doclet lua/adeptsensedoc $^ doxygen: ../Doxyfile doxygen $< cleandoc: rm -f ../doc/*.html rm -rf ../doc/api ../doc/doxygen -# Package (only for Linux x86_64) -# Pass 'VERSION=[release version]' to 'make'. +# Package. + +basedir = textadept_$(value VERSION) +modules = css hypertext java rails rhtml ruby php -TEXTADEPT32 = $(TEXTADEPT)32 -TEXTADEPTJIT32 = $(TEXTADEPT)jit32 -TEXTADEPT64 = $(TEXTADEPT) -TEXTADEPTJIT64 = $(TEXTADEPT)jit -TEXTADEPT64LPNG12 = $(TEXTADEPT).lpng12 -TEXTADEPTJIT64LPNG12 = $(TEXTADEPT)jit.lpng12 -TEXTADEPTWIN32 = $(TEXTADEPT).exe -TEXTADEPTJITWIN32 = $(TEXTADEPT)jit.exe -TEXTADEPTMAC = $(TEXTADEPT).osx -TEXTADEPTJITMAC = $(TEXTADEPT)jit.osx -RELEASEDIR32 = textadept_$(value VERSION) -RELEASEDIR64 = $(RELEASEDIR32).x86_64 -RELEASEDIRWIN32 = $(RELEASEDIR32).win32 -RELEASEDIRMAC = $(RELEASEDIR32).osx -TEXTADEPTAPP = $(RELEASEDIRMAC)/Textadept.app -PACKAGE32 = ../releases/$(RELEASEDIR32).tgz -PACKAGE64 = ../releases/$(RELEASEDIR64).tgz -PACKAGEWIN32 = ../releases/$(RELEASEDIRWIN32).zip -PACKAGEMAC = ../releases/$(RELEASEDIRMAC).zip -SRCPACKAGE = ../releases/$(RELEASEDIR32).src.zip -MODULES = css hypertext java rails rhtml ruby php -MODULESDIR = $(RELEASEDIR32)/modules -MODULESPKG = ../releases/$(RELEASEDIR32).modules.zip +release: doc $(basedir).x86_64 $(basedir).i386 $(basedir).win32 $(basedir).osx \ + $(basedir).src $(basedir).modules cleanup -release: ../$(TEXTADEPT) ../$(TEXTADEPT32) ../$(TEXTADEPTWIN32) \ - ../$(TEXTADEPTMAC) ../$(TEXTADEPTLPNG12) doc - hg archive $(RELEASEDIR32) - rm $(RELEASEDIR32)/.hg* - cp -rL ../doc $(RELEASEDIR32) - hg clone http://foicica.com/hg/scintillua tmp - mv tmp/lexers $(RELEASEDIR32) - rm -r tmp - # Linux x64_64 - cp -r $(RELEASEDIR32) $(RELEASEDIR64) - cp ../$(TEXTADEPT64) $(RELEASEDIR64) - if [ -f ../$(TEXTADEPTJIT64) ]; then \ - cp ../$(TEXTADEPTJIT64) $(RELEASEDIR64); \ - fi - cp ../$(TEXTADEPT64LPNG12) $(RELEASEDIR64) - if [ -f ../$(TEXTADEPTJIT64LPNG12) ]; then \ - cp ../$(TEXTADEPTJIT64LPNG12) $(RELEASEDIR64); \ - fi - tar czf $(PACKAGE64) $(RELEASEDIR64) - rm -r $(RELEASEDIR64) - # Win32 - cp -r $(RELEASEDIR32) $(RELEASEDIRWIN32) - cp ../$(TEXTADEPTWIN32) $(RELEASEDIRWIN32) - if [ -f ../$(TEXTADEPTJITWIN32) ]; then \ - cp ../$(TEXTADEPTJITWIN32) lua51.dll $(RELEASEDIRWIN32); \ - fi - cp win32gtk/bin/*.dll $(RELEASEDIRWIN32) - cp -r win32gtk/{etc,lib,share} $(RELEASEDIRWIN32) - rm -r $(RELEASEDIRWIN32)/lib/{*.a,glib-2.0,gtk-2.0/include,pkgconfig} - zip -r $(PACKAGEWIN32) $(RELEASEDIRWIN32) - rm -r $(RELEASEDIRWIN32) - # Linux 32-bit - cp ../$(TEXTADEPT32) $(RELEASEDIR32)/$(TEXTADEPT) - if [ -f ../$(TEXTADEPTJIT32) ]; then \ - cp ../$(TEXTADEPTJIT32) $(RELEASEDIR32)/$(TEXTADEPTJIT); \ - fi - tar czf $(PACKAGE32) $(RELEASEDIR32) - # Mac OSX - mkdir $(RELEASEDIRMAC) - cp -rL gtkosx $(TEXTADEPTAPP) - mv $(TEXTADEPTAPP)/Contents/MacOS/ta $(RELEASEDIRMAC) - cp -r $(RELEASEDIR32)/* $(TEXTADEPTAPP)/Contents/Resources/ - rm -f $(TEXTADEPTAPP)/Contents/Resources/{$(TEXTADEPT),$(TEXTADEPTJIT)} - mv $(TEXTADEPTAPP)/Contents/Resources/core/images/textadept.icns \ - $(TEXTADEPTAPP)/Contents/Resources/ - cp ../$(TEXTADEPTMAC) $(TEXTADEPTAPP)/Contents/MacOS/ - if [ -f ../$(TEXTADEPTJITMAC) ]; then \ - cp ../$(TEXTADEPTJITMAC) $(TEXTADEPTAPP)/Contents/MacOS/; \ - fi - zip -r $(PACKAGEMAC) $(RELEASEDIRMAC) - rm -r $(RELEASEDIRMAC) - # Source - rm $(RELEASEDIR32)/{$(TEXTADEPT),$(TEXTADEPTJIT)} - cp -rL lua luajit scintilla gtdialog LexLPeg.cxx $(RELEASEDIR32)/src/ - cd $(RELEASEDIR32)/src/luajit && make clean && cd ../../../ - rm -r $(RELEASEDIR32)/src/scintilla/.hg - zip -r $(SRCPACKAGE) $(RELEASEDIR32) - rm -r $(RELEASEDIR32) - # Modules - mkdir -p $(MODULESDIR) - for module in $(MODULES); do \ +$(basedir): ../textadept ../textadeptjit ../textadept-ncurses \ + ../textadeptjit-ncurses ../textadept32 ../textadeptjit32 \ + ../textadept32-ncurses ../textadeptjit32-ncurses ../textadept.exe \ + ../textadeptjit.exe ../textadept.osx ../textadeptjit.osx lua51.dll + hg archive $@ + rm $@/.hg* + cp -rL ../doc $@ + hg clone /home/mitchell/code/scintillua tmp && mv tmp/lexers $@ && rm -r tmp +$(basedir).x86_64: ../textadept ../textadeptjit ../textadept-ncurses \ + ../textadeptjit-ncurses | $(basedir) + cp -r $| $@ && cp $^ $@ && tar czf ../releases/$@.tgz $@ && rm -r $@ +$(basedir).i386: ../textadept32 ../textadeptjit32 ../textadept32-ncurses \ + ../textadeptjit32-ncurses | $(basedir) + cp -r $| $@ && cp $^ $@ && tar czf ../releases/$@.tgz $@ && rm -r $@ +$(basedir).win32: ../textadept.exe ../textadeptjit.exe lua51.dll | $(basedir) + cp -r $| $@ && cp $^ $@ + cp win32gtk/bin/*.dll $@ && cp -r win32gtk/etc win32gtk/lib win32gtk/share $@ + rm -r $@/lib/*.a $@/lib/glib-2.0 $@/lib/gtk-2.0/include $@/lib/pkgconfig + zip -r ../releases/$@.zip $@ && rm -r $@ +$(basedir).osx: ../textadept.osx ../textadeptjit.osx | $(basedir) + mkdir $@ && cp -rL gtkosx $@/Textadept.app + cp $^ $@/Textadept.app/Contents/MacOS/ + cp -r $|/* $@/Textadept.app/Contents/Resources/ + mv $@/Textadept.app/Contents/Resources/core/images/textadept.icns \ + $@/Textadept.app/Contents/Resources/ + mv $@/Textadept.app/Contents/MacOS/ta $@ + zip -r ../releases/$@.zip $@ && rm -r $@ +$(basedir).src: | $(basedir) + cp -r $| $@ && cp -rL lua luajit scintilla gtdialog LexLPeg.cxx termkey $@/src + cd $@/src/luajit && make clean && cd ../../../ + rm -r $@/src/scintilla/.hg + zip -r ../releases/$@.zip $@ && rm -r $@ +$(basedir).modules: + mkdir -p $@/modules + for module in $(modules); do \ hg clone /home/mitchell/code/textadept/modules/$$module \ - $(MODULESDIR)/$$module; \ + $@/modules/$$module; \ done - zip -r $(MODULESPKG) $(MODULESDIR) - rm -r $(MODULESDIR) - # Done - rm -r $(RELEASEDIR32) + zip -r ../releases/$@.zip $@ && rm -r $@ +cleanup: ../releases/$(basedir).x86_64.tgz ../releases/$(basedir).i386.tgz \ + ../releases/$(basedir).win32.zip ../releases/$(basedir).osx.zip \ + ../releases/$(basedir).src.zip ../releases/$(basedir).modules.zip | \ + $(basedir) + rm -r $| diff --git a/src/textadept.c b/src/textadept.c index fdf80595..0b9d9845 100644 --- a/src/textadept.c +++ b/src/textadept.c @@ -6,16 +6,18 @@ #include #include #include -#if __WIN32__ +#if __linux__ +#include +#elif _WIN32 #include #define main main_ -#elif __OSX__ +#elif __APPLE__ && !NCURSES #include -#elif __BSD__ +//#elif __APPLE__ && NCURSES +//#include +#elif (__FreeBSD__ || __NetBSD__ || __OpenBSD__) #include #include -#else -#include #endif #if GTK #include @@ -67,7 +69,7 @@ static Scintilla *focused_view; #if GTK static GtkWidget *window, *menubar, *statusbar[2]; static GtkAccelGroup *accel; -#if __OSX__ +#if __APPLE__ && !NCURSES static GtkOSXApplication *osxapp; #endif #endif @@ -779,6 +781,7 @@ static int l_rawgetiint(lua_State *L, int index, int n) { return ret; } +#if GTK /** * Pushes a menu created from the table at the given valid index onto the stack. * Consult the LuaDoc for the table format. @@ -788,9 +791,8 @@ static int l_rawgetiint(lua_State *L, int index, int n) { * item. * @param submenu Flag indicating whether or not this menu is a submenu. */ -static void l_pushmenu(lua_State *L, int index, void (*callback)(void), +static void l_pushmenu(lua_State *L, int index, GCallback callback, int submenu) { -#if GTK GtkWidget *menu = gtk_menu_new(), *menu_item = 0, *submenu_root = 0; const char *label; lua_pushvalue(L, index); // copy to stack top so relative indices can be used @@ -822,7 +824,7 @@ static void l_pushmenu(lua_State *L, int index, void (*callback)(void), if (key || modifiers) gtk_widget_add_accelerator(menu_item, "activate", accel, key, modifiers, GTK_ACCEL_VISIBLE); - g_signal_connect(menu_item, "activate", G_CALLBACK(callback), + g_signal_connect(menu_item, "activate", callback, GINT_TO_POINTER(menu_id)); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); } @@ -832,12 +834,8 @@ static void l_pushmenu(lua_State *L, int index, void (*callback)(void), } lua_pop(L, 1); // table copy lua_pushlightuserdata(L, !submenu_root ? menu : submenu_root); -#elif NCURSES - lua_pushnil(L); // TODO: create and push menu (memory management?). -#endif } -#if GTK /** * Signal for a menu item click. */ @@ -850,7 +848,7 @@ static void m_clicked(GtkWidget*_, void *id) { static int lgui_menu(lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); #if GTK - l_pushmenu(L, -1, m_clicked, FALSE); + l_pushmenu(L, -1, G_CALLBACK(m_clicked), FALSE); #elif NCURSES // TODO: create menu and manage memory. #endif @@ -928,7 +926,7 @@ static int lgui__newindex(lua_State *L) { gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); gtk_box_reorder_child(GTK_BOX(vbox), menubar, 0); gtk_widget_show_all(menubar); -#if __OSX__ +#if __APPLE__ && !NCURSES gtk_osxapplication_set_menu_bar(osxapp, GTK_MENU_SHELL(menubar)); gtk_widget_hide(menubar); #endif @@ -1294,6 +1292,12 @@ static int lquit(lua_State *L) { return 0; } +#if _WIN32 +char *stpcpy(char *dest, const char *src) { + return strcpy(dest, src), dest + strlen(src); +} +#endif + /** * Loads and runs the given file. * @param L The Lua state. @@ -1475,9 +1479,9 @@ static int lL_init(lua_State *L, int argc, char **argv, int reinit) { lua_setglobal(L, "_BUFFERS"); lua_getfield(L, LUA_REGISTRYINDEX, "ta_views"), lua_setglobal(L, "_VIEWS"); lua_pushstring(L, textadept_home), lua_setglobal(L, "_HOME"); -#if __WIN32__ +#if _WIN32 lua_pushboolean(L, 1), lua_setglobal(L, "WIN32"); -#elif __OSX__ +#elif __APPLE__ lua_pushboolean(L, 1), lua_setglobal(L, "OSX"); #elif NCURSES lua_pushboolean(L, 1), lua_setglobal(L, "NCURSES"); @@ -1492,9 +1496,9 @@ static int lL_init(lua_State *L, int argc, char **argv, int reinit) { if (!locale || !*locale) locale = getenv("LANG"); if (locale && (charset = strchr(locale, '.'))) charset++; } - // Note: __WIN32__ uses GetACP() to determine codepage. - // If __WIN32__ is ever supported, use a codepage -> charset look-up table - // like glib's `libcharset/localecharset.c`. + // Note: _WIN32 uses GetACP() to determine codepage. + // If _WIN32 is ever supported, use a codepage -> charset look-up table like + // glib's `libcharset/localecharset.c`. #endif lua_pushstring(L, charset), lua_setglobal(L, "_CHARSET"); @@ -1653,7 +1657,7 @@ static int w_exit(GtkWidget*_, GdkEventAny*__, void*___) { return FALSE; } -#if __OSX__ +#if __APPLE__ && !NCURSES /** * Signal for opening files from OSX. * Generates an 'appleevent_odoc' event for each document sent. @@ -2099,7 +2103,7 @@ static void new_window() { signal(window, "key-press-event", w_keypress); accel = gtk_accel_group_new(); -#if __OSX__ +#if __APPLE__ && !NCURSES gtk_osxapplication_set_use_quartz_accelerators(osxapp, FALSE); osx_signal(osxapp, "NSApplicationOpenFile", w_open_osx); osx_signal(osxapp, "NSApplicationBlockTermination", w_exit_osx); @@ -2181,21 +2185,28 @@ int main(int argc, char **argv) { #endif char *last_slash = NULL; -#if !(__WIN32__ || __OSX__ || __BSD__) +#if __linux__ textadept_home = malloc(FILENAME_MAX); int _ = readlink("/proc/self/exe", textadept_home, FILENAME_MAX); if ((last_slash = strrchr(textadept_home, '/'))) *last_slash = '\0'; -#elif __WIN32__ +#elif _WIN32 textadept_home = malloc(FILENAME_MAX); GetModuleFileName(0, textadept_home, FILENAME_MAX); if ((last_slash = strrchr(textadept_home, '\\'))) *last_slash = '\0'; -#elif __OSX__ +#elif __APPLE__ && !NCURSES osxapp = g_object_new(GTK_TYPE_OSX_APPLICATION, NULL); char *path = quartz_application_get_resource_path(); textadept_home = g_filename_from_utf8((const char *)path, -1, NULL, NULL, NULL); g_free(path); -#elif __BSD__ +//#elif __APPLE__ && NCURSES +// char *path = malloc(FILENAME_MAX), *p = NULL +// uint32_t size = FILENAME_MAX; +// _NSGetExecutablePath(path, &size); +// textadept_home = realpath(path, NULL); +// p = strstr(textadept_home, "MacOS"), strcpy(p, "Resources\0"); +// free(path); +#elif (__FreeBSD__ || __NetBSD__ || __OpenBSD__) textadept_home = malloc(FILENAME_MAX); int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; size_t cb = FILENAME_MAX; @@ -2223,7 +2234,7 @@ int main(int argc, char **argv) { if (lua = luaL_newstate(), !lL_init(lua, argc, argv, FALSE)) return 1; new_window(); lL_dofile(lua, "init.lua"); -#if __OSX__ +#if __APPLE__ gtk_osxapplication_ready(osxapp); #endif @@ -2283,7 +2294,7 @@ int main(int argc, char **argv) { return 0; } -#if __WIN32__ +#if _WIN32 /** * Runs Textadept in Windows. * @see main -- cgit v1.2.3