check activateable() before allowing clicks (oops)
[openc2e.git] / CMakeLists.txt
blob8567067d72dce6d41d7c2dacc0ac2119a170437a
1 PROJECT (OPENC2E CXX C)
3 SET(SRC "${OPENC2E_SOURCE_DIR}")
4 SET(BIN "${OPENC2E_BINARY_DIR}")
5 SET(GEN "${BIN}/generated")
6 EXECUTE_PROCESS(COMMAND mkdir "${GEN}" -p)
8 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 1)
9 SET(CMAKE_MODULE_PATH "${SRC}/cmake")
11 SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The type of build to perform. Valid values are: RelWithDebInfo (default), Debug, Release, MinSizeRel")
12 IF (CMAKE_BUILD_TYPE STREQUAL "")
13         SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "The type of build to perform. Valid values are: RelWithDebInfo (default), Debug, Release, MinSizeRel" FORCE)
14 ENDIF (CMAKE_BUILD_TYPE STREQUAL "")
16 SET(OPENC2E_USE_QT "TRUE" CACHE BOOL "Build the qt GUI")
17 SET(OPENC2E_USE_OPENAL "AUTO" CACHE STRING "Use OpenAL (YES/NO/AUTO)")
18 IF (OPENC2E_USE_OPENAL MATCHES "^(YES|NO|AUTO)$")
19 ELSE (OPENC2E_USE_OPENAL MATCHES "^(YES|NO|AUTO)$")
20         MESSAGE(SEND_ERROR "The value of OPENC2E_USE_OPENAL must be YES, NO, or AUTO.")
21 ENDIF (OPENC2E_USE_OPENAL MATCHES "^(YES|NO|AUTO)$")
23 SET(OPENC2E_USE_SERIALIZATION "FALSE" CACHE BOOL "Build the experimental serialization code")
24 MARK_AS_ADVANCED(FORCE OPENC2E_USE_SERIALIZATION)
25 IF (OPENC2E_USE_SERIALIZATION)
26         SET(SER_SRCS caosVM_ser_real.cpp)
27 ELSE (OPENC2E_USE_SERIALIZATION)
28         SET(SER_SRCS caosVM_ser_stub.cpp)
29 ENDIF (OPENC2E_USE_SERIALIZATION)
32 SET(OPENC2E_CORE
33         Agent.cpp
34         AgentHelpers.cpp
35         AgentRef.cpp
36         attFile.cpp
37         Backend.cpp
38         Blackboard.cpp
39         blkImage.cpp
40         bmpImage.cpp
41         bytecode.cpp
42         c16Image.cpp
43         c2eBrain.cpp
44         CallButton.cpp
45         Camera.cpp
46         caosScript.cpp
47         caosVar.cpp
48         caosVM_agent.cpp
49         caosVM_camera.cpp
50         caosVM_compound.cpp
51         caosVM_core.cpp
52         caosVM_creatures.cpp
53         caosVM_debug.cpp
54         caosVM_files.cpp
55         caosVM_flow.cpp
56         caosVM_genetics.cpp
57         caosVM_history.cpp
58         caosVM_input.cpp
59         caosVM_map.cpp
60         caosVM_motion.cpp
61         caosVM_net.cpp
62         caosVM.cpp
63         caosVM_ports.cpp
64         caosVM_resources.cpp
65         caosVM_scripts.cpp
66         caosVM_sounds.cpp
67         caosVM_time.cpp
68         caosVM_variables.cpp
69         caosVM_vectors.cpp
70         caosVM_vehicles.cpp
71         caosVM_world.cpp
72         ${GEN}/cataloglexer.cpp
73         Catalogue.cpp
74         ${GEN}/catalogue.tab.cpp
75         ${GEN}/cmddata.cpp
76         cobFile.cpp
77         CompoundAgent.cpp
78         CompoundPart.cpp
79         Creature.cpp
80         CreatureAgent.cpp
81         creaturesImage.cpp
82         dialect.cpp
83         Engine.cpp
84         exceptions.cpp
85         fileSwapper.cpp
86         genomeFile.cpp
87         historyManager.cpp
88         imageManager.cpp
89         #       ${GEN}/lex.mng.cpp
90         ${GEN}/caoslexer.cpp
91         Lift.cpp
92         Map.cpp
93         MetaRoom.cpp
94         mmapifstream.cpp
95         #       mngfile.cpp
96         #       ${GEN}/mngparser.tab.cpp
97         oldBrain.cpp
98         PathResolver.cpp
99         physics.cpp
100         PointerAgent.cpp
101         Port.cpp
102         pray.cpp
103         prayManager.cpp
104         renderable.cpp
105         Room.cpp
106         Scriptorium.cpp
107         SDLBackend.cpp
108         SFCFile.cpp
109         SimpleAgent.cpp
110         SkeletalCreature.cpp
111         sprImage.cpp
112         streamutils.cpp
113         Vehicle.cpp
114         World.cpp
115         main.cpp
116         util.cpp
119 SET(OPENC2E_SDL
120         # all in the main openc2e listing
121         # XXX: non-sdl-based backends?
124 SET(OPENC2E_QT
125         qtgui/qtopenc2e.cpp
126         qtgui/openc2eview.cpp
127         qtgui/AgentInjector.cpp
128         qtgui/BrainViewer.cpp
129         qtgui/imagepreview.cpp
130         qtgui/c1cobfile.cpp
131         qtgui/QtBackend.cpp
132         qtgui/GraphWidget.cpp
133         qtgui/CreatureGrapher.cpp
134         tools/braininavat/brainview.cpp)
136 SET(OPENC2E_QT_MOC_HDRS
137         qtgui/qtopenc2e.h
138         qtgui/openc2eview.h
139         qtgui/AgentInjector.h
140         qtgui/BrainViewer.h
141         qtgui/imagepreview.h
142         qtgui/GraphWidget.h
143         qtgui/CreatureGrapher.h
144         tools/braininavat/brainview.h)
146 SET(OPENC2E_QT_UIS
147         qtgui/agents.ui)
151 cmake_minimum_required(VERSION 2.4.0)
152 INCLUDE(TestBigEndian)
153 INCLUDE(CheckIncludeFile)
154 TEST_BIG_ENDIAN(BIG_ENDIAN)
155 IF(BIG_ENDIAN)
156         ADD_DEFINITIONS("-DOC2E_BIG_ENDIAN=1")
157         CHECK_INCLUDE_FILE(byteswap.h HAVE_BYTESWAP_H)
158         IF(HAVE_BYTESWAP_H)
159                 ADD_DEFINITIONS("-DHAVE_BYTESWAP_H=1")
160         ELSE(HAVE_BYTESWAP_H)
161                 ADD_DEFINITIONS("-DHAVE_BYTESWAP_H=0")
162         ENDIF(HAVE_BYTESWAP_H)
163 ELSE(BIG_ENDIAN)
164         ADD_DEFINITIONS("-DOC2E_BIG_ENDIAN=0")
165 ENDIF(BIG_ENDIAN)
166 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
167 IF(HAVE_STDINT_H)
168         ADD_DEFINITIONS("-DHAVE_STDINT_H=1")
169 ELSE(HAVE_STDINT_H)
170 ENDIF(HAVE_STDINT_H)
172 FIND_PACKAGE(SDL REQUIRED)
173 #FIND_PACKAGE(SDL_mixer REQUIRED)
174 FIND_PACKAGE(SDL_net REQUIRED)
175 FIND_PACKAGE(SDL_gfx REQUIRED)
176 IF(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
177         FIND_PACKAGE(OpenAL)
178 ELSE(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
179         SET(OPENAL_FOUND "NO")
180 ENDIF(OPENC2E_USE_OPENAL MATCHES "^(YES|AUTO)$")
181 FIND_PACKAGE(ALUT)
182 FIND_PACKAGE(Boost REQUIRED)
183 IF(OPENC2E_USE_QT)
184         find_package(Qt4 REQUIRED)
185 ENDIF(OPENC2E_USE_QT)
187 SET(USE_OPENAL "NO")
189 IF(OPENAL_FOUND STREQUAL "YES")
190     IF(ALUT_FOUND STREQUAL "YES")
191         SET(USE_OPENAL "YES")
192     ENDIF(ALUT_FOUND STREQUAL "YES")
193 ENDIF(OPENAL_FOUND STREQUAL "YES")
194      
195 IF(USE_OPENAL STREQUAL "NO")
196         IF (OPENC2E_USE_OPENAL MATCHES "^YES")
197                 MESSAGE(FATAL_ERROR "OpenAL not found.")
198         ENDIF (OPENC2E_USE_OPENAL MATCHES "^YES")
199         
200     SET(ALUT_INCLUDE_DIR "")
201     SET(OPENAL_INCLUDE_DIR "")
202     SET(ALUT_LIBRARY "")
203     SET(OPENAL_LIBRARY "")
204     SET(OPENAL_SRC "")
205     SET(OPENAL_DEF "")
206 ELSE(OPENAL_SRC STREQUAL "")
207     SET(OPENAL_SRC "OpenALBackend.cpp")
208     SET(OPENAL_DEF "-DOPENAL_SUPPORT")
209 ENDIF(OPENAL_SRC STREQUAL "")
211 IF(OPENC2E_USE_QT)
212         include(${QT_USE_FILE})
213         SET(SAVED_CMAKE_CURRENT_BINARY_DIR CMAKE_CURRENT_BINARY_DIR)
214         SET(CMAKE_CURRENT_BINARY_DIR ${GEN})
215         QT4_WRAP_UI(OPENC2E_QT_UIS_H ${OPENC2E_QT_UIS})
216         QT4_WRAP_CPP(OPENC2E_QT_MOC_SRCS ${OPENC2E_QT_MOC_HDRS})
217         SET(CMAKE_CURRENT_BINARY_DIR SAVED_CMAKE_CURRENT_BINARY_DIR)
218         SET(QT_DEF "-DQT_SUPPORT")
219 ENDIF(OPENC2E_USE_QT)
221 # Pass flags to the compiler
222 ADD_DEFINITIONS("-W -Wall -Wno-conversion -Wno-unused -pthread -D_REENTRANT -DYYERROR_VERBOSE ${OPENAL_DEF} ${QT_DEF}")
224 IF(OPENC2E_USE_QT)
225         SET(FRONTEND_SRCS ${OPENC2E_QT} ${OPENC2E_QT_UIS_H} ${OPENC2E_QT_MOC_SRCS})
226         SET(FRONTEND_LIBS ${QT_LIBRARIES})
227 ELSE(OPENC2E_USE_QT)
228         SET(FRONTEND_SRCS ${OPENC2E_SDL})
229         SET(FRONTEND_LIBS)
230 ENDIF(OPENC2E_USE_QT)
231 ADD_EXECUTABLE(openc2e ${OPENC2E_CORE} ${FRONTEND_SRCS} ${OPENAL_SRC} ${SER_SRCS})
233 TARGET_LINK_LIBRARIES(openc2e z m pthread 
234         ${SDL_LIBRARY}
235 #       ${SDLMIXER_LIBRARY} 
236         ${SDLNET_LIBRARY}
237         ${SDLGFX_LIBRARY}
238         ${OPENAL_LIBRARY}
239         ${ALUT_LIBRARY}
240         ${FRONTEND_LIBS}
241         boost_program_options-mt
242         boost_serialization-mt
243         boost_filesystem-mt
244         boost_thread-mt
245         boost_regex-mt
246         )
248 LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
250 INCLUDE_DIRECTORIES(BEFORE
251         ${GEN}
252         ${SRC}
253         ${SDL_INCLUDE_DIR}
254 #       ${SDLMIXER_INCLUDE_DIR}
255         ${SDLNET_INCLUDE_DIR}
256         ${SDLGFX_INCLUDE_DIR}
257         ${OPENAL_INCLUDE_DIR}
258         ${ALUT_INCLUDE_DIR}
259         ${Boost_INCLUDE_DIR}
260         )
262 FILE(GLOB CAOSVM_FILES ${SRC}/caosVM_*.cpp)
263 ADD_CUSTOM_COMMAND(
264         OUTPUT ${GEN}/commandinfo.yml
265         COMMAND perl parsedocs.pl ${CAOSVM_FILES} > ${GEN}/commandinfo.yml
266         DEPENDS parsedocs.pl ${CAOSVM_FILES}
267         WORKING_DIRECTORY ${SRC})
269 ADD_CUSTOM_COMMAND(
270         OUTPUT ${BIN}/caosdocs.html
271         COMMAND perl writehtml.pl ${GEN}/commandinfo.yml > ${BIN}/caosdocs.html
272         DEPENDS writehtml.pl ${GEN}/commandinfo.yml
273         WORKING_DIRECTORY ${SRC})
274 ADD_CUSTOM_COMMAND(
275         OUTPUT ${BIN}/docs.css
276         COMMAND cp docs.css ${BIN}/docs.css
277         DEPENDS docs.css
278         WORKING_DIRECTORY ${SRC})
279 ADD_CUSTOM_COMMAND(
280         OUTPUT ${BIN}/openc2e.6
281         COMMAND pod2man --center="Openc2e Documentation" --section=6 ${SRC}/openc2e.pod ${BIN}/openc2e.6
282         DEPENDS openc2e.pod
283         )
284 # it seems these ADD_CUSTOM_COMMANDS for flex and bison could be made
285 # into a macro... e.g. FLEX(file1) FLEX(file2) etc...
286 ADD_CUSTOM_COMMAND(
287         OUTPUT ${GEN}/cataloglexer.cpp
288         COMMAND re2c -o ${GEN}/cataloglexer.cpp ${SRC}/cataloglexer.re2c
289         DEPENDS ${SRC}/cataloglexer.re2c
290         WORKING_DIRECTORY ${SRC})
292 ADD_CUSTOM_COMMAND(
293         OUTPUT ${GEN}/catalogue.tab.cpp ${GEN}/catalogue.tab.hpp
294         COMMAND bison -d --name-prefix=cata --file-prefix="${GEN}/catalogue" catalogue.ypp
295         DEPENDS catalogue.ypp
296         WORKING_DIRECTORY ${SRC})
298 ADD_CUSTOM_COMMAND(
299         OUTPUT ${GEN}/cmddata.cpp
300         COMMAND perl writecmds.pl ${GEN}/commandinfo.yml > ${GEN}/cmddata.cpp
301         DEPENDS ${GEN}/commandinfo.yml writecmds.pl
302         WORKING_DIRECTORY ${SRC})
304 ADD_CUSTOM_COMMAND(
305         OUTPUT ${GEN}/caoslexer.cpp
306         COMMAND re2c -o ${GEN}/caoslexer.cpp ${SRC}/caoslexer.re2c
307         DEPENDS ${SRC}/caoslexer.re2c
308         WORKING_DIRECTORY ${SRC})
310 #ADD_CUSTOM_COMMAND(
311 #       OUTPUT ${GEN}/lex.mng.cpp ${GEN}/lex.mng.h
312 #       COMMAND flex -+ --prefix=mng -d -o ${GEN}/lex.mng.cpp --header-file=${GEN}/lex.mng.h mng.l
313 #       DEPENDS mng.l
314 #       WORKING_DIRECTORY ${SRC})
316 #ADD_CUSTOM_COMMAND(
317 #       OUTPUT ${GEN}/mngparser.tab.cpp ${GEN}/mngparser.tab.hpp
318 #       COMMAND bison -d --name-prefix=mng --file-prefix="${GEN}/mngparser" mngparser.ypp
319 #       DEPENDS mngparser.ypp
320 #       WORKING_DIRECTORY ${SRC})
322 ADD_CUSTOM_TARGET(docs ALL DEPENDS ${BIN}/caosdocs.html ${BIN}/docs.css ${BIN}/openc2e.6)
323 ADD_CUSTOM_TARGET(generated DEPENDS
324         ${GEN}/catalogue.tab.cpp ${GEN}/catalogue.tab.hpp
325         ${GEN}/caoslexer.cpp
326         ${GEN}/cataloglexer.cpp
327         ${GEN}/cmddata.cpp
328         #       ${GEN}/lex.mng.cpp ${GEN}/lex.mng.h
329         #       ${GEN}/mngparser.tab.cpp ${GEN}/mngparser.tab.hpp