View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0007645 | CMake | CPack | public | 2008-09-10 08:46 | 2011-01-05 02:57 | ||||
Reporter | Eric NOULARD | ||||||||
Assigned To | Eric NOULARD | ||||||||
Priority | normal | Severity | feature | Reproducibility | N/A | ||||
Status | closed | Resolution | fixed | ||||||
Platform | OS | OS Version | |||||||
Product Version | CMake-2-6 | ||||||||
Target Version | CMake 2.8.4 | Fixed in Version | CMake 2.8.4 | ||||||
Summary | 0007645: Add support of CPack Component to CPack RPM generator | ||||||||
Description | I should be doable to add CPack component support http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack [^] to CPack RPM. We could generate 1 RPM for each Component with builtin appropriate dependencies: http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack#Ideas_for_Future_Development [^] posted here as a reminder. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | ComponentExampleStart_jhf.zip [^] (83,422 bytes) 2009-09-19 20:18 CPackRPM.cmake [^] (21,434 bytes) 2009-09-19 20:19 cmake.diff [^] (1,013 bytes) 2009-09-19 20:28 [Show Content] | ||||||||
Relationships | |||||||||||||||||||||
|
Relationships |
Notes | |
(0013417) Douglas Gregor (developer) 2008-09-11 10:30 |
The chance of me having time to implement this feature is pretty small. Anyone should feel free to go ahead and implement this if they feel so motivated :) |
(0016793) João Henrique F. Freitas (reporter) 2009-07-01 08:45 |
Hello, I need it for DEB and RPM packages. If you tell me some guidelines I will start it now and you can review. Waiting, thanks. |
(0016795) Eric NOULARD (developer) 2009-07-01 11:17 |
Hi, I may give you some help for RPM. First of all you may have a look at CPackRPM specific documentation: http://www.kwwidgets.org/Wiki/CMake:CPackPackageGenerators#RPM_.28Unix_Only.29 [^] The main design idea of CPackRPM is to avoid coding in C++ when possible. Thus the content of CMake/Source/CPack/cmCPackRPMGenerator.[cxx|h] is minimal. The features are implemented mainly in CMake/Modules/CPackRPM.cmake. This way CPackRPM is easily patchable/upgradable without recompilation. Most of the time you just have to put your own CPackRPM.cmake into the CMake module path in order to patch it. The component feature however needs some C++ part update. However you should update cmCPackRPMGenerator.* in order to indicate that the generator supports components, i.e. redefine virtual method virtual bool SupportsComponentInstallation() const; like it is done in the NSIS generator (see cmCPackNSISGenerator.*). Once you've done that (easy part) I would go back to CPackRPM.cmake in order to make it aware of COMPONENT case. For example the C++ part may setup some CPACK_RPM_COMPONENTS with appropriate value and then use IF(CPACK_RPM_COMPONENTS) ... ENDIF(CPACK_RPM_COMPONENTS) in CPackRPM.cmake in order to make specific action in component case. In the current (non-component) case CPackRPM build a single RPM with all what is found in ${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME} i.e. the buildroot. This is done by writing a *single* RPM spec file and calling rpmbuild with appropriate arguments. What you may try to do is the same thing but doing a loop over the requested components list. CPack should install the component specific file in ${CPACK_RPM_DIRECTORY}/??COMPONENT_NAME??/${CPACK_PACKAGE_FILE_NAME} You may then build one spec file by component. And call rpmbuild for each component. A may be expected feature would be to automatically add rpm dependencies for those components rpm. This is the big picture on how I would do it if I had time to it. This is a proposition, not a "must go this way". Feel free to propose another way to go. I'm not an official CMake developer (as a consequence I have not commiit access to CMake CVS tree) I did just contribute the CPackRPM generator. I'll try to help you as much as I can. May be we can begin to share the componentized CMake project test case you want, may be you can write one and put the corresponding zip as an attachment in the tracker. Or may be we can use the one given here: http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack [^] |
(0016851) Eric NOULARD (developer) 2009-07-13 07:38 |
Hi joaohf, Did you begin some work on this? I would be ready to test :-) |
(0016871) João Henrique F. Freitas (reporter) 2009-07-14 19:52 |
Hi Eric. Not yet. I am reading the code and make some notes. I will start on next week. Thanks |
(0017100) Eric NOULARD (developer) 2009-08-12 03:28 |
Hi Joahf, Did find the time to work on COMPONENT support for RPM? |
(0017644) João Henrique F. Freitas (reporter) 2009-09-19 13:01 |
Hello, I am working it. No problems. I am modifying the CPackRPM.cpack generator. The c++ classes is Ok. |
(0017652) João Henrique F. Freitas (reporter) 2009-09-19 20:34 |
Hi, Eric see the three files attached. It need to do a big refactor but works. The dependences between components is not working yet. I don't know how to solve it: ----------------------- joaohf@joaohf-laptop:~/tmp/ComponentExampleStart/build$ make package .... CPack: Compress package CPack: Finalize package CPack Error: Problem copying the package: /home/joaohf/tmp/ComponentExampleStart/build/_CPack_Packages/Linux/RPM/MyLib-1.0.0-Linux.rpm to /home/joaohf/tmp/ComponentExampleStart/build/MyLib-1.0.0-Linux.rpm CPack Error: Error when generating package: MyLib make: ** [package] Erro 1 joaohf@joaohf-laptop:~/tmp/ComponentExampleStart/build$ ls _CPack_Packages/Linux/RPM applications libraries MyLib-1.0.0-Linux-applications.rpm MyLib-1.0.0-Linux-libraries.rpm headers MyLib-1.0.0-Linux MyLib-1.0.0-Linux-headers.rpm ---------------------- Three rpm package was created but CPACK can't copy they. Thanks |
(0017658) Eric NOULARD (developer) 2009-09-20 05:43 |
Hi, I'll try your patch soon. I'll try to see why there is a copy trouble. |
(0017659) Eric NOULARD (developer) 2009-09-20 06:51 |
Ok, I know why CPack can't copy the packages... In fact it seems that Component Install was designed with the idea in mind that componentized installer will only produce a single file... If you look at the NSIS and PackageMaker generators, they currently work that way. They understand components but they still produce a single installer. This is not the case of what I thought for DEB, RPM etc... In fact I think that the idea of a single file installer is somehow wrong. Imagine I want to add COMPONENT support for TGZ, ZIP etc... I would find it better to produce several files than a single one containing the whole component. I'm afraid you'll have to propose a patch for the generic cmCPackGenerator. The "cmCPackGenerator::SupportsComponentInstallation" API is not enough the specific generator should be able to tell its mother class that it will produce as many "installer files" as components. The trouble with this is that currently the base class cmCPackGenerator decides the name of the file for the specific generator. I think this is wrong too. The base class should provides the list of files to package and the temp directory they reside in **BUT** it should reads back from the call the list of file the specific generator has produced. This way the base class may generically copy the generated files (may be several) appropriately. That's more work than expected. I did not see that component install did assume the installer should produce a single file... This design issue should be discussed with CMake developper (not me) in order to choose the appropriate new design they will be wanting to promote/accept. |
(0017662) João Henrique F. Freitas (reporter) 2009-09-20 15:57 |
Ok, Any developer is reading it? Eric, you know a CMake developer? I am not very familiarized with CMake code, so is difficult to propose some other idea. I agree with you. |
(0017664) Eric NOULARD (developer) 2009-09-21 02:18 |
I would try to call for help/advice on the CMake ML pointing to this particular bug. Some CMake developer may come and give their opinion. I send the first message and let you follow-up on the list. Concerning the knowledge of the CMake code, I'm not that familiar too however the code is usually well written such that after some time reading it you get good ideas of what to do. |
(0017667) Bruno Hecht (reporter) 2009-09-21 08:31 |
Hi! I need to create sub-packages DEB with cpack, but, always generate an only pack: SET(CPACK_GENERATOR "DEB") SET(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME}) SET(CPACK_SET_DESTDIR TRUE) SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "MyProject") SET(CPACK_PACKAGE_VERSION_MAJOR "0") SET(CPACK_PACKAGE_VERSION_MINOR "0") # package generation include(CPackConfig.cmake) include(CPack) CPack: Create package using DEB CPack: Install projects CPack: - Run preinstall target for: MyProject CPack: - Install project: Project CPack: Compress package CPack: Finalize package CPack: Package /home_local/workcopy/branches/build/MyProject.deb generated. How I make sub-packages? My knowledge in cmake and cpack is starting now. thanks! |
(0017681) Eric NOULARD (developer) 2009-09-21 14:30 |
Hi "hecht", The purpose of the bug is precisely to try to add COMPONENT support for RPM and DEB CPack generator, in order to create one "sub-package" by COMPONENT. The current effort began with RPM which now hits a CPack design problem (not that hard but still needs more work). Once this problem has been solved for RPM it should be easy to port the RPM effort on DEB (and may be other like TGZ, ZIP and the like). |
(0017686) João Henrique F. Freitas (reporter) 2009-09-21 20:56 |
Hi "hecht". Welcome to the work. I think you need to tell cmCPackDebGenerator.cxx|h about the SupportsComponentInstallation virtual method. As Eric said. In CPackDeb.cmake is necessary some work. But I believe the hard wokr is inside cmCPackDebGenerator::CompressFiles. We need to tell how the components will be compressed. CPackRPM is more easy because all the code is inside CPackRPM.cmake. |
(0018416) Eric NOULARD (developer) 2009-11-15 14:17 |
I have open a related bug: http://public.kitware.com/Bug/view.php?id=9900 [^] |
(0023245) Eric NOULARD (developer) 2010-11-13 13:58 |
Back at work. I've just pushed the first set of change to next. 2c84d16 CPackRPM add basic component support to CPackRPM |
(0024409) Eric NOULARD (developer) 2011-01-05 02:56 |
This bug may be closed because the basic component support is OK. I'm opening child/related bug report in order to handle follow-up in future CMake/CPack release, see: http://public.kitware.com/Bug/view.php?id=11656 [^] http://public.kitware.com/Bug/view.php?id=11655 [^] |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2008-09-10 08:46 | Eric NOULARD | New Issue | |
2008-09-11 10:19 | Bill Hoffman | Status | new => assigned |
2008-09-11 10:19 | Bill Hoffman | Assigned To | => Douglas Gregor |
2008-09-11 10:30 | Douglas Gregor | Note Added: 0013417 | |
2009-07-01 08:45 | João Henrique F. Freitas | Note Added: 0016793 | |
2009-07-01 11:17 | Eric NOULARD | Note Added: 0016795 | |
2009-07-13 07:38 | Eric NOULARD | Note Added: 0016851 | |
2009-07-14 19:52 | João Henrique F. Freitas | Note Added: 0016871 | |
2009-08-12 03:28 | Eric NOULARD | Note Added: 0017100 | |
2009-09-19 13:01 | João Henrique F. Freitas | Note Added: 0017644 | |
2009-09-19 20:18 | João Henrique F. Freitas | File Added: ComponentExampleStart_jhf.zip | |
2009-09-19 20:19 | João Henrique F. Freitas | File Added: CPackRPM.cmake | |
2009-09-19 20:28 | João Henrique F. Freitas | File Added: cmake.diff | |
2009-09-19 20:34 | João Henrique F. Freitas | Note Added: 0017652 | |
2009-09-20 05:43 | Eric NOULARD | Note Added: 0017658 | |
2009-09-20 06:51 | Eric NOULARD | Note Added: 0017659 | |
2009-09-20 15:57 | João Henrique F. Freitas | Note Added: 0017662 | |
2009-09-21 02:18 | Eric NOULARD | Note Added: 0017664 | |
2009-09-21 08:31 | Bruno Hecht | Note Added: 0017667 | |
2009-09-21 14:30 | Eric NOULARD | Note Added: 0017681 | |
2009-09-21 20:56 | João Henrique F. Freitas | Note Added: 0017686 | |
2009-11-15 14:17 | Eric NOULARD | Note Added: 0018416 | |
2009-11-22 13:33 | Eric NOULARD | Assigned To | Douglas Gregor => Eric NOULARD |
2010-04-22 18:04 | Eric NOULARD | Relationship added | related to 0009900 |
2010-05-20 13:36 | Eric NOULARD | Relationship added | child of 0010736 |
2010-11-10 13:07 | David Cole | Target Version | => CMake 2.8.4 |
2010-11-13 13:58 | Eric NOULARD | Note Added: 0023245 | |
2011-01-05 02:53 | Eric NOULARD | Relationship added | parent of 0011656 |
2011-01-05 02:56 | Eric NOULARD | Note Added: 0024409 | |
2011-01-05 02:56 | Eric NOULARD | Status | assigned => closed |
2011-01-05 02:57 | Eric NOULARD | Resolution | open => fixed |
2011-01-05 02:57 | Eric NOULARD | Fixed in Version | => CMake 2.8.4 |
2011-01-05 03:00 | Eric NOULARD | Relationship added | related to 0011655 |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |