On 22/12/2013, at 6:20 AM, Shayne Fletcher wrote:

> Good experience building Felix from source today.

> The only potentially "worrying" messages I saw during the build process were
> 
>   sh: 1: gcc-4.8: not found
>   Guess --pkg=build_flx_rtl_gcc_linux
> 
> but it seemed not be fatal.

The build script attempts to run gcc-4.8. If there's no error, it knows it has 
gcc-4.8.
If there's an error, it assumes gcc < 4.8. It then chooses a toolchain based 
on this information. 

This is a "quick fix" to the problem that Felix requires 

        "-fno-aggressive-looop-optimizations"

with gcc-4.8 and above. A side effect of the hackery is that it is applied to 
clang
as well. Unlike gcc, clang warns about bad switches but it isn't fatal.

Because of poor design decisions by gcc team, it is not possible to use flags
for gcc without knowing if they're supported. So if a new flag is used it cannot
be "backported" by just using it in a script, you have to calculate if the flag
is supported, and the only ways to do that are 

        (a) suck it and see.
        (b) RTFM + know version number (suck it and see)

For warning flags and optimisations, it should be possible to apply unknown 
flags
precisely to allow backporting without requiring dynamic testing.

For Felix to deal with this issue better, something a bit better than a hack
for a particular version of gcc is required. However for the moment the key
thing is to be able to build and install felix because that is required to
properly build upgrades: you have to have Felix working to upgrade it
from source because the build tools are written in Felix.

> On termination I was able to compile and execute a hello_world with no 
> problems.
> 
>   $cat > hello.flx
>   println$ "Hello world!\n";
>   ^D
>   $flx -o hello hell_world.flx&&./hello
>   Hello world!

This cannot work for multiple reasons, not the least of which is that
you created "hello.flx" but then tried to run "hell_world.flx" :)

If it had existed you would have created and run a shared library
called "hello", and the ./hello command would fail. You need the -c switch
to stop flx running the result of a compilation and you need --static
to make an executable.
 
> 
> Issues:
> 
>   - The build documentation (initial documentation section) states that after 
> make install, "the webserver should be running on port 1116"

Right. Fixed in repository. 

"webserver" is just a program, so you can just run it. It has two switches:

        --port=9999

selects the port. The default is 1234. 

        --root=install-directory

is used to set the webserver root. For felix website this has to point at an 
installation
directory, i.e. /usr/local/lib/felix/felix-latest which it does by default.

There are some helper scripts in the repository directory "misc".
These include Vim and Emacs syntax highlighting and

        felixweb.conf

which is used on Unix systems by placing it in 

        /etc/init

I think. This will start the webserver when your machine boots up. You WILL
need to edit this file to suit yourself.You can then say:

        stop felixweb
        start felixweb

I think you have to be root to do that.

On OSX you use instead

        felixweb.plist

and the commands which you put in your $HOME directory in the right place
for launchctl, again you may need to edit, and you can use

        launchctl start felixweb
        launchctl stop felixweb

to start and stop the webserver.

It's up to you to decide if you want to start the webserver on boot up, or 
whatever.


>   - Looks like at the end of the build/install its intended that tests are 
> executed but that didn't happen because,
> 
>     build/release/host/bin/flx --test=build/release --expect 
> --usage=prototype --indir=test/regress/rt --regex='.*\.flx'
>     Error opening dir
>     Processing 0 files
> 
>    - FWIW ~/project/felix$ ls build/release/share/src/test/regress/rt/*.flx 
> shows there not to be an flx files there

Well thats correct. The test directory is created by the test script at

        test/regress/rt

in the current directory from a bunch of *.fdoc files in 

        build/release/share/src/test/regress/rt

which contain both the *.flx of the test as well as the *.expect of the results.
If this didn't work, flx_tangle didn't work. This is most likely because the
build didn't succeed.

Once you have "flx" in build/release/host/bin you can run 

        make bootstrap

and that should do a complete clean rebuild. This is VERY SLOW, but its clean.

Most of the other targets are playthings for me as a developer. Because
the build is bootstrapped, different processes are required for when I change
ordinary bits of Felix and the build tools themselves.


--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to