-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
159 lines (117 loc) · 5.61 KB
/
README
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
Build instructions on Linux/Unix systems
========================================
Requirements
------------
* Basic Unix tools: awk, grep, sed, perl
* The autotools: libtool, automake (version 1.9 or later), autoconf (version
2.59 or later)
* A recent gcc C++ compiler, such as g++-3.3 or later
* flex and bison; on Mac OS X < 10.5 (Leopard) using fink, the flex-devel
package must be installed.
* The readline library (libreadline5-dev or the like)
* pkg-config for library dependency tracking (that requirement may be dropped
later on)
* for any tests, the diagnostics library is required
Building from a fresh svn checkout
----------------------------------
First, get some auto-generated files (including configure) built using
autoreconf -i
Next, you need to run the configure script. We recommend that you perform a parallel (vtree)
build, i.e., from your build directory, you should issue something like this:
sourcepath/configure --prefix=installprefix
Next, run
make
and then
make install
To use a version of diagnostics installed on your system in the standard
location of and build in audit level, add
--with-diagnostics=,audit
If you intend to build with CXXFLAGS="-Wall -Werror -pedantic", which is
recommended, you need to add -Wno-long-long and, with recent versions of GCC,
-Wno-deprecated to work around use of non-standard hash maps.
Re-compiling later on
---------------------
Run
make
either in the top-level directory to build all parts or in any
subdirectory to rebuild the respective subtree only (altogether with
all their dependencies in other subtrees).
If new files have been added, the Makefile.am scriptlets are updated
automatically by config/update-makefiles.pl as appropriate. Thereby any new .cpp
or .hpp file is added to the appropriate variables. If a test (named .t.cpp) has
been added, the appropriate variables are set to have the test run upon the next
make check. If necessary, also a libtool convenience library entry is created.
If a new directory has been added, its name must be added to the
SUBDIRS variable in Makefile.am of the parent directory. Then, an initial
Makefile.am will be added to the subdirectory upon the next run
update-makefiles.pl. This Makefile.am fragment will then also be populated, if
there are any .hpp or .cpp files in the new directory. Furthermore, configure.ac
is updated to contain an entry of <DIRECTORY>/Makefile. This changes causes the
(necessary) re-run of configure.
Finally, the libraries for each executable must be added manually
to the respective LDADD variable in the corresponding Makefile.am
file.
Cleaning the source tree
------------------------
Usually, you will want to do a
make clean
in the src directory. However, make clean leaves any generated untouched. That is: Makefile,
Makefile.in, configure, and *.cc files generated by flex and bison from the
parser. To clean these as well, run
make maintainer-clean
Building the documentation
--------------------------
The documentation may be built using
make doxygen-doc
in the src directory and is then found in doc/dx/
Builds for debugging or testing
-------------------------------
This requires the diagnostics library to be available and detected by configure.
In that case, the following additional builds may be performed from within any
source (sub-)directory:
make audit
make debug
make prod (equivalent to make)
to build at the respective diagnostics levels. Note that the results
of the audit and debug are placed in the directory build/audit,
respectively build/debug, whereas make prod builds directly in the
source directory. If make debug or make audit fails while running configure with
an error: source directory already configured, purge the build/ directory using
rm -r build/ and run the make command again.
Regression tests are run using
make audit-check
make debug-check
make prod-check (equivalently, make check)
The audit and debug builds enable the diagnostics annotations which
are no-ops in the prod builds. Furthermore, at audit and debug level,
debug information is included (i.e., with gcc the -g option is
enabled).
The annotations generate log files which are located in the test/
subdirectory. This directory also contains test data which is required
for regression testing. The binaries attempt to access a test/
directory within their working directory---thus you should start the
binaries resulting from audit and debug builds and the regression
tests in general from the top-level source directory (naturally, make
(audit|debug|prod)-check starts in the tests from the top-level source
directory, independently from where you invoke it).
Building a distributable source .tar.gz
---------------------------------------
Performing
make dist
in the top level source directory yields an fshell2-<version>.tar.gz package that
may be redistributed.
Other make targets
------------------
Any other target defined by automake (cf. info automake) retains its default
behavior and may be used as well.
Important configure parameters
------------------------------
The only non-standard configure parameters are:
* --enable-install-headers: This is passed on to update-makefiles.pl to enable
(or disable) the code that sets the location headers would be installed in. By
enabling this, headers would be installed into a similar directory structure
upon make install, otherwise all of them are put in a single directory. This
option should always be enabled.
* --with-dignostics=<path>,<level>: Enable diagnostics and set the path to the
libraries and headers (without the /lib, respectively, /include/diagnostics
part); Furthermore the default build level is set, this should be "prod".