I'm back to thinking on architecture, esp. regarding how to install
packages. The current system is

1. /usr/local/lib/felix -- contains all Felix shared stuff

2. Within that, one directory per version, with a link to
"felix-latest" for some flexibility.

3. Within that two dirs:

        share -- read only sources
        target(s) -- one or more targets

The target "host" is required, but you can have others.
Targets contain:

        bin, lib : machine binary code
        config: package info including mappings to 3rd party libs 
        lib/rtl: configured C++ headers and machine binary
        lib/plat: platform specific Felix code

4. $HOME/.felix -- transient cache
Also some config data.


It's not entirely consistent that the targets live in the same place
as the share directory.  It would be more consistent if the targets
could be anywhere, you point flx etc at a target, and the target
points to the shared sources that built it and are needed for
compilation (or documentation).

The cache also has two problems. First, if you change targets
it gets rebuilt from scratch. Second, in theory it doesn't support
more than one process. Multiple users are supported because
there's one cache per account. If the cache had a branch for
each target a lot of the rebuilding would go away (however the
main sufferer here is as a developer).

Using the target as an additional qualifier makes some sense
but the file names would be horrendous. You'd have 

        $HOME/.felix/cache/target/userfile

which looks OK until you realise that "target" and "userfile"
will BOTH be absolute filenames so the actual name of a file
in the cache will be:

        /users/fred/.felix/users/fred/host/users/fred/filename.o

for example .. the name contains the top level /users 3 times :)


The overall structure makes a local felix target unusable.
Assuming /usr/local/lib/felix/... requires root access
and ordinary user has to use a COPY of the share directory
just so the target they're building is in a writable location.

Worse .. there's no deemed place for add on packages.
These would tend to be independent of the core Felix.
So the shared source should probably live in

        ../felix/packages

If the package has binaries or C++ headers,
where would they go? They're target dependent.
And so the *.fpc config stuff is too.


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




------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&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