15fd6d3161cc7407718c7e230f94db421543273b8Kenny Root#!/bin/bash 25fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 35fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Copyright (C) 2009 The Android Open Source Project 45fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 55fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Licensed under the Apache License, Version 2.0 (the "License"); 65fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# you may not use this file except in compliance with the License. 75fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# You may obtain a copy of the License at 85fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 95fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# http://www.apache.org/licenses/LICENSE-2.0 105fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 115fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Unless required by applicable law or agreed to in writing, software 125fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# distributed under the License is distributed on an "AS IS" BASIS, 135fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# See the License for the specific language governing permissions and 155fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# limitations under the License. 165fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 175fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 185fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 195fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# This script imports new versions of scrypt (http://www.tarsnap.com/scrypt/) into the 205fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Android source tree. To run, (1) fetch the appropriate tarball from the scrypt repository, 215fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# (2) check the gpg/pgp signature, and then (3) run: 225fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# ./import_scrypt.sh import scrypt-*.tar.gz 235fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 245fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# IMPORTANT: See README.android for additional details. 255fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 265fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# turn on exit on error as well as a warning when it happens 275fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootset -e 285fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootset -x 295fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottrap "echo WARNING: Exiting on non-zero subprocess exit code" ERR; 305fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 315fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Ensure consistent sorting order / tool output. 325fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootexport LANG=C 335fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootexport LC_ALL=C 345fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 355fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootexport DIRNAME=$(dirname $0) 365fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 375fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction die() { 385fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r message=$1 395fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 405fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo $message 415fd6d3161cc7407718c7e230f94db421543273b8Kenny Root exit 1 425fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 435fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 445fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction usage() { 455fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r message=$1 465fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 475fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ ! "$message" = "" ]; then 485fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo $message 495fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 505fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Usage:" 515fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo " ./import_scrypt.sh import </path/to/scrypt-*.tar.gz>" 525fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo " ./import_scrypt.sh regenerate <patch/*.patch>" 535fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo " ./import_scrypt.sh generate <patch/*.patch> </path/to/scrypt-*.tar.gz>" 545fd6d3161cc7407718c7e230f94db421543273b8Kenny Root exit 1 555fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 565fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 575fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction main() { 585fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ ! -d patches ]; then 595fd6d3161cc7407718c7e230f94db421543273b8Kenny Root die "scrypt patch directory patches/ not found" 605fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 615fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 625fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ ! -f scrypt.version ]; then 635fd6d3161cc7407718c7e230f94db421543273b8Kenny Root die "scrypt.version not found" 645fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 655fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 665fd6d3161cc7407718c7e230f94db421543273b8Kenny Root source $DIRNAME/scrypt.version 675fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ "$SCRYPT_VERSION" == "" ]; then 685fd6d3161cc7407718c7e230f94db421543273b8Kenny Root die "Invalid scrypt.version; see README.android for more information" 695fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 705fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 715fd6d3161cc7407718c7e230f94db421543273b8Kenny Root SCRYPT_DIR=scrypt-$SCRYPT_VERSION 725fd6d3161cc7407718c7e230f94db421543273b8Kenny Root SCRYPT_DIR_ORIG=$SCRYPT_DIR.orig 735fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 745fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ ! -f scrypt.config ]; then 755fd6d3161cc7407718c7e230f94db421543273b8Kenny Root die "scrypt.config not found" 765fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 775fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 785fd6d3161cc7407718c7e230f94db421543273b8Kenny Root source $DIRNAME/scrypt.config 795fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ "$CONFIGURE_ARGS" == "" -o "$UNNEEDED_SOURCES" == "" -o "$NEEDED_SOURCES" == "" ]; then 805fd6d3161cc7407718c7e230f94db421543273b8Kenny Root die "Invalid scrypt.config; see README.android for more information" 815fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 825fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 835fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r command=$1 845fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift || usage "No command specified. Try import, regenerate, or generate." 855fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ "$command" = "import" ]; then 865fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r tar=$1 875fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift || usage "No tar file specified." 885fd6d3161cc7407718c7e230f94db421543273b8Kenny Root import $tar 895fd6d3161cc7407718c7e230f94db421543273b8Kenny Root elif [ "$command" = "regenerate" ]; then 905fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r patch=$1 915fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift || usage "No patch file specified." 925fd6d3161cc7407718c7e230f94db421543273b8Kenny Root [ -d $SCRYPT_DIR ] || usage "$SCRYPT_DIR not found, did you mean to use generate?" 935fd6d3161cc7407718c7e230f94db421543273b8Kenny Root [ -d $SCRYPT_DIR_ORIG_ORIG ] || usage "$SCRYPT_DIR_ORIG not found, did you mean to use generate?" 945fd6d3161cc7407718c7e230f94db421543273b8Kenny Root regenerate $patch 955fd6d3161cc7407718c7e230f94db421543273b8Kenny Root elif [ "$command" = "generate" ]; then 965fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r patch=$1 975fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift || usage "No patch file specified." 985fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r tar=$1 995fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift || usage "No tar file specified." 1005fd6d3161cc7407718c7e230f94db421543273b8Kenny Root generate $patch $tar 1015fd6d3161cc7407718c7e230f94db421543273b8Kenny Root else 1025fd6d3161cc7407718c7e230f94db421543273b8Kenny Root usage "Unknown command specified $command. Try import, regenerate, or generate." 1035fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 1045fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1055fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1065fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Compute the name of an assembly source file generated by one of the 1075fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# gen_asm_xxxx() functions below. The logic is the following: 1085fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# - if "$2" is not empty, output it directly 1095fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# - otherwise, change the file extension of $1 from .pl to .S and output 1105fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# it. 1115fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Usage: default_asm_file "$1" "$2" 1125fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# or default_asm_file "$@" 1135fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 1145fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: generator path (perl script) 1155fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $2: optional output file name. 1165fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction default_asm_file () { 1175fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ "$2" ]; then 1185fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$2" 1195fd6d3161cc7407718c7e230f94db421543273b8Kenny Root else 1205fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "${1%%.pl}.S" 1215fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 1225fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1235fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1245fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Generate an ARM assembly file. 1255fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: generator (perl script) 1265fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $2: [optional] output file name 1275fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction gen_asm_arm () { 1285fd6d3161cc7407718c7e230f94db421543273b8Kenny Root local OUT 1295fd6d3161cc7407718c7e230f94db421543273b8Kenny Root OUT=$(default_asm_file "$@") 1305fd6d3161cc7407718c7e230f94db421543273b8Kenny Root perl "$1" > "$OUT" 1315fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1325fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1335fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction gen_asm_mips () { 1345fd6d3161cc7407718c7e230f94db421543273b8Kenny Root local OUT 1355fd6d3161cc7407718c7e230f94db421543273b8Kenny Root OUT=$(default_asm_file "$@") 1365fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # The perl scripts expect to run the target compiler as $CC to determine 1375fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # the endianess of the target. Setting CC to true is a hack that forces the scripts 1385fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # to generate little endian output 1395fd6d3161cc7407718c7e230f94db421543273b8Kenny Root CC=true perl "$1" o32 > "$OUT" 1405fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1415fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1425fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction gen_asm_x86 () { 1435fd6d3161cc7407718c7e230f94db421543273b8Kenny Root local OUT 1445fd6d3161cc7407718c7e230f94db421543273b8Kenny Root OUT=$(default_asm_file "$@") 1455fd6d3161cc7407718c7e230f94db421543273b8Kenny Root perl "$1" elf -fPIC > "$OUT" 1465fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1475fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1485fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction gen_asm_x86_64 () { 1495fd6d3161cc7407718c7e230f94db421543273b8Kenny Root local OUT 1505fd6d3161cc7407718c7e230f94db421543273b8Kenny Root OUT=$(default_asm_file "$@") 1515fd6d3161cc7407718c7e230f94db421543273b8Kenny Root perl "$1" elf "$OUT" > "$OUT" 1525fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1535fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1545fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1555fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Filter all items in a list that match a given pattern. 1565fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: space-separated list 1575fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $2: egrep pattern. 1585fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Out: items in $1 that match $2 1595fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction filter_by_egrep() { 1605fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r pattern=$1 1615fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift 1625fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$@" | tr ' ' '\n' | grep -e "$pattern" | tr '\n' ' ' 1635fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1645fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1655fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Sort and remove duplicates in a space-separated list 1665fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: space-separated list 1675fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Out: new space-separated list 1685fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction uniq_sort () { 1695fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$@" | tr ' ' '\n' | sort -u | tr '\n' ' ' 1705fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1715fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1725fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction print_autogenerated_header() { 1735fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "# Auto-generated - DO NOT EDIT!" 1745fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "# To regenerate, edit scrypt.config, then run:" 1755fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "# ./import_scrypt.sh import /path/to/scrypt-$SCRYPT_VERSION.tar.gz" 1765fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "#" 1775fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 1785fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1795fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction generate_build_config_mk() { 1805fd6d3161cc7407718c7e230f94db421543273b8Kenny Root ./configure $CONFIGURE_ARGS 1815fd6d3161cc7407718c7e230f94db421543273b8Kenny Root #rm -f apps/CA.pl.bak crypto/scryptconf.h.bak 1825fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1835fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r tmpfile=$(mktemp) 1845fd6d3161cc7407718c7e230f94db421543273b8Kenny Root (grep -e -D Makefile | grep -v CONFIGURE_ARGS= | grep -v OPTIONS=) > $tmpfile 1855fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1865fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r cflags=$(filter_by_egrep "^-D" $(grep -e "^CFLAG=" $tmpfile)) 1875fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r depflags=$(filter_by_egrep "^-D" $(grep -e "^DEPFLAG=" $tmpfile)) 1885fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -f $tmpfile 1895fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1905fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Generating $(basename $1)" 1915fd6d3161cc7407718c7e230f94db421543273b8Kenny Root ( 1925fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_autogenerated_header 1935fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 1945fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "scrypt_cflags := \\" 1955fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for cflag in $cflags $depflags; do 1965fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo " $cflag \\" 1975fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 1985fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "" 1995fd6d3161cc7407718c7e230f94db421543273b8Kenny Root ) > $1 2005fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 2015fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2025fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Return the value of a computed variable name. 2035fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# E.g.: 2045fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# FOO=foo 2055fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# BAR=bar 2065fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# echo $(var_value FOO_$BAR) -> prints the value of ${FOO_bar} 2075fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Variable name 2085fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Out: variable value 2095fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootvar_value() { 2105fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Note: don't use 'echo' here, because it's sensitive to values 2115fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # that begin with an underscore (e.g. "-n") 2125fd6d3161cc7407718c7e230f94db421543273b8Kenny Root eval printf \"%s\\n\" \$$1 2135fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 2145fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2155fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Same as var_value, but returns sorted output without duplicates. 2165fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Variable name 2175fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Out: variable value (if space-separated list, sorted with no duplicates) 2185fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootvar_sorted_value() { 2195fd6d3161cc7407718c7e230f94db421543273b8Kenny Root uniq_sort $(var_value $1) 2205fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 2215fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2225fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Print the definition of a given variable in a GNU Make build file. 2235fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Variable name (e.g. common_src_files) 2245fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $2+: Variable value (e.g. list of sources) 2255fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootprint_vardef_in_mk() { 2265fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r varname=$1 2275fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift 2285fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ -z "$1" ]; then 2295fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$varname :=" 2305fd6d3161cc7407718c7e230f94db421543273b8Kenny Root else 2315fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$varname := \\" 2325fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for src; do 2335fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo " $src \\" 2345fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 2355fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 2365fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "" 2375fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 2385fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2395fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Same as print_vardef_in_mk, but print a CFLAGS definition from 2405fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# a list of compiler defines. 2415fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Variable name (e.g. common_c_flags) 2425fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $2: List of defines (e.g. SCRYPT_NO_DONKEYS ...) 2435fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootprint_defines_in_mk() { 2445fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r varname=$1 2455fd6d3161cc7407718c7e230f94db421543273b8Kenny Root shift 2465fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ -z "$1" ]; then 2475fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$varname :=" 2485fd6d3161cc7407718c7e230f94db421543273b8Kenny Root else 2495fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "$varname := \\" 2505fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for def; do 2515fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo " -D$def \\" 2525fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 2535fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 2545fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "" 2555fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 2565fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2575fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Generate a configuration file like Scrypt-config.mk 2585fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# This uses variable definitions from scrypt.config to build a config 2595fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# file that can compute the list of target- and host-specific sources / 2605fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# compiler flags for a given component. 2615fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 2625fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Target file name. (e.g. Scrypt-config.mk) 2635fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction generate_config_mk() { 2645fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r output="$1" 2655a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Root declare -r all_archs="arm arm_neon x86 x86_64 mips" 2665fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2675fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Generating $(basename $output)" 2685fd6d3161cc7407718c7e230f94db421543273b8Kenny Root ( 2695fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_autogenerated_header 2705fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo \ 2715fd6d3161cc7407718c7e230f94db421543273b8Kenny Root"# Before including this file, the local Android.mk must define the following 2725fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# variables: 2735fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 2745fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# local_c_flags 2755fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# local_c_includes 2765fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# local_additional_dependencies 2775fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 2785fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# This script will define the following variables: 2795fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 2805fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# target_c_flags 2815fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# target_c_includes 2825fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# target_src_files 2835fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 2845fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# host_c_flags 2855fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# host_c_includes 2865fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# host_src_files 2875fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# 2885fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2895fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Ensure these are empty. 2905fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootunknown_arch_c_flags := 2915fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootunknown_arch_src_files := 2925fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootunknown_arch_exclude_files := 2935fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2945fd6d3161cc7407718c7e230f94db421543273b8Kenny Root" 2955fd6d3161cc7407718c7e230f94db421543273b8Kenny Root common_defines=$(var_sorted_value SCRYPT_DEFINES) 2965fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_defines_in_mk common_c_flags $common_defines 2975fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 2985fd6d3161cc7407718c7e230f94db421543273b8Kenny Root common_sources=$(var_sorted_value SCRYPT_SOURCES) 2995fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_vardef_in_mk common_src_files $common_sources 3005fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3015fd6d3161cc7407718c7e230f94db421543273b8Kenny Root common_includes=$(var_sorted_value SCRYPT_INCLUDES) 3025fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_vardef_in_mk common_c_includes $common_includes 3035fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3045fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for arch in $all_archs; do 3055fd6d3161cc7407718c7e230f94db421543273b8Kenny Root arch_defines=$(var_sorted_value SCRYPT_DEFINES_${arch}) 3065fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_defines_in_mk ${arch}_c_flags $arch_defines 3075fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3085fd6d3161cc7407718c7e230f94db421543273b8Kenny Root arch_sources=$(var_sorted_value SCRYPT_SOURCES_${arch}) 3095fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_vardef_in_mk ${arch}_src_files $arch_sources 3105fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3115fd6d3161cc7407718c7e230f94db421543273b8Kenny Root arch_exclude_sources=$(var_sorted_value SCRYPT_SOURCES_EXCLUDES_${arch}) 3125fd6d3161cc7407718c7e230f94db421543273b8Kenny Root print_vardef_in_mk ${arch}_exclude_files $arch_exclude_sources 3135fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3145fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 3155fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3165fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "\ 3175fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottarget_arch := \$(TARGET_ARCH) 3185fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootifeq (\$(target_arch)-\$(TARGET_HAS_BIGENDIAN),mips-true) 3195fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottarget_arch := unknown_arch 3205fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootendif 3215fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3225fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottarget_c_flags := \$(common_c_flags) \$(\$(target_arch)_c_flags) \$(local_c_flags) 3235fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottarget_c_includes := \$(addprefix external/scrypt/,\$(common_c_includes)) \$(local_c_includes) 3245fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottarget_src_files := \$(common_src_files) \$(\$(target_arch)_src_files) 3255fd6d3161cc7407718c7e230f94db421543273b8Kenny Roottarget_src_files := \$(filter-out \$(\$(target_arch)_exclude_files), \$(target_src_files)) 3265fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3275a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Root# Hacks for ARM NEON support 3285a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Rootifeq (\$(target_arch),arm) 3295a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Rootifeq (\$(ARCH_ARM_HAVE_NEON),true) 3305a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Roottarget_c_flags += \$(arm_neon_c_flags) 3315a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Roottarget_src_files += \$(arm_neon_src_files) 3325a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Roottarget_src_files := \$(filter-out \$(arm_neon_exclude_files), \$(target_src_files)) 3335a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Rootendif 3345a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Rootendif 3355a43d1928da29b4ec7b911fe865ed78ee3c2ca26Kenny Root 3365fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootifeq (\$(HOST_OS)-\$(HOST_ARCH),linux-x86) 3375fd6d3161cc7407718c7e230f94db421543273b8Kenny Roothost_arch := x86 3385fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootelse 3395fd6d3161cc7407718c7e230f94db421543273b8Kenny Roothost_arch := unknown_arch 3405fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootendif 3415fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3425fd6d3161cc7407718c7e230f94db421543273b8Kenny Roothost_c_flags := \$(common_c_flags) \$(\$(host_arch)_c_flags) \$(local_c_flags) 3435fd6d3161cc7407718c7e230f94db421543273b8Kenny Roothost_c_includes := \$(addprefix external/scrypt/,\$(common_c_includes)) \$(local_c_includes) 3445fd6d3161cc7407718c7e230f94db421543273b8Kenny Roothost_src_files := \$(common_src_files) \$(\$(host_arch)_src_files) 3455fd6d3161cc7407718c7e230f94db421543273b8Kenny Roothost_src_files := \$(filter-out \$(\$(host_arch)_exclude_files), \$(host_src_files)) 3465fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3475fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootlocal_additional_dependencies += \$(LOCAL_PATH)/$(basename $output) 3485fd6d3161cc7407718c7e230f94db421543273b8Kenny Root" 3495fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3505fd6d3161cc7407718c7e230f94db421543273b8Kenny Root ) > "$output" 3515fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 3525fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3535fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction import() { 3545fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r SCRYPT_SOURCE=$1 3555fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3565fd6d3161cc7407718c7e230f94db421543273b8Kenny Root untar $SCRYPT_SOURCE readonly 3575fd6d3161cc7407718c7e230f94db421543273b8Kenny Root applypatches $SCRYPT_DIR 3585fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3595fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cd $SCRYPT_DIR 3605fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3615fd6d3161cc7407718c7e230f94db421543273b8Kenny Root generate_build_config_mk ../build-config.mk 3625fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3635fd6d3161cc7407718c7e230f94db421543273b8Kenny Root touch ../MODULE_LICENSE_BSD_LIKE 3645fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3655fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cd .. 3665fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3675fd6d3161cc7407718c7e230f94db421543273b8Kenny Root generate_config_mk Scrypt-config.mk 3685fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3695fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Prune unnecessary sources 3705fd6d3161cc7407718c7e230f94db421543273b8Kenny Root prune 3715fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3725fd6d3161cc7407718c7e230f94db421543273b8Kenny Root NEEDED_SOURCES="$NEEDED_SOURCES" 3735fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for i in $NEEDED_SOURCES; do 3745fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Updating $i" 3755fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -r $i 3765fd6d3161cc7407718c7e230f94db421543273b8Kenny Root mv $SCRYPT_DIR/$i . 3775fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 3785fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3795fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cleantar 3805fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 3815fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3825fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction regenerate() { 3835fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r patch=$1 3845fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3855fd6d3161cc7407718c7e230f94db421543273b8Kenny Root generatepatch $patch 3865fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 3875fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3885fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction generate() { 3895fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r patch=$1 3905fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r SCRYPT_SOURCE=$2 3915fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3925fd6d3161cc7407718c7e230f94db421543273b8Kenny Root untar $SCRYPT_SOURCE 3935fd6d3161cc7407718c7e230f94db421543273b8Kenny Root applypatches $SCRYPT_DIR_ORIG $patch 3945fd6d3161cc7407718c7e230f94db421543273b8Kenny Root prune 3955fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 3965fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for i in $NEEDED_SOURCES; do 3975fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Restoring $i" 3985fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -r $SCRYPT_DIR/$i 3995fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cp -rf $i $SCRYPT_DIR/$i 4005fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 4015fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4025fd6d3161cc7407718c7e230f94db421543273b8Kenny Root generatepatch $patch 4035fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cleantar 4045fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4055fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4065fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Find all files in a sub-directory that are encoded in ISO-8859 4075fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Directory. 4085fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Out: list of files in $1 that are encoded as ISO-8859. 4095fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction find_iso8859_files() { 4105fd6d3161cc7407718c7e230f94db421543273b8Kenny Root find $1 -type f -print0 | xargs -0 file | fgrep "ISO-8859" | cut -d: -f1 4115fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4125fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4135fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# Convert all ISO-8859 files in a given subdirectory to UTF-8 4145fd6d3161cc7407718c7e230f94db421543273b8Kenny Root# $1: Directory name 4155fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction convert_iso8859_to_utf8() { 4165fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r iso_files=$(find_iso8859_files "$1") 4175fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for iso_file in $iso_files; do 4185fd6d3161cc7407718c7e230f94db421543273b8Kenny Root iconv --from-code iso-8859-1 --to-code utf-8 $iso_file > $iso_file.tmp 4195fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -f $iso_file 4205fd6d3161cc7407718c7e230f94db421543273b8Kenny Root mv $iso_file.tmp $iso_file 4215fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 4225fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4235fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4245fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction untar() { 4255fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r SCRYPT_SOURCE=$1 4265fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r readonly=$2 4275fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4285fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Remove old source 4295fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cleantar 4305fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4315fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Process new source 4325fd6d3161cc7407718c7e230f94db421543273b8Kenny Root tar -zxf $SCRYPT_SOURCE 4335fd6d3161cc7407718c7e230f94db421543273b8Kenny Root convert_iso8859_to_utf8 $SCRYPT_DIR 4345fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cp -rfP $SCRYPT_DIR $SCRYPT_DIR_ORIG 4355fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ ! -z $readonly ]; then 4365fd6d3161cc7407718c7e230f94db421543273b8Kenny Root find $SCRYPT_DIR_ORIG -type f -print0 | xargs -0 chmod a-w 4375fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 4385fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4395fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4405fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction prune() { 4415fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Removing $UNNEEDED_SOURCES" 4425fd6d3161cc7407718c7e230f94db421543273b8Kenny Root (cd $SCRYPT_DIR_ORIG && rm -rf $UNNEEDED_SOURCES) 4435fd6d3161cc7407718c7e230f94db421543273b8Kenny Root (cd $SCRYPT_DIR && rm -r $UNNEEDED_SOURCES) 4445fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4455fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4465fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction cleantar() { 4475fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -rf $SCRYPT_DIR_ORIG 4485fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -rf $SCRYPT_DIR 4495fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4505fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4515fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction applypatches () { 4525fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r dir=$1 4535fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r skip_patch=$2 4545fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4555fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cd $dir 4565fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4575fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Apply appropriate patches 4585fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for i in $SCRYPT_PATCHES; do 4595fd6d3161cc7407718c7e230f94db421543273b8Kenny Root if [ ! "$skip_patch" = "patches/$i" ]; then 4605fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Applying patch $i" 4615fd6d3161cc7407718c7e230f94db421543273b8Kenny Root patch -p1 --merge < ../patches/$i || die "Could not apply patches/$i. Fix source and run: $0 regenerate patches/$i" 4625fd6d3161cc7407718c7e230f94db421543273b8Kenny Root else 4635fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Skiping patch $i" 4645fd6d3161cc7407718c7e230f94db421543273b8Kenny Root fi 4655fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4665fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 4675fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4685fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Cleanup patch output 4695fd6d3161cc7407718c7e230f94db421543273b8Kenny Root find . \( -type f -o -type l \) -name "*.orig" -print0 | xargs -0 rm -f 4705fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4715fd6d3161cc7407718c7e230f94db421543273b8Kenny Root cd .. 4725fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4735fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4745fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootfunction generatepatch() { 4755fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r patch=$1 4765fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4775fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # Cleanup stray files before generating patch 4785fd6d3161cc7407718c7e230f94db421543273b8Kenny Root find $SCRYPT_DIR -type f -name "*.orig" -print0 | xargs -0 rm -f 4795fd6d3161cc7407718c7e230f94db421543273b8Kenny Root find $SCRYPT_DIR -type f -name "*~" -print0 | xargs -0 rm -f 4805fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4815fd6d3161cc7407718c7e230f94db421543273b8Kenny Root declare -r variable_name=SCRYPT_PATCHES_`basename $patch .patch | sed s/-/_/`_SOURCES 4825fd6d3161cc7407718c7e230f94db421543273b8Kenny Root # http://tldp.org/LDP/abs/html/ivr.html 4835fd6d3161cc7407718c7e230f94db421543273b8Kenny Root eval declare -r sources=\$$variable_name 4845fd6d3161cc7407718c7e230f94db421543273b8Kenny Root rm -f $patch 4855fd6d3161cc7407718c7e230f94db421543273b8Kenny Root touch $patch 4865fd6d3161cc7407718c7e230f94db421543273b8Kenny Root for i in $sources; do 4875fd6d3161cc7407718c7e230f94db421543273b8Kenny Root LC_ALL=C TZ=UTC0 diff -aup $SCRYPT_DIR_ORIG/$i $SCRYPT_DIR/$i >> $patch && die "ERROR: No diff for patch $path in file $i" 4885fd6d3161cc7407718c7e230f94db421543273b8Kenny Root done 4895fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "Generated patch $patch" 4905fd6d3161cc7407718c7e230f94db421543273b8Kenny Root echo "NOTE To make sure there are not unwanted changes from conflicting patches, be sure to review the generated patch." 4915fd6d3161cc7407718c7e230f94db421543273b8Kenny Root} 4925fd6d3161cc7407718c7e230f94db421543273b8Kenny Root 4935fd6d3161cc7407718c7e230f94db421543273b8Kenny Rootmain $@ 494