| #!/usr/bin/env bash | |
| set -e | |
| set -x | |
| readonly tmpdir="$(mktemp -d)" | |
| trap "rm -rf '$tmpdir'" EXIT | |
| readonly outdir="${BASH_SOURCE%/*}" | |
| readonly defaultBranch='master' | |
| export GIT_AUTHOR_NAME='testauthor' | |
| export GIT_AUTHOR_EMAIL='testauthor@cmake.org' | |
| export GIT_COMMITTER_NAME='testauthor' | |
| export GIT_COMMITTER_EMAIL='testauthor@cmake.org' | |
| ( | |
| cd "$tmpdir" | |
| git --bare init -b "$defaultBranch" gitrepo.git | |
| rm -f gitrepo.git/hooks/*.sample | |
| mkdir gitrepo | |
| cd gitrepo | |
| git init -b "$defaultBranch" | |
| echo 'cmake_minimum_required(VERSION 3.19) | |
| project(Example NONE) | |
| add_custom_target(example ALL | |
| COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/example.cmake.in example.cmake | |
| )' >CMakeLists.txt | |
| echo 'message(STATUS example)' >example.cmake.in | |
| git add CMakeLists.txt example.cmake.in | |
| git commit -m "Initial import into repo." | |
| git push ../gitrepo.git "$defaultBranch" | |
| cd ../gitrepo.git | |
| git gc --prune | |
| cd .. | |
| ln -s gitrepo.git GIT | |
| git --bare init -b "$defaultBranch" gitrepo-sub.git | |
| rm -f gitrepo-sub.git/hooks/*.sample | |
| mkdir gitrepo-sub | |
| cd gitrepo-sub | |
| git init -b "$defaultBranch" | |
| echo 'cmake_minimum_required(VERSION 3.19) | |
| project(ExampleWithSub NONE) | |
| file(STRINGS "${CMAKE_SOURCE_DIR}/.git/config" git_config_strings | |
| REGEX "^\\[submodule") | |
| foreach(submodule m1 m2) | |
| option(WITH_${submodule} "Enable ${submodule}" OFF) | |
| set(${submodule}_INITED FALSE) | |
| set(${submodule}_UPDATED FALSE) | |
| foreach(s ${git_config_strings}) | |
| if("${s}" MATCHES "${submodule}") | |
| set(${submodule}_INITED TRUE) | |
| endif() | |
| endforeach() | |
| if(EXISTS "${CMAKE_SOURCE_DIR}/m/${submodule}/CMakeLists.txt") | |
| set(${submodule}_UPDATED TRUE) | |
| endif() | |
| if(WITH_${submodule}) | |
| if(NOT ${submodule}_INITED) | |
| message(FATAL_ERROR "${submodule} not inited") | |
| elseif(NOT ${submodule}_UPDATED) | |
| message(FATAL_ERROR "${submodule} not updated") | |
| endif() | |
| else() | |
| if(${submodule}_INITED) | |
| message(FATAL_ERROR "${submodule} inited") | |
| elseif(${submodule}_UPDATED) | |
| message(FATAL_ERROR "${submodule} updated") | |
| endif() | |
| endif() | |
| endforeach()' >CMakeLists.txt | |
| git add CMakeLists.txt | |
| git submodule add -- ../GIT m/m1 | |
| git submodule add -- ../GIT m/m2 | |
| git submodule add -- ../GIT m/m3 | |
| git commit -m "Initial import into repo." | |
| git push ../gitrepo-sub.git "$defaultBranch" | |
| cd ../gitrepo-sub.git | |
| git gc --prune | |
| cd .. | |
| ln -s gitrepo-sub.git GIT-with-submodules | |
| git --bare init -b "$defaultBranch" gitrepo-sub-rec.git | |
| rm -f gitrepo-sub-rec.git/hooks/*.sample | |
| mkdir gitrepo-sub-rec | |
| cd gitrepo-sub-rec | |
| git init -b "$defaultBranch" | |
| echo 'cmake_minimum_required(VERSION 3.19) | |
| project(ExampleWithRecSub NONE) | |
| set(top_submodule_dir "${CMAKE_SOURCE_DIR}/submodule") | |
| if(NOT EXISTS "${top_submodule_dir}/CMakeLists.txt") | |
| message(FATAL_ERROR "Top submodule not updated") | |
| endif() | |
| option(WITH_RECURSIVE "Submodules are updated recursively" ON) | |
| foreach(submodule m1 m2 m3) | |
| set(${submodule}_UPDATED FALSE) | |
| if(EXISTS "${top_submodule_dir}/m/${submodule}/CMakeLists.txt") | |
| set(${submodule}_UPDATED TRUE) | |
| endif() | |
| if(WITH_RECURSIVE) | |
| if(NOT ${submodule}_UPDATED) | |
| message(FATAL_ERROR "${submodule} not updated") | |
| endif() | |
| else() | |
| if(${submodule}_UPDATED) | |
| message(FATAL_ERROR "${submodule} updated") | |
| endif() | |
| endif() | |
| endforeach()' >CMakeLists.txt | |
| git add CMakeLists.txt | |
| git submodule add -- ../GIT-with-submodules submodule | |
| git commit -m "Initial import into repo." | |
| git push ../gitrepo-sub-rec.git "$defaultBranch" | |
| cd ../gitrepo-sub-rec.git | |
| git gc --prune | |
| cd .. | |
| ) | |
| tar cvzf "$outdir/gitrepo.tgz" -C "$tmpdir" gitrepo.git | |
| tar cvzf "$outdir/gitrepo-sub.tgz" -C "$tmpdir" gitrepo-sub.git | |
| tar cvzf "$outdir/gitrepo-sub-rec.tgz" -C "$tmpdir" gitrepo-sub-rec.git | |
| git_tag=$(cd "$tmpdir/gitrepo.git" ; git rev-parse HEAD) | |
| sed -i "/generated by gitrepo.bash/ s/ [0-9a-f]\\+ / $git_tag /" "$outdir/CMakeLists.txt" |