~ubuntu-branches/ubuntu/natty/spring/natty

« back to all changes in this revision

Viewing changes to AI/Interfaces/Python/CMakeLists.txt

  • Committer: Bazaar Package Importer
  • Author(s): Scott Ritchie
  • Date: 2010-09-23 18:56:03 UTC
  • mfrom: (3.1.9 experimental)
  • Revision ID: james.westby@ubuntu.com-20100923185603-st97s5chplo42y7w
Tags: 0.82.5.1+dfsg1-1ubuntu1
* Latest upstream version for online play
* debian/control: Replace (rather than conflict) spring-engine
  - spring-engine will be a dummy package (LP: #612905)
  - also set maintainer to MOTU

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
#
 
3
#       Copyright 2010  Matthias Ableitner
 
4
#
 
5
#       This program is free software; you can redistribute it and/or modify
 
6
#       it under the terms of the GNU General Public License as published by
 
7
#       the Free Software Foundation; either version 2 of the License, or
 
8
#       (at your option) any later version.
 
9
#
 
10
#       This program is distributed in the hope that it will be useful,
 
11
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
#       GNU General Public License for more details.
 
14
#
 
15
#       You should have received a copy of the GNU General Public License
 
16
#       along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
#
 
18
#       @author Andreas Löscher
 
19
#       @author Matthias Ableitner <spam@abma.de>
 
20
#
 
21
 
 
22
### Python AI Interface
 
23
#
 
24
# Global variables set in this file:
 
25
# * BUILD_PYTHON_AIINTERFACE
 
26
# * PYTHON_AIINTERFACE_VERS
 
27
# * PYTHON_AIINTERFACE_TARGET
 
28
#
 
29
 
 
30
 
 
31
################################################################################
 
32
### BEGINN: MACROS_AND_FUNCTIONS
 
33
# Define macros and functions to be used in this file and by Skirmish AIs
 
34
 
 
35
# Native Skirmish AI configuration macro
 
36
# This will be called from native AIs at AI/Skirmish/*/CMakeLists.txt.
 
37
macro    (ConfigurePythonSkirmishAI)
 
38
        set(myDir                  "${CMAKE_CURRENT_SOURCE_DIR}")
 
39
        GetLastPathPart(dirName ${myDir})
 
40
        set(myName                 "${dirName}")
 
41
        set(mySourceDirRel         "${${mySourceDirRel_var}}") # Common values are "" or "src"
 
42
        set(additionalSources      ${${additionalSources_var}})
 
43
        set(additionalCompileFlags ${${additionalCompileFlags_var}})
 
44
        set(additionalLibraries    ${${additionalLibraries_var}})
 
45
 
 
46
        # Check if the user wants to compile the AI
 
47
        if    (BUILD_PYTHON_AIINTERFACE AND NOT myName MATCHES "${AI_EXCLUDE_REGEX}")
 
48
                set(BUILD_THIS_SKIRMISHAI TRUE)
 
49
        else  (BUILD_PYTHON_AIINTERFACE AND NOT myName MATCHES "${AI_EXCLUDE_REGEX}")
 
50
                set(BUILD_THIS_SKIRMISHAI FALSE)
 
51
                message("warning: ${myName} Skirmish AI will not be built!")
 
52
        endif (BUILD_PYTHON_AIINTERFACE AND NOT myName MATCHES "${AI_EXCLUDE_REGEX}")
 
53
 
 
54
        # Compile and install
 
55
        if    (BUILD_THIS_SKIRMISHAI)
 
56
                # Assemble meta data
 
57
                GetVersionFromFile(myVersion "${myDir}/VERSION")
 
58
                set(myTarget      "${myName}")
 
59
                set(myInstLibsDir "${SKIRMISH_AI_LIBS}/${myName}/${myVersion}")
 
60
                set(myInstDataDir "${SKIRMISH_AI_DATA}/${myName}/${myVersion}")
 
61
                MakeAbsolute(mySourceDir "${myDir}" "${mySourceDirRel}")
 
62
 
 
63
                SkirmishAIMessage(STATUS "Found Skirmish AI: ${myName} ${myVersion}")
 
64
 
 
65
                # Install the data files
 
66
                install(DIRECTORY "${myDir}/data/" DESTINATION ${myInstDataDir})
 
67
                install(DIRECTORY "${myDir}/src/" DESTINATION ${myInstDataDir} FILES_MATCHING PATTERN REGEX ".*\\.py$")
 
68
                # Install the library
 
69
        endif (BUILD_THIS_SKIRMISHAI)
 
70
endmacro (ConfigurePythonSkirmishAI)
 
71
 
 
72
### END: MACROS_AND_FUNCTIONS
 
73
################################################################################
 
74
 
 
75
 
 
76
set(myName            "Python")
 
77
set(myDir             "${CMAKE_CURRENT_SOURCE_DIR}")
 
78
set(mySourceDirRel    "src")
 
79
 
 
80
 
 
81
# Check if the user wants to compile the interface
 
82
if    ("${AI_TYPES}" STREQUAL "ALL" OR "${AI_TYPES}" STREQUAL "PYTHON")
 
83
        set(AI_TYPES_PYTHON TRUE)
 
84
else  ("${AI_TYPES}" STREQUAL "ALL" OR "${AI_TYPES}" STREQUAL "PYTHON")
 
85
        set(AI_TYPES_PYTHON FALSE)
 
86
endif ("${AI_TYPES}" STREQUAL "ALL" OR "${AI_TYPES}" STREQUAL "PYTHON")
 
87
 
 
88
if    (AI_TYPES_PYTHON AND myName MATCHES "${AI_EXCLUDE_REGEX}")
 
89
        set(AI_TYPES_PYTHON FALSE)
 
90
endif (AI_TYPES_PYTHON AND myName MATCHES "${AI_EXCLUDE_REGEX}")
 
91
 
 
92
 
 
93
FIND_PACKAGE(PythonInterp)
 
94
FIND_PACKAGE(PythonLibs)
 
95
 
 
96
# Check dependencies of the interface are met
 
97
if    (PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND AI_TYPES_PYTHON)
 
98
        SetGlobal(BUILD_PYTHON_AIINTERFACE TRUE)
 
99
else  (PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND AI_TYPES_PYTHON)
 
100
        SetGlobal(BUILD_PYTHON_AIINTERFACE FALSE)
 
101
        message ("warning: Python AI Interface will not be built!")
 
102
endif (PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND AI_TYPES_PYTHON)
 
103
 
 
104
# Build
 
105
if    (BUILD_PYTHON_AIINTERFACE)
 
106
        GetVersionFromFile(myVersion ${myDir}/VERSION)
 
107
 
 
108
        INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
 
109
        set(myTarget      "${myName}-AIInterface")
 
110
        set(myNullPython  "NullPythonAI")
 
111
        set(myInstLibsDir ${AI_INTERFACES_LIBS}/${myName}/${myVersion})
 
112
        set(myInstDataDir ${AI_INTERFACES_DATA}/${myName}/${myVersion})
 
113
        set(myInstAIDir   ${SKIRMISH_AI_LIBS}/${myNullPython}/${myVersion})
 
114
        set(myGeneratedDir "${CMAKE_CURRENT_BINARY_DIR}/src-generated")
 
115
        set(myBuilderDir "${CMAKE_CURRENT_BINARY_DIR}/src-generated-builder")
 
116
        set(engineHeadersDir "${CMAKE_SOURCE_DIR}/rts/ExternalAI/Interface")
 
117
 
 
118
        MakeAbsolute(mySourceDir "${myDir}" "${mySourceDirRel}")
 
119
 
 
120
        AIInterfaceMessage(STATUS "Found AI Interface: ${myTarget} ${myVersion}")
 
121
        AIInterfaceMessage(STATUS "Found Skirmish AI: ${myNullPython} ${myVersion}") # SkirmishAIMessage() not defined here
 
122
 
 
123
        SetGlobal(PYTHON_AIINTERFACE_VERS   ${myVersion})
 
124
        SetGlobal(PYTHON_AIINTERFACE_TARGET ${myTarget})
 
125
        set(builderFiles
 
126
                        "template/__init__.py"
 
127
                        "template/context.py"
 
128
                        "template/engine.py"
 
129
                        "template/helper.py"
 
130
                        "template/defaulttags.py"
 
131
                        "interface_builder.py"
 
132
                        "templates/interface.c"
 
133
                        "templates/aiInterface.py"
 
134
                        "templates/wrappai.c"
 
135
                        "templates/converter.c"
 
136
                        "templates/callback.c"
 
137
                        "templates/command_wrapper.c"
 
138
                        "templates/event_wrapper.c"
 
139
                        "templates/create_command.c"
 
140
                        "helper.py"
 
141
                        "generator.py"
 
142
                        "event_parser.py"
 
143
                        "callback_parser.py")
 
144
        FOREACH (FILE ${builderFiles})
 
145
                list (APPEND myGeneratedFilesSourceDir "builder/${FILE}")
 
146
                list (APPEND myGeneratedFilesmyBuilderDir "${myBuilderDir}/${FILE}")
 
147
        ENDFOREACH(FILE)
 
148
        set(myGenerateFiles
 
149
                        ${myGeneratedFilesmyBuilderDir}
 
150
                        "${engineHeadersDir}/SSkirmishAICallback.h"
 
151
                        "${engineHeadersDir}/AISEvents.h"
 
152
                        "${engineHeadersDir}/AISCommands.h")
 
153
 
 
154
        # Copy python files to generated dir, because python <=2.5 creates .pyc
 
155
        add_custom_command(
 
156
                COMMAND "cmake" "-E" "copy_directory" "builder" "${myBuilderDir}"
 
157
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 
158
                COMMENT "copying builder/ files to ${myBuilderDir}"
 
159
                DEPENDS ${myGeneratedFilesSourceDir}
 
160
                OUTPUT ${myGeneratedFilesmyBuilderDir}
 
161
        )
 
162
        # Create the interface
 
163
        add_custom_command(
 
164
                COMMAND ${PYTHON_EXECUTABLE}
 
165
                "${myBuilderDir}/generator.py"
 
166
                ${PROJECT_SOURCE_DIR}
 
167
                "${myBuilderDir}/templates"
 
168
                ${myGeneratedDir}
 
169
                WORKING_DIRECTORY ${myBuilderDir}
 
170
                COMMENT " Generating Python Interface" VERBATIM
 
171
                OUTPUT "${myGeneratedDir}/ai.c"
 
172
                OUTPUT "${myGeneratedDir}/PyAI/interface.py"
 
173
                DEPENDS ${myGenerateFiles}
 
174
        )
 
175
        SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "src/ai.c;src/PyAI/interface.py")
 
