DRC | 2ff39b8 | 2011-07-28 08:38:59 +0000 | [diff] [blame^] | 1 | # |
| 2 | # "$Id: CMakeLists.txt 8198 2011-01-06 10:24:58Z manolo $" |
| 3 | # |
| 4 | # Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org) |
| 5 | # Written by Andy Cedilnik and Julien Jomier |
| 6 | # |
| 7 | # Copyright 1998-2010 by Bill Spitzak and others. |
| 8 | # |
| 9 | # This library is free software; you can redistribute it and/or |
| 10 | # modify it under the terms of the GNU Library General Public |
| 11 | # License as published by the Free Software Foundation; either |
| 12 | # version 2 of the License, or (at your option) any later version. |
| 13 | # |
| 14 | # This library is distributed in the hope that it will be useful, |
| 15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 17 | # Library General Public License for more details. |
| 18 | # |
| 19 | # You should have received a copy of the GNU Library General Public |
| 20 | # License along with this library; if not, write to the Free Software |
| 21 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
| 22 | # USA. |
| 23 | # |
| 24 | # Please report all bugs and problems on the following page: |
| 25 | # |
| 26 | # http:#www.fltk.org/str.php |
| 27 | # |
| 28 | |
| 29 | ####################################################################### |
| 30 | # basic setup |
| 31 | ####################################################################### |
| 32 | project(FLTK) |
| 33 | cmake_minimum_required(VERSION 2.6) |
| 34 | |
| 35 | # The FLTK version |
| 36 | set(FLTK_VERSION_MAJOR "1") |
| 37 | set(FLTK_VERSION_MINOR "3") |
| 38 | set(FLTK_VERSION_PATCH "0") |
| 39 | set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}") |
| 40 | set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}") |
| 41 | |
| 42 | # Search for modules in the FLTK source dir first |
| 43 | set(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake") |
| 44 | |
| 45 | include_directories(BEFORE ${FLTK_BINARY_DIR} ${FLTK_SOURCE_DIR}) |
| 46 | |
| 47 | ####################################################################### |
| 48 | # platform dependent information |
| 49 | ####################################################################### |
| 50 | |
| 51 | include(TestBigEndian) |
| 52 | TEST_BIG_ENDIAN(WORDS_BIGENDIAN) |
| 53 | |
| 54 | if(APPLE) |
| 55 | set(__APPLE_QUARTZ__ 1) |
| 56 | set(HAVE_STRTOLL 1) |
| 57 | set(HAVE_STRCASECMP 1) |
| 58 | set(HAVE_DIRENT_H 1) |
| 59 | endif(APPLE) |
| 60 | |
| 61 | if(WIN32) |
| 62 | if(MSVC) |
| 63 | add_definitions(-DWIN32_LEAN_AND_MEAN) |
| 64 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) |
| 65 | endif(MSVC) |
| 66 | endif(WIN32) |
| 67 | |
| 68 | ####################################################################### |
| 69 | # size of ints |
| 70 | include(CheckTypeSize) |
| 71 | |
| 72 | CHECK_TYPE_SIZE(short SIZEOF_SHORT) |
| 73 | CHECK_TYPE_SIZE(int SIZEOF_INT) |
| 74 | CHECK_TYPE_SIZE(long SIZEOF_LONG) |
| 75 | CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG) |
| 76 | |
| 77 | if(${SIZEOF_SHORT} MATCHES "^2$") |
| 78 | set(U16 "unsigned short") |
| 79 | endif(${SIZEOF_SHORT} MATCHES "^2$") |
| 80 | |
| 81 | if(${SIZEOF_INT} MATCHES "^4$") |
| 82 | set(U32 "unsigned") |
| 83 | else() |
| 84 | if(${SIZEOF_LONG} MATCHES "^4$") |
| 85 | set(U32 "unsigned long") |
| 86 | endif(${SIZEOF_LONG} MATCHES "^4$") |
| 87 | endif(${SIZEOF_INT} MATCHES "^4$") |
| 88 | |
| 89 | if(${SIZEOF_INT} MATCHES "^8$") |
| 90 | set(U64 "unsigned") |
| 91 | else() |
| 92 | if(${SIZEOF_LONG} MATCHES "^8$") |
| 93 | set(U64 "unsigned long") |
| 94 | endif(${SIZEOF_LONG} MATCHES "^8$") |
| 95 | endif(${SIZEOF_INT} MATCHES "^8$") |
| 96 | |
| 97 | ####################################################################### |
| 98 | # check for headers, libraries and functions |
| 99 | ####################################################################### |
| 100 | # headers |
| 101 | find_file(HAVE_DIRENT_H dirent.h) |
| 102 | find_file(HAVE_FREETYPE_H freetype.h PATH_SUFFIXES freetype2) |
| 103 | find_file(HAVE_LOCALE_H locale.h) |
| 104 | find_file(HAVE_NDIR_H ndir.h) |
| 105 | find_file(HAVE_PTHREAD_H pthread.h) |
| 106 | find_file(HAVE_SYS_DIR_H sys/dir.h) |
| 107 | find_file(HAVE_SYS_NDIR_H sys/ndir.h) |
| 108 | find_file(HAVE_SYS_SELECT_H sys/select.h) |
| 109 | find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h) |
| 110 | |
| 111 | mark_as_advanced(HAVE_FREETYPE_H) |
| 112 | mark_as_advanced(HAVE_SYS_DIR_H) |
| 113 | mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H) |
| 114 | mark_as_advanced(HAVE_SYS_STDTYPES_H) |
| 115 | |
| 116 | # where to find freetype headers |
| 117 | find_path(FREETYPE_PATH freetype/config/ftheader.h PATH_SUFFIXES freetype2) |
| 118 | if(FREETYPE_PATH) |
| 119 | include_directories(${FREETYPE_PATH}) |
| 120 | endif(FREETYPE_PATH) |
| 121 | mark_as_advanced(FREETYPE_PATH) |
| 122 | |
| 123 | ####################################################################### |
| 124 | # functions |
| 125 | include(CheckFunctionExists) |
| 126 | |
| 127 | if(HAVE_DLFCN_H) |
| 128 | set(CMAKE_REQUIRED_LIBRARIES dl) |
| 129 | endif(HAVE_DLFCN_H) |
| 130 | CHECK_FUNCTION_EXISTS(dlsym HAVE_DLSYM) |
| 131 | |
| 132 | CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV) |
| 133 | |
| 134 | CHECK_FUNCTION_EXISTS(scandir HAVE_SCANDIR) |
| 135 | CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF) |
| 136 | |
| 137 | CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT) |
| 138 | CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY) |
| 139 | CHECK_FUNCTION_EXISTS(strtoll HAVE_STRTOLL) |
| 140 | CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF) |
| 141 | |
| 142 | set(CMAKE_REQUIRED_LIBRARIES) |
| 143 | |
| 144 | if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX) |
| 145 | set(MSG "POSIX compatible scandir") |
| 146 | message(STATUS "Looking for ${MSG}") |
| 147 | try_compile(V |
| 148 | ${FLTK_BINARY_DIR} |
| 149 | ${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx |
| 150 | ) |
| 151 | if(V) |
| 152 | message(STATUS "${MSG} - found") |
| 153 | set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "") |
| 154 | else() |
| 155 | message(STATUS "${MSG} - not found") |
| 156 | set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND) |
| 157 | endif(V) |
| 158 | endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX) |
| 159 | mark_as_advanced(HAVE_SCANDIR_POSIX) |
| 160 | |
| 161 | ####################################################################### |
| 162 | # options |
| 163 | ####################################################################### |
| 164 | if(APPLE) |
| 165 | option(OPTION_APPLE_X11 "use X11" OFF) |
| 166 | endif(APPLE) |
| 167 | |
| 168 | if(NOT APPLE OR OPTION_APPLE_X11) |
| 169 | include(FindX11) |
| 170 | if(X11_FOUND) |
| 171 | set(USE_X11 1) |
| 172 | endif(X11_FOUND) |
| 173 | endif(NOT APPLE OR OPTION_APPLE_X11) |
| 174 | |
| 175 | ####################################################################### |
| 176 | option(OPTION_USE_POLL "use poll if available" OFF) |
| 177 | |
| 178 | if(OPTION_USE_POLL) |
| 179 | CHECK_FUNCTION_EXISTS(poll USE_POLL) |
| 180 | endif(OPTION_USE_POLL) |
| 181 | |
| 182 | ####################################################################### |
| 183 | option(OPTION_USE_THREADS "use multi-threading" ON) |
| 184 | |
| 185 | if(OPTION_USE_THREADS) |
| 186 | include(FindThreads) |
| 187 | endif(OPTION_USE_THREADS) |
| 188 | |
| 189 | if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY) |
| 190 | add_definitions("-D_THREAD_SAFE -D_REENTRANT") |
| 191 | set(USE_THREADS 1) |
| 192 | set(FLTK_THREADS_FOUND TRUE) |
| 193 | else() |
| 194 | set(FLTK_THREADS_FOUND FALSE) |
| 195 | endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY) |
| 196 | |
| 197 | if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT) |
| 198 | set(HAVE_PTHREAD 1) |
| 199 | set(FLTK_PTHREADS_FOUND TRUE) |
| 200 | else() |
| 201 | set(HAVE_PTHREAD 0) |
| 202 | set(HAVE_PTHREAD_H 0) |
| 203 | set(FLTK_PTHREADS_FOUND FALSE) |
| 204 | endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT) |
| 205 | |
| 206 | ####################################################################### |
| 207 | if(X11_Xinerama_FOUND) |
| 208 | option(OPTION_USE_XINERAMA "use lib Xinerama" ON) |
| 209 | endif(X11_Xinerama_FOUND) |
| 210 | |
| 211 | if(OPTION_USE_XINERAMA) |
| 212 | set(HAVE_XINERAMA ${X11_Xinerama_FOUND}) |
| 213 | include_directories(${X11_Xinerama_INCLUDE_PATH}) |
| 214 | set(FLTK_XINERAMA_FOUND TRUE) |
| 215 | else() |
| 216 | set(FLTK_XINERAMA_FOUND FALSE) |
| 217 | endif(OPTION_USE_XINERAMA) |
| 218 | |
| 219 | ####################################################################### |
| 220 | if(X11_Xft_FOUND) |
| 221 | option(OPTION_USE_XFT "use lib Xft" ON) |
| 222 | endif(X11_Xft_FOUND) |
| 223 | |
| 224 | if(OPTION_USE_XFT) |
| 225 | set(USE_XFT X11_Xft_FOUND) |
| 226 | set(FLTK_XFT_FOUND TRUE) |
| 227 | else() |
| 228 | set(FLTK_XFT_FOUND FALSE) |
| 229 | endif(OPTION_USE_XFT) |
| 230 | |
| 231 | ####################################################################### |
| 232 | |
| 233 | add_subdirectory(src) |
| 234 | |
| 235 | # generate config.h |
| 236 | configure_file( |
| 237 | "${FLTK_SOURCE_DIR}/configh.cmake.in" |
| 238 | "${FLTK_BINARY_DIR}/config.h" |
| 239 | @ONLY |
| 240 | ) |