| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # Copyright 2023 Google LLC
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- require 'cocoapods'
- def usage()
- script = File.basename($0)
- STDERR.puts <<~EOF
- USAGE: #{script} <podspec> [options]
- Generates a private module map for the given podspec. The generated module
- map contains the private headers listed in the podspec's
- 'private_header_files' attribute.
- This generated module map will resemble the following template:
- framework module $(SPEC_MODULE_NAME)_Private {
- header "PrivateHeader_1.h"
- header "PrivateHeader_2.h"
- header "PrivateHeader_3.h"
- // And so on for each of the spec's private headers...
- }
- OPTIONS:
- --dry-run: Prints the generated private module map to STDOUT without
- writing it to the filesystem.
- EOF
- end
- def main(args)
- if args.length < 1 || args.length > 2
- usage()
- exit 1
- end
- STDOUT.sync = true
- begin
- spec = Pod::Spec.from_file(args[0])
- rescue => e
- STDERR.puts "#{e}"
- exit(1)
- end
- private_module_map_contents = "framework module #{spec.module_name}_Private {\n"
- private_hdrs = spec.attributes_hash['private_header_files']
- # Expand all path globs to get the complete list of private headers.
- .flat_map { |hdr_path_glob| Dir[hdr_path_glob] }
- # Add each private header to the private module map's contents.
- .each do |hdr_path|
- # Note: Only the header file's name is needed in the module map.
- # This is because the module map evaluates its headers relative to
- # the private headers directory (Foo.framework/PrivateHeaders)
- # within the CocoaPods-generated framework.
- hdr_name = File.basename(hdr_path)
- private_module_map_contents << " header \"#{hdr_name}\"\n"
- end
- private_module_map_contents << "}\n"
- if args.length == 2 && args[1] == '--dry-run'
- STDOUT.puts private_module_map_contents
- else
- # Overwrite the private module map with the generated contents.
- File.write(
- "#{spec.module_name}/Sources/#{spec.module_name}.private.modulemap",
- private_module_map_contents
- )
- end
- end
- main(ARGV)
|