On Thu, Sep 12, 2019 at 4:57 AM Eric Noulard <eric.noul...@gmail.com> wrote: > > > > Le jeu. 12 sept. 2019 à 02:27, Ashish Sadanandan > <ashish.sadanan...@gmail.com> a écrit : >> >> Hello, >> I'm using CPack to create RPMs for an application. I have this working but >> the CPack step is quite slow. While investigating this, I noticed that all >> files in a directory I'm packaging, which contains a large number of small >> files, is being listed in the spec file. >> >> For instance, say I have >> >> set(CPACK_PACKAGING_INSTALL_PREFIX /opt/myapp) >> install(DIRECTORY ${CMAKE_BINARY_DIR}/myapp/foo >> DESTINATION foo >> COMPONENT myapp >> ) >> >> In the %files section I see >> >> %files >> %dir /opt/myapp/foo >> " /opt/myapp/foo/file1" >> " /opt/myapp/foo/file2" >> ... >> " /opt/myapp/foo/file60000" >> >> If I were writing the spec file by hand, this entire section could be >> replaced by a single line >> >> %files >> /opt/myapp/foo > > > CPack has no idea that the list of files are coming from an installed > *directory*, because CPack is not doing the install CMake is. > Thus CPackRPM and other CPack generators collect all installed bits inside a > given [temporary] prefix directory. > > Now may be you can tell CPack to ignore some of you installed files/directory > by using: CPACK_RPM_USER_FILELIST > > https://cmake.org/cmake/help/v3.15/cpack_gen/rpm.html#cpack_gen:CPack%20RPM%20Generator >
Sorry, I should've mentioned in the original email that the files are required, so ignoring is not what I want. > >> >> RPM will package all files within the directory if you specify the directory >> under %files >> (http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html - the >> "The %dir Directive" section) >> Is there an option to list just the directory instead of recursively listing >> all contained files within the directory? > > > AFAIK, No there is not. > > >> I'm not claiming this is the reason for CPack being slow, I came across this >> while investigating performance and if nothing else, this will result in a >> cleaner looking spec file. > > > For performance sake you can try CPACK_RPM_USER_BINARY_SPECFILE, > CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE > and handcraft your "user" spec file in order to see if it helps the packaging > performance. > and/or you can set CPACK_RPM_PACKAGE_DEBUG to 1 in order to get more timed > traces of CPackRPM execution. > Thanks, this looks promising but I'm having trouble getting CPack to use my custom spec file. This is what I've added to my CMakeLists.txt so far (using cmake 3.6.3) # We're already using component install set(CPACK_RPM_COMPONENT_INSTALL ON) set(CPACK_RPM_TESTS_FILE_NAME "${CPACK_PACKAGE_NAME}-tests-${CPACK_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}.rpm" ) install(DIRECTORY ${CMAKE_BINARY_DIR}/tests DESTINATION tests COMPONENT tests ) set(CPACK_RPM_TESTS_USER_BINARY_SPECFILE "${CMAKE_CURRENT_SOURCE_DIR}/tests.spec" ) But CPack is still generating a spec file for the tests RPM instead of using my spec file. I've even tried using an absolute path to the spec file but still the same behavior. What am I doing wrong? > > -- > Eric Thanks so much for your help, Ashish. -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake