Login
Check-in [1542e54763]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Initial work on experimentally moving the subdir makes into a single top-level mega-makefile.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | toplevel-make
Files: files | file ages | folders
SHA1: 1542e5476324a341239f3bcc41e54119cd53fe1a
User & Date: stephan 2021-12-20 09:41:46.800
Context
2021-12-20
10:05
Ooops: renamed GNUmakefile GNUmakefile.in. check-in: 229b2aa8e2 user: stephan tags: toplevel-make
09:41
Initial work on experimentally moving the subdir makes into a single top-level mega-makefile. check-in: 1542e54763 user: stephan tags: toplevel-make
09:24
Build file typo. check-in: e33e6441c8 user: stephan tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Added GNUmakefile.




















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/make # help out emacs
#
# Top-level autosetup-filtered Makefile for libfossil. This particular
# build is for Unix platforms with GNU Make 4+.
all:
#.NOTPARALLEL: # stop subdir makes and reconfigure from launching
#              # multiple times concurrently.
include config.make
include shakenmake.make
THIS.MAKEFILE := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
TOP_DIR := $(patsubst %/,%,$(dir $(THIS.MAKEFILE)))

#ShakeNMake.CISH_SOURCES := $(wildcard *.c) $(wildcard $(SRC.DIR)/*.c)
## Subdir cleanup rules and deps list must come before shakenmake.make is included
## or they must be set up manually afterwards...
#clean-.: clean-doc clean-f-apps clean-bindings
#distclean-.: distclean-doc distclean-f-apps distclean-bindings
#include shakenmake.make
#MAIN_MAKEFILES := $(PACKAGE.MAKEFILE) $(ShakeNMake.MAKEFILE) /home/stephan/fossil/libfossil/autosetup/autosetup /home/stephan/fossil/libfossil/autosetup/local.tcl /home/stephan/fossil/libfossil/auto.def /home/stephan/fossil/libfossil/autosetup/system.tcl /home/stephan/fossil/libfossil/autosetup/cc.tcl /home/stephan/fossil/libfossil/autosetup/cc-shared.tcl /home/stephan/fossil/libfossil/autosetup/cc-lib.tcl /home/stephan/fossil/libfossil/autosetup/wh-common.tcl

AUTOCONFIG_H := ./include/fossil-scm/autoconfig.h
DIR.src := ./src
DIR.tools := ./tools
DIR.include := ./include


#SUBDIRS := src f-apps client
#$(eval $(call ShakeNMake.CALL.SUBDIRS,$(SUBDIRS)))
#subdir-f-apps: subdir-src
#all: subdir-src subdir-f-apps subdir-client

DISTCLEAN_FILES += config.make

include make-lib.make

########################################################################
# Other stuff...

ifeq ($(MAKE_COMPILATION_DB),yes)
all: compile_commands.json
compile_commands.json:
	@$(RM) $@
	sed -e '1s/^/[\'$$'\n''/' -e '$$s/,$$/\'$$'\n'']/' $(compdb_dir)/*.o.json > $@+
	@if test -s $@+; then mv $@+ $@; else $(RM) $@+; fi
endif

