Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/buildsystem2/cmake/CheckOGREPlugins.cmake @ 2624

Last change on this file since 2624 was 2624, checked in by rgrieder, 15 years ago

Replaced most of the ELSE(…) and ENDIF(…) with ELSE() and ENDIF(). Kept the shorter and the spreaded ones for better clarity since that's what it originally was thought for. But I can really pollute the code when having long conditions and lots of IFs.

  • Property svn:eol-style set to native
File size: 4.3 KB
Line 
1#    Author: Reto '1337' Grieder (2008)
2#
3#    This program is free software; you can redistribute it and/or modify
4#    it under the terms of the GNU General Public License as published by
5#    the Free Software Foundation; either version 2 of the License, or
6#    (at your option) any later version.
7#
8#    This program is distributed in the hope that it will be useful,
9#    but WITHOUT ANY WARRANTY; without even the implied warranty of
10#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11#    GNU General Public License for more details.
12#
13#    You should have received a copy of the GNU General Public License
14#    along with this program; if not, write to the Free Software
15#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
16
17###################################################
18# Make sure we have the required plugins for OGRE #
19###################################################
20
21FUNCTION(CHECK_OGRE_PLUGINS)
22
23  SET(OGRE_PLUGINS ${ARGN})
24
25  IF(WIN32)
26    # On Windows we need only *.dll, not *.lib. Especially the MSVC generator doesn't look for *.dll
27    SET(CMAKE_FIND_LIBRARY_SUFFIXES .dll)
28  ENDIF(WIN32)
29  # Do not prefix "lib" on any platform
30  SET(CMAKE_FIND_LIBRARY_PREFIXES "")
31
32  SET(OGRE_RENDER_SYSTEM_FOUND FALSE)
33  FOREACH(_plugin ${OGRE_PLUGINS})
34    FIND_LIBRARY(OGRE_PLUGIN_${_plugin}_OPTIMIZED
35      NAMES ${_plugin}
36      PATHS $ENV{OGRE_HOME} $ENV{OGRE_PLUGIN_DIR}
37      PATH_SUFFIXES lib lib/OGRE bin bin/Release bin/release Release release
38    )
39    FIND_LIBRARY(OGRE_PLUGIN_${_plugin}_DEBUG
40      NAMES ${_plugin}d ${_plugin}_d
41      PATHS $ENV{OGRE_HOME} $ENV{OGRE_PLUGIN_DIR}
42      PATH_SUFFIXES lib lib/OGRE bin bin/Debug bin/debug Debug debug
43    )
44    # We only need at least one render system. Check at the end.
45    IF(NOT ${_plugin} MATCHES "RenderSystem")
46      IF(NOT OGRE_PLUGIN_${_plugin}_OPTIMIZED)
47        MESSAGE(FATAL_ERROR "Could not find OGRE plugin named ${_plugin}")
48      ENDIF()
49    ELSEIF(OGRE_PLUGIN_${_plugin}_OPTIMIZED)
50      SET(OGRE_RENDER_SYSTEM_FOUND TRUE)
51    ENDIF()
52
53    IF(OGRE_PLUGIN_${_plugin}_OPTIMIZED)
54      # If debug version is not available, release will do as well
55      IF(NOT OGRE_PLUGIN_${_plugin}_DEBUG)
56        SET(OGRE_PLUGIN_${_plugin}_DEBUG ${OGRE_PLUGIN_${_plugin}_OPTIMIZED} CACHE STRING "" FORCE)
57      ENDIF()
58      MARK_AS_ADVANCED(OGRE_PLUGIN_${_plugin}_OPTIMIZED OGRE_PLUGIN_${_plugin}_DEBUG)
59
60      ### Set variables to configure orxonox.ini correctly afterwards in bin/ ###
61      # Check and set the folders
62      GET_FILENAME_COMPONENT(_release_folder ${OGRE_PLUGIN_${_plugin}_OPTIMIZED} PATH)
63      IF(OGRE_PLUGINS_FOLDER_RELEASE AND NOT OGRE_PLUGINS_FOLDER_RELEASE STREQUAL _release_folder)
64        MESSAGE(FATAL_ERROR "Ogre release plugins have to be in the same folder!")
65      ENDIF()
66      SET(OGRE_PLUGINS_FOLDER_RELEASE ${_release_folder})
67      GET_FILENAME_COMPONENT(_debug_folder ${OGRE_PLUGIN_${_plugin}_DEBUG} PATH)
68      IF(OGRE_PLUGINS_FOLDER_DEBUG AND NOT OGRE_PLUGINS_FOLDER_DEBUG STREQUAL _debug_folder)
69        MESSAGE(FATAL_ERROR "Ogre debug plugins have to be in the same folder!")
70      ENDIF()
71      SET(OGRE_PLUGINS_FOLDER_DEBUG ${_debug_folder})
72
73      # Create a list with the plugins for relase and debug configurations
74      LIST(APPEND OGRE_PLUGINS_RELEASE ${_plugin})
75      IF(OGRE_PLUGIN_${_plugin}_DEBUG)
76        # Determine debug postfix ("d" or "_d")
77        IF(OGRE_PLUGIN_${_plugin}_DEBUG MATCHES "_d\\.|_d$")
78          LIST(APPEND OGRE_PLUGINS_DEBUG "${_plugin}_d")
79        ELSE()
80          LIST(APPEND OGRE_PLUGINS_DEBUG "${_plugin}d")
81        ENDIF()
82      ELSE()
83        LIST(APPEND OGRE_PLUGINS_DEBUG ${_plugin})
84      ENDIF()
85    ENDIF(OGRE_PLUGIN_${_plugin}_OPTIMIZED)
86  ENDFOREACH(_plugin)
87  IF(NOT OGRE_RENDER_SYSTEM_FOUND)
88      MESSAGE(FATAL_ERROR "Could not find an OGRE render system plugin")
89  ENDIF()
90
91  # List has to be comma separated for orxonox.ini
92  STRING(REPLACE ";" ", " OGRE_PLUGINS_RELEASE "${OGRE_PLUGINS_RELEASE}")
93  STRING(REPLACE ";" ", " OGRE_PLUGINS_DEBUG   "${OGRE_PLUGINS_DEBUG}")
94
95  # Set variables outside function scope
96  SET(OGRE_PLUGINS_FOLDER_DEBUG ${OGRE_PLUGINS_FOLDER_DEBUG} PARENT_SCOPE)
97  SET(OGRE_PLUGINS_FOLDER_RELEASE ${OGRE_PLUGINS_FOLDER_RELEASE} PARENT_SCOPE)
98  SET(OGRE_PLUGINS_RELEASE ${OGRE_PLUGINS_RELEASE} PARENT_SCOPE)
99  SET(OGRE_PLUGINS_DEBUG ${OGRE_PLUGINS_DEBUG} PARENT_SCOPE)
100
101ENDFUNCTION(CHECK_OGRE_PLUGINS)
Note: See TracBrowser for help on using the repository browser.