mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-21 08:18:35 +00:00
Summary: ## Changes in this pull request A better version of https://github.com/Instagram/IGListKit/issues/1465 =) - SPM support with script-based generations. - added macOS Catalyst support ### Generate SPM layout 1. From **project's root** run: `bash scripts/generate_spm_sources_layout.sh` 2. Commit Changes Repeat those steps each time you delete/add the project's files. **Make sure** to have this CI step which will check that `generate_spm_sources_layout.sh` is not broken. Issue fixed: https://github.com/Instagram/IGListKit/issues/1368 #1406 ### Checklist - [ ] All tests pass. Demo project builds and runs. - [ ] I added tests, an experiment, or detailed why my change isn't tested. - [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes. - [ ] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md) Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1487 Reviewed By: DimaVartanian, candance Differential Revision: D30428297 Pulled By: lorixx fbshipit-source-id: 655291ff03445dec9b0b8cd97916f0c88207e9a7
224 lines
6.1 KiB
Bash
Executable file
224 lines
6.1 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 implementtions. *.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 "IGListBindingSingleSectionController.[hm]" \
|
|
-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 implementtions. *.m"
|
|
echo "Generated under ${SPM_IG_LIST_KIT_SOURCES_PATH}"
|
|
|
|
sources_list=$(
|
|
find "Source/IGListKit" \
|
|
\! -name "IGListBindingSingleSectionController.[hm]" \
|
|
-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
|