IGListKit/scripts/generate_spm_sources_layout.sh
Tim Oliver d7206117a7 Add IGListBindingSingleSectionController to public headers
Summary:
While the `IGListBindingSingleSectionController` class and a nearly complete test suite were present in the IGListKit repo, they weren't imported into Xcode, and so they weren't part of the public release or the test CI.

Since the class looks like it's being used within Instagram, it's clear that it's not deprecated. I'm assuming it was added for a specific use-case in Instagram, and integrating it with the public Xcode project was still pending.

This diff integrates the class back into the public framework.

Reviewed By: candance

Differential Revision: D45147758

fbshipit-source-id: b0a84a2909635a4448480246f315243f4fcac134
2023-04-20 14:26:11 -07:00

222 lines
6 KiB
Bash
Executable file

#!/bin/sh
# Swift Package Manager [has some strict requirements](https://github.com/apple/swift-package-manager/blob/main/Documentation/Usage.md#creating-c-language-targets) to source files layout.
# We can gain SPM support with minimal project structure changes by applying an autogenerated layout based on symbolic links technics.
# SPM related files located under `spm` folder at project's root.
# You should **NEVER** modify it manually nor inlude to Xcode's project.
# ### Generate SPM layout
# 1. From **project's root** run:
# `bash scripts/generate_spm_sources_layout.sh`
# 2. Commit Changes
# Repeate those steps each time you delete/add project's files. **Make sure** to have this CI step which will check that `generate_spm_sources_layout.sh` is not broken.
set -e
###IGListDiffKit
SPM_IG_LIST_DIFF_KIT_PUBLIC_HEADERS_PATH="spm/Sources/IGListDiffKit/include"
SPM_IG_LIST_DIFF_KIT_SOURCES_PATH="spm/Sources/IGListDiffKit"
function generate_ig_list_diff_kit_spm_public_headers() {
echo "Generate symbolic links for all public headers. *.h"
echo "Generated under ${SPM_IG_LIST_DIFF_KIT_PUBLIC_HEADERS_PATH}"
public_headers_list=$(
find "Source/IGListDiffKit" \
-type f -name "*.[h]" \
-not -path "spm/*" \
-not -path "Source/IGListDiffKit/Internal/*" \
-not -path "Examples/*" | sed "s| \([^/]\)|:\1|g"
)
SRC_ROOT=$(pwd)
cd $SPM_IG_LIST_DIFF_KIT_PUBLIC_HEADERS_PATH
for public_file in $public_headers_list; do
file_to_link=$(echo $public_file | sed "s|:| |g")
ln -s ../../../../$file_to_link
done
cd $SRC_ROOT
echo " Done"
echo ""
}
function generate_ig_list_diff_kit_spm_private_headers() {
echo "Generate symbolic links for all private headers *.h"
echo "Generated under ${SPM_IG_LIST_DIFF_KIT_SOURCES_PATH}"
private_headers_list=$(
find "Source/IGListDiffKit/Internal" \
-type f -name "*.h" \
-not -path "spm/*" | sed "s| \([^/]\)|:\1|g")
SRC_ROOT=$(pwd)
cd $SPM_IG_LIST_DIFF_KIT_SOURCES_PATH
for private_file in $private_headers_list; do
file_to_link=$(echo $private_file | sed "s|:| |g")
ln -s ../../../$file_to_link
done
cd $SRC_ROOT
echo " Done"
echo ""
}
function generate_ig_list_diff_kit_spm_sources() {
echo "Generate symbolic links for all public implementations. *.m & *.mm"
echo "Generated under ${SPM_IG_LIST_DIFF_KIT_SOURCES_PATH}"
sources_list=$(
find "Source/IGListDiffKit" \
-type f -name "*.[m]" -o -name "*.mm" \
-not -path "spm/*" | sed "s| \([^/]\)|:\1|g")
SRC_ROOT=$(pwd)
cd $SPM_IG_LIST_DIFF_KIT_SOURCES_PATH
for source_file in $sources_list; do
file_to_link=$(echo $source_file | sed "s|:| |g")
ln -s ../../../$file_to_link
done
cd $SRC_ROOT
echo " Done"
echo ""
}
function generate_ig_list_diff_kit() {
generate_ig_list_diff_kit_spm_public_headers
generate_ig_list_diff_kit_spm_private_headers
generate_ig_list_diff_kit_spm_sources
}
#### IGListKit
SPM_IG_LIST_KIT_PUBLIC_HEADERS_PATH="spm/Sources/IGListKit/include"
SPM_IG_LIST_KIT_SOURCES_PATH="spm/Sources/IGListKit"
function generate_ig_list_kit_spm_public_headers() {
echo "Generate symbolic links for all public headers. *.h"
echo "Generated under ${SPM_IG_LIST_KIT_PUBLIC_HEADERS_PATH}"
public_headers_list=$(
find "Source/IGListKit" \
-name "*.[h]" \
-type f -not -path "spm/*" \
-not -path "Source/IGListKit/Internal/*" \
-not -path "Examples/*" | sed "s| \([^/]\)|:\1|g"
)
SRC_ROOT=$(pwd)
cd $SPM_IG_LIST_KIT_PUBLIC_HEADERS_PATH
for public_file in $public_headers_list; do
file_to_link=$(echo $public_file | sed "s|:| |g")
ln -s ../../../../$file_to_link
done
cd $SRC_ROOT
echo " Done"
echo ""
}
function generate_ig_list_kit_spm_private_headers() {
echo "Generate symbolic links for all private headers/implementations *.h && *.m"
echo "Generated under ${SPM_IG_LIST_KIT_SOURCES_PATH}"
shared_ig_diff_kit_sorces_list=$(find "Source/IGListDiffKit/Internal" \
-name "*.[hm]" -o -name "*.mm" \
-type f -not -path "spm/*" \
-not -path "Examples/*" | sed "s| \([^/]\)|:\1|g")
private_headers_list=$(find "Source/IGListKit/Internal" \
-name "*.h" \
-type f -not -path "spm/*" \
-not -path "Examples/*" | sed "s| \([^/]\)|:\1|g")
SRC_ROOT=$(pwd)
cd $SPM_IG_LIST_KIT_SOURCES_PATH
for shared_file in $shared_ig_diff_kit_sorces_list; do
file_to_link=$(echo $shared_file | sed "s|:| |g")
ln -s ../../../$file_to_link
done
for private_file in $private_headers_list; do
file_to_link=$(echo $private_file | sed "s|:| |g")
ln -s ../../../$file_to_link
done
cd $SRC_ROOT
echo " Done"
echo ""
}
function generate_ig_list_kit_spm_sources() {
echo "Generate symbolic links for all public implementations. *.m"
echo "Generated under ${SPM_IG_LIST_KIT_SOURCES_PATH}"
sources_list=$(
find "Source/IGListKit" \
-name "*.m" -o -name "*.mm" \
-type f -not -path "spm/*" \
-not -path "Examples/*" | sed "s| \([^/]\)|:\1|g")
SRC_ROOT=$(pwd)
cd $SPM_IG_LIST_KIT_SOURCES_PATH
for source_file in $sources_list; do
file_to_link=$(echo $source_file | sed "s|:| |g")
ln -s ../../../$file_to_link
done
cd $SRC_ROOT
echo " Done"
echo ""
}
function generate_ig_list_kit() {
generate_ig_list_kit_spm_public_headers
generate_ig_list_kit_spm_private_headers
generate_ig_list_kit_spm_sources
}
# Delete all symbolik links from `spm` folder
function cleanup() {
rm -rf $SPM_IG_LIST_DIFF_KIT_PUBLIC_HEADERS_PATH/*.*
rm -rf $SPM_IG_LIST_DIFF_KIT_SOURCES_PATH/*.*
#IGListKit
rm -rf $SPM_IG_LIST_KIT_PUBLIC_HEADERS_PATH/*.*
rm -rf $SPM_IG_LIST_KIT_SOURCES_PATH/*.*
}
########## SPM generator pipeline #############
#1
cleanup
#2
generate_ig_list_diff_kit
# #3
generate_ig_list_kit