[CMake] Fwd: how to install files outside /usr in rpm?

Eric NOULARD eric.noulard at gmail.com
Mon May 12 12:01:35 EDT 2008


Le Mon, 12 May 2008 15:12:06 +0200,
Erik Sjölund <erik.sjolund at sbc.su.se> a écrit :

> On Sat, 2008-05-10 at 13:40 +0200, Eric Noulard wrote:
> > 2008/5/7 Timenkov Yuri <ytimenkov at parallels.com>:
> > 
> > > Also, bunch of problems with building from non-root account, can
> > > be solved by setting CPACK_SET_DESTDIR option.
> > 
> > You are right and I think we can make this the default behavior for
> > CPäckRPM.
> > 
> > I did file a bug+patch for this:
> > http://public.kitware.com/Bug/view.php?id=7000
> > 
> 
> Following that link, there is a nice example of installing files
> outside /usr in an rpm.
> 
> esjolund at otto:/tmp/y$ rpm -qlp /tmp/y/myscript-1.0.rpm 
> /opt
> /opt/sbin
> /opt/sbin/myabsolutescript
> /usr
> /usr/local
> /usr/local/sbin
> /usr/local/sbin/myscript
> 
> But if I have an additional requirement that a normal user should be
> able to install the software in his home directory like this,
> 
> cmake -DCMAKE_INSTALL_PREFIX=/home/erik /tmp/myscript-1.0-src && make
> && make install

 
CMAKE_INSTALL_PREFIX is only used for file which are not installed
using "absolute path" (myscript in the example) and this is the
wanted/expected behavior.

However you can relocate the installation using DESTDIR with make
install (just as CPack does)

Just replace your:

make install

with 

DESTDIR=/home/erik make install

Note that DESTDIR will be prepend for ALL installed file so
you may prefer to set INSTALL_PREFIX as ""

cmake -DCMAKE_INSTALL_PREFIX="" /tmp/myscript-1.0-src  && make &&
DESTDIR=/home/erik make install


> 
> I get the error:
> 
> ----------
> CMake Error at cmake_install.cmake:40 (FILE):
>   file cannot create directory: /opt/sbin.  Maybe need administrative
> privileges.
> ----------
> 
> Is there a way to a the same time fullfill these needs?
> * the need to install files outside /usr in an rpm 

The question is do you need BOTH absolute and relative (to
 CMAKE_INSTALL_PREFIX) installed file in your project.

> * the need for a non-root user to be able to install the software in
> his home directory?

Use either CMAKE_INSTALL_PREFIX if your project does not have
absolute path file install or use DESTDIR if it does.

If you use both your will have relative path installed file
which will be in:

<DESTDIR>/<CMAKE_INSTALL_PREFIX>/relativefile

whereas absolute path installed file will be in:

<DESTDIR>/abolute/path/file

--
Erk



More information about the CMake mailing list