1# Copyright (c) Meta Platforms, Inc. and affiliates.
2#
3# This source code is licensed under the MIT license found in the
4# LICENSE file in the root directory of this source tree.
5
6# Default versions of Flipper and related dependencies.
7# Update this map to bump the dependencies.
8$flipper_default_versions = {
9    'Flipper' => '0.125.0',
10    'Flipper-Boost-iOSX' => '1.76.0.1.11',
11    'Flipper-DoubleConversion' => '3.2.0.1',
12    'Flipper-Fmt' => '7.1.7',
13    'Flipper-Folly' => '2.6.10',
14    'Flipper-Glog' => '0.5.0.5',
15    'Flipper-PeerTalk' => '0.0.4',
16    'Flipper-RSocket' => '1.4.3',
17    'OpenSSL-Universal' => '1.1.1100',
18}
19
20# This function installs the `React-Core/DevSupport` subpods
21# when the dependencies are installed for a non production app.
22#
23# @parameter production: a boolean that indicates whether we are in production or not.
24# @parameter pathToReactNative: the path to the React Native installation
25def install_flipper_dependencies(pathToReactNative)
26    pod 'ABI47_0_0React-Core/DevSupport', :path => "#{pathToReactNative}/", :project_name => 'ABI47_0_0'
27end
28
29
30# This function installs all the dependencies required by flipper.
31#
32# @parameter versions: a dictionary to specify a version of a dependencies. Default versions will be used if not specified
33# @parameter configurations: an array of configurations to install the flipper dependencies. Defaults to ['Debug'].
34def use_flipper_pods(versions = {}, configurations: ['Debug'])
35    versions['Flipper'] ||= $flipper_default_versions['Flipper']
36    versions['Flipper-Boost-iOSX'] ||= $flipper_default_versions['Flipper-Boost-iOSX']
37    versions['Flipper-DoubleConversion'] ||= $flipper_default_versions['Flipper-DoubleConversion']
38    versions['Flipper-Fmt'] ||= $flipper_default_versions['Flipper-Fmt']
39    versions['Flipper-Folly'] ||= $flipper_default_versions['Flipper-Folly']
40    versions['Flipper-Glog'] ||= $flipper_default_versions['Flipper-Glog']
41    versions['Flipper-PeerTalk'] ||= $flipper_default_versions['Flipper-PeerTalk']
42    versions['Flipper-RSocket'] ||= $flipper_default_versions['Flipper-RSocket']
43    versions['OpenSSL-Universal'] ||= $flipper_default_versions['OpenSSL-Universal']
44    pod 'ABI47_0_0FlipperKit', versions['Flipper'], :configurations => configurations
45    pod 'ABI47_0_0FlipperKit/FlipperKitLayoutPlugin', versions['Flipper'], :configurations => configurations
46    pod 'ABI47_0_0FlipperKit/SKIOSNetworkPlugin', versions['Flipper'], :configurations => configurations
47    pod 'ABI47_0_0FlipperKit/FlipperKitUserDefaultsPlugin', versions['Flipper'], :configurations => configurations
48    pod 'ABI47_0_0FlipperKit/FlipperKitReactPlugin', versions['Flipper'], :configurations => configurations
49    # List all transitive dependencies for FlipperKit pods
50    # to avoid them being linked in Release builds
51    pod 'ABI47_0_0Flipper', versions['Flipper'], :configurations => configurations
52    pod 'ABI47_0_0Flipper-Boost-iOSX', versions['Flipper-Boost-iOSX'], :configurations => configurations
53    pod 'ABI47_0_0Flipper-DoubleConversion', versions['Flipper-DoubleConversion'], :configurations => configurations
54    pod 'ABI47_0_0Flipper-Fmt', versions['Flipper-Fmt'], :configurations => configurations
55    pod 'ABI47_0_0Flipper-Folly', versions['Flipper-Folly'], :configurations => configurations
56    pod 'ABI47_0_0Flipper-Glog', versions['Flipper-Glog'], :configurations => configurations
57    pod 'ABI47_0_0Flipper-PeerTalk', versions['Flipper-PeerTalk'], :configurations => configurations
58    pod 'ABI47_0_0Flipper-RSocket', versions['Flipper-RSocket'], :configurations => configurations
59    pod 'ABI47_0_0FlipperKit/Core', versions['Flipper'], :configurations => configurations
60    pod 'ABI47_0_0FlipperKit/CppBridge', versions['Flipper'], :configurations => configurations
61    pod 'ABI47_0_0FlipperKit/FBCxxFollyDynamicConvert', versions['Flipper'], :configurations => configurations
62    pod 'ABI47_0_0FlipperKit/FBDefines', versions['Flipper'], :configurations => configurations
63    pod 'ABI47_0_0FlipperKit/FKPortForwarding', versions['Flipper'], :configurations => configurations
64    pod 'ABI47_0_0FlipperKit/FlipperKitHighlightOverlay', versions['Flipper'], :configurations => configurations
65    pod 'ABI47_0_0FlipperKit/FlipperKitLayoutTextSearchable', versions['Flipper'], :configurations => configurations
66    pod 'ABI47_0_0FlipperKit/FlipperKitNetworkPlugin', versions['Flipper'], :configurations => configurations
67    pod 'ABI47_0_0OpenSSL-Universal', versions['OpenSSL-Universal'], :configurations => configurations
68end
69
70# Applies some changes to some pods of the project:
71# * it sets the Swift version for Yoga kit to 4.1
72# * it sets the sonar-kit flag to React-Core pod
73#
74# @parameter installer: the installer object used to install the pods.
75def flipper_post_install(installer)
76    installer.pods_project.targets.each do |target|
77        if target.name == 'YogaKit'
78            target.build_configurations.each do |config|
79                config.build_settings['SWIFT_VERSION'] = '4.1'
80            end
81        end
82
83        # Enable flipper for React-Core Debug configuration
84        if target.name == 'React-Core'
85            target.build_configurations.each do |config|
86                if config.name == 'Debug'
87                    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = ['$(inherited)', 'FB_SONARKIT_ENABLED=1']
88                end
89            end
90        end
91    end
92end
93
94class FlipperConfiguration
95    attr_reader :flipper_enabled
96    attr_reader :configurations
97    attr_reader :versions
98
99    def initialize(flipper_enabled, configurations, versions)
100        @flipper_enabled = flipper_enabled
101        @configurations = configurations
102        @versions = versions
103    end
104
105    def self.enabled(configurations = ["Debug"], versions = {})
106        FlipperConfiguration.new(true, configurations, versions)
107    end
108
109    def self.disabled
110        FlipperConfiguration.new(false, [], {})
111    end
112
113    def == (other)
114        return @flipper_enabled == other.flipper_enabled &&
115            @configurations == other.configurations &&
116            @versions == other.versions
117    end
118end
119