diff options
Diffstat (limited to 'bitbake/contrib')
-rwxr-xr-x | bitbake/contrib/bbparse-torture.py | 89 | ||||
-rw-r--r-- | bitbake/contrib/hashserv/Dockerfile | 23 | ||||
-rw-r--r-- | bitbake/contrib/prserv/Dockerfile | 62 | ||||
-rw-r--r-- | bitbake/contrib/vim/indent/bitbake.vim | 6 | ||||
-rw-r--r-- | bitbake/contrib/vim/plugin/newbbappend.vim | 2 | ||||
-rw-r--r-- | bitbake/contrib/vim/syntax/bitbake.vim | 19 |
6 files changed, 190 insertions, 11 deletions
diff --git a/bitbake/contrib/bbparse-torture.py b/bitbake/contrib/bbparse-torture.py new file mode 100755 index 0000000000..c25d547bb8 --- /dev/null +++ b/bitbake/contrib/bbparse-torture.py @@ -0,0 +1,89 @@ +#! /usr/bin/env python3 +# +# Copyright (C) 2020 Joshua Watt <JPEWhacker@gmail.com> +# +# SPDX-License-Identifier: MIT + +import argparse +import os +import random +import shutil +import signal +import subprocess +import sys +import time + + +def try_unlink(path): + try: + os.unlink(path) + except: + pass + + +def main(): + def cleanup(): + shutil.rmtree("tmp/cache", ignore_errors=True) + try_unlink("bitbake-cookerdaemon.log") + try_unlink("bitbake.sock") + try_unlink("bitbake.lock") + + parser = argparse.ArgumentParser( + description="Bitbake parser torture test", + epilog=""" + A torture test for bitbake's parser. Repeatedly interrupts parsing until + bitbake decides to deadlock. + """, + ) + + args = parser.parse_args() + + if not "BUILDDIR" in os.environ: + print( + "'BUILDDIR' not found in the environment. Did you initialize the build environment?" + ) + return 1 + + os.chdir(os.environ["BUILDDIR"]) + + run_num = 0 + while True: + if run_num % 100 == 0: + print("Calibrating wait time...") + cleanup() + + start_time = time.monotonic() + r = subprocess.run(["bitbake", "-p"]) + max_wait_time = time.monotonic() - start_time + + if r.returncode != 0: + print("Calibration run exited with %d" % r.returncode) + return 1 + + print("Maximum wait time is %f seconds" % max_wait_time) + + run_num += 1 + wait_time = random.random() * max_wait_time + + print("Run #%d" % run_num) + print("Will sleep for %f seconds" % wait_time) + + cleanup() + with subprocess.Popen(["bitbake", "-p"]) as proc: + time.sleep(wait_time) + proc.send_signal(signal.SIGINT) + try: + proc.wait(45) + except subprocess.TimeoutExpired: + print("Run #%d: Waited too long. Possible deadlock!" % run_num) + proc.wait() + return 1 + + if proc.returncode == 0: + print("Exited successfully. Timeout too long?") + else: + print("Exited with %d" % proc.returncode) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/bitbake/contrib/hashserv/Dockerfile b/bitbake/contrib/hashserv/Dockerfile new file mode 100644 index 0000000000..74b4a3be1d --- /dev/null +++ b/bitbake/contrib/hashserv/Dockerfile @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: MIT +# +# Copyright (c) 2021 Joshua Watt <JPEWhacker@gmail.com> +# +# Dockerfile to build a bitbake hash equivalence server container +# +# From the root of the bitbake repository, run: +# +# docker build -f contrib/hashserv/Dockerfile . +# + +FROM alpine:3.13.1 + +RUN apk add --no-cache python3 + +COPY bin/bitbake-hashserv /opt/bbhashserv/bin/ +COPY lib/hashserv /opt/bbhashserv/lib/hashserv/ +COPY lib/bb /opt/bbhashserv/lib/bb/ +COPY lib/codegen.py /opt/bbhashserv/lib/codegen.py +COPY lib/ply /opt/bbhashserv/lib/ply/ +COPY lib/bs4 /opt/bbhashserv/lib/bs4/ + +ENTRYPOINT ["/opt/bbhashserv/bin/bitbake-hashserv"] diff --git a/bitbake/contrib/prserv/Dockerfile b/bitbake/contrib/prserv/Dockerfile new file mode 100644 index 0000000000..9585fe3f07 --- /dev/null +++ b/bitbake/contrib/prserv/Dockerfile @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: MIT +# +# Copyright (c) 2022 Daniel Gomez <daniel@qtec.com> +# +# Dockerfile to build a bitbake PR service container +# +# From the root of the bitbake repository, run: +# +# docker build -f contrib/prserv/Dockerfile . -t prserv +# +# Running examples: +# +# 1. PR Service in RW mode, port 18585: +# +# docker run --detach --tty \ +# --env PORT=18585 \ +# --publish 18585:18585 \ +# --volume $PWD:/var/lib/bbprserv \ +# prserv +# +# 2. PR Service in RO mode, default port (8585) and custom LOGFILE: +# +# docker run --detach --tty \ +# --env DBMODE="--read-only" \ +# --env LOGFILE=/var/lib/bbprserv/prservro.log \ +# --publish 8585:8585 \ +# --volume $PWD:/var/lib/bbprserv \ +# prserv +# + +FROM alpine:3.14.4 + +RUN apk add --no-cache python3 + +COPY bin/bitbake-prserv /opt/bbprserv/bin/ +COPY lib/prserv /opt/bbprserv/lib/prserv/ +COPY lib/bb /opt/bbprserv/lib/bb/ +COPY lib/codegen.py /opt/bbprserv/lib/codegen.py +COPY lib/ply /opt/bbprserv/lib/ply/ +COPY lib/bs4 /opt/bbprserv/lib/bs4/ + +ENV PATH=$PATH:/opt/bbprserv/bin + +RUN mkdir -p /var/lib/bbprserv + +ENV DBFILE=/var/lib/bbprserv/prserv.sqlite3 \ + LOGFILE=/var/lib/bbprserv/prserv.log \ + LOGLEVEL=debug \ + HOST=0.0.0.0 \ + PORT=8585 \ + DBMODE="" + +ENTRYPOINT [ "/bin/sh", "-c", \ +"bitbake-prserv \ +--file=$DBFILE \ +--log=$LOGFILE \ +--loglevel=$LOGLEVEL \ +--start \ +--host=$HOST \ +--port=$PORT \ +$DBMODE \ +&& tail -f $LOGFILE"] diff --git a/bitbake/contrib/vim/indent/bitbake.vim b/bitbake/contrib/vim/indent/bitbake.vim index 1381034098..7ee9d69938 100644 --- a/bitbake/contrib/vim/indent/bitbake.vim +++ b/bitbake/contrib/vim/indent/bitbake.vim @@ -40,7 +40,7 @@ set cpo&vim let s:maxoff = 50 " maximum number of lines to look backwards for () -function GetPythonIndent(lnum) +function! GetBBPythonIndent(lnum) " If this line is explicitly joined: If the previous line was also joined, " line it up with that one, otherwise add two 'shiftwidth' @@ -257,7 +257,7 @@ let b:did_indent = 1 setlocal indentkeys+=0\" -function BitbakeIndent(lnum) +function! BitbakeIndent(lnum) if !has('syntax_items') return -1 endif @@ -315,7 +315,7 @@ function BitbakeIndent(lnum) endif if index(["bbPyDefRegion", "bbPyFuncRegion"], name) != -1 - let ret = GetPythonIndent(a:lnum) + let ret = GetBBPythonIndent(a:lnum) " Should normally always be indented by at least one shiftwidth; but allow " return of -1 (defer to autoindent) or -2 (force indent to 0) if ret == 0 diff --git a/bitbake/contrib/vim/plugin/newbbappend.vim b/bitbake/contrib/vim/plugin/newbbappend.vim index e04174cf62..3f65f79cdc 100644 --- a/bitbake/contrib/vim/plugin/newbbappend.vim +++ b/bitbake/contrib/vim/plugin/newbbappend.vim @@ -20,7 +20,7 @@ fun! NewBBAppendTemplate() set nopaste " New bbappend template - 0 put ='FILESEXTRAPATHS_prepend := \"${THISDIR}/${PN}:\"' + 0 put ='FILESEXTRAPATHS:prepend := \"${THISDIR}/${PN}:\"' 2 if paste == 1 diff --git a/bitbake/contrib/vim/syntax/bitbake.vim b/bitbake/contrib/vim/syntax/bitbake.vim index f964621ae5..8f39b8f951 100644 --- a/bitbake/contrib/vim/syntax/bitbake.vim +++ b/bitbake/contrib/vim/syntax/bitbake.vim @@ -51,9 +51,9 @@ syn region bbString matchgroup=bbQuote start=+'+ skip=+\\$+ end=+'+ syn match bbExport "^export" nextgroup=bbIdentifier skipwhite syn keyword bbExportFlag export contained nextgroup=bbIdentifier skipwhite syn match bbIdentifier "[a-zA-Z0-9\-_\.\/\+]\+" display contained -syn match bbVarDeref "${[a-zA-Z0-9\-_\.\/\+]\+}" contained +syn match bbVarDeref "${[a-zA-Z0-9\-_:\.\/\+]\+}" contained syn match bbVarEq "\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)" contained nextgroup=bbVarValue -syn match bbVarDef "^\(export\s*\)\?\([a-zA-Z0-9\-_\.\/\+]\+\(_[${}a-zA-Z0-9\-_\.\/\+]\+\)\?\)\s*\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)\@=" contains=bbExportFlag,bbIdentifier,bbVarDeref nextgroup=bbVarEq +syn match bbVarDef "^\(export\s*\)\?\([a-zA-Z0-9\-_\.\/\+][${}a-zA-Z0-9\-_:\.\/\+]*\)\s*\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)\@=" contains=bbExportFlag,bbIdentifier,bbOverrideOperator,bbVarDeref nextgroup=bbVarEq syn match bbVarValue ".*$" contained contains=bbString,bbVarDeref,bbVarPyValue syn region bbVarPyValue start=+${@+ skip=+\\$+ end=+}+ contained contains=@python @@ -63,13 +63,14 @@ syn region bbVarFlagFlag matchgroup=bbArrayBrackets start="\[" end="\]\s* " Includes and requires syn keyword bbInclude inherit include require contained -syn match bbIncludeRest ".*$" contained contains=bbString,bbVarDeref +syn match bbIncludeRest ".*$" contained contains=bbString,bbVarDeref,bbVarPyValue syn match bbIncludeLine "^\(inherit\|include\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest " Add taks and similar syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS contained -syn match bbStatementRest ".*$" skipwhite contained contains=bbStatement -syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\)\s\+" contains=bbStatement nextgroup=bbStatementRest +syn match bbStatementRest /[^\\]*$/ skipwhite contained contains=bbStatement,bbVarDeref,bbVarPyValue +syn region bbStatementRestCont start=/.*\\$/ end=/^[^\\]*$/ contained contains=bbStatement,bbVarDeref,bbVarPyValue,bbContinue keepend +syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\)\s\+" contains=bbStatement nextgroup=bbStatementRest,bbStatementRestCont " OE Important Functions syn keyword bbOEFunctions do_fetch do_unpack do_patch do_configure do_compile do_stage do_install do_package contained @@ -77,13 +78,15 @@ syn keyword bbOEFunctions do_fetch do_unpack do_patch do_configure do_comp " Generic Functions syn match bbFunction "\h[0-9A-Za-z_\-\.]*" display contained contains=bbOEFunctions +syn keyword bbOverrideOperator append prepend remove contained + " BitBake shell metadata syn include @shell syntax/sh.vim if exists("b:current_syntax") unlet b:current_syntax endif syn keyword bbShFakeRootFlag fakeroot contained -syn match bbShFuncDef "^\(fakeroot\s*\)\?\([\.0-9A-Za-z_${}\-\.]\+\)\(python\)\@<!\(\s*()\s*\)\({\)\@=" contains=bbShFakeRootFlag,bbFunction,bbVarDeref,bbDelimiter nextgroup=bbShFuncRegion skipwhite +syn match bbShFuncDef "^\(fakeroot\s*\)\?\([\.0-9A-Za-z_:${}\-\.]\+\)\(python\)\@<!\(\s*()\s*\)\({\)\@=" contains=bbShFakeRootFlag,bbFunction,bbOverrideOperator,bbVarDeref,bbDelimiter nextgroup=bbShFuncRegion skipwhite syn region bbShFuncRegion matchgroup=bbDelimiter start="{\s*$" end="^}\s*$" contained contains=@shell " Python value inside shell functions @@ -91,7 +94,7 @@ syn region shDeref start=+${@+ skip=+\\$+ excludenl end=+}+ contained co " BitBake python metadata syn keyword bbPyFlag python contained -syn match bbPyFuncDef "^\(fakeroot\s*\)\?\(python\)\(\s\+[0-9A-Za-z_${}\-\.]\+\)\?\(\s*()\s*\)\({\)\@=" contains=bbShFakeRootFlag,bbPyFlag,bbFunction,bbVarDeref,bbDelimiter nextgroup=bbPyFuncRegion skipwhite +syn match bbPyFuncDef "^\(fakeroot\s*\)\?\(python\)\(\s\+[0-9A-Za-z_:${}\-\.]\+\)\?\(\s*()\s*\)\({\)\@=" contains=bbShFakeRootFlag,bbPyFlag,bbFunction,bbOverrideOperator,bbVarDeref,bbDelimiter nextgroup=bbPyFuncRegion skipwhite syn region bbPyFuncRegion matchgroup=bbDelimiter start="{\s*$" end="^}\s*$" contained contains=@python " BitBake 'def'd python functions @@ -120,7 +123,9 @@ hi def link bbPyFlag Type hi def link bbPyDef Statement hi def link bbStatement Statement hi def link bbStatementRest Identifier +hi def link bbStatementRestCont Identifier hi def link bbOEFunctions Special hi def link bbVarPyValue PreProc +hi def link bbOverrideOperator Operator let b:current_syntax = "bb" |