aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mitchell <70453897+orbitalquark@users.noreply.github.com>2022-02-24 23:38:29 -0500
committerGravatar mitchell <70453897+orbitalquark@users.noreply.github.com>2022-02-24 23:38:29 -0500
commit0a541eda740c211df7a9e422e85e00cf4c06c95a (patch)
tree3970dc821b9745e9f8c6e4e20b02ad41d6a9be9e /src
parent9a4ac2df0e594f64c54e4732025cdc25fdd42afe (diff)
Fifth pass refactoring Makefile.
Regrouped and rearranged rules.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile329
1 files changed, 186 insertions, 143 deletions
diff --git a/src/Makefile b/src/Makefile
index 467bc674..881b16b4 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,22 +1,65 @@
# Copyright 2007-2022 Mitchell. See LICENSE.
-# Base compilers, flags, options, etc.
+# Base flags and options.
+
CFLAGS := -Os
CXXFLAGS := -Os -std=c++17
-lua_flags := -Ilua/src
WGET := wget -O $@
+# Define these once for speed and reference them later.
+ifndef GTK3
+ gtk_flags_linux := $(shell pkg-config --cflags gtk+-2.0 gmodule-2.0)
+else
+ gtk_flags_linux := $(shell pkg-config --cflags gtk+-3.0 gmodule-2.0) -Wno-deprecated-declarations
+endif
+glib_flags_linux := $(shell pkg-config --cflags glib-2.0)
+curses_flags_linux := $(shell pkg-config --silence-errors --cflags ncursesw || \
+ pkg-config --silence-errors --cflags ncurses || pkg-config --silence-errors --cflags curses)
+gtk_flags_win := $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \
+ pkg-config --define-variable=prefix=win32gtk --cflags gtk+-2.0)
+glib_flags_win := $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \
+ pkg-config --define-variable=prefix=win32gtk --cflags glib-2.0)
+gtk_flags_osx := $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \
+ pkg-config --define-variable=prefix=gtkosx --cflags gtk+-2.0)
+glib_flags_osx := $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \
+ pkg-config --define-variable=prefix=gtkosx --cflags glib-2.0)
+
# Utility functions.
+
objs = $(addsuffix .o, $(filter-out $(2), $(basename $(notdir $(wildcard $(1))))))
curses-objs = $(addsuffix -curses.o, $(basename $(notdir $(1))))
win-objs = $(addprefix win-, $(1))
osx-objs = $(addprefix osx-, $(1))
all-objs = $(1) $(call win-objs, $(1)) $(call osx-objs, $(1))
-# Scintilla.
+define build-cxx =
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+endef
+define build-cc =
+ $(CC) $(CFLAGS) -c $< -o $@
+endef
+define build-exe =
+ $(CXX) $(CXXFLAGS) -o ../$@ $^ $(LDFLAGS) $(LDLIBS)
+endef
-sci_flags := -pedantic -DSCI_LEXER -DNDEBUG -Iscintilla/include -Iscintilla/src -Ilexilla/include \
- -Ilexilla/lexlib -Wall
+# Textadept.
+
+textadept_gtk_objs := $(call objs, textadept.c)
+textadept_curses_objs := $(call curses-objs, textadept.c)
+textadept_objs := $(textadept_gtk_objs) $(textadept_curses_objs)
+textadept_rc_objs := textadept_rc.o
+
+ta_flags := -std=c99 -pedantic -Iscintilla/include -Igtdialog -Wall
+
+$(call all-objs, $(textadept_objs)): CFLAGS += $(lua_flags) $(ta_flags)
+$(call all-objs, $(textadept_gtk_objs)): CFLAGS += -DGTK $(gtk_flags)
+$(call all-objs, $(textadept_curses_objs)): CFLAGS += -DCURSES -Iscintilla/curses -Itermkey -Icdk \
+ $(curses_flags)
+
+$(call all-objs, $(textadept_objs)): textadept.c ; $(build-cc)
+$(textadept_rc_objs): textadept.rc ; $(WINDRES) $< $@
+
+# Scintilla.
sci_objs := $(call objs, scintilla/src/*.cxx)
sci_lexlib_objs := $(call objs, lexilla/lexlib/*.cxx)
@@ -27,33 +70,98 @@ sci_gtk_objs := $(call objs, scintilla/gtk/*.cxx)
sci_gtk_c_objs := $(call objs, scintilla/gtk/*.c)
sci_curses_objs := $(call objs, scintilla/curses/*.cxx)
-# Textadept.
+sci_flags := -pedantic -DSCI_LEXER -DNDEBUG -Iscintilla/include -Iscintilla/src -Ilexilla/include \
+ -Ilexilla/lexlib -Wall
-ta_flags := -std=c99 -pedantic -Iscintilla/include -Igtdialog -Wall
+$(call all-objs, $(sci_objs)): CXXFLAGS += $(sci_flags)
+$(call all-objs, $(sci_lexlib_objs)): CXXFLAGS += $(sci_flags)
+$(call all-objs, $(sci_lexer_objs)): CXXFLAGS += $(sci_flags) $(lua_flags) -DNO_SCITE -DNO_DLL
+$(call all-objs, $(sci_lexer_gtk_objs)): CXXFLAGS += -DGTK
+$(call all-objs, $(sci_lexer_curses_objs)): CXXFLAGS += -DCURSES $(curses_flags)
+$(call all-objs, $(sci_gtk_objs)): CXXFLAGS += $(sci_flags) -DGTK $(gtk_flags)
+$(call all-objs, $(sci_gtk_c_objs)): CFLAGS += $(gtk_flags)
+$(call all-objs, $(sci_curses_objs)): CXXFLAGS += $(sci_flags) -DCURSES $(curses_flags)
+
+$(sci_objs): %.o: scintilla/src/%.cxx ; $(build-cxx)
+$(call win-objs, $(sci_objs)): win-%.o: scintilla/src/%.cxx ; $(build-cxx)
+$(call osx-objs, $(sci_objs)): osx-%.o: scintilla/src/%.cxx ; $(build-cxx)
+$(sci_lexlib_objs): %.o: lexilla/lexlib/%.cxx ; $(build-cxx)
+$(call win-objs, $(sci_lexlib_objs)): win-%.o: lexilla/lexlib/%.cxx ; $(build-cxx)
+$(call osx-objs, $(sci_lexlib_objs)): osx-%.o: lexilla/lexlib/%.cxx ; $(build-cxx)
+$(call all-objs, $(sci_lexer_objs)): LexLPeg.cxx ; $(build-cxx)
+$(sci_gtk_objs): %.o: scintilla/gtk/%.cxx ; $(build-cxx)
+$(call win-objs, $(sci_gtk_objs)): win-%.o: scintilla/gtk/%.cxx ; $(build-cxx)
+$(call osx-objs, $(sci_gtk_objs)): osx-%.o: scintilla/gtk/%.cxx ; $(build-cxx)
+$(sci_gtk_c_objs): %.o: scintilla/gtk/%.c ; $(build-cc)
+$(call win-objs, $(sci_gtk_c_objs)): win-%.o: scintilla/gtk/%.c ; $(build-cc)
+$(call osx-objs, $(sci_gtk_c_objs)): osx-%.o: scintilla/gtk/%.c ; $(build-cc)
+$(sci_curses_objs): %.o: scintilla/curses/%.cxx ; $(build-cxx)
+$(call win-objs, $(sci_curses_objs)): win-%.o: scintilla/curses/%.cxx ; $(build-cxx)
+$(call osx-objs, $(sci_curses_objs)): osx-%.o: scintilla/curses/%.cxx ; $(build-cxx)
+
+# Lua.
-textadept_gtk_objs := $(call objs, textadept.c)
-textadept_curses_objs := $(call curses-objs, textadept.c)
-textadept_objs := $(textadept_gtk_objs) $(textadept_curses_objs)
-textadept_rc_objs := textadept_rc.o
lua_objs := $(call objs, lua/src/*.c, lua luac loslib)
lua_oslib_gtk_objs := $(call objs, lua/src/loslib.c)
lua_oslib_curses_objs := $(call curses-objs, loslib.c)
lua_oslib_objs := $(lua_oslib_gtk_objs) $(lua_oslib_curses_objs)
lua_lib_objs := $(call objs, lua/src/lib/*.c)
+
+lua_flags := -Ilua/src
+
+$(call all-objs, $(lua_objs)): CFLAGS += $(lua_flags) -ULUA_LIB
+$(call all-objs, $(lua_oslib_objs)): CFLAGS += -std=c99 -pedantic $(lua_flags) -ULUA_LIB
+$(call all-objs, $(lua_oslib_gtk_objs)): CFLAGS += -DGTK $(glib_flags)
+$(call all-objs, $(lua_lib_objs)): CFLAGS += $(lua_flags)
+
+$(lua_objs): %.o: lua/src/%.c ; $(build-cc)
+$(call win-objs, $(lua_objs)): win-%.o: lua/src/%.c ; $(build-cc)
+$(call osx-objs, $(lua_objs)): osx-%.o: lua/src/%.c ; $(build-cc)
+$(call all-objs, $(lua_oslib_objs)): lua/src/loslib.c ; $(build-cc)
+$(lua_lib_objs): %.o: lua/src/lib/%.c ; $(build-cc)
+$(call win-objs, $(lua_lib_objs)): win-%.o: lua/src/lib/%.c ; $(build-cc)
+$(call osx-objs, $(lua_lib_objs)): osx-%.o: lua/src/lib/%.c ; $(build-cc)
+
+# gtDialog.
+
gtdialog_gtk_objs := $(call objs, gtdialog/gtdialog.c)
gtdialog_curses_objs := $(call curses-objs, gtdialog/gtdialog.c)
gtdialog_objs := $(gtdialog_gtk_objs) $(gtdialog_curses_objs)
+
+$(call all-objs, $(gtdialog_objs)): CFLAGS += -std=c99 -pedantic -DNOHELP -DLIBRARY
+$(call all-objs, $(gtdialog_gtk_objs)): CFLAGS += -DGTK $(gtk_flags)
+$(call all-objs, $(gtdialog_curses_objs)): CFLAGS += -DCURSES -I. -Icdk $(curses_flags)
+
+$(call all-objs, $(gtdialog_objs)): gtdialog/gtdialog.c ; $(build-cc)
+
+# Termkey.
+
termkey_objs := $(call objs, termkey/termkey.c)
termkey_unix_objs := $(call objs, termkey/driver-ti.c termkey/driver-csi.c)
termkey_win_objs := $(call objs, termkey/driver-win32-pdcurses.c)
termkey_all_objs := $(termkey_objs) $(termkey_unix_objs) $(termkey_win_objs)
+
+$(call all-objs, $(termkey_all_objs)): CFLAGS += -std=c99 $(curses_flags)
+
+$(termkey_all_objs): %.o: termkey/%.c ; $(build-cc)
+$(call win-objs, $(termkey_all_objs)): win-%.o: termkey/%.c ; $(build-cc)
+$(call osx-objs, $(termkey_all_objs)): osx-%.o: termkey/%.c ; $(build-cc)
+
+# CDK.
# Only compile a subset of cdk and use a prefix to avoid object name conflicts on case-insensitive
# filesystems.
+
cdk_src := $(addprefix cdk/, $(addsuffix .c, binding buttonbox cdk cdk_display cdk_objs \
cdkscreen draw entry fselect itemlist label mentry popup_label scroll scroller select_file \
selection slider traverse version))
cdk_objs := $(addprefix cdk-, $(call objs, $(cdk_src)))
+$(call all-objs, $(cdk_objs)): CFLAGS += -D_GNU_SOURCE -Itermkey -Icdk $(curses_flags)
+
+$(cdk_objs): cdk-%.o: cdk/%.c ; $(build-cc)
+$(call win-objs, $(cdk_objs)): win-cdk-%.o: cdk/%.c ; $(build-cc)
+$(call osx-objs, $(cdk_objs)): osx-cdk-%.o: cdk/%.c ; $(build-cc)
+
# Add debugging symbols and disable optimizations when DEBUG=1.
# Notes:
# In order to profile with gprof (-pg), do not retain symbols in LDFLAGS.
@@ -69,39 +177,20 @@ ifdef DEBUG
sci_flags += -UNDEBUG -DDEBUG
endif
-# Target-specific compiler and linker flags.
-
-$(call all-objs, $(sci_objs)): CXXFLAGS += $(sci_flags)
-$(call all-objs, $(sci_lexlib_objs)): CXXFLAGS += $(sci_flags)
-$(call all-objs, $(sci_lexer_objs)): CXXFLAGS += $(sci_flags) $(lua_flags) -DNO_SCITE -DNO_DLL
-$(call all-objs, $(sci_lexer_gtk_objs)): CXXFLAGS += -DGTK
-$(call all-objs, $(sci_lexer_curses_objs)): CXXFLAGS += -DCURSES $(curses_flags)
-$(call all-objs, $(sci_gtk_objs)): CXXFLAGS += $(sci_flags) -DGTK $(gtk_flags)
-$(call all-objs, $(sci_gtk_c_objs)): CFLAGS += $(gtk_flags)
-$(call all-objs, $(sci_curses_objs)): CXXFLAGS += $(sci_flags) -DCURSES $(curses_flags)
-$(call all-objs, $(textadept_objs)): CFLAGS += $(lua_flags) $(ta_flags)
-$(call all-objs, $(textadept_gtk_objs)): CFLAGS += -DGTK $(gtk_flags)
-$(call all-objs, $(textadept_curses_objs)): CFLAGS += -DCURSES -Iscintilla/curses -Itermkey -Icdk $(curses_flags)
-$(call all-objs, $(lua_objs)): CFLAGS += $(lua_flags) -ULUA_LIB
-$(call all-objs, $(lua_oslib_objs)): CFLAGS += -std=c99 -pedantic $(lua_flags) -ULUA_LIB
-$(call all-objs, $(lua_oslib_gtk_objs)): CFLAGS += -DGTK $(glib_flags)
-$(call all-objs, $(lua_lib_objs)): CFLAGS += $(lua_flags)
-$(call all-objs, $(gtdialog_objs)): CFLAGS += -std=c99 -pedantic -DNOHELP -DLIBRARY
-$(call all-objs, $(gtdialog_gtk_objs)): CFLAGS += -DGTK $(gtk_flags)
-$(call all-objs, $(gtdialog_curses_objs)): CFLAGS += -DCURSES -I. -Icdk $(curses_flags)
-$(call all-objs, $(cdk_objs)): CFLAGS += -D_GNU_SOURCE -Itermkey -Icdk $(curses_flags)
-$(call all-objs, $(termkey_all_objs)): CFLAGS += -std=c99 $(curses_flags)
+# Compilers and platform-specific flags.
common_objs := $(sci_objs) $(sci_lexlib_objs) $(lua_objs) $(lua_lib_objs)
gui_objs := $(sci_lexer_gtk_objs) $(sci_gtk_objs) $(sci_gtk_c_objs) $(textadept_gtk_objs) \
$(lua_oslib_gtk_objs) $(gtdialog_gtk_objs)
curses_objs := $(sci_lexer_curses_objs) $(sci_curses_objs) $(textadept_curses_objs) \
$(lua_oslib_curses_objs) $(gtdialog_curses_objs) $(termkey_objs) $(cdk_objs)
+
linux_objs := $(common_objs) $(gui_objs) $(curses_objs) $(termkey_unix_objs)
-win_objs := $(call win-objs, $(common_objs) $(gui_objs) $(curses_objs)) $(termkey_win_objs) $(textadept_rc_objs)
+win_objs := $(call win-objs, $(common_objs) $(gui_objs) $(curses_objs)) $(termkey_win_objs) \
+ $(textadept_rc_objs)
osx_objs := $(call osx-objs, $(common_objs) $(gui_objs) $(curses_objs) $(termkey_unix_objs))
-# Compile natively for Linux.
+# Compile natively for Linux or BSD.
ifeq (Linux, $(shell uname -s))
$(linux_objs): CC := gcc
$(linux_objs): CXX := g++
@@ -110,58 +199,22 @@ $(linux_objs): CC := cc
$(linux_objs): CXX := c++
endif
$(linux_objs): lua_flags += -DLUA_USE_LINUX
-# Define flags once for speed.
-ifndef GTK3
- gtk_flags_linux := $(shell pkg-config --cflags gtk+-2.0 gmodule-2.0)
-else
- gtk_flags_linux := $(shell pkg-config --cflags gtk+-3.0 gmodule-2.0) -Wno-deprecated-declarations
-endif
-glib_flags_linux := $(shell pkg-config --cflags glib-2.0)
-curses_flags_linux := $(shell pkg-config --silence-errors --cflags ncursesw || \
- pkg-config --silence-errors --cflags ncurses || pkg-config --silence-errors --cflags curses)
$(linux_objs): gtk_flags := $(gtk_flags_linux)
$(linux_objs): glib_flags := $(glib_flags_linux)
$(linux_objs): curses_flags := $(curses_flags_linux)
-textadept textadept-curses: LDFLAGS := -rdynamic -Wl,--retain-symbols-file -Wl,$(shell pwd)/lua.sym
-ifeq (Linux, $(shell uname -s))
-textadept textadept-curses: LDLIBS := -ldl
-else
-textadept textadept-curses: LDLIBS := -liconv
-endif
-ifndef GTK3
-textadept: LDFLAGS += $(shell pkg-config --libs gtk+-2.0 gmodule-2.0)
-else
-textadept: LDFLAGS += $(shell pkg-config --libs gtk+-3.0 gmodule-2.0)
-endif
-textadept-curses: LDFLAGS += $(shell pkg-config --silence-errors --libs ncursesw || \
- pkg-config --silence-errors --libs ncurses || pkg-config --silence-errors --libs curses || \
- echo -lncursesw) -lpthread
-
# Cross-compile for Win32.
$(win_objs): CROSS := i686-w64-mingw32-
$(win_objs): CC := $(CROSS)gcc
$(win_objs): CXX := $(CROSS)g++
$(win_objs): CFLAGS += -mms-bitfields
$(win_objs): CXXFLAGS += -mms-bitfields
-$(win_objs): lua_flags += -DLUA_BUILD_AS_DLL -DLUA_LIB
$(win_objs): WINDRES := $(CROSS)windres
-# Define flags once for speed.
-gtk_flags_win := $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \
- pkg-config --define-variable=prefix=win32gtk --cflags gtk+-2.0)
-glib_flags_win := $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \
- pkg-config --define-variable=prefix=win32gtk --cflags glib-2.0)
+$(win_objs): lua_flags += -DLUA_BUILD_AS_DLL -DLUA_LIB
$(win_objs): gtk_flags := $(gtk_flags_win)
$(win_objs): glib_flags := $(glib_flags_win)
$(win_objs): curses_flags := -DLIBICONV_STATIC -Iwin32curses/include
-textadept.exe: CXXFLAGS += -mwindows
-textadept.exe: LDFLAGS += $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \
- pkg-config --define-variable=prefix=win32gtk --libs gtk+-2.0 gmodule-2.0)
-textadept.exe: LDLIBS := -liconv
-textadept-curses.exe: LDLIBS := win32curses/lib/pdcurses.a win32curses/lib/libiconv.a
-textadept.exe textadept-curses.exe: LDFLAGS := -static-libgcc -static-libstdc++ -Wl,--retain-symbols-file -Wl,$(shell pwd)/lua.sym
-
# Cross-compile for macOS.
$(osx_objs): CROSS := x86_64-apple-darwin17-
$(osx_objs): CC := $(CROSS)cc
@@ -169,85 +222,75 @@ $(osx_objs): CXX := $(CROSS)c++
$(osx_objs): CFLAGS += -mdynamic-no-pic
$(osx_objs): CXXFLAGS += -mdynamic-no-pic -stdlib=libc++ -Wno-register
$(osx_objs): lua_flags += -DLUA_USE_MACOSX
-# Define flags once for speed.
-gtk_flags_osx := $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \
- pkg-config --define-variable=prefix=gtkosx --cflags gtk+-2.0)
-glib_flags_osx := $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \
- pkg-config --define-variable=prefix=gtkosx --cflags glib-2.0)
$(osx_objs): gtk_flags := $(gtk_flags_osx)
$(osx_objs): glib_flags := $(glib_flags_osx)
-textadept-osx: LDFLAGS += $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \
- pkg-config --define-variable=prefix=gtkosx --libs gtk+-2.0 gmodule-2.0 gtk-mac-integration) \
- -framework Cocoa
-textadept-osx textadept-osx-curses: LDLIBS := -liconv
-textadept-osx-curses: LDLIBS += -lncurses
-
-# Build.
-
-define build-cxx =
- $(CXX) $(CXXFLAGS) -c $< -o $@
-endef
-define build-cc =
- $(CC) $(CFLAGS) -c $< -o $@
-endef
-define build-exe =
- $(CXX) $(CXXFLAGS) -o ../$@ $^ $(LDFLAGS) $(LDLIBS)
-endef
-
-$(sci_objs): %.o: scintilla/src/%.cxx ; $(build-cxx)
-$(call win-objs, $(sci_objs)): win-%.o: scintilla/src/%.cxx ; $(build-cxx)
-$(call osx-objs, $(sci_objs)): osx-%.o: scintilla/src/%.cxx ; $(build-cxx)
-$(sci_lexlib_objs): %.o: lexilla/lexlib/%.cxx ; $(build-cxx)
-$(call win-objs, $(sci_lexlib_objs)): win-%.o: lexilla/lexlib/%.cxx ; $(build-cxx)
-$(call osx-objs, $(sci_lexlib_objs)): osx-%.o: lexilla/lexlib/%.cxx ; $(build-cxx)
-$(call all-objs, $(sci_lexer_objs)): LexLPeg.cxx ; $(build-cxx)
-$(sci_gtk_objs): %.o: scintilla/gtk/%.cxx ; $(build-cxx)
-$(call win-objs, $(sci_gtk_objs)): win-%.o: scintilla/gtk/%.cxx ; $(build-cxx)
-$(call osx-objs, $(sci_gtk_objs)): osx-%.o: scintilla/gtk/%.cxx ; $(build-cxx)
-$(sci_gtk_c_objs): %.o: scintilla/gtk/%.c ; $(build-cc)
-$(call win-objs, $(sci_gtk_c_objs)): win-%.o: scintilla/gtk/%.c ; $(build-cc)
-$(call osx-objs, $(sci_gtk_c_objs)): osx-%.o: scintilla/gtk/%.c ; $(build-cc)
-$(sci_curses_objs): %.o: scintilla/curses/%.cxx ; $(build-cxx)
-$(call win-objs, $(sci_curses_objs)): win-%.o: scintilla/curses/%.cxx ; $(build-cxx)
-$(call osx-objs, $(sci_curses_objs)): osx-%.o: scintilla/curses/%.cxx ; $(build-cxx)
-$(call all-objs, $(textadept_objs)): textadept.c ; $(build-cc)
-$(lua_objs): %.o: lua/src/%.c ; $(build-cc)
-$(call win-objs, $(lua_objs)): win-%.o: lua/src/%.c ; $(build-cc)
-$(call osx-objs, $(lua_objs)): osx-%.o: lua/src/%.c ; $(build-cc)
-$(call all-objs, $(lua_oslib_objs)): lua/src/loslib.c ; $(build-cc)
-$(lua_lib_objs): %.o: lua/src/lib/%.c ; $(build-cc)
-$(call win-objs, $(lua_lib_objs)): win-%.o: lua/src/lib/%.c ; $(build-cc)
-$(call osx-objs, $(lua_lib_objs)): osx-%.o: lua/src/lib/%.c ; $(build-cc)
-$(call all-objs, $(gtdialog_objs)): gtdialog/gtdialog.c ; $(build-cc)
-$(cdk_objs): cdk-%.o: cdk/%.c ; $(build-cc)
-$(call win-objs, $(cdk_objs)): win-cdk-%.o: cdk/%.c ; $(build-cc)
-$(call osx-objs, $(cdk_objs)): osx-cdk-%.o: cdk/%.c ; $(build-cc)
-$(termkey_all_objs): %.o: termkey/%.c ; $(build-cc)
-$(call win-objs, $(termkey_all_objs)): win-%.o: termkey/%.c ; $(build-cc)
-$(call osx-objs, $(termkey_all_objs)): osx-%.o: termkey/%.c ; $(build-cc)
-$(textadept_rc_objs): textadept.rc ; $(WINDRES) $< $@
+# Executables.
-exes := textadept textadept-curses textadept.exe textadept-curses.exe textadept-osx \
- textadept-osx-curses
+linux_exes := textadept textadept-curses
+win_exes := textadept.exe textadept-curses.exe
+osx_exes := textadept-osx textadept-osx-curses
-.PHONY: all curses win32 osx $(exes)
-all: textadept textadept-curses
+.PHONY: all curses win32 osx $(linux_exes) $(win_exes) $(osx_exes)
+.DEFAULT_GOAL := all
+all: $(linux_exes)
curses: textadept-curses
-win32: textadept.exe textadept-curses.exe
-osx: textadept-osx textadept-osx-curses
+win32: $(win_exes)
+osx: $(osx_exes)
+
+# Linux.
-$(exes): ; $(build-exe)
-textadept textadept-curses: $(common_objs)
+$(linux_exes): $(common_objs)
textadept: $(gui_objs)
textadept-curses: $(curses_objs) $(termkey_unix_objs)
-textadept.exe textadept-curses.exe: $(call win-objs, $(common_objs)) $(textadept_rc_objs)
+
+$(linux_exes): LDFLAGS := -rdynamic -Wl,--retain-symbols-file -Wl,$(shell pwd)/lua.sym
+ifndef GTK3
+textadept: LDFLAGS += $(shell pkg-config --libs gtk+-2.0 gmodule-2.0)
+else
+textadept: LDFLAGS += $(shell pkg-config --libs gtk+-3.0 gmodule-2.0)
+endif
+textadept-curses: LDFLAGS += $(shell pkg-config --silence-errors --libs ncursesw || \
+ pkg-config --silence-errors --libs ncurses || pkg-config --silence-errors --libs curses || \
+ echo -lncursesw) -lpthread
+ifeq (Linux, $(shell uname -s))
+$(linux_exes): LDLIBS := -ldl
+else
+$(linux_exes): LDLIBS := -liconv
+endif
+
+$(linux_exes): ; $(build-exe)
+
+# Windows.
+
+$(win_exes): $(call win-objs, $(common_objs)) $(textadept_rc_objs)
textadept.exe: $(call win-objs, $(gui_objs))
textadept-curses.exe: $(call win-objs, $(curses_objs)) $(termkey_win_objs)
-textadept-osx textadept-osx-curses: $(call osx-objs, $(common_objs))
+
+textadept.exe: CXXFLAGS += -mwindows
+$(win_exes): LDFLAGS := -static-libgcc -static-libstdc++ \
+ -Wl,--retain-symbols-file -Wl,$(shell pwd)/lua.sym
+textadept.exe: LDFLAGS += $(shell PKG_CONFIG_PATH=`pwd`/win32gtk/lib/pkgconfig \
+ pkg-config --define-variable=prefix=win32gtk --libs gtk+-2.0 gmodule-2.0)
+textadept.exe: LDLIBS := -liconv
+textadept-curses.exe: LDLIBS := win32curses/lib/pdcurses.a win32curses/lib/libiconv.a
+
+$(win_exes): ; $(build-exe)
+
+# macOS.
+
+$(osx_exes): $(call osx-objs, $(common_objs))
textadept-osx: $(call osx-objs, $(gui_objs))
textadept-osx-curses: $(call osx-objs, $(curses_objs) $(termkey_unix_objs))
+textadept-osx: LDFLAGS += $(shell PKG_CONFIG_PATH=`pwd`/gtkosx/lib/pkgconfig \
+ pkg-config --define-variable=prefix=gtkosx --libs gtk+-2.0 gmodule-2.0 gtk-mac-integration) \
+ -framework Cocoa
+$(osx_exes): LDLIBS := -liconv
+textadept-osx-curses: LDLIBS += -lncurses
+
+$(osx_exes): ; $(build-exe)
+
# Install/uninstall.
PREFIX ?= /usr/local
@@ -284,8 +327,11 @@ uninstall:
# Clean.
-.PHONY: clean
-clean: ; rm -f *.o ../textadept*
+.PHONY: clean clean-win clean-osx clean-all
+clean: ; rm -f $(linux_objs) $(addprefix ../, $(linux_exes))
+clean-win: ; rm -f $(win_objs) $(addprefix ../, $(win_exes))
+clean-osx: ; rm -f $(osx_objs) $(addprefix ../, $(osx_exes))
+clean-all: clean clean-win clean-osx
# Documentation.
@@ -382,7 +428,7 @@ osx-app:
# External dependencies.
-.PHONY: deps win32-deps osx-deps
+.PHONY: deps win32-deps osx-deps scinterm scintillua lualibs
base_deps := scintilla lexilla scinterm scintillua lua lualibs gtdialog cdk
deps: $(base_deps) termkey
win32-deps: $(base_deps) win32gtk win32curses
@@ -429,13 +475,11 @@ scintilla: scintilla.patch | $(scintilla_tgz)
$(lexilla_tgz): ; $(WGET) https://www.scintilla.org/$@
lexilla: | $(lexilla_tgz) ; tar xzf $|
$(scinterm_zip): ; $(WGET) $(scinterm_url) -O $@
-.PHONY: scinterm
scinterm: scintilla/curses
scintilla/curses: | $(scinterm_zip)
unzip -d $@ $| && mv $@/*/* $@
$(MAKE) -C $@ patch
$(scintillua_zip): ; $(WGET) $(scintillua_url) -O $@
-.PHONY: scintillua
scintillua: ../lexers $(LexLPeg)
../lexers: | $(scintillua_zip) ; unzip -d $@ -j $| "*/lexers/*" -x "*/themes/*"
$(LexLPeg): | $(scintillua_zip) ; unzip -j $| "*/*.cxx" "*/*.h"
@@ -446,7 +490,6 @@ lua: lua.patch | $(lua_tgz)
if [ -d $@ ]; then rm -rf $@; fi
mkdir $@ && tar xzf $| -C $@ && mv $@/*/* $@
patch -d $@ -N -p1 < $<
-.PHONY: lualibs
lualibs: lua/src/lib/lpeg lua/src/lib/lfs
lua/src/lib/lpeg: | $(lpeg_tgz) ; mkdir -p $@ && tar xzf $| -C $@ && mv $@/*/*.c $@/*/*.h $(dir $@)
lua/src/lib/lfs: | $(lfs_zip)