[GRASS-dev] User config, addons, and etc file finder
William Kyngesburye
woklist at kyngchaos.com
Mon Mar 26 13:09:54 EDT 2007
Something I've been thinking about as I created the Mac app build is
how to deal with user configuration/prefs, addon modules, and
locating files outside the main grass installation.
I'm coming from an OSX point of view, but much of this is applicable
to other platforms. And now there has been some recent discussion on
this, including an emerging need for user configuration in the new wx
gui.
The core of the issue is that with a binary installation (ie not
built from source), a non-admin user will not be able to add to the
main GRASS installation. And, it's not safe to add files, because an
update to GRASS may overwrite or delete the files that have been
added. ie a drag-n-drop installation will overwrite the whole thing.
In an OSX environment, the standard thing to do is have user addons
and configuration in their home/Library folder, and other 3rd-party
addons you want to be available to all users in a global location, /
Library. Or:
~/Library/Application Support
/Library/Application Support
The "Application Support" part could be dropped to make sure there
are no problems by having a space in its name. There shouldn't be a
problem, but I've run into random problems in the GUI.
Other platforms would have their own set of standard global and user
locations. ie ~/.grass on Linux, and somewhere in the user's
Application Data or Local Settings in Windows.
Currently, in my OSX build I use:
$HOME/Library/GRASS/$GRASS_MAJOR_VERSION.$GRASS_MINOR_VERSION
I use a Modules subdir for user installed addon modules. The global /
Library/GRASS dir is also used, but accessed thru the user dir.
Jachym suggested a GRASS env variable: GRASSRCDIR, to store the
location of this GRASS user dir. It should be set by configure, with
appropriate defaults for each platform.
Currently, much of this is easily handled by standard unix/shell
stuff, or current GRASS features:
bin - handled by GRASS_ADDON_PATH
lib - handled by [DY]LD_LIBRARY_PATH
I use this in my custom grass startup for OSX to set the extra user
and global paths. What are missing are docs and etc and some way to
configure the GUI menus without editing the installed menu files
(like GEM currently does).
- docs - tricky - adding links to the installed GRASS docs to a
user's home hardwires it to that user. I tried using ~/ in the
links, but this only works in Safari. Firefox and probably other
browsers don't understand (probably the right way) ~ as $HOME.
In OSX the only way I could get a dynamic user help was to use the
OSX Help Viewer. Windows might have something similar that could be
used, but I don't know about Linux systems.
- etc - for modules and user scripts that have support files that
should be stored in etc/. A function should be added to libgis to
locate a file in any of the defined extra locations. ie ~/Library/
GRASS/6.3/Modules/etc, or $GRASSRCDIR/Modules/etc. It should be
available to scripts as well.
Something like G_find_file_etc("module_data_file"). If I can wrap my
head around "real" C programming (as opposed to just tinkering/
tweaking), I might try taking the G_find_file() as a starting point
and see if I can work this out.
- menu config - the gui would have to load user and global menu
files, in addition to its builtin menu file. Adding to those menus
would have to be handled by the addon installer, or even have the GUI
provide a menu edit feature to let the user easily customize their
personal menu.
Currently I have the OSX startup build a menu file from available
addons, it's just waiting for a TclTk GUI update to be able to load
these.
- GEM - Currently it's setup to install all files into the GRASS
binary space. GEM should be expanded to install in the external
location(s). Preferrably by default.
- Existing files - to be consistent and tidy, existing config/pref
files could be moved into this (and unhidden, on OSX and Windows at
least) - .grassrc6, .grass_bashrc, GIS_ERROR_LOG. Or moved to more
appropriate locations, such as (for OSX) ~/Library/Preferences and ~/
Library/Logs, but this would need more env variables for the extra dirs.
-----
William Kyngesburye <kyngchaos at kyngchaos.com>
http://www.kyngchaos.com/
"We are at war with them. Neither in hatred nor revenge and with no
particular pleasure I shall kill every ___ I can until the war is
over. That is my duty."
"Don't you even hate 'em?"
"What good would it do if I did? If all the many millions of people
of the allied nations devoted an entire year exclusively to hating
the ____ it wouldn't kill one ___ nor shorten the war one day."
<Ha, ha> "And it might give 'em all stomach ulcers."
- Tarzan, on war
More information about the grass-dev
mailing list