DISTCLEAN_FILES += $(AUTOCONFIG_H) Makefile $(THIS.MAKEFILE) config.log \
  autosetup/jimsh0 \
	$(wildcard compile_commands/*) compile_commands.json+

# automake compatibility. do nothing for all these targets
#EMPTY_AUTOMAKE_TARGETS := dvi pdf ps info html tags ctags mostlyclean maintainer-clean check installcheck installdirs \
# install-pdf install-ps install-info install-html -install-dvi uninstall install-exec install-data distdir
#.PHONY: $(EMPTY_AUTOMAKE_TARGETS)
#$(EMPTY_AUTOMAKE_TARGETS):

## ./Makefile.in: # b/c AUTODEPS contains this name (it probably shouldn't)
#$(FSL.OBJ): /home/stephan/fossil/libfossil/autosetup/autosetup /home/stephan/fossil/libfossil/autosetup/local.tcl /home/stephan/fossil/libfossil/auto.def /home/stephan/fossil/libfossil/autosetup/system.tcl /home/stephan/fossil/libfossil/autosetup/cc.tcl /home/stephan/fossil/libfossil/autosetup/cc-shared.tcl /home/stephan/fossil/libfossil/autosetup/cc-lib.tcl /home/stephan/fossil/libfossil/autosetup/wh-common.tcl ./Makefile ./config.make

# Reconfigure if needed
ifeq ($(findstring clean,$(MAKECMDGOALS)),)
./config.make: /home/stephan/fossil/libfossil/autosetup/autosetup /home/stephan/fossil/libfossil/autosetup/local.tcl /home/stephan/fossil/libfossil/auto.def /home/stephan/fossil/libfossil/autosetup/system.tcl /home/stephan/fossil/libfossil/autosetup/cc.tcl /home/stephan/fossil/libfossil/autosetup/cc-shared.tcl /home/stephan/fossil/libfossil/autosetup/cc-lib.tcl /home/stephan/fossil/libfossil/autosetup/wh-common.tcl ./config.make.in
	@./configure "CC=ccache cc" "CXX=ccache c++" "CC=ccache cc" "CXX=ccache c++"
./Makefile: /home/stephan/fossil/libfossil/autosetup/autosetup /home/stephan/fossil/libfossil/autosetup/local.tcl /home/stephan/fossil/libfossil/auto.def /home/stephan/fossil/libfossil/autosetup/system.tcl /home/stephan/fossil/libfossil/autosetup/cc.tcl /home/stephan/fossil/libfossil/autosetup/cc-shared.tcl /home/stephan/fossil/libfossil/autosetup/cc-lib.tcl /home/stephan/fossil/libfossil/autosetup/wh-common.tcl ./Makefile.in
	chmod +w $@
	@./configure "CC=ccache cc" "CXX=ccache c++" "CC=ccache cc" "CXX=ccache c++"
./vars.make: /home/stephan/fossil/libfossil/autosetup/autosetup /home/stephan/fossil/libfossil/autosetup/local.tcl /home/stephan/fossil/libfossil/auto.def /home/stephan/fossil/libfossil/autosetup/system.tcl /home/stephan/fossil/libfossil/autosetup/cc.tcl /home/stephan/fossil/libfossil/autosetup/cc-shared.tcl /home/stephan/fossil/libfossil/autosetup/cc-lib.tcl /home/stephan/fossil/libfossil/autosetup/wh-common.tcl ./vars.make.in
	@./configure "CC=ccache cc" "CXX=ccache c++" "CC=ccache cc" "CXX=ccache c++"
endif

# Or on demand
reconfig:
	./configure "CC=ccache cc" "CXX=ccache c++" "CC=ccache cc" "CXX=ccache c++"

Changes to auto.def.
383
384
385
386
387
388
389
390
391


392
393
394
395
396
397
398
}

wh-bin-define install
wh-bin-define etags

# Each generated Makefile requires an input file with a .in extension:
wh-make-from-dot-in {
    config.make
    Makefile


    src/Makefile
    f-apps/Makefile
    bindings/Makefile
    bindings/cpp/Makefile
    client/Makefile
    client/fnc/Makefile
}







|
|
>
>







383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
}

wh-bin-define install
wh-bin-define etags

# Each generated Makefile requires an input file with a .in extension:
wh-make-from-dot-in {
  config.make
  Makefile
  GNUmakefile
  make-lib.make
    src/Makefile
    f-apps/Makefile
    bindings/Makefile
    bindings/cpp/Makefile
    client/Makefile
    client/fnc/Makefile
}
Added make-lib.make.in.
































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
all:
CPPFLAGS += -DBUILD_libfossil -DSQLITE_CORE
EXTRA_LIBS := -lz
EXTRA_LIBS += $(LDFLAGS_MODULE_LOADER)
DISTCLEAN_FILES += Makefile
#INCLUDES_PATH ?= $(HOME)/include /usr/local/include /usr/include


# FSL.SRC.BASE = all sources which can go in the amalgamation build
# FSL.SRC = FSL.SRC.BASE + generated/added sources
FSL.SRC.BASE := $(patsubst %,$(DIR.src)/%, \
	fsl.c \
	annotate.c \
	appendf.c \
	auth.c \
	bag.c \
	buffer.c \
	cache.c \
	checkin.c \
	checkout.c \
	cli.c \
	content.c \
	config.c \
	cx.c \
  db.c \
	deck.c \
	delta.c \
	diff.c \
	diff2.c \
	encode.c \
	event.c \
	fs.c \
	forum.c \
	glob.c \
	io.c \
	leaf.c \
	list.c \
	lookslike.c \
	md5.c \
	merge.c \
	merge3.c \
	popen.c \
	pq.c \
	repo.c \
	schema.c \
	search.c \
	sha1.c \
	sha3.c \
	strftime.c \
	tag.c \
	ticket.c \
	udf.c \
	utf8.c \
	vfile.c \
	vpath.c \
	wiki.c \
	zip.c)

FSL_ENABLE_SQLITE_REGEXP := 0
ifeq (1,$(FSL_ENABLE_SQLITE_REGEXP))
  FSL.SRC.BASE += ext_regexp.c
endif

FSL.SRC := $(FSL.SRC.BASE)

SQLITE3.C := $(wildcard $(DIR.src)/sqlite3.c)
ifneq (,$(SQLITE3.C))
  FSL.SRC += $(SQLITE3.C)
  HAVE_OWN_SQLITE := 1
else
  HAVE_OWN_SQLITE := 0
endif

FSL.OBJ := $(patsubst %.c,%.o,$(FSL.SRC))
CLEAN_FILES += $(FSL.OBJ)

########################################################################
# Transform schema SQL files into source form. We don't use fossil(1)'s
# approach because it relies on unspecified length limits on C string
# literals. Yeah, it works, but i'm funny about the C Standard.
#include $(TOP_SRCDIR_REL)/tools.make
BIN.TEXT2C := $(DIR.tools)/text2c
$(BIN.TEXT2C): $(DIR.tools)/text2c.c
	cc $< -o $@
CLEAN_FILES += $(BIN.TEXT2C)

define SQL2C
$(2):
$(1).c: $(2) $$(BIN.TEXT2C)
	@echo "Creating $$@ from $(2)..."; \
	{ \
		echo '/* Binary form of file $(2) */'; \
		echo '/** @page page_$$(notdir $1) Schema: $$(notdir $(2))'; \
		echo '@code'; \
		cat "$(2)"; \
		echo ' @endcode'; \
		echo ' @see $$(subst _cstr,,$$(notdir $1))()'; \
		echo '*/'; \
		$$(BIN.TEXT2C) fsl_$$(notdir $1) < $(2); \
		echo '/* end of $(2) */'; \
	} > $$@;
FSL.SRC += $(1).c
FSL.SRC.BASE += $(1).c
FSL.OBJ += $(1).o
DISTCLEAN_FILES += $(1).c
sql: $(1).c
endef

SQL.DIR := @srcdir@/sql
$(eval $(call SQL2C,$(DIR.src)/schema_config_cstr,$(SQL.DIR)/config.sql))
$(eval $(call SQL2C,$(DIR.src)/schema_repo1_cstr,$(SQL.DIR)/repo-static.sql))
$(eval $(call SQL2C,$(DIR.src)/schema_repo2_cstr,$(SQL.DIR)/repo-transient.sql))
$(eval $(call SQL2C,$(DIR.src)/schema_ckout_cstr,$(SQL.DIR)/checkout.sql))
$(eval $(call SQL2C,$(DIR.src)/schema_ticket_cstr,$(SQL.DIR)/ticket.sql))
$(eval $(call SQL2C,$(DIR.src)/schema_ticket_reports_cstr,$(SQL.DIR)/ticket-reports.sql))
$(eval $(call SQL2C,$(DIR.src)/schema_forum_cstr,$(SQL.DIR)/forum.sql))
# end SQL transformation bits
########################################################################

# These are the flags used by fossil's embedded sqlite3:
SQLITE.OBJ := $(DIR.src)/sqlite3.o
$(SQLITE.OBJ): CPPFLAGS+=-DNDEBUG=1 \
                 -DSQLITE_DQS=0 \
                 -DSQLITE_THREADSAFE=0 \
                 -DSQLITE_DEFAULT_MEMSTATUS=0 \
                 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
                 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
                 -DSQLITE_OMIT_DECLTYPE \
                 -DSQLITE_OMIT_PROGRESS_CALLBACK \
                 -DSQLITE_OMIT_SHARED_CACHE \
                 -DSQLITE_OMIT_LOAD_EXTENSION \
                 -DSQLITE_MAX_EXPR_DEPTH=0 \
                 -DSQLITE_USE_ALLOCA \
                 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
                 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
                 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
                 -DSQLITE_ENABLE_FTS4 \
                 -DSQLITE_ENABLE_DBSTAT_VTAB \
                 -DSQLITE_ENABLE_JSON1 \
                 -DSQLITE_ENABLE_FTS5 \
                 -DSQLITE_ENABLE_STMTVTAB \
                 -DSQLITE_HAVE_ZLIB \
                 -DSQLITE_INTROSPECTION_PRAGMAS \
                 -DSQLITE_ENABLE_DBPAGE_VTAB \
                 -DSQLITE_TRUSTED_SCHEMA=0

# FIXME: update libf sql tracing: -DSQLITE_OMIT_DEPRECATED

$(SQLITE.OBJ): CFLAGS+=-Wno-sign-compare
ifneq (,$(CC_PROFILE_FLAG))
$(SQLITE.OBJ): CFLAGS:=$(filter-out $(CC_PROFILE_FLAG),$(CFLAGS))
# ^^^ gprof data into sqlite3 is just noise for us, so strip the
# profiling flag from this file.
endif
ifneq (,$(filter clang,$(CC)))
# Workaround for clang
$(SQLITE.OBJ): CFLAGS+=-Wno-unused-const-variable
endif

CLEAN_FILES += $(FSL.OBJ)
ifeq (1,$(HAVE_OWN_SQLITE))
# in-tree sqlite3
# -lm: one of the sqlite build opts (FTS?) requires log(3).
  EXTRA_LIBS += -lm
else
# system/external sqlite3
  EXTRA_LIBS += -lpthread
endif

libfossil.DLL.OBJECTS := $(FSL.OBJ)
libfossil.DLL.LDFLAGS := @SH_LDFLAGS@ $(EXTRA_LIBS)
libfossil.LIB.OBJECTS := $(libfossil.DLL.OBJECTS)
########################################################################
# Shared lib
ifeq (1,@LIBFOSSIL_SHARED@)
$(eval $(call ShakeNMake.CALL.RULES.DLLS,libfossil))
all: $(libfossil.DLL)
$(libfossil.DLL): $(libfossil.DLL.OBJECTS)
ShakeNMake.install.dlls := $(libfossil.DLL)
endif

# Static lib
ifeq (1,@LIBFOSSIL_STATIC@)
$(eval $(call ShakeNMake.CALL.RULES.LIBS,libfossil))
all: $(libfossil.LIB)
$(libfossil.LIB): $(libfossil.LIB.OBJECTS)
ShakeNMake.install.libs := $(libfossil.LIB)
endif

########################################################################
# A quick-n-dirty amalgamation build...
INCD := $(DIR.include)/fossil-scm
AMAL_D := @srcdir@
AMAL_C := $(AMAL_D)/libfossil.c
AMAL_O := $(AMAL_D)/libfossil.o
AMAL_H := $(AMAL_D)/libfossil.h
AMAL_CONF.H := $(AMAL_D)/libfossil-config.h
CLEAN_FILES += $(AMAL_H) $(AMAL_C) $(AMAL_CONF.H)

############################################################
# AMAL_C.SRC = the list of source files (.c and private .h) to include
# in $(AMAL_C).
#AMAL_C.SRC :=	fossil-ext_regexp.h
AMAL_C.SRC += \
	$(FSL.SRC.BASE)

ifeq (0,1)
# the tcl bits currently break the amalgamation
AMAL_C.SRC += \
	$(COMPAT_DIR)/javavm/export/jni_md.h \
	$(COMPAT_DIR)/javavm/export/jni.h \
	$(COMPAT_DIR)/tcl-8.6/generic/tcl.h \
	$(COMPAT_DIR)/tcl-8.6/generic/tclDecls.h \
	$(COMPAT_DIR)/tcl-8.6/generic/tclPlatDecls.h
endif

############################################################
# AMAL_H.SRC = the list of public header files to include
# in $(AMAL_H).
AMAL_H.SRC := \
	$(INCD)/fossil-config.h \
	$(INCD)/fossil.h \
	$(INCD)/fossil-util.h \
	$(INCD)/fossil-core.h \
	$(INCD)/fossil-db.h \
	$(INCD)/fossil-hash.h \
	$(INCD)/fossil-repo.h \
	$(INCD)/fossil-checkout.h \
	$(INCD)/fossil-confdb.h \
	$(INCD)/fossil-vpath.h \
	$(INCD)/fossil-internal.h \
	$(INCD)/fossil-auth.h \
	$(INCD)/fossil-forum.h \
	$(INCD)/fossil-pages.h \
	$(INCD)/fossil-cli.h
$(AMAL_H.SRC):
$(AMAL_C.SRC):
AMAL_H_MAKEFILES := $(filter-out $(ShakeNMake.CISH_DEPS_FILE),$(MAKEFILE_LIST))
$(AMAL_H): $(AMAL_H_MAKEFILES) $(AMAL_H.SRC) $(AMAL_CONF.H)
$(AMAL_C): $(AMAL_H_MAKEFILES) $(AMAL_H) $(AMAL_C.SRC)
$(AMAL_CONF.H): $(AMAL_H_MAKEFILES)
	@echo "Generating $@ ..."
	cd $(TOP_SRCDIR_REL) && sh configure --amal

$(AMAL_H): 
	@echo "Creating $@..."
	@{ \
		echo '#if !defined(FSL_AMALGAMATION_BUILD)'; \
		echo '#define FSL_AMALGAMATION_BUILD 1'; \
		echo '#endif'; \
		echo '#if defined(HAVE_CONFIG_H)'; \
		echo '#  include "config.h"'; \
		echo '#endif'; \
		echo '#include "$(notdir $(AMAL_CONF.H))"'; \
	} > $@
	@{ \
		for i in $(AMAL_H.SRC); do \
			echo "/* start of file $$i */"; \
			cat $$i; \
			echo "/* end of file $$i */"; \
		done; \
	} | sed  \
		 -e '/[ ]*#[ ]*include[ ]*.*fossil.*\.h[>"]/d' \
		 -e '/[ ]*#[ ]*include[ ]*.*".*config\.h"/d' \
		>> $@

$(AMAL_C): $(AMAL_H)
	@echo "Creating $@..."
	@echo '#include "$(notdir $(AMAL_H))"' > $@
	@{ \
		for i in $(AMAL_C.SRC); do \
			echo "/* start of file $$i */"; \
			cat $$i; \
			echo "/* end of file $$i */"; \
		done; \
	} | sed \
		 -e '/[ ]*#[ ]*include[ ]*.*fossil.*\.h[>"]/d' \
		>> $@

$(AMAL_O): $(FSL.OBJ)# avoids mixed build output
#all: $(AMAL_C)
amal: $(AMAL_C)
# /amalgamation
########################################################################

########################################################################
# amalgamation "unversioned" files for hosting in the main fossil repo
amal-dist.zip := libfossil-amalgamation.zip
amal-dist.html := amalgamation.html
FDB := $(wildcard .fslckout _FOSSIL_)
AMAL_CPP_FLAGS := -I$(TOP_INCDIR)
AMAL_CPP_FLAGS += -I$(TOP_INCDIR)/src# for local sqlite3.h and sqlite3ext.h
$(AMAL_O): $(AMAL_C) $(AMAL_H) $(AMAL_CONF.H) $(wildcard src/*.c)
	$(MAKE) -C src amal
	@echo "Amalgamation files:"; \
	ls -la $(AMAL_C) $(AMAL_H) $(AMAL_CONF.H)
	$(CC) $(CPPFLAGS) $(AMAL_CPP_FLAGS) $(CFLAGS) -c "$<" -o "$@"
	@echo "Reminder: it will need these sqlite3 files to build:"; \
	echo "sqlite3.h, sqlite3ext.h, and optionally a local copy of sqlite3.c"
	@echo "Reminder: run 'amal-push' from the top dir to push a build to the main server."
amal: $(AMAL_O)
.PHONY: amal $(amal-dist.zip) $(amal-dist.html) $(FDB)
$(FDB):
	@test -f $@ || { echo "Missing fossil checkout db."; exit 1; }
$(amal-dist.zip): $(AMAL_O) $(FDB)
	zip $@ $(AMAL_C) $(AMAL_H) $(AMAL_CONF.H)
SQL_VINFO := select e.mtime,b.uuid from event e, blob b where b.rid=e.objid and e.type='ci' order by e.mtime desc limit 1;
# ^^^^^^^ ==> 12345.6789,'hash'
$(amal-dist.html): $(FDB)
	@{ \
	echo "<div class='fossil-doc' data-title='Downloads'>"; \
	echo "<style>#download-list{ line-height: 1.5; font-size: 125%; white-space: pre-wrap; }</style>"; \
	echo "<p>This page hosts builds of the libfossil "; \
	echo "<a href='../wiki/AmalgamationBuild'>AmalgamationBuild</a>. "; \
	echo "It only hosts the \"latest\" build and is updated periodically by a "; \
	echo "project contributor."; \
	echo "</p>"; \
	echo "<pre id='download-list'>"; \
	echo "<a href='$(amal-dist.zip)'>$(amal-dist.zip)</a>"; \
	echo "Size: $$(ls -la $(amal-dist.zip) | awk '{print $$5}') bytes"; \
	vinfo=$$(echo "$(SQL_VINFO)" | fossil sql); \
	echo "Last updated (YYYY-MM-DD):" $$(echo "select strftime('%Y-%m-%d %H:%M',$${vinfo%%,*})" | fossil sql | cut -d\' -f2) UTC; \
	version=$$(echo $${vinfo} | cut -d\' -f2); \
	echo "Source code version: <a href='../info/$${version:0:16}'>$${version:0:16}</a>"; \
	echo "Zip file SHA3-256 hash:" $$(fossil sha3sum $(amal-dist.zip) | cut -d' ' -f1); \
	echo "</pre>"; \
	} > $@
	@echo "Created $@"
amal-dist: $(amal-dist.zip) $(amal-dist.html)
	vinfo=$$(echo "$(SQL_VINFO)" | fossil sql); \
	fossil uv add $(amal-dist.zip) $(amal-dist.html) --mtime $${vinfo%%,*}
	fossil uv list
amal-push: amal-dist
	fossil uv sync

CLEAN_FILES += $(amal-dist.zip) $(amal-dist.html)
Changes to src/schema_ckout_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/checkout.sql */
/** @page page_schema_ckout_cstr Schema: checkout.sql
@code
-- The VVAR table holds miscellanous information about the local database
-- in the form of name-value pairs.  This is similar to the VAR table
-- table in the repository except that this table holds information that
-- is specific to the local checkout.
--
|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/checkout.sql */
/** @page page_schema_ckout_cstr Schema: checkout.sql
@code
-- The VVAR table holds miscellanous information about the local database
-- in the form of name-value pairs.  This is similar to the VAR table
-- table in the repository except that this table holds information that
-- is specific to the local checkout.
--
262
263
264
265
266
267
268
269
115, 32, 102, 105, 108, 101, 32, 116, 121, 112, 101, 46, 10, 45, 45, 32, 84, 104, 101, 32, 
105, 110, 116, 101, 103, 101, 114, 32, 105, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 
97, 115, 32, 39, 70, 83, 76, 67, 39, 46, 10, 80, 82, 65, 71, 77, 65, 32, 99, 107, 
111, 117, 116, 46, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 95, 105, 100, 61, 50, 
53, 50, 48, 48, 54, 54, 55, 52, 59, 10, 
0};
char const * fsl_schema_ckout_cstr = fsl_schema_ckout_cstr_a;
/* end of ../sql/checkout.sql */







|
262
263
264
265
266
267
268
269
115, 32, 102, 105, 108, 101, 32, 116, 121, 112, 101, 46, 10, 45, 45, 32, 84, 104, 101, 32, 
105, 110, 116, 101, 103, 101, 114, 32, 105, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 
97, 115, 32, 39, 70, 83, 76, 67, 39, 46, 10, 80, 82, 65, 71, 77, 65, 32, 99, 107, 
111, 117, 116, 46, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 95, 105, 100, 61, 50, 
53, 50, 48, 48, 54, 54, 55, 52, 59, 10, 
0};
char const * fsl_schema_ckout_cstr = fsl_schema_ckout_cstr_a;
/* end of ./sql/checkout.sql */
Changes to src/schema_config_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/config.sql */
/** @page page_schema_config_cstr Schema: config.sql
@code
-- This file contains the schema for the database that is kept in the
-- ~/.fossil file and that stores information about the users setup.
--
CREATE TABLE cfg.global_config(
  name TEXT PRIMARY KEY,
|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/config.sql */
/** @page page_schema_config_cstr Schema: config.sql
@code
-- This file contains the schema for the database that is kept in the
-- ~/.fossil file and that stores information about the users setup.
--
CREATE TABLE cfg.global_config(
  name TEXT PRIMARY KEY,
32
33
34
35
36
37
38
39
105, 108, 101, 32, 116, 121, 112, 101, 46, 10, 45, 45, 32, 84, 104, 101, 32, 105, 110, 116, 
101, 103, 101, 114, 32, 105, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 115, 32, 
39, 70, 83, 76, 71, 39, 46, 10, 80, 82, 65, 71, 77, 65, 32, 99, 102, 103, 46, 97, 
112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 95, 105, 100, 61, 50, 53, 50, 48, 48, 54, 
54, 55, 53, 59, 10, 
0};
char const * fsl_schema_config_cstr = fsl_schema_config_cstr_a;
/* end of ../sql/config.sql */







|
32
33
34
35
36
37
38
39
105, 108, 101, 32, 116, 121, 112, 101, 46, 10, 45, 45, 32, 84, 104, 101, 32, 105, 110, 116, 
101, 103, 101, 114, 32, 105, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 115, 32, 
39, 70, 83, 76, 71, 39, 46, 10, 80, 82, 65, 71, 77, 65, 32, 99, 102, 103, 46, 97, 
112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 95, 105, 100, 61, 50, 53, 50, 48, 48, 54, 
54, 55, 53, 59, 10, 
0};
char const * fsl_schema_config_cstr = fsl_schema_config_cstr_a;
/* end of ./sql/config.sql */
Changes to src/schema_forum_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/forum.sql */
/** @page page_schema_forum_cstr Schema: forum.sql
@code
CREATE TABLE repo.forumpost(
  fpid INTEGER PRIMARY KEY,  -- BLOB.rid for the artifact
  froot INT,                 -- fpid of the thread root
  fprev INT,                 -- Previous version of this same post
  firt INT,                  -- This post is in-reply-to
|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/forum.sql */
/** @page page_schema_forum_cstr Schema: forum.sql
@code
CREATE TABLE repo.forumpost(
  fpid INTEGER PRIMARY KEY,  -- BLOB.rid for the artifact
  froot INT,                 -- fpid of the thread root
  fprev INT,                 -- Previous version of this same post
  firt INT,                  -- This post is in-reply-to
32
33
34
35
36
37
38
39
104, 101, 110, 32, 112, 111, 115, 116, 101, 100, 46, 32, 32, 74, 117, 108, 105, 97, 110, 32, 
100, 97, 121, 10, 41, 59, 10, 67, 82, 69, 65, 84, 69, 32, 73, 78, 68, 69, 88, 32, 
114, 101, 112, 111, 46, 102, 111, 114, 117, 109, 116, 104, 114, 101, 97, 100, 32, 79, 78, 32, 
102, 111, 114, 117, 109, 112, 111, 115, 116, 40, 102, 114, 111, 111, 116, 44, 102, 109, 116, 105, 
109, 101, 41, 59, 10, 
0};
char const * fsl_schema_forum_cstr = fsl_schema_forum_cstr_a;
/* end of ../sql/forum.sql */







