Fossil

Check-in [14d1e449]
Login

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

Overview
Comment:Only allow the default Makefile to build fossil on platforms where it's known to work. Update the build documentation to tell the user to use the GNUmakefile explicitly, to avoid accidently building using the default makefile on non-GNU platforms.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | ben-safe-make
Files: files | file ages | folders
SHA1:14d1e449571224f8bd2526cd295baaa6f7796ade
User & Date: ben 2011-07-20 09:09:50
Context
2011-07-20
09:09
Only allow the default Makefile to build fossil on platforms where it's known to work. Update the build documentation to tell the user to use the GNUmakefile explicitly, to avoid accidently building using the default makefile on non-GNU platforms. Closed-Leaf check-in: 14d1e449 user: ben tags: ben-safe-make
2011-07-19
23:44
Update the built-in SQLite to the latest 3.7.8 alpha, for the purpose of testing SQLite. check-in: 4adc11ed user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to BUILD.txt.

2
3
4
5
6
7
8
9
10
11
12
13



14
15
16
17
18
19
20

   make

If you have an unusual unix system for which the standard Makefile
will not work, or if you want to do some non-standard options, you can
also run:

   ./configure; make

The ./configure script builds GNUmakefile which will be used in place
of Makefile.  Run "./configure --help" for a listing of the available
options.




On a windows box, use one of the Makefiles in the win/ subdirectory,
according to your compiler and environment.  If you have GCC and MSYS
installed on your system, the consider:

   make -f win/Makefile.mingw








|




>
>
>







2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

   make

If you have an unusual unix system for which the standard Makefile
will not work, or if you want to do some non-standard options, you can
also run:

   ./configure; make -f GNUmakefile

The ./configure script builds GNUmakefile which will be used in place
of Makefile.  Run "./configure --help" for a listing of the available
options.

You must explicitly specify that make should use GNUmakefile in case
your platform does not use GNU make.

On a windows box, use one of the Makefiles in the win/ subdirectory,
according to your compiler and environment.  If you have GCC and MSYS
installed on your system, the consider:

   make -f win/Makefile.mingw

Changes to GNUmakefile.in.

35
36
37
38
39
40
41



42
43
44
45
TCLSH = tclsh

LIB =	@LDFLAGS@ @EXTRA_LDFLAGS@ @LIBS@
TCC +=	@EXTRA_CFLAGS@ @CPPFLAGS@ @CFLAGS@ -DHAVE_AUTOCONFIG_H
INSTALLDIR = $(DESTDIR)@prefix@/bin
USE_SYSTEM_SQLITE = @USE_SYSTEM_SQLITE@




include $(SRCDIR)/main.mk

distclean: clean
	rm -f autoconfig.h config.log GNUmakefile







>
>
>




35
36
37
38
39
40
41
42
43
44
45
46
47
48
TCLSH = tclsh

LIB =	@LDFLAGS@ @EXTRA_LDFLAGS@ @LIBS@
TCC +=	@EXTRA_CFLAGS@ @CPPFLAGS@ @CFLAGS@ -DHAVE_AUTOCONFIG_H
INSTALLDIR = $(DESTDIR)@prefix@/bin
USE_SYSTEM_SQLITE = @USE_SYSTEM_SQLITE@

# Disable the platform check
PLATFORM_CHECK_KIND = disable

include $(SRCDIR)/main.mk

distclean: clean
	rm -f autoconfig.h config.log GNUmakefile

Changes to Makefile.

68
69
70
71
72
73
74



75

TCC.DragonFly += -DUSE_PREAD
TCC.FreeBSD += -DUSE_PREAD
TCC.NetBSD += -DUSE_PREAD
TCC.OpenBSD += -DUSE_PREAD
TCC += $(TCC.$(HOST_OS))




include $(SRCDIR)/main.mk







>
>
>

68
69
70
71
72
73
74
75
76
77
78

