From jannis at xfce.org Thu Sep 21 11:46:30 2006 From: jannis at xfce.org (Jannis Pohlmann) Date: Thu, 21 Sep 2006 11:46:30 +0200 Subject: [Installit-dev] setup.py installation In-Reply-To: <1146430537.8024.87.camel@localhost.localdomain> References: <1146425639.8024.53.camel@localhost.localdomain> <20060430220049.06d41c74.info@sten-net.de> <1146428823.8024.71.camel@localhost.localdomain> <20060430223648.7957f2a2.info@sten-net.de> <1146430537.8024.87.camel@localhost.localdomain> Message-ID: <20060921114630.e534df0b.jannis@xfce.org> On Sun, 30 Apr 2006 22:55:36 +0200, Stefan Stuhr wrote: > s?n, 30 04 2006 kl. 22:36 +0200, skrev Jannis Pohlmann: > > On Sun, 30 Apr 2006 22:27:03 +0200, Stefan Stuhr wrote: > > > Regarding icons, what about using GtkIconTheme? I have experience > > > with a lot of memory leaks with PyGTK and pixbufs[1], however, so > > > don't overdo it. > > > > You still need to define the icon (and its path) you want to > > register to the icon theme in order to be able to look it up later. > > > > > And regarding other resources, you could put them in > > > share/installit/, e.g. share/installit/xml/. It shouldn't be too > > > hard to find them again, it seems that the binary always is in > > > bin/. > > > > Well, of course they would be put into share/i2t/, but the problem > > is *which* share/ we have put it. We can't search the whole > > filesystem for a share/i2t. So we have to remember the data dir > > during the setup in order to access it directly later. > > Here's the smart thing. If $prefix is /usr/local, then the main > "binary", i2t, will be in /usr/local/bin/. In that case, share/i2t/ > will be in /usr/local/share/i2t/. > On the other hand, if $prefix is /opt/xfce, then the i2t "binary" will > be in /opt/xfce/bin. And share/i2t/ will be in /opt/xfce/share/i2t/. > > So, all you have to do is to have som mechanism in i2t to resolve > symbolic links in a safe way. Something like this: > ---------- 8< ---------- > # Return the real path if possible > def GetRealPath(filepath): > history = [] > filepath = os.path.normcase(os.path.abspath(filepath)) > while os.path.islink(filepath): > history.append(filepath) > old_filepath = filepath > filepath = os.readlink(filepath) > filepath = \ > os.path.normcase(os.path.normpath(os.path.join(os.path.dirname > (old_filepath), filepath))) if filepath in history: > return history[0] > return filepath > ---------- >8 ---------- > It may not be necessary with the "history"-part, but you can use it > just in case. > > Then you can use > GetRealPath(sys.argv[0]) > to get the real path to the i2t file, that you know is in $prefix/bin. > It shouldn't be too hard to find $prefix/share/i2t/ from there. This has been a long-time issue but it has been solved about two weeks ago. All files are installed to the default Python path (e.g. /usr/lib/python2.4/site-packages/i2t/). It's the easiest way, I think. Regards, Jannis