[M3devel] ROOT
jay.krell at cornell.edu
jay.krell at cornell.edu
Fri Jul 3 03:57:38 CEST 2009
Ps this would also obsolete m3overrides, providing similar but better
functionality, no need to encode the source structure in all those
little extra files.
- Jay (phone)
On Jul 2, 2009, at 6:50 PM, jayk123 at hotmail.com wrote:
> In particular I would argue that the directory layout should be made
> right at link time, into an alternate root. That alternate root
> possibly be prepopulated with links to or copies of the current good
> shared repository. Or the compiler should have notion of multiple
> roots to probe. However running the stuff implies hardlinks that are
> broken upon write. This scheme works better if source/interfaces are
> not needed in repository, just to cut down on the size. Are shipped
> source/interfaces used by compiler, or just the .m3exports/.m3x
> files? Anyway this is all thinking for a future release, not this
> year. 'ship' becomes just recursive copy or move.or change roots,
> plus maybe shipping source/interfaces too, kind of a wart.
>
> - Jay (phone)
>
> On Jul 2, 2009, at 6:36 PM, jayk123 at hotmail.com wrote:
>
>> The system used/uses symlinks under the covers. I don't think cm3
>> historically supported shared libs on hpux probably because the
>> bundled compiler does not. Granted my exposure to hpux is only in
>> recent times. 'standalone' as you define is useful but I think that
>> reason isn't applicable to anything 'within cm3 itself'. Maybe more
>> to say later. In particular I think this design we have is flawed.
>> It's goals are good but can be better achieved slightly
>> differently. In particular the unshipped and shipped directory
>> layout should be 'the same' but just differently rooted. Not in
>> this release though. That let's $origin work better, among other
>> advantages. Related and possibly solved same IMHO we don't
>> adequately separate source and output - it should separate across
>> multiple packages not just one at a time. But again, not on this
>> release.
>>
>> - Jay (phone)
>>
>> On Jul 2, 2009, at 4:14 PM, "Randy Coleburn" <rcolebur at scires.com>
>> wrote:
>>
>>> I thought it might be helpful to highlight some of what I've
>>> always understood as the design for the CM3 package system. So, I
>>> pulled out my old documentation from Critical Mass as reference.
>>>
>>> I offer the following information to see if this discussion thread
>>> concurs and/or wants to make any changes going forward, esp. as we
>>> prepare for a new CM3 release.
>>>
>>> 1. CM3 takes care to separate source and derived files because
>>> doing so (a) isolates source files for backup, revision control,
>>> and searching; and (b) enables sharing the same source tree across
>>> operating systems and architectures, without confusing object
>>> files from different platforms.
>>>
>>> 2. Each package resides in a directory, with sources in a source
>>> subdirectory ("src"), and generated files in a derived
>>> subdirectory named to denote the platform on which the sources
>>> were built, e.g., "ALPHA_OSF", "HPPA", "NT386", "SPARC", etc.
>>>
>>> 3. Each developer can have multiple private packages, each stored
>>> wherever desired in the filesystem. A private package named "foo"
>>> would have the following filesystem structure:
>>> +---foo
>>> | +---src
>>> | +---NT386
>>> | +---HPPA
>>> | \---(...)
>>>
>>> 4. For each CM3 installation, there is one public package
>>> repository that is available to all developers. When you ship a
>>> [private] package, you make that package available to other
>>> packages (and developers) via this public package repository. The
>>> idea is that as a developer you would test your package in your
>>> private repository before shipping it to the public repository.
>>> (Sometimes m3overrides were needed when testing several related
>>> private packages before shipping them.)
>>>
>>> 5. A typical CM3 installation is rooted at a given point in the
>>> file system and contains the following folder structure:
>>> CM3
>>> +---bin
>>> +---doc
>>> | +---help
>>> | +---pics
>>> | +---reference
>>> | +---src_reports
>>> | \---tutorial
>>> +---examples
>>> +---lib
>>> +---pkg
>>> | +---bitvector
>>> | | +---src
>>> | | +---NT386
>>> | | +---HPPA
>>> | | \---(...)
>>> | +---cm3ide
>>> | | +---src
>>> | | +---NT386
>>> | | +---HPPA
>>> | | \---(...)
>>> | +---(...)
>>> | | +---src
>>> | | +---NT386
>>> | | +---HPPA
>>> | | \---(...)
>>>
>>> 6. In the past, the environment variable INSTALL_ROOT pointed to
>>> the root of the CM3 tree in the file system. I think this
>>> variable is ambiguously named and that we should change it to
>>> CM3_INSTALL_ROOT. Using this approach, if one had multiple CM3
>>> installations (perhaps for different releases), one would simply
>>> need to change the CM3_INSTALL_ROOT variable to point to the
>>> desired installation for use at any particular point in time. For
>>> this to work, all other variables cue off of CM3_INSTALL_ROOT. I
>>> know that for the old cm3.cfg file, this was indeed the behavior.
>>> Then, if someone had a special situation, they could override the
>>> "cueing" behavior for any particular variable simply by changing
>>> its definition on the fly.
>>>
>>> 7. Now, I also understand some (but not all) of what Jay is
>>> saying about the library paths. Back in the old cm3 v4.1 days, I
>>> had both HPPA and NT386 derived files for the same set of
>>> sources. For Windows, the shipped exe and dll files went into the
>>> public repository and you needed to have the CM3/bin folder on
>>> your path. For private exe and dlls, you typically just ran them
>>> out of the private package's derived NT386 folder. On HPPA, there
>>> were some places in the file system that contained static
>>> libraries and shared libraries, plus then you had the libraries
>>> built using CM3. Again, the CM3 libraries went to the public
>>> repository and there were environment variables to facilitate
>>> finding the rest, including LD_LIBRARY_PATH. Now, from what Jay
>>> is saying, the variety of operating environments seems to cloud up
>>> all this. I know I'm a bit rusty wrt all the various unix
>>> variants out there, but I recall that v4.1 worked out-of-the-box
>>> for both NT386 and HPPA with respect to all this library path
>>> stuff and I didn't have to make any symbolic links nor any hard
>>> links to make it work. IMO, links are bad and too easily broken.
>>>
>>> 8. As for "build_standalone", I know there are various build/
>>> bootstrap reasons why some parts of CM3 had to be built this way.
>>> But, for me, I've often used this feature for utility-type
>>> programs to make it easier to distribute them. I can simply
>>> distribute the one executable file without having to worry that
>>> the target system might not have the right DLLs or the right
>>> shared libraries in the right locations. For production code,
>>> I've always built an installation program or an installation
>>> script that installed all my executables and shared libraries in a
>>> folder structure rooted at a particular point chosen by the end
>>> user. Then, my programs always launched and used relative paths
>>> from the install location to find everything they needed.
>>>
>>> Hope this info is helpful.
>>>
>>> Regards,
>>> Randy Coleburn
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090702/688dbec8/attachment-0002.html>
More information about the M3devel
mailing list