diff --git a/.github/actions/setup/directories/action.yml b/.github/actions/setup/directories/action.yml index bb1c92bd735..ec9c44f8b45 100644 --- a/.github/actions/setup/directories/action.yml +++ b/.github/actions/setup/directories/action.yml @@ -158,22 +158,9 @@ runs: working-directory: ${{ inputs.srcdir }} run: | ruby tool/missing-baseruby.bat --verbose - touch config.status .rbconfig.time - for mk in Makefile GNUmakefile; do - sed -f tool/prereq.status template/$mk.in > $mk - done - make up + bash tool/gen-sources.bash up echo RUBY_DUMP_AST=true >> "$GITHUB_ENV" - # Cleanup, runs even on failure - - if: always() && inputs.makeup - shell: bash - working-directory: ${{ inputs.srcdir }} - run: | - rm -f config.status .rbconfig.time \ - Makefile GNUmakefile uncommon.mk enc.mk noarch-fake.rb - rm -f prism/.time prism/util/.time - - if: steps.which.outputs.sudo shell: bash run: | diff --git a/tool/gen-sources.bash b/tool/gen-sources.bash new file mode 100644 index 00000000000..bf88c1dbfd7 --- /dev/null +++ b/tool/gen-sources.bash @@ -0,0 +1,51 @@ +#!/bin/bash +set -e + +nop= +dump_ast= + +opt= optarg= +while getopts cd:n-: opt; do + optarg="$OPTARG" + if [[ "$opt" = - ]]; then + opt="-${optarg%%=*}" + if [[ "$optarg" = *=* ]]; then optarg="${optarg#*=}"; + elif optarg="${!OPTIND}"; [[ "${optarg}" = -* ]]; then optarg= + else shift; fi + fi + + case "-$opt" in + -c|--clean) nop=:;; + -n|--dry-run) nop=echo;; + -d|--dump[-_]ast) dump_ast="$optarg" RUBY_DUMP_AST=;; + --) break;; + -*) echo "${0##*/}: Unknown option $1" 1>&2; exit 1;; + esac +done +shift $((OPTIND-1)) + +if tooldir="${0%/*}"; [ "$tooldir" = "$0" ]; then + tooldir=. srcdir=.. +elif srcdir="${tooldir%/*}"; [ "$srcdir" = "$tooldir" ]; then + srcdir=. +fi +template="${srcdir}/template" + +[ "$nop" = echo ] || trap 'rm -fr "${clean[@]}"' 0 2 + +for t in config.status .rbconfig.time Makefile GNUmakefile; do + [ -z "${nop}" -a -e "$t" ] && echo "exist: $t" && exit 1 +done + +${nop} touch config.status .rbconfig.time +clean=(config.status .rbconfig.time) +for mk in Makefile GNUmakefile; do + [ ${nop} ] || sed -f "$tooldir/prereq.status" "$template/$mk.in" > $mk + clean+=("$mk") +done +clean+=(prism/.time prism/util/.time build-tool) +${nop} make "HAVE_BASERUBY=yes" "BASERUBY=${RUBY-ruby}" \ + ${RUBY_DUMP_AST:+"DUMP_AST=$RUBY_DUMP_AST" "DUMP_AST_TARGET=no"} \ + "${@-prereq}" +[ -z "$dump_ast" ] || ${nop} cp build-tool/dump_ast "$dump_ast" +${nop} rm -fr "${clean[@]}" diff --git a/tool/prereq.status b/tool/prereq.status index a9d8f12b0aa..8edd7a3e112 100644 --- a/tool/prereq.status +++ b/tool/prereq.status @@ -16,6 +16,7 @@ s,@CXXFLAGS@,,g s,@DLDFLAGS@,,g s,@DTRACE_EXT@,dmyh,g s,@EXEEXT@,,g +s,@GIT@,git,g s,@HAVE_BASERUBY@,yes,g s,@IFCHANGE@,tool/ifchange,g s,@LDFLAGS@,,g