瀏覽代碼

Added custom executable target to regenerate Lua bindings.

Cameron Hart 14 年之前
父節點
當前提交
2a6effd422

+ 3 - 0
Bindings/CMakeLists.txt

@@ -0,0 +1,3 @@
+ADD_SUBDIRECTORY(Scripts/create_lua_library)
+ADD_SUBDIRECTORY(Contents/LUA)
+

+ 7 - 5
Bindings/Contents/CMakeLists.txt → Bindings/Contents/LUA/CMakeLists.txt

@@ -1,19 +1,20 @@
 INCLUDE(PolycodeIncludes)
 
 FIND_PACKAGE(Lua51 REQUIRED)
+
 INCLUDE_DIRECTORIES(
     ${LUA_INCLUDE_DIR}
-    LUA/Include
+    Include
 )
 
 SET(polycodeLua_SRCS
-    LUA/Source/PolycodeLUA.cpp
+    Source/PolycodeLUA.cpp
 )
 
 SET(polycodeLua_HDRS
-    LUA/Include/PolycodeLUAWrappers.h
-    LUA/Include/PolycodeLUA.h
-    LUA/Include/PolycodeLUA2D.h
+    Include/PolycodeLUAWrappers.h
+    Include/PolycodeLUA.h
+    Include/PolycodeLUA2D.h
 )
 
 SET(CMAKE_DEBUG_POSTFIX "_d")
@@ -25,6 +26,7 @@ SET(CMAKE_DEBUG_POSTFIX "_d")
 
 #IF(POLYCODE_BUILD_STATIC)
 ADD_LIBRARY(PolycodeLua ${polycodeLua_SRCS} ${polycodeLua_HDRS})
+ADD_DEPENDENCIES(PolycodeLua PolycodeLuaGenerate)
 #ENDIF(POLYCODE_BUILD_STATIC)
 
 IF(POLYCODE_INSTALL_FRAMEWORK)

+ 18 - 0
Bindings/Scripts/create_lua_library/CMakeLists.txt

@@ -0,0 +1,18 @@
+INCLUDE(FindPythonModule)
+
+FIND_PACKAGE(PythonInterp REQUIRED)
+FIND_PYTHON_MODULE(ply REQUIRED)
+IF(NOT PY_PLY)
+	MESSAGE(SEND_ERROR "The Python PLY (Python Lex-Yacc) module is required to generate Lua bindings.")
+ENDIF(NOT PY_PLY)
+
+ADD_CUSTOM_TARGET(PolycodeLuaGenerate
+    ${PYTHON_EXECUTABLE} create_lua_library.py ../../../Core/Contents/Include Polycode Polycode.h polycore Polycore ../../Contents/LUA/API ../../Contents/LUA/API/Polycode ../../Contents/LUA/Include ../../Contents/LUA/Source
+	${PYTHON_EXECUTABLE} create_lua_library.py ../../../Modules/Contents/2DPhysics/Include/ Physics2D Polycode2DPhysics.h physics2d Physics2D ../../../Modules/Bindings/2DPhysics/API ../../../Modules/Bindings/2DPhysics/API/Physics2D ../../../Modules/Bindings/2DPhysics/Include ../../../Modules/Bindings/2DPhysics/Source
+	${PYTHON_EXECUTABLE} create_lua_library.py ../../../Modules/Contents/3DPhysics/Include/ Physics3D Polycode3DPhysics.h physics3d Physics3D ../../../Modules/Bindings/3DPhysics/API ../../../Modules/Bindings/3DPhysics/API/Physics3D ../../../Modules/Bindings/3DPhysics/Include ../../../Modules/Bindings/3DPhysics/Source
+	DEPENDS Polycore
+	COMMENT "Generating Lua API"
+	WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+	SOURCES create_lua_library.py
+)
+

二進制
Bindings/Scripts/create_lua_library/CppHeaderParser.pyc


+ 25 - 0
CMake/FindPythonModule.cmake

@@ -0,0 +1,25 @@
+# Find if a Python module is installed
+# Found at http://www.cmake.org/pipermail/cmake/2011-January/041666.html
+# To use do: find_python_module(PyQt4 REQUIRED)
+function(find_python_module module)
+	string(TOUPPER ${module} module_upper)
+	if(NOT PY_${module_upper})
+		if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED")
+			set(${module}_FIND_REQUIRED TRUE)
+		endif()
+		# A module's location is usually a directory, but for binary modules
+		# it's a .so file.
+		execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" 
+			"import re, ${module}; print re.compile('/__init__.py.*').sub('',${module}.__file__)"
+			RESULT_VARIABLE _${module}_status 
+			OUTPUT_VARIABLE _${module}_location
+			ERROR_QUIET 
+			OUTPUT_STRIP_TRAILING_WHITESPACE)
+		if(NOT _${module}_status)
+			set(PY_${module_upper} ${_${module}_location} CACHE STRING 
+				"Location of Python module ${module}")
+		endif(NOT _${module}_status)
+	endif(NOT PY_${module_upper})
+	find_package_handle_standard_args(PY_${module} DEFAULT_MSG PY_${module_upper})
+endfunction(find_python_module)
+

+ 1 - 1
CMakeLists.txt

@@ -48,7 +48,7 @@ ADD_SUBDIRECTORY(Core/Contents)
 ADD_SUBDIRECTORY("Assets/Default asset pack")
 
 IF(POLYCODE_BUILD_BINDINGS)
-    ADD_SUBDIRECTORY(Bindings/Contents)
+    ADD_SUBDIRECTORY(Bindings)
 ENDIF(POLYCODE_BUILD_BINDINGS)
 
 IF(POLYCODE_BUILD_EXAMPLES)