Last active
May 9, 2023 19:53
-
-
Save valgur/f87d626ab966af163d09834ff890ea8c to your computer and use it in GitHub Desktop.
Create a recipe skeleton for a new conan-center-index package.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -eu -o pipefail | |
name=$1 | |
version=$2 | |
template=${3:-"cmake_package"} | |
echo Copying sources... | |
root=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | |
pkg_dir=$root/recipes/$name | |
rm -r "$pkg_dir" || true | |
cp -r "$root/docs/package_templates/$template" "$pkg_dir" | |
echo Cleaning up conanfile.py... | |
conanfile="$pkg_dir/all/conanfile.py" | |
# Strip all comments (except TODOs) | |
sed -E '/#.*$/ { /(# *TODO)/! d }' -i "$conanfile" | |
# Remove self.settings.rm_safe("compiler.*") lines that are meant for C libraries | |
sed -E '/self\.settings\.rm_safe\("compiler.+$/d' -i "$conanfile" | |
# Replace 'package_lib' with $name | |
sed "s/package_lib/$name/g" -i "$conanfile" | |
# Replace 'package' with lower-case name | |
sed -E "s/\bpackage\b/$name/g" -i "$conanfile" | |
sed "s/$name(self)/package(self)/g" -i "$conanfile" | |
# Replace 'Package' with capitalized name | |
sed "s/Package/${name^}/g" -i "$conanfile" | |
# Replace 'PACKAGE' with an all-caps name | |
sed "s/PACKAGE/${name^^}/g" -i "$conanfile" | |
# Autoformat | |
black "$conanfile" -l 100 -t py311 | |
echo Cleaning up test_package/CMakeLists.txt... | |
cat > "$pkg_dir/all/test_package/CMakeLists.txt" << EOF | |
cmake_minimum_required(VERSION 3.15) | |
project(test_package LANGUAGES CXX) | |
find_package($name REQUIRED CONFIG) | |
add_executable(\${PROJECT_NAME} test_package.cpp) | |
target_link_libraries(\${PROJECT_NAME} PRIVATE $name::$name) | |
target_compile_features(\${PROJECT_NAME} PRIVATE cxx_std_14) | |
EOF | |
cat > "$pkg_dir/all/test_v1_package/CMakeLists.txt" << EOF | |
cmake_minimum_required(VERSION 3.15) | |
project(test_package LANGUAGES CXX) | |
include(\${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | |
conan_basic_setup(TARGETS) | |
add_subdirectory(\${CMAKE_CURRENT_SOURCE_DIR}/../test_package/ | |
\${CMAKE_CURRENT_BINARY_DIR}/test_package/) | |
EOF | |
echo Writing config.yml and conandata.yml... | |
cat > "$pkg_dir/config.yml" << EOF | |
versions: | |
"$version": | |
folder: all | |
EOF | |
cat > "$pkg_dir/all/conandata.yml" << EOF | |
sources: | |
"$version": | |
url: "https://github.com/$name/$name/archive/refs/tags/$version.tar.gz" | |
sha256: "________________________________________________________________" | |
EOF | |
echo Writing test_package/test_package.cpp... | |
cat > "$pkg_dir/all/test_package/test_package.cpp" << EOF | |
#include <cstdlib> | |
#include <iostream> | |
#include <${name}/${name}.h> | |
int main() { | |
${name}::${name} foo; | |
std::cout << "Hello, world!" << std::endl; | |
return EXIT_SUCCESS; | |
} | |
EOF | |
echo Done. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment