From e5a9681b37697ff2da7c37f1fa4517971613e01e Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 23 Jun 2023 17:24:33 -0400 Subject: [PATCH 1/4] tz: Use pure CMake to list TZif files --- externals/tz/CMakeLists.txt | 20 ++++++++++++++++++-- externals/tz/find_tzif.sh | 14 -------------- externals/tz/list_directory.cmake | 2 ++ 3 files changed, 20 insertions(+), 16 deletions(-) delete mode 100644 externals/tz/find_tzif.sh create mode 100644 externals/tz/list_directory.cmake diff --git a/externals/tz/CMakeLists.txt b/externals/tz/CMakeLists.txt index 68d70fd..38e6525 100644 --- a/externals/tz/CMakeLists.txt +++ b/externals/tz/CMakeLists.txt @@ -28,7 +28,23 @@ if (NOT EXISTS "${TZ_DIR}" OR NOT EXISTS "${TZIF_LIST_FILE}") execute_process( COMMAND - sh "${CMAKE_CURRENT_SOURCE_DIR}/find_tzif.sh" "${TZ_ZONEINFO_DIR}" "${TZIF_LIST_FILE}" - COMMAND_ERROR_IS_FATAL ANY + ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/list_directory.cmake" + WORKING_DIRECTORY + "${TZ_ZONEINFO_DIR}" + OUTPUT_VARIABLE + TZIF_SCAN ) + + set(TZIF_LIST "") + foreach(CANDIDATE ${TZIF_SCAN}) + if (CANDIDATE STREQUAL "\n") + continue() + endif() + set(TZIF_FILE "${TZ_ZONEINFO_DIR}/${CANDIDATE}") + file(READ "${TZIF_FILE}" HEADER LIMIT 4) + string(SUBSTRING "${HEADER}" 0 4 HEADER) # Remove trailing newline + if (HEADER STREQUAL "TZif") + file(APPEND "${TZIF_LIST_FILE}" "${TZIF_FILE}\n") + endif() + endforeach() endif() diff --git a/externals/tz/find_tzif.sh b/externals/tz/find_tzif.sh deleted file mode 100644 index 6664440..0000000 --- a/externals/tz/find_tzif.sh +++ /dev/null @@ -1,14 +0,0 @@ -#/bin/sh -set -e -directory=$1 -tzif_list=$2 - -truncate -s 0 $tzif_list - -for i in `find $directory -type f`; do - header=`head -c 4 $i` - if [ "$header" = "TZif" ]; then - echo "$i" >> $tzif_list - fi -done - diff --git a/externals/tz/list_directory.cmake b/externals/tz/list_directory.cmake new file mode 100644 index 0000000..858de59 --- /dev/null +++ b/externals/tz/list_directory.cmake @@ -0,0 +1,2 @@ +file(GLOB_RECURSE FILE_LIST LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "*") +execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${FILE_LIST};") \ No newline at end of file From 7c1fc8b9ad384441d3b668d0e500d6f9b1334b80 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 23 Jun 2023 18:11:24 -0400 Subject: [PATCH 2/4] tzdb: Use pure cmake to generate binaryList.txt --- src/tzdb/CMakeLists.txt | 9 ++++- src/tzdb/generate_binary_list_txt.cmake | 48 +++++++++++++++++++++++++ src/tzdb/generate_binary_list_txt.sh | 23 ------------ src/tzdb/list_directory.cmake | 10 ++++++ 4 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 src/tzdb/generate_binary_list_txt.cmake delete mode 100644 src/tzdb/generate_binary_list_txt.sh create mode 100644 src/tzdb/list_directory.cmake diff --git a/src/tzdb/CMakeLists.txt b/src/tzdb/CMakeLists.txt index 33eb928..f8e01ee 100644 --- a/src/tzdb/CMakeLists.txt +++ b/src/tzdb/CMakeLists.txt @@ -46,11 +46,18 @@ add_custom_target(x80e ${NX_VERSION_FILE}) set(BINARY_LIST_TXT ${NX_TZDB_DIR}/binaryList.txt) +# add_custom_command( +# OUTPUT +# ${BINARY_LIST_TXT} +# COMMAND +# sh ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.sh ${BINARY_LIST_TXT} +# WORKING_DIRECTORY +# ${NX_ZONEINFO_DIR}) add_custom_command( OUTPUT ${BINARY_LIST_TXT} COMMAND - sh ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.sh ${BINARY_LIST_TXT} + ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.cmake ${BINARY_LIST_TXT} ${CMAKE_CURRENT_SOURCE_DIR}/list_directory.cmake WORKING_DIRECTORY ${NX_ZONEINFO_DIR}) diff --git a/src/tzdb/generate_binary_list_txt.cmake b/src/tzdb/generate_binary_list_txt.cmake new file mode 100644 index 0000000..d53c644 --- /dev/null +++ b/src/tzdb/generate_binary_list_txt.cmake @@ -0,0 +1,48 @@ +set(BINARY_LIST_TXT ${CMAKE_ARGV3}) +set(LIST_DIR_CMAKE ${CMAKE_ARGV4}) + +# Fill text file with zone names +# Issue: Hyphens/underscores are not handled the same way Nintendo handles them +function(get_files_nx TARG SUB_DIR) + execute_process( + COMMAND + ${CMAKE_COMMAND} -P ${LIST_DIR_CMAKE} false OFF + WORKING_DIRECTORY + ${TARG} + OUTPUT_VARIABLE + FILE_LIST + ) + list(SORT FILE_LIST) + execute_process( + COMMAND + ${CMAKE_COMMAND} -P ${LIST_DIR_CMAKE} true OFF + WORKING_DIRECTORY + ${TARG} + OUTPUT_VARIABLE + DIR_LIST + ) + + foreach(FILE ${FILE_LIST}) + if(FILE STREQUAL "\n") + continue() + endif() + list(REMOVE_ITEM DIR_LIST FILE) + if (SUB_DIR) + file(APPEND ${BINARY_LIST_TXT} "${SUB_DIR}/${FILE}\r\n") + else() + file(APPEND ${BINARY_LIST_TXT} "${FILE}\r\n") + endif() + endforeach() + + list(SORT DIR_LIST) + + foreach(DIR ${DIR_LIST}) + if (NOT DIR OR DIR STREQUAL "\n") + continue() + endif() + get_files_nx(${DIR} ${DIR}) + endforeach() +endfunction() + +get_files_nx(${CMAKE_SOURCE_DIR} "") + diff --git a/src/tzdb/generate_binary_list_txt.sh b/src/tzdb/generate_binary_list_txt.sh deleted file mode 100644 index 6cc80f9..0000000 --- a/src/tzdb/generate_binary_list_txt.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -BINARY_LIST_TXT="$1" - -# Fill text file with zone names -# Issue: Hyphens/underscores are not handled the same way Nintendo handles them -get_files_nx() { - local target=$1 - find $target -maxdepth 1 -type f -not -regex '.*Factory' | sort - local DIRS=`find $target -maxdepth 1 -type d | sort` - for i in $DIRS; do - if [ "`readlink -e $i`" = "`readlink -e $target`" ]; then - continue - fi - get_files_nx $i - done -} - -get_files_nx . | cut -c3- > ${BINARY_LIST_TXT} - -# Convert LF to CRLF -awk -v ORS='\r\n' 1 ${BINARY_LIST_TXT} > win -# Overwrite LF with CRLF conversion -mv win ${BINARY_LIST_TXT} diff --git a/src/tzdb/list_directory.cmake b/src/tzdb/list_directory.cmake new file mode 100644 index 0000000..a2c6c78 --- /dev/null +++ b/src/tzdb/list_directory.cmake @@ -0,0 +1,10 @@ +set(WITH_DIRECTORIES ${CMAKE_ARGV3}) +set(RECURSE ${CMAKE_ARGV4}) + +set(HOW_TO_GLOB "GLOB") +if (RECURSE) + set(HOW_TO_GLOB "GLOB_RECURSE") +endif() + +file(GLOB FILE_LIST LIST_DIRECTORIES ${WITH_DIRECTORIES} RELATIVE ${CMAKE_SOURCE_DIR} "*") +execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${FILE_LIST};") \ No newline at end of file From 6415df918b7660f42f24a87972fb7ca4f2f9a400 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 23 Jun 2023 18:17:23 -0400 Subject: [PATCH 3/4] cmake: Move list directory for general access --- {src/tzdb => CMakeModules}/list_directory.cmake | 2 +- externals/tz/CMakeLists.txt | 2 +- externals/tz/list_directory.cmake | 2 -- src/tzdb/CMakeLists.txt | 9 +-------- 4 files changed, 3 insertions(+), 12 deletions(-) rename {src/tzdb => CMakeModules}/list_directory.cmake (67%) delete mode 100644 externals/tz/list_directory.cmake diff --git a/src/tzdb/list_directory.cmake b/CMakeModules/list_directory.cmake similarity index 67% rename from src/tzdb/list_directory.cmake rename to CMakeModules/list_directory.cmake index a2c6c78..9f4648e 100644 --- a/src/tzdb/list_directory.cmake +++ b/CMakeModules/list_directory.cmake @@ -6,5 +6,5 @@ if (RECURSE) set(HOW_TO_GLOB "GLOB_RECURSE") endif() -file(GLOB FILE_LIST LIST_DIRECTORIES ${WITH_DIRECTORIES} RELATIVE ${CMAKE_SOURCE_DIR} "*") +file(${HOW_TO_GLOB} FILE_LIST LIST_DIRECTORIES ${WITH_DIRECTORIES} RELATIVE ${CMAKE_SOURCE_DIR} "*") execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${FILE_LIST};") \ No newline at end of file diff --git a/externals/tz/CMakeLists.txt b/externals/tz/CMakeLists.txt index 38e6525..d0a9589 100644 --- a/externals/tz/CMakeLists.txt +++ b/externals/tz/CMakeLists.txt @@ -28,7 +28,7 @@ if (NOT EXISTS "${TZ_DIR}" OR NOT EXISTS "${TZIF_LIST_FILE}") execute_process( COMMAND - ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/list_directory.cmake" + ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/CMakeModules/list_directory.cmake false ON WORKING_DIRECTORY "${TZ_ZONEINFO_DIR}" OUTPUT_VARIABLE diff --git a/externals/tz/list_directory.cmake b/externals/tz/list_directory.cmake deleted file mode 100644 index 858de59..0000000 --- a/externals/tz/list_directory.cmake +++ /dev/null @@ -1,2 +0,0 @@ -file(GLOB_RECURSE FILE_LIST LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "*") -execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${FILE_LIST};") \ No newline at end of file diff --git a/src/tzdb/CMakeLists.txt b/src/tzdb/CMakeLists.txt index f8e01ee..119002b 100644 --- a/src/tzdb/CMakeLists.txt +++ b/src/tzdb/CMakeLists.txt @@ -46,18 +46,11 @@ add_custom_target(x80e ${NX_VERSION_FILE}) set(BINARY_LIST_TXT ${NX_TZDB_DIR}/binaryList.txt) -# add_custom_command( -# OUTPUT -# ${BINARY_LIST_TXT} -# COMMAND -# sh ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.sh ${BINARY_LIST_TXT} -# WORKING_DIRECTORY -# ${NX_ZONEINFO_DIR}) add_custom_command( OUTPUT ${BINARY_LIST_TXT} COMMAND - ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.cmake ${BINARY_LIST_TXT} ${CMAKE_CURRENT_SOURCE_DIR}/list_directory.cmake + ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.cmake ${BINARY_LIST_TXT} ${PROJECT_SOURCE_DIR}/CMakeModules/list_directory.cmake WORKING_DIRECTORY ${NX_ZONEINFO_DIR}) From cba24ea9a8ec19fc3d5c1c885337ca029346fd24 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 23 Jun 2023 18:50:09 -0400 Subject: [PATCH 4/4] generate_binary_list: Specify full path Otherwise has the convoluted DIR DIR arguments. --- src/tzdb/generate_binary_list_txt.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tzdb/generate_binary_list_txt.cmake b/src/tzdb/generate_binary_list_txt.cmake index d53c644..4edce75 100644 --- a/src/tzdb/generate_binary_list_txt.cmake +++ b/src/tzdb/generate_binary_list_txt.cmake @@ -40,7 +40,7 @@ function(get_files_nx TARG SUB_DIR) if (NOT DIR OR DIR STREQUAL "\n") continue() endif() - get_files_nx(${DIR} ${DIR}) + get_files_nx(${TARG}/${DIR} ${DIR}) endforeach() endfunction()