]> git.neil.brown.name Git - edlib.git/blobdiff - Makefile
TODO: clean out done items.
[edlib.git] / Makefile
index 106739c95434c85b8e35d639808acd36e9342542..8bbd7174958cfe7c53c078aef79b6fe81c72ab27 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 #
-# Copyright Neil Brown ©2015-2020 <neil@brown.name>
+# Copyright Neil Brown ©2015-2023 <neil@brown.name>
 # May be distrubuted under terms of GPLv2 - see file:COPYING
 #
 
@@ -65,41 +65,67 @@ CFLAGS= -g -Wall -Wstrict-prototypes -Wextra -Wno-unused-parameter $(DBG) $(VCFL
 #CFLAGS= -pg -fno-pie -fno-PIC -g -Wall -Wstrict-prototypes -Wextra -Wno-unused-parameter $(DBG) $(VCFLAGS)
 #Doesn't work :-( -fsanitize=address
 
-all: edlib checksym lib shared
+all: edlib checksym lib shared NamesList.txt bin
+test: edlib lib shared test-rexel
+       ./tests run
 
 OBJ = O/edlib.o
 LIBOBJ = O/core-mark.o O/core-doc.o O/core-editor.o O/core-attr.o \
        O/core-keymap.o O/core-pane.o O/core-misc.o O/core-log.o \
-       O/core-version.o
+       O/core-version.o O/core-window.o
 SHOBJ = O/doc-text.o O/doc-dir.o O/doc-docs.o \
-       O/doc-email.o O/doc-multipart.o \
+       O/doc-email.o O/doc-multipart.o O/doc-list.o \
        O/render-hex.o O/render-lines.o \
        O/render-format.o O/render-complete.o \
-       O/lib-view.o O/lib-tile.o O/lib-popup.o O/lib-linecount.o O/lib-keymap.o \
+       O/render-imageview.o \
+       O/lib-view.o O/lib-tile.o O/lib-popup.o O/lib-linecount.o \
        O/lib-search.o O/lib-messageline.o O/lib-input.o O/lib-libevent.o \
        O/lib-history.o O/lib-crop.o O/lib-markup.o O/lib-rfc822header.o \
        O/lib-viewer.o O/lib-base64.o O/lib-qprint.o O/lib-utf8.o \
+       O/lib-charset.o O/lib-config.o \
        O/lib-copybuf.o O/lib-whitespace.o O/lib-colourmap.o \
-       O/lib-renderline.o O/lib-x11selection.o O/lib-autosave.o \
-       O/lib-linefilter.o \
+       O/lib-renderline.o O/lib-x11selection-gtk.o O/lib-autosave.o \
+       O/lib-x11selection-xcb.o O/display-x11-xcb.o \
+       O/lib-linefilter.o O/lib-wiggle.o O/lib-aspell.o O/lib-calc.o \
+       O/lib-menu.o O/lib-unicode-names.o O/lib-askpass.o \
+       O/lib-test-markup.o O/lib-menubar.o O/lib-rangetrack.o \
        O/lang-python.o \
-       O/mode-emacs.o \
+       O/mode-basic.o O/mode-emacs.o O/emacs-search.o \
        O/display-ncurses.o
-XOBJ = O/rexel.o O/emacs-search.o
+XOBJ = O/rexel.o
+WOBJ = O/libwiggle.a
+
+BIN = edlib elma elc el-askpass
+
+bin/edlib : edlib
+bin/elma : edlib
+bin/elc : python/lib-server.py
+bin/el-askpass : python/lib-server.py
 
 # From python 3.8 on we need python3-embed to get the right libraries
 pypkg=$(shell pkg-config --atleast-version=3.8 python3 && echo python3-embed || echo python3)
 LIBS-lang-python = $(shell pkg-config --libs $(pypkg))
 INC-lang-python = $(shell pkg-config --cflags $(pypkg))
 
-LIBS-display-ncurses = $(shell pkg-config --libs panelw ncursesw)
-INC-display-ncurses = $(shell pkg-config --cflags panelw ncursesw)
+LIBS-display-ncurses = $(shell pkg-config --libs panelw ncursesw MagickWand)
+INC-display-ncurses = $(shell pkg-config --cflags panelw ncursesw MagickWand)  -Wno-strict-prototypes
 O/display-ncurses.o : md5.h
 
+LIBS-lib-aspell = -laspell
+
 LIBS-lib-libevent = $(shell pkg-config --libs libevent)
 
-LIBS-lib-x11selection = $(shell pkg-config --libs gtk+-3.0)
-INC-lib-x11selection = $(shell pkg-config --cflags gtk+-3.0)
+LIBS-lib-x11selection-gtk = $(shell pkg-config --libs gtk+-3.0)
+INC-lib-x11selection-gtk = $(shell pkg-config --cflags gtk+-3.0)
+
+LIBS-lib-x11selection-xcb = $(shell pkg-config --libs xcb)
+
+LIBS-display-x11-xcb = $(shell pkg-config --libs xcb pango cairo pangocairo MagickWand xkbcommon xkbcommon-x11)
+# magickwand include file contains a non-strict-prototype!
+INC-display-x11-xcb = $(shell pkg-config --cflags xcb pango cairo pangocairo MagickWand xkbcommon xkbcommon-x11) -Wno-strict-prototypes
+
+LIBS-lib-calc = -licuuc -lgmp
+O/libcalc.a : calc-dir
 
 O/core-editor-static.o : O/mod-list-decl.h O/mod-list.h
 
@@ -119,7 +145,7 @@ QUIET_LIB     = $(Q:@=@echo    '     LIB      '$@;)
 QUIET_SCRIPT  = $(Q:@=@echo    '     SCRIPT   '$@;)
 
 SO = $(patsubst O/%.o,lib/edlib-%.so,$(SHOBJ))
-H = list.h core.h misc.h safe.h vfunc.h
+H = list.h core.h core-pane.h misc.h safe.h vfunc.h
 edlib: $(OBJ) lib/libedlib.so
        $(QUIET_LINK)$(CC) $(CPPFLAGS) $(CFLAGS) -rdynamic -Wl,--disable-new-dtags -o $@ $(OBJ) -Llib -Wl,-rpath=`pwd`/lib -ledlib $(LDLIBS)
 
@@ -129,18 +155,38 @@ edlib-static: $(OBJ) $(STATICOBJ)  $(XOBJ) O/core-version.o
 $(OBJ) $(SHOBJ) $(LIBOBJ) $(XOBJ) $(STATICOBJ) : $(H) O/.exists
 $(LIBOBJ) : internal.h
 
+O/lib-config.o : parse-ini.h
+
 $(OBJ) : O/%.o : %.c
-       $(QUIET_CC)$(CC) $(CPPFLAGS) $(INC-$*) $(CFLAGS) -c -o $@ $<
+       $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) $(INC-$*) -c -o $@ $<
        $(QUIET_CHECK)sparse $(CPPFLAGS) $(INC-$*) $(SPARSEFLAGS) $<
        $(QUIET_SMATCH) $(CPPFLAGS) $(INC-$*) $<
 
 $(SHOBJ) $(LIBOBJ) $(XOBJ) : O/%.o : %.c
