Changed tock to use autoconf/automake for its build process

The old Makefile has been removed, and configure.ac and Makefile.am added in its place, along with the four files (AUTHORS, ChangeLog, NEWS and README) that autoconf requires you to have (all currently blank).  tock and tocktest can now be compiled, but the rules for cgtests and compiling the C and C++ files are currently missing.
This commit is contained in:
Neil Brown 2007-10-08 17:02:03 +00:00
parent 5b10466e68
commit 7cee4e46fc
7 changed files with 141 additions and 105 deletions

0
AUTHORS Normal file
View File

0
ChangeLog Normal file
View File

105
Makefile
View File

@ -1,105 +0,0 @@
targets = tock tocktest
all: $(targets)
sources = $(wildcard *.hs frontends/*.hs backends/*.hs transformations/*.hs common/*.hs) $(patsubst %.x,%.hs,$(wildcard frontends/*.x))
builtfiles = $(patsubst %.x,%.hs,$(wildcard frontends/*.x))
%.hs: %.x
alex $<
# profile_opts = -prof -auto-all
ghc_opts = \
-fglasgow-exts \
-fallow-undecidable-instances \
-fwarn-unused-binds \
-fwarn-unused-imports \
-fwarn-type-defaults \
-icommon -itransformations -ifrontends -ibackends \
$(profile_opts)
tock: $(sources)
mkdir -p obj
ghc $(ghc_opts) -o tock --make Main -odir obj -hidir obj
tocktest: $(sources)
mkdir -p obj
ghc $(ghc_opts) -o tocktest -main-is TestMain --make TestMain -odir obj -hidir obj
CFLAGS = \
-O2 \
-g -Wall \
-std=gnu99 -fgnu89-inline \
`kroc --cflags` `kroc --ccincpath`
CXXFLAGS = -I. -O2 -ggdb3 -Wall
%x.tock.cpp: %.rain tock
./tock -v --backend=cppcsp --frontend=rain -o $@ $<
indent -nut -bli0 -pcs $@
%x: %x.tock.o tock
g++ $@.tock.o -pthread -lcppcsp2 -o $@
%.tock.c: %.occ tock
./tock -v -o $@ $<
indent -kr -pcs $@
%.tock.post.c: %.tock.c tock
$(CC) $(CFLAGS) -S -o $(patsubst %.c,%.s,$<) $<
./tock -vv --mode=post-c -o $@ $(patsubst %.c,%.s,$<)
%: %.tock.o %.tock.post.o tock_support.h kroc-wrapper-c.o kroc-wrapper.occ
kroc -o $@ kroc-wrapper.occ $< $(patsubst %.o,%.post.o,$<) kroc-wrapper-c.o -lcif
cgtests = $(wildcard cgtests/cgtest??.occ)
cgtests_targets = $(patsubst %.occ,%,$(cgtests))
get-cgtests:
svn co https://subversion.frmb.org/pubsvn/cgtests/branches/tock cgtests
all-cgtests: $(cgtests_targets)
clean-cgtests:
rm -f cgtests/cgtest?? cgtests/*.tock.*
#Haddock does allow you to customise the description section of a file, but only with more Haskell comments
#Since I want to use an HTML description (with links to SVG using object tags) I have to perform the following hack
#to use my own custom HTML description. Fixes to make the hack nicer are welcome :-)
haddock:
@mkdir -p doc
@echo "putmycustomdocumentationhere" > .temp-haddock-file
haddock -o doc --html -p .temp-haddock-file -t Tock $(filter-out frontends/LexOccam.hs frontends/LexRain.hs,$(sources))
cp docextra/*.svg doc/
@rm .temp-haddock-file
@grep -B 10000 putmycustomdocumentationhere doc/index.html | sed "s/putmycustomdocumentationhere//" > doc/index.html-2
@cat docextra/description.html >> doc/index.html-2
@grep -A 10000 putmycustomdocumentationhere doc/index.html | tail -n +2 >> doc/index.html-2
@rm doc/index.html
@mv doc/index.html-2 doc/index.html
clean:
rm -f $(targets) $(builtfiles) obj/*.o obj/*.hi
#This generates the ASTXML module, which is not currently used anywhere in Tock.
#It requires the HaXml modules (1.13.x or earlier), and the DrIFT preprocessor, urls:
# http://www.cs.york.ac.uk/fp/HaXml/
# http://repetae.net/~john/computer/haskell/DrIFT/
#I had to exclude a few other definitions from the imports because AST has entries like True,
#and we cannot get DrIFT to import AST qualified. The alternative would be to append the
#instances from DrIFT to AST.hs itself, but I didn't want to do that just yet:
common/ASTXML.hs: common/AST.hs common/Metadata.hs
echo -e "module ASTXML where\n" > common/ASTXML.hs
echo -e "import AST\n" >> common/ASTXML.hs
echo -e "import Metadata\n" >> common/ASTXML.hs
echo -e "import Text.XML.HaXml.Haskell2Xml hiding (Seq, TagName, Name, Plus, Choice)\n" >> common/ASTXML.hs
echo -e "import Prelude hiding (True,False)\n" >> common/ASTXML.hs
cd common && DrIFT -r AST.hs >> ASTXML.hs
cd common && DrIFT -r Metadata.hs >> ASTXML.hs
# Don't delete intermediate files.
.SECONDARY:

59
Makefile.am Normal file
View File

@ -0,0 +1,59 @@
AM_CFLAGS = @gnu89_inline@ -O2 -g -Wall `kroc --cflags` `kroc --ccincpath`
AM_CXXFLAGS = -O2 -g -Wall -ggdb3 -I.
GHC_OPTS = \
-fglasgow-exts \
-fallow-undecidable-instances \
-fwarn-unused-binds \
-fwarn-unused-imports \
-fwarn-type-defaults \
-icommon -itransformations -ifrontends -ibackends
tock:
@MKDIR_P@ obj
ghc $(GHC_OPTS) -o tock --make Main -odir obj -hidir obj
#The order of the -main-is and --make flags is important here:
tocktest:
@MKDIR_P@ obj
ghc $(GHC_OPTS) -o tocktest -main-is TestMain --make TestMain -odir obj -hidir obj
frontends/LexOccam.hs: frontends/LexOccam.x
alex frontends/LexOccam.x
frontends/LexRain.hs: frontends/LexRain.x
alex frontends/LexRain.x
BUILT_SOURCES = frontends/LexOccam.hs frontends/LexRain.hs
CLEANFILES = $(BUILT_SOURCES)
tock_SOURCES = transformations/SimplifyExprs.hs transformations/SimplifyTypes.hs
tock_SOURCES += transformations/Unnest.hs transformations/UsageCheck.hs transformations/SimplifyProcs.hs
tock_SOURCES += frontends/PreprocessOccam.hs frontends/ParseRain.hs frontends/StructureOccam.hs
tock_SOURCES += frontends/ParseOccam.hs frontends/RainTypes.hs frontends/RainPasses.hs frontends/ParseUtils.hs
tock_SOURCES += frontends/LexOccam.x frontends/LexRain.x
tock_SOURCES += common/Pass.hs common/TreeUtil.hs common/Intrinsics.hs common/EvalLiterals.hs
tock_SOURCES += common/Pattern.hs common/Errors.hs common/ShowCode.hs common/PrettyShow.hs
tock_SOURCES += common/EvalConstants.hs common/Utils.hs common/CompState.hs common/Types.hs
tock_SOURCES += common/Metadata.hs common/AST.hs
tock_SOURCES += backends/TLP.hs backends/BackendPasses.hs backends/AnalyseAsm.hs
tock_SOURCES += backends/GenerateC.hs backends/GenerateCPPCSP.hs
tock_SOURCES += Main.hs
tocktest_SOURCES = $(tock_SOURCES)
tocktest_SOURCES += transformations/PassTest.hs transformations/UsageCheckTest.hs
tocktest_SOURCES += backends/GenerateCTest.hs backends/BackendPassesTest.hs
tocktest_SOURCES += common/TestUtil.hs common/CommonTest.hs
tocktest_SOURCES += frontends/ParseRainTest.hs frontends/RainPassesTest.hs frontends/RainTypesTest.hs
tocktest_SOURCES += TestMain.hs
#The programs to actually build:
bin_PROGRAMS = tock
noinst_PROGRAMS = tocktest
clean-local:
rm -f obj/*.o obj/*.hi
rmdir obj

0
NEWS Normal file
View File

0
README Normal file
View File

82
configure.ac Normal file
View File

@ -0,0 +1,82 @@
AC_INIT([Tock],[0.0.1],[tock-discuss@kent.ac.uk],[tock])
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
#Store the mkdir -p command:
AC_PROG_MKDIR_P
#Check the user has specified a valid srcdir
AC_CONFIG_SRCDIR(Main.hs)
#Find the C and C++ compilers
AC_PROG_CC
AC_PROG_CXX
ccsp_kroc_available=true
#Sets "ac_cv_prog_cc_c99" to "no" if C99 is not supported
AC_PROG_CC_C99
if test "x$ac_cv_prog_cc_c99" = "xno"; then
AC_MSG_WARN([C99 support not found; output from the C backend will not compile on this machine])
ccsp_kroc_available=false
fi
#Check that they have alex, GHC, kroc, and the CCSP headers:
AC_CHECK_PROG([HAVE_GHC],[ghc],[true],[false])
if test "x$HAVE_GHC" = "xfalse"; then
AC_MSG_ERROR([ghc not found])
fi
AC_CHECK_PROG([HAVE_ALEX],[alex],[true],[false])
if test "x$HAVE_ALEX" = "xfalse"; then
AC_MSG_ERROR([alex not found])
fi
AC_CHECK_PROG([HAVE_KROC],[kroc],[true],[false])
if test "x$HAVE_KROC" = "xfalse"; then
AC_MSG_WARN([kroc not found; you will not be able to compile output from the C backend on this machine])
ccsp_kroc_available=false
fi
AC_LANG(C)
AC_CHECK_HEADER([cifccsp.h],[HAVE_CIFCCSP=true],[HAVE_CIFCCSP=false])
if test "x$HAVE_CIFCCSP_H" = "xfalse"; then
AC_MSG_WARN([cifccsp.h not found; you will not be able to compile output from the C backend on this machine])
ccsp_kroc_available=false
fi
#Using AC_CHECK_HEADER for the C++CSP file dies because autoconf attempts to compile it in a C program, which doesn't like the C++.
#Therefore I just test it using the preprocessor:
AC_LANG(C++)
AC_CHECK_HEADERS([cppcsp/cppcsp.h],[HAVE_CPPCSP=true],[HAVE_CPPCSP=false])
if test "x$HAVE_CPPCSP_H" = "xfalse"; then
AC_MSG_WARN([cppcsp/cppcsp.h not found; you will not be able to compile output from the C++ backend on this machine])
cppcsp_available=false
fi
#Warn them if neither backend is available:
if test "x$cppcsp_available$ccsp_kroc_available" = "xfalsefalse"; then
AC_MSG_WARN([No working backends: Code from neither the C nor C++ backend will compile on your machine])
fi
#Check whether their compiler supports the -fgnu89-inline flag:
AC_LANG(C)
AC_MSG_CHECKING([whether -fgnu89-inline flag is accepted])
CFLAGS="-fgnu89-inline"
AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ ]]),
AC_MSG_RESULT([yes])
gnu89_inline=-fgnu89-inline
,
AC_MSG_RESULT([no])
gnu89_inline=
)
AC_SUBST(gnu89_inline)
AC_SUBST(ccsp_kroc_available)
AC_SUBST(cppcsp_available)
AC_SUBST(MKDIR_P)
AC_OUTPUT(Makefile)