linux-qubasis

linux oasis port as a qubes template

git clone https://9o.is/git/linux-qubasis.git

genfn.sh

(7466B)


      1 pkg() {
      2 	subgen $1 init_pkg fini_pkg
      3 }
      4 
      5 init_pkg() {
      6 	FTCH=
      7 	OBJS=
      8 	HDRS=
      9 	SRCS=
     10 	DEPS=
     11 
     12 	var srcdir $dir/src
     13 	var libdir $outdir
     14 	var objdir $outdir/obj
     15 	var hdrdir $outdir/include
     16 	var datdir $outdir/share
     17 
     18 	unset -f host
     19 	init_files
     20 }
     21 
     22 fini_pkg() {
     23 	if command -v host >/dev/null 2>&1 && persist; then
     24 		pkgsub host init_host
     25 	fi
     26 
     27 	[ "$DEPS" ] && phony deps $DEPS
     28 	[ "$HDRS" ] && phony headers $HDRS
     29 
     30 	fetch_complete
     31 	fini_files
     32 }
     33 
     34 pkgsub() {
     35 	SRCS="$SRCS $(sub $1 ${2-init_pkgsub} ${3-fini_pkgsub})"
     36 }
     37 
     38 init_host() {
     39 	SRCS=
     40 	OBJS=
     41 	DEPS=
     42 
     43 	var tgtdir $outdir
     44 	var outdir $hostdir
     45 	var libdir $outdir
     46 	var hdrdir $outdir/include
     47 	var objdir $objdir/host
     48 	var ar ar
     49 	var as as
     50 	var cc cc
     51 	var ld ld
     52 	var objcopy objcopy
     53 	var cflags -O2 -pipe
     54 	var ldflags ''
     55 }
     56 
     57 init_pkgsub() {
     58 	OBJS=
     59 	SRCS=
     60 	var outdir $outdir/$1
     61 	var objdir $outdir/obj
     62 	var libdir $outdir
     63 }
     64 
     65 fini_pkgsub() {
     66 	echo $SRCS
     67 }
     68 
     69 build() {
     70 	_v1=$1
     71 	_v2=$2
     72 	shift 2
     73 
     74 	prefix _v2 $outdir $_v2
     75 	prefix _vs \$srcdir $*
     76 
     77 	for _v in $_vs; do
     78 		case $_v in
     79 		\$srcdir/*) SRCS="$SRCS $_v"
     80 		esac
     81 	done
     82 
     83 	build_parse $_vs
     84 	write "build $_v2: $_v1 $_vs $_vd $_vo"
     85 }
     86 
     87 cflags() {
     88 	var cflags '$cflags' "$*"
     89 }
     90 
     91 ldflags() {
     92 	var ldflags '$ldflags' "$*"
     93 }
     94 
     95 dep() {
     96 	_deps=
     97 	for _d in $*; do
     98 		case $_d in
     99 			*.c)		prefix _d $outdir $_d;;
    100 			*.h)		prefix _d $hdrdir $_d;;
    101 			*/headers)	prefix _d pkg $_d;;
    102 		esac
    103 		_deps="$_deps $_d"
    104 	done
    105 	DEPS="$DEPS $_deps"
    106 }
    107 
    108 bin() {
    109 	_m=0755
    110 
    111 	while [ ${1#-} != $1 ]; do
    112 		case $1 in
    113 		-m) _m=$2;;
    114 		esac
    115 		shift 2
    116 	done
    117 
    118 	exe $*
    119 	file reg $_m '$bindir'/$_out $OUTDIR/$_out
    120 }
    121 
    122 libexec() {
    123 	_p=
    124 
    125 	while [ ${1#-} != $1 ]; do
    126 		case $1 in
    127 		-p) _p=$2/;;
    128 		esac
    129 		shift 2
    130 	done
    131 
    132 	exe $*
    133 	file reg 0755 '$libexecdir'/$_p$_out $OUTDIR/$_out
    134 }
    135 
    136 exe() {
    137 	_out=$1
    138 	shift
    139 	compile $*
    140 
    141 	if [ ! "$_deps" ]; then
    142 		link $_out $_objs $_libs
    143 	else
    144 		_rspfile=$outdir/$_out.rsp
    145 
    146 		awk $_rspfile $_deps '|' ./pkg/rsp.awk
    147 		bind expr '-f ./pkg/rsp.awk'
    148 
    149 		link $_out $_objs $_libs '|' $_rspfile
    150 		bind ldlibs @$_rspfile
    151 	fi
    152 }
    153 
    154 lib() {
    155 	_out=$1
    156 	shift
    157 	compile $*
    158 
    159 	ar $libdir/$_out $_objs
    160 	rsp $libdir/$_out.d $libdir/$_out $_rsps
    161 
    162 	file reg 0644 '$libdir'/$_out $OUTDIR/$_out
    163 }
    164 
    165 compile() {
    166 	_cflags=
    167 	_src_prefix=
    168 
    169 	_srcs=
    170 	_objs=
    171 	_libs=
    172 	_deps=
    173 	_hdrs=
    174 	_rsps=
    175 
    176 	while [ $# -gt 0 ] && [ "${1#-}" != "$1" ]; do
    177 		case $1 in
    178 		-I*|-W*|-D*|-p*|-m*)
    179 			_cflags="$_cflags $1"
    180 			shift
    181 			;;
    182 		-iquote|-include|-isystem)
    183 			_cflags="$_cflags $1 $2"
    184 			shift 2
    185 			;;
    186 		--src-prefix)
    187 			_src_prefix=$2/
    188 			shift 2
    189 			;;
    190 		-*)
    191 			error unknown compiler flag $1
    192 			;;
    193 		esac
    194 	done
    195 
    196 	for _src in $*; do
    197 		case $_src in
    198 		\$*.[cS])	_srcs="$_srcs $_src";;
    199 		*.[cS])		_srcs="$_srcs $_src_prefix$_src";;
    200 		*.o)		_objs="$_objs $_src";;
    201 		*.h)		_hdrs="$_hdrs $_src";;
    202 		*.a)		_libs="$_libs $_src"
    203 					_rsps="$_rsps $_src";;
    204 		*.a.d)		_deps="$_deps $_src"
    205 					_rsps="$_rsps $_src";;
    206 		*) error unknown file to compile: $_src;;
    207 		esac
    208 	done
    209 
    210 	prefix _srcs $srcdir $_srcs
    211 	prefix _hdrs $hdrdir $_hdrs
    212 	prefix _objs $objdir $_objs
    213 	prefix _libs $libdir $_libs
    214 	prefix _deps $libdir $_deps
    215 	prefix _rsps $libdir $_rsps
    216 
    217 	for _src in $_srcs; do
    218 		_obj=$objdir/${_src#\$*/}.o
    219 
    220 		if has $_obj $OBJS; then
    221 			_objs="$_objs $_obj"
    222 			continue
    223 		fi
    224 
    225 		[ "$DEPS" ] && _src="$_src || $dir/deps"
    226 		[ "$_hdrs" ] && _src="$_src || $_hdrs"
    227 
    228 		cc $_obj $_src
    229 		_objs="$_objs $_obj"
    230 		OBJS="$OBJS $_obj"
    231 
    232 		if [ "$_cflags" ]; then
    233 			bind cflags $cflags $_cflags
    234 		fi
    235 	done
    236 }
    237 
    238 binfiles() {
    239 	files --prefix binfiles $*
    240 	for _file in $_files; do
    241 		_out=${_file#*/}
    242 		file reg 0755 '$bindir'/${_out#binfiles/} $OUTDIR/$_out
    243 	done
    244 }
    245 
    246 libfiles() {
    247 	files $*
    248 	for _file in $_files; do
    249 		_out=${_file#*/}
    250 		file reg 0644 '$libdir'/$_out $OUTDIR/$_out
    251 	done
    252 }
    253 
    254 share() {
    255 	files --prefix $datdir $*
    256 
    257 	for _file in $_files; do
    258 		_out=${_file#*/}
    259 		file reg 0644 '$datadir'/$_out $OUTDIR/share/$_out
    260 	done
    261 }
    262 
    263 include() {
    264 	files --prefix $hdrdir $*
    265 
    266 	for _file in $_files; do
    267 		_out=${_file#*/}
    268 		file reg 0644 '$includedir'/$_out $OUTDIR/include/$_out
    269 		HDRS="$HDRS $_file"
    270 	done
    271 }
    272 
    273 files() {
    274 	_prefix=$outdir
    275 	_src_prefix=$srcdir
    276 	_keep_path=false
    277 
    278 	while [ $# -gt 0 ]; do
    279 		case "$1" in
    280 		--keep-path)
    281 			_keep_path=true
    282 			shift
    283 			;;
    284 		--prefix)
    285 			case $2 in
    286 			\$*)	_prefix=$2;;
    287 			*)		_prefix=$_prefix/$2;;
    288 			esac
    289 			shift 2
    290 			;;
    291 		--src-prefix)
    292 			case $2 in
    293 			\$*)	_src_prefix=$2;;
    294 			*)		_src_prefix=$_src_prefix/$2;;
    295 			esac
    296 			shift 2
    297 			;;
    298 		*)
    299 			break
    300 			;;
    301 		esac
    302 	done
    303 
    304 	prefix _srcs $_src_prefix $*
    305 	_files=
    306 
    307 	for _src in $_srcs; do
    308 		case $_src in
    309 		$_prefix/*) _out=$_src;;
    310 		$srcdir/*|$outdir/*|$dir/*)
    311 			$_keep_path && _prefix_src=${_src#$_src_prefix/} || _prefix_src=${_src##*/}
    312 			prefix _out $_prefix $_prefix_src
    313 			copy $_out $_src
    314 			;;
    315 		*) error files cannot handle $_src;;
    316 		esac
    317 		_files="$_files $_out"
    318 	done
    319 }
    320 
    321 git() {
    322 	[ ! "${1-}" ] && error missing git ref || _ref=$1
    323 	fetch_git ${_ref}_fetched
    324 	bind ref $_ref
    325 	FTCH="$FTCH $outdir/${_ref}_fetched"
    326 }
    327 
    328 curl() {
    329 	_replstr=',^[^/]*,$srcdir,'
    330 
    331 	while [ $# -gt 0 ] && [ ${1#--} != $1 ]; do
    332 		case $1 in
    333 		--replstr) _replstr="$2";;
    334 		*) error unknown curl flag $1;;
    335 		esac
    336 		shift 2
    337 	done
    338 
    339 	[ ! "${1-}" ] && error missing curl url || _url=$1
    340 	[ ! "${2-}" ] && error missing curl sha256sum || _sha=$2
    341 	shift 2
    342 
    343 	_srcs=$*
    344 	_name=${_url##*/}
    345 
    346 	fetch_curl $_name
    347 	bind url $_url
    348 
    349 	sha256sum ${_name}_checked $outdir/$_name
    350 	bind sha256 $_sha
    351 
    352 	case $_name in
    353 	*.tar.gz|*.tgz) _tool=gzip;;
    354 	*.tar.xz)		_tool=xz;;
    355 	*.tar.bz2)		_tool=bzip2;;
    356 	*) error unknown archive type $_name;;
    357 	esac
    358 
    359 	extract ${_name}_extracted $outdir/$_name '|' $outdir/${_name}_checked
    360 	bind tool $_tool
    361 	bind srcs $_srcs
    362 	bind replstr \"$_replstr\"
    363 
    364 	if ! grep -qE "^${DIR#./}/src$" .git/info/exclude; then
    365 		printf "%s/src\n" ${DIR#./} >> .git/info/exclude
    366 	fi
    367 
    368 	FTCH="$FTCH $outdir/${_name}_extracted"
    369 }
    370 
    371 fetch_complete() {
    372 	if [ ! "$FTCH" ]; then
    373 		return
    374 	fi
    375 
    376 	_patches=
    377 	phony fetch $FTCH
    378 
    379 	if [ -d $DIR/patch ]; then
    380 		case "$FTCH" in
    381 		*extracted) _rule=git_apply;;
    382 		*)			_rule=git_patch;;
    383 		esac
    384 
    385 		for _v in $DIR/patch/*.patch; do
    386 			_out=$outdir/${_v##*/}
    387 			_in=$dir/${_v#"$DIR"/}
    388 			$_rule $_out $_in '|' $dir/fetch $_patches
    389 			_patches="$_patches $_out"
    390 		done
    391 	fi
    392 
    393 	if [ "$SRCS" ]; then
    394 		phony "$(printf '%s\n' $SRCS | sort | uniq | xargs)" $dir/fetch "$_patches"
    395 	fi
    396 }
    397 
    398 man() {
    399 	_src=$1
    400 	_sec=${2-}
    401 	_out=${_src##*/}
    402 
    403 	if [ $_sec ]; then
    404 		_out=${_out%.*}.$_sec
    405 	else
    406 		_sec=${_out##*.}
    407 	fi
    408 
    409 	gzip $_out.gz $_src
    410 	file reg 0644 '$mandir'/man$_sec/$_out.gz $OUTDIR/$_out.gz
    411 }
    412 
    413 sym() {
    414 	case ${1%%/*} in
    415 	bin)	_prefix='$bindir';;
    416 	man)	_prefix='$mandir';;
    417 	share)	_prefix='$datadir';;
    418 	*)		error sym cannot handles prefix $_prefix;;
    419 	esac
    420 
    421 	file sym 0777 $_prefix/${1#*/} $2
    422 }
    423 
    424 file() {
    425 	if persist; then
    426 		printf '%s\n' "$*" >> $DIR/files.tmp
    427 	fi
    428 }
    429 
    430 init_files() {
    431 	if persist && [ -e $DIR/files.tmp ]; then
    432 		rm -f $DIR/files.tmp
    433 	fi
    434 }
    435 
    436 fini_files() {
    437 	_f=$DIR/files
    438 	if persist && [ -e $_f.tmp ]; then
    439 		if cmp -s $_f.tmp $_f; then
    440 			rm -f $_f.tmp
    441 		else
    442 			mv $_f.tmp $_f
    443 		fi
    444 		GEN_OUTS="$GEN_OUTS $DIR/files"
    445 	fi
    446 }
    447 
    448 waylandproto() {
    449 	_proto=$1
    450 	shift 1
    451 
    452 	while [ $# -gt 1 ]; do
    453 		wayland_proto $2 $_proto
    454 		case $1 in
    455 		--client) bind type client-header;;
    456 		--server) bind type server-header;;
    457 		--code)
    458 			bind type public-code
    459 			cc $outdir/$2.o $outdir/$2 '||' ./pkg/wayland/headers
    460 			bind cflags $cflags -isystem $pkgdir/wayland/include
    461 			;;
    462 		*) error unknown waylandproto flag $1
    463 		esac
    464 		shift 2
    465 	done
    466 }
    467 
    468 has_video_driver() {
    469 	has $1 $VIDEO_DRIVERS
    470 }