github.com/apptainer/singularity@v3.1.1+incompatible/mconfig (about) 1 #!/bin/sh - 2 # Copyright (c) 2019, Sylabs Inc. All rights reserved. 3 # Copyright (c) 2015-2018, Yannick Cote <yhcote@gmail.com>. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be found 5 # in the LICENSE file. 6 set -e 7 8 verbose=0 9 profile=release 10 11 lang_c=1 12 lang_go=1 13 14 hstcc= 15 hstcc_opts="cc gcc clang i686-w64-mingw32-gcc x86_64-w64-mingw32-gcc" 16 hstcxx= 17 hstcxx_opts="c++ g++ clang++ i686-w64-mingw32-g++ x86_64-w64-mingw32-g++" 18 hstar= 19 hstld= 20 hstranlib= 21 hstobjcopy= 22 23 tgtcc= 24 tgtcc_opts=$hstcc_opts 25 tgtcxx= 26 tgtcxx_opts=$hstcxx_opts 27 tgtar= 28 tgtld= 29 tgtranlib= 30 tgtobjcopy= 31 32 hststatic=0 33 tgtstatic=0 34 35 # user_cflags - user-defined CFLAGS without all the cflags_opts 36 user_cflags="$CFLAGS" 37 cflags_opts="-Wall -Werror -Wfatal-errors -Wno-unknown-warning-option \ 38 -Wstrict-prototypes -Wpointer-arith -Wbad-function-cast \ 39 -Woverlength-strings -Wframe-larger-than=2047 \ 40 -Wno-sign-compare -Wclobbered -Wempty-body -Wmissing-parameter-type \ 41 -Wtype-limits -Wunused-parameter -Wunused-but-set-parameter \ 42 -Wno-discarded-qualifiers -Wno-incompatible-pointer-types \ 43 -pipe -fmessage-length=0 -fPIC" 44 cflags="$CFLAGS -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fstack-protector --param ssp-buffer-size=4" 45 ldflags=$LDFLAGS 46 47 package_name=singularity 48 package_version=`(git describe --match 'v[0-9]*' --dirty --always 2>/dev/null || cat VERSION 2>/dev/null || echo "") | sed -e "s/^v//;s/-/_/g;s/_/-/;s/_/./g"` 49 50 with_network=1 51 with_suid=1 52 53 prefix= 54 exec_prefix= 55 bindir= 56 sbindir= 57 libexecdir= 58 datarootdir= 59 datadir= 60 sysconfdir= 61 sharedstatedir= 62 localstatedir= 63 runstatedir= 64 includedir= 65 oldincludedir= 66 docdir= 67 infodir= 68 htmldir= 69 dvidir= 70 pdfdir= 71 psdir= 72 libdir= 73 localedir= 74 mandir= 75 76 77 usage () { 78 echo "${0##*/}: could not complete configuration" 79 } 80 81 usage_args () { 82 echo "Usage: ${0##*/} [-vsS] [-P profile] [-b builddir] [-c hstcc] [-C tgtcc]" 83 echo " [-V version] [-x hstcxx] [-X tgtcxx]" 84 echo " [--INSTALLDIR=ARG (see below)]" 85 echo 86 echo " Makeit general options:" 87 echo " -v build project with verbose flags on" 88 echo " -s build final host project binary statically" 89 echo " -S build final target project binary statically" 90 echo " -P use config profile to configure the project:" 91 echo " *release normal release mode (production)" 92 echo " release-stripped release mode, stripped symbols (rpm packaging)" 93 echo " debug CGO objects built unoptimized, with symbols" 94 echo " -b build project in \`builddir'" 95 echo " -c build project with host C \`compiler'" 96 echo " -C build project with target C\`compiler'" 97 echo " -V build project with given version" 98 echo " -x build project with host C++ \`compiler'" 99 echo " -X build project with target C++ \`compiler'" 100 echo " -l build project with source code language (-l C -l Go ...)" 101 echo " -h this help" 102 echo 103 echo " Singularity options:" 104 echo " --without-suid do not install SUID binary (linux only)" 105 echo " --without-network do not compile/install network plugins (linux only)" 106 echo 107 echo " Path modification options:" 108 echo " --prefix install project in \`prefix'" 109 echo " --exec-prefix install project executables in \`exec-prefix'" 110 echo " --bindir install user executables in \`bindir'" 111 echo " --sbindir install admin executables in \`sbindir'" 112 echo " --libexecdir install program executables in \`libexecdir'" 113 echo " --datarootdir install read-only rootdir data in \`datarootdir'" 114 echo " --datadir install read-only data in \`datadir'" 115 echo " --sysconfdir install read-only config files in \`sysconfdir'" 116 echo " --sharedstatedir install writable data in \`sharedstatedir'" 117 echo " --localstatedir install writable config files in \`localstatedir'" 118 echo " --runstatedir install writable per-process data in \`runstatedir'" 119 echo " --includedir install header files in \`includedir'" 120 echo " --oldincludedir install system header files in \`oldincludedir'" 121 echo " --docdir install root documentation in \`docdir'" 122 echo " --infodir install info documentation in \`infodir'" 123 echo " --htmldir install html documentation in \`htmldir'" 124 echo " --dvidir install dvi documentation in \`dvidir'" 125 echo " --pdfdir install pdf documentation in \`pdfdir'" 126 echo " --psdir install ps documentation in \`psdir'" 127 echo " --libdir install libraries in \`libdir'" 128 echo " --localedir install locale dependent data in \`localedir'" 129 echo " --mandir install man documentation in \`mandir'" 130 echo 131 } 132 133 # save the command line 134 cmdline="`pwd -P`/${0##*/} $*" 135 136 while [ $# -ne 0 ]; do 137 case $1 in 138 -p|--prefix*) 139 if [ "$1" = "-p" ]; then 140 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 141 echo "error: option requires an argument: $1" 142 exit 143 fi 144 prefix=$2 145 shift 146 else 147 if echo "$1" | awk '/^--prefix=.+$/ { exit 2 }'; then 148 echo "error: option requires an argument: $1" 149 exit 150 fi 151 prefix=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 152 fi 153 shift;; 154 -e|--exec-prefix*) 155 if [ "$1" = "-e" ]; then 156 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 157 echo "error: option requires an argument: $1" 158 exit 159 fi 160 exec_prefix=$2 161 shift 162 else 163 if echo "$1" | awk '/^--exec-prefix=.+$/ { exit 2 }'; then 164 echo "error: option requires an argument: $1" 165 exit 166 fi 167 exec_prefix=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 168 fi 169 shift;; 170 --bindir*) 171 if echo "$1" | awk '/^--bindir=.+$/ { exit 2 }'; then 172 echo "error: option requires an argument: $1" 173 exit 174 fi 175 bindir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 176 shift;; 177 --sbindir*) 178 if echo "$1" | awk '/^--sbindir=.+$/ { exit 2 }'; then 179 echo "error: option requires an argument: $1" 180 exit 181 fi 182 sbindir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 183 shift;; 184 --libexecdir*) 185 if echo "$1" | awk '/^--libexecdir=.+$/ { exit 2 }'; then 186 echo "error: option requires an argument: $1" 187 exit 188 fi 189 libexecdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 190 shift;; 191 --datarootdir*) 192 if echo "$1" | awk '/^--datarootdir=.+$/ { exit 2 }'; then 193 echo "error: option requires an argument: $1" 194 exit 195 fi 196 datarootdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 197 shift;; 198 --datadir*) 199 if echo "$1" | awk '/^--datadir=.+$/ { exit 2 }'; then 200 echo "error: option requires an argument: $1" 201 exit 202 fi 203 datadir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 204 shift;; 205 --sysconfdir*) 206 if echo "$1" | awk '/^--sysconfdir=.+$/ { exit 2 }'; then 207 echo "error: option requires an argument: $1" 208 exit 209 fi 210 sysconfdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 211 shift;; 212 --sharedstatedir*) 213 if echo "$1" | awk '/^--sharedstatedir=.+$/ { exit 2 }'; then 214 echo "error: option requires an argument: $1" 215 exit 216 fi 217 sharedstatedir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 218 shift;; 219 --localstatedir*) 220 if echo "$1" | awk '/^--localstatedir=.+$/ { exit 2 }'; then 221 echo "error: option requires an argument: $1" 222 exit 223 fi 224 localstatedir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 225 shift;; 226 --runstatedir*) 227 if echo "$1" | awk '/^--runstatedir=.+$/ { exit 2 }'; then 228 echo "error: option requires an argument: $1" 229 exit 230 fi 231 runstatedir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 232 shift;; 233 --includedir*) 234 if echo "$1" | awk '/^--includedir=.+$/ { exit 2 }'; then 235 echo "error: option requires an argument: $1" 236 exit 237 fi 238 includedir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 239 shift;; 240 --oldincludedir*) 241 if echo "$1" | awk '/^--oldincludedir=.+$/ { exit 2 }'; then 242 echo "error: option requires an argument: $1" 243 exit 244 fi 245 oldincludedir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 246 shift;; 247 --docdir*) 248 if echo "$1" | awk '/^--docdir=.+$/ { exit 2 }'; then 249 echo "error: option requires an argument: $1" 250 exit 251 fi 252 docdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 253 shift;; 254 --infodir*) 255 if echo "$1" | awk '/^--infodir=.+$/ { exit 2 }'; then 256 echo "error: option requires an argument: $1" 257 exit 258 fi 259 infodir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 260 shift;; 261 --htmldir*) 262 if echo "$1" | awk '/^--htmldir=.+$/ { exit 2 }'; then 263 echo "error: option requires an argument: $1" 264 exit 265 fi 266 htmldir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 267 shift;; 268 --dvidir*) 269 if echo "$1" | awk '/^--dvidir=.+$/ { exit 2 }'; then 270 echo "error: option requires an argument: $1" 271 exit 272 fi 273 dvidir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 274 shift;; 275 --pdfdir*) 276 if echo "$1" | awk '/^--pdfdir=.+$/ { exit 2 }'; then 277 echo "error: option requires an argument: $1" 278 exit 279 fi 280 pdfdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 281 shift;; 282 --psdir*) 283 if echo "$1" | awk '/^--psdir=.+$/ { exit 2 }'; then 284 echo "error: option requires an argument: $1" 285 exit 286 fi 287 psdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 288 shift;; 289 --libdir*) 290 if echo "$1" | awk '/^--libdir=.+$/ { exit 2 }'; then 291 echo "error: option requires an argument: $1" 292 exit 293 fi 294 libdir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 295 shift;; 296 --localedir*) 297 if echo "$1" | awk '/^--localedir=.+$/ { exit 2 }'; then 298 echo "error: option requires an argument: $1" 299 exit 300 fi 301 localedir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 302 shift;; 303 --mandir*) 304 if echo "$1" | awk '/^--mandir=.+$/ { exit 2 }'; then 305 echo "error: option requires an argument: $1" 306 exit 307 fi 308 mandir=`echo $1 | sed -e 's|.*\=\(.*\)|\1|'` 309 shift;; 310 -P) 311 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 312 echo "error: option requires an argument: $1" 313 exit 314 fi 315 profile=$2; shift; shift;; 316 -b) 317 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 318 echo "error: option requires an argument: $1" 319 exit 320 fi 321 builddir="$2"; shift; shift;; 322 -c) 323 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 324 echo "error: option requires an argument: $1" 325 exit 326 fi 327 hstcc="$2"; shift; shift;; 328 -C) 329 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 330 echo "error: option requires an argument: $1" 331 exit 332 fi 333 tgtcc="$2"; shift; shift;; 334 -x) 335 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 336 echo "error: option requires an argument: $1" 337 exit 338 fi 339 hstcxx="$2"; shift; shift;; 340 -X) 341 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 342 echo "error: option requires an argument: $1" 343 exit 344 fi 345 tgtcxx="$2"; shift; shift;; 346 -s) 347 hststatic=1; shift;; 348 -S) 349 tgtstatic=1; shift;; 350 -v) 351 verbose=1; shift;; 352 --without-suid) 353 with_suid=0; shift;; 354 --without-network) 355 with_network=0; shift;; 356 -V) 357 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 358 echo "error: option requires an argument: $1" 359 exit 360 fi 361 package_version="$2"; shift; shift;; 362 -l) 363 if ! echo "$2" | awk '/^-.*/ || /^$/ { exit 2 }'; then 364 echo "error: option requires an argument: $1" 365 exit 366 fi 367 case "$2" in 368 c|C) lang_c=1;; 369 go|GO|Go|Golang) lang_go=1;; 370 *) echo "error: language not supported: $2" 371 exit;; 372 esac 373 shift; shift;; 374 -h) usage_args; exit 2;; 375 --) shift; break;; 376 ?) usage_args 377 exit 2;; 378 *) break;; 379 esac 380 done 381 short_version="`echo "$package_version"|sed 's/-.*//'`" 382 # 383 # non-option param 384 if [ $# != 0 ]; then 385 usage_args 386 exit 2 387 fi 388 389 # defaults paths 390 if [ -z "${prefix}" ]; then 391 prefix=/usr/local 392 fi 393 if [ -z "${exec_prefix}" ]; then 394 exec_prefix=${prefix} 395 fi 396 if [ -z "${bindir}" ]; then 397 bindir=${exec_prefix}/bin 398 fi 399 if [ -z "${sbindir}" ]; then 400 sbindir=${exec_prefix}/sbin 401 fi 402 if [ -z "${libexecdir}" ]; then 403 libexecdir=${exec_prefix}/libexec 404 fi 405 if [ -z "${datarootdir}" ]; then 406 datarootdir=${prefix}/share 407 fi 408 if [ -z "${datadir}" ]; then 409 datadir=${datarootdir} 410 fi 411 if [ -z "${sysconfdir}" ]; then 412 sysconfdir=${prefix}/etc 413 fi 414 if [ -z "${sharedstatedir}" ]; then 415 sharedstatedir=${prefix}/com 416 fi 417 if [ -z "${localstatedir}" ]; then 418 localstatedir=${prefix}/var 419 fi 420 if [ -z "${runstatedir}" ]; then 421 runstatedir=${localstatedir}/run 422 fi 423 if [ -z "${includedir}" ]; then 424 includedir=${prefix}/include 425 fi 426 if [ -z "${oldincludedir}" ]; then 427 oldincludedir=/usr/include 428 fi 429 if [ -z "${docdir}" ]; then 430 docdir=${datarootdir}/doc/${package_name} 431 fi 432 if [ -z "${infodir}" ]; then 433 infodir=${datarootdir}/info 434 fi 435 if [ -z "${htmldir}" ]; then 436 htmldir=${docdir} 437 fi 438 if [ -z "${dvidir}" ]; then 439 dvidir=${docdir} 440 fi 441 if [ -z "${pdfdir}" ]; then 442 pdfdir=${docdir} 443 fi 444 if [ -z "${psdir}" ]; then 445 psdir=${docdir} 446 fi 447 if [ -z "${libdir}" ]; then 448 libdir=${exec_prefix}/lib 449 fi 450 if [ -z "${localedir}" ]; then 451 localedir=${datarootdir}/locale 452 fi 453 if [ -z "${mandir}" ]; then 454 mandir=${datarootdir}/man 455 fi 456 457 # check that at least a language is selected 458 if [ $lang_c -eq 0 -a $lang_go -eq 0 ]; then 459 echo "error: no project source code language selected" 460 echo "NOTE: use ${0##*/} with the [-l (C,Go,...) option]" 461 exit 2 462 fi 463 464 # config profile validation 465 case $profile in 466 release);; 467 release-stripped);; 468 debug);; 469 *) echo "$profile: no such config profile" 470 echo " -P use config profile to configure the project:" 471 echo " release (DEFAULT) normal release mode (production)" 472 echo " release-stripped release mode, stripped symbols (rpm packaging)" 473 echo " debug C portion of CGO built unoptimized, with symbols" 474 exit 2;; 475 esac 476 477 # sourcedir and builddir 478 sourcedir=`pwd -P` 479 if [ "$builddir" = "" ]; then 480 builddir=$sourcedir/builddir 481 else 482 mkdir -p $builddir 483 if ! builddir=`(cd $builddir 2>/dev/null && pwd -P)`; then 484 echo "error: could not chdir to builddir" 485 exit 2 486 fi 487 fi 488 if [ -e $builddir -a $builddir != "." -a $builddir != ".." ]; then 489 rm -rf $builddir 490 fi 491 492 # setup some makeit base directories 493 makeit_dir=$sourcedir/makeit 494 makeit_mconflist=$sourcedir/mlocal/mconflist 495 makeit_fragsdir=$sourcedir/mlocal/frags 496 makeit_checksdir=$sourcedir/mlocal/checks 497 makeit_scriptsdir=$sourcedir/mlocal/scripts 498 # mconfig tmpfiles path 499 makeit_interdir=$builddir/makeit-intermediate 500 makeit_testprogdir=$makeit_interdir/testprogs 501 # final generated Makefile 502 makeit_makefile=$builddir/Makefile 503 makeit_makefile_base=$makeit_interdir/base.mk 504 505 # work directory and file creation 506 mkdir -p $builddir 507 mkdir -p $makeit_interdir 508 mkdir -p $makeit_testprogdir 509 :>$makeit_makefile_base 510 511 512 # load mconfig helper scripts 513 . $makeit_scriptsdir/config_h.sh #functions to add entries in config.h (C projects) 514 515 516 printf "Configuring for project \`$package_name' with languages: " 517 if [ $lang_c -eq 1 ]; then 518 printf "C" 519 fi 520 if [ $lang_go -eq 1 ]; then 521 printf ", Golang" 522 fi 523 echo 524 525 ####################################################################### 526 # mlocal/checks/project-pre.chk -- executes before standard base checks 527 ####################################################################### 528 if [ -f $makeit_checksdir/project-pre.chk ]; then 529 echo "=> running pre-basechecks project specific checks ..." 530 . $makeit_checksdir/project-pre.chk 531 fi 532 533 534 ####################################################################### 535 # mlocal/checks/basechecks.chk -- common to most projects 536 ####################################################################### 537 if [ -f $makeit_checksdir/basechecks.chk ]; then 538 echo "=> running base system checks ..." 539 . $makeit_checksdir/basechecks.chk 540 else 541 echo "error: file $makeit_checksdir/basechecks.chk needs to be present" 542 exit 2 543 fi 544 545 546 ####################################################################### 547 # mlocal/checks/project-post.chk -- executes after standard base checks 548 ####################################################################### 549 if [ -f $makeit_checksdir/project-post.chk ]; then 550 echo "=> running post-basechecks project specific checks ..." 551 . $makeit_checksdir/project-post.chk 552 fi 553 554 555 ####################################################################### 556 # Generated fragments 557 ####################################################################### 558 echo "=> generating fragments ..." 559 if [ ! -d $makeit_fragsdir ]; then 560 echo "error: $makeit_fragsdir should be populated with Makefile fragments." 561 echo "NOTE: Fragments may be copied from examples or existing projects" 562 echo "NOTE: to $sourcedir/mlocal/* and tweak for your project." 563 exit 2 564 fi 565 566 567 ######################## 568 # verbosity 569 ######################## 570 if [ "$verbose" = 1 ]; then 571 echo "# build with verbose flag on" >> $makeit_makefile_base 572 echo "V :=" >> $makeit_makefile_base 573 else 574 echo "# silent build" >> $makeit_makefile_base 575 echo "V := @" >> $makeit_makefile_base 576 fi 577 echo >> $makeit_makefile_base 578 579 # disable those options for non unix system 580 if [ "$host" != "unix" ]; then 581 with_network=0 582 with_suid=0 583 fi 584 585 ######################## 586 # build tools 587 ######################## 588 cat >> $makeit_makefile_base << EOF 589 # source/build locations 590 BUILDDIR := . 591 BUILDDIR_ABSPATH := $builddir 592 SOURCEDIR := $sourcedir 593 SCRIPTSDIR := $makeit_scriptsdir 594 CONTRIBDIR := $contribdir 595 PREFIX := $prefix 596 EXECPREFIX := $exec_prefix 597 BINDIR := $bindir 598 SBINDIR := $sbindir 599 LIBEXECDIR := $libexecdir 600 DATAROOTDIR := $datarootdir 601 DATADIR := $datadir 602 SYSCONFDIR := $sysconfdir 603 SHAREDSTATEDIR := $sharedstatedir 604 LOCALSTATEDIR := $localstatedir 605 RUNSTATEDIR := $runstatedir 606 INCLUDEDIR := $includedir 607 OLDINCLUDEDIR := $oldincludedir 608 DOCDIR := $docdir 609 INFODIR := $infodir 610 HTMLDIR := $htmldir 611 DVIDIR := $dvidir 612 PDFDIR := $pdfdir 613 PSDIR := $psdir 614 LIBDIR := $libdir 615 LOCALEDIR := $localedir 616 MANDIR := $mandir 617 RPMPREFIX:= 618 619 NAME := $package_name 620 SHORT_VERSION := $short_version 621 VERSION := $package_version 622 623 HOSTAR := $hstar 624 HOSTCC := $hstcc 625 HOSTCXX := $hstcxx 626 HOSTLD := $hstcc 627 HOSTRANLIB := $hstranlib 628 HOSTSIZE := size 629 HOSTOBJCOPY := $hstobjcopy 630 631 AR := $tgtar 632 CC := $tgtcc 633 CXX := $tgtcxx 634 LD := $tgtld 635 RANLIB := $tgtranlib 636 SIZE := size 637 OBJCOPY := $tgtobjcopy 638 639 ARCH := $tgt_arch 640 641 CFLAGS := $cflags 642 643 CGO_CFLAGS := -include $builddir/config.h $CGO_CFLAGS 644 CGO_LDFLAGS := $CGO_LDFLAGS 645 CGO_CPPFLAGS := $CGO_CPPFLAGS 646 CGO_CXXFLAGS := $CGO_CXXFLAGS 647 export CGO_CFLAGS CGO_LDFLAGS CGO_CPPFLAGS CGO_CXXFLAGS 648 EOF 649 650 651 ######################## 652 # modules 653 ######################## 654 :>$makeit_interdir/module.lst 655 656 found_modules=`(cat $makeit_mconflist | awk '{ printf("%s ", $0) }') 2>/dev/null || true` 657 if [ "$found_modules" = "" ]; then 658 found_modules=`find . -name '*.mconf' -print` 659 fi 660 661 if [ "$found_modules" != "" ]; then 662 echo " found build modules:" 663 echo "CPPFLAGS :=" >> $makeit_makefile_base 664 # NOTE: parsed module (*.mconf) files only substitute var tgt_arch for now 665 for m in $found_modules; do 666 mod=`eval echo ${m##*./}` 667 modpath=`eval echo ${mod%/*}` 668 if [ ! -f $mod ]; then 669 echo "error: module file \`$mod' not found!" 670 exit 2 671 fi 672 if [ $mod = $modpath ]; then 673 modpath="." 674 fi 675 676 echo " +-> $mod" 677 echo "$modpath `eval basename $mod`" >> $makeit_interdir/module.lst 678 mkdir -p $makeit_interdir/$modpath 679 cat $mod | awk -v tgt_arch=$tgt_arch '{ gsub(/tgt_arch/, tgt_arch); print }' > \ 680 $makeit_interdir/${mod}.parsed 681 done 682 echo >> $makeit_makefile_base 683 fi 684 685 # init LDFLAGS if static builds are supported 686 if [ "$hststatic" = "1" -a "$tgtstatic" = "1" ]; then 687 echo "LDFLAGS := -static $ldflags" >> $makeit_makefile_base 688 else 689 echo "LDFLAGS := $ldflags" >> $makeit_makefile_base 690 fi 691 echo >> $makeit_makefile_base 692 693 cat >> $makeit_makefile_base << EOF 694 # make sure \`all' is the first rule 695 all: 696 EOF 697 698 699 # call genmod.awk, generating Makefile components 700 $makeit_dir/genmod.awk mconflist=$makeit_interdir/module.lst \ 701 host=$host \ 702 makeitgendir=$makeit_interdir \ 703 tmpldir=$makeit_dir/tmpl 704 705 706 707 ####################################################################### 708 # Target Makefile 709 ####################################################################### 710 drawline () { 711 echo >> $makeit_makefile 712 printf "# [ Embedding file : %50s ] #\n" $1 >> $makeit_makefile 713 echo >> $makeit_makefile 714 } 715 716 echo "=> building Makefile ..." 717 718 :> $makeit_makefile 719 echo "#" >> $makeit_makefile 720 echo "# Non-recursive Makefile GENERATED by \`${0##*/}' -- `date`" >> $makeit_makefile 721 echo "# configured: $cmdline" >> $makeit_makefile 722 echo "#" >> $makeit_makefile 723 724 drawline $makeit_makefile_base 725 cat $makeit_makefile_base >> $makeit_makefile 726 727 drawline $makeit_fragsdir/common_opts.mk 728 cat $makeit_fragsdir/common_opts.mk >> $makeit_makefile 729 730 drawline $makeit_fragsdir/go_common_opts.mk 731 cat $makeit_fragsdir/go_common_opts.mk >> $makeit_makefile 732 733 if [ -f "$makeit_fragsdir/go_${host}_opts.mk" ]; then 734 drawline $makeit_fragsdir/go_${host}_opts.mk 735 cat $makeit_fragsdir/go_${host}_opts.mk >> $makeit_makefile 736 fi 737 738 if [ "$appsec" = "1" ]; then 739 drawline $makeit_fragsdir/go_appsec_opts.mk 740 cat $makeit_fragsdir/go_appsec_opts.mk >> $makeit_makefile 741 fi 742 743 if [ "$build_runtime" = "1" ]; then 744 drawline $makeit_fragsdir/go_runtime_opts.mk 745 cat $makeit_fragsdir/go_runtime_opts.mk >> $makeit_makefile 746 fi 747 748 749 case $profile in 750 release) 751 if [ $lang_c -eq 1 ]; then 752 drawline $makeit_fragsdir/release_opts.mk 753 cat $makeit_fragsdir/release_opts.mk >> $makeit_makefile 754 fi 755 if [ $lang_go -eq 1 ]; then 756 drawline $makeit_fragsdir/go_normal_opts.mk 757 cat $makeit_fragsdir/go_normal_opts.mk >> $makeit_makefile 758 fi 759 ;; 760 release-stripped) 761 if [ $lang_c -eq 1 ]; then 762 drawline $makeit_fragsdir/release_opts.mk 763 cat $makeit_fragsdir/release_opts.mk >> $makeit_makefile 764 fi 765 if [ $lang_go -eq 1 ]; then 766 drawline $makeit_fragsdir/go_stripped_opts.mk 767 cat $makeit_fragsdir/go_stripped_opts.mk >> $makeit_makefile 768 fi 769 ;; 770 debug) 771 if [ $lang_c -eq 1 ]; then 772 drawline $makeit_fragsdir/debug_opts.mk 773 cat $makeit_fragsdir/debug_opts.mk >> $makeit_makefile 774 fi 775 if [ $lang_go -eq 1 ]; then 776 drawline $makeit_fragsdir/go_normal_opts.mk 777 cat $makeit_fragsdir/go_normal_opts.mk >> $makeit_makefile 778 fi 779 ;; 780 esac 781 782 if [ -f "$makeit_fragsdir/arch_${tgt_arch}_opts.mk" ]; then 783 drawline $makeit_fragsdir/arch_${tgt_arch}_opts.mk 784 cat $makeit_fragsdir/arch_${tgt_arch}_opts.mk >> $makeit_makefile 785 fi 786 787 drawline $makeit_interdir/combined-mconfsready.mk 788 cat $makeit_interdir/combined-mconfsready.mk >> $makeit_makefile 789 790 drawline $makeit_interdir/all.mk 791 cat $makeit_interdir/all.mk >> $makeit_makefile 792 793 drawline $makeit_fragsdir/build_cli.mk 794 cat $makeit_fragsdir/build_cli.mk >> $makeit_makefile 795 796 if [ "$build_runtime" = 1 ]; then 797 drawline $makeit_fragsdir/build_runtime.mk 798 cat $makeit_fragsdir/build_runtime.mk >> $makeit_makefile 799 fi 800 801 if [ "$with_suid" = 1 ]; then 802 drawline $makeit_fragsdir/build_runtime_suid.mk 803 cat $makeit_fragsdir/build_runtime_suid.mk >> $makeit_makefile 804 fi 805 806 if [ "$with_network" = 1 ]; then 807 drawline $makeit_fragsdir/build_network.mk 808 cat $makeit_fragsdir/build_network.mk >> $makeit_makefile 809 fi 810 811 drawline $makeit_fragsdir/Makefile.stub 812 # here, `depends' need to happen after all other rules; at the very end 813 final_all=`cat $makeit_interdir/all.mk | awk 'BEGIN { FS="all: " } { print $2 }'` 814 cat $makeit_fragsdir/Makefile.stub | awk \ 815 "{ gsub(/^collect:/, \"collect: $final_all\"); print }" >> $makeit_makefile 816 817 818 819 ####################################################################### 820 # Rpm spec for project package 821 ####################################################################### 822 823 if [ "$host" = "unix" ]; then 824 RPMSPEC=singularity.spec 825 echo "=> generating $RPMSPEC ..." 826 rm -f $sourcedir/$RPMSPEC 827 release="`echo "$package_version"|sed 's/[^-]*-//'`" 828 if [ "$short_version" = "$release" ]; then 829 # $package_version has no dash 830 release=1 831 fi 832 sed "s/@PACKAGE_VERSION@/$short_version/;s/@PACKAGE_RELEASE@/$release/" $sourcedir/dist/rpm/$RPMSPEC.in >$sourcedir/$RPMSPEC 833 fi 834 835 836 837 ####################################################################### 838 # Configuration results 839 ####################################################################### 840 echo "=> project $package_name setup with :" 841 echo " - host arch: $hst_arch" 842 echo " - host wordsize: ${hst_word}-bit" 843 echo " - host C compiler: $hstcc" 844 echo " - host system: $host" 845 echo " ---" 846 echo " - target arch: $tgt_arch" 847 echo " - target wordsize: ${tgt_word}-bit" 848 echo " - target C compiler: $tgtcc" 849 echo " ---" 850 echo " - config profile: $profile" 851 echo " ---" 852 if [ "$with_suid" = 0 ]; then 853 echo " - SUID install: no" 854 else 855 echo " - SUID install: yes" 856 fi 857 if [ "$with_network" = 0 ]; then 858 echo " - Network plugins: no" 859 else 860 echo " - Network plugins: yes" 861 fi 862 echo " ---" 863 if [ "$verbose" = 1 ]; then 864 echo " - verbose: yes" 865 else 866 echo " - verbose: no" 867 fi 868 echo " ---" 869 echo " - version: $package_version" 870 871 echo "=> $builddir/Makefile ready, try:" 872 echo " $ cd $builddir" 873 echo " $ make"