From: Henrik /K. <kaa...@us...> - 2008-09-17 16:11:32
|
Michael Banck wrote: > On Tue, Sep 16, 2008 at 10:54:11PM -0700, Adam Williamson wrote: > >> On Tue, 2008-09-16 at 22:51 -0700, Adam Williamson wrote: >> >>> On Wed, 2008-09-17 at 07:18 +0200, Henrik /KaarPoSoft wrote: >>> >>> >>>> I have not been able to find anything regarding DESTDIR in the CMake >>>> manual, and I am certainly no expert on CMake and CPack. >>>> However, as far as I can see, the path which gets hardcoded into >>>> OpenSync is the same as the path where the files are put: >>>> ${CMAKE_INSTALL_PREFIX}. >>>> So if you build in a temp dir, as far as I can see, the path of the temp >>>> dir gets hardcoded into OpenSync which is not what we want. >>>> > > >>> so it's using CMAKE_INSTALL_PREFIX . >>> >> Oh - but then our %makeinstall_std does: >> >> make DESTDIR=%buildroot install >> >> where %buildroot is the temporary installation path. So we expect a >> cmake-based project to let us use CMAKE_INSTALL_PREFIX during the build >> stage to specify the location where the files will actually end up on >> user systems, and DESTDIR in the install stage to put them in the >> temporary buildroot. >> > > Indeed, this is the same Debian is handling it. We run cmake with > -DCMAKE_INSTALL_PREFIX="/usr" etc. and then install into the staging > directory via $(MAKE) install DESTDIR=$(TARGET). > > Cmake generates GNU-style Makefiles which support DESTDIR, so AFAICT > there are currently no issues for distributors. > > I don't know what cpack needs/wants, and I don't personally think it is > a good idea, but it'd be nice to fix it if it's broken nevertheless. > > I did not get around testing the patches yet, sorry. > > > Michael > Hi Michael and Adam, Thanks a lot for your answers. Have any of you build packages for OpenSync recently (after the switch to CMake)? I am asking because (except for an _uninstall target) I find NO references to DESTDIR in either the build nor the src directory. So I simply do not understand how this could work. I guess I am just a little slow in understanding; please bear with me. To me it would seem that CMaking and "make install"ing the way you describe would NOT put OpenSync in your staging area, but directly into the final destination. Just to be clear, as far as I can see the main issue is this: OpenSync is using $CMAKE_INSTALL_PREFIX both to identify the final installation location AND the temporary buld location. My patch to remove $CMAKE_INSTALL_PREFIX from the INSTALL () commands are cosmetic, CMake will do the same thing whether it is there or not. The main issue is that the $CMAKE_INSTALL_PREFIX is hardcoded into the shared libs and executables, so if you build into a temporary staging area with -DCMAKE_INSTALL_PREFIX=/tmp/whatever, this path will get hardcoded into the executables and libs. This is why I suggest the "pathfinder.c" and associated patch: With this, there will be no hardcoded paths in the shared libs and executables; they will find their own locations automatically. I think my pathfinder patch is nice, because it means: No hardcoded paths in the executables or shared libs. However, if all of you think this is too much, of course we could aim for a different solution: One that makes sure that re CORRECT path will be hardcoded. AFAIT, this would mean adding a -DFINAL_PREFIX to the call to CMake, and changing the config.h to use this instead of $CMAKE_INSTALL_PREFIX /Henrik |