Placing grcc compilation utils in separate files
Avoiding increasing required cmake version with use of wrapper shell script.
diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
index fe52119..85e78d7 100644
--- a/apps/CMakeLists.txt
+++ b/apps/CMakeLists.txt
@@ -18,60 +18,12 @@
 # Boston, MA 02110-1301, USA.
 
 include(GrPython)
+include(GrccCompile)
 add_subdirectory(helpers)
 #add_subdirectory(apps_data)
 
-SET(PYTHONPATH
-    ${CMAKE_SOURCE_DIR}/python
-    ${CMAKE_SOURCE_DIR}/python/misc_utils
-    ${CMAKE_SOURCE_DIR}/python/demapping
-    ${CMAKE_SOURCE_DIR}/python/receiver
-    ${CMAKE_SOURCE_DIR}/python/transmitter
-    ${CMAKE_SOURCE_DIR}/python/trx
-    ${CMAKE_BINARY_DIR}/swig
-    $ENV{PYTHONPATH}
-    )
-string(REPLACE ";" ":" PYTHONPATH "${PYTHONPATH}")
-
-ADD_CUSTOM_COMMAND(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon
-    COMMAND "${CMAKE_COMMAND}"
-        -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc
-        ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR}
-        ${CMAKE_CURRENT_SOURCE_DIR}/grgsm_livemon.grc
-    COMMAND "${CMAKE_COMMAND}" -E rename grgsm_livemon.py grgsm_livemon
-    DEPENDS grgsm_livemon.grc
-)
-ADD_CUSTOM_COMMAND(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon_headless
-    COMMAND "${CMAKE_COMMAND}"
-        -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc
-        ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR}
-        ${CMAKE_CURRENT_SOURCE_DIR}/grgsm_livemon_headless.grc
-    COMMAND "${CMAKE_COMMAND}" -E rename grgsm_livemon_headless.py grgsm_livemon_headless
-    DEPENDS grgsm_livemon_headless.grc
-)
-
-########################################################################
-# Override the GR_UNIQUE_TARGET function to not append a hash
-# to the `target` name, because we need a known name in order
-# to add an explicit dependency that's needed for the parallel build
-#
-# The original code segment (taken from GrPython.cmake) is
-#
-#    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
-#unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]
-#print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"
-#    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
-#
-########################################################################
-function(GR_UNIQUE_TARGET desc)
-    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})
-    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib
-print(re.sub('\\W', '_', '${desc} ${reldir}'))"
-    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)
-    add_custom_target(${_target} ALL DEPENDS ${ARGN})
-endfunction(GR_UNIQUE_TARGET)
+GRCC_COMPILE(grgsm_livemon)
+GRCC_COMPILE(grgsm_livemon_headless)
 
 set(grgsm_flowgraphs "")
 OPTION(ENABLE_GRCC "Compile the flowgraphs with grcc" ON)
@@ -97,7 +49,7 @@
 
 # The add_dependencies(...) is very important for the parallel build `make -j $(nproc)`
 # The `pygen_apps` target is generated in GR_PYTHON_INSTALL function which calls
-# GR_UNIQUE_TARGET that we redefine above.
+# GR_UNIQUE_TARGET that we redefine in GrccCompile.
 add_dependencies(pygen_apps _grgsm_swig)
 
 install(