From 4ec5b327b1d73dbe9a639f27ea13236616dcbd79 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:45:04 -0700 Subject: [PATCH 01/12] git rm -rf .devcontainer --- .devcontainer/devcontainer.json | 3 --- .devcontainer/setup.sh | 9 --------- 2 files changed, 12 deletions(-) delete mode 100644 .devcontainer/devcontainer.json delete mode 100755 .devcontainer/setup.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index bc6344b93df..00000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "postCreateCommand": "bash .devcontainer/setup.sh" -} diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh deleted file mode 100755 index c328bf3b98b..00000000000 --- a/.devcontainer/setup.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -e - -sudo apt-get update -sudo apt-get -y --no-install-recommends install cmake - -mkdir build -cd build -cmake .. \ No newline at end of file From 88940a2cdfa8a6bbc1e4c17f916e36e171307a4f Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:45:24 -0700 Subject: [PATCH 02/12] git submodule add https://github.com/externpro/externpro .devcontainer --- .devcontainer | 1 + .gitmodules | 3 +++ 2 files changed, 4 insertions(+) create mode 160000 .devcontainer create mode 100644 .gitmodules diff --git a/.devcontainer b/.devcontainer new file mode 160000 index 00000000000..1eda63a7910 --- /dev/null +++ b/.devcontainer @@ -0,0 +1 @@ +Subproject commit 1eda63a791063c7ab99c5946c47c4d98906b019b diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..18932abfb9a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule ".devcontainer"] + path = .devcontainer + url = https://github.com/externpro/externpro From 7e2f3afca3d6e9ee0b6a57bdc024f9d63d49da15 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:48:54 -0700 Subject: [PATCH 03/12] docker-compose links --- docker-compose.sh | 1 + docker-compose.yml | 1 + 2 files changed, 2 insertions(+) create mode 120000 docker-compose.sh create mode 120000 docker-compose.yml diff --git a/docker-compose.sh b/docker-compose.sh new file mode 120000 index 00000000000..85f182f0be7 --- /dev/null +++ b/docker-compose.sh @@ -0,0 +1 @@ +.devcontainer/compose.pro.sh \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 120000 index 00000000000..46c1f8918f2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1 @@ +.devcontainer/compose.bld.yml \ No newline at end of file From 04b91e127f0471426e55c56f4b0c07b2341a1806 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:49:29 -0700 Subject: [PATCH 04/12] add CMakePresets cp .devcontainer/cmake/presets/CMakePresets* . --- CMakePresets.json | 8 ++++++++ CMakePresetsBase.json | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 CMakePresets.json create mode 100644 CMakePresetsBase.json diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000000..f82cfdd2cf6 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,8 @@ +{ + "version": 8, + "include": [ + ".devcontainer/cmake/presets/xpLinuxNinja.json", + ".devcontainer/cmake/presets/xpDarwinNinja.json", + ".devcontainer/cmake/presets/xpWindowsVs2022.json" + ] +} diff --git a/CMakePresetsBase.json b/CMakePresetsBase.json new file mode 100644 index 00000000000..085cdc3e315 --- /dev/null +++ b/CMakePresetsBase.json @@ -0,0 +1,16 @@ +{ + "version": 8, + "configurePresets": [ + { + "name": "config-base", + "hidden": true, + "binaryDir": "${sourceDir}/_bld-${presetName}" + } + ], + "buildPresets": [ + { + "name": "build-base", + "hidden": true + } + ] +} From f53ef0f87f494168c9be7560f55cb0e96635ce46 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:50:29 -0700 Subject: [PATCH 05/12] gitignore: externpro ignores --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 1b482f038af..30a563a46cb 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ CMakeSettings.json .vs .idea +# externpro +.env +_bld*/ +docker-compose.override.yml From 9f3f9cca8a94045096286fcb028e295b4850b25f Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:52:19 -0700 Subject: [PATCH 06/12] externpro github/workflows @25.06 cp .devcontainer/.github/wf-templates/xp*.yml .github/workflows --- .github/workflows/xpbuild.yml | 30 ++++++++++++++++++++++++++++++ .github/workflows/xprelease.yml | 20 ++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 .github/workflows/xpbuild.yml create mode 100644 .github/workflows/xprelease.yml diff --git a/.github/workflows/xpbuild.yml b/.github/workflows/xpbuild.yml new file mode 100644 index 00000000000..169ff5269c8 --- /dev/null +++ b/.github/workflows/xpbuild.yml @@ -0,0 +1,30 @@ +name: Build +on: + push: + branches: [ "dev" ] + pull_request: + branches: [ "dev" ] + workflow_dispatch: +jobs: + linux: + uses: externpro/externpro/.github/workflows/build-linux.yml@25.06 + with: + cmake-workflow-preset: Linux + runon: ubuntu-latest + secrets: inherit + linux-arm64: + uses: externpro/externpro/.github/workflows/build-linux.yml@25.06 + with: + cmake-workflow-preset: Linux + runon: ubuntu-24.04-arm + secrets: inherit + macos: + uses: externpro/externpro/.github/workflows/build-macos.yml@25.06 + with: + cmake-workflow-preset: Darwin + secrets: inherit + windows: + uses: externpro/externpro/.github/workflows/build-windows.yml@25.06 + with: + cmake-workflow-preset: Windows + secrets: inherit diff --git a/.github/workflows/xprelease.yml b/.github/workflows/xprelease.yml new file mode 100644 index 00000000000..146191466e2 --- /dev/null +++ b/.github/workflows/xprelease.yml @@ -0,0 +1,20 @@ +name: Release +on: + workflow_dispatch: + inputs: + workflow_run_url: + description: 'URL of the workflow run containing artifacts to upload (e.g., https://github.com/owner/repo/actions/runs/123456789)' + required: true + type: string +jobs: + # Upload build artifacts as release assets + release-from-build: + uses: externpro/externpro/.github/workflows/release-from-build.yml@25.06 + with: + workflow_run_url: ${{ github.event.inputs.workflow_run_url }} + artifact_pattern: "*.tar.xz" + permissions: + contents: write + id-token: write + attestations: write + secrets: inherit From 8145ca459125fd5b5dd490daaa837061674306b7 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Thu, 13 Nov 2025 20:57:57 -0700 Subject: [PATCH 07/12] upstream github/workflows on workflow_dispatch --- .github/workflows/codeql.yml | 5 +---- .github/workflows/main.yml | 7 +------ .github/workflows/nightly.yml | 5 +---- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 38b4a044a6f..27167354804 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,9 +1,6 @@ name: "CodeQL" -on: - workflow_dispatch: - schedule: - - cron: '21 3 * * 1' +on: [workflow_dispatch] env: docker-registry: docker.pkg.github.com diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 572f025444a..407a45bf881 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,12 +2,7 @@ # main and maintenance branches. name: CI Build -on: - push: - branches: [ main, maint/* ] - pull_request: - branches: [ main, maint/* ] - workflow_dispatch: +on: [workflow_dispatch] env: docker-registry: docker.pkg.github.com diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 47ebf464d11..f7b76bde163 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,10 +1,7 @@ # Nightly build for the main branch across multiple targets. name: Nightly Build -on: - workflow_dispatch: - schedule: - - cron: '15 1 * * *' +on: [workflow_dispatch] env: docker-registry: docker.pkg.github.com From 898c794671812a37a21c50a47b07cd1b817d66cf Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Fri, 14 Nov 2025 11:33:45 -0700 Subject: [PATCH 08/12] CMakePresetsBase: set cacheVariables --- CMakePresetsBase.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakePresetsBase.json b/CMakePresetsBase.json index 085cdc3e315..9d1bf48aaca 100644 --- a/CMakePresetsBase.json +++ b/CMakePresetsBase.json @@ -4,7 +4,14 @@ { "name": "config-base", "hidden": true, - "binaryDir": "${sourceDir}/_bld-${presetName}" + "binaryDir": "${sourceDir}/_bld-${presetName}", + "cacheVariables": { + "BUILD_CLAR": "OFF", + "BUILD_SHARED_LIBS": "OFF", + "REGEX_BACKEND": "builtin", + "THREADSAFE": "ON", + "XP_NAMESPACE": "xpro" + } } ], "buildPresets": [ From aa307518ff9942ba004b431be5f41f24fe5b89be Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Fri, 14 Nov 2025 11:39:44 -0700 Subject: [PATCH 09/12] externpro dependency provider --- CMakeLists.txt | 2 ++ cmake/SelectHTTPSBackend.cmake | 6 ++---- src/CMakeLists.txt | 12 +++++------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2940775bf3c..32915700f61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,8 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1) +set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES .devcontainer/cmake/xproinc.cmake) + project(libgit2 VERSION "1.3.0" LANGUAGES C) # Add find modules to the path diff --git a/cmake/SelectHTTPSBackend.cmake b/cmake/SelectHTTPSBackend.cmake index 7bc8f8b9d9f..05ce2e62f80 100644 --- a/cmake/SelectHTTPSBackend.cmake +++ b/cmake/SelectHTTPSBackend.cmake @@ -1,11 +1,9 @@ INCLUDE(SanitizeBool) # We try to find any packages our backends might use -if(COMMAND xpFindPkg) - xpFindPkg(PKGS openssl) +FIND_PACKAGE(OpenSSL) +if(TARGET xpro::crypto AND NOT DEFINED OPENSSL_INCLUDE_DIR) get_target_property(OPENSSL_INCLUDE_DIR xpro::crypto INTERFACE_INCLUDE_DIRECTORIES) -else() - FIND_PACKAGE(OpenSSL) endif() FIND_PACKAGE(mbedTLS) IF (CMAKE_SYSTEM_NAME MATCHES "Darwin") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e3eecf3b03f..2a61433723f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -203,11 +203,9 @@ IF(USE_BUNDLED_ZLIB STREQUAL ON) ENDIF() IF(USE_BUNDLED_ZLIB STREQUAL "OFF") - if(COMMAND xpFindPkg) - xpFindPkg(PKGS zlib) - get_target_property(ZLIB_INCLUDE_DIRS ${ZLIB_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES) - else() - FIND_PACKAGE(ZLIB) + FIND_PACKAGE(ZLIB) + if(NOT DEFINED ZLIB_INCLUDE_DIRS) + get_target_property(ZLIB_INCLUDE_DIRS ${ZLIB_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES) endif() IF(ZLIB_FOUND) LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${ZLIB_INCLUDE_DIRS}) @@ -236,8 +234,8 @@ ENDIF() # Optional external dependency: libssh2 IF (USE_SSH) - if(COMMAND xpFindPkg) - xpFindPkg(PKGS libssh2) + if(COMMAND xpFindPkg) # externpro dependency provider + find_package(libssh2) get_target_property(LIBSSH2_INCLUDE_DIRS ${LIBSSH2_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES) else() FIND_PKGLIBRARIES(LIBSSH2 libssh2) From c1d544e772fc98670957368880ddb5251d74a1a9 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Fri, 14 Nov 2025 11:41:03 -0700 Subject: [PATCH 10/12] externpro devel package --- CMakeLists.txt | 12 ++++++++---- cmake/PkgBuildConfig.cmake | 4 +++- src/CMakeLists.txt | 5 ++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 32915700f61..44b240e6fb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,13 +35,17 @@ INCLUDE(IdeSplitSources) INCLUDE(FeatureSummary) INCLUDE(EnableWarnings) include(xpflags) -if(DEFINED XP_NAMESPACE) - set(XP_OPT_INSTALL EXCLUDE_FROM_ALL) - set(nameSpace NAMESPACE ${XP_NAMESPACE}::) -endif() +set(targetsFile ${PROJECT_NAME}-targets) if(NOT DEFINED XP_INSTALL_CMAKEDIR) set(XP_INSTALL_CMAKEDIR ${CMAKE_INSTALL_DATADIR}/cmake) endif() +if(DEFINED XP_NAMESPACE) + set(XP_OPT_INSTALL FALSE) + set(nameSpace NAMESPACE ${XP_NAMESPACE}::) + xpPackageDevel(TARGETS_FILE ${targetsFile} DEPS libssh2 LIBRARIES ${XP_NAMESPACE}::git2) +else() + set(XP_OPT_INSTALL TRUE) +endif() # Build options # diff --git a/cmake/PkgBuildConfig.cmake b/cmake/PkgBuildConfig.cmake index 3ff153f26bb..1d7501e4ce3 100644 --- a/cmake/PkgBuildConfig.cmake +++ b/cmake/PkgBuildConfig.cmake @@ -72,6 +72,8 @@ function(pkg_build_config) endif() file(APPEND "${PKGCONFIG_FILE}" "Cflags: -I\${includedir} ${PKGCONFIG_CFLAGS}\n") + if(XP_OPT_INSTALL) # Install .pc file - install(FILES "${PKGCONFIG_FILE}" ${XP_OPT_INSTALL} DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + install(FILES "${PKGCONFIG_FILE}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif() endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2a61433723f..845485cec4b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -433,12 +433,11 @@ IF (MSVC_IDE) ENDIF () # Install -set(LIBGIT2_TARGETS_FILE ${PROJECT_NAME}-targets) -INSTALL(TARGETS git2 EXPORT ${LIBGIT2_TARGETS_FILE} +INSTALL(TARGETS git2 EXPORT ${targetsFile} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) INSTALL(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) INSTALL(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(EXPORT ${LIBGIT2_TARGETS_FILE} DESTINATION ${XP_INSTALL_CMAKEDIR} ${nameSpace}) +install(EXPORT ${targetsFile} DESTINATION ${XP_INSTALL_CMAKEDIR} ${nameSpace}) From 71a7484053ea18fc3a0a768e651818a4929ef5af Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Fri, 14 Nov 2025 12:47:43 -0700 Subject: [PATCH 11/12] cmake_minimum_required 3.5.1...3.31 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 44b240e6fb8..54340e3657f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ # Install: # > cmake --build . --target install -CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1) +CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1...3.31) set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES .devcontainer/cmake/xproinc.cmake) From 7aaab43a505aa3d5832d97361497d9761a8783a7 Mon Sep 17 00:00:00 2001 From: Scott M Anderson Date: Fri, 14 Nov 2025 12:49:18 -0700 Subject: [PATCH 12/12] cmake: condition to use cmake-provided FindIconv * avoid hard-coded build system paths in targetsFile * issue https://github.com/externpro/externpro/issues/224#issuecomment-3424034012 --- CMakeLists.txt | 8 ++++++++ src/CMakeLists.txt | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 54340e3657f..4fc94543d47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,9 +42,17 @@ endif() if(DEFINED XP_NAMESPACE) set(XP_OPT_INSTALL FALSE) set(nameSpace NAMESPACE ${XP_NAMESPACE}::) + set(USE_CMAKE_ICONV ON) + string(JOIN "\n" EXT1 + "if(APPLE)" + " find_package(Iconv REQUIRED)" + "endif()" + "" + ) xpPackageDevel(TARGETS_FILE ${targetsFile} DEPS libssh2 LIBRARIES ${XP_NAMESPACE}::git2) else() set(XP_OPT_INSTALL TRUE) + set(USE_CMAKE_ICONV OFF) endif() # Build options diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 845485cec4b..1f0b839c0d8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -278,12 +278,26 @@ INCLUDE(SelectGSSAPI) # Optional external dependency: iconv IF (USE_ICONV) - FIND_PACKAGE(Iconv) + IF (USE_CMAKE_ICONV) + LIST(REMOVE_ITEM CMAKE_MODULE_PATH "${libgit2_SOURCE_DIR}/cmake/") + FIND_PACKAGE(Iconv) + LIST(APPEND CMAKE_MODULE_PATH "${libgit2_SOURCE_DIR}/cmake/") + INCLUDE(FindIconv) # populate the ICONV_* variables + # Iconv_INCLUDE_DIR (cmake) and ICONV_INCLUDE_DIR (libgit2) + # are assumed to be the same below... it was true on my system + ELSE() + FIND_PACKAGE(Iconv) + ENDIF() ENDIF() IF (ICONV_FOUND) SET(GIT_USE_ICONV 1) LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR}) - LIST(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES}) + if(USE_CMAKE_ICONV AND TARGET Iconv::Iconv) + # Iconv::Iconv avoids hard-coded build system paths in targetsFile + LIST(APPEND LIBGIT2_LIBS Iconv::Iconv) + else() + LIST(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES}) + endif() LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES}) ENDIF() ADD_FEATURE_INFO(iconv GIT_USE_ICONV "iconv encoding conversion support")