|
32
33
34
35
36
37
38
39
104, 101, 110, 32, 112, 111, 115, 116, 101, 100, 46, 32, 32, 74, 117, 108, 105, 97, 110, 32, 
100, 97, 121, 10, 41, 59, 10, 67, 82, 69, 65, 84, 69, 32, 73, 78, 68, 69, 88, 32, 
114, 101, 112, 111, 46, 102, 111, 114, 117, 109, 116, 104, 114, 101, 97, 100, 32, 79, 78, 32, 
102, 111, 114, 117, 109, 112, 111, 115, 116, 40, 102, 114, 111, 111, 116, 44, 102, 109, 116, 105, 
109, 101, 41, 59, 10, 
0};
char const * fsl_schema_forum_cstr = fsl_schema_forum_cstr_a;
/* end of ./sql/forum.sql */
Changes to src/schema_repo1_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/repo-static.sql */
/** @page page_schema_repo1_cstr Schema: repo-static.sql
@code
-- This file contains parts of the schema that are fixed and
-- unchanging across Fossil versions.


-- The BLOB and DELTA tables contain all records held in the repository.
|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/repo-static.sql */
/** @page page_schema_repo1_cstr Schema: repo-static.sql
@code
-- This file contains parts of the schema that are fixed and
-- unchanging across Fossil versions.


-- The BLOB and DELTA tables contain all records held in the repository.
422
423
424
425
426
427
428
429
32, 99, 111, 109, 109, 97, 110, 100, 32, 116, 111, 32, 105, 100, 101, 110, 116, 105, 102, 121, 
32, 116, 104, 101, 10, 45, 45, 32, 100, 97, 116, 97, 98, 97, 115, 101, 32, 97, 115, 32, 
97, 32, 102, 111, 115, 115, 105, 108, 32, 114, 101, 112, 111, 115, 105, 116, 111, 114, 121, 46, 
10, 80, 82, 65, 71, 77, 65, 32, 114, 101, 112, 111, 46, 97, 112, 112, 108, 105, 99, 97, 
116, 105, 111, 110, 95, 105, 100, 61, 50, 53, 50, 48, 48, 54, 54, 55, 51, 59, 10, 
0};
char const * fsl_schema_repo1_cstr = fsl_schema_repo1_cstr_a;
/* end of ../sql/repo-static.sql */







