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

Reply via email to