diff mbox series

[015/143] build-sys: add meson submodule

Message ID 1596741379-12902-16-git-send-email-pbonzini@redhat.com (mailing list archive)
State New, archived
Headers show
Series Meson integration for 5.2 | expand

Commit Message

Paolo Bonzini Aug. 6, 2020, 7:14 p.m. UTC
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

Comments

Alex Bennée Aug. 7, 2020, 10:37 a.m. UTC | #1
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>
Paolo Bonzini Aug. 7, 2020, 10:47 a.m. UTC | #2
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 mbox series

Patch

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() {