|
422
423
424
425
426
427
428
429
32, 99, 111, 109, 109, 97, 110, 100, 32, 116, 111, 32, 105, 100, 101, 110, 116, 105, 102, 121, 
32, 116, 104, 101, 10, 45, 45, 32, 100, 97, 116, 97, 98, 97, 115, 101, 32, 97, 115, 32, 
97, 32, 102, 111, 115, 115, 105, 108, 32, 114, 101, 112, 111, 115, 105, 116, 111, 114, 121, 46, 
10, 80, 82, 65, 71, 77, 65, 32, 114, 101, 112, 111, 46, 97, 112, 112, 108, 105, 99, 97, 
116, 105, 111, 110, 95, 105, 100, 61, 50, 53, 50, 48, 48, 54, 54, 55, 51, 59, 10, 
0};
char const * fsl_schema_repo1_cstr = fsl_schema_repo1_cstr_a;
/* end of ./sql/repo-static.sql */
Changes to src/schema_repo2_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/repo-transient.sql */
/** @page page_schema_repo2_cstr Schema: repo-transient.sql
@code
-- This file contains parts of the schema that can change from one
-- version to the next. The data stored in these tables is
-- reconstructed from the information in the main repo schema by the
-- "rebuild" operation.

|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/repo-transient.sql */
/** @page page_schema_repo2_cstr Schema: repo-transient.sql
@code
-- This file contains parts of the schema that can change from one
-- version to the next. The data stored in these tables is
-- reconstructed from the information in the main repo schema by the
-- "rebuild" operation.

702
703
704
705
706
707
708
709
105, 108, 100, 105, 100, 41, 10, 41, 32, 87, 73, 84, 72, 79, 85, 84, 32, 82, 79, 87, 
73, 68, 59, 10, 67, 82, 69, 65, 84, 69, 32, 73, 78, 68, 69, 88, 32, 114, 101, 112, 
111, 46, 99, 104, 101, 114, 114, 121, 112, 105, 99, 107, 95, 99, 105, 100, 32, 79, 78, 32, 
99, 104, 101, 114, 114, 121, 112, 105, 99, 107, 40, 99, 104, 105, 108, 100, 105, 100, 41, 59, 
10, 
0};
char const * fsl_schema_repo2_cstr = fsl_schema_repo2_cstr_a;
/* end of ../sql/repo-transient.sql */







