Mercurial > vim
comparison src/osdef.sh @ 7:3fc0f57ecb91 v7.0001
updated for version 7.0001
author | vimboss |
---|---|
date | Sun, 13 Jun 2004 20:20:40 +0000 |
parents | |
children | efa40be729c2 |
comparison
equal
deleted
inserted
replaced
6:c2daee826b8f | 7:3fc0f57ecb91 |
---|---|
1 #! /bin/sh | |
2 # | |
3 # osdef.sh -- copy osdef.h.in to osdef.h while removing declarations | |
4 # found in the system header files. Caution: weird sed magic going on here. | |
5 # Warnings are printed if sed did not survive. | |
6 # | |
7 # (C) Michael Schroeder, Juergen Weigert | |
8 # | |
9 # osdef.h.in has been split into osdef1.h.in and osdef2.h.in, because some | |
10 # sed's could not handle the amount of commands (is 50 commands the limit?). | |
11 # | |
12 # 31.10.95 jw. | |
13 | |
14 if test -z "$CC"; then | |
15 CC=cc | |
16 fi | |
17 if test -z "$srcdir"; then | |
18 srcdir=. | |
19 fi | |
20 | |
21 rm -f core* *.core | |
22 | |
23 cat << EOF > osdef0.c | |
24 #ifndef __APPLE__ | |
25 # define select select_declared_wrong | |
26 #endif | |
27 #define tgetstr tgetstr_declared_wrong | |
28 #include "auto/config.h" | |
29 #include "os_unix.h" /* bring in most header files, more follow below */ | |
30 #include "os_unixx.h" /* bring in header files for os_unix.c */ | |
31 | |
32 #ifdef HAVE_TERMCAP_H | |
33 # include <termcap.h> /* only for term.c */ | |
34 #endif | |
35 | |
36 #ifdef HAVE_FCNTL_H | |
37 # include <fcntl.h> /* only used in a few files */ | |
38 #endif | |
39 | |
40 #ifdef HAVE_SYS_STATFS_H | |
41 # include <sys/types.h> | |
42 # include <sys/statfs.h> /* only for memfile.c */ | |
43 #endif | |
44 | |
45 #ifdef HAVE_X11 | |
46 # include <X11/Intrinsic.h> | |
47 #endif | |
48 EOF | |
49 | |
50 # Mac uses precompiled headers, but we need real headers here. | |
51 case `uname` in | |
52 Darwin) $CC -I. -I$srcdir -E -no-cpp-precomp osdef0.c >osdef0.cc;; | |
53 *) $CC -I. -I$srcdir -E osdef0.c >osdef0.cc;; | |
54 esac | |
55 | |
56 # insert a space in front of each line, so that a function name at the | |
57 # start of the line is matched with "[)*, ]\1[ (]" | |
58 sed < osdef0.cc -e '/\(..*\)/s// \1/' > osdef0.ccc | |
59 | |
60 sed < $srcdir/osdef1.h.in -n -e '/^extern/s@.*[)* ][)* ]*\([a-zA-Z_][a-zA-Z0-9_]*\) __ARGS.*@/[)*, ][(]*\1[)]*[ (]/i\\\ | |
61 \\/\\[^a-zA-Z_\\]\1 __ARGS\\/d@p' > osdef11.sed | |
62 | |
63 sed < $srcdir/osdef2.h.in -n -e '/^extern/s@.*[)* ][)* ]*\([a-zA-Z_][a-zA-Z0-9_]*\) __ARGS.*@/[)*, ][(]*\1[)]*[ (]/i\\\ | |
64 \\/\\[^a-zA-Z_\\]\1 __ARGS\\/d@p' > osdef21.sed | |
65 | |
66 cat << EOF > osdef2.sed | |
67 1i\\ | |
68 /* | |
69 1i\\ | |
70 * osdef.h is automagically created from osdef?.h.in by osdef.sh -- DO NOT EDIT | |
71 1i\\ | |
72 */ | |
73 EOF | |
74 | |
75 cat osdef0.ccc | sed -n -f osdef11.sed >> osdef2.sed | |
76 sed -f osdef2.sed < $srcdir/osdef1.h.in > auto/osdef.h | |
77 | |
78 cat osdef0.ccc | sed -n -f osdef21.sed > osdef2.sed | |
79 sed -f osdef2.sed < $srcdir/osdef2.h.in >> auto/osdef.h | |
80 | |
81 rm osdef0.c osdef0.cc osdef0.ccc osdef11.sed osdef21.sed osdef2.sed | |
82 | |
83 if test -f core*; then | |
84 file core* | |
85 echo " Sorry, your sed is broken. Call the system administrator." | |
86 echo " Meanwhile, you may try to compile Vim with an empty osdef.h file." | |
87 echo " If you compiler complains about missing prototypes, move the needed" | |
88 echo " ones from osdef1.h.in and osdef2.h.in to osdef.h." | |
89 exit 1 | |
90 fi | |
91 cat $srcdir/osdef1.h.in $srcdir/osdef2.h.in >osdefX.h.in | |
92 if eval test "`diff auto/osdef.h osdefX.h.in | wc -l`" -eq 4; then | |
93 echo " Hmm, sed is very pessimistic about your system header files." | |
94 echo " But it did not dump core -- strange! Let's continue carefully..." | |
95 echo " If this fails, you may want to remove offending lines from osdef.h" | |
96 echo " or try with an empty osdef.h file, if your compiler can do without" | |
97 echo " function declarations." | |
98 fi | |
99 rm osdefX.h.in |