| #!/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" |