diff options
author | Alan Antonuk <alan.antonuk@gmail.com> | 2013-01-16 02:04:00 -0500 |
---|---|---|
committer | Alan Antonuk <alan.antonuk@gmail.com> | 2013-01-16 02:04:00 -0500 |
commit | d008bb0f322d188399441519aabf746d50ebd3b5 (patch) | |
tree | dbed66e91408ddae7958fb09fa2cba7adc774d0e /CMakeLists.txt | |
parent | 395834331c4f50445957603bd5158803056c3386 (diff) | |
download | rabbitmq-c-github-ask-d008bb0f322d188399441519aabf746d50ebd3b5.tar.gz |
Build without amqp_framing.py codegen
Changes to support building rabbitmq-c without having run the python
code generator, or do a git submodule init/update.
This is to facilitate creating links to downloadable source archives
from github
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 159 |
1 files changed, 83 insertions, 76 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 250ed30..9ed5b8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,97 +95,104 @@ set(CMAKE_REQUIRED_LIBRARIES ${SOCKET_LIBRARIES}) check_function_exists(htonll HAVE_HTONLL) cmake_pop_check_state() -find_package(PythonInterp REQUIRED) -#Determine Python Version: -if(PYTHON_EXECUTABLE) - execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c - "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" - OUTPUT_VARIABLE _VERSION - RESULT_VARIABLE _PYTHON_VERSION_RESULT - ERROR_QUIET) - if(NOT _PYTHON_VERSION_RESULT) - string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}") - list(GET _VERSION 0 PYTHON_VERSION_MAJOR) - list(GET _VERSION 1 PYTHON_VERSION_MINOR) - list(GET _VERSION 2 PYTHON_VERSION_PATCH) - if(PYTHON_VERSION_PATCH EQUAL 0) - # it's called "Python 2.7", not "2.7.0" - string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}") - endif() - else() - # sys.version predates sys.version_info, so use that - execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)" +option(REGENERATE_AMQP_FRAMING "Regenerate amqp_framing.h/amqp_framing.c sources (for developer use)" OFF) +mark_as_advanced(REGENERATE_AMQP_FRAMING) + +if (REGENERATE_AMQP_FRAMING) + find_package(PythonInterp) + if (NOT PYTHONINTERP_FOUND) + message(FATAL_ERROR "REGENERATE_AMQP_FRAMING requires Python to be available") + endif () + + #Determine Python Version: + if(PYTHON_EXECUTABLE) + execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c + "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" OUTPUT_VARIABLE _VERSION RESULT_VARIABLE _PYTHON_VERSION_RESULT ERROR_QUIET) if(NOT _PYTHON_VERSION_RESULT) - string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}") - string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}") - if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}") - else() - set(PYTHON_VERSION_PATCH "0") + string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}") + list(GET _VERSION 0 PYTHON_VERSION_MAJOR) + list(GET _VERSION 1 PYTHON_VERSION_MINOR) + list(GET _VERSION 2 PYTHON_VERSION_PATCH) + if(PYTHON_VERSION_PATCH EQUAL 0) + # it's called "Python 2.7", not "2.7.0" + string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}") endif() else() - # sys.version was first documented for Python 1.5, so assume - # this is older. - set(PYTHON_VERSION_STRING "1.4") - set(PYTHON_VERSION_MAJOR "1") - set(PYTHON_VERSION_MAJOR "4") - set(PYTHON_VERSION_MAJOR "0") + # sys.version predates sys.version_info, so use that + execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)" + OUTPUT_VARIABLE _VERSION + RESULT_VARIABLE _PYTHON_VERSION_RESULT + ERROR_QUIET) + if(NOT _PYTHON_VERSION_RESULT) + string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}") + string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}") + if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*") + string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}") + else() + set(PYTHON_VERSION_PATCH "0") + endif() + else() + # sys.version was first documented for Python 1.5, so assume + # this is older. + set(PYTHON_VERSION_STRING "1.4") + set(PYTHON_VERSION_MAJOR "1") + set(PYTHON_VERSION_MAJOR "4") + set(PYTHON_VERSION_MAJOR "0") + endif() endif() - endif() - unset(_PYTHON_VERSION_RESULT) - unset(_VERSION) -endif(PYTHON_EXECUTABLE) - -# If we're running v3.x look for a 2to3 utility -if (PYTHON_VERSION_MAJOR GREATER 2) - get_filename_component(PYTHON_EXE_DIR ${PYTHON_EXECUTABLE} PATH) - find_program(PYTHON_2TO3_EXECUTABLE - NAMES 2to3 - HINTS ${PYTHON_EXE_DIR} - ) - - if ("PYTHON_2TO3_EXECUTABLE-NOTFOUND" STREQUAL PYTHON_2TO3_EXECUTABLE) - message(FATAL_ERROR "Unable to find 2to3 python utility, specify python 2.7 or specify 2to3 utility") - endif () -endif () - + unset(_PYTHON_VERSION_RESULT) + unset(_VERSION) + endif(PYTHON_EXECUTABLE) + + # If we're running v3.x look for a 2to3 utility + if (PYTHON_VERSION_MAJOR GREATER 2) + get_filename_component(PYTHON_EXE_DIR ${PYTHON_EXECUTABLE} PATH) + find_program(PYTHON_2TO3_EXECUTABLE + NAMES 2to3 + HINTS ${PYTHON_EXE_DIR} + ) + + if ("PYTHON_2TO3_EXECUTABLE-NOTFOUND" STREQUAL PYTHON_2TO3_EXECUTABLE) + message(FATAL_ERROR "Unable to find 2to3 python utility, specify python 2.7 or specify 2to3 utility") + endif () + endif (PYTHON_VERSION_MAJOR GREATER 2) -#check for json or simplejson -execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import json" - RESULT_VARIABLE CHECK_PYTHON_JSON_FAILED -) -if (CHECK_PYTHON_JSON_FAILED) - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import simplejson" - RESULT_VARIABLE CHECK_PYTHON_SIMPLEJSON_FAILED + #check for json or simplejson + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import json" + RESULT_VARIABLE CHECK_PYTHON_JSON_FAILED ) - if (CHECK_PYTHON_SIMPLEJSON_FAILED) - message(FATAL_ERROR "could not find a python that can 'import simplejson") - endif (CHECK_PYTHON_SIMPLEJSON_FAILED) -endif (CHECK_PYTHON_JSON_FAILED) + if (CHECK_PYTHON_JSON_FAILED) + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import simplejson" + RESULT_VARIABLE CHECK_PYTHON_SIMPLEJSON_FAILED + ) + if (CHECK_PYTHON_SIMPLEJSON_FAILED) + message(FATAL_ERROR "REGENERATE_AMQP_FRAMING requires a python with json or simplejson modules") + endif (CHECK_PYTHON_SIMPLEJSON_FAILED) + endif (CHECK_PYTHON_JSON_FAILED) -find_path(AMQP_CODEGEN_DIR - amqp_codegen.py - PATHS ${CMAKE_CURRENT_SOURCE_DIR}/codegen - ${CMAKE_CURRENT_SOURCE_DIR}/rabbitmq-codegen - ${CMAKE_CURRENT_SOURCE_DIR}/../rabbitmq-codegen - DOC "Path to directory containing amqp_codegen.py (rabbitmq-codegen)" - NO_DEFAULT_PATH - ) -if (AMQP_CODEGEN_DIR STREQUAL "AMQP_CODEGEN_DIR-NOTFOUND") - message(SEND_ERROR "Cannot find amqp_codegen.py, did you forget to:\n\ngit submodule init\ngit submodule update\n?\n\n Or set AMQP_CODEGEN_DIR to directory containing amqp_codegen.py") -else () - message(STATUS "Found amqp_codegen.py in ${AMQP_CODEGEN_DIR}") -endif() + find_path(AMQP_CODEGEN_DIR + amqp_codegen.py + PATHS ${CMAKE_CURRENT_SOURCE_DIR}/codegen + ${CMAKE_CURRENT_SOURCE_DIR}/rabbitmq-codegen + ${CMAKE_CURRENT_SOURCE_DIR}/../rabbitmq-codegen + DOC "Path to directory containing amqp_codegen.py (rabbitmq-codegen)" + NO_DEFAULT_PATH + ) -mark_as_advanced(AMQP_CODEGEN_DIR) + if (AMQP_CODEGEN_DIR STREQUAL "AMQP_CODEGEN_DIR-NOTFOUND") + message(SEND_ERROR "REGENERATE_AMQP_FRAMING requires the amqp_codegen.py script. If this is a git clone you can:\n\ngit submodule init\ngit submodule update\n\n Or set AMQP_CODEGEN_DIR to directory containing amqp_codegen.py") + else () + message(STATUS "Found amqp_codegen.py in ${AMQP_CODEGEN_DIR}") + endif() +endif (REGENERATE_AMQP_FRAMING) find_package(POPT) find_package(XmlTo) |