WIP for Build automation Ticket #1069

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@7574 30fe4595-0a0c-4342-8851-515496e4dcbd
This commit is contained in:
beaglejoe 2021-06-16 16:18:54 +00:00
parent ac58668c3d
commit 6b73e22695
8 changed files with 444 additions and 4 deletions

View File

@ -185,6 +185,8 @@ SD_SETUP_SETTINGS_VERSION()
# Setup empty GLOBAL lists for robots and modules
SET_PROPERTY(GLOBAL PROPERTY SD_MODULE_LIST "")
SET_PROPERTY(GLOBAL PROPERTY SD_CAR_LIST "")
SET_PROPERTY(GLOBAL PROPERTY SD_TRACK_LIST "")
SET_PROPERTY(GLOBAL PROPERTY SD_ROBOT_LIST "")
SET_PROPERTY(GLOBAL PROPERTY SD_OSG_PLUGIN_LIST "")
SET_PROPERTY(GLOBAL PROPERTY SD_EXE_LIST "")
@ -229,6 +231,10 @@ ELSE(MSVC)
ENDIF(MSVC)
ADD_CUSTOM_TARGET(${_UNINST_TGT_NAME} "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" )
IF(OPTION_CHECK_CONTENTS)
INCLUDE(cmake/prerelease.cmake)
ENDIF(OPTION_CHECK_CONTENTS)
IF(OPTION_PACKAGING)
INCLUDE(cmake/packagemaker.cmake)
IF(MSVC)

View File

@ -504,6 +504,7 @@ MACRO(SD_INSTALL_CAR CARNAME)
${RGB_FILES} ${PNG_FILES} ${DDS_FILES} ${JPG_FILES} ${WAV_FILES})
SD_INSTALL_FILES(DATA cars/models/${CARNAME} FILES ${SDIC_FILES})
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_CAR_LIST "${CARNAME}")
ENDMACRO(SD_INSTALL_CAR CARNAME)
@ -535,5 +536,6 @@ MACRO(SD_INSTALL_TRACK TRACKNAME CATEGORY)
${RGB_FILES} ${PNG_FILES} ${JPG_FILES} ${DDS_FILES})
SD_INSTALL_FILES(DATA tracks/${CATEGORY}/${TRACKNAME} FILES ${SDIT_FILES})
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_TRACK_LIST "${CATEGORY}/${TRACKNAME}")
ENDMACRO(SD_INSTALL_TRACK TRACKNAME CATEGORY)

View File

@ -254,7 +254,7 @@ MACRO(SD_ADD_LIBRARY TARGET_NAME TARGET_TYPE)
ELSEIF(${TARGET_TYPE} STREQUAL "ROBOT")
SET(_TGT_DIR "${CMAKE_BINARY_DIR}/${SD_LIBDIR}/drivers/${TARGET_NAME}")
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_ROBOT_LIST "${SD_LIBDIR}/drivers/${TARGET_NAME}/${TARGET_NAME}${CMAKE_SHARED_MODULE_SUFFIX}")
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_ROBOT_LIST "${TARGET_NAME}")
ELSEIF(NOT ${TARGET_TYPE} STREQUAL "STATIC")

View File

@ -59,7 +59,7 @@ MACRO(ADD_SD_COMPILE_OPTIONS)
ENDIF(NOT MSVC)
# CMake options.
SET(OPTION_CHECK_CONTENTS false CACHE BOOL "Set to On if you don't want the build to be stopped by missing optional contents folders")
SET(OPTION_CHECK_CONTENTS false CACHE BOOL "Set to off if you don't want the build to be stopped by missing optional contents folders")
MARK_AS_ADVANCED(OPTION_CHECK_CONTENTS)
SET(OPTION_OFFICIAL_ONLY false CACHE BOOL "Build / install only officially released contents")

71
cmake/prerelease.cmake Normal file
View File

