]> git.lyx.org Git - lyx.git/blobdiff - development/cmake/modules/LyXMacros.cmake
cmake cosmetics
[lyx.git] / development / cmake / modules / LyXMacros.cmake
index de5b3c62d40480e1444df9a0fbef61f4d2ac1c50..609e83099506d03b5710dadbd41d1d47bc589ed1 100644 (file)
@@ -1,3 +1,29 @@
+#
+#  Copyright (c) 2006, Peter Kümmel, <syntheticpp@gmx.net>
+#
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#  
+#  1. Redistributions of source code must retain the copyright
+#     notice, this list of conditions and the following disclaimer.
+#  2. Redistributions in binary form must reproduce the copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#  3. The name of the author may not be used to endorse or promote products 
+#     derived from this software without specific prior written permission.
+#  
+#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+#  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+#  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+#  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+#  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+#  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+#  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#  
 
 macro(lyx_add_path _list _prefix)
        set(_tmp)
@@ -11,12 +37,12 @@ endmacro(lyx_add_path _out _prefix)
 
 #create the implementation files from the ui files and add them to the list of sources
 #usage: LYX_ADD_QT4_UI_FILES(foo_SRCS ${ui_files})
-macro (LYX_ADD_UI_FILES _sources )
+macro (LYX_ADD_UI_FILES _sources _ui)
    foreach (_current_FILE ${ARGN})
 
       get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE)
       get_filename_component(_basename ${_tmp_FILE} NAME_WE)
-      set(_header ${CMAKE_CURRENT_BINARY_DIR}/ui/${_basename}.h)
+      set(_header ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.h)
 
       # we need to run uic and replace some things in the generated file
       # this is done by executing the cmake script kde4uic.cmake
@@ -31,7 +57,7 @@ macro (LYX_ADD_UI_FILES _sources )
          -P ${CMAKE_MODULE_PATH}/LyXuic.cmake
          MAIN_DEPENDENCY ${_tmp_FILE}
       )
-      set(${_sources} ${${_sources}} ${_header})
+      set(${_ui} ${${_ui}} ${_header})
    endforeach (_current_FILE)
 endmacro (LYX_ADD_UI_FILES)
 
@@ -40,7 +66,7 @@ endmacro (LYX_ADD_UI_FILES)
 MACRO (LYX_AUTOMOC)
    if(QT4_GET_MOC_INC_DIRS)
       QT4_GET_MOC_INC_DIRS(_moc_INCS)
-   endif(QT4_GET_MOC_INC_DIRS)
+   endif()
 
    set(_matching_FILES )
    foreach (_current_FILE ${ARGN})
@@ -91,11 +117,89 @@ MACRO (LYX_AUTOMOC)
                macro_add_file_dependencies(${_abs_FILE} ${_moc})
 
             endforeach (_current_MOC_INC)
-         else(_match)
+         else()
                #message(STATUS "moc not found : ${_abs_FILE} ")
-         endif (_match)
+         endif()
 
-      endif (EXISTS ${_abs_FILE} AND NOT _skip)
+      endif()
    endforeach (_current_FILE)
 endmacro (LYX_AUTOMOC)
 
+
+macro(lyx_const_touched_files _allinone_name _list)
+   set(_file_list ${_allinone_name}_files)
+   set(_file_const ${CMAKE_CURRENT_BINARY_DIR}/${_allinone_name}_const.C)
+   set(_file_touched ${CMAKE_CURRENT_BINARY_DIR}/${_allinone_name}_touched.C)
+   
+   
+   # don't touch exisiting or non-empty file,
+   # so a cmake re-run doesn't touch all created files
+   set(_rebuild_file_const 0)
+   if (NOT EXISTS ${_file_const})
+      set(_rebuild_file_const 1)
+   else()
+      FILE(READ ${_file_const} _file_content)
+      if (NOT _file_content)
+         set(_rebuild_file_const 1)
+      endif()
+   endif()
+   
+   set(_rebuild_file_touched 0)
+   if (NOT EXISTS ${_file_touched})
+      set(_rebuild_file_touched 1)
+   else()
+      FILE(READ ${_file_touched} _file_content)
+      if (NOT _file_content)
+         set(_rebuild_file_touched 1)
+      endif()   
+   endif()
+   
+   if (merge_rebuild)
+      set(_rebuild_file_const 1)
+      set(_rebuild_file_touched 1)
+   endif()
+   
+   if (_rebuild_file_const)
+      file(WRITE  ${_file_const} "// autogenerated file \n//\n")
+      file(APPEND ${_file_const} "//    * clear or delete this file to build it again by cmake \n//\n\n")
+   endif()
+
+   if (_rebuild_file_touched)
+      file(WRITE  ${_file_touched} "// autogenerated file \n//\n")
+      file(APPEND ${_file_touched} "//    * clear or delete this file to build it again by cmake \n//\n")
+      file(APPEND ${_file_touched} "//    * don't touch this file \n//\n\n")
+      file(APPEND ${_file_touched} "#define DONT_INCLUDE_CONST_FILES\n")
+      file(APPEND ${_file_touched} "#include \"${_file_const}\"\n\n\n")
+   endif()
+   
+   set(${_file_list} ${_file_const} ${_file_touched})
+   
+   foreach (_current_FILE ${${_list}})
+      get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
+      # don't include any generated files in the final-file
+      # because then cmake will not know the dependencies
+      get_source_file_property(_isGenerated ${_abs_FILE} GENERATED)
+      if (_isGenerated)
+         list(APPEND ${_file_list} ${_abs_FILE})
+      else()
+        GET_FILENAME_COMPONENT(_file_name ${_abs_FILE} NAME_WE)
+        STRING(REGEX REPLACE "-" "_" _file_name "${_file_name}" )
+        set(__macro_name ${_file_name}___ASSUME_CONST)
+        
+        if (_rebuild_file_const)
+           file(APPEND ${_file_const}  "#define ${__macro_name}\n")
+           file(APPEND ${_file_const}  "#if defined(${__macro_name}) && !defined(DONT_INCLUDE_CONST_FILES)\n")
+           file(APPEND ${_file_const}  "#include \"${_abs_FILE}\"\n")
+           file(APPEND ${_file_const}  "#endif\n\n")
+        endif()
+        
+        if (_rebuild_file_touched)
+           file(APPEND ${_file_touched}  "#ifndef ${__macro_name}\n")
+           file(APPEND ${_file_touched}  "#include \"${_abs_FILE}\"\n")
+           file(APPEND ${_file_touched}  "#endif\n\n")
+        endif()
+      endif()
+   endforeach (_current_FILE)
+endmacro(lyx_const_touched_files)
+
+