Message ID | 1596741379-12902-16-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | Meson integration for 5.2 | expand |
Paolo Bonzini <pbonzini@redhat.com> writes: > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > .gitmodules | 3 +++ > configure | 44 +++++++++++++++++++++++++++++++++++++++++--- > meson | 1 + > scripts/archive-source.sh | 3 ++- > 4 files changed, 47 insertions(+), 4 deletions(-) > create mode 160000 meson > > diff --git a/.gitmodules b/.gitmodules > index 9c0501a..ce97939 100644 > --- a/.gitmodules > +++ b/.gitmodules > @@ -58,3 +58,6 @@ > [submodule "roms/qboot"] > path = roms/qboot > url = https://github.com/bonzini/qboot > +[submodule "meson"] > + path = meson > + url = https://github.com/mesonbuild/meson/ > diff --git a/configure b/configure > index 13db149..d87d544 100755 > --- a/configure > +++ b/configure > @@ -174,6 +174,25 @@ path_of() { > return 1 > } > > +version_ge () { > + local_ver1=`echo $1 | tr . ' '` > + local_ver2=`echo $2 | tr . ' '` > + while true; do > + set x $local_ver1 > + local_first=${2-0} > + # shift 2 does nothing if there are less than 2 arguments > + shift; shift > + local_ver1=$* > + set x $local_ver2 > + # the second argument finished, the first must be greater or equal > + test $# = 1 && return 0 > + test $local_first -lt $2 && return 1 > + test $local_first -gt $2 && return 0 > + shift; shift > + local_ver2=$* > + done > +} > + > have_backend () { > echo "$trace_backends" | grep "$1" >/dev/null > } > @@ -1965,9 +1984,28 @@ then > error_exit "Python not found. Use --python=/path/to/python" > fi > > -if ! has "$meson" > -then > - error_exit "Meson not found. Use --meson=/path/to/meson" > +if test -z "$meson" ; then > + if has meson && version_ge "$(meson --version)" 0.55.0; then > + meson=meson > + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > + meson=git > + elif test -e "${source_path}/meson/meson.py" ; then > + meson=internal > + fi > +fi > + > +case "$meson" in > + git | internal) Is "internal" meant to be synonymous with "git"? AFAICT we don't actually do anything with --meson=internal which is why it failed later. > + if test "$meson" = git; then > + git_submodules="${git_submodules} meson" > + (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update meson) > + fi > + meson="${source_path}/meson/meson.py" > + ;; > +esac > + > +if ! has "$meson" ; then > + error_exit "Meson not found. Use --meson=/path/to/meson|git|internal" > fi <snip>
On 07/08/20 12:37, Alex Bennée wrote: > > Paolo Bonzini <pbonzini@redhat.com> writes: > >> From: Marc-André Lureau <marcandre.lureau@redhat.com> >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >> --- >> .gitmodules | 3 +++ >> configure | 44 +++++++++++++++++++++++++++++++++++++++++--- >> meson | 1 + >> scripts/archive-source.sh | 3 ++- >> 4 files changed, 47 insertions(+), 4 deletions(-) >> create mode 160000 meson >> >> diff --git a/.gitmodules b/.gitmodules >> index 9c0501a..ce97939 100644 >> --- a/.gitmodules >> +++ b/.gitmodules >> @@ -58,3 +58,6 @@ >> [submodule "roms/qboot"] >> path = roms/qboot >> url = https://github.com/bonzini/qboot >> +[submodule "meson"] >> + path = meson >> + url = https://github.com/mesonbuild/meson/ >> diff --git a/configure b/configure >> index 13db149..d87d544 100755 >> --- a/configure >> +++ b/configure >> @@ -174,6 +174,25 @@ path_of() { >> return 1 >> } >> >> +version_ge () { >> + local_ver1=`echo $1 | tr . ' '` >> + local_ver2=`echo $2 | tr . ' '` >> + while true; do >> + set x $local_ver1 >> + local_first=${2-0} >> + # shift 2 does nothing if there are less than 2 arguments >> + shift; shift >> + local_ver1=$* >> + set x $local_ver2 >> + # the second argument finished, the first must be greater or equal >> + test $# = 1 && return 0 >> + test $local_first -lt $2 && return 1 >> + test $local_first -gt $2 && return 0 >> + shift; shift >> + local_ver2=$* >> + done >> +} >> + >> have_backend () { >> echo "$trace_backends" | grep "$1" >/dev/null >> } >> @@ -1965,9 +1984,28 @@ then >> error_exit "Python not found. Use --python=/path/to/python" >> fi >> >> -if ! has "$meson" >> -then >> - error_exit "Meson not found. Use --meson=/path/to/meson" >> +if test -z "$meson" ; then >> + if has meson && version_ge "$(meson --version)" 0.55.0; then >> + meson=meson >> + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then >> + meson=git >> + elif test -e "${source_path}/meson/meson.py" ; then >> + meson=internal >> + fi >> +fi >> + >> +case "$meson" in >> + git | internal) > > Is "internal" meant to be synonymous with "git"? AFAICT we don't > actually do anything with --meson=internal which is why it failed later. "git" only works on checkouts, "internal" works on release builds as well. So the problem is that git_update is not set to "yes" for whatever reason. Paolo > >> + if test "$meson" = git; then >> + git_submodules="${git_submodules} meson" >> + (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update meson) >> + fi >> + meson="${source_path}/meson/meson.py" >> + ;; >> +esac >> + >> +if ! has "$meson" ; then >> + error_exit "Meson not found. Use --meson=/path/to/meson|git|internal" >> fi > <snip> >
diff --git a/.gitmodules b/.gitmodules index 9c0501a..ce97939 100644 --- a/.gitmodules +++ b/.gitmodules @@ -58,3 +58,6 @@ [submodule "roms/qboot"] path = roms/qboot url = https://github.com/bonzini/qboot +[submodule "meson"] + path = meson + url = https://github.com/mesonbuild/meson/ diff --git a/configure b/configure index 13db149..d87d544 100755 --- a/configure +++ b/configure @@ -174,6 +174,25 @@ path_of() { return 1 } +version_ge () { + local_ver1=`echo $1 | tr . ' '` + local_ver2=`echo $2 | tr . ' '` + while true; do + set x $local_ver1 + local_first=${2-0} + # shift 2 does nothing if there are less than 2 arguments + shift; shift + local_ver1=$* + set x $local_ver2 + # the second argument finished, the first must be greater or equal + test $# = 1 && return 0 + test $local_first -lt $2 && return 1 + test $local_first -gt $2 && return 0 + shift; shift + local_ver2=$* + done +} + have_backend () { echo "$trace_backends" | grep "$1" >/dev/null } @@ -1965,9 +1984,28 @@ then error_exit "Python not found. Use --python=/path/to/python" fi -if ! has "$meson" -then - error_exit "Meson not found. Use --meson=/path/to/meson" +if test -z "$meson" ; then + if has meson && version_ge "$(meson --version)" 0.55.0; then + meson=meson + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then + meson=git + elif test -e "${source_path}/meson/meson.py" ; then + meson=internal + fi +fi + +case "$meson" in + git | internal) + if test "$meson" = git; then + git_submodules="${git_submodules} meson" + (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update meson) + fi + meson="${source_path}/meson/meson.py" + ;; +esac + +if ! has "$meson" ; then + error_exit "Meson not found. Use --meson=/path/to/meson|git|internal" fi meson=$(command -v $meson) diff --git a/meson b/meson new file mode 160000 index 0000000..d0c68dc --- /dev/null +++ b/meson @@ -0,0 +1 @@ +Subproject commit d0c68dc11507a47b9b85de508e023d9590d60565 diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh index fb5d6b3..c6169db 100755 --- a/scripts/archive-source.sh +++ b/scripts/archive-source.sh @@ -26,7 +26,8 @@ sub_file="${sub_tdir}/submodule.tar" # independent of what the developer currently has initialized # in their checkout, because the build environment is completely # different to the host OS. -submodules="dtc slirp ui/keycodemapdb tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3" +submodules="dtc slirp meson ui/keycodemapdb" +submodules="$submodules tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3" sub_deinit="" function cleanup() {