From 732aaa3eb2bd5e7c2ea31151947e09ab3a7c24d1 Mon Sep 17 00:00:00 2001 From: Alex Ameen Date: Wed, 3 Dec 2025 14:22:54 -0600 Subject: [PATCH 1/2] use a perl script for mixed_language_module_map_extender --- .../mixed_language_module_map_extender/BUILD | 2 +- .../mixed_language_module_map_extender.pl | 90 +++++++++++++++++++ .../mixed_language_module_map_extender.sh | 45 ---------- 3 files changed, 91 insertions(+), 46 deletions(-) create mode 100755 tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl delete mode 100755 tools/mixed_language_module_map_extender/mixed_language_module_map_extender.sh diff --git a/tools/mixed_language_module_map_extender/BUILD b/tools/mixed_language_module_map_extender/BUILD index 4b9c6c8ad..06cd56f48 100644 --- a/tools/mixed_language_module_map_extender/BUILD +++ b/tools/mixed_language_module_map_extender/BUILD @@ -4,6 +4,6 @@ licenses(["notice"]) sh_binary( name = "mixed_language_module_map_extender", - srcs = ["mixed_language_module_map_extender.sh"], + srcs = ["mixed_language_module_map_extender.pl"], visibility = ["//visibility:public"], ) diff --git a/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl b/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl new file mode 100755 index 000000000..c7d65b255 --- /dev/null +++ b/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl @@ -0,0 +1,90 @@ +#! /usr/bin/env perl +# ============================================================================ # +# +# This script processes a C Family module map file to adjust header paths. +# +# USAGE: mixed_language_module_map_extender.pl \ +# \ +# \ +# +# +# +# ============================================================================ # + +use strict; +use warnings; +use File::Spec; + +# Check arguments +if ( @ARGV != 4 || + ( @ARGV = 1 && ( $ARGV[0] == '-h' || $ARGV[0] == "--help" ) ) + ) + { + my $msg = "USAGE: $0 " . + "\n"; + if ( @ARGV == 1 ) + { + print STDERR $msg; + exit 0; + } + else + { + die $msg; + } + } + +my ( $output, $modulemap, $module_name, $swift_generated_header ) = @ARGV; + +# Get absolute paths for directories +my $modulemap_dir = File::Spec->rel2abs( + ( File::Spec->splitpath( $modulemap ) )[1] + ); +my $output_dir = File::Spec->rel2abs( ( File::Spec->splitpath( $output ) )[1] ); + +# Open input and output files +open( my $in_fh, '<', $modulemap ) or + die "Cannot open input file '$modulemap': $!\n"; + +open( my $out_fh, '>', $output ) or + die "Cannot open output file '$output': $!\n"; + + +# Process each line of the module map +while ( my $line = <$in_fh> ) + { + # Match header declarations with optional modifiers + # ( private, textual, umbrella ) + if ( $line =~ /^(\s*(?:private\s+|textual\s+|umbrella\s+)*) + header\s+"([^"]+)"(.*)$/x + ) + { + my ( $prefix, $header_path, $suffix ) = ( $1, $2, $3 ); + + # Convert header path to absolute, then to relative from output directory + my $original_header_abs = File::Spec->rel2abs( + $header_path + , $modulemap_dir + ); + my $new_header_rel = File::Spec->abs2rel( + $original_header_abs + , $output_dir + ); + + print $out_fh "${prefix}header \"$new_header_rel\"$suffix\n"; + } + else + { + print $out_fh $line; + } + } + +# Add Swift submodule +print $out_fh "\n"; +print $out_fh "module \"$module_name\".Swift {\n"; +print $out_fh " header \"$swift_generated_header\"\n"; +print $out_fh "\n"; +print $out_fh " requires objc\n"; +print $out_fh "}\n"; + +close( $in_fh ); +close( $out_fh ); diff --git a/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.sh b/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.sh deleted file mode 100755 index a4a614871..000000000 --- a/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -set -eu - -if [ $# -ne 4 ]; then - echo "Usage: $0 " - exit 1 -fi - -readonly output="$1" -readonly modulemap="$2" -readonly module_name="$3" -readonly swift_generated_header="$4" - -relpath() { - perl -MFile::Spec -e 'print File::Spec->abs2rel($ARGV[1], $ARGV[0])' "$1" "$2" -} - -modulemap_dir=$(perl -MFile::Spec -e 'print File::Spec->rel2abs($ARGV[0])' "${modulemap%/*}") -output_dir=$(perl -MFile::Spec -e 'print File::Spec->rel2abs($ARGV[0])' "${output%/*}") - -{ - IFS= - while read -r line || [ -n "$line" ]; do - if [[ "$line" =~ ^([[:space:]]*(private[[:space:]]+|textual[[:space:]]+|umbrella[[:space:]]+)*)header[[:space:]]+\"([^\"]+)\"(.*)$ ]]; then - prefix="${BASH_REMATCH[1]}header " - header_path="${BASH_REMATCH[3]}" - suffix="${BASH_REMATCH[4]}" - - original_header_abs_path=$(perl -MFile::Spec -e 'print File::Spec->rel2abs($ARGV[0], $ARGV[1])' "$header_path" "$modulemap_dir") - new_header_rel_path=$(relpath "$output_dir" "$original_header_abs_path") - - echo "$prefix\"$new_header_rel_path\"$suffix" - else - echo "$line" - fi - done - - echo "" - echo "module \"$module_name\".Swift {" - echo " header \"$swift_generated_header\"" - echo "" - echo " requires objc" - echo "}" -} < "$modulemap" > "$output" From 46df21506e902d522db7c689ae17fb4ab74aeded Mon Sep 17 00:00:00 2001 From: Alex Ameen Date: Fri, 5 Dec 2025 09:59:15 -0600 Subject: [PATCH 2/2] fix equality checks --- .../mixed_language_module_map_extender.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl b/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl index c7d65b255..ed4b34961 100755 --- a/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl +++ b/tools/mixed_language_module_map_extender/mixed_language_module_map_extender.pl @@ -17,7 +17,7 @@ # Check arguments if ( @ARGV != 4 || - ( @ARGV = 1 && ( $ARGV[0] == '-h' || $ARGV[0] == "--help" ) ) + ( @ARGV == 1 && ( $ARGV[0] eq '-h' || $ARGV[0] eq "--help" ) ) ) { my $msg = "USAGE: $0 " .