Merge branch 'vendor/GCC50'
[dragonfly.git] / sys / contrib / dev / acpica / generate / release / build.sh
1 #!/bin/bash
2
3 #******************************************************************************
4 #
5 # ACPICA package generation script for Cygwin/Windows execution
6 #
7 # Requires cygwin be installed - http://www.cygwin.com
8 # and its /bin be *first* in your path.
9 #
10 # Windows packages require pkzip25 (free, and is available from numerous
11 # sources - search for "pkzip25" or "pkzip25.exe")
12 #
13 # Execute this script from the acpica/generate/release directory.
14 #
15 # Constructed packages are placed in the acpica/generate/release/current
16 # directory.
17 #
18 # Line Terminators: Windows source packages leave the CR/LF terminator.
19 # Unix packages convert the CR/LF terminators to LF only.
20 #
21 # Usage:
22 #
23 #   build <package_type> <target_type>
24 #
25 #   where:
26 #       <package_type> is one of:
27 #           source  - Build an ACPICA source package (core and all tools)
28 #           test    - Build an ACPICA test suite package
29 #           binary  - Build an ACPICA binary tools package
30 #
31 #       <target_type> is one of:
32 #           win     - Generate Windows package (Intel license, CRLF line terminators)
33 #           unix    - Generate Unix package (Intel license, LF line terminators)
34 #           unix2   - Generate Unix package (dual license, LF line terminators)
35 #
36 #******************************************************************************
37
38 # Configuration
39
40 ZIP_UTILITY="/cygdrive/c/windows/pkzip25.exe"
41 ACPISRC="libraries/acpisrc.exe"
42 DOS2UNIX="dos2unix"
43 UNIX2DOS="unix2dos"
44
45 # Filenames and paths
46
47 TARGET_DIR="generate/release/current"
48 TEMP_DIR=acpitemp
49 TEST_PREFIX=acpitests
50 SOURCE_PREFIX=acpica
51 BINARY_PREFIX=iasl
52 PACKAGE_SUFFIX=`date +%Y%m%d`
53
54 NPARAM=$#
55
56
57 #******************************************************************************
58 #
59 # Miscellaneous utility functions
60 #
61 #******************************************************************************
62
63 usage()
64 {
65         echo "$1"
66         echo
67         echo "Low-level build script for ACPICA release packages"
68         echo "Usage:"
69         echo "    $0 source <win | unix | unix2>"
70         echo "    $0 test   <win | unix>"
71         echo "    $0 binary <win>"
72 }
73
74 banner()
75 {
76         echo
77         echo "$1"
78         echo
79 }
80
81 check_zip_utility_exists()
82 {
83         #
84         # Need pkzip (or similar) to build the windows packages
85         #
86         if [ ! -e "$ZIP_UTILITY" ]; then
87                 echo "ZIP_UTILITY ($ZIP_UTILITY) does not exist!"
88                 exit 1
89         fi
90 }
91
92 convert_to_unix_line_terminators()
93 {
94         #
95         # Convert all CR/LF pairs to Unix format (LF only)
96         #
97         cd $TEMP_DIR
98         echo "Starting CR/LF to LF (UNIX) full source conversion"
99         find . -name "*" | xargs $DOS2UNIX -q
100         echo "Completed CR/LF to LF (UNIX) full source conversion"
101         cd ..
102 }
103
104 convert_to_dos_line_terminators()
105 {
106         #
107         # Convert all lone LF terminators to CR/LF
108         # Note: Checks shell scripts only (*.sh)
109         #
110         cd $TEMP_DIR
111         echo "Starting LF to CR/LF (DOS) script conversion"
112         find . -name "*.sh" | xargs $UNIX2DOS -q
113         echo "Completed LF to CR/LF (DOS) script conversion"
114         cd ..
115 }
116
117 insert_dual_license_headers()
118 {
119         #
120         # Need acpisrc utility to insert the headers
121         #
122         if [ ! -e "$ACPISRC" ]; then
123                 echo "acpisrc ($ACPISRC) does not exist!"
124                 exit 1
125         fi
126
127         #
128         # Insert the dual license into *.c and *.h files
129         #
130         echo "Inserting dual-license into all source files"
131         $ACPISRC -h -y $TEMP_DIR
132 }
133
134 build_unix_package()
135 {
136         convert_to_unix_line_terminators
137
138         #
139         # Build release package
140         #
141         rm -r -f $PACKAGE_FILENAME
142         mv $TEMP_DIR $PACKAGE_FILENAME
143         tar czf $PACKAGE_FILENAME.tar.gz $PACKAGE_FILENAME
144
145         #
146         # Move the completed package
147         #
148         mv $PACKAGE_FILENAME.tar.gz $TARGET_DIR
149         mv $PACKAGE_FILENAME $TEMP_DIR
150 }
151
152 build_windows_package()
153 {
154         convert_to_dos_line_terminators
155
156         #
157         # Build release package
158         #
159         cd $TEMP_DIR
160         rm -r -f ../$TARGET_DIR/$PACKAGE_FILENAME
161         $ZIP_UTILITY -silent -add -max -dir -sort=name ../$TARGET_DIR/$PACKAGE_FILENAME
162         cd ..
163 }
164
165
166 #******************************************************************************
167 #
168 # generate_source_package
169 #
170 # Generates the ACPICA source code packages (core and all tools)
171 #
172 # Arguments:
173 #   %1  - Target type (win or unix or unix2)
174 #
175 #******************************************************************************
176
177 generate_source_package ()
178 {
179         #
180         # Parameter evaluation
181         #
182         if [ $1 == win ]; then
183                 PACKAGE_NAME=Windows
184                 PACKAGE_TYPE=Win
185                 LICENSE=Intel
186                 check_zip_utility_exists
187
188         elif [ $1 == unix ]; then
189                 PACKAGE_NAME="Unix (Intel License)"
190                 PACKAGE_TYPE=Unix
191                 LICENSE=Intel
192
193         elif [ $1 == unix2 ]; then
194                 PACKAGE_NAME="Unix (Dual License)"
195                 PACKAGE_TYPE=Unix
196                 LICENSE=Dual
197
198         else
199                 usage "Invalid argument ($1)"
200                 exit 1
201         fi
202
203         PACKAGE_FILENAME=$SOURCE_PREFIX-$1-$PACKAGE_SUFFIX
204         banner "ACPICA - Generating $PACKAGE_NAME source code package ($PACKAGE_FILENAME)"
205
206         #
207         # Make directories common to all source packages
208         #
209         mkdir $TEMP_DIR
210         mkdir $TEMP_DIR/libraries
211         mkdir $TEMP_DIR/generate
212         mkdir $TEMP_DIR/generate/lint
213         mkdir $TEMP_DIR/generate/release
214         mkdir $TEMP_DIR/generate/unix
215         mkdir $TEMP_DIR/generate/unix/acpibin
216         mkdir $TEMP_DIR/generate/unix/acpidump
217         mkdir $TEMP_DIR/generate/unix/acpiexamples
218         mkdir $TEMP_DIR/generate/unix/acpiexec
219         mkdir $TEMP_DIR/generate/unix/acpihelp
220         mkdir $TEMP_DIR/generate/unix/acpinames
221         mkdir $TEMP_DIR/generate/unix/acpisrc
222         mkdir $TEMP_DIR/generate/unix/acpixtract
223         mkdir $TEMP_DIR/generate/unix/iasl
224         mkdir $TEMP_DIR/tests
225         mkdir $TEMP_DIR/tests/misc
226         mkdir $TEMP_DIR/tests/templates
227         mkdir -p $TEMP_DIR/source/os_specific/service_layers
228
229         #
230         # Copy ACPICA subsystem source code
231         #
232         cp -r documents/changes.txt             $TEMP_DIR/changes.txt
233         cp -r source/common                     $TEMP_DIR/source/common
234         cp -r source/components                 $TEMP_DIR/source/
235         cp -r source/include                    $TEMP_DIR/source/include
236         cp -r generate/release/*.sh             $TEMP_DIR/generate/release
237
238         #
239         # Copy iASL compiler and tools source
240         #
241         cp -r source/compiler                   $TEMP_DIR/source/compiler
242         cp -r source/tools                      $TEMP_DIR/source/tools
243
244         #
245         # Copy iASL/ACPICA miscellaneous tests (not full test suites)
246         #
247         cp -r tests/misc/*.asl                  $TEMP_DIR/tests/misc
248         cp -r tests/templates/Makefile          $TEMP_DIR/tests/templates
249         cp -r tests/templates/templates.sh      $TEMP_DIR/tests/templates
250
251         #
252         # Copy all OS-specific interfaces
253         #
254         cp source/os_specific/service_layers/*.c $TEMP_DIR/source/os_specific/service_layers
255
256         #
257         # Copy generic UNIX makefiles
258         #
259     cp Makefile                             $TEMP_DIR
260         cp generate/unix/readme.txt             $TEMP_DIR/generate/unix/readme.txt
261         cp generate/unix/Makefile*              $TEMP_DIR/generate/unix
262         cp generate/unix/acpibin/Makefile       $TEMP_DIR/generate/unix/acpibin
263         cp generate/unix/acpidump/Makefile      $TEMP_DIR/generate/unix/acpidump
264         cp generate/unix/acpiexamples/Makefile  $TEMP_DIR/generate/unix/acpiexamples
265         cp generate/unix/acpiexec/Makefile      $TEMP_DIR/generate/unix/acpiexec
266         cp generate/unix/acpihelp/Makefile      $TEMP_DIR/generate/unix/acpihelp
267         cp generate/unix/acpinames/Makefile     $TEMP_DIR/generate/unix/acpinames
268         cp generate/unix/acpisrc/Makefile       $TEMP_DIR/generate/unix/acpisrc
269         cp generate/unix/acpixtract/Makefile    $TEMP_DIR/generate/unix/acpixtract
270         cp generate/unix/iasl/Makefile          $TEMP_DIR/generate/unix/iasl
271
272         #
273         # Copy Lint directory
274         #
275         cp -r generate/lint $TEMP_DIR/generate
276         rm -f $TEMP_DIR/generate/lint/co*
277         rm -f $TEMP_DIR/generate/lint/env*
278         rm -f $TEMP_DIR/generate/lint/lib*
279         rm -f $TEMP_DIR/generate/lint/LintOut.txt
280
281         if [ $PACKAGE_TYPE == Unix ]; then
282                 #
283                 # Unix/Linux-specific activities
284                 #
285                 # For Unix2 case, insert the dual license header into all source files
286                 #
287                 if [ $LICENSE == Dual ]; then
288                         insert_dual_license_headers
289                 fi
290
291                 build_unix_package
292
293         else
294                 #
295                 # Windows-specific activities
296                 #
297
298                 # Copy project files for MS Visual Studio 2008 (VC++ 9.0)
299
300                 mkdir $TEMP_DIR/generate/msvc9
301                 cp -r generate/msvc9/*.sln $TEMP_DIR/generate/msvc9/
302                 cp -r generate/msvc9/*.vcproj $TEMP_DIR/generate/msvc9/
303
304                 build_windows_package
305         fi
306
307         banner "ACPICA - Completed $PACKAGE_NAME source code package ($PACKAGE_FILENAME)"
308 }
309
310
311 #******************************************************************************
312 #
313 # generate_test_package
314 #
315 # Generates the ACPICA test suite packages
316 #
317 # Arguments:
318 #   %1  - Target type (win or unix)
319 #
320 #******************************************************************************
321
322 generate_test_package()
323 {
324         #
325         # Parameter evaluation
326         #
327         if [ $1 == win ]; then
328                 PACKAGE_NAME=Windows
329                 PACKAGE_TYPE=Win
330                 check_zip_utility_exists
331
332         elif [ $1 == unix ]; then
333                 PACKAGE_NAME="Unix"
334                 PACKAGE_TYPE=Unix
335
336         else
337                 usage "Invalid argument ($1)"
338                 exit 1
339         fi
340
341         PACKAGE_FILENAME=$TEST_PREFIX-$1-$PACKAGE_SUFFIX
342         banner "ACPICA - Generating $PACKAGE_NAME test suite package ($PACKAGE_FILENAME)"
343
344         #
345         # Copy the ASL Test source
346         #
347         mkdir $TEMP_DIR
348         cp -r tests $TEMP_DIR/tests
349
350         #
351         # Delete extraneous files
352         #
353         cd $TEMP_DIR
354         find . -name "tmp" | xargs rm -r -f
355         find . -name "aml" | xargs rm -r -f
356         find . -name "CVS" | xargs rm -r -f
357         cd ..
358
359         if [ $PACKAGE_TYPE == Unix ]; then
360                 #
361                 # Unix/Linux-specific activities
362                 #
363                 build_unix_package
364
365         else
366                 #
367                 # Windows-specific activities
368                 #
369                 build_windows_package
370         fi
371
372         banner "ACPICA - Completed $PACKAGE_NAME test suite package ($PACKAGE_FILENAME)"
373 }
374
375
376 #******************************************************************************
377 #
378 # generate_binary_package
379 #
380 # Generates the ACPICA binary package (Currently Windows only)
381 #
382 # Arguments:
383 #   %1  - Target type (win)
384 #
385 #******************************************************************************
386
387 generate_binary_package()
388 {
389         #
390         # Parameter evaluation
391         #
392         if [ $1 == win ]; then
393                 PACKAGE_NAME=Windows
394                 PACKAGE_TYPE=Win
395                 check_zip_utility_exists
396
397         else
398                 usage "Invalid argument ($1)"
399                 exit 1
400         fi
401
402         PACKAGE_FILENAME=$BINARY_PREFIX-$1-$PACKAGE_SUFFIX
403         banner "ACPICA - Generating $PACKAGE_NAME binary tools package ($PACKAGE_FILENAME)"
404
405         #
406         # Copy executables and documentation
407         #
408         mkdir $TEMP_DIR
409         cp -r documents/changes.txt     $TEMP_DIR/changes.txt
410         cp documents/aslcompiler.pdf    $TEMP_DIR
411         cp libraries/acpibin.exe        $TEMP_DIR
412         cp libraries/acpidump.exe       $TEMP_DIR
413         cp libraries/acpiexec.exe       $TEMP_DIR
414         cp libraries/acpihelp.exe       $TEMP_DIR
415         cp libraries/acpinames.exe      $TEMP_DIR
416         cp libraries/acpisrc.exe        $TEMP_DIR
417         cp libraries/acpixtract.exe     $TEMP_DIR
418         cp libraries/iasl.exe           $TEMP_DIR
419         cp tests/misc/badcode.asl       $TEMP_DIR
420
421         build_windows_package
422         banner "ACPICA - Completed $PACKAGE_NAME binary tools package ($PACKAGE_FILENAME)"
423 }
424
425
426 #******************************************************************************
427 #
428 # main
429 #
430 # Arguments:
431 #       $1 (package_type) is one of:
432 #           source  - Build an ACPICA source package (core and all tools)
433 #           test    - Build an ACPICA test suite package
434 #           binary  - Build an ACPICA binary tools package
435 #
436 #       $2 (target_type) is one of:
437 #           win     - Generate Windows package (Intel license, CRLF line terminators)
438 #           unix    - Generate Unix package (Intel license, LF line terminators)
439 #           unix2   - Generate Unix package (dual license, LF line terminators)
440 #
441 #******************************************************************************
442
443 set -e          # Abort on any error
444
445 if [ $NPARAM -ne 2 ]; then
446         usage "Wrong argument count ($NPARAM)"
447         exit 1
448 fi
449
450 #
451 # cd from acpica/generate/release to acpica
452 #
453 cd ../..
454
455 #
456 # Ensure that the temporary directory is created fresh
457 #
458 rm -rf $TEMP_DIR
459                 
460 #
461 # Parameter evaluation
462 #
463 if [ $1 == source ]; then
464         generate_source_package $2
465
466 elif [ $1 == test ]; then
467         generate_test_package $2
468
469 elif [ $1 == binary ]; then
470         generate_binary_package $2
471
472 else
473         usage "Invalid argument ($1)"
474         exit 1
475 fi
476
477 #
478 # Remove temporary directory
479 #
480 rm -rf $TEMP_DIR