diff --git a/CMakeLists.txt b/CMakeLists.txt index cc973a1..482df3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,13 @@ message("Using Swift_CONFIG: ${Clang_CONFIG}") add_executable(codeql-swift-artifacts empty.cpp) target_link_libraries(codeql-swift-artifacts PRIVATE LLVMSupport swiftFrontendTool swiftCompilerModules) +set (CODEQL_SWIFT_VERSION_MAJOR ${SWIFT_VERSION_MAJOR}) +set (CODEQL_SWIFT_VERSION_MINOR ${SWIFT_VERSION_MINOR}) +set (CODEQL_SWIFT_VERSION_PATCH ${SWIFT_VERSION_PATCH}) + +configure_file(${CMAKE_SOURCE_DIR}/CodeQLSwiftVersion.h.in + ${SWIFT_BINARY_DIR}/include/swift/CodeQLSwiftVersion.h) + if(APPLE) execute_process( COMMAND xcrun -find swiftc diff --git a/CodeQLSwiftVersion.h.in b/CodeQLSwiftVersion.h.in new file mode 100644 index 0000000..535107a --- /dev/null +++ b/CodeQLSwiftVersion.h.in @@ -0,0 +1,9 @@ +#ifndef CODEQL_SWIFT_VERSION_H +#define CODEQL_SWIFT_VERSION_H + +#cmakedefine CODEQL_SWIFT_VERSION_MAJOR @CODEQL_SWIFT_VERSION_MAJOR@ +#cmakedefine CODEQL_SWIFT_VERSION_MINOR @CODEQL_SWIFT_VERSION_MINOR@ +#cmakedefine CODEQL_SWIFT_VERSION_PATCH @CODEQL_SWIFT_VERSION_PATCH@ + +#endif // CODEQL_SWIFT_VERSION_H + diff --git a/patches/swift/expose-swift-version.patch b/patches/swift/expose-swift-version.patch new file mode 100644 index 0000000..928654e --- /dev/null +++ b/patches/swift/expose-swift-version.patch @@ -0,0 +1,15 @@ +diff --git a/cmake/modules/SwiftConfig.cmake.in b/cmake/modules/SwiftConfig.cmake.in +index 262ed49d8fc..e13988f1513 100644 +--- a/cmake/modules/SwiftConfig.cmake.in ++++ b/cmake/modules/SwiftConfig.cmake.in +@@ -2,6 +2,10 @@ + + @SWIFT_CONFIG_CODE@ + ++set(SWIFT_VERSION_MAJOR @SWIFT_VERSION_MAJOR@) ++set(SWIFT_VERSION_MINOR @SWIFT_VERSION_MINOR@) ++set(SWIFT_VERSION_PATCH @SWIFT_VERSION_PATCHLEVEL@) ++ + set(SWIFT_VERSION @SWIFT_VERSION@) + set(SWIFT_MAIN_SRC_DIR @SWIFT_SOURCE_DIR@) + diff --git a/pkg_swift_llvm.py b/pkg_swift_llvm.py index ba6ebde..18543bc 100755 --- a/pkg_swift_llvm.py +++ b/pkg_swift_llvm.py @@ -61,6 +61,7 @@ def configure_dummy_project(tmp, prefixes): print(script_dir) shutil.copy(script_dir / "CMakeLists.txt", tmp / "CMakeLists.txt") shutil.copy(script_dir / "empty.cpp", tmp / "empty.cpp") + shutil.copy(script_dir / "CodeQLSwiftVersion.h.in", tmp / "CodeQLSwiftVersion.h.in") tgt = tmp / "build" tgt.mkdir() prefixes = ';'.join(str(p) for p in prefixes)