3
# Copyright (c) 2007, Simon Edwards <simon@simonzone.com>
5
# Redistribution and use is allowed according to the terms of the BSD license.
6
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
8
# This file defines the following macros:
10
# PYTHON_INSTALL (SOURCE_FILE DESINATION_DIR)
11
# Install the SOURCE_FILE, which is a Python .py file, into the
12
# destination directory during install. The file will be byte compiled
13
# and both the .py file and .pyc file will be installed.
15
GET_FILENAME_COMPONENT(PYTHON_MACROS_MODULE_PATH ${CMAKE_CURRENT_LIST_FILE} PATH)
17
MACRO(PYTHON_INSTALL SOURCE_FILE DESINATION_DIR)
18
ADD_CUSTOM_TARGET(compile_python_files ALL)
20
# Install the source file.
21
INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
23
# Byte compile and install the .pyc file.
24
GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
25
GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
26
GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
27
GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
28
SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
29
SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
31
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
33
SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
35
GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
36
IF(_abs_bin_py STREQUAL ${_absfilename}) # Don't copy the file onto itself.
38
TARGET compile_python_files
39
COMMAND ${CMAKE_COMMAND} ${_message} -P ${PYTHON_MACROS_MODULE_PATH}/print_status.cmake
40
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_MACROS_MODULE_PATH}/PythonCompile.py ${_bin_py}
41
DEPENDS ${_absfilename}
43
ELSE(_abs_bin_py STREQUAL ${_absfilename})
45
TARGET compile_python_files
46
COMMAND ${CMAKE_COMMAND} ${_message} -P ${PYTHON_MACROS_MODULE_PATH}/print_status.cmake
47
COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
48
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_MACROS_MODULE_PATH}/PythonCompile.py ${_bin_py}
49
DEPENDS ${_absfilename}
51
ENDIF(_abs_bin_py STREQUAL ${_absfilename})
53
INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
54
ENDMACRO(PYTHON_INSTALL)