mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-19 03:52:17 +00:00
Update meson to 0.36.0.
This commit is contained in:
parent
a04d01ed70
commit
5d4fdadc6f
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=426146
@ -2,7 +2,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= meson
|
||||
PORTVERSION= 0.35.1
|
||||
PORTVERSION= 0.36.0
|
||||
CATEGORIES= devel python
|
||||
MASTER_SITES= https://github.com/mesonbuild/${PORTNAME}/releases/download/${PORTVERSION}/
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
TIMESTAMP = 1478286789
|
||||
SHA256 (meson-0.35.1.tar.gz) = b47edb53bd7554cb7890a32399fdf6402e8079379393893ab3dec8fffcbfba2c
|
||||
SIZE (meson-0.35.1.tar.gz) = 510957
|
||||
TIMESTAMP = 1479164234
|
||||
SHA256 (meson-0.36.0.tar.gz) = dc087ec40dacb5e256e6ee6467f2d004faf4ef284d3c1ce5e89faa1e16540950
|
||||
SIZE (meson-0.36.0.tar.gz) = 458992
|
||||
|
@ -1,44 +0,0 @@
|
||||
From b8ef693a2af7463be0cfa3cc752decd4c4955587 Mon Sep 17 00:00:00 2001
|
||||
From: Nirbheek Chauhan <nirbheek@centricular.com>
|
||||
Date: Sat, 29 Oct 2016 12:38:36 +0530
|
||||
Subject: [PATCH] Clang also supports gnu89/99/11, gnu++03/11/14/1z
|
||||
|
||||
The list of supported standards is identical for GCC and Clang.
|
||||
|
||||
We don't list duplicate standard names however, such as c++03 and c++09
|
||||
|
||||
https://github.com/llvm-mirror/clang/blob/master/include/clang/Frontend/LangStandards.def
|
||||
--- mesonbuild/compilers.py.orig 2016-10-17 17:38:14 UTC
|
||||
+++ mesonbuild/compilers.py
|
||||
@@ -1968,7 +1968,8 @@ class GnuCCompiler(GnuCompiler, CCompile
|
||||
|
||||
def get_options(self):
|
||||
opts = {'c_std' : coredata.UserComboOption('c_std', 'C language standard to use',
|
||||
- ['none', 'c89', 'c99', 'c11', 'gnu89', 'gnu99', 'gnu11'],
|
||||
+ ['none', 'c89', 'c99', 'c11',
|
||||
+ 'gnu89', 'gnu99', 'gnu11'],
|
||||
'none')}
|
||||
if self.gcc_type == GCC_MINGW:
|
||||
opts.update({
|
||||
@@ -2097,7 +2098,8 @@ class ClangCCompiler(ClangCompiler, CCom
|
||||
|
||||
def get_options(self):
|
||||
return {'c_std' : coredata.UserComboOption('c_std', 'C language standard to use',
|
||||
- ['none', 'c89', 'c99', 'c11'],
|
||||
+ ['none', 'c89', 'c99', 'c11',
|
||||
+ 'gnu89', 'gnu99', 'gnu11',],
|
||||
'none')}
|
||||
|
||||
def get_option_compile_args(self, options):
|
||||
@@ -2124,8 +2126,9 @@ class ClangCPPCompiler(ClangCompiler,
|
||||
|
||||
def get_options(self):
|
||||
return {'cpp_std' : coredata.UserComboOption('cpp_std', 'C++ language standard to use',
|
||||
- ['none', 'c++03', 'c++11', 'c++14', 'c++1z'],
|
||||
- 'none')}
|
||||
+ ['none', 'c++03', 'c++11', 'c++14', 'c++1z',
|
||||
+ 'gnu++03', 'gnu++11', 'gnu++14', 'gnu++1z'],
|
||||
+ 'none')}
|
||||
|
||||
def get_option_compile_args(self, options):
|
||||
args = []
|
@ -1,184 +0,0 @@
|
||||
From ac58c13bbfa6c7b47cc54f30e32bd405c944076d Mon Sep 17 00:00:00 2001
|
||||
From: Nirbheek Chauhan <nirbheek@centricular.com>
|
||||
Date: Tue, 25 Oct 2016 02:32:57 +0530
|
||||
Subject: [PATCH] has_function: Only ignore prototype when no includes are
|
||||
specified
|
||||
|
||||
The Autoconf-style check we were doing gives false positives when the
|
||||
linker uses the prototype defined in the SDK header to decide whether
|
||||
a function is available or not.
|
||||
|
||||
For example, with macOS 10.12, clock_gettime is now implemented
|
||||
(alongwith other functions). These functions are always defined in the
|
||||
XCode 8 SDK as weak imports and you're supposed to do a runtime check to
|
||||
see if the symbols are available and use fallback code if they aren't.
|
||||
|
||||
The linker will always successfully link if you use one of those symbols
|
||||
(without a runtime fallback) even if you target an older OS X version
|
||||
with -mmacosx-version-min. This is the intended behaviour by Apple.
|
||||
|
||||
But this makes has_function useless because to test if the symbol is
|
||||
available, we must know at link-time whether it is available.
|
||||
|
||||
To force the linker to do the check at link-time you must use
|
||||
'-Wl,-no_weak_imports` *and* use the prototype in time.h which has an
|
||||
availability macro which tells the linker whether the symbol is
|
||||
available or not based on the -mmacosx-version-min flag.
|
||||
|
||||
An autoconf-style check would override this prototype and use its own
|
||||
which would result in the linker thinking that the function is always
|
||||
available (a false positive). Worse, this would manifest at runtime and
|
||||
might not be picked up immediately.
|
||||
|
||||
We now use the function prototype in the user-provided includes if the
|
||||
'prefix' kwarg contains a `#include` and use the old Autoconf-style
|
||||
check if not. I've tested that the configure checks done by GStreamer
|
||||
and GLib are completely unaffected by this; at least on Linux.
|
||||
|
||||
The next commit will also add `-Wl,-no_weak_imports` to extra_args by
|
||||
default so that Meson avoids this mess completely. We always want this
|
||||
because the user would not do a has_function check if they have
|
||||
a runtime fallback for the function in their code.
|
||||
--- mesonbuild/compilers.py.orig 2016-11-09 17:25:49 UTC
|
||||
+++ mesonbuild/compilers.py
|
||||
@@ -891,55 +891,65 @@ int main(int argc, char **argv) {
|
||||
raise EnvironmentException('Could not determine alignment of %s. Sorry. You might want to file a bug.' % typename)
|
||||
return align
|
||||
|
||||
- def has_function(self, funcname, prefix, env, extra_args=None, dependencies=None):
|
||||
+ @staticmethod
|
||||
+ def _no_prototype_templ():
|
||||
"""
|
||||
- First, this function looks for the symbol in the default libraries
|
||||
- provided by the compiler (stdlib + a few others usually). If that
|
||||
- fails, it checks if any of the headers specified in the prefix provide
|
||||
- an implementation of the function, and if that fails, it checks if it's
|
||||
- implemented as a compiler-builtin.
|
||||
+ Try to find the function without a prototype from a header by defining
|
||||
+ our own dummy prototype and trying to link with the C library (and
|
||||
+ whatever else the compiler links in by default). This is very similar
|
||||
+ to the check performed by Autoconf for AC_CHECK_FUNCS.
|
||||
"""
|
||||
- if extra_args is None:
|
||||
- extra_args = []
|
||||
- # Define the symbol to something else in case it is defined by the
|
||||
- # includes or defines listed by the user `{0}` or by the compiler.
|
||||
- # Then, undef the symbol to get rid of it completely.
|
||||
- templ = '''
|
||||
+ # Define the symbol to something else since it is defined by the
|
||||
+ # includes or defines listed by the user (prefix -> {0}) or by the
|
||||
+ # compiler. Then, undef the symbol to get rid of it completely.
|
||||
+ head = '''
|
||||
#define {1} meson_disable_define_of_{1}
|
||||
#include <limits.h>
|
||||
{0}
|
||||
#undef {1}
|
||||
'''
|
||||
-
|
||||
# Override any GCC internal prototype and declare our own definition for
|
||||
# the symbol. Use char because that's unlikely to be an actual return
|
||||
# value for a function which ensures that we override the definition.
|
||||
- templ += '''
|
||||
+ head += '''
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char {1} ();
|
||||
'''
|
||||
-
|
||||
- # glibc defines functions that are not available on Linux as stubs that
|
||||
- # fail with ENOSYS (such as e.g. lchmod). In this case we want to fail
|
||||
- # instead of detecting the stub as a valid symbol.
|
||||
- # We always include limits.h above to ensure that these are defined for
|
||||
- # stub functions.
|
||||
- stubs_fail = '''
|
||||
- #if defined __stub_{1} || defined __stub___{1}
|
||||
- fail fail fail this function is not going to work
|
||||
- #endif
|
||||
- '''
|
||||
- templ += stubs_fail
|
||||
-
|
||||
- # And finally the actual function call
|
||||
- templ += '''
|
||||
- int
|
||||
- main ()
|
||||
+ # The actual function call
|
||||
+ main = '''
|
||||
+ int main ()
|
||||
{{
|
||||
return {1} ();
|
||||
}}'''
|
||||
+ return head, main
|
||||
+
|
||||
+ @staticmethod
|
||||
+ def _have_prototype_templ():
|
||||
+ """
|
||||
+ Returns a head-er and main() call that uses the headers listed by the
|
||||
+ user for the function prototype while checking if a function exists.
|
||||
+ """
|
||||
+ # Add the 'prefix', aka defines, includes, etc that the user provides
|
||||
+ head = '#include <limits.h>\n{0}\n'
|
||||
+ # We don't know what the function takes or returns, so just add
|
||||
+ # a useless reference to it
|
||||
+ main = '\nint main() {{ {1}; }}'
|
||||
+ return head, main
|
||||
+
|
||||
+ def has_function(self, funcname, prefix, env, extra_args=None, dependencies=None):
|
||||
+ """
|
||||
+ First, this function looks for the symbol in the default libraries
|
||||
+ provided by the compiler (stdlib + a few others usually). If that
|
||||
+ fails, it checks if any of the headers specified in the prefix provide
|
||||
+ an implementation of the function, and if that fails, it checks if it's
|
||||
+ implemented as a compiler-builtin.
|
||||
+ """
|
||||
+ if extra_args is None:
|
||||
+ extra_args = []
|
||||
+
|
||||
+ # Short-circuit if the check is already provided by the cross-info file
|
||||
varname = 'has function ' + funcname
|
||||
varname = varname.replace(' ', '_')
|
||||
if self.is_cross:
|
||||
@@ -948,16 +958,35 @@ int main(int argc, char **argv) {
|
||||
if isinstance(val, bool):
|
||||
return val
|
||||
raise EnvironmentException('Cross variable {0} is not a boolean.'.format(varname))
|
||||
- if self.links(templ.format(prefix, funcname), env, extra_args, dependencies):
|
||||
- return True
|
||||
+
|
||||
+ # glibc defines functions that are not available on Linux as stubs that
|
||||
+ # fail with ENOSYS (such as e.g. lchmod). In this case we want to fail
|
||||
+ # instead of detecting the stub as a valid symbol.
|
||||
+ # We already included limits.h earlier to ensure that these are defined
|
||||
+ # for stub functions.
|
||||
+ stubs_fail = '''
|
||||
+ #if defined __stub_{1} || defined __stub___{1}
|
||||
+ fail fail fail this function is not going to work
|
||||
+ #endif
|
||||
+ '''
|
||||
+
|
||||
+ # If we have any includes in the prefix supplied by the user, assume
|
||||
+ # that the user wants us to use the symbol prototype defined in those
|
||||
+ # includes. If not, then try to do the Autoconf-style check with
|
||||
+ # a dummy prototype definition of our own.
|
||||
+ # This is needed when the linker determines symbol availability from an
|
||||
+ # SDK based on the prototype in the header provided by the SDK.
|
||||
+ # Ignoring this prototype would result in the symbol always being
|
||||
+ # marked as available.
|
||||
+ if '#include' in prefix:
|
||||
+ head, main = self._have_prototype_templ()
|
||||
+ else:
|
||||
+ head, main = self._no_prototype_templ()
|
||||
+ templ = head + stubs_fail + main
|
||||
+
|
||||
# Add -O0 to ensure that the symbol isn't optimized away by the compiler
|
||||
args = extra_args + self.get_no_optimization_args()
|
||||
- # Sometimes the implementation is provided by the header, or the header
|
||||
- # redefines the symbol to be something else. In that case, we want to
|
||||
- # still detect the function. We still want to fail if __stub_foo or
|
||||
- # _stub_foo are defined, of course.
|
||||
- header_templ = '#include <limits.h>\n{0}\n' + stubs_fail + '\nint main() {{ {1}; }}'
|
||||
- if self.links(header_templ.format(prefix, funcname), env, args, dependencies):
|
||||
+ if self.links(templ.format(prefix, funcname), env, extra_args, dependencies):
|
||||
return True
|
||||
# Some functions like alloca() are defined as compiler built-ins which
|
||||
# are inlined by the compiler, so test for that instead. Built-ins are
|
@ -1,23 +0,0 @@
|
||||
From 4be8e71fb380a0541b69992539a0695ea29b3205 Mon Sep 17 00:00:00 2001
|
||||
From: Nirbheek Chauhan <nirbheek@centricular.com>
|
||||
Date: Tue, 25 Oct 2016 08:01:21 +0530
|
||||
Subject: [PATCH] has_function: Try to use the function being checked
|
||||
|
||||
Simply placing a reference to it isn't enough for the linker to try and
|
||||
think it's being used and do a symbol availability check with
|
||||
-Wl,-no_weak_imports on OS X ld.
|
||||
--- mesonbuild/compilers.py.orig 2016-11-09 17:43:55 UTC
|
||||
+++ mesonbuild/compilers.py
|
||||
@@ -933,9 +933,9 @@ int main(int argc, char **argv) {
|
||||
"""
|
||||
# Add the 'prefix', aka defines, includes, etc that the user provides
|
||||
head = '#include <limits.h>\n{0}\n'
|
||||
- # We don't know what the function takes or returns, so just add
|
||||
- # a useless reference to it
|
||||
- main = '\nint main() {{ {1}; }}'
|
||||
+ # We don't know what the function takes or returns, so try to use it as
|
||||
+ # a function pointer
|
||||
+ main = '\nint main() {{ int a = (int) &{1}; }}'
|
||||
return head, main
|
||||
|
||||
def has_function(self, funcname, prefix, env, extra_args=None, dependencies=None):
|
@ -1,20 +0,0 @@
|
||||
From f144e50f5ca65ba67c23ff262a79c35a2c444006 Mon Sep 17 00:00:00 2001
|
||||
From: Nirbheek Chauhan <nirbheek@centricular.com>
|
||||
Date: Tue, 8 Nov 2016 16:22:40 +0530
|
||||
Subject: [PATCH] has_function: Cast to void* instead of int
|
||||
|
||||
Clang++ doesn't allow that, but void* will always be allowed because
|
||||
lots of projects depend on that.
|
||||
|
||||
error: cast from pointer to smaller type 'int' loses information
|
||||
--- mesonbuild/compilers.py.orig 2016-11-09 17:42:03 UTC
|
||||
+++ mesonbuild/compilers.py
|
||||
@@ -935,7 +935,7 @@ int main(int argc, char **argv) {
|
||||
head = '#include <limits.h>\n{0}\n'
|
||||
# We don't know what the function takes or returns, so try to use it as
|
||||
# a function pointer
|
||||
- main = '\nint main() {{ int a = (int) &{1}; }}'
|
||||
+ main = '\nint main() {{ void *a = (void*) &{1}; }}'
|
||||
return head, main
|
||||
|
||||
def has_function(self, funcname, prefix, env, extra_args=None, dependencies=None):
|
@ -1,34 +0,0 @@
|
||||
From f7431fd5dba1f59ce70b07d7074999d1e7442887 Mon Sep 17 00:00:00 2001
|
||||
From: Jussi Pakkanen <jpakkane@gmail.com>
|
||||
Date: Wed, 9 Nov 2016 15:46:40 +0200
|
||||
Subject: [PATCH] Can specify scan-build executable with an environment
|
||||
variable. Closes #1015.
|
||||
|
||||
--- mesonbuild/scripts/scanbuild.py.orig 2016-10-17 17:38:14 UTC
|
||||
+++ mesonbuild/scripts/scanbuild.py
|
||||
@@ -17,10 +17,10 @@ import subprocess
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
-def scanbuild(srcdir, blddir, privdir, logdir, args):
|
||||
+def scanbuild(exename, srcdir, blddir, privdir, logdir, args):
|
||||
with tempfile.TemporaryDirectory(dir=privdir) as scandir:
|
||||
- meson_cmd = ['scan-build'] + args
|
||||
- build_cmd = ['scan-build', '-o', logdir, 'ninja']
|
||||
+ meson_cmd = [exename] + args
|
||||
+ build_cmd = [exename, '-o', logdir, 'ninja']
|
||||
rc = subprocess.call(meson_cmd + [srcdir, scandir])
|
||||
if rc != 0:
|
||||
return rc
|
||||
@@ -33,7 +33,8 @@ def run(args):
|
||||
privdir = os.path.join(blddir, 'meson-private')
|
||||
logdir = os.path.join(blddir, 'meson-logs/scanbuild')
|
||||
shutil.rmtree(logdir, ignore_errors=True)
|
||||
- if not shutil.which('scan-build'):
|
||||
- print('Scan-build not installed')
|
||||
+ exename = os.environ.get('SCANBUILD', 'scan-build')
|
||||
+ if not shutil.which(exename):
|
||||
+ print('Scan-build not installed.')
|
||||
return 1
|
||||
- return scanbuild(srcdir, blddir, privdir, logdir, meson_cmd)
|
||||
+ return scanbuild(exename, srcdir, blddir, privdir, logdir, meson_cmd)
|
@ -1,59 +1,10 @@
|
||||
From 999669e8501501d4618588008e4bf4353a1ace2a Mon Sep 17 00:00:00 2001
|
||||
From: Patrick Griffis <tingping@tingping.se>
|
||||
Date: Fri, 30 Sep 2016 23:28:40 -0400
|
||||
Subject: [PATCH] setup.py: On Unix install scripts without .py suffix
|
||||
|
||||
--- setup.py.orig 2016-10-17 17:38:14 UTC
|
||||
--- setup.py.orig 2016-11-13 20:01:34 UTC
|
||||
+++ setup.py
|
||||
@@ -14,7 +14,9 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
+import os
|
||||
import sys
|
||||
+from os import path
|
||||
|
||||
if sys.version_info[0] < 3:
|
||||
print('Tried to install with Python 2, Meson only supports Python 3.')
|
||||
@@ -25,8 +27,32 @@ if sys.version_info[0] < 3:
|
||||
# plain distutils when setuptools is not available.
|
||||
try:
|
||||
from setuptools import setup
|
||||
+ from setuptools.command.install_scripts import install_scripts as orig
|
||||
except ImportError:
|
||||
from distutils.core import setup
|
||||
+ from distutils.command.install_scripts import install_scripts as orig
|
||||
+
|
||||
+from distutils.file_util import copy_file
|
||||
+from distutils.dir_util import mkpath
|
||||
+from stat import ST_MODE
|
||||
+
|
||||
+class install_scripts(orig):
|
||||
+ def run(self):
|
||||
+ if sys.platform == 'win32':
|
||||
+ super().run()
|
||||
+ return
|
||||
+
|
||||
+ self.outfiles = []
|
||||
+ if not self.dry_run:
|
||||
+ mkpath(self.install_dir)
|
||||
+
|
||||
+ # We want the files to be installed without a suffix on Unix
|
||||
+ for infile in self.get_inputs():
|
||||
+ in_stripped = infile[:-3] if infile.endswith('.py') else infile
|
||||
+ outfile = path.join(self.install_dir, in_stripped)
|
||||
+ # NOTE: Mode is preserved by default
|
||||
+ copy_file(infile, outfile, dry_run=self.dry_run)
|
||||
+ self.outfiles.append(outfile)
|
||||
|
||||
from mesonbuild.coredata import version
|
||||
|
||||
@@ -46,7 +72,8 @@ setup(name='meson',
|
||||
'mesonconf.py',
|
||||
@@ -73,7 +73,7 @@ setup(name='meson',
|
||||
'mesonintrospect.py',
|
||||
'wraptool.py'],
|
||||
cmdclass={'install_scripts': install_scripts},
|
||||
- data_files=[('share/man/man1', ['man/meson.1',
|
||||
+ cmdclass={'install_scripts': install_scripts},
|
||||
+ data_files=[('man/man1' , ['man/meson.1',
|
||||
'man/mesonconf.1',
|
||||
'man/mesonintrospect.1',
|
||||
|
Loading…
Reference in New Issue
Block a user