diff options
author | Josh Blum <josh@joshknows.com> | 2011-11-05 13:54:35 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2011-11-05 13:54:35 -0700 |
commit | 81dbc190bebe6f623aa5603394dcc691110f55fb (patch) | |
tree | b45e75f7ca1b8537274711ab4cf2618d292b1b04 /gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake | |
parent | 2a0d169a5cc3856f77091cb755770b0e42d9fbd9 (diff) |
cmake: tweaks to swig gen and updated howto modules
Diffstat (limited to 'gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake')
-rw-r--r-- | gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake | 90 |
1 files changed, 70 insertions, 20 deletions
diff --git a/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake b/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake index da0590d42f..efdddf371f 100644 --- a/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake +++ b/gr-howto-write-a-block-cmake/cmake/Modules/GrPython.cmake @@ -1,17 +1,17 @@ # Copyright 2010-2011 Free Software Foundation, Inc. -# +# # This file is part of GNU Radio -# +# # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. -# +# # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, @@ -51,6 +51,18 @@ endif(PYTHON_EXECUTABLE) #make the path to the executable appear in the cmake gui set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter") +#make sure we can use -B with python (introduced in 2.6) +if(PYTHON_EXECUTABLE) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -B -c "" + OUTPUT_QUIET ERROR_QUIET + RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT + ) + if(PYTHON_HAS_DASH_B_RESULT EQUAL 0) + set(PYTHON_DASH_B "-B") + endif() +endif(PYTHON_EXECUTABLE) + ######################################################################## # Check for the existence of a python module: # - desc a string description of the check @@ -115,28 +127,55 @@ function(GR_PYTHON_INSTALL) #################################################################### install(${ARGN}) #installs regular python files + #create a list of all generated files + unset(pysrcfiles) + unset(pycfiles) + unset(pyofiles) foreach(pyfile ${GR_PYTHON_INSTALL_FILES}) - get_filename_component(pyfile_name ${pyfile} NAME) get_filename_component(pyfile ${pyfile} ABSOLUTE) - string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pycfile "${pyfile}c") - list(APPEND python_install_gen_targets ${pycfile}) + list(APPEND pysrcfiles ${pyfile}) + + #determine if this file is in the source or binary directory + file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile}) + string(LENGTH "${source_rel_path}" source_rel_path_len) + file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile}) + string(LENGTH "${binary_rel_path}" binary_rel_path_len) + + #and set the generated path appropriately + if(${source_rel_path_len} GREATER ${binary_rel_path_len}) + set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path}) + else() + set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path}) + endif() + list(APPEND pycfiles ${pygenfile}c) + list(APPEND pyofiles ${pygenfile}o) - get_filename_component(pycfile_path ${pycfile} PATH) - file(MAKE_DIRECTORY ${pycfile_path}) + #ensure generation path exists + get_filename_component(pygen_path ${pygenfile} PATH) + file(MAKE_DIRECTORY ${pygen_path}) - #create a command to generate the byte-compiled pyc file - add_custom_command( - OUTPUT ${pycfile} DEPENDS ${pyfile} - COMMAND ${PYTHON_EXECUTABLE} -c - \"import py_compile\; py_compile.compile(file='${pyfile}', cfile='${pycfile}', doraise=True)\" - COMMENT "Byte-compiling ${pyfile_name}" - ) - install(FILES ${pycfile} - DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} - COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} - ) endforeach(pyfile) + #the command to generate the pyc files + add_custom_command( + DEPENDS ${pysrcfiles} OUTPUT ${pycfiles} + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles} + ) + + #the command to generate the pyo files + add_custom_command( + DEPENDS ${pysrcfiles} OUTPUT ${pyofiles} + COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles} + ) + + #create install rule and add generated files to target list + set(python_install_gen_targets ${pycfiles} ${pyofiles}) + install(FILES ${python_install_gen_targets} + DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} + COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} + ) + + #################################################################### elseif(GR_PYTHON_INSTALL_PROGRAMS) #################################################################### @@ -175,3 +214,14 @@ function(GR_PYTHON_INSTALL) GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets}) endfunction(GR_PYTHON_INSTALL) + +######################################################################## +# Write the python helper script that generates byte code files +######################################################################## +file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py " +import sys, py_compile +files = sys.argv[1:] +srcs, gens = files[:len(files)/2], files[len(files)/2:] +for src, gen in zip(srcs, gens): + py_compile.compile(file=src, cfile=gen, doraise=True) +") |