-       $(QUIET_CC)$(CC) -fPIC $(CPPFLAGS) $(INC-$*) $(CFLAGS) -c -o $@ $<
+       $(QUIET_CC)$(CC) -fPIC $(CPPFLAGS) $(CFLAGS) $(INC-$*) -c -o $@ $<
        $(QUIET_CHECK)sparse $(CPPFLAGS) $(INC-$*) $(SPARSEFLAGS) $<
        $(QUIET_SMATCH) $(CPPFLAGS) $(INC-$*) $<
 
+
+O/libwiggle.a wiggle/wiggle.h : wiggle-dir
+
+.PHONY: wiggle-dir calc-dir
+wiggle-dir:
+       @[ -f wiggle/wiggle.h ] || { git submodule init && git submodule update; }
+       @$(MAKE) -q -C wiggle O=`pwd`/O OptDbg="-O3 -fPIC" lib || \
+               { echo '     MAKE     wiggle'; \
+               $(MAKE) -C wiggle O=`pwd`/O OptDbg="-O3 -fPIC" lib ; }
+
+calc-dir:
+       @mkdir -p O
+       @$(MAKE) -q -C calc O=`pwd`/O || \
+               { echo '     MAKE     calc'; \
+               $(MAKE) -C calc O=`pwd`/O  ; }
+
+
+
 $(STATICOBJ) : O/%-static.o : %.c
