]> Creatis software - cpPlugins.git/blobdiff - cmake/Functions.cmake
...
[cpPlugins.git] / cmake / Functions.cmake
index 4da395c6ad91dfb57a8adb4df2d52c2910076fca..aebf89fa6749738c57a476d73dee13537aafd92c 100644 (file)
@@ -59,13 +59,20 @@ ENDFUNCTION()
 
 ## -------------------------------------------------------------------------
 FUNCTION(
-  CreateLib
-  lib_name
-  lib_type
+  PrepareSourceFiles
+  out_lib_name
+  out_sources_list
+  out_headers_list
+  out_headers_paths
   )
+SET(_config_extensions .c.in .cpp.in .cxx.in .h.in .hpp.in .hxx.in .ui.in)
+SET(_sources_extensions .c .cpp .cxx)
+SET(_headers_extensions .h .hpp .hxx)
+SET(_qt_ui_extensions .ui)
+SET(_demangler_extensions .d)
+SET(_instances_extensions .i)
 
 ## -- Configure inputs
-SET(_config_extensions .c.in .cpp.in .cxx.in .h.in .hpp.in .hxx.in .ui.in)
 SET(_all_files)
 FOREACH(_file ${ARGN})
   GET_FILENAME_COMPONENT(_ext ${_file} EXT)
@@ -89,20 +96,18 @@ FOREACH(_file ${ARGN})
 ENDFOREACH(_file)
 
 ## -- Separate files
-SET(_sources_extensions .c .cpp .cxx)
-SET(_headers_extensions .h .hpp .hxx)
-SET(_qt_ui_extensions .ui)
-SET(_demangler_extensions .d)
 SET(_srcs)
 SET(_hdrs)
 SET(_qts)
 SET(_demanglers)
+SET(_instances)
 FOREACH(_file ${_all_files})
   GET_FILENAME_COMPONENT(_ext ${_file} EXT)
   LIST(FIND _sources_extensions ${_ext} _src)
   LIST(FIND _headers_extensions ${_ext} _hdr)
   LIST(FIND _qt_ui_extensions ${_ext} _ui)
   LIST(FIND _demangler_extensions ${_ext} _dem)
+  LIST(FIND _instances_extensions ${_ext} _ins)
   IF(NOT ${_src} EQUAL -1)
     LIST(APPEND _srcs ${_file})
   ENDIF(NOT ${_src} EQUAL -1)
@@ -115,6 +120,9 @@ FOREACH(_file ${_all_files})
   IF(NOT ${_dem} EQUAL -1)
     LIST(APPEND _demanglers ${_file})
   ENDIF(NOT ${_dem} EQUAL -1)
+  IF(NOT ${_ins} EQUAL -1)
+    LIST(APPEND _instances ${_file})
+  ENDIF(NOT ${_ins} EQUAL -1)
 ENDFOREACH(_file)
 
 # -- Prepare Qt4-based code
@@ -155,6 +163,36 @@ FOREACH(_d ${_demanglers})
   LIST(APPEND _hdrs ${_d_out})
 ENDFOREACH(_d)
 
+## -- Create instances
+FOREACH(_i ${_instances})
+  STRING(
+    REPLACE
+    ${PROJECT_SOURCE_DIR}
+    ${PROJECT_BINARY_DIR}
+    _i_bin
+    ${_i}
+    )
+  GET_FILENAME_COMPONENT(_i_path ${_i_bin} DIRECTORY)
+  GET_FILENAME_COMPONENT(_out_name ${_i} NAME_WE)
+
+  ## -- Infere source code filenames
+  MATH(EXPR _last_range "${cpPlugins_CONFIG_NUMBER_OF_FILES}-1")
+  SET(_out_code "${_i_path}/${_out_name}.h")
+  LIST(APPEND _hdrs ${_i_path}/${_out_name}.h)
+  FOREACH(_n RANGE 0 ${_last_range})
+    LIST(APPEND _out_code ${_i_path}/${_out_name}_${_n}.cxx)
+    LIST(APPEND _srcs ${_i_path}/${_out_name}_${_n}.cxx)
+  ENDFOREACH(_n)
+
+  ## -- Command to write source code
+  ADD_CUSTOM_COMMAND(
+    OUTPUT ${_out_code}
+    DEPENDS ${cpPlugins_bash_CreateInstances_APP} ${_i}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${_i_path}
+    COMMAND ${cpPlugins_bash_CreateInstances_APP} ${_i} ${out_lib_name} ${_i_path}/${_out_name}
+    )
+ENDFOREACH(_i)
+
 ## -- Real compilation
 SET(_hdrs_paths)
 FOREACH(_hdr ${_hdrs})
@@ -164,8 +202,22 @@ FOREACH(_hdr ${_hdrs})
     LIST(APPEND _hdrs_paths ${_path})
   ENDIF(${_path_idx} EQUAL -1)
 ENDFOREACH(_hdr)
+
+SET(${out_sources_list} ${_srcs} PARENT_SCOPE)
+SET(${out_headers_list} ${_hdrs} PARENT_SCOPE)
+SET(${out_headers_paths} ${_hdrs_paths} PARENT_SCOPE)
+
+ENDFUNCTION()
+
+## -------------------------------------------------------------------------
+FUNCTION(
+  CreateLib
+  lib_name
+  lib_type
+  )
+PrepareSourceFiles(${lib_name} _srcs _hdrs _paths ${ARGN})
 INCLUDE_DIRECTORIES(
-  ${_hdrs_paths}
+  ${_paths}
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_BINARY_DIR}
   )
@@ -178,8 +230,14 @@ IF(_srcs)
     EXPORT_FILE_NAME ${lib_name}_Export.h
     STATIC_DEFINE ${lib_name}_BUILT_AS_STATIC
     )
