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
|
The following procedure is suggested for installation of Hugs on a Unix
machine. (Precompiled binaries are provided for common PC platforms,
although similar installation procedures can be used for these machines
if you have a suitable C compiler.)
Short version:
cd hugs/src/unix
./configure --prefix=$HOME
cd ..
make install
make clean
$HOME/bin/hugs $HOME/share/hugs/demos/Say
putStr (say " /Hugs")
:quit
Long version:
0) Choose a directory (or directories) for the Hugs files to go in.
In the following, we'll assume:
/usr/local/solaris/bin user executables
/usr/local/solaris/lib/hugs architecture dependent files
/usr/local/lib/hugs architecture independent files
Check that these directories have appropriate permission settings.
1) Run the configure script
On Unix (or other platform providing sh, sed and related tools):
cd hugs/src/unix
./configure --exec-prefix=/usr/local/solaris --datadir=/usr/local/lib
-- This tests the capabilities of your C compiler and OS
-- and arranges to install binaries in the directories places.
Read hugs/src/unix/INSTALL to find out about other configuration
options. Hugs specific options are listed at the end of this file.
On Windows:
Pick one of the following configurations:
msc: Microsoft Visual C++
bcc32: 32 bit Borland C
bcc16: 16 bit Borland C
djgpp2: DJGPP2
cd hugs\src\{msc,bcc32,bcc16,djgpp2}
config.bat
If you haven't used Visual C++ or Borland C from the command line
before, you might have to define some environment variables (in
autoexec.bat or using "Control Panel|System") before you can use
the compiler - check your compiler documentation.
make hugs.exe (or nmake hugs.exe with Visual C++)
If you prefer to use an integrated development environment,
run "make hugs.exe -n" to get a list of the files we compile
and add them to your project.
On another platform:
If you can't run the configure script, pick one of the Windows
configurations and use it as a basis for constructing the
following files
hugs/src/Makefile
hugs/src/options.h # Configuration options
hugs/src/config.h # Description of your machine/compiler/OS
2) Build hugs and associated files
cd ..
make
At this point, you might like to run a few tests to make sure
everything's working.
./hugs -P../lib
-- Run a few tests like 1+2, [1..], etc. Use ":quit" to exit
3) Install hugs in chosen directories
make install
(Note that the permissions of the installed files will be affected by
your "umask" setting. If you want the installed files to be world
readable, you need to set umask accordingly.)
Try a few simple tests:
/usr/local/solaris/bin/hugs
[1..10]
:quit
cat > echo <<EOF
#! /usr/local/solaris/bin/runhugs +l
> module Main(main) where
> import System(getArgs)
>
> main = do { args <- getArgs; putStrLn (unwords args) }
EOF
chmod 755 echo
./echo Hello World
Administrators of sites with multiple architectures often prefer to
install a shell script in /usr/local/bin which will select an
appropriate binary according to the architecture on which it is
run rather than a binary. Configuration should be the same as above
(use a different --bindir argument for each architecture but, if
you want, save a small amount of space by using the same --datadir)
and use a shell script like the following.
#! /bin/sh
HW_OS=${HW_OS-`/usr/local/gnu/bin/hw_os`}
BINDIR=/local/lib/Hugs1.4/$HW_OS
exec $BINDIR/hugs $*
This kind of script would also be a good place to set system-wide
default options (eg to select an editor or to switch on the
"show types" option).
4) Optionally run some regression tests
You need to have Perl 5 to run these. Depending on your machine,
these can take anywhere from 5 minutes to a couple of hours to run.
make check
-- A few spurious "errors" may be detected.
-- o print (-0.0) may print "-0.0" instead of "0.0".
-- o floatRange 0 may be "(-148,128)" (or some similar pair)
-- instead of "(-125,128)".
5) Cleanup after yourself
You can now run "make clean" to delete all machine-generated files.
If you ran "make install", you could delete the entire hugs source
tree - but you might want to keep the hugs/doc directory.
Hugs specific configuration options:
--with-readline
Use GNU readline library (to provide line editing like that in tcsh
or bash) if available.
We highly recommend this option. However, it changes Hugs' user
interface in a way that will cause every single regression test
to fail.
(On Unix, regression tests are run by "make install; make check".)
--enable-timer
Time how long each evaluation takes.
Timing is included for the purpose of benchmarking the Hugs interpreter,
comparing its performance across a variety of different machines, and
with other systems for similar languages.
It would be somewhat foolish to try to use the timings produced in this
way for any other purpose. In particular, using timings to compare the
performance of different versions of an algorithm is likely to give very
misleading results. The current implementation of Hugs as an interpreter,
without any significant optimizations, means that there are much more
significant overheads than can be accounted for by small variations in
Hugs code.
--enable-profiling
Gather statistics about heap allocation during evaluation.
Statistics are written to a file profile.hp which may be viewed
using the hp2ps program.
This option makes Hugs use much more memory and run much slower.
The ":set -d" command can be used to reduce the time overhead by
controlling the frequency with which statistics are gathered.
--with-nmake
Try to generate a Makefile that will work with Microsoft's nmake.
--disable-large-banner
Print a single-line startup banner instead of the 9 line banner.
(This option will also cause the "make check" regression tests to fail.)
--enable-TREX
Enable the Typed Record EXtension described in
A Polymorphic Type System for Extensible Records and Variants,
Benedict R. Gaster and Mark P. Jones, Technical report NOTTCS-TR-96-3,
November 1996, Department of Computer Science, University of
Nottingham, University Park, Nottingham NG7 2RD, England.
http://www.cs.nott.ac.uk/Department/Techreports/96-3.html
--with-gui
Used when generating Hugs for Windows. Only works with Borland C++
--enable-internal-prims
Enable experimental features used in hugs/lib/hugs/HugsInternals.hs
--enable-stack-dumps
Enable printing of the top and bottom few objects on the stack when
stack overflow happens. This feature is currently (Sept'97) just a
proof of concept. We welcome suggestions (and/or code) to make it
useful for people who don't have an intimate knowledge of how the
G machine operates.
--enable-debug
--enable-tag-checks
--enable-lint
For use when debugging Hugs.
--with-preprocessor
This is an experimental feature and may change in future versions.
Enable the use of a preprocessor for processing Haskell source files
before compiling them with Hugs. When configured with preprocessing
on, you can use the "-F" option to specify which preprocessor to use.
For example, if your preprocessor is in /users/JFH/bin/hscpp, you might
say
:set -F"/users/JFH/bin/hscpp"
If you have perl and gcc installed on your machine, the following
script provides a simple cpp-like preprocessor.
eval "exec perl -S $0 $*"
if $running_under_some_random_shell;
#
# Reads CPP output and turns #line things into appropriate Haskell
# pragmas. This program is derived from the "hscpp" script
# distributed with the Glasgow Haskell Compiler.
#
$Cpp = 'gcc -E -xc -traditional';
open(INPIPE, "$Cpp @ARGV |") || die "Can't open C pre-processor pipe\n";
while (<INPIPE>) {
# line directives come in flavo[u]rs:
# s/^#\s*line\s+\d+$/\{\-# LINE \-\}/; IGNORE THIS ONE FOR NOW
s/^#\s*line\s+(\d+)\s+(\".+\")$/\{\-# LINE \1 \2 \-\}/;
s/^#\s*(\d+)\s+(\".*\").*/\{\-# LINE \1 \2 \-\}/;
print $_;
}
close(INPIPE) || exit(1); # exit is so we reflect any errors.
exit(0);
Note that Hugs currently ignores the {-# LINE _ _ #-} pragmas so error
messages will refer to the wrong line numbers.
|