Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
CTA-LAPP
PHOENIX_LIBS
PhoenixHPCProxy
Commits
bdcbb492
Commit
bdcbb492
authored
Jun 22, 2021
by
Pierre Aubert
Browse files
Add generic find project generator
parent
08e03c89
Pipeline
#125337
passed with stages
in 11 minutes and 38 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
148 additions
and
0 deletions
+148
-0
cmake/create_find_project.cmake
cmake/create_find_project.cmake
+148
-0
No files found.
cmake/create_find_project.cmake
View file @
bdcbb492
...
...
@@ -87,3 +87,151 @@ function(phoenix_create_find_program projectName programTargetName extraIncludeF
install
(
FILES
${
CMAKE_CURRENT_BINARY_DIR
}
/
${
findFileName
}
DESTINATION share/cmake
)
endfunction
(
phoenix_create_find_program
)
# Create the full CMake Find macro for this project
# projectName : name of the project to be used
# listIncludeFile : list of all include files of the project (or only the most important)
# listLibrary : list of all libraries of the project
# listProgram : list of the programs of the projet
# extraIncludeFile : extra include file to be used
# ARGN : list of extra dependencies of the project
function
(
phoenix_create_find_full projectName listIncludeFile listLibrary listProgram extraIncludeFile
)
set
(
findFileName
"
${
CMAKE_CURRENT_BINARY_DIR
}
/Find
${
projectName
}
.cmake"
)
string
(
TOUPPER
${
projectName
}
PROJECT_NAME_UPPER
)
if
(
extraIncludeFile STREQUAL
""
)
set
(
EXTRA_INCLUDE_CMAKE
""
)
else
()
set
(
EXTRA_INCLUDE_CMAKE
"include(
${
CMAKE_MODULE_PATH
}
/
${
extraIncludeFile
}
)"
)
endif
()
file
(
WRITE
${
findFileName
}
"
\n
"
)
file
(
APPEND
${
findFileName
}
"#########################################
\n
"
)
file
(
APPEND
${
findFileName
}
"# Author : Pierre Aubert
\n
"
)
file
(
APPEND
${
findFileName
}
"# Mail : aubertp7@gmail.com
\n
"
)
file
(
APPEND
${
findFileName
}
"# Licence : CeCILL-C
\n
"
)
file
(
APPEND
${
findFileName
}
"#########################################
\n\n
"
)
# Let's deal with the multiple inclusion in the same project
file
(
APPEND
${
findFileName
}
"if(
${
PROJECT_NAME_UPPER
}
_FOUND)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
link_directories(
\$
{
${
PROJECT_NAME_UPPER
}
_LIBRARY_DIR})
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
include_directories(
\$
{
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR}
\$
{
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR}/../)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
${
EXTRA_INCLUDE_CMAKE
}
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
return()
\n
"
)
file
(
APPEND
${
findFileName
}
"endif()
\n\n
"
)
# Let's deal with the extra find package
set
(
EXTRA_DEPENDENCIES_LIB
""
)
foreach
(
dependencyModule
${
ARGN
}
)
file
(
APPEND
${
findFileName
}
"find_package(
${
dependencyModule
}
REQUIRED)
\n
"
)
string
(
APPEND fullDependModule
""
)
string
(
TOUPPER
${
dependencyModule
}
DEPENDENCY_MODULE_UPPER
)
string
(
APPEND EXTRA_DEPENDENCIES_LIB
"
\$
{
${
DEPENDENCY_MODULE_UPPER
}
}"
)
endforeach
(
dependencyModule
)
file
(
APPEND
${
findFileName
}
"
\n
"
)
# Let's deal with the list of include
list
(
LENGTH listIncludeFile nbIncludeFile
)
if
(
${
nbIncludeFile
}
GREATER_EQUAL 1
)
file
(
APPEND
${
findFileName
}
"###############################################
\n
"
)
file
(
APPEND
${
findFileName
}
"#
\t
Find Header of project
${
projectName
}
\n
"
)
file
(
APPEND
${
findFileName
}
"###############################################
\n\n
"
)
file
(
APPEND
${
findFileName
}
"find_path(
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
NAMES"
)
foreach
(
includeFile
${
listIncludeFile
}
)
file
(
APPEND
${
findFileName
}
"
${
includeFile
}
"
)
endforeach
(
includeFile
)
file
(
APPEND
${
findFileName
}
"
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
PATHS
\$
{
${
PROJECT_NAME_UPPER
}
_PREFIX}/include/
${
projectName
}
\$
{CMAKE_INSTALL_PREFIX}/include/
${
projectName
}
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t\$
ENV{HOME}/usr/include/
${
projectName
}
\$
{CMAKE_INCLUDE_PATH}/
${
projectName
}
/usr/include/
${
projectName
}
/usr/local/include/
${
projectName
}
\n
"
)
file
(
APPEND
${
findFileName
}
")
\n\n
"
)
file
(
APPEND
${
findFileName
}
"if(
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
message(STATUS
\"
Found
${
PROJECT_NAME_UPPER
}
headers :
\$
{
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR}
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
set(
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR
\"\$
{
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR}
\"
CACHE STRING
\"
${
PROJECT_NAME_UPPER
}
include directory
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"else(
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
message(FATAL_ERROR
\"
${
PROJECT_NAME_UPPER
}
headers not found
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"endif(
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\n
"
)
file
(
APPEND
${
findFileName
}
"include_directories(
\$
{
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR}
\$
{
${
PROJECT_NAME_UPPER
}
_INCLUDE_DIR}/../)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\n\n
"
)
endif
()
list
(
LENGTH listLibrary nbLibrary
)
if
(
${
nbLibrary
}
GREATER_EQUAL 1
)
file
(
APPEND
${
findFileName
}
"###############################################
\n
"
)
file
(
APPEND
${
findFileName
}
"#
\t
Find Libraries of project
${
projectName
}
\n
"
)
file
(
APPEND
${
findFileName
}
"###############################################
\n\n
"
)
file
(
APPEND
${
findFileName
}
"set(LIBRARY_SUFFIX
\"
.so
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"if(APPLE)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
set(LIBRARY_SUFFIX
\"
.dylib
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"endif()
\n\n
"
)
file
(
APPEND
${
findFileName
}
"find_path(
${
PROJECT_NAME_UPPER
}
_LIBRARY_DIR
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
NAMES"
)
foreach
(
libraryName
${
listLibrary
}
)
file
(
APPEND
${
findFileName
}
" lib
${
libraryName
}
\$
{LIBRARY_SUFFIX}"
)
endforeach
(
libraryName
)
file
(
APPEND
${
findFileName
}
"
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
PATHS
\$
{
${
PROJECT_NAME_UPPER
}
_PREFIX}/lib
\$
{CMAKE_INSTALL_PREFIX}/lib
\$
ENV{HOME}/usr/lib
\$
{CMAKE_INCLUDE_PATH}/lib /usr/lib /usr/local/lib /lib
\n
"
)
file
(
APPEND
${
findFileName
}
")
\n\n
"
)
file
(
APPEND
${
findFileName
}
"if(
${
PROJECT_NAME_UPPER
}
_LIBRARY_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
set(
${
PROJECT_NAME_UPPER
}
_PREFIX
\"\$
{
${
PROJECT_NAME_UPPER
}
_LIBRARY_DIR}/..
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
set(
${
PROJECT_NAME_UPPER
}
"
)
foreach
(
libraryName
${
listLibrary
}
)
file
(
APPEND
${
findFileName
}
"
${
libraryName
}
"
)
endforeach
(
libraryName
)
file
(
APPEND
${
findFileName
}
"
${
EXTRA_DEPENDENCIES_LIB
}
CACHE PATHS
\"
${
PROJECT_NAME_UPPER
}
libraries and dependencies
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
set(
${
PROJECT_NAME_UPPER
}
_FOUND
\"
YES
\"
CACHE BOOL
\"
${
PROJECT_NAME_UPPER
}
progect found
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
link_directories(
\$
{
${
PROJECT_NAME_UPPER
}
_LIBRARY_DIR})
\n
"
)
file
(
APPEND
${
findFileName
}
"else()
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
message(FATAL_ERROR
\"
Libraries of
${
PROJECT_NAME_UPPER
}
not found
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"endif()
\n\n
"
)
endif
()
list
(
LENGTH listProgram nbProgram
)
if
(
${
nbProgram
}
GREATER_EQUAL 1
)
file
(
APPEND
${
findFileName
}
"###############################################
\n
"
)
file
(
APPEND
${
findFileName
}
"#
\t
Find Programs of project
${
projectName
}
\n
"
)
file
(
APPEND
${
findFileName
}
"###############################################
\n\n
"
)
file
(
APPEND
${
findFileName
}
"find_path(
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
NAMES"
)
foreach
(
programName
${
listProgram
}
)
file
(
APPEND
${
findFileName
}
"
${
programName
}
"
)
endforeach
(
programName
)
file
(
APPEND
${
findFileName
}
"
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
PATHS
\$
{
${
PROJECT_NAME_UPPER
}
_PREFIX}/bin
\$
{CMAKE_INSTALL_PREFIX}/bin
\$
ENV{HOME}/usr/bin
\$
{CMAKE_INCLUDE_PATH}/bin /usr/bin /usr/local/bin /bin
\n
"
)
file
(
APPEND
${
findFileName
}
")
\n
"
)
file
(
APPEND
${
findFileName
}
"
\n
"
)
file
(
APPEND
${
findFileName
}
"if(
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
message(STATUS
\"
Found programs of
${
PROJECT_NAME_UPPER
}
:
\$
{
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR}
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
set(
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR
\"\$
{
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR}
\"
CACHE STRING
\"
${
PROJECT_NAME_UPPER
}
program directory
\"
)
\n
"
)
foreach
(
programName
${
listProgram
}
)
string
(
TOUPPER
${
programName
}
PROGRAM_NAME_UPPER
)
file
(
APPEND
${
findFileName
}
"
\t
set(
${
PROJECT_NAME_UPPER
}
_
${
PROGRAM_NAME_UPPER
}
_EXECUTABLE
\"\$
{
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR}/
${
programName
}
\"
CACHE STRING
\"
${
PROJECT_NAME_UPPER
}
's
${
programName
}
program
\"
)
\n
"
)
endforeach
(
programName
)
file
(
APPEND
${
findFileName
}
"else(
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\t
message(FATAL_ERROR
\"
Programs of
${
PROJECT_NAME_UPPER
}
not found
\"
)
\n
"
)
file
(
APPEND
${
findFileName
}
"endif(
${
PROJECT_NAME_UPPER
}
_EXECUTABLE_DIR)
\n
"
)
file
(
APPEND
${
findFileName
}
"
\n\n
"
)
endif
()
file
(
APPEND
${
findFileName
}
"
${
EXTRA_INCLUDE_CMAKE
}
\n\n
"
)
install
(
FILES
${
findFileName
}
DESTINATION share/cmake
)
endfunction
(
phoenix_create_find_full
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment