forked from enlightenment/efl
cmake: improvements to eolian handling.
- fix doc and state SOURCES shouldn't get any EO_FILES, these should go to the specific PUBLIC_EO_FILES or EO_FILES. - generate eolian files in relative directories, required by efl/interfaces - .eot files fail if you give -o c:..., they need an explicit "-gh" followed by "-o i:..." - .legacy.h are generated automatically, but needs an extra pass (q66 was informed about it) - if EOLIAN_BIN=on, then use in-tree binary, depending on such target only if it's the case. This allow cross-compiling and also bypass regenerate all .eo files if eina/eolian changed (as requested by Raster), simply reconfigure with EOLIAN_BIN=path, which can be EOLIAN_BIN=bin/eolian_gen if you wish ;-) - use COMMENT keyword to change the eolian summary (output)
This commit is contained in:
parent
e4d0f78682
commit
a2bc5ee130
|
@ -559,7 +559,6 @@ macro(_EFL_INCLUDE_OR_DETECT _name _srcdir)
|
||||||
${_srcdir}/*.hh
|
${_srcdir}/*.hh
|
||||||
${_srcdir}/*.cxx
|
${_srcdir}/*.cxx
|
||||||
${_srcdir}/*.cpp
|
${_srcdir}/*.cpp
|
||||||
${_srcdir}/*.eo
|
|
||||||
)
|
)
|
||||||
list(LENGTH _autodetect_files _autodetect_files_count)
|
list(LENGTH _autodetect_files _autodetect_files_count)
|
||||||
if(_autodetect_files_count GREATER 1)
|
if(_autodetect_files_count GREATER 1)
|
||||||
|
@ -571,9 +570,15 @@ macro(_EFL_INCLUDE_OR_DETECT _name _srcdir)
|
||||||
${_srcdir}/*.hh
|
${_srcdir}/*.hh
|
||||||
${_srcdir}/*.cxx
|
${_srcdir}/*.cxx
|
||||||
${_srcdir}/*.cpp
|
${_srcdir}/*.cpp
|
||||||
|
)
|
||||||
|
file(GLOB EO_FILES RELATIVE ${_srcdir}
|
||||||
${_srcdir}/*.eo
|
${_srcdir}/*.eo
|
||||||
|
${_srcdir}/*.eot
|
||||||
)
|
)
|
||||||
message(STATUS "${_name} auto-detected as: ${SOURCES}")
|
message(STATUS "${_name} auto-detected as: ${SOURCES}")
|
||||||
|
if(EO_FILES)
|
||||||
|
message(STATUS "${_name} EO auto-detected as: ${EO_FILES}")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "${_name} contains no auto-detectable sources.")
|
message(STATUS "${_name} contains no auto-detectable sources.")
|
||||||
endif()
|
endif()
|
||||||
|
@ -683,7 +688,8 @@ define_property(TARGET PROPERTY EFL_EO_PUBLIC
|
||||||
# - INCLUDE_DIRECTORIES: results in target_include_directories
|
# - INCLUDE_DIRECTORIES: results in target_include_directories
|
||||||
# - SYSTEM_INCLUDE_DIRECTORIES: results in target_include_directories(SYSTEM)
|
# - SYSTEM_INCLUDE_DIRECTORIES: results in target_include_directories(SYSTEM)
|
||||||
# - OUTPUT_NAME
|
# - OUTPUT_NAME
|
||||||
# - SOURCES source files that are needed, eo files can also be added here to be build
|
# - SOURCES source files that are needed. Eo files should go in
|
||||||
|
# PUBLIC_EO_FILES or EO_FILES.
|
||||||
# - PUBLIC_HEADERS
|
# - PUBLIC_HEADERS
|
||||||
# - VERSION (defaults to project version)
|
# - VERSION (defaults to project version)
|
||||||
# - SOVERSION (defaults to project major version)
|
# - SOVERSION (defaults to project major version)
|
||||||
|
@ -849,7 +855,7 @@ function(EFL_LIB _target)
|
||||||
SOVERSION ${SOVERSION})
|
SOVERSION ${SOVERSION})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
EFL_CREATE_EO_RULES(${_target} ${EFL_LIB_BINARY_DIR})
|
EFL_CREATE_EO_RULES(${_target} ${EFL_LIB_SOURCE_DIR} ${EFL_LIB_BINARY_DIR})
|
||||||
|
|
||||||
EFL_PKG_CONFIG_LIB_WRITE()
|
EFL_PKG_CONFIG_LIB_WRITE()
|
||||||
|
|
||||||
|
@ -1289,7 +1295,7 @@ endmacro()
|
||||||
|
|
||||||
# Will use the source of the given target to create rules for creating
|
# Will use the source of the given target to create rules for creating
|
||||||
# the .eo.c and .eo.h files. The INCLUDE_DIRECTORIES of the target will be used
|
# the .eo.c and .eo.h files. The INCLUDE_DIRECTORIES of the target will be used
|
||||||
function(EFL_CREATE_EO_RULES target generation_dir)
|
function(EFL_CREATE_EO_RULES target source_dir generation_dir)
|
||||||
get_target_property(eo_files_private ${target} EFL_EO_PRIVATE)
|
get_target_property(eo_files_private ${target} EFL_EO_PRIVATE)
|
||||||
get_target_property(eo_files_public ${target} EFL_EO_PUBLIC)
|
get_target_property(eo_files_public ${target} EFL_EO_PUBLIC)
|
||||||
if(NOT eo_files_private AND NOT eo_files_public)
|
if(NOT eo_files_private AND NOT eo_files_public)
|
||||||
|
@ -1300,18 +1306,34 @@ function(EFL_CREATE_EO_RULES target generation_dir)
|
||||||
set(all_libraries ${target} ${link_libraries})
|
set(all_libraries ${target} ${link_libraries})
|
||||||
set(include_cmd "")
|
set(include_cmd "")
|
||||||
foreach(link_target ${all_libraries})
|
foreach(link_target ${all_libraries})
|
||||||
|
if(TARGET ${link_target})
|
||||||
list(APPEND include_cmd -I${CMAKE_SOURCE_DIR}/src/lib/${link_target})
|
list(APPEND include_cmd -I${CMAKE_SOURCE_DIR}/src/lib/${link_target})
|
||||||
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
set(all_eo_gen_files "")
|
set(all_eo_gen_files "")
|
||||||
foreach(file ${eo_files_private} ${eo_files_public})
|
foreach(file ${eo_files_private} ${eo_files_public})
|
||||||
get_filename_component(ext ${file} EXT)
|
get_filename_component(ext ${file} EXT)
|
||||||
get_filename_component(filename ${file} NAME)
|
string(REGEX REPLACE "^${source_dir}/" "" filename "${file}")
|
||||||
|
string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" relfile "${file}")
|
||||||
|
|
||||||
|
# if sources are located in subdiretories
|
||||||
|
get_filename_component(reldir "${filename}" DIRECTORY)
|
||||||
|
if(reldir)
|
||||||
|
file(MAKE_DIRECTORY "${generation_dir}/${reldir}")
|
||||||
|
get_filename_component(absdir "${file}" DIRECTORY)
|
||||||
|
set(rel_include_cmd -I${absdir})
|
||||||
|
else()
|
||||||
|
set(rel_include_cmd)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(${ext} STREQUAL ".eo")
|
if(${ext} STREQUAL ".eo")
|
||||||
set(file_eo_gen_files ${generation_dir}/${filename}.c ${generation_dir}/${filename}.h)
|
set(file_eo_gen_files ${generation_dir}/${filename}.c ${generation_dir}/${filename}.h) # TODO: ${generation_dir}/${filename}.legacy.h)
|
||||||
|
set(out_cmd -o c:${generation_dir}/${filename}.c -o h:${generation_dir}/${filename}.h) # TODO: bug in eolian_gen -o l:${generation_dir}/${filename}.legacy.h)
|
||||||
elseif(${ext} STREQUAL ".eot")
|
elseif(${ext} STREQUAL ".eot")
|
||||||
set(file_eo_gen_files ${generation_dir}/${filename}.h)
|
set(file_eo_gen_files ${generation_dir}/${filename}.h)
|
||||||
|
# TODO: looks like a bug in eolian_gen needs '-gh'
|
||||||
|
set(out_cmd -gh -o h:${generation_dir}/${filename}.h)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Unsupported eo file type: ${file}")
|
message(FATAL_ERROR "Unsupported eo file type: ${file}")
|
||||||
endif()
|
endif()
|
||||||
|
@ -1320,13 +1342,26 @@ function(EFL_CREATE_EO_RULES target generation_dir)
|
||||||
if(file_eo_gen_files)
|
if(file_eo_gen_files)
|
||||||
if(EOLIAN_BIN STREQUAL ON)
|
if(EOLIAN_BIN STREQUAL ON)
|
||||||
set(EOLIAN_BIN ${CMAKE_BINARY_DIR}/bin/eolian_gen)
|
set(EOLIAN_BIN ${CMAKE_BINARY_DIR}/bin/eolian_gen)
|
||||||
|
set(IN_TREE_EOLIAN ON)
|
||||||
endif()
|
endif()
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${file_eo_gen_files}
|
OUTPUT ${file_eo_gen_files}
|
||||||
COMMAND ${CMAKE_COMMAND} -E env "EFL_RUN_IN_TREE=1" ${EOLIAN_BIN} ${include_cmd} -o c:${generation_dir}/${filename}.c -o h:${generation_dir}/${filename}.h ${file}
|
COMMAND ${EOLIAN_BIN} ${rel_include_cmd} ${include_cmd} ${EOLIAN_EXTRA_PARAMS} ${out_cmd} ${file}
|
||||||
DEPENDS ${file}
|
DEPENDS ${file}
|
||||||
|
COMMENT "EOLIAN ${relfile}"
|
||||||
)
|
)
|
||||||
list(APPEND all_eo_gen_files ${file_eo_gen_files})
|
list(APPEND all_eo_gen_files ${file_eo_gen_files})
|
||||||
|
# TODO: looks like a bug in eolian_gen doesn't generate -o l:...
|
||||||
|
# TODO: then add an extra command
|
||||||
|
if(${ext} STREQUAL ".eo")
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${generation_dir}/${filename}.legacy.h
|
||||||
|
COMMAND ${EOLIAN_BIN} ${rel_include_cmd} ${include_cmd} ${EOLIAN_EXTRA_PARAMS} -gl -o l:${generation_dir}/${filename}.legacy.h ${file}
|
||||||
|
DEPENDS ${file}
|
||||||
|
COMMENT "EOLIAN LEGACY ${relfile}"
|
||||||
|
)
|
||||||
|
list(APPEND all_eo_gen_files ${generation_dir}/${filename}.legacy.h)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
if(all_eo_gen_files)
|
if(all_eo_gen_files)
|
||||||
|
@ -1335,6 +1370,8 @@ function(EFL_CREATE_EO_RULES target generation_dir)
|
||||||
DEPENDS ${all_eo_gen_files}
|
DEPENDS ${all_eo_gen_files}
|
||||||
)
|
)
|
||||||
add_dependencies(${target} ${target}-eo)
|
add_dependencies(${target} ${target}-eo)
|
||||||
|
if(IN_TREE_EOLIAN)
|
||||||
add_dependencies(${target}-eo eolian-bin)
|
add_dependencies(${target}-eo eolian-bin)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
Loading…
Reference in New Issue