|
Packit |
534379 |
#!/usr/bin/cmake -P
|
|
Packit |
534379 |
## Copyright(c) 2017-2020, Intel Corporation
|
|
Packit |
534379 |
##
|
|
Packit |
534379 |
## Redistribution and use in source and binary forms, with or without
|
|
Packit |
534379 |
## modification, are permitted provided that the following conditions are met:
|
|
Packit |
534379 |
##
|
|
Packit |
534379 |
## * Redistributions of source code must retain the above copyright notice,
|
|
Packit |
534379 |
## this list of conditions and the following disclaimer.
|
|
Packit |
534379 |
## * Redistributions in binary form must reproduce the above copyright notice,
|
|
Packit |
534379 |
## this list of conditions and the following disclaimer in the documentation
|
|
Packit |
534379 |
## and/or other materials provided with the distribution.
|
|
Packit |
534379 |
## * Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
534379 |
## may be used to endorse or promote products derived from this software
|
|
Packit |
534379 |
## without specific prior written permission.
|
|
Packit |
534379 |
##
|
|
Packit |
534379 |
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
534379 |
## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
534379 |
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit |
534379 |
## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
Packit |
534379 |
## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
Packit |
534379 |
## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
Packit |
534379 |
## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
Packit |
534379 |
## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
Packit |
534379 |
## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
Packit |
534379 |
## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit |
534379 |
## POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
534379 |
|
|
Packit |
534379 |
set(JSON_C_DEBIAN_PACKAGE "libjson0")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
find_program(LSB_RELEASE_EXE lsb_release)
|
|
Packit |
534379 |
if(LSB_RELEASE_EXE)
|
|
Packit |
534379 |
execute_process(COMMAND ${LSB_RELEASE_EXE} -is
|
|
Packit |
534379 |
OUTPUT_VARIABLE LSB_DISTRIBUTOR_ID
|
|
Packit |
534379 |
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
Packit |
534379 |
)
|
|
Packit |
534379 |
execute_process(COMMAND ${LSB_RELEASE_EXE} -rs
|
|
Packit |
534379 |
OUTPUT_VARIABLE LSB_RELEASE_NUMBER
|
|
Packit |
534379 |
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
Packit |
534379 |
)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
message(STATUS "Detecting distribution - ${LSB_DISTRIBUTOR_ID} ${LSB_RELEASE_NUMBER}")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
if(${LSB_DISTRIBUTOR_ID} STREQUAL "Ubuntu")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
if(${LSB_RELEASE_NUMBER} STREQUAL "16.04")
|
|
Packit |
534379 |
set(JSON_C_DEBIAN_PACKAGE "libjson-c2")
|
|
Packit |
534379 |
elseif(${LSB_RELEASE_NUMBER} STREQUAL "18.04" OR ${LSB_RELEASE_NUMBER} STREQUAL "19.04")
|
|
Packit |
534379 |
set(JSON_C_DEBIAN_PACKAGE "libjson-c3")
|
|
Packit |
534379 |
elseif(${LSB_RELEASE_NUMBER} STREQUAL "19.10" OR ${LSB_RELEASE_NUMBER} STREQUAL "20.04")
|
|
Packit |
534379 |
set(JSON_C_DEBIAN_PACKAGE "libjson-c4")
|
|
Packit |
534379 |
else()
|
|
Packit |
534379 |
message(WARNING "Unrecognized Ubuntu version: ${LSB_RELEASE_NUMBER}. Defaulting to ${JSON_C_DEBIAN_PACKAGE}")
|
|
Packit |
534379 |
endif()
|
|
Packit |
534379 |
|
|
Packit |
534379 |
endif(${LSB_DISTRIBUTOR_ID} STREQUAL "Ubuntu")
|
|
Packit |
534379 |
endif(LSB_RELEASE_EXE)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
function(DEFINE_PKG name)
|
|
Packit |
534379 |
set(_components "COMPONENTS")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Parse all these entries
|
|
Packit |
534379 |
set(_entries "GROUP;DISPLAY_NAME;DESCRIPTION;DEB_DEPENDS")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Only valid options for a component
|
|
Packit |
534379 |
set(_component_entries "GROUP;DISPLAY_NAME;DESCRIPTION;DEB_DEPENDS")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Define parsing order
|
|
Packit |
534379 |
cmake_parse_arguments(DEFINE_PKG
|
|
Packit |
534379 |
""
|
|
Packit |
534379 |
"${_entries}"
|
|
Packit |
534379 |
"${_components}"
|
|
Packit |
534379 |
${ARGN})
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Iterate over 2-valued entries
|
|
Packit |
534379 |
foreach(_component ${DEFINE_PKG_COMPONENTS})
|
|
Packit |
534379 |
string(TOUPPER "${_component}" _component_upper)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Assume all entrys refer to component variables
|
|
Packit |
534379 |
foreach(_entry ${_component_entries})
|
|
Packit |
534379 |
if(DEFINE_PKG_${_entry})
|
|
Packit |
534379 |
set(CPACK_COMPONENT_${_component_upper}_${_entry} "${DEFINE_PKG_${_entry}}"
|
|
Packit |
534379 |
CACHE STRING "component" FORCE)
|
|
Packit |
534379 |
endif()
|
|
Packit |
534379 |
endforeach()
|
|
Packit |
534379 |
endforeach()
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
if(DEFINE_PKG_DEB_DEPENDS)
|
|
Packit |
534379 |
string(TOUPPER "${DEFINE_PKG_GROUP}" _group_upper)
|
|
Packit |
534379 |
set(CPACK_DEBIAN_${_group_upper}_PACKAGE_DEPENDS ${DEFINE_PKG_DEB_DEPENDS}
|
|
Packit |
534379 |
CACHE STRING "depends" FORCE)
|
|
Packit |
534379 |
endif()
|
|
Packit |
534379 |
|
|
Packit |
534379 |
if(DEFINE_PKG_DESCRIPTION)
|
|
Packit |
534379 |
string(TOUPPER "${DEFINE_PKG_GROUP}" _group_upper)
|
|
Packit |
534379 |
set(CPACK_COMPONENT_${_group_upper}_DESCRIPTION ${DEFINE_PKG_DESCRIPTION}
|
|
Packit |
534379 |
CACHE STRING "descr" FORCE)
|
|
Packit |
534379 |
endif()
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
endfunction(DEFINE_PKG)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
macro(CREATE_PYTHON_EXE EXE_NAME MAIN_MODULE)
|
|
Packit |
534379 |
message(WARNING "This macro will be deprecated in a future release.")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
|
Packit |
534379 |
set(PACKAGER_BIN ${PROJECT_BINARY_DIR}/bin/${EXE_NAME})
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Generate a __main__.py that loads the target module
|
|
Packit |
534379 |
set(BUILD_DIR_MAIN "${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}_main")
|
|
Packit |
534379 |
file(MAKE_DIRECTORY "${BUILD_DIR_MAIN}")
|
|
Packit |
534379 |
file(WRITE "${BUILD_DIR_MAIN}/__main__.py"
|
|
Packit |
534379 |
"import sys\n"
|
|
Packit |
534379 |
"from ${MAIN_MODULE} import main\n"
|
|
Packit |
534379 |
"if __name__ == '__main__':\n"
|
|
Packit |
534379 |
" sys.exit(main())\n")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Generate a Python script to zip the sources.
|
|
Packit |
534379 |
# *** We could use writepy() for Python files, but this introduces the
|
|
Packit |
534379 |
# *** potential for compatibility problems, especially in RPMs.
|
|
Packit |
534379 |
file(WRITE "${BUILD_DIR_MAIN}/do_zip.py"
|
|
Packit |
534379 |
"import os\n"
|
|
Packit |
534379 |
"import stat\n"
|
|
Packit |
534379 |
"import zipfile\n"
|
|
Packit |
534379 |
"from io import BytesIO\n"
|
|
Packit |
534379 |
"\n"
|
|
Packit |
534379 |
"# Write to a buffer so that the shebang can be prepended easily\n"
|
|
Packit |
534379 |
"wr_buf = BytesIO()\n"
|
|
Packit |
534379 |
"wr_buf.write('#!/usr/bin/env python3{}'.format(os.linesep).encode())\n"
|
|
Packit |
534379 |
"\n"
|
|
Packit |
534379 |
"z = zipfile.PyZipFile(wr_buf, 'w')\n")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Emit the list of files to include in the zipped file. Entries in the ${ARGN}
|
|
Packit |
534379 |
# list may either be actual names of files to zip or entries may be the names
|
|
Packit |
534379 |
# of sub-lists. The sub-lists are tuples, holding the path to the file to zip
|
|
Packit |
534379 |
# and the name to call the file in the zipped file.
|
|
Packit |
534379 |
foreach(PYFILE ${ARGN})
|
|
Packit |
534379 |
# Is this entry a list or a file?
|
|
Packit |
534379 |
if (DEFINED ${PYFILE})
|
|
Packit |
534379 |
# It's a list. Extract the source path and the name to call the
|
|
Packit |
534379 |
# file inside the zipped file.
|
|
Packit |
534379 |
list(GET ${PYFILE} 0 F_PATH)
|
|
Packit |
534379 |
list(GET ${PYFILE} 1 Z_NAME)
|
|
Packit |
534379 |
file(APPEND "${BUILD_DIR_MAIN}/do_zip.py"
|
|
Packit |
534379 |
"z.write('${F_PATH}', '${Z_NAME}')\n")
|
|
Packit |
534379 |
else()
|
|
Packit |
534379 |
# Entry is just a file name.
|
|
Packit |
534379 |
file(APPEND "${BUILD_DIR_MAIN}/do_zip.py"
|
|
Packit |
534379 |
"z.write('${PYFILE}')\n")
|
|
Packit |
534379 |
endif()
|
|
Packit |
534379 |
endforeach(PYFILE)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
file(APPEND "${BUILD_DIR_MAIN}/do_zip.py"
|
|
Packit |
534379 |
"z.write('${BUILD_DIR_MAIN}/__main__.py', '__main__.py')\n"
|
|
Packit |
534379 |
"z.close()\n"
|
|
Packit |
534379 |
"\n"
|
|
Packit |
534379 |
"# Write out the buffer\n"
|
|
Packit |
534379 |
"with open('${PACKAGER_BIN}', 'wb') as f:\n"
|
|
Packit |
534379 |
" f.write(wr_buf.getvalue())\n"
|
|
Packit |
534379 |
" # Mark the file executable\n"
|
|
Packit |
534379 |
" mode = os.fstat(f.fileno()).st_mode\n"
|
|
Packit |
534379 |
" mode |= stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH\n"
|
|
Packit |
534379 |
" os.fchmod(f.fileno(), stat.S_IMODE(mode))\n"
|
|
Packit |
534379 |
"\n"
|
|
Packit |
534379 |
"f.close()\n")
|
|
Packit |
534379 |
|
|
Packit |
534379 |
# Run Python to generate the zipped file
|
|
Packit |
534379 |
execute_process(COMMAND python3 "${BUILD_DIR_MAIN}/do_zip.py"
|
|
Packit |
534379 |
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
|
Packit |
534379 |
|
|
Packit |
534379 |
endmacro(CREATE_PYTHON_EXE)
|