source: common/libs/func_book_parser@ a73ed74

ablfs-more legacy trunk
Last change on this file since a73ed74 was 04de9bc, checked in by Pierre Labastie <pierre@…>, 5 years ago

Allow to find kernfs and chroot in any chapter

We use those files to generate code snippets to use in Makefile.
They used to be in chapter 6, but the new book will have some
of them in chapter 5.

  • Property mode set to 100644
File size: 11.9 KB
Line 
1#!/bin/bash
2
3# $Id$
4
5#----------------------------#
6get_book() { #
7#----------------------------#
8 cd $JHALFSDIR
9
10 if [ -z $WORKING_COPY ] ; then
11# Check for Subversion or git instead of just letting the script fail.
12 case $PROGNAME in
13 lfs | hlfs)
14 test `type -p svn` || eval "echo \"This feature requires Subversion.\"
15 exit 1"
16 ;;
17 clfs*)
18 test `type -p git` || eval "echo \"This feature requires Git.\"
19 exit 1"
20 ;;
21 esac
22
23 echo -n "Downloading the $PROGNAME document, $LFSVRS version... "
24
25 case $PROGNAME in
26 lfs) svn_root="LFS" ;;
27 hlfs) svn_root="HLFS" ;;
28 clfs*) ;;
29 *) echo "BOOK not defined in function <get_book>"
30 exit 1 ;;
31 esac
32 # Grab a fresh book if it's missing, otherwise, update it from the
33 # repo. If we've already extracted the commands, move on to getting the
34 # sources.
35 if [ $PROGNAME == "lfs" ] || [ $PROGNAME == "hlfs" ] &&
36 [ ! -d ${PROGNAME}-${LFSVRS}/.svn ]; then
37 svn co $SVN/${svn_root}/${TREE} ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1
38 elif [ $PROGNAME == "clfs" ] || [ $PROGNAME == "clfs2" ] ||
39 [ $PROGNAME == "clfs3" ] && [ ! -d ${PROGNAME}-${LFSVRS}/.git ]; then
40 echo $TREE
41 git clone $GIT ${PROGNAME}-$LFSVRS >>$LOGDIR/$LOG 2>&1
42 if [ ! $TREE == "development" ]; then
43 pushd ${PROGNAME}-$LFSVRS > /dev/null
44 echo "Checking out $LFSVRS at $PWD in $TREE"
45 git checkout ${TREE} >>$LOGDIR/$LOG 2>&1
46 popd > /dev/null
47 fi
48 else
49 cd ${PROGNAME}-$LFSVRS
50 case $PROGNAME in
51 clfs*)
52 # If the repo is in "detached head" state, git pull fails, so get
53 # back first to master:
54 git checkout master >>$LOGDIR/$LOG 2>&1
55 git pull >>$LOGDIR/$LOG 2>&1
56 if [ ! $TREE == "development" ]; then
57 git checkout ${TREE} >>$LOGDIR/$LOG 2>&1
58 fi
59 ;;
60 lfs | hlfs) svn up >>$LOGDIR/$LOG 2>&1 ;;
61 *) ;;
62 esac
63 fi
64 echo -ne "done\n"
65
66 else # Working copy
67 echo -ne "Using $BOOK as book's sources ...\n"
68 fi
69}
70
71#----------------------------#
72extract_commands() { #
73#----------------------------#
74
75 cd $JHALFSDIR
76 case $PROGNAME in
77 clfs*)
78 VERSION=$(xmllint --noent $BOOK/BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
79 lfs)
80 if [ "$INITSYS" = "sysv" ] ; then
81 VERSION=$(grep 'ENTITY version ' $BOOK/general.ent| cut -d\" -f2)
82 else
83 VERSION=$(grep 'ENTITY versiond' $BOOK/general.ent| cut -d\" -f2)
84 fi
85 ;;
86 *)
87 VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
88 esac
89
90 # Clean
91 rm -rf ${PROGNAME}-commands
92
93 # Extract the commands
94 echo -n "Extracting commands for"
95 case ${PROGNAME} in
96 clfs)
97 echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... "
98 xsltproc --nonet \
99 --xinclude \
100 --stringparam method "$METHOD" \
101 --stringparam testsuite "$TEST" \
102 --stringparam bomb-testsuite "$BOMB_TEST" \
103 --stringparam timezone "$TIMEZONE" \
104 --stringparam page "$PAGE" \
105 --stringparam lang "$LANG" \
106 --stringparam sparc "$SPARC64_PROC" \
107 --stringparam x86 "$TARGET" \
108 --stringparam mips "$TARGET" \
109 -o ./${PROGNAME}-commands/ \
110 $XSL \
111 $BOOK/BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
112 ;;
113
114 clfs2)
115 echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... "
116 xsltproc --nonet \
117 --xinclude \
118 --stringparam timezone "$TIMEZONE" \
119 --stringparam page "$PAGE" \
120 --stringparam lang "$LANG" \
121 --output ./${PROGNAME}-commands/ \
122 $XSL \
123 $BOOK/BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
124 ;;
125
126 clfs3)
127 echo -n " ${L_arrow}${BOLD}$ARCH${R_arrow} target architecture... "
128 xsltproc --nonet \
129 --xinclude \
130 --stringparam endian x$ENDIAN \
131 --stringparam timezone "$TIMEZONE" \
132 --stringparam page "$PAGE" \
133 --stringparam lang "$LANG" \
134 --output ./${PROGNAME}-commands/ \
135 $XSL \
136 $BOOK/BOOK/$ARCH-index.xml >>$LOGDIR/$LOG 2>&1
137 ;;
138
139 hlfs)
140 echo -n " ${L_arrow}${BOLD}$MODEL + $KERNEL${R_arrow} HLFS flavour... "
141 xsltproc --nonet \
142 --xinclude \
143 --stringparam model "$MODEL" \
144 --stringparam kernel "$KERNEL" \
145 --stringparam testsuite "$TEST" \
146 --stringparam bomb-testsuite "$BOMB_TEST" \
147 --stringparam features \
148 x$SSP$ASLR$PAX$HARDENED_TMP$WARNINGS$MISC$BLOWFISH \
149 --stringparam timezone "$TIMEZONE" \
150 --stringparam page "$PAGE" \
151 --stringparam lang "$LANG" \
152 --stringparam grsecurity_host "$GRSECURITY_HOST" \
153 --output ./${PROGNAME}-commands/ \
154 $XSL \
155 $BOOK/index.xml >>$LOGDIR/$LOG 2>&1
156 ;;
157 lfs)
158 echo -n " ${L_arrow}${BOLD}LFS${R_arrow} build... "
159 pushd $BOOK > /dev/null
160 if [ -f process-scripts.sh ]; then
161 bash process-scripts.sh >> $LOGDIR/$LOG 2>&1
162 fi
163 popd > /dev/null
164
165 xsltproc --nonet \
166 --xinclude \
167 --stringparam revision "$INITSYS" \
168 --stringparam testsuite "$TEST" \
169 --stringparam bomb-testsuite "$BOMB_TEST" \
170 --stringparam ncurses5 "$NCURSES5" \
171 --stringparam strip "$STRIP" \
172 --stringparam del-la-files "$DEL_LA_FILES" \
173 --stringparam full-locale "$FULL_LOCALE" \
174 --stringparam timezone "$TIMEZONE" \
175 --stringparam page "$PAGE" \
176 --stringparam lang "$LANG" \
177 --stringparam pkgmngt "$PKGMNGT" \
178 --stringparam wrap-install "$WRAP_INSTALL" \
179 --stringparam hostname "$HOSTNAME" \
180 --stringparam interface "$INTERFACE" \
181 --stringparam ip "$IP_ADDR" \
182 --stringparam gateway "$GATEWAY" \
183 --stringparam prefix "$PREFIX" \
184 --stringparam broadcast "$BROADCAST" \
185 --stringparam domain "$DOMAIN" \
186 --stringparam nameserver1 "$DNS1" \
187 --stringparam nameserver2 "$DNS2" \
188 --stringparam font "$FONT" \
189 --stringparam fontmap "$FONTMAP" \
190 --stringparam unicode "$UNICODE" \
191 --stringparam keymap "$KEYMAP" \
192 --stringparam local "$LOCAL" \
193 --stringparam log-level "$LOG_LEVEL" \
194 --stringparam script-root "$SCRIPT_ROOT" \
195 --output ./${PROGNAME}-commands/ \
196 $XSL \
197 $BOOK/index.xml >> $LOGDIR/$LOG 2>&1
198# Remove flags requesting user action in some cases. Much easier here than
199# in the stylesheet...
200 sed -i 's/-iv /-v /' ./${PROGNAME}-commands/chapter08/*kernel*
201 ;;
202 *) echo -n " ${L_arrow}${PROGNAME}${R_arrow} book invalid, terminate build... "
203 exit 1 ;;
204 esac
205
206 echo "done"
207
208 # Make the scripts executable.
209 chmod -R +x $JHALFSDIR/${PROGNAME}-commands
210
211 # Create the packages file. We need it for proper Makefile creation
212 create_package_list
213 if [ "${PROGNAME}" = lfs ]; then
214 create_chroot_scripts
215 create_kernfs_scripts
216 fi
217
218 # Done. Moving on...
219 get_sources
220
221}
222
223#----------------------------#
224create_package_list() { #
225#----------------------------#
226
227 # Create the packages file. We need it for proper Makefile creation
228 rm -f pkg_tarball_list
229 echo -n "Creating <${PROGNAME}> list of tarball names for $BOOK"
230 if [ ! -z $ARCH ] ; then echo -n " $ARCH" ; fi
231 echo -n "... "
232 case ${PROGNAME} in
233 clfs*)
234 xsltproc --nonet --xinclude \
235 -o pkg_tarball_list \
236 packages.xsl \
237 $BOOK/BOOK/materials/${ARCH}-chapter.xml >>$LOGDIR/$LOG 2>&1
238 ;;
239 hlfs)
240 xsltproc --nonet --xinclude \
241 --stringparam model "$MODEL" \
242 --stringparam kernel "$KERNEL" \
243 --output pkg_tarball_list \
244 packages.xsl \
245 $BOOK/chapter04/chapter04.xml >>$LOGDIR/$LOG 2>&1
246 ;;
247 lfs)
248 xsltproc --nonet --xinclude \
249 --stringparam pkgmngt "$PKGMNGT" \
250 --stringparam revision "$INITSYS" \
251 --output pkg_tarball_list \
252 packages.xsl \
253 $BOOK/chapter03/chapter03.xml >>$LOGDIR/$LOG 2>&1
254 ;;
255 *)
256 esac
257
258 echo "done"
259
260}
261
262#----------------------------#
263create_chroot_scripts() { #
264#----------------------------#
265
266 rm -rf chroot-scripts
267 echo -n "Creating chroot commands scripts from $BOOK"
268 if [ ! -z $ARCH ] ; then echo -n " $ARCH" ; fi
269 echo -n "... "
270 case ${PROGNAME} in
271 clfs*)
272 xsltproc --nonet --xinclude \
273 -o chroot-scripts/ chroot.xsl \
274 $BOOK/BOOK/${ARCH}-index.xml >> $LOGDIR/$LOG 2>&1
275 ;;
276 hlfs)
277 xsltproc --nonet --xinclude \
278 -o chroot-scripts/ chroot.xsl \
279 $BOOK/index.xml >> $LOGDIR/$LOG 2>&1
280 ;;
281 lfs)
282 xsltproc --nonet --xinclude \
283 -o chroot-scripts/ chroot.xsl \
284 $BOOK/chapter0?/*chroot*.xml >> $LOGDIR/$LOG 2>&1
285 ;;
286 *)
287 esac
288 echo "done"
289
290}
291
292#----------------------------#
293create_kernfs_scripts() { #
294#----------------------------#
295
296 rm -rf kernfs-scripts
297 mkdir kernfs-scripts
298 echo -n "Creating virtual kernel FS commands scripts from $BOOK"
299 if [ ! -z $ARCH ] ; then echo -n " $ARCH" ; fi
300 echo -n "... "
301 case ${PROGNAME} in
302 clfs*)
303 xsltproc --nonet --xinclude \
304 -o kernfs-scripts/ kernfs.xsl \
305 $BOOK/BOOK/${ARCH}-index.xml >> $LOGDIR/$LOG 2>&1
306 ;;
307 hlfs)
308 xsltproc --nonet --xinclude \
309 -o kernfs-scripts/ kernfs.xsl \
310 $BOOK/index.xml >> $LOGDIR/$LOG 2>&1
311 ;;
312 lfs)
313 xsltproc --nonet \
314 -o kernfs-scripts/devices.sh kernfs.xsl \
315 $BOOK/*/kernfs.xml >> $LOGDIR/$LOG 2>&1
316 xsltproc --nonet \
317 -o kernfs-scripts/teardown.sh kernfs.xsl \
318 $BOOK/chapter09/reboot.xml >> $LOGDIR/$LOG 2>&1
319 ;;
320 *)
321 esac
322 echo "done"
323
324}
Note: See TracBrowser for help on using the repository browser.