Replace the remaining KDE3 macros.

+ Targets are created to generate files, not just commands.
+ Generating kidl files is created as a separate targets.
+ Headers are added to the list of generated files.
+ This allows for more accurate dependency determination.
+ This prevents files generation from being repeated.
+ This prevents the occasional FTBFS during a parallel build.

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
pull/40/head
Slávek Banko před 4 roky
rodič e8a95f169e
revize 5cd16d6fb9
V databázi nebyl nalezen žádný známý klíč pro tento podpis
ID GPG klíče: 608F5293A04BE668

@ -15,7 +15,6 @@
#
#################################################
include( KDE3Macros ) # we will need this module for a while
include( CheckCXXCompilerFlag )
@ -474,6 +473,144 @@ macro( tde_automoc )
endmacro( tde_automoc )
#################################################
#####
##### tde_create_dcop_kidl
macro( tde_create_dcop_kidl _kidl _kidl_source )
get_filename_component( _kidl_source ${_kidl_source} ABSOLUTE )
get_filename_component( _kidl_basename ${_kidl_source} NAME_WE )
set( _kidl_output ${CMAKE_CURRENT_BINARY_DIR}/${_kidl_basename}.kidl )
file( RELATIVE_PATH _kidl_target "${CMAKE_BINARY_DIR}" "${_kidl_output}" )
string( REPLACE "/" "+" _kidl_target "${_kidl_target}" )
if( NOT TARGET ${_kidl_target} )
add_custom_command(
OUTPUT ${_kidl_output}
COMMAND ${KDE3_DCOPIDL_EXECUTABLE}
ARGS ${_kidl_source} > ${_kidl_output}
DEPENDS ${_kidl_source}
)
add_custom_target( ${_kidl_target} DEPENDS ${_kidl_output} )
if( NOT TDE_FOUND )
add_dependencies( ${_kidl_target} dcopidl )
endif( )
endif( )
set( ${_kidl} ${_kidl_output} )
endmacro( tde_create_dcop_kidl )
#################################################
#####
##### tde_add_dcop_skels
macro( tde_add_dcop_skels _sources )
foreach( _current_FILE ${ARGN} )
get_filename_component( _tmp_FILE ${_current_FILE} ABSOLUTE )
get_filename_component( _basename ${_tmp_FILE} NAME_WE )
set( _skel ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_skel.cpp )
file( RELATIVE_PATH _skel_target "${CMAKE_BINARY_DIR}" "${_skel}" )
string( REPLACE "/" "+" _skel_target "${_skel_target}" )
tde_create_dcop_kidl( _kidl ${_tmp_FILE} )
if( NOT TARGET ${_skel_target} )
add_custom_command(
OUTPUT ${_skel}
COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE}
ARGS --c++-suffix cpp --no-signals --no-stub ${_kidl}
DEPENDS ${_kidl_target}
)
add_custom_target( ${_skel_target} DEPENDS ${_skel} )
if( NOT TDE_FOUND )
add_dependencies( ${_skel_target} dcopidl2cpp )
endif( )
endif( )
list( APPEND ${_sources} ${_skel} )
endforeach( _current_FILE )
endmacro( tde_add_dcop_skels )
#################################################
#####
##### tde_add_dcop_stubs
macro( tde_add_dcop_stubs _sources )
foreach( _current_FILE ${ARGN} )
get_filename_component( _tmp_FILE ${_current_FILE} ABSOLUTE )
get_filename_component( _basename ${_tmp_FILE} NAME_WE )
set( _stub_CPP ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_stub.cpp )
set( _stub_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_stub.h )
file( RELATIVE_PATH _stub_target "${CMAKE_BINARY_DIR}" "${_stub_CPP}" )
string( REPLACE "/" "+" _stub_target "${_stub_target}" )
tde_create_dcop_kidl( _kidl ${_tmp_FILE} )
if( NOT TARGET ${_stub_target} )
add_custom_command(
OUTPUT ${_stub_CPP} ${_stub_HEADER}
COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE}
ARGS --c++-suffix cpp --no-signals --no-skel ${_kidl}
DEPENDS ${_kidl_target}
)
add_custom_target( ${_stub_target} DEPENDS ${_stub_CPP} ${_stub_HEADER} )
if( NOT TDE_FOUND )
add_dependencies( ${_stub_target} dcopidl2cpp )
endif( )
endif( )
list( APPEND ${_sources} ${_stub_CPP} )
endforeach( _current_FILE )
endmacro( tde_add_dcop_stubs )
#################################################
#####
##### tde_add_kcfg_files
macro( tde_add_kcfg_files _sources )
foreach( _current_FILE ${ARGN} )
get_filename_component( _tmp_FILE ${_current_FILE} ABSOLUTE )
get_filename_component( _basename ${_tmp_FILE} NAME_WE )
file( READ ${_tmp_FILE} _contents )
string( REGEX REPLACE "^(.*\n)?File=([^\n]+)\n.*$" "\\2" _kcfg_FILE "${_contents}" )
set( _src_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp )
set( _header_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h )
file( RELATIVE_PATH _kcfg_target "${CMAKE_BINARY_DIR}" "${_src_FILE}" )
string( REPLACE "/" "+" _kcfg_target "${_kcfg_target}" )
if( NOT TARGET ${_kcfg_target} )
add_custom_command(
OUTPUT ${_src_FILE} ${_header_FILE}
COMMAND ${KDE3_KCFGC_EXECUTABLE}
ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} ${_tmp_FILE}
DEPENDS ${_tmp_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE}
)
add_custom_target( ${_kcfg_target} DEPENDS ${_src_FILE} ${_header_FILE} )
if( NOT TDE_FOUND )
add_dependencies( ${_kcfg_target} tdeconfig_compiler )
endif( )
endif( )
list( APPEND ${_sources} ${_src_FILE} )
endforeach( _current_FILE )
endmacro( tde_add_kcfg_files )
#################################################
#####
##### __tde_internal_process_sources
@ -498,15 +635,15 @@ macro( __tde_internal_process_sources _sources )
# handle .skel files
elseif( ${_ext} STREQUAL ".skel" )
kde3_add_dcop_skels( ${_sources} ${_path}/${_name}.h )
tde_add_dcop_skels( ${_sources} ${_path}/${_name}.h )
# handle .stub files
elseif( ${_ext} STREQUAL ".stub" )
kde3_add_dcop_stubs( ${_sources} ${_path}/${_name}.h )
tde_add_dcop_stubs( ${_sources} ${_path}/${_name}.h )
# handle .kcfgc files
elseif( ${_ext} STREQUAL ".kcfgc" )
kde3_add_kcfg_files( ${_sources} ${_arg} )
tde_add_kcfg_files( ${_sources} ${_arg} )
# handle any other files
else( ${_ext} STREQUAL ".ui" )

Načítá se…
Zrušit
Uložit