comparison mupdf-source/thirdparty/mujs/Makefile @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 # Makefile for building MuJS libraries, shell, and pretty-printer.
2 #
3 # Useful targets are: release, install, uninstall.
4
5 default: build/debug/mujs build/debug/mujs-pp
6
7 CFLAGS = -std=c99 -pedantic -Wall -Wextra -Wno-unused-parameter
8
9 OPTIM = -O3
10
11 prefix = /usr/local
12 bindir = $(prefix)/bin
13 incdir = $(prefix)/include
14 libdir = $(prefix)/lib
15
16 ifeq ($(wildcard .git),.git)
17 VERSION = $(shell git describe --tags --always)
18 else
19 VERSION = $(patsubst mujs-%,%,$(notdir $(CURDIR)))
20 endif
21
22 ifeq ($(shell uname),Darwin)
23 SO = dylib
24 else
25 SO = so
26 endif
27
28 ifeq ($(shell uname),FreeBSD)
29 CFLAGS += -I/usr/local/include -L/usr/local/lib
30 endif
31
32 HDRS = mujs.h jsi.h regexp.h utf.h astnames.h opnames.h
33
34 ifneq ($(HAVE_READLINE),no)
35 READLINE_CFLAGS = -DHAVE_READLINE
36 READLINE_LIBS = -lreadline
37 endif
38
39 SRCS = \
40 jsarray.c \
41 jsboolean.c \
42 jsbuiltin.c \
43 jscompile.c \
44 jsdate.c \
45 jsdtoa.c \
46 jserror.c \
47 jsfunction.c \
48 jsgc.c \
49 jsintern.c \
50 jslex.c \
51 jsmath.c \
52 jsnumber.c \
53 jsobject.c \
54 json.c \
55 jsparse.c \
56 jsproperty.c \
57 jsregexp.c \
58 jsrepr.c \
59 jsrun.c \
60 jsstate.c \
61 jsstring.c \
62 jsvalue.c \
63 regexp.c \
64 utf.c
65
66 one.c:
67 for F in $(SRCS); do echo "#include \"$$F\""; done > $@
68
69 astnames.h: jsi.h
70 grep -E '\<(AST|EXP|STM)_' jsi.h | sed 's/^[^A-Z]*\(AST_\)*/"/;s/,.*/",/' | tr A-Z a-z > $@
71
72 opnames.h: jsi.h
73 grep -E '\<OP_' jsi.h | sed 's/^[^A-Z]*OP_/"/;s/,.*/",/' | tr A-Z a-z > $@
74
75 UnicodeData.txt:
76 curl -s -o $@ https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
77
78 utfdata.h: genucd.py UnicodeData.txt
79 python3 genucd.py UnicodeData.txt >$@
80
81 build/sanitize/mujs: main.c one.c $(SRCS) $(HDRS)
82 @mkdir -p $(@D)
83 $(CC) $(CFLAGS) -g -fsanitize=address -fno-omit-frame-pointer -o $@ main.c one.c -lm $(READLINE_CFLAGS) $(READLINE_LIBS)
84
85 build/debug/libmujs.$(SO): one.c $(SRCS) $(HDRS)
86 @mkdir -p $(@D)
87 $(CC) $(CFLAGS) -g -fPIC -shared -o $@ one.c -lm
88 build/debug/libmujs.o: one.c $(SRCS) $(HDRS)
89 @mkdir -p $(@D)
90 $(CC) $(CFLAGS) -g -c -o $@ one.c
91 build/debug/libmujs.a: build/debug/libmujs.o
92 $(AR) cr $@ $^
93 build/debug/mujs: main.c build/debug/libmujs.o
94 $(CC) $(CFLAGS) -g -o $@ $^ -lm $(READLINE_CFLAGS) $(READLINE_LIBS)
95 build/debug/mujs-pp: pp.c build/debug/libmujs.o
96 $(CC) $(CFLAGS) -g -o $@ $^ -lm
97
98 build/release/libmujs.$(SO): one.c $(SRCS) $(HDRS)
99 @mkdir -p $(@D)
100 $(CC) $(CFLAGS) $(OPTIM) -fPIC -shared -o $@ one.c -lm
101 build/release/libmujs.o: one.c $(SRCS) $(HDRS)
102 @mkdir -p $(@D)
103 $(CC) $(CFLAGS) $(OPTIM) -c -o $@ one.c
104 build/release/libmujs.a: build/release/libmujs.o
105 $(AR) cr $@ $^
106 build/release/mujs: main.c build/release/libmujs.o
107 $(CC) $(CFLAGS) $(OPTIM) -o $@ $^ -lm $(READLINE_CFLAGS) $(READLINE_LIBS)
108 build/release/mujs-pp: pp.c build/release/libmujs.o
109 $(CC) $(CFLAGS) $(OPTIM) -o $@ $^ -lm
110
111 build/release/mujs.pc:
112 @mkdir -p $(@D)
113 echo > $@ Name: mujs
114 echo >> $@ Description: MuJS embeddable Javascript interpreter
115 echo >> $@ Version: $(VERSION)
116 echo >> $@ Cflags: -I$(incdir)
117 echo >> $@ Libs: -L$(libdir) -lmujs
118 echo >> $@ Libs.private: -lm
119
120 install-common: build/release/mujs build/release/mujs-pp build/release/mujs.pc
121 install -d $(DESTDIR)$(incdir)
122 install -d $(DESTDIR)$(libdir)
123 install -d $(DESTDIR)$(libdir)/pkgconfig
124 install -d $(DESTDIR)$(bindir)
125 install -m 644 mujs.h $(DESTDIR)$(incdir)
126 install -m 644 build/release/mujs.pc $(DESTDIR)$(libdir)/pkgconfig
127 install -m 755 build/release/mujs $(DESTDIR)$(bindir)
128 install -m 755 build/release/mujs-pp $(DESTDIR)$(bindir)
129
130 install-static: install-common build/release/libmujs.a
131 install -m 644 build/release/libmujs.a $(DESTDIR)$(libdir)
132
133 install-shared: install-common build/release/libmujs.$(SO)
134 install -m 755 build/release/libmujs.$(SO) $(DESTDIR)$(libdir)
135
136 install: install-static
137
138 uninstall:
139 rm -f $(DESTDIR)$(bindir)/mujs
140 rm -f $(DESTDIR)$(bindir)/mujs-pp
141 rm -f $(DESTDIR)$(incdir)/mujs.h
142 rm -f $(DESTDIR)$(libdir)/pkgconfig/mujs.pc
143 rm -f $(DESTDIR)$(libdir)/libmujs.a
144 rm -f $(DESTDIR)$(libdir)/libmujs.$(SO)
145
146 tarball:
147 git archive --format=zip --prefix=mujs-$(VERSION)/ HEAD > mujs-$(VERSION).zip
148 git archive --format=tar --prefix=mujs-$(VERSION)/ HEAD | gzip > mujs-$(VERSION).tar.gz
149
150 tags: $(SRCS) $(HDRS) main.c pp.c
151 ctags $^
152
153 clean:
154 rm -rf build
155
156 nuke: clean
157 rm -f one.c astnames.h opnames.h
158
159 sanitize: build/sanitize/mujs
160
161 debug: build/debug/libmujs.a
162 debug: build/debug/libmujs.$(SO)
163 debug: build/debug/mujs
164 debug: build/debug/mujs-pp
165
166 release: build/release/mujs.pc
167 release: build/release/libmujs.a
168 release: build/release/libmujs.$(SO)
169 release: build/release/mujs
170 release: build/release/mujs-pp