@ -0,0 +1,71 @@
#==============================================================================
#
# file : prerelease.cmake
# copyright : (C) 2021 Joe Thompson
# email : beaglejoe@users.sourceforge.net
# web : www.speed-dreams.org
# version : $Id:$
#
#==============================================================================
#
# This program 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 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
#==============================================================================
INCLUDE(cmake/prereleaseutils.cmake)
GET_PROPERTY(SD_TRACK_LIST_ITEMS GLOBAL PROPERTY SD_TRACK_LIST)
GET_PROPERTY(SD_CAR_LIST_ITEMS GLOBAL PROPERTY SD_CAR_LIST)
GET_PROPERTY(SD_ROBOT_LIST_ITEMS GLOBAL PROPERTY SD_ROBOT_LIST)
string(REGEX REPLACE ";" "\n" _tracks_contents "${SD_TRACK_LIST_ITEMS}")
string(REGEX REPLACE ";" "\n" _cars_contents "${SD_CAR_LIST_ITEMS}")
string(REGEX REPLACE ";" "\n" _robots_contents "${SD_ROBOT_LIST_ITEMS}")
message("\n")
message("======= Pre-Release checks =======")
#message("\n")
if(OPTION_OFFICIAL_ONLY)
set(PRE "official")
else()
set(PRE "unofficial")
message("OPTION_OFFICIAL_ONLY NOT set")
endif()
IF(VERSION_IS_TAG)
message(STATUS "VERSION_IS_TAG = ${VERSION_IS_TAG}")
else()
message("working copy is NOT from a tag")
endif()
message(STATUS "SVN_REV = ${SVN_REV}")
message(STATUS "VERSION = ${VERSION}")
#message(STATUS "NSIS_MAKE_EXE = ${NSIS_MAKE_EXE}")
FILE(WRITE "${PROJECT_BINARY_DIR}/${PRE}-tracklist.txt" ${_tracks_contents})
FILE(WRITE "${PROJECT_BINARY_DIR}/${PRE}-carlist.txt" ${_cars_contents})
FILE(WRITE "${PROJECT_BINARY_DIR}/${PRE}-robotlist.txt" ${_robots_contents})
message("==== Checking cars ====")
check_cars("${SD_CAR_LIST_ITEMS}")
message("==== Checking tracks ====")
check_tracks("${SD_TRACK_LIST_ITEMS}")
message("==== Checking robots ====")
check_robots("${SD_ROBOT_LIST_ITEMS}")

361
cmake/prereleaseutils.cmake Normal file
View File

