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