-       $(QUIET_CCSTATIC)$(CC) -Dedlib_init=$(subst -,_,$*)_edlib_init $(CPPFLAGS) $(INC-$*) $(CFLAGS) -c -o $@ $<
+       $(QUIET_CCSTATIC)$(CC) -Dedlib_init=$(subst -,_,$*)_edlib_init $(CPPFLAGS) $(CFLAGS) $(INC-$*) -c -o $@ $<
 
 .PHONY: TAGS
 TAGS :
@@ -160,21 +206,31 @@ O/.exists:
 lib/.exists:
        @mkdir -p lib
        @ln -s ../python lib/python
+       @ln -s ../data lib/edlib
        @touch $@
 
-.PHONY: lib
+.PHONY: lib bin
 lib: lib/libedlib.so lib/.exists
 lib/libedlib.so: $(LIBOBJ)
        @mkdir -p lib
        $(QUIET_CC)$(CC) -shared -Wl,-soname,libedlib.so -o $@ $(LIBOBJ)
+bin: $(patsubst %,bin/%,$(BIN))
+bin/% :
+       @mkdir -p bin
+       cp $< $@
+       @chmod +x $@
 
 shared: $(SO)
-lib/edlib-lib-search.so : O/lib-search.o O/rexel.o
-lib/edlib-mode-emacs.so : O/mode-emacs.o O/emacs-search.o
+lib/edlib-lib-search.so : O/lib-search.o $(XOBJ)
+lib/edlib-lib-wiggle.so : O/lib-wiggle.o $(WOBJ)
+lib/edlib-lib-calc.so : O/lib-calc.o O/libcalc.a
+
+O/lib-search.o : rexel.h
+O/lib-wiggle.o : wiggle/wiggle.h
 
 $(SO) : lib/edlib-%.so : O/%.o O/core-version.o lib/.exists
        @mkdir -p lib
-       $(QUIET_LIB)$(CC) -shared -Wl,-soname,edlib-$*.so -o $@ $(filter %.o,$^) $(LIBS-$*)
+       $(QUIET_LIB)$(CC) -shared -Wl,-soname,edlib-$*.so -o $@ $(filter %.o,$^) $(filter %.a,$^) $(LIBS-$*)
 
 O/mod-list.h : Makefile
        $(QUIET_SCRIPT)for file in $(patsubst O/%.o,%,$(subst -,_,$(SHOBJ))); do echo "{ \"$$file\", $${file}_edlib_init}," ; done | sort > $@
@@ -183,21 +239,26 @@ O/mod-list-decl.h : Makefile
 
 CSRC= attr.c
 
-test:
+test2:
        @for f in $(CSRC); do sed -n -e 's/^#ifdef TEST_\(.*\)$$/\1/p' $$f | \
                while read test; do cc -g -o test_$$test -DTEST_$$test $(CSRC) && \
                        ./test_$$test || exit 2; \
                done || exit 2; \
        done; echo SUCCESS
 
-rexel: rexel.c rexel.h
-       $(CC) -DDEBUG -g -o rexel rexel.c
+rexel: rexel.c rexel.h core-misc.c
+       $(CC) -DDEBUG -g -o rexel rexel.c core-misc.c
+
+test-rexel: rexel
        ./rexel -T
 
+NamesList.txt:
+       wget https://unicode.org/Public/UNIDATA/NamesList.txt
+
 checksym: edlib
        @nm edlib  | awk '$$2 == "T" {print $$3}' | while read a; do grep $$a *.h > /dev/null || echo  $$a; done | grep -vE '^(_.*|main)$$' ||:
 
 .PHONY: clean
 clean:
-       rm -f edlib edlib-static
-       rm -rf lib O
+       rm -f edlib edlib-static rexel
+       rm -rf lib O bin