mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-22 19:55:23 +00:00
9ec7714ebc
None of these sources are referenced, either directly or indirectly, in any CMakeLists.txt file. NOTE: All of legacy/ is unused, but we're keeping it around. Process for this commit: (in bash) **NOTE: THIS MUST BE DONE ON A CASE-SENSITIVE FILESYSTEM**. There are a few instances of differing-in-case-only (hogmaker vs HogMaker, etc) that will catch you out otherwise. ``` # *** 1: Find all directly-referenced c/cpp files in CMakeLists.txt find . -name CMakeLists.txt -exec cat {} \+ | # Then, convert spaces and tabs to newlines for easy tokenizing tr -s ' \t' '\n' | # Filter to just tokens descripting c/cpp filenames (case insensitive) grep -iE '\.c(pp)?' | # Massage each filename to remove CMake-specific chars sed 's/[")]//g' | # Remove a URL that happens to match the pattern so far grep -v https: | # Remove files that start with # (and are thus comments, not refs) grep -Ev '^#' | # *** 2: In the output so far there is a curious entry ${SCRIPT}.cpp # Turns out, the makefiles generate some further filenames from script # names. So, delete the ${SCRIPT}.cpp filename... grep -v '${SCRIPT}.cpp' | # .. and add in the cpps. ( # We use a bash subshell to let us "concatenate" to the pipe. This # writes stdin back to stdout, and then starts a *new command* to # generate more to stdout. cat -; # All the generated script cpp references live in scripts/ cat scripts/CMakeLists.txt | # Squash the makefile onto one line for regex ease tr '\n' ' ' | # Extract the script names sed -E 's/.*set\(SCRIPTS([^)]+)\).*/\1/' | # Convert spaces and tabs to newlines for easy tokenizing tr -s ' \t' '\n' | # Remove blank lines grep -v '^$' | # Add cpp extension to each token while read TOKEN; do echo ${TOKEN}.cpp; done ) | # *** 3: Being referenced by CMakeFiles.txt isn't the only way a src # file can be used - it could also be potentially #include'ed. Let's # find those, with another subshell concatenation: ( cat -; # Look in ALL source files. We could actually probably limit the # search here to just src files listed so far in stdin + *.h, but # that'd require a bunch of redirections and this bash pipeline is # already ridiculous enough. (Case!) find . -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" | # Pull out the #include directives from them xargs grep --no-filename '#include' | # Look for any include of a .c or .cpp file (Case!) grep -iE '\.c(pp)?' | # Squash multiple spaces and tabs into one single space tr -s ' \t' ' ' | # Split on spaces, take the second field cut -d ' ' -f 2 | # Delete off quotes and angle brackets to get the included filename tr -d '"<>' ) | # *** 4: Protect all files under legacy/, per @Lgt2x's request ( cat -; find legacy -iname "*.cpp" -or -iname "*.c" ) | # *** 5: Reduce all entries to their basename while read FILENAME; do basename $FILENAME; done | # *** 6: FINALLY, sort and dedupe the output into a file. sort | uniq > used_srcs # Now that we know all the used source files, we need to find all of # the source files in the repo, and delete them if they do not appear # in the used_srcs list. for SRC in $(find . -iname "*.cpp" -or -iname "*.c"); do # find outputs the relative path, we want to operate on just filename basename $SRC | # grep to see if the basename occurs in the used_srcs list. # -q means be quiet, do not print the match (so this doesn't spam) # -x means match the entire line (so macfile.cpp doesn't sneak thru # via cfile.cpp) # -F means treat the lines patterns as fixed (not regexp) # -f means load patterns from the given file grep -qxFf used_srcs || # If the grep command *fails*, then the file is not in the list. # Bash performs logic short-circuiting, so we can use logical-OR git rm $SRC; done ``` Test Plan: On all three of `[win, mac, linux]`: ``` cmake --preset <platform> cmake --build --preset <platform> --config Debug cmake --build --preset <platform> --config Release ``` |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
dmfc.def | ||
dmfcbase.cpp | ||
dmfccfg.cpp | ||
dmfcclient.cpp | ||
dmfcdllinit.h | ||
dmfcfunctions.cpp | ||
dmfchudmessages.cpp | ||
dmfcinputcommand.cpp | ||
dmfcinputcommands.h | ||
dmfcinterface.cpp | ||
dmfcinternal.h | ||
dmfcmenu.cpp | ||
dmfcpackets.cpp | ||
dmfcpinfo.cpp | ||
dmfcprecord.cpp | ||
dmfcremote.cpp | ||
dmfcserver.cpp | ||
dmfcstats.cpp | ||
dmfctimer.cpp | ||
dmfcui.cpp | ||
dmfcvirtual.cpp | ||
encryption.cpp | ||
encryption.h | ||
idmfc.cpp |