Rename define-grammar -> define-regexp-grammar
[texmacs.git] / src / CMakeLists.txt
bloba6c227f10bad0f2f5aa344e3345db821d5164c1e
1 # CMake file for TeXmacs
2 # created by Massimiliano Gubinelli 
4 # The name of our project is "TEXMACS". CMakeLists files in this project can 
5 # refer to the root source directory of the project as ${TEXMACS_SOURCE_DIR} and 
6 # to the root binary directory of the project as ${TEXMACS_BINARY_DIR}. 
9 ### --------------------------------------------------------------------
10 ### Basic settings (project independent)
11 ### --------------------------------------------------------------------
13 cmake_minimum_required(VERSION 2.6)
15 IF(NOT CMAKE_BUILD_TYPE)
16  SET(CMAKE_BUILD_TYPE Debug CACHE STRING
17      "Choose the type of build, options are: None Debug Release
18 RelWithDebInfo MinSizeRel."
19      FORCE)
20 ENDIF(NOT CMAKE_BUILD_TYPE)
22 INCLUDE(CMakeDetermineSystem)
25 ### --------------------------------------------------------------------
26 ### Project name 
27 ### --------------------------------------------------------------------
29 PROJECT(TEXMACS CXX C) # check for C/C++ compiler
31 SET(PACKAGE TeXmacs)
32 SET(DEVEL_VERSION "1.0.7")
33 SET(DEVEL_RELEASE "1")
34 SET(STABLE_VERSION "1.0.7")
35 SET(STABLE_RELEASE "1")
36 SET(WINDOWS_VERSION "1.0.5")
37 SET(WINDOWS_RELEASE "1")
39 #INCLUDE_DIRECTORIES(${TEXMACS_SOURCE_DIR}/cmake/)
40 #MESSAGE( ${TEXMACS_SOURCE_DIR}/cmake )
42 SET(CMAKE_MODULE_PATH ${TEXMACS_SOURCE_DIR}/cmake)
44 ### --------------------------------------------------------------------
45 ### Include standard modules
46 ### --------------------------------------------------------------------
48 INCLUDE(CheckFunctionExists)
49 INCLUDE(CheckLibraryExists)
50 INCLUDE(CheckIncludeFile)
51 INCLUDE(CheckTypeSize)
52 INCLUDE(FindPkgConfig)
53 INCLUDE(CheckCSourceCompiles)
56 ### --------------------------------------------------------------------
57 ### Check for standard functionalities
58 ### --------------------------------------------------------------------
60 CHECK_TYPE_SIZE(FILE HAVE_SIZE)
61 CHECK_TYPE_SIZE(intptr_t HAVE_INTPTR_T)
62 CHECK_TYPE_SIZE(time_t HAVE_TIME_T)
63 CHECK_INCLUDE_FILE(pty.h HAVE_PTY_H)
64 CHECK_INCLUDE_FILE(util.h HAVE_UTIL_H)
65 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
67 INCLUDE(FindX11)
69 ### --------------------------------------------------------------------
70 ### Check for dl library
71 ### --------------------------------------------------------------------
73 CHECK_FUNCTION_EXISTS(dlopen HAVE_DLOPEN)
75 IF (NOT ${HAVE_DLOPEN})
76   CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN)
77   IF (${HAVE_DLOPEN})
78     SET(CONFIG_BDL "-ldl")
79   ENDIF (${HAVE_DLOPEN})
80 ENDIF (NOT ${HAVE_DLOPEN})
82 IF (NOT ${HAVE_DLOPEN})
83   CHECK_LIBRARY_EXISTS(dld dld_link "" HAVE_DLOPEN)
84   IF (${HAVE_DLOPEN})
85     SET(CONFIG_BDL "-ldl")
86   ENDIF (${HAVE_DLOPEN})
87 ENDIF (NOT ${HAVE_DLOPEN})
89 IF (NOT ${HAVE_DLOPEN})
90   CHECK_FUNCTION_EXISTS(shl_load HAVE_DLOPEN)
91   IF (${HAVE_DLOPEN})
92     SET(CONFIG_BDL "-ldl")
93   ENDIF (${HAVE_DLOPEN})
94 ENDIF (NOT ${HAVE_DLOPEN})
97 IF (${HAVE_DLOPEN})
98   SET(DYNAMIC_LINKING 1) # dynamic linking works
99 ENDIF (${HAVE_DLOPEN})
101 ### --------------------------------------------------------------------
102 ### Handle different systems case by case
103 ### --------------------------------------------------------------------
105 SET(CONFIG_OS "GNU_LINUX")
106 SET(CONFIG_OS_SUFFIX "gnu-linux")
107 SET(CONFIG_CXXFLAGS "")
108 SET(CONFIG_CXXTEMPLATE "")
109 SET(CONFIG_STD_SETENV "#define STD_SETENV")
110 SET(CONFIG_SO "so")
111 SET(CONFIG_LIB_PATH "LD_LIBRARY_PATH")
112 SET(CONFIG_CHMOD "chmod -f")
113 SET(CONFIG_CXXOPTIMIZE "-O2")
114 SET(CONFIG_BSTATIC "-Wl,-Bstatic")
115 SET(CONFIG_BSHARED "-Wl,-Bdynamic")
116 SET(CONFIG_BFLAGS "")
117 SET(CONFIG_BPATH "-Wl,-rpath,")
118 SET(CONFIG_WORD_LENGTH "4")
119 SET(CONFIG_WORD_LENGTH_INC "3")
120 SET(CONFIG_WORD_MASK "0xfffffffc")
121 SET(CONFIG_MAX_FAST "260 // WORD_LENGTH more than power of 2")
123 CHECK_TYPE_SIZE("void*" SIZE_OF_VOIDP)
125 MESSAGE(STATUS "Check if we are on a 64-bits computer")
126 IF (${SIZE_OF_VOIDP} EQUAL 8)
127   SET(CONFIG_WORD_LENGTH "8")
128   SET(CONFIG_WORD_LENGTH_INC "7")
129   SET(CONFIG_WORD_MASK "0xfffffffffffffff8")
130   SET(CONFIG_MAX_FAST "264 // WORD_LENGTH more than power of 2")
131 ENDIF (${SIZE_OF_VOIDP} EQUAL 8)
134 IF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
135   MESSAGE(STATUS "final adjustments for an Intel or AMD GNU/Linux host")
136   SET(CONFIG_CXXOPTIMIZE "-O3 -fexpensive-optimizations")
137 ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
139 IF(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
140   MESSAGE(STATUS "final adjustments for an Intel or AMD GNU/BSD host")
141   SET(CONFIG_CXXOPTIMIZE "-O3 -fexpensive-optimizations")
142 ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
144 IF(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
145   MESSAGE(STATUS "final adjustments for an Intel or AMS Solaris host")
146   SET(CONFIG_CXXOPTIMIZE "-O3 -fexpensive-optimizations")
147   SET(CONFIG_CXXOPTIMIZE "-O3")
148   SET(CONFIG_BPATH "-Wl,-R,")
149 #  SET(X11_LDFLAGS "${X_LIBS} -lXext -lX11 -lsocket")
150 ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
152 IF(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN_NT-5.1")
153   MESSAGE(STATUS "final adjustments for cygwin host")
154   SET(CONFIG_OS "CYGWIN")
155   SET(CONFIG_BFLAGS "-Wl,-stack,8388608")
156 ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN_NT-5.1")
158 ## TODO FINISH
161 ### --------------------------------------------------------------------
162 ### Memory allocation options
163 ### --------------------------------------------------------------------
165 IF(${DISABLE_FASTALLOC})
166   SET(NO_FAST_ALLOC 1)
167 ENDIF(${DISABLE_FASTALLOC})
170 ### --------------------------------------------------------------------
171 ### Experimental options
172 ### --------------------------------------------------------------------
174 #  SET(EXPERIMENTAL 1)
176 ### --------------------------------------------------------------------
177 ###  Test for Libraries
178 ### --------------------------------------------------------------------
180 FIND_PACKAGE(Guile REQUIRED)
181 FIND_PACKAGE(Iconv)
182 FIND_PACKAGE(FreeType2)
183 FIND_PACKAGE(Cairo)
184 FIND_PACKAGE(Imlib2)
185 #FIND_PACKAGE(Axel)
191 ### --------------------------------------------------------------------
192 ###  Some Guile related adjustements
193 ### --------------------------------------------------------------------
195 IF(Guile_VERSION_STRING VERSION_LESS 1.6)
196   SET(CONFIG_GUILE_SERIAL "A")
197 ELSEIF(Guile_VERSION_STRING VERSION_LESS 1.8)
198   SET(CONFIG_GUILE_SERIAL "B")
199 ELSE(Guile_VERSION_STRING VERSION_LESS 1.8)
200   SET(CONFIG_GUILE_SERIAL "C")
201 ENDIF(Guile_VERSION_STRING VERSION_LESS 1.6)
204 SET(CMAKE_REQUIRED_FLAGS "-Werror ${Guile_CFLAGS}")
205 SET(CMAKE_REQUIRED_INCLUDES ${Guile_INCLUDE_DIRS})
206 SET(CMAKE_REQUIRED_LIBRARIES ${Guile_LIBRARIES})
208 MESSAGE(STATUS "Checking the size_t of guile strings")
210 CHECK_C_SOURCE_COMPILES(  "#include <guile/gh.h>
211   #include <libguile.h>
212   void print_string (SCM s) {
213     int len_r;
214     char* r= gh_scm2newstr (s, &len_r); } int main() { return 0; }
215 " _guile_str_size_test)
217 IF(_guile_str_size_test)
218   SET(guile_str_size_t int)
219 ELSE(_guile_str_size_test)
220   SET(guile_str_size_t size_t)
221 ENDIF(_guile_str_size_test)
223 MESSAGE(STATUS "Checking whether ... arguments behave correctly")
225 CHECK_C_SOURCE_COMPILES(  
226 " #include <guile/gh.h>
227   #include <libguile.h>
228   typedef SCM (*FN)(...);
229   static SCM identity (SCM x) { return x; }
230   void declare () { gh_new_procedure ("identity", (FN) identity, 1, 0, 0); }
231   int main() { return 0; }
232 " _guile_dots_test)
234 IF(_guile_dots_test)
235   SET(DOTS_OK 1)
236 ELSE(_guile_dots_test)
237   SET(DOTS_OK)
238 ENDIF(_guile_dots_test)
240 #MESSAGE(STATUS "Checking if statically linking with guile works")
241 ##TODO
244 ### --------------------------------------------------------------------
245 ### GUI selection
246 ### --------------------------------------------------------------------
248 SET(GUI_TYPE) # nothing or WIN32, MACOSX bundles are treated independetly
250 IF(NOT TEXMACS_GUI)
251   SET(TEXMACS_GUI "X11" CACHE STRING "TeXmacs Gui (Qt, X11, Aqua)")
252 ENDIF(NOT TEXMACS_GUI)
254 IF(TEXMACS_GUI STREQUAL "Qt")
256   FIND_PACKAGE(Qt4)
258   IF(QT4_FOUND)
259     IF(WIN32)
260      SET(GUI_TYPE WIN32)
261     ENDIF(WIN32)
263     INCLUDE(${QT_USE_FILE})
264     SET(NO_FAST_ALLOC 1)
265     SET(QTTEXMACS 1)
266     SET(CONFIG_GUI "QT")
267     SET(CONFIG_QT "Qt")
268     MESSAGE(STATUS "Enabling experimental  Qt port")
269   ELSE(QT4_FOUND)
270     MESSAGE(ERROR "Qt is required to compile the Qt port")
271   ENDIF(QT4_FOUND)
272   
273 ELSEIF(TEXMACS_GUI STREQUAL "Aqua")
275   IF (APPLE)
276     SET(GUI_TYPE MACOSX_BUNDLE)
278     SET(NO_FAST_ALLOC 1)
279     SET(AQUATEXMACS 1)
280     SET(COCOA_CFLAGS "")
281     SET(COCOA_LDFLAGS "-framework COCOA")
282     SET(CONFIG_GUI "COCOA")
283     SET(CONFIG_COCOA "Cocoa")
285     MESSAGE(STATUS "Enabling experimental Cocoa port")
287   ELSE (APPLE)
288   
289     MESSAGE( ERROR "Aqua GUI is not supported on this system")
290     
291   ENDIF (APPLE)
293 ELSE(TEXMACS_GUI STREQUAL "Qt")
295   FIND_PACKAGE(X11)
297   SET(CONFIG_X11 "X11 Widkit Ghostscript")
298   SET(CONFIG_GUI "X11")
299   
301   MESSAGE(STATUS "Enabling standard X11 interface")
303 ENDIF(TEXMACS_GUI STREQUAL "Qt")
305 ### --------------------------------------------------------------------
306 ### Debugging options
307 ### --------------------------------------------------------------------
310 ### --------------------------------------------------------------------
311 ### Warning options
312 ### --------------------------------------------------------------------
314 ### --------------------------------------------------------------------
315 ### Optimization options
316 ### --------------------------------------------------------------------
319 ### --------------------------------------------------------------------
320 ### Generate configure headers
321 ### --------------------------------------------------------------------
323 CONFIGURE_FILE(${TEXMACS_SOURCE_DIR}/src/System/config.h.cmake ${TEXMACS_BINARY_DIR}/src/System/config.h)
324 CONFIGURE_FILE(${TEXMACS_SOURCE_DIR}/src/System/tm_configure.hpp.cmake ${TEXMACS_BINARY_DIR}/src/System/tm_configure.hpp)
326 ### --------------------------------------------------------------------
327 ### Set the executable target name and other stuff
328 ### --------------------------------------------------------------------
330 SET(TeXmacs_binary_name "texmacs_${TEXMACS_GUI}")
332 # If we are build a "Debug" version then put that on the built Application
333 SET (EXE_DEBUG_EXTENSION "_debug")
335 ### --------------------------------------------------------------------
336 ### Compile sources
337 ### --------------------------------------------------------------------
339 ADD_SUBDIRECTORY(src)
341 ### --------------------------------------------------------------------
342 ### Complete bundle if MacOSX
343 ### --------------------------------------------------------------------
345 IF (APPLE AND NOT TEXMACS_GUI STREQUAL X11)
346   SET(BUNDLE_DEBUG_EXTENSION)
347   IF (DEBUG)
348     SET(BUNDLE_DEBUG_EXTENSION "_debug")
349   ENDIF (DEBUG)  
350   SET(APP_BUNDLE_NAME ${TeXmacs_binary_name}${BUNDLE_DEBUG_EXTENSION}".app")
351   ADD_CUSTOM_TARGET ( bundle
352             mkdir -p  ${TEXMACS_BINARY_DIR}/${APP_BUNDLE_NAME}/Contents/MacOS 
353     COMMAND mkdir -p  ${TEXMACS_BINARY_DIR}/${APP_BUNDLE_NAME}/Contents/Resources
354     COMMAND cp ${TEXMACS_SOURCE_DIR}/misc/bundle/Info.plist ${TEXMACS_BINARY_DIR}/${APP_BUNDLE_NAME}/Contents/Resources
355     COMMAND cp ${TEXMACS_SOURCE_DIR}/misc/bundle/TeXmacs ${TEXMACS_BINARY_DIR}/${APP_BUNDLE_NAME}/Contents/MacOS
356     COMMAND chmod a+x  ${TEXMACS_BINARY_DIR}/${APP_BUNDLE_NAME}/Contents/MacOS/TeXmacs
357   )
358 ENDIF (APPLE AND NOT TEXMACS_GUI STREQUAL X11)
361 ### --------------------------------------------------------------------
362 ### Installation
363 ### --------------------------------------------------------------------