|
2 | 2 |
|
3 | 3 | set -eu |
4 | 4 |
|
5 | | -if [[ -z "${CODEQL_EXTRACTOR_CSHARPIL_ROOT:-}" ]]; then |
6 | | - export CODEQL_EXTRACTOR_CSHARPIL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| 5 | +# Get the extractor root directory |
| 6 | +if [[ -z "${CODEQL_EXTRACTOR_CIL_ROOT:-}" ]]; then |
| 7 | + export CODEQL_EXTRACTOR_CIL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
7 | 8 | fi |
8 | 9 |
|
9 | 10 | # Get the trap directory from CodeQL environment |
10 | | -TRAP_DIR="${CODEQL_EXTRACTOR_CSHARPIL_TRAP_DIR}" |
11 | | -SRC_ARCHIVE="${CODEQL_EXTRACTOR_CSHARPIL_SOURCE_ARCHIVE_DIR}" |
| 11 | +TRAP_DIR="${CODEQL_EXTRACTOR_CIL_TRAP_DIR}" |
| 12 | +SRC_ARCHIVE="${CODEQL_EXTRACTOR_CIL_SOURCE_ARCHIVE_DIR}" |
12 | 13 |
|
13 | 14 | echo "C# IL Extractor: Starting extraction" |
14 | 15 | echo "Source root: $(pwd)" |
15 | 16 | echo "TRAP directory: ${TRAP_DIR}" |
| 17 | +echo "Extractor root: ${CODEQL_EXTRACTOR_CIL_ROOT}" |
16 | 18 |
|
17 | 19 | # Ensure TRAP directory exists |
18 | 20 | mkdir -p "${TRAP_DIR}" |
| 21 | +mkdir -p "${SRC_ARCHIVE}" |
| 22 | + |
| 23 | +# Determine the platform-specific extractor path |
| 24 | +case "$(uname -s)-$(uname -m)" in |
| 25 | + Darwin-arm64) |
| 26 | + PLATFORM_DIR="osx-arm64" |
| 27 | + ;; |
| 28 | + Darwin-x86_64) |
| 29 | + PLATFORM_DIR="osx-x64" |
| 30 | + ;; |
| 31 | + Linux-x86_64) |
| 32 | + PLATFORM_DIR="linux-x64" |
| 33 | + ;; |
| 34 | + *) |
| 35 | + PLATFORM_DIR="win64" |
| 36 | + ;; |
| 37 | +esac |
| 38 | + |
| 39 | +EXTRACTOR_DLL="${CODEQL_EXTRACTOR_CIL_ROOT}/tools/${PLATFORM_DIR}/Semmle.Extraction.CSharp.IL.dll" |
| 40 | + |
| 41 | +if [[ ! -f "${EXTRACTOR_DLL}" ]]; then |
| 42 | + echo "ERROR: Extractor not found at ${EXTRACTOR_DLL}" |
| 43 | + exit 1 |
| 44 | +fi |
| 45 | + |
| 46 | +# Create a temporary file list |
| 47 | +FILE_LIST=$(mktemp) |
| 48 | +trap "rm -f ${FILE_LIST}" EXIT |
19 | 49 |
|
20 | 50 | # Find all DLL and EXE files in the source root |
21 | | -EXTRACTOR_PATH="${CODEQL_EXTRACTOR_CSHARPIL_ROOT}/extractor/Semmle.Extraction.CSharp.IL/bin/Debug/net8.0/Semmle.Extraction.CSharp.IL" |
| 51 | +find . -type f \( -name "*.dll" -o -name "*.exe" \) > "${FILE_LIST}" |
22 | 52 |
|
23 | | -if [[ ! -f "${EXTRACTOR_PATH}" ]]; then |
24 | | - echo "ERROR: Extractor not found at ${EXTRACTOR_PATH}" |
25 | | - echo "Please build the extractor first with: dotnet build extractor/Semmle.Extraction.CSharp.IL" |
26 | | - exit 1 |
| 53 | +FILE_COUNT=$(wc -l < "${FILE_LIST}" | tr -d ' ') |
| 54 | +echo "Found ${FILE_COUNT} assemblies to extract" |
| 55 | + |
| 56 | +if [[ "${FILE_COUNT}" -gt 0 ]]; then |
| 57 | + # Run the extractor with the file list |
| 58 | + dotnet "${EXTRACTOR_DLL}" "${FILE_LIST}" |
27 | 59 | fi |
28 | 60 |
|
29 | | -# Extract all DLL and EXE files |
30 | | -FILE_COUNT=0 |
31 | | -find . -type f \( -name "*.dll" -o -name "*.exe" \) | while read -r assembly; do |
32 | | - echo "Extracting: ${assembly}" |
33 | | - |
34 | | - # Normalize the assembly path (remove leading ./) |
35 | | - normalized_path="${assembly#./}" |
36 | | - |
37 | | - # Create a unique trap file name based on the assembly path |
38 | | - TRAP_FILE="${TRAP_DIR}/$(echo "${assembly}" | sed 's/[^a-zA-Z0-9]/_/g').trap" |
39 | | - |
40 | | - # Run the extractor |
41 | | - "${EXTRACTOR_PATH}" "${assembly}" "${TRAP_FILE}" || echo "Warning: Failed to extract ${assembly}" |
42 | | - |
43 | | - # Copy the assembly to the source archive |
44 | | - ARCHIVE_PATH="${SRC_ARCHIVE}/${normalized_path}" |
45 | | - ARCHIVE_DIR="$(dirname "${ARCHIVE_PATH}")" |
46 | | - mkdir -p "${ARCHIVE_DIR}" |
47 | | - cp "${assembly}" "${ARCHIVE_PATH}" |
48 | | - echo "Archived: ${assembly} -> ${ARCHIVE_PATH}" |
49 | | - |
50 | | - FILE_COUNT=$((FILE_COUNT + 1)) |
51 | | -done |
52 | | - |
53 | | -echo "C# IL Extractor: Completed extraction of ${FILE_COUNT} assemblies" |
| 61 | +echo "C# IL Extractor: Completed extraction" |
0 commit comments