Commit | Line | Data |
---|---|---|
d42e7319 JB |
1 | #! /bin/sh |
2 | ||
3 | ANDROID_ROOT=$1 | |
4 | HEADERPATH=$2 | |
5 | MAJOR=$3 | |
6 | MINOR=$4 | |
7 | ||
8 | PATCH=$5 | |
9 | PATCH2=$6 | |
10 | PATCH3=$7 | |
11 | ||
12 | if [ x$ANDROID_ROOT = x -o "x$HEADERPATH" = x ]; then | |
13 | echo "Syntax: extract-headers.sh ANDROID_ROOT HEADERPATH [MAJOR] [MINOR] [PATCH] [PATCH2] [PATCH3]" | |
14 | exit 1 | |
15 | fi | |
16 | ||
17 | ||
18 | if [ x$MAJOR = x -o x$MINOR = x -o x$PATCH = x ]; then | |
19 | VERSION_DEFAULTS=$ANDROID_ROOT/build/core/version_defaults.mk | |
20 | ||
21 | parse_defaults_failed() { | |
22 | echo "Error: Cannot read PLATFORM_VERSION from ${VERSION_DEFAULTS}." | |
23 | echo "Please specify MAJOR, MINOR and PATCH manually to continue." | |
24 | exit 1 | |
25 | } | |
26 | ||
27 | if [ ! -f $VERSION_DEFAULTS ]; then | |
28 | parse_defaults_failed | |
29 | fi | |
30 | ||
31 | PLATFORM_VERSION=$(egrep -o "PLATFORM_VERSION := [0-9.]+" $VERSION_DEFAULTS | awk '{ print $3 }') | |
32 | if [ x$PLATFORM_VERSION = x ]; then | |
33 | parse_defaults_failed | |
34 | fi | |
35 | ||
36 | MAJOR=$(echo $PLATFORM_VERSION | cut -d. -f1) | |
37 | MINOR=$(echo $PLATFORM_VERSION | cut -d. -f2) | |
38 | PATCH=$(echo $PLATFORM_VERSION | cut -d. -f3) | |
39 | PATCH2=$(echo $PLATFORM_VERSION | cut -d. -f4) | |
40 | PATCH3=$(echo $PLATFORM_VERSION | cut -d. -f5) | |
41 | ||
42 | if [ x$MAJOR = x -o x$MINOR = x -o x$PATCH = x ]; then | |
43 | parse_defaults_failed | |
44 | fi | |
45 | ||
46 | echo -n "Auto-detected version: ${MAJOR}.${MINOR}.${PATCH}" | |
47 | if [ x$PATCH3 != x ]; then | |
48 | echo ".${PATCH2}.${PATCH3}" | |
49 | elif [ x$PATCH2 != x ]; then | |
50 | echo ".${PATCH2}" | |
51 | else | |
52 | echo "" | |
53 | fi | |
54 | fi | |
55 | ||
56 | require_sources() { | |
57 | # require_sources [FILE|DIR] ... | |
58 | # Check if the given paths exist in the Android source | |
59 | while [ $# -gt 0 ]; do | |
60 | SOURCE_PATH=$ANDROID_ROOT/$1 | |
61 | shift | |
62 | ||
63 | if [ ! -e "$SOURCE_PATH" ]; then | |
64 | echo "Cannot extract headers: '$SOURCE_PATH' does not exist." | |
65 | exit 1 | |
66 | fi | |
67 | done | |
68 | } | |
69 | ||
70 | extract_headers_to() { | |
71 | # extract_headers_to <TARGET> [FILE|DIR] ... | |
72 | # For each FILE argument, copy it to TARGET | |
73 | # For each DIR argument, copy all its contents to TARGET | |
74 | TARGET_DIRECTORY=$HEADERPATH/$1 | |
75 | if [ ! -d "$TARGET_DIRECTORY" ]; then | |
76 | mkdir -p "$TARGET_DIRECTORY" | |
77 | fi | |
78 | echo " $1" | |
79 | shift | |
80 | ||
81 | while [ $# -gt 0 ]; do | |
82 | SOURCE_PATH=$ANDROID_ROOT/$1 | |
83 | if [ -d $SOURCE_PATH ]; then | |
84 | for file in $SOURCE_PATH/*; do | |
85 | echo " $1/$(basename $file)" | |
86 | cp $file $TARGET_DIRECTORY/ | |
87 | done | |
88 | else | |
89 | echo " $1" | |
90 | cp $SOURCE_PATH $TARGET_DIRECTORY/ | |
91 | fi | |
92 | shift | |
93 | done | |
94 | } | |
95 | ||
96 | check_header_exists() { | |
97 | # check_header_exists <FILENAME> | |
98 | HEADER_FILE=$ANDROID_ROOT/$1 | |
99 | if [ ! -e "$HEADER_FILE" ]; then | |
100 | return 1 | |
101 | fi | |
102 | ||
103 | return 0 | |
104 | } | |
105 | ||
106 | ||
107 | # Make sure that the dir given contains at least some of the assumed structures. | |
108 | require_sources \ | |
109 | hardware/libhardware/include/hardware | |
110 | ||
111 | mkdir -p $HEADERPATH | |
112 | ||
113 | if [ x$PATCH2 = x ]; then | |
114 | PATCH2=0 | |
115 | fi | |
116 | ||
117 | if [ x$PATCH3 = x ]; then | |
118 | PATCH3=0 | |
119 | fi | |
120 | ||
121 | cat > $HEADERPATH/android-version.h << EOF | |
122 | #ifndef ANDROID_VERSION_H_ | |
123 | #define ANDROID_VERSION_H_ | |
124 | ||
125 | #define ANDROID_VERSION_MAJOR $MAJOR | |
126 | #define ANDROID_VERSION_MINOR $MINOR | |
127 | #define ANDROID_VERSION_PATCH $PATCH | |
128 | #define ANDROID_VERSION_PATCH2 $PATCH2 | |
129 | #define ANDROID_VERSION_PATCH3 $PATCH3 | |
130 | ||
131 | #endif | |
132 | EOF | |
133 | ||
134 | extract_headers_to hardware \ | |
135 | hardware/libhardware/include/hardware | |
136 | ||
137 | extract_headers_to hardware_legacy \ | |
138 | hardware/libhardware_legacy/include/hardware_legacy/audio_policy_conf.h | |
139 | ||
140 | extract_headers_to cutils \ | |
141 | system/core/include/cutils | |
142 | ||
143 | extract_headers_to system \ | |
144 | system/core/include/system | |
145 | ||
146 | extract_headers_to android \ | |
147 | system/core/include/android | |
148 | ||
149 | check_header_exists external/kernel-headers/original/linux/sync.h && \ | |
150 | extract_headers_to linux \ | |
151 | external/kernel-headers/original/linux/sync.h \ | |
152 | external/kernel-headers/original/linux/sw_sync.h | |
153 | ||
154 | check_header_exists system/core/include/sync/sync.h && \ | |
155 | extract_headers_to sync \ | |
156 | system/core/include/sync | |
157 | ||
158 | check_header_exists external/libnfc-nxp/inc/phNfcConfig.h && \ | |
159 | extract_headers_to libnfc-nxp \ | |
160 | external/libnfc-nxp/inc \ | |
161 | external/libnfc-nxp/src | |
162 | ||
163 | extract_headers_to private \ | |
164 | system/core/include/private/android_filesystem_config.h | |
165 | ||
166 | ||
167 | # In order to make it easier to trace back the origins of headers, fetch | |
168 | # some repository information from the Git source tree (if available). | |
169 | # Tested with AOSP and CM. | |
170 | NOW=$(LC_ALL=C date) | |
171 | ||
172 | # Add here all sub-projects of AOSP/CM from which headers are extracted | |
173 | GIT_PROJECTS=" | |
174 | hardware/libhardware | |
175 | hardware/libhardware_legacy | |
176 | system/core | |
177 | external/kernel-headers | |
178 | external/libnfc-nxp | |
179 | " | |
180 | ||
181 | echo "Extracting Git revision information" | |
182 | rm -f $HEADERPATH/SOURCE_GIT_REVISION_INFO | |
183 | (for GIT_PROJECT in $GIT_PROJECTS; do | |
184 | TARGET_DIR=$ANDROID_ROOT/$GIT_PROJECT | |
185 | echo "================================================" | |
186 | echo "$GIT_PROJECT @ $NOW" | |
187 | echo "================================================" | |
188 | if [ -e $TARGET_DIR/.git ]; then | |
189 | ( | |
190 | set -x | |
191 | cd $ANDROID_ROOT | |
192 | repo status $GIT_PROJECT | |
193 | cd $TARGET_DIR | |
194 | git show-ref --head | |
195 | git remote -v | |
196 | ) | |
197 | echo "" | |
198 | echo "" | |
199 | else | |
200 | echo "WARNING: $GIT_PROJECT does not contain a Git repository" | |
201 | fi | |
202 | done) > $HEADERPATH/git-revisions.txt 2>&1 | |
203 | ||
204 | # Repo manifest that can be used to fetch the sources for re-extracting headers | |
205 | if [ -e $ANDROID_ROOT/.repo/manifest.xml ]; then | |
206 | cp $ANDROID_ROOT/.repo/manifest.xml $HEADERPATH/ | |
207 | fi | |
208 | ||
209 | exit 0 |