|
702
703
704
705
706
707
708
709
105, 108, 100, 105, 100, 41, 10, 41, 32, 87, 73, 84, 72, 79, 85, 84, 32, 82, 79, 87, 
73, 68, 59, 10, 67, 82, 69, 65, 84, 69, 32, 73, 78, 68, 69, 88, 32, 114, 101, 112, 
111, 46, 99, 104, 101, 114, 114, 121, 112, 105, 99, 107, 95, 99, 105, 100, 32, 79, 78, 32, 
99, 104, 101, 114, 114, 121, 112, 105, 99, 107, 40, 99, 104, 105, 108, 100, 105, 100, 41, 59, 
10, 
0};
char const * fsl_schema_repo2_cstr = fsl_schema_repo2_cstr_a;
/* end of ./sql/repo-transient.sql */
Changes to src/schema_ticket_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/ticket.sql */
/** @page page_schema_ticket_cstr Schema: ticket.sql
@code
-- Template for the TICKET table
CREATE TABLE repo.ticket(
  -- Do not change any column that begins with tkt_
  tkt_id INTEGER PRIMARY KEY,
  tkt_uuid TEXT UNIQUE,
|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/ticket.sql */
/** @page page_schema_ticket_cstr Schema: ticket.sql
@code
-- Template for the TICKET table
CREATE TABLE repo.ticket(
  -- Do not change any column that begins with tkt_
  tkt_id INTEGER PRIMARY KEY,
  tkt_uuid TEXT UNIQUE,
75
76
77
78
79
80
81
82
109, 101, 110, 116, 32, 84, 69, 88, 84, 10, 41, 59, 10, 67, 82, 69, 65, 84, 69, 32, 
73, 78, 68, 69, 88, 32, 114, 101, 112, 111, 46, 116, 105, 99, 107, 101, 116, 99, 104, 110, 
103, 95, 105, 100, 120, 49, 32, 79, 78, 32, 116, 105, 99, 107, 101, 116, 99, 104, 110, 103, 
40, 116, 107, 116, 95, 105, 100, 44, 32, 116, 107, 116, 95, 109, 116, 105, 109, 101, 41, 59, 
10, 
0};
char const * fsl_schema_ticket_cstr = fsl_schema_ticket_cstr_a;
/* end of ../sql/ticket.sql */







