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_dbg.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/acpisrc 221 mkdir $TEMP_DIR/generate/unix/acpixtract 222 mkdir $TEMP_DIR/generate/unix/iasl 223 mkdir $TEMP_DIR/tests 224 mkdir $TEMP_DIR/tests/misc 225 mkdir $TEMP_DIR/tests/templates 226 mkdir -p $TEMP_DIR/source/os_specific/service_layers 227 228 # 229 # Copy ACPICA subsystem source code 230 # 231 cp -r documents/changes.txt $TEMP_DIR/changes.txt 232 cp -r source/common $TEMP_DIR/source/common 233 cp -r source/components $TEMP_DIR/source/ 234 cp -r source/include $TEMP_DIR/source/include 235 cp -r generate/release/*.sh $TEMP_DIR/generate/release 236 237 # 238 # Copy iASL compiler and tools source 239 # 240 cp -r source/compiler $TEMP_DIR/source/compiler 241 cp -r source/tools $TEMP_DIR/source/tools 242 243 # 244 # Copy iASL/ACPICA miscellaneous tests (not full test suites) 245 # 246 cp -r tests/misc/*.asl $TEMP_DIR/tests/misc 247 cp -r tests/templates/Makefile $TEMP_DIR/tests/templates 248 cp -r tests/templates/templates.sh $TEMP_DIR/tests/templates 249 250 # 251 # Copy all OS-specific interfaces 252 # 253 cp source/os_specific/service_layers/*.c $TEMP_DIR/source/os_specific/service_layers 254 255 # 256 # Copy generic UNIX makefiles 257 # 258 cp Makefile $TEMP_DIR 259 cp generate/unix/readme.txt $TEMP_DIR/generate/unix/readme.txt 260 cp generate/unix/Makefile* $TEMP_DIR/generate/unix 261 cp generate/unix/acpibin/Makefile $TEMP_DIR/generate/unix/acpibin 262 cp generate/unix/acpidump/Makefile $TEMP_DIR/generate/unix/acpidump 263 cp generate/unix/acpiexamples/Makefile $TEMP_DIR/generate/unix/acpiexamples 264 cp generate/unix/acpiexec/Makefile $TEMP_DIR/generate/unix/acpiexec 265 cp generate/unix/acpihelp/Makefile $TEMP_DIR/generate/unix/acpihelp 266 cp generate/unix/acpisrc/Makefile $TEMP_DIR/generate/unix/acpisrc 267 cp generate/unix/acpixtract/Makefile $TEMP_DIR/generate/unix/acpixtract 268 cp generate/unix/iasl/Makefile $TEMP_DIR/generate/unix/iasl 269 270 # 271 # Copy Lint directory 272 # 273 cp -r generate/lint $TEMP_DIR/generate 274 rm -f $TEMP_DIR/generate/lint/co* 275 rm -f $TEMP_DIR/generate/lint/env* 276 rm -f $TEMP_DIR/generate/lint/lib* 277 rm -f $TEMP_DIR/generate/lint/LintOut.txt 278 279 if [ $PACKAGE_TYPE == Unix ]; then 280 # 281 # Unix/Linux-specific activities 282 # 283 # For Unix2 case, insert the dual license header into all source files 284 # 285 if [ $LICENSE == Dual ]; then 286 insert_dual_license_headers 287 fi 288 289 build_unix_package 290 291 else 292 # 293 # Windows-specific activities 294 # 295 296 # Copy project files for MS Visual Studio 2017 297 298 mkdir $TEMP_DIR/generate/msvc2017 299 cp -r generate/msvc2017/*.sln $TEMP_DIR/generate/msvc2017/ 300 cp -r generate/msvc2017/*.dsp $TEMP_DIR/generate/msvc2017/ 301 cp -r generate/msvc2017/*.dsw $TEMP_DIR/generate/msvc2017/ 302 cp -r generate/msvc2017/*.vcxproj $TEMP_DIR/generate/msvc2017/ 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 libraries/acpibin.exe $TEMP_DIR 411 cp libraries/acpidump.exe $TEMP_DIR 412 cp libraries/acpiexec.exe $TEMP_DIR 413 cp libraries/acpihelp.exe $TEMP_DIR 414 cp libraries/acpisrc.exe $TEMP_DIR 415 cp libraries/acpixtract.exe $TEMP_DIR 416 cp libraries/iasl.exe $TEMP_DIR 417 cp tests/misc/badcode.asl $TEMP_DIR 418 419 build_windows_package 420 banner "ACPICA - Completed $PACKAGE_NAME binary tools package ($PACKAGE_FILENAME)" 421 } 422 423 424 #****************************************************************************** 425 # 426 # main 427 # 428 # Arguments: 429 # $1 (package_type) is one of: 430 # source - Build an ACPICA source package (core and all tools) 431 # test - Build an ACPICA test suite package 432 # binary - Build an ACPICA binary tools package 433 # 434 # $2 (target_type) is one of: 435 # win - Generate Windows package (Intel license, CRLF line terminators) 436 # unix - Generate Unix package (Intel license, LF line terminators) 437 # unix2 - Generate Unix package (dual license, LF line terminators) 438 # 439 #****************************************************************************** 440 441 set -e # Abort on any error 442 443 if [ $NPARAM -ne 2 ]; then 444 usage "Wrong argument count ($NPARAM)" 445 exit 1 446 fi 447 448 # 449 # cd from acpica/generate/release to acpica 450 # 451 cd ../.. 452 453 # 454 # Ensure that the temporary directory is created fresh 455 # 456 rm -rf $TEMP_DIR 457 458 # 459 # Parameter evaluation 460 # 461 if [ $1 == source ]; then 462 generate_source_package $2 463 464 elif [ $1 == test ]; then 465 generate_test_package $2 466 467 elif [ $1 == binary ]; then 468 generate_binary_package $2 469 470 else 471 usage "Invalid argument ($1)" 472 exit 1 473 fi 474 475 # 476 # Remove temporary directory 477 # 478 rm -rf $TEMP_DIR 479