Hello everyone,

I have a problem and couldn't find a solution over the internet, the
situation is that I must copy some files at make install, the trick is, I
must check if the files exists at install time if they don't, I must copy
the files, otherwise do nothing.

It doesn't feel anywhere near fine to me, but this is what are asking me to
do, so there is no other way.

My initial solution was to check if the file don't exist, if so I create a
INSTALL command for it, the problem is that it runs at the configuration
phase and I need something at install or post install, this files have
nothing to do with the build, are just configuration files or other
non-related stuff, so no target for them.

One more thing, I know just the cmake basics, so please any help is welcome.

Below is my original code that create the INSTALL commands at configuration
phase.

-------------------------------------------------------------------------------------------------------------------------------------------------------------

##########################################################################################
#
#   Desc : Files installation script, checks if the file exist on
destination folder,
#          if so, doesn't overwrite the files.
#
#   Params : input_file - File path with <source file>:<destination>
#            must be one entry per line following the model above.
#
#   Obs : It is advised create .in files using ${CMAKE_SOURCE_DIR} to
describe the path,
#         calling configure_file to generate the correct path.
#
#   Ref : https://cmake.org/cmake/help/v3.2/command/configure_file.html
#
##########################################################################################

function (install_files input_file)

    MESSAGE("Files to be installed.")

    file(STRINGS ${input_file} contents)

    foreach(tuple ${contents})
        string(REPLACE ":" ";" tuple_list ${tuple})
        list(GET tuple_list 0 source)
        list(GET tuple_list 1 destination)

        if(IS_DIRECTORY ${source})
            install_directory(${source} ${destination})
        else(IS_DIRECTORY ${source})
            install_file(${source} ${destination})
        endif()

    endforeach()

endfunction(install_files input_file)

function (install_directory path_to_dir path_to_destination)

    file(GLOB folder_files "${path_to_dir}/*")

    foreach(filename ${folder_files})

        if(IS_DIRECTORY ${filename})
            get_filename_component( dir ${filename} NAME )
            install_directory(${filename} ${path_to_destination}/${dir})
        else(IS_DIRECTORY ${filename})
            install_file(${filename} ${path_to_destination})
        endif()

    endforeach(filename)

endfunction(install_directory path_to_dir path_to_destination)

function (install_file path_to_file path_to_destination)

    get_filename_component( filename ${path_to_file} NAME )

    if (NOT EXISTS ${path_to_destination}/${filename})
        MESSAGE("source path      : ${path_to_file}")
        MESSAGE("destination path : ${path_to_destination}")

        install (FILES "${path_to_file}"
                    DESTINATION "${path_to_destination}"
                    PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
                )
    endif()

endfunction (install_file path_to_file path_to_destination)

-------------------------------------------------------------------------------------------------------------------------------------------------------------

Sorry for any mistakes and many thanks in advance,
Daniel Yoshizawa.
-- 

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:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to