|
75
76
77
78
79
80
81
82
109, 101, 110, 116, 32, 84, 69, 88, 84, 10, 41, 59, 10, 67, 82, 69, 65, 84, 69, 32, 
73, 78, 68, 69, 88, 32, 114, 101, 112, 111, 46, 116, 105, 99, 107, 101, 116, 99, 104, 110, 
103, 95, 105, 100, 120, 49, 32, 79, 78, 32, 116, 105, 99, 107, 101, 116, 99, 104, 110, 103, 
40, 116, 107, 116, 95, 105, 100, 44, 32, 116, 107, 116, 95, 109, 116, 105, 109, 101, 41, 59, 
10, 
0};
char const * fsl_schema_ticket_cstr = fsl_schema_ticket_cstr_a;
/* end of ./sql/ticket.sql */
Changes to src/schema_ticket_reports_cstr.c.
1
2
3
4
5
6
7
8
/* Binary form of file ../sql/ticket-reports.sql */
/** @page page_schema_ticket_reports_cstr Schema: ticket-reports.sql
@code
INSERT INTO reportfmt(title,mtime,cols,sqlcode) 
VALUES('All Tickets',julianday('1970-01-01'),'#ffffff Key:
#f2dcdc Active
#e8e8e8 Review
#cfe8bd Fixed
|







1
2
3
4
5
6
7
8
/* Binary form of file ./sql/ticket-reports.sql */
/** @page page_schema_ticket_reports_cstr Schema: ticket-reports.sql
@code
INSERT INTO reportfmt(title,mtime,cols,sqlcode) 
VALUES('All Tickets',julianday('1970-01-01'),'#ffffff Key:
#f2dcdc Active
#e8e8e8 Review
#cfe8bd Fixed
57
58
59
60
61
62
63
64
100, 97, 116, 101, 116, 105, 109, 101, 40, 116, 107, 116, 95, 109, 116, 105, 109, 101, 41, 32, 
65, 83, 32, 39, 39, 109, 116, 105, 109, 101, 39, 39, 44, 10, 32, 32, 116, 121, 112, 101, 
44, 10, 32, 32, 115, 116, 97, 116, 117, 115, 44, 10, 32, 32, 115, 117, 98, 115, 121, 115, 
116, 101, 109, 44, 10, 32, 32, 116, 105, 116, 108, 101, 10, 70, 82, 79, 77, 32, 116, 105, 
99, 107, 101, 116, 39, 41, 59, 10, 
0};
char const * fsl_schema_ticket_reports_cstr = fsl_schema_ticket_reports_cstr_a;
/* end of ../sql/ticket-reports.sql */







|
57
58
59
60
61
62
63
64
100, 97, 116, 101, 116, 105, 109, 101, 40, 116, 107, 116, 95, 109, 116, 105, 109, 101, 41, 32, 
65, 83, 32, 39, 39, 109, 116, 105, 109, 101, 39, 39, 44, 10, 32, 32, 116, 121, 112, 101, 
44, 10, 32, 32, 115, 116, 97, 116, 117, 115, 44, 10, 32, 32, 115, 117, 98, 115, 121, 115, 
116, 101, 109, 44, 10, 32, 32, 116, 105, 116, 108, 101, 10, 70, 82, 79, 77, 32, 116, 105, 
99, 107, 101, 116, 39, 41, 59, 10, 
0};
char const * fsl_schema_ticket_reports_cstr = fsl_schema_ticket_reports_cstr_a;
/* end of ./sql/ticket-reports.sql */