Merge pull request #9 from lat9nq/pure-cmake

general: Use pure CMake in place of shell scripts
This commit is contained in:
toast2903 2023-06-23 18:53:22 -04:00 committed by GitHub
commit 25b0d508a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 77 additions and 40 deletions

View File

@ -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(${HOW_TO_GLOB} FILE_LIST LIST_DIRECTORIES ${WITH_DIRECTORIES} RELATIVE ${CMAKE_SOURCE_DIR} "*")
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${FILE_LIST};")

View File

@ -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 ${PROJECT_SOURCE_DIR}/CMakeModules/list_directory.cmake false ON
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()

View File

@ -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

View File

@ -50,7 +50,7 @@ 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} ${PROJECT_SOURCE_DIR}/CMakeModules/list_directory.cmake
WORKING_DIRECTORY
${NX_ZONEINFO_DIR})

View File

@ -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(${TARG}/${DIR} ${DIR})
endforeach()
endfunction()
get_files_nx(${CMAKE_SOURCE_DIR} "")

View File

@ -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}