176
        set_source_files_properties("${myGeneratedDir}/ai.c" PROPERTIES GENERATED TRUE)
 
177
        set_source_files_properties(${myGeneratedFilesmyBuilderDir} PROPERTIES GENERATED TRUE)
 
178
 
 
179
        aux_source_directory(${mySourceDir} mySources)
 
180
        INCLUDE_DIRECTORIES(${mySourceDir})
 
181
        add_library(${myTarget} MODULE ${mySources} ${ai_common_SRC} ${CUtils_SRC} "${myGeneratedDir}/ai.c")
 
182
        FixLibName(${myTarget})
 
183
 
 
184
        set_target_properties(${myTarget} PROPERTIES OUTPUT_NAME "AIInterface")
 
185
 
 
186
        # Install the data files
 
187
        install(DIRECTORY "${myDir}/data/" DESTINATION "${myInstLibsDir}" FILES_MATCHING PATTERN REGEX "InterfaceInfo\\.lua$")
 
188
        install(DIRECTORY "${myDir}/data/" DESTINATION "${myInstDataDir}" FILES_MATCHING PATTERN REGEX "InterfaceInfo\\.lua$" EXCLUDE PATTERN "*")
 
189
        install(DIRECTORY "${myDir}/src/" DESTINATION "${myInstDataDir}" FILES_MATCHING PATTERN REGEX ".*\\.py$")
 
190
        install(DIRECTORY "${myGeneratedDir}/PyAI" DESTINATION "${myInstDataDir}" FILES_MATCHING PATTERN REGEX ".*\\.py$")
 
191
        # Install the library
 
192
        install(TARGETS   ${myTarget}      DESTINATION "${myInstLibsDir}")
 
193
        # Install the NullPythonAI
 
194
        install(DIRECTORY  "${myDir}/${myNullPython}/src/" DESTINATION "${myInstAIDir}" FILES_MATCHING PATTERN REGEX ".*\\.py$")
 
195
        install(DIRECTORY  "${myDir}/${myNullPython}/data/" DESTINATION "${myInstAIDir}" FILES_MATCHING PATTERN REGEX ".*\\.lua$")
 
196
 
 
197
endif (BUILD_PYTHON_AIINTERFACE)