1b69ae1a3SDmitry Chagin#!/bin/sh 2b69ae1a3SDmitry Chagin# 3b69ae1a3SDmitry Chagin# Copyright (c) 2006 "David Kirchner" <dpk@dpk.net>. All rights reserved. 4b69ae1a3SDmitry Chagin# 5b69ae1a3SDmitry Chagin# Redistribution and use in source and binary forms, with or without 6b69ae1a3SDmitry Chagin# modification, are permitted provided that the following conditions 7b69ae1a3SDmitry Chagin# are met: 8b69ae1a3SDmitry Chagin# 1. Redistributions of source code must retain the above copyright 9b69ae1a3SDmitry Chagin# notice, this list of conditions and the following disclaimer. 10b69ae1a3SDmitry Chagin# 2. Redistributions in binary form must reproduce the above copyright 11b69ae1a3SDmitry Chagin# notice, this list of conditions and the following disclaimer in the 12b69ae1a3SDmitry Chagin# documentation and/or other materials provided with the distribution. 13b69ae1a3SDmitry Chagin# 14b69ae1a3SDmitry Chagin# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15b69ae1a3SDmitry Chagin# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16b69ae1a3SDmitry Chagin# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17b69ae1a3SDmitry Chagin# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18b69ae1a3SDmitry Chagin# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19b69ae1a3SDmitry Chagin# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20b69ae1a3SDmitry Chagin# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21b69ae1a3SDmitry Chagin# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22b69ae1a3SDmitry Chagin# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23b69ae1a3SDmitry Chagin# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24b69ae1a3SDmitry Chagin# SUCH DAMAGE. 25b69ae1a3SDmitry Chagin# 26b69ae1a3SDmitry Chagin# $FreeBSD$ 27b69ae1a3SDmitry Chagin# 28b69ae1a3SDmitry Chagin# Generates tables_linux.h 29b69ae1a3SDmitry Chagin# 30b69ae1a3SDmitry Chagin 31b69ae1a3SDmitry Chaginset -e 32b69ae1a3SDmitry Chagin 33b69ae1a3SDmitry ChaginLC_ALL=C; export LC_ALL 34b69ae1a3SDmitry Chagin 35b69ae1a3SDmitry Chaginif [ -z "$1" ] 36b69ae1a3SDmitry Chaginthen 37b69ae1a3SDmitry Chagin echo "usage: sh $0 include-dir [output-file]" 38b69ae1a3SDmitry Chagin exit 1 39b69ae1a3SDmitry Chaginfi 40b69ae1a3SDmitry Chagininclude_dir=$1 41b69ae1a3SDmitry Chaginif [ -n "$2" ]; then 42b69ae1a3SDmitry Chagin output_file="$2" 43b69ae1a3SDmitry Chagin output_tmp=$(mktemp -u) 44b69ae1a3SDmitry Chagin exec > "$output_tmp" 45b69ae1a3SDmitry Chaginfi 46b69ae1a3SDmitry Chagin 47b69ae1a3SDmitry Chaginall_headers= 48b69ae1a3SDmitry Chagin# 49b69ae1a3SDmitry Chagin# Generate a table C #definitions. The including file can define the 50b69ae1a3SDmitry Chagin# TABLE_NAME(n), TABLE_ENTRY(x), and TABLE_END macros to define what 51b69ae1a3SDmitry Chagin# the tables map to. 52b69ae1a3SDmitry Chagin# 53b69ae1a3SDmitry Chagingen_table() 54b69ae1a3SDmitry Chagin{ 55b69ae1a3SDmitry Chagin local name grep file excl filter 56b69ae1a3SDmitry Chagin name=$1 57b69ae1a3SDmitry Chagin grep=$2 58b69ae1a3SDmitry Chagin file=$3 59b69ae1a3SDmitry Chagin excl=$4 60b69ae1a3SDmitry Chagin 61b69ae1a3SDmitry Chagin if [ -z "$excl" ]; then 62b69ae1a3SDmitry Chagin filter="cat" 63b69ae1a3SDmitry Chagin else 64b69ae1a3SDmitry Chagin filter="egrep -v" 65b69ae1a3SDmitry Chagin fi 66b69ae1a3SDmitry Chagin cat <<_EOF_ 67b69ae1a3SDmitry ChaginTABLE_START(${name}) 68b69ae1a3SDmitry Chagin_EOF_ 69b69ae1a3SDmitry Chagin if [ -e "${include_dir}/${file}" ]; then 70b69ae1a3SDmitry Chagin all_headers="${all_headers:+${all_headers} }${file}" 71b69ae1a3SDmitry Chagin egrep "^#[[:space:]]*define[[:space:]]+"${grep}"[[:space:]]*" \ 72b69ae1a3SDmitry Chagin $include_dir/$file | ${filter} ${excl} | \ 73b69ae1a3SDmitry Chagin awk '{ for (i = 1; i <= NF; i++) \ 74b69ae1a3SDmitry Chagin if ($i ~ /define/) \ 75b69ae1a3SDmitry Chagin break; \ 76b69ae1a3SDmitry Chagin ++i; \ 77b69ae1a3SDmitry Chagin sub(/LINUX_/, "", $i); \ 78b69ae1a3SDmitry Chagin printf "TABLE_ENTRY(LINUX_%s, %s)\n", $i, $i }' 79b69ae1a3SDmitry Chagin fi 80b69ae1a3SDmitry Chagincat <<_EOF_ 81b69ae1a3SDmitry ChaginTABLE_END 82b69ae1a3SDmitry Chagin 83b69ae1a3SDmitry Chagin_EOF_ 84b69ae1a3SDmitry Chagin} 85b69ae1a3SDmitry Chagin 86b69ae1a3SDmitry Chagincat <<_EOF_ 87b69ae1a3SDmitry Chagin/* This file is auto-generated. */ 88b69ae1a3SDmitry Chagin 89b69ae1a3SDmitry Chagin_EOF_ 90b69ae1a3SDmitry Chagin 91d2b3237eSDmitry Chagingen_table "atflags" "LINUX_AT_[A-Z_]+[[:space:]]+[0-9]+" "compat/linux/linux_file.h" 92c8a79231SDmitry Chagingen_table "clockids" "LINUX_CLOCK_[A-Z_]+[[:space:]]+[0-9]+" "compat/linux/linux_time.h" 93c8a79231SDmitry Chagingen_table "clockflags" "LINUX_TIMER_[A-Z_]+[[:space:]]+0x[0-9]+" "compat/linux/linux_time.h" 94c8a79231SDmitry Chagingen_table "clockcpuids" "LINUX_CPUCLOCK_[A-Z_]+[[:space:]]+[0-9]+" "compat/linux/linux_time.h" "_MASK|_MAX" 95fde775bcSDmitry Chagingen_table "openflags" "LINUX_O_[A-Z_]+[[:space:]]+[0-9]+" "compat/linux/linux_file.h" "O_RDONLY|O_RDWR|O_WRONLY|O_ACCMODE" 96f587a2a7SDmitry Chagingen_table "sigprocmaskhow" "LINUX_SIG_[A-Z]+[[:space:]]+[0-9]+" "compat/linux/linux.h" 97*bd35e83bSDmitry Chagingen_table "cloneflags" "LINUX_CLONE_[A-Z_]+[[:space:]]+[[:alnum:]]+" "compat/linux/linux_fork.h" "LINUX_CLONE_LEGACY_FLAGS|LINUX_CLONE_CLEAR_SIGHAND|LINUX_CLONE_INTO_CGROUP|LINUX_CLONE_NEWTIME" 98b69ae1a3SDmitry Chagin 99b69ae1a3SDmitry Chagin# Generate a .depend file for our output file 100b69ae1a3SDmitry Chaginif [ -n "$output_file" ]; then 101b69ae1a3SDmitry Chagin depend_tmp=$(mktemp -u) 102b69ae1a3SDmitry Chagin { 103b69ae1a3SDmitry Chagin echo "$output_file: \\" 104b69ae1a3SDmitry Chagin echo "$all_headers" | tr ' ' '\n' | sort -u | 105b69ae1a3SDmitry Chagin sed -e "s,^, $include_dir/," -e 's,$, \\,' 106b69ae1a3SDmitry Chagin echo 107b69ae1a3SDmitry Chagin } > "$depend_tmp" 108b69ae1a3SDmitry Chagin if cmp -s "$output_tmp" "$output_file"; then 109b69ae1a3SDmitry Chagin rm -f "$output_tmp" "$depend_tmp" 110b69ae1a3SDmitry Chagin else 111b69ae1a3SDmitry Chagin mv -f "$depend_tmp" ".depend.${output_file}" 112b69ae1a3SDmitry Chagin mv -f "$output_tmp" "$output_file" 113b69ae1a3SDmitry Chagin fi 114b69ae1a3SDmitry Chaginfi 115