|
4 | 4 | # LICENSE file in the root directory of this source tree. |
5 | 5 |
|
6 | 6 | require 'pathname' |
| 7 | +require_relative './react_native_pods_utils/script_phases.rb' |
7 | 8 |
|
8 | 9 | $CODEGEN_OUTPUT_DIR = 'build/generated/ios' |
9 | 10 | $CODEGEN_COMPONENT_DIR = 'react/renderer/components' |
@@ -392,96 +393,12 @@ def get_react_codegen_script_phases(options={}) |
392 | 393 | 'input_files' => input_files, |
393 | 394 | 'show_env_vars_in_log': true, |
394 | 395 | 'output_files': ["${DERIVED_FILE_DIR}/react-codegen.log"], |
395 | | - 'script': %{set -o pipefail |
396 | | -set -e |
397 | | -
|
398 | | -pushd "${PODS_ROOT}/../" > /dev/null |
399 | | -POD_INSTALLATION_ROOT=$(pwd) |
400 | | -popd >/dev/null |
401 | | -RN_DIR=$(cd "$POD_INSTALLATION_ROOT/#{react_native_path}" && pwd) |
402 | | -
|
403 | | -GENERATED_SRCS_DIR="$\{DERIVED_FILE_DIR\}/generated/source/codegen-discovery" |
404 | | -TEMP_OUTPUT_DIR="$GENERATED_SRCS_DIR/out" |
405 | | -
|
406 | | -APP_PATH="$POD_INSTALLATION_ROOT/#{$relative_app_root}" |
407 | | -CONFIG_FILE_DIR="#{relative_config_file_dir ? "$POD_INSTALLATION_ROOT/#{relative_config_file_dir}" : ''}" |
408 | | -OUTPUT_DIR="$POD_INSTALLATION_ROOT" |
409 | | -FABRIC_ENABLED="#{fabric_enabled}" |
410 | | -
|
411 | | -CODEGEN_REPO_PATH="$RN_DIR/packages/react-native-codegen" |
412 | | -CODEGEN_NPM_PATH="$RN_DIR/../react-native-codegen" |
413 | | -CODEGEN_CLI_PATH="" |
414 | | -
|
415 | | -# Determine path to react-native-codegen |
416 | | -if [ -d "$CODEGEN_REPO_PATH" ]; then |
417 | | - CODEGEN_CLI_PATH=$(cd "$CODEGEN_REPO_PATH" && pwd) |
418 | | -elif [ -d "$CODEGEN_NPM_PATH" ]; then |
419 | | - CODEGEN_CLI_PATH=$(cd "$CODEGEN_NPM_PATH" && pwd) |
420 | | -else |
421 | | - echo "error: Could not determine react-native-codegen location. Try running 'yarn install' or 'npm install' in your project root." >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
422 | | - exit 1 |
423 | | -fi |
424 | | -
|
425 | | -find_node () { |
426 | | - source "$RN_DIR/scripts/find-node.sh" |
427 | | -
|
428 | | - NODE_BINARY="${NODE_BINARY:-$(command -v node || true)}" |
429 | | - if [ -z "$NODE_BINARY" ]; then |
430 | | - echo "error: Could not find node. Make sure it is in bash PATH or set the NODE_BINARY environment variable." >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
431 | | - exit 1 |
432 | | - fi |
433 | | -} |
434 | | -
|
435 | | -setup_dirs () { |
436 | | - set +e |
437 | | - rm -rf "$GENERATED_SRCS_DIR" |
438 | | - set -e |
439 | | -
|
440 | | - mkdir -p "$GENERATED_SRCS_DIR" "$TEMP_OUTPUT_DIR" |
441 | | -
|
442 | | - # Clear output files |
443 | | - > "${SCRIPT_OUTPUT_FILE_0}" |
444 | | -} |
445 | | -
|
446 | | -describe () { |
447 | | - printf "\\n\\n>>>>> %s\\n\\n\\n" "$1" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
448 | | -} |
449 | | -
|
450 | | -buildCodegenCLI () { |
451 | | - if [ ! -d "$CODEGEN_CLI_PATH/lib" ]; then |
452 | | - describe "Building react-native-codegen package" |
453 | | - bash "$CODEGEN_CLI_PATH/scripts/oss/build.sh" |
454 | | - fi |
455 | | -} |
456 | | -
|
457 | | -generateArtifacts () { |
458 | | - describe "Generating codegen artifacts" |
459 | | - pushd "$RN_DIR" >/dev/null || exit 1 |
460 | | -CONFIG_FILE_DIR="$POD_INSTALLATION_ROOT/#{$relative_config_file_dir}" |
461 | | - "$NODE_BINARY" "scripts/generate-artifacts.js" --path "$APP_PATH" --outputPath "$OUTPUT_DIR" --fabricEnabled "$FABRIC_ENABLED" --configFileDir "$CONFIG_FILE_DIR" |
462 | | - popd >/dev/null || exit 1 |
463 | | -} |
464 | | -
|
465 | | -moveOutputs () { |
466 | | - mkdir -p "$OUTPUT_DIR" |
467 | | -
|
468 | | - # Copy all output to output_dir |
469 | | - cp -R "$TEMP_OUTPUT_DIR/" "$OUTPUT_DIR" || exit 1 |
470 | | - echo "Output has been written to $OUTPUT_DIR:" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
471 | | - ls -1 "$OUTPUT_DIR" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
472 | | -} |
473 | | -
|
474 | | -main () { |
475 | | - setup_dirs |
476 | | - find_node |
477 | | - buildCodegenCLI |
478 | | - generateArtifacts |
479 | | - moveOutputs |
480 | | -} |
481 | | -
|
482 | | -main "$@" |
483 | | -echo 'Done.' >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
484 | | - }, |
| 396 | + 'script': get_script_phases_with_codegen_discovery( |
| 397 | + react_native_path: react_native_path, |
| 398 | + relative_app_root: relative_app_root, |
| 399 | + relative_config_file_dir: relative_config_file_dir, |
| 400 | + fabric_enabled: fabric_enabled |
| 401 | + ), |
485 | 402 | } |
486 | 403 |
|
487 | 404 | end |
@@ -566,7 +483,7 @@ def use_react_native_codegen!(spec, options={}) |
566 | 483 | # TODO: Once the new codegen approach is ready for use, we should output a warning here to let folks know to migrate. |
567 | 484 |
|
568 | 485 | # The prefix to react-native |
569 | | - prefix = options[:react_native_path] ||= "../.." |
| 486 | + react_native_path = options[:react_native_path] ||= "../.." |
570 | 487 |
|
571 | 488 | # Library name (e.g. FBReactNativeSpec) |
572 | 489 | library_name = options[:library_name] ||= "#{spec.name.gsub('_','-').split('-').collect(&:capitalize).join}Spec" |
@@ -638,124 +555,17 @@ def use_react_native_codegen!(spec, options={}) |
638 | 555 | :input_files => input_files, # This also needs to be relative to Xcode |
639 | 556 | :output_files => ["${DERIVED_FILE_DIR}/codegen-#{library_name}.log"].concat(generated_files.map { |filename| " ${PODS_TARGET_SRCROOT}/#{filename}"} ), |
640 | 557 | # The final generated files will be created when this script is invoked at Xcode build time. |
641 | | - :script => %{set -o pipefail |
642 | | -set -e |
643 | | -
|
644 | | -pushd "${PODS_ROOT}/../" > /dev/null |
645 | | -POD_INSTALLATION_ROOT=$(pwd) |
646 | | -popd >/dev/null |
647 | | -RN_DIR=$(cd "$\{PODS_TARGET_SRCROOT\}/#{prefix}" && pwd) |
648 | | -
|
649 | | -GENERATED_SRCS_DIR="$\{DERIVED_FILE_DIR\}/generated/source/codegen" |
650 | | -GENERATED_SCHEMA_FILE="$GENERATED_SRCS_DIR/schema.json" |
651 | | -TEMP_OUTPUT_DIR="$GENERATED_SRCS_DIR/out" |
652 | | -
|
653 | | -LIBRARY_NAME="#{library_name}" |
654 | | -OUTPUT_DIR="$POD_INSTALLATION_ROOT/#{$CODEGEN_OUTPUT_DIR}" |
655 | | -
|
656 | | -CODEGEN_REPO_PATH="$RN_DIR/packages/react-native-codegen" |
657 | | -CODEGEN_NPM_PATH="$RN_DIR/../react-native-codegen" |
658 | | -CODEGEN_CLI_PATH="" |
659 | | -
|
660 | | -LIBRARY_TYPE="#{library_type ? library_type : 'all'}" |
661 | | -
|
662 | | -# Determine path to react-native-codegen |
663 | | -if [ -d "$CODEGEN_REPO_PATH" ]; then |
664 | | - CODEGEN_CLI_PATH=$(cd "$CODEGEN_REPO_PATH" && pwd) |
665 | | -elif [ -d "$CODEGEN_NPM_PATH" ]; then |
666 | | - CODEGEN_CLI_PATH=$(cd "$CODEGEN_NPM_PATH" && pwd) |
667 | | -else |
668 | | - echo "error: Could not determine react-native-codegen location. Try running 'yarn install' or 'npm install' in your project root." >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
669 | | - exit 1 |
670 | | -fi |
671 | | -
|
672 | | -find_node () { |
673 | | - source "$RN_DIR/scripts/find-node.sh" |
674 | | -
|
675 | | - NODE_BINARY="${NODE_BINARY:-$(command -v node || true)}" |
676 | | - if [ -z "$NODE_BINARY" ]; then |
677 | | - echo "error: Could not find node. Make sure it is in bash PATH or set the NODE_BINARY environment variable." >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
678 | | - exit 1 |
679 | | - fi |
680 | | -} |
681 | | -
|
682 | | -setup_dirs () { |
683 | | - set +e |
684 | | - rm -rf "$GENERATED_SRCS_DIR" |
685 | | - set -e |
686 | | -
|
687 | | - mkdir -p "$GENERATED_SRCS_DIR" "$TEMP_OUTPUT_DIR" |
688 | | -
|
689 | | - # Clear output files |
690 | | - > "${SCRIPT_OUTPUT_FILE_0}" |
691 | | -} |
692 | | -
|
693 | | -describe () { |
694 | | - printf "\\n\\n>>>>> %s\\n\\n\\n" "$1" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
695 | | -} |
696 | | -
|
697 | | -buildCodegenCLI () { |
698 | | - if [ ! -d "$CODEGEN_CLI_PATH/lib" ]; then |
699 | | - describe "Building react-native-codegen package" |
700 | | - bash "$CODEGEN_CLI_PATH/scripts/oss/build.sh" |
701 | | - fi |
702 | | -} |
703 | | -
|
704 | | -generateCodegenSchemaFromJavaScript () { |
705 | | - describe "Generating codegen schema from JavaScript" |
706 | | -
|
707 | | - SRCS_PATTERN="#{js_srcs_pattern}" |
708 | | - SRCS_DIR="#{js_srcs_dir}" |
709 | | - if [ $SRCS_PATTERN ]; then |
710 | | - JS_SRCS=$(find "$\{PODS_TARGET_SRCROOT\}"/$SRCS_DIR -type f -name "$SRCS_PATTERN" -print0 | xargs -0) |
711 | | - echo "#{file_list}" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
712 | | - else |
713 | | - JS_SRCS="$\{PODS_TARGET_SRCROOT\}/$SRCS_DIR" |
714 | | - echo "#{js_srcs_dir}" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
715 | | - fi |
716 | | -
|
717 | | - "$NODE_BINARY" "$CODEGEN_CLI_PATH/lib/cli/combine/combine-js-to-schema-cli.js" "$GENERATED_SCHEMA_FILE" $JS_SRCS |
718 | | -} |
719 | | -
|
720 | | -runSpecCodegen () { |
721 | | - "$NODE_BINARY" "scripts/generate-specs-cli.js" --platform ios --schemaPath "$GENERATED_SCHEMA_FILE" --outputDir "$1" --libraryName "$LIBRARY_NAME" --libraryType "$2" |
722 | | -} |
723 | | -
|
724 | | -generateCodegenArtifactsFromSchema () { |
725 | | - describe "Generating codegen artifacts from schema" |
726 | | - pushd "$RN_DIR" >/dev/null || exit 1 |
727 | | - if [ "$LIBRARY_TYPE" = "all" ]; then |
728 | | - runSpecCodegen "$TEMP_OUTPUT_DIR/#{$CODEGEN_MODULE_DIR}/#{library_name}" "modules" |
729 | | - runSpecCodegen "$TEMP_OUTPUT_DIR/#{$CODEGEN_COMPONENT_DIR}/#{library_name}" "components" |
730 | | - elif [ "$LIBRARY_TYPE" = "components" ]; then |
731 | | - runSpecCodegen "$TEMP_OUTPUT_DIR/#{$CODEGEN_COMPONENT_DIR}/#{library_name}" "$LIBRARY_TYPE" |
732 | | - elif [ "$LIBRARY_TYPE" = "modules" ]; then |
733 | | - runSpecCodegen "$TEMP_OUTPUT_DIR/#{$CODEGEN_MODULE_DIR}/#{library_name}" "$LIBRARY_TYPE" |
734 | | - fi |
735 | | - popd >/dev/null || exit 1 |
736 | | -} |
737 | | -
|
738 | | -moveOutputs () { |
739 | | - mkdir -p "$OUTPUT_DIR" |
740 | | -
|
741 | | - # Copy all output to output_dir |
742 | | - cp -R "$TEMP_OUTPUT_DIR/" "$OUTPUT_DIR" || exit 1 |
743 | | - echo "$LIBRARY_NAME output has been written to $OUTPUT_DIR:" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
744 | | - ls -1 "$OUTPUT_DIR" >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
745 | | -} |
746 | | -
|
747 | | -main () { |
748 | | - setup_dirs |
749 | | - find_node |
750 | | - buildCodegenCLI |
751 | | - generateCodegenSchemaFromJavaScript |
752 | | - generateCodegenArtifactsFromSchema |
753 | | - moveOutputs |
754 | | -} |
755 | | -
|
756 | | -main "$@" |
757 | | -echo 'Done.' >> "${SCRIPT_OUTPUT_FILE_0}" 2>&1 |
758 | | - }, |
| 558 | + :script => get_script_phases_no_codegen_discovery( |
| 559 | + react_native_path: react_native_path, |
| 560 | + codegen_output_dir: $CODEGEN_OUTPUT_DIR, |
| 561 | + codegen_module_dir: $CODEGEN_MODULE_DIR, |
| 562 | + codegen_component_dir: $CODEGEN_COMPONENT_DIR, |
| 563 | + library_name: library_name, |
| 564 | + library_type: library_type, |
| 565 | + js_srcs_pattern: js_srcs_pattern, |
| 566 | + js_srcs_dir: js_srcs_dir, |
| 567 | + file_list: file_list |
| 568 | + ), |
759 | 569 | :execution_position => :before_compile, |
760 | 570 | :show_env_vars_in_log => true |
761 | 571 | } |
|
0 commit comments