@ -0,0 +1,361 @@
#==============================================================================
#
# file : prereleaseutils.cmake
# copyright : (C) 2021 Joe Thompson
# email : beaglejoe@users.sourceforge.net
# web : www.speed-dreams.org
# version : $Id:$
#
#==============================================================================
#
# This program 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 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# ================================================
function(check_cars carlist)
#file(STRINGS carlist.txt _installed_cars)
set(_installed_cars ${carlist})
list(TRANSFORM _installed_cars STRIP)
cars_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-base.lst" base_car_lst)
cars_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-hq-cars-and-tracks.lst" hq_car_lst)
cars_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-more-hq-cars-and-tracks.lst" more_hq_car_lst)
cars_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-wip-cars-and-tracks.lst" wip_car_lst)
cars_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-unmaintained.lst" unmaintained_car_lst)
set(_packaged_cars )
list(APPEND _packaged_cars ${base_car_lst} ${hq_car_lst} ${more_hq_car_lst} ${wip_car_lst} ${unmaintained_car_lst})
# Verify that a car is only in one package
#message(STATUS "Checking for duplicate entries...")
list_get_duplicates(_packaged_cars _ret_duplicates)
list(LENGTH _ret_duplicates _length)
if(_length)
message("Duplicate car(s) in .lst file(s)")
dump_list("${_ret_duplicates}")
else()
message(STATUS "No duplicate car(s) in .lst file(s)")
endif()
#message("\n")
# Verify that all installed cars are in a package
#message(STATUS "Checking for installed cars that are NOT packaged...")
compare_lists(_installed_cars _packaged_cars _ret_installed _ret_packaged)
list(LENGTH _ret_installed _length)
if(_length)
message("${_length} Installed car(s) missing from .lst file(s)")
dump_list("${_ret_installed}")
else()
message(STATUS "No installed car(s) missing from .lst file(s)")
endif()
#message("\n")
# Verify that packages contain no uninstalled cars
#message(STATUS "Checking packing lists for cars that are NOT installed...")
list(LENGTH _ret_packaged _length)
if(_length)
message(".lst file(s) have car(s) that are NOT installed")
dump_list("${_ret_packaged}")
else()
message(STATUS "No missing car(s) in .lst file(s)")
endif()
#message("\n")
endfunction()
# ================================================
function(check_tracks tracklist)
set(_installed ${tracklist})
list(TRANSFORM _installed STRIP)
tracks_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-base.lst" base_track_lst)
tracks_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-hq-cars-and-tracks.lst" hq_track_lst)
tracks_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-more-hq-cars-and-tracks.lst" more_hq_track_lst)
tracks_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-wip-cars-and-tracks.lst" wip_track_lst)
tracks_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-unmaintained.lst" unmaintained_track_lst)
#dump_list("${base_track_lst}")
#dump_list("${_installed}")
set(_packaged )
list(APPEND _packaged ${base_track_lst} ${hq_track_lst} ${more_hq_track_lst} ${wip_track_lst} ${unmaintained_track_lst})
# Verify that a track is only in one package
#message(STATUS "Checking for duplicate entries...")
list_get_duplicates(_packaged _ret_duplicates)
list(LENGTH _ret_duplicates _length)
if(_length)
message("Duplicate track(s) in .lst file(s)")
dump_list("${_ret_duplicates}")
else()
message(STATUS "No duplicate track(s) in .lst file(s)")
endif()
#message("\n")
# Verify that all installed tracks are in a package
#message(STATUS "Checking for installed tracks that are NOT packaged...")
compare_lists(_installed _packaged _ret_installed _ret_packaged)
list(LENGTH _ret_installed _length)
if(_length)
message( "${_length} Installed track(s) missing from .lst file(s)")
dump_list("${_ret_installed}")
else()
message(STATUS "No installed track(s) missing from .lst file(s)")
endif()
#message("\n")
# Verify that packages contain no uninstalled tracks
#message(STATUS "Checking packing lists for tracks that are NOT installed...")
list(LENGTH _ret_packaged _length)
if(_length)
message(".lst file(s) have track(s) that are NOT installed")
dump_list("${_ret_packaged}")
else()
message(STATUS "No missing track(s) in .lst file(s)")
endif()
#message("\n")
endfunction()
# ================================================
function(check_robots robotlist)
set(_installed ${robotlist})
list(TRANSFORM _installed STRIP)
robots_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-base.lst" base_lst)
robots_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-hq-cars-and-tracks.lst" hq_lst)
robots_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-more-hq-cars-and-tracks.lst" more_hq_lst)
robots_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-wip-cars-and-tracks.lst" wip_lst)
robots_from_lst_file("${CMAKE_SOURCE_DIR}/packaging/sources/sd-src-unmaintained.lst" unmaintained_lst)
#dump_list("${base_lst}")
#dump_list("${_installed}")
set(_packaged )
list(APPEND _packaged ${base_lst} ${hq_lst} ${more_hq_lst} ${wip_lst} ${unmaintained_lst})
# Verify that a robot is only in one package
#message(STATUS "Checking for duplicate entries...")
list_get_duplicates(_packaged _ret_duplicates)
list(LENGTH _ret_duplicates _length)
if(_length)
message("Duplicate robot(s) in .lst file(s)")
dump_list("${_ret_duplicates}")
else()
message(STATUS "No duplicate robot(s) in .lst file(s)")
endif()
#message("\n")
# Verify that all installed robots are in a package
#message(STATUS "Checking for installed robots that are NOT packaged...")
compare_lists(_installed _packaged _ret_installed _ret_packaged)
list(LENGTH _ret_installed _length)
if(_length)
message("${_length} Installed robot(s) missing from .lst file(s)")
dump_list("${_ret_installed}")
else()
message(STATUS "No installed robot(s) missing from .lst file(s)")
endif()
#message("\n")
# Verify that packages contain no uninstalled robots
#message(STATUS "Checking packing lists for robots that are NOT installed...")
list(LENGTH _ret_packaged _length)
if(_length)
message(".lst file(s) have robot(s) that are NOT installed")
dump_list("${_ret_packaged}")
else()
message(STATUS "No missing robot(s) in .lst file(s)")
endif()
#message("\n")
endfunction()
# ================================================
function(cars_from_lst_file lst_file outlist)
file(STRINGS ${lst_file} _file_content)
foreach(_line ${_file_content})
#message(STATUS "${_line}")
string(STRIP "${_line}" _line)
#message(STATUS "${_line}")
string(TOLOWER "${_line}" _line)
#message(STATUS "${_line}")
string(FIND "${_line}" "data/cars/models/" _index)
if(NOT ${_index} EQUAL -1)
string(REPLACE "data/cars/models/" "" _car "${_line}")
list(APPEND _car_list "${_car}")
#message(STATUS "${_car}")
endif()
#message(STATUS "${_line}")
endforeach()
list(REMOVE_ITEM _car_list "cmakelists.txt")
set(${outlist} ${_car_list} PARENT_SCOPE)
#foreach(_car ${_car_list})
# message(STATUS "${_car}")
#endforeach()
endfunction()
# ================================================
function(tracks_from_lst_file lst_file outlist)
file(STRINGS ${lst_file} _file_content)
foreach(_line ${_file_content})
#message(STATUS "${_line}")
string(STRIP "${_line}" _line)
#message(STATUS "${_line}")
string(TOLOWER "${_line}" _line)
#message(STATUS "${_line}")
string(FIND "${_line}" "data/tracks/" _index)
if(NOT ${_index} EQUAL -1)
string(REPLACE "data/tracks/" "" _track "${_line}")
string(FIND "${_line}" "cmakelists.txt" _index)
if(${_index} EQUAL -1)
list(APPEND _track_list "${_track}")
#message(STATUS "${_track}")
endif()
endif()
#message(STATUS "${_line}")
endforeach()
list(REMOVE_ITEM _track_list "cmakelists.txt")
set(${outlist} ${_track_list} PARENT_SCOPE)
#foreach(_track ${_track_list})
# message(STATUS "${_track}")
#endforeach()
endfunction()
# ================================================
function(robots_from_lst_file lst_file outlist)
file(STRINGS ${lst_file} _file_content)
foreach(_line ${_file_content})
#message(STATUS "${_line}")
string(STRIP "${_line}" _line)
#message(STATUS "${_line}")
string(TOLOWER "${_line}" _line)
#message(STATUS "${_line}")
string(FIND "${_line}" "src/drivers/" _index)
if(NOT ${_index} EQUAL -1)
string(REPLACE "src/drivers/" "" _robot "${_line}")
string(FIND "${_robot}" "/" _index)
if(${_index} EQUAL -1)
list(APPEND _robot_list "${_robot}")
#message(STATUS "\t${_robot}")
endif()
string(FIND "${_robot}" "/src" _index)
if(NOT ${_index} EQUAL -1)
# TODO These need to go to Customizable robots binaries (Section /o "Basic mod Tools" SEC02)
string(REPLACE "/src" "" _robot "${_robot}")
list(APPEND _robot_list "${_robot}")
#message(STATUS "\t\t${_robot}")
endif()
endif()
string(FIND "${_line}" "data/drivers/" _index)
if(NOT ${_index} EQUAL -1)
string(REPLACE "data/drivers/" "" _robot "${_line}")
string(FIND "${_line}" "cmakelists.txt" _index)
if(${_index} EQUAL -1)
list(APPEND _robot_list "${_robot}")
#message(STATUS "\t\t\t${_robot}")
endif()
endif()
#message(STATUS "${_line}")
endforeach()
list(REMOVE_ITEM _robot_list "cmakelists.txt")
#[[
foreach(_robot ${_robot_list})
message(STATUS "${_robot}")
endforeach()
message("\n")
]]
list(REMOVE_DUPLICATES _robot_list)
#message("\n")
set(${outlist} ${_robot_list} PARENT_SCOPE)
#[[
foreach(_robot ${_robot_list})
message(STATUS "${_robot}")
endforeach()
message("\n")
]]
endfunction()
# ================================================
function(list_get_duplicates list_in ret_list_duplicates)
set(_duplicates )
list(TRANSFORM ${list_in} TOLOWER OUTPUT_VARIABLE _lc_list)
list(SORT _lc_list)
set(_prev_item "???")
foreach(_item ${_lc_list})
string(COMPARE EQUAL ${_item} ${_prev_item} _result)
if(_result)
list(APPEND _duplicates "${_item}")
endif()
set(_prev_item ${_item})
endforeach()
set(${ret_list_duplicates} ${_duplicates} PARENT_SCOPE)
endfunction()
# ================================================
# compares 2 lists and returns Lists with ONLY the
# the unique items from each list
#
# example:
# compare_lists(list_installed_cars list_packaged_cars _ret_installed _ret_packaged)
#
# ${_ret_installed} will contain the cars that were in ${list_installed_cars}
# AND NOT in ${list_packaged_cars}
# ${_ret_packaged} will contain the cars that were in ${list_packaged_cars}
# AND NOT in ${list_installed_cars}
#
# If both ${_ret_installed} and ${_ret_packaged} are empty
# the list were identical
# ================================================
function(compare_lists list_a list_b ret_list_a ret_list_b)
list(TRANSFORM ${list_a} TOLOWER OUTPUT_VARIABLE _lc_a)
list(TRANSFORM ${list_a} TOLOWER OUTPUT_VARIABLE _lc_a_2)
list(TRANSFORM ${list_b} TOLOWER OUTPUT_VARIABLE _lc_b)
list(REMOVE_ITEM _lc_a ${_lc_b})
list(REMOVE_ITEM _lc_b ${_lc_a_2})
#dump_list("${_lc_a}")
#dump_list("${_lc_b}")
set(${ret_list_a} ${_lc_a} PARENT_SCOPE)
set(${ret_list_b} ${_lc_b} PARENT_SCOPE)
endfunction()
# ================================================
function(dump_list _list)
foreach(_item ${_list})
message("${_item}")
endforeach()
endfunction()