+  IF(${prj_NAME}_All_Headers)
+    SET(_hdr_tmp "${${prj_NAME}_All_Headers};${_hdrs}")
+  ELSE(${prj_NAME}_All_Headers)
+    SET(_hdr_tmp "${_hdrs}")
+  ENDIF(${prj_NAME}_All_Headers)
+  LIST(REMOVE_DUPLICATES _hdr_tmp)
+  SET(${prj_NAME}_All_Headers ${_hdr_tmp} CACHE INTERNAL "All headers." FORCE)
 ENDIF(_srcs)
-
 ENDFUNCTION()
 
 ## -------------------------------------------------------------------------
@@ -193,87 +251,23 @@ FILE(GLOB_RECURSE _files "${lib_dir}/*")
 CreateLib(${lib_name} ${lib_type} ${_files} ${ARGN})
 ENDFUNCTION()
 
-## -------------------------------------------------------------------------
-FUNCTION(
-  CompileInstances
-  out_lib_name
-  def_file
-  number_of_files
-  )
-
-### -- Configure inputs to be cmake-path compatible
-SET(_src_dir ${CMAKE_CURRENT_SOURCE_DIR})
-SET(_bin_dir ${CMAKE_CURRENT_BINARY_DIR})
-SET(_def_file "${_src_dir}/${def_file}")
-
-## -- Infere source code filenames
-MATH(EXPR _last_range "${number_of_files}-1")
-SET(_out_code "${_bin_dir}/${out_lib_name}.h")
-FOREACH(_n RANGE 0 ${_last_range})
-  LIST(APPEND _out_code ${_bin_dir}/${out_lib_name}_${_n}.cxx)
-ENDFOREACH(_n)
-
-## -- Command to write source code
-ADD_CUSTOM_COMMAND(
-  OUTPUT ${_out_code}
-  DEPENDS ${cpPlugins_bash_CreateInstances_APP} ${_def_file}
-  COMMAND ${cpPlugins_bash_CreateInstances_APP} ${_def_file} ${out_lib_name} ${_bin_dir} ${number_of_files}
-  )
-
-## -- Create library
-CreateLib(${out_lib_name} SHARED "${_out_code}")
-
-ENDFUNCTION()
-
 ## -------------------------------------------------------------------------
 FUNCTION(
   CreatePlugin
   lib_name
   lib_dir
-  number_of_files
   )
-
 GET_FILENAME_COMPONENT(_lib_dir ${lib_dir} REALPATH)
 FILE(GLOB_RECURSE _files "${_lib_dir}/*")
 SET(_hdr_to_wrap)
-SET(_instances)
 FOREACH(_file ${_files})
   FILE(READ ${_file} _txt)
   STRING(FIND "${_txt}" "cpPluginsObject" _res)
   IF(NOT ${_res} EQUAL -1)
     LIST(APPEND _hdr_to_wrap ${_file})
   ENDIF(NOT ${_res} EQUAL -1)
-  GET_FILENAME_COMPONENT(_ext ${_file} EXT)
-  IF(${_ext} STREQUAL ".i")
-    LIST(APPEND _instances ${_file})
-  ENDIF(${_ext} STREQUAL ".i")
 ENDFOREACH(_file)
 
-IF(_instances)
-  FOREACH(_instance ${_instances})
-    STRING(
-      REPLACE
-      ${PROJECT_SOURCE_DIR}
-      ${PROJECT_BINARY_DIR}
-      _out_dir
-      ${_lib_dir}
-      )
-    MATH(EXPR _last_range "${number_of_files}-1")
-    SET(_out_code "${_out_dir}/${lib_name}.h")
-    FOREACH(_n RANGE 0 ${_last_range})
-      LIST(APPEND _out_code ${_out_dir}/${lib_name}_${_n}.cxx)
-    ENDFOREACH(_n)
-
-    ADD_CUSTOM_COMMAND(
-      OUTPUT ${_out_code}
-      DEPENDS ${cpPlugins_bash_CreateInstances_APP} ${_instance}
-      COMMAND ${CMAKE_COMMAND} -E make_directory ${_out_dir}
-      COMMAND ${cpPlugins_bash_CreateInstances_APP} ${_instance} ${lib_name} ${_out_dir} ${number_of_files}
-      )
-    LIST(APPEND _files ${_out_code})
-  ENDFOREACH(_instance)
-ENDIF(_instances)
-
 IF(_hdr_to_wrap)
   STRING(
     REPLACE
@@ -296,4 +290,31 @@ CreateLib(${lib_name} SHARED ${_files})
 
 ENDFUNCTION()
 
+## -------------------------------------------------------------------------
+FUNCTION(
+  CompileAppFromDir
+  app_name
+  app_dir
+  )
+OPTION(BUILD_${app_name} "Build ${app_name}" OFF)
+IF(BUILD_${app_name})
+  FILE(GLOB_RECURSE _files "${app_dir}/*")
+  PrepareSourceFiles(${app_name} _srcs _hdrs _paths ${_files} ${ARGN})
+  INCLUDE_DIRECTORIES(
+    ${_paths}
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_BINARY_DIR}
+    )
+  IF(_srcs)
+    SET(_app_os_target)
+    IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+      SET(_app_os_target WIN32)
+      ELSEIF(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
+      SET(_app_os_target MACOSX_BUNDLE)
+    ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+    ADD_EXECUTABLE(${app_name} ${_app_os_target} ${_srcs} ${_hdrs})
+  ENDIF(_srcs)
+ENDIF(BUILD_${app_name})
+ENDFUNCTION()
+
 ## eof - $RCSfile$