From c4037bb617fd13a0a91bb0f59220f775685b1009 Mon Sep 17 00:00:00 2001 From: Tobias Specht Date: Sat, 25 Jan 2025 15:23:59 +0100 Subject: [PATCH] Fix unity build (#1986) * Add test case for unity build * Fix unity file generation --- .../aisec/cpg/TranslationManager.kt | 2 +- .../aisec/cpg/frontends/cxx/CXXIncludeTest.kt | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/TranslationManager.kt b/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/TranslationManager.kt index c7543396c7d..373e3941000 100644 --- a/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/TranslationManager.kt +++ b/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/TranslationManager.kt @@ -221,7 +221,7 @@ private constructor( .trimIndent() ) } - ?: { + ?: run { writer.write( """ #include "${file.absolutePath}" diff --git a/cpg-language-cxx/src/test/kotlin/de/fraunhofer/aisec/cpg/frontends/cxx/CXXIncludeTest.kt b/cpg-language-cxx/src/test/kotlin/de/fraunhofer/aisec/cpg/frontends/cxx/CXXIncludeTest.kt index e9d329698fd..60cc9b52756 100644 --- a/cpg-language-cxx/src/test/kotlin/de/fraunhofer/aisec/cpg/frontends/cxx/CXXIncludeTest.kt +++ b/cpg-language-cxx/src/test/kotlin/de/fraunhofer/aisec/cpg/frontends/cxx/CXXIncludeTest.kt @@ -260,4 +260,47 @@ internal class CXXIncludeTest : BaseTest() { assertEquals(2, tu.methods.size) assertEquals(1, tu.methods.filterIsInstance().size) } + + @Test + @Throws(Exception::class) + fun testUnityBuild() { + val file = File("src/test/resources/include.cpp") + val tus = + analyzeWithBuilder( + TranslationConfiguration.builder() + .sourceLocations(listOf(file)) + .loadIncludes(true) + .useUnityBuild(true) + .debugParser(true) + .registerLanguage() + .failOnError(true) + ) + assertNotNull(tus) + + val tu = tus.firstOrNull() + assertNotNull(tu) + assertFalse(tu.records.isEmpty()) + } + + @Test + @Throws(Exception::class) + fun testUnityBuildWithComponent() { + val file = File("src/test/resources/include.cpp") + val tus = + analyzeWithBuilder( + TranslationConfiguration.builder() + .sourceLocations(listOf(file)) + .topLevel(file.parentFile) + .loadIncludes(true) + .useUnityBuild(true) + .debugParser(true) + .registerLanguage() + .failOnError(true) + ) + assertNotNull(tus) + + val tu = tus.firstOrNull() + assertNotNull(tu) + assertFalse(tu.records.isEmpty()) + } }