#!/usr/bin/env bash # # Build actions used in the Makefile. # # Usage: # ./actions.sh set -o nounset set -o pipefail set -o errexit source build/common.sh write-release-date() { mkdir -p _build # Makefile makes this, but scripts/release.sh needs it too # Write a readable, sortable date that is independent of time zone. date --utc --rfc-3339 seconds > _build/release-date.txt } main-name() { local python_main=${1:-hello} local ovm_bundle_prefix=${2:-hello.ovm} cat < $dir/pyc-version.txt # Put it at the root, like release-date and oil-version.txt. echo $dir/pyc-version.txt pyc-version.txt } # Make .d file make-dotd() { local app_name=${1:-hello} local app_deps_to_compile=${2:-_tmp/hello/app-deps-to-compile.txt} # TODO: For each module, look it up in the manifest. # I guess make a Python file. echo "# TODO $app_deps_to_compile" # The dependencies we want. # X to prevent screwing things up. echo "X_build/$app_name/ovm:" echo "X_build/$app_name/ovm-dbg:" echo "X_build/$app_name/ovm-cov:" } # # C Code generation. The three functions below are adapted from # Modules/makesetup. # extdecls() { for mod in "$@"; do test "$mod" = readline && echo "#ifdef HAVE_READLINE" echo "extern void init$mod(void);" test "$mod" = readline && echo "#endif" done return 0 # because test can fail } initbits() { for mod in "$@"; do test "$mod" = readline && echo "#ifdef HAVE_READLINE" echo " {\"$mod\", init$mod}," test "$mod" = readline && echo "#endif" done return 0 # because test can fail } # Ported from sed to awk. Awk is MUCH nicer (no $NL ugliness, -v flag, etc.) gen-module-init() { local extdecls extdecls=$(extdecls "$@") local initbits initbits=$(initbits "$@") local template=$PY27/Modules/config.c.in awk -v template=$template -v extdecls="$extdecls" -v initbits="$initbits" ' BEGIN { print "/* Generated automatically from " template " */" } /MARKER 1/ { print extdecls next } /MARKER 2/ { print initbits next } { print $0 } ' $template } # # C Modules # join-modules() { local static=${1:-static-c-modules.txt} local discovered=${2:-_build/oil/all-deps-c.txt} # Filter out comments, print the first line. # # TODO: I don't want to depend on egrep and GNU flags on the target sytems? # Ship this file I guess. egrep --no-filename --only-matching '^[a-zA-Z0-9_\.]+' $static $discovered \ | sort | uniq } # # Misc # # To test building stdlib. clean-pyc() { # skip _chroot, _tmp, etc. But delete __init__.pyc find . \( -type d -a -name '_*' -a -prune \) -o -name '*.pyc' -a -print | xargs --no-run-if-empty -- rm --verbose } # NOTE: Not deleting _devbuild, including cpython-full. Maybe we should, or # we should put it in a different directory? clean-repo() { clean-source-tarball-build rm -r -f -v _build _release rm -f -v _bin/hello.* _bin/opy.* clean-pyc } # 'make clean'. # NOTE: # - There are no object files written now. # - We're not cleaning _build/detect-config.* ? clean-source-tarball-build() { rm -f -v _bin/oil.* rm -f -v _build/oil/ovm _build/oil/ovm-dbg } "$@"