View File

@ -185,7 +185,7 @@ MACRO(ROBOT_MODULE)
SET(CLONE_MODDIR "${CMAKE_BINARY_DIR}/${SD_LIBDIR}/drivers/${CLONENAME}")
SET(CLONE_MODLOC "${CLONE_MODDIR}/${CLONENAME}${CMAKE_SHARED_MODULE_SUFFIX}")
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_ROBOT_LIST "${SD_LIBDIR}/drivers/${CLONENAME}/${CLONENAME}${CMAKE_SHARED_MODULE_SUFFIX}")
SET_PROPERTY(GLOBAL APPEND PROPERTY SD_ROBOT_LIST "${CLONENAME}")
IF(FALSE) #IF(UNIX)
# Might not work with GCC 4.5 or + (see above)
ADD_CUSTOM_COMMAND(TARGET ${RBM_NAME} POST_BUILD

View File

@ -65,7 +65,7 @@ IF((APPLE) AND ("${CMAKE_INSTALL_PREFIX}" MATCHES "\\.app$"))
endforeach()
foreach(_ROBOT ${SD_ROBOT_LIST_ITEMS})
LIST(APPEND _loadables "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX}/${_ROBOT}")
LIST(APPEND _loadables "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/drivers/${_ROBOT}/${_ROBOT}${CMAKE_SHARED_MODULE_SUFFIX}")
endforeach()
foreach(_PLUGIN ${SD_OSG_PLUGIN_LIST_ITEMS})