TCC.DragonFly += -DUSE_PREAD
TCC.FreeBSD += -DUSE_PREAD
TCC.NetBSD += -DUSE_PREAD
TCC.OpenBSD += -DUSE_PREAD
TCC += $(TCC.$(HOST_OS))

# Platform check
PLATFORM_CHECK_KIND = Makefile

include $(SRCDIR)/main.mk

Added src/check-platform.sh.





















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
#!/bin/sh

# This script checks that the default makefile is only used on platforms where it is
# positively known to work.
#
# Building on other platforms can result in subtly broken binaries.

HOST_OS=`uname -s`

# Check host OS, or whether this check has been disabled because we're running through
# the autosetup GNUmakefile.
if [ $HOST_OS == Linux ] || [ $HOST_OS == Darwin ] || [ X$1 == Xdisable ]
then
    touch bld/checked-platform.$1
else
    echo
    echo The default Makefile cannot be used on this platform.
    echo
    echo Use
    echo
    echo "   ./configure; make -f GNUmakefile"
    echo
    echo to build fossil.
    echo
    exit 1
fi

Changes to src/main.mk.

301
302
303
304
305
306
307
308



309
310
311
312
313
314
315
# using -lsqlite3.
SQLITE3_OBJ.1 = 
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
SQLITE3_OBJ.  = $(SQLITE3_OBJ.0)

EXTRAOBJ =  $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE))  $(OBJDIR)/shell.o  $(OBJDIR)/th.o  $(OBJDIR)/th_lang.o

$(APPNAME):	$(OBJDIR)/headers $(OBJ) $(EXTRAOBJ)



	$(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)

# This rule prevents make from using its default rules to try build
# an executable named "manifest" out of the file named "manifest.c"
#
$(SRCDIR)/../manifest:	
	# noop







|
>
>
>







301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
# using -lsqlite3.
SQLITE3_OBJ.1 = 
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
SQLITE3_OBJ.  = $(SQLITE3_OBJ.0)

EXTRAOBJ =  $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE))  $(OBJDIR)/shell.o  $(OBJDIR)/th.o  $(OBJDIR)/th_lang.o

$(OBJDIR)/checked-platform.$(PLATFORM_CHECK_KIND):	$(SRCDIR)/check-platform.sh
	sh $(SRCDIR)/check-platform.sh $(PLATFORM_CHECK_KIND)

$(APPNAME):	$(OBJDIR)/checked-platform.$(PLATFORM_CHECK_KIND) $(OBJDIR)/headers $(OBJ) $(EXTRAOBJ)
	$(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)

# This rule prevents make from using its default rules to try build
# an executable named "manifest" out of the file named "manifest.c"
#
$(SRCDIR)/../manifest:	
	# noop

Changes to src/makemake.tcl.

202
203
204
205
206
207
208
209



210
211
212
213
214
215
216

EXTRAOBJ = \
  $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) \
  $(OBJDIR)/shell.o \
  $(OBJDIR)/th.o \
  $(OBJDIR)/th_lang.o

$(APPNAME):	$(OBJDIR)/headers $(OBJ) $(EXTRAOBJ)



	$(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)

# This rule prevents make from using its default rules to try build
# an executable named "manifest" out of the file named "manifest.c"
#
$(SRCDIR)/../manifest:	
	# noop







|
>
>
>







202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219

EXTRAOBJ = \
  $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) \
  $(OBJDIR)/shell.o \
  $(OBJDIR)/th.o \
  $(OBJDIR)/th_lang.o

$(OBJDIR)/checked-platform.$(PLATFORM_CHECK_KIND):	$(SRCDIR)/check-platform.sh
	sh $(SRCDIR)/check-platform.sh $(PLATFORM_CHECK_KIND)

$(APPNAME):	$(OBJDIR)/checked-platform.$(PLATFORM_CHECK_KIND) $(OBJDIR)/headers $(OBJ) $(EXTRAOBJ)
	$(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)

# This rule prevents make from using its default rules to try build
# an executable named "manifest" out of the file named "manifest.c"
#
$(SRCDIR)/../manifest:	
	# noop