about summary refs log tree commit diff
path: root/scripts
Commit message (Collapse)AuthorAgeFilesLines
* Use binutils 2.35 branch in build-many-glibcs.py.Joseph Myers2020-07-271-1/+1
| | | | | | This patch makes build-many-glibcs.py use binutils 2.35 branch. Tested with build-many-glibcs.py (compilers and glibcs builds).
* Use MPFR 4.1.0 in build-many-glibcs.py.Joseph Myers2020-07-201-1/+1
| | | | | | | This patch makes build-many-glibcs.py use the new MPFR 4.1.0 release. Tested with build-many-glibcs.py (host-libraries, compilers and glibcs builds).
* Remove --enable-obsolete-rpc configure flagPetr Vorel2020-07-131-6/+0
| | | | | | | | | | | | | | | | | | | | | | Sun RPC was removed from glibc. This includes rpcgen program, librpcsvc, and Sun RPC headers. Also test for bug #20790 was removed (test for rpcgen). Backward compatibility for old programs is kept only for architectures and ABIs that have been added in or before version 2.28. libtirpc is mature enough, librpcsvc and rpcgen are provided in rpcsvc-proto project. NOTE: libnsl code depends on Sun RPC (installed libnsl headers use installed Sun RPC headers), thus --enable-obsolete-rpc was a dependency for --enable-obsolete-nsl (removed in a previous commit). The arc ABI list file has to be updated because the port was added with the sunrpc symbols Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* build-many-glibcs.py: Enable ARC buildsVineet Gupta2020-07-101-0/+10
| | | | Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Remove --enable-obsolete-nsl configure flagPetr Vorel2020-07-081-4/+2
| | | | | | | | | | | | | | | | | | | this means that *always* libnsl is only built as shared library for backward compatibility and the NSS modules libnss_nis and libnss_nisplus are not built at all, libnsl's headers aren't installed. This compatibility is kept only for architectures and ABIs that have been added in or before version 2.28. Replacement implementations based on TIRPC, which additionally support IPv6, are available from <https://github.com/thkukuk/>. This change does not affect libnss_compat which does not depended on libnsl since 2.27 and thus can be used without NIS. libnsl code depends on Sun RPC, e.g. on --enable-obsolete-rpc (installed libnsl headers use installed Sun RPC headers), which will be removed in the following commit.
* signal: Move sys_errlist to a compat symbolAdhemerval Zanella2020-07-071-2/+1
| | | | | | | | | | | | | | | | | | | | The symbol is deprecated by strerror since its usage imposes some issues such as copy relocations. Its internal name is also changed to _sys_errlist_internal to avoid static linking usage. The compat code is also refactored by removing the over enginered errlist-compat.c generation from manual entried and extra comment token in linker script file. It disantangle the code generation from manual and simplify both Linux and Hurd compat code. The definitions from errlist.c are moved to errlist.h and a new test is added to avoid a new errno entry without an associated one in manual. Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi on all affected platforms. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* Use Linux 5.7 in build-many-glibcs.py.Joseph Myers2020-06-101-1/+1
| | | | | | | This patch makes build-many-glibcs.py use Linux 5.7. Tested with build-many-glibcs.py (host-libraries, compilers and glibcs builds).
* Use GCC 10 branch in build-many-glibcs.py.Joseph Myers2020-05-061-1/+1
| | | | | | | This updates the default GCC version used in build-many-glibcs.py when no version is specified explicitly. I'm replacing my bot using GCC 8 with one using GCC 10 (leaving the GCC 9 and GCC mainline bots running as at present).
* Linux: Remove <sys/sysctl.h> and the sysctl functionFlorian Weimer2020-04-151-5/+0
| | | | | | | | | | | | | | | Linux 5.5 remove the system call in commit 61a47c1ad3a4dc6882f01ebdc88138ac62d0df03 ("Linux: Remove <sys/sysctl.h>"). Therefore, the compat function is just a stub that sets ENOSYS. Due to SHLIB_COMPAT, new ports will not add the sysctl function anymore automatically. x32 already lacks the sysctl function, so an empty sysctl.c file is used to suppress it. Otherwise, a new compat symbol would be added. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Use Linux 5.6 and GMP 6.2.0 in build-many-glibcs.py.Joseph Myers2020-03-311-2/+2
| | | | | | | | This patch makes build-many-glibcs.py use the current versions of Linux (5.6) and GMP (6.2.0). Tested with build-many-glibcs.py (host-libraries, compilers and glibcs builds).
* build-many-glibcs.py: Add list-compilers, list-glibcs commandsFlorian Weimer2020-03-031-4/+21
| | | | | These commands are helpful for scripting the distribution of build-many-glibcs.py runs across multiple builders.
* build-many-glibcs.py: Add --shallow optionFlorian Weimer2020-03-031-3/+12
| | | | | | | | The history is not used by build-many-glibcs.py itself. --replace-sources deletes an existing source tree before switching the version. But some users prefer to have the full history available, therefore make shallow clones optional with the --shallow option.
* elf: Add elf/check-wx-segment, a test for the presence of WX segmentsFlorian Weimer2020-03-021-0/+85
| | | | | | | Writable, executable segments defeat security hardening. The existing check for DT_TEXTREL does not catch this. hppa and SPARC currently keep the PLT in an RWX load segment.
* Use gcc -finput-charset=ascii for check-installed-headers.Stefan Liebler2020-02-131-1/+2
| | | | | | | | | | | | | | | | | | | | A non-ascii character in the installed headers leads now to: error: failure to convert ascii to UTF-8 Such a finding in s390 specific fenv.h leads to fails in GCC testsuite. See glibc commit 08aea89ef67c5780ae734073494df0a451bce20f. Adding this gcc option also to our tests was proposed by Florian Weimer. This change also found a hit in resource.h where now "microseconds" is used. I've adjusted all the resource.h files. I've used the following command to check for further hits in headers. LC_ALL=C find -name "*.h" -exec grep -PHn "[\x80-\xFF]" {} \; Tested on s390x and x86_64. Reviewed-by: Zack Weinberg <zackw@panix.com>
* Use --disable-gdbserver in build-many-glibcs.py.Joseph Myers2020-02-101-0/+1
| | | | | | | | | | | | | Now that binutils-gdb has gdbserver at top level, an extra --disable-gdbserver configure option is needed when configuring binutils from a git checkout to avoid it also building gdbserver unnecessarily (although fairly harmlessly). This patch updates the options used in build-many-glibcs.py accordingly (although this might end up not being needed depending on what happens regarding whether gdbserver gets built for host != target). Tested with a build-many-glibcs.py compilers build for aarch64-linux-gnu using binutils-gdb master.
* Use binutils 2.34 branch in build-many-glibcs.py.Joseph Myers2020-02-031-1/+1
| | | | | | This patch makes build-many-glibcs.py use binutils 2.34 branch. Tested with build-many-glibcs.py (compilers and glibcs builds).
* Use Linux 5.5 in build-many-glibcs.py.Joseph Myers2020-02-031-1/+1
| | | | | | This patch makes build-many-glibcs.py use Linux 5.5. Tested with build-many-glibcs.py (compilers and glibcs builds).
* list-fixed-bugs.py: Wrap at 72 charsSiddhesh Poyarekar2020-02-031-1/+1
| | | | | | | Wrap the bug list output at 72 chars to make it easy to paste into emails. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
* gitlog-to-changelog: Drop scripts in favour of gnulib versionSiddhesh Poyarekar2020-01-235-1181/+0
| | | | | | | | | | | | | The ChangeLog automation scripts were incorporated in gnulib as vcs-to-changelog for a while now since other projects expressed the desire to use and extend this script. In the interest of avoiding duplication of code, drop the glibc version of gitlog-to-changelog and use the gnulib one directly. The only file that remains is vcstocl_quirks.py, which specifies properties and quirks of the glibc project source code. This patch also drops the shebang at the start of vcstocl_quirks.py since the file is not intended to be directly executable.
* vcs-to-changelog: Add quirk for __nonnullSiddhesh Poyarekar2020-01-171-0/+2
| | | | | The parser cannot identify the __nonnull off the bat and confuses __typeof in the change db25266c9 to be a function declaration.
* Update build-many-glibcs.py for GCC move to git.Joseph Myers2020-01-131-10/+17
| | | | | | | This patch updates build-many-glibcs.py for the move of GCC to git, teaching it to do the initial checkout from git, to replace an SVN checkout with a git one if --replace-sources is used, and to get the commit identifier from a git checkout after updating it.
* Fix formatting of ChangeLog ouputSiddhesh Poyarekar2020-01-071-1/+1
| | | | | | Add another newline when the number of files differing is too large. This is typical for across-the-board changes such as the copyright year update that happened recently.
* build-many-glibcs.py: Fix “glibcs i686-gnu --strip”Florian Weimer2020-01-021-4/+9
| | | | | | Hurd uses an empty prefix, so the linker scripts end up in /lib, the find command picked them up, and stripping them failed because they are not ELF files.
* build-many-glibcs.py: Implement update-syscalls commandFlorian Weimer2020-01-021-3/+62
| | | | | | | | | This command uses pre-built compilers to re-install the Linux headers from the current sources into a temporary location and runs glibc's “make update-syscalls-lists” against that. This updates the glibc source tree with the current system call numbers. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
* build-many-glibcs.py: Introduce glibc build policy classesFlorian Weimer2020-01-021-49/+80
| | | | | | | | The new classes GlibcPolicyForCompiler and GlibcPolicyForBuild allow customization of the Glibc.build_glibc method, replacing the existing for_compiler flag. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
* build-many-glibcs.py: Introduce LinuxHeadersPolicyForBuildFlorian Weimer2020-01-021-43/+48
| | | | | | And move install_linux_headers to the top level. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
* Update copyright dates not handled by scripts/update-copyrights.Joseph Myers2020-01-011-1/+1
| | | | | | | | | | | | | | | I've updated copyright dates in glibc for 2020. This is the patch for the changes not generated by scripts/update-copyrights and subsequent build / regeneration of generated files. As well as the usual annual updates, mainly dates in --version output (minus libc.texinfo which previously had to be handled manually but is now successfully updated by update-copyrights), there is a fix to sysdeps/unix/sysv/linux/powerpc/bits/termios-c_lflag.h where a typo in the copyright notice meant it failed to be updated automatically. Please remember to include 2020 in the dates for any new files added in future (which means updating any existing uncommitted patches you have that add new files to use the new copyright dates in them).
* Update copyright dates with scripts/update-copyrights.Joseph Myers2020-01-0129-29/+29
|
* build-many-glibcs.py: Do not build C++ PCHs by defaultFlorian Weimer2019-12-181-2/+5
| | | | | They are not used during the subsequent glibc build, so creating them merely wastes time.
* build-many-glibcs.py: Add mipsisa64r6el-linux-gnu targetDragan Mladjenovic2019-12-161-0/+11
| | | | | This patch enables building mips/r6 isa/little-endian/hard-float configuration in o32, n32, and n64 variants.
* build-many-glibcs.py: Move sparcv8 to extra_glibcsAdhemerval Zanella2019-12-051-4/+5
| | | | | | | | | | | It also fixes the sparcv9-linux-gnu-disable-multi-arch configuration. The resulting sparc possible build permutations are: - sparc64-linux-gnu - sparcv9-linux-gnu - sparcv8-linux-gnu-leon3 (from extra_glibcs) - sparc64-linux-gnu-disable-multi-arch (from extra_glibcs) - sparcv9-linux-gnu-disable-multi-arch (from extra_glibcs)
* Fix syntax error in build-many-glibcs.py.Joseph Myers2019-11-281-1/+1
| | | | | | | | | | The recent SPARC changes caused a syntax error: 'ccopts': '-m32 -mlong-double-128 -mcpu=v9'}], ^ SyntaxError: invalid syntax Fixed by this patch.
* Remove 32 bit sparc v7 supportAdhemerval Zanella2019-11-271-6/+4
| | | | | | | | | | | | | | | | | | The patch is straighforward: - The sparc32 v8 implementations are moved as the generic ones. - A configure test is added to check for either __sparc_v8__ or __sparc_v9__. - The triple names are simplified and sparc implies sparcv8. The idea is to keep support on sparcv8 architectures that does support CAS instructions, such as LEON3/LEON4. Checked on a sparcv9-linux-gnu and sparc64-linux-gnu. Tested-by: Andreas Larsson <andreas@gaisler.com>
* Use Linux 5.4 in build-many-glibcs.py.Joseph Myers2019-11-261-1/+1
| | | | | | This patch makes build-many-glibcs.py use Linux 5.4. Tested with build-many-glibcs.py (compilers and glibcs builds).
* Use binutils 2.33 branch in build-many-glibcs.py.Joseph Myers2019-09-301-1/+1
| | | | | | | | | This patch makes build-many-glibcs.py default to binutils 2.33 branch. Tested with build-many-glibcs.py (compilers and glibcs builds). * scripts/build-many-glibcs.py (Context.checkout): Default binutils version to 2.33 branch.
* auto-changelog: Remove latin1 from codecsSiddhesh Poyarekar2019-09-261-1/+1
| | | | | Bruno Haible had pointed out that latin1 is a subset of cp1252 and is hence redundant. I forgot to remove it back then.
* Script to generate ChangeLog-like output from git logSiddhesh Poyarekar2019-09-205-0/+1244
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Co-authored-by: Gabriel F. T. Gomes <gabriel@inconstante.net.br> Reviewed-by: Gabriel F. T. Gomes <gabriel@inconstante.net.br> Reviewed-by: Joseph Myers <joseph@codesourcery.com> The utility of a ChangeLog file has been discussed in various mailing list threads and GNU Tools Cauldrons in the past years and the general consensus is that while the file may have been very useful in the past when revision control did not exist or was not as powerful as it is today, it's current utility is fast diminishing. Further, the ChangeLog format gets in the way of modernisation of processes since it almost always results in rewriting of a commit, thus preventing use of any code review tools to automatically manage patches in the glibc project. There is consensus in the glibc community that documentation of why a change was done (i.e. a detailed description in a git commit) is more useful than what changed (i.e. a ChangeLog entry) since the latter can be deduced from the patch. The GNU community would however like to keep the option of ascertaining what changed through a ChangeLog-like output and as a compromise, it was proposed that a script be developed that generates this output. The script below is the result of these discussions. This script takes two git revisions references as input and generates the git log between those revisions in a form that resembles a ChangeLog. Its capabilities and limitations are listed in a comment in the script. On a high level it is capable of parsing C code and telling what changed at the top level, but not within constructs such as functions. Design ------ At a high level, the script analyses the raw output of a VCS, parses the source files that have changed and attempts to determine what changed. The script driver needs three distinct components to be fully functional for a repository: - A vcstocl_quirks.py file that helps it parse weird patterns in sources that may result from preprocessor defines. - A VCS plugin backend; the git backend is implemented for glibc - A programming language parser plugin. C is currently implemented. Additional programming language parsers can be added to give more detailed output for changes in those types of files. For input in languages other than those that have a parser, the script only identifies if a file has been added, removed, modified, permissions changed, etc. but cannot understand the change in content. The C Parser ------------ The C parser is capable of parsing C programs with preprocessor macros in place, as if they were part of the language. This presents some challenges with parsing code that expands macros on the fly and to help work around that, a vcstocl_quirks.py file has transformations to ease things. The C parser currently can identify macro definitions and scopes and all global and static declarations and definitions. It cannot parse (and compare) changes inside functions yet, it could be a future enhancement if the need for it arises. Testing ------- The script has been tested with the glibc repository up to glibc-2.29 and also in the past with emacs. While it would be ideal to have something like this in a repository like gnulib, that should not be a bottleneck for glibc to start using this, so this patch proposes to add these scripts into glibc. And here is (hopefully!) one of the last ChangeLog entries we'd have to write for glibc: * scripts/gitlog_to_changelog.py: New script to auto-generate ChangeLog. * scripts/vcs_to_changelog/frontend_c.py: New file. * scripts/vcs_to_changelog/misc_util.py: New file. * scripts/vcs_to_changelog/vcs_git.py: New file. * scripts/vcs_to_changelog/vcstocl_quirks.py: Likewise.
* Use Linux 5.3 in build-many-glibcs.py.Joseph Myers2019-09-181-1/+1
| | | | | | | | | | This patch makes build-many-glibcs.py use Linux 5.3. Tested with build-many-glibcs.py (host-libraries, compilers and glibcs builds). * scripts/build-many-glibcs.py (Context.checkout): Default Linux version to 5.3.
* Prefer https to http for gnu.org and fsf.org URLsPaul Eggert2019-09-0721-21/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also, change sources.redhat.com to sourceware.org. This patch was automatically generated by running the following shell script, which uses GNU sed, and which avoids modifying files imported from upstream: sed -ri ' s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g ' \ $(find $(git ls-files) -prune -type f \ ! -name '*.po' \ ! -name 'ChangeLog*' \ ! -path COPYING ! -path COPYING.LIB \ ! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \ ! -path manual/texinfo.tex ! -path scripts/config.guess \ ! -path scripts/config.sub ! -path scripts/install-sh \ ! -path scripts/mkinstalldirs ! -path scripts/move-if-change \ ! -path INSTALL ! -path locale/programs/charmap-kw.h \ ! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \ ! '(' -name configure \ -execdir test -f configure.ac -o -f configure.in ';' ')' \ ! '(' -name preconfigure \ -execdir test -f preconfigure.ac ';' ')' \ -print) and then by running 'make dist-prepare' to regenerate files built from the altered files, and then executing the following to cleanup: chmod a+x sysdeps/unix/sysv/linux/riscv/configure # Omit irrelevant whitespace and comment-only changes, # perhaps from a slightly-different Autoconf version. git checkout -f \ sysdeps/csky/configure \ sysdeps/hppa/configure \ sysdeps/riscv/configure \ sysdeps/unix/sysv/linux/csky/configure # Omit changes that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines git checkout -f \ sysdeps/powerpc/powerpc64/ppc-mcount.S \ sysdeps/unix/sysv/linux/s390/s390-64/syscall.S # Omit change that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
* build-many-glibcs.py: Use Linux 5.2 by defaultFlorian Weimer2019-07-241-1/+1
|
* build-many-glibcs.py: Add v4t variant for arm-linux-gnueabiFlorian Weimer2019-07-021-1/+3
|
* Linux: Deprecate <sys/sysctl.h> and sysctlFlorian Weimer2019-06-121-21/+3
| | | | | | | | | | Now that there are no internal users of __sysctl left, it is possible to add an unconditional deprecation warning to <sys/sysctl.h>. To avoid a test failure due this warning in check-install-headers, skip the test for sys/sysctl.h. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Remove support for PowerPC SPE extension (powerpc*-*-*gnuspe*).Zack Weinberg2019-05-221-9/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GCC 9 dropped support for the SPE extensions to PowerPC, which means powerpc*-*-*gnuspe* configurations are no longer buildable with that compiler. This ISA extension was peculiar to the “e500” line of embedded PowerPC chips, which, as far as I can tell, are no longer being manufactured, so I think we should follow suit. This patch was developed by grepping for “e500”, “__SPE__”, and “__NO_FPRS__”, and may not eliminate every vestige of SPE support. Most uses of __NO_FPRS__ are left alone, as they are relevant to normal embedded PowerPC with soft-float. * sysdeps/powerpc/preconfigure: Error out on powerpc-*-*gnuspe* host type. * scripts/build-many-glibcs.py: Remove powerpc-*-linux-gnuspe and powerpc-*-linux-gnuspe-e500v1 from list of build configurations. * sysdeps/powerpc/powerpc32/e500: Recursively delete. * sysdeps/unix/sysv/linux/powerpc/powerpc32/e500: Recursively delete. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/context-e500.h: Delete. * sysdeps/powerpc/fpu_control.h: Remove SPE variant. Issue an #error if used with a compiler in SPE-float mode. * sysdeps/powerpc/powerpc32/__longjmp_common.S * sysdeps/powerpc/powerpc32/setjmp_common.S * sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S: Remove code to preserve SPE register state. * sysdeps/unix/sysv/linux/powerpc/elision-lock.c * sysdeps/unix/sysv/linux/powerpc/elision-trylock.c * sysdeps/unix/sysv/linux/powerpc/elision-unlock.c Remove __SPE__ ifndefs.
* Revert "Use Linux 5.1 in build-many-glibcs.py."Joseph Myers2019-05-071-1/+1
| | | | | | | | | This reverts commit c2b11710fb4a2e8d337ae8f042724143c5ccf173. Linux 5.1 headers are not in fact usable for glibc testing, because "[PATCH] uapi: avoid namespace conflict in linux/posix_types.h" <https://lore.kernel.org/lkml/20190319165123.3967889-1-arnd@arndb.de/> did not get merged for 5.1 and so many conform/ tests fail.
* Use Linux 5.1 in build-many-glibcs.py.Joseph Myers2019-05-071-1/+1
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default Linux version to 5.1.
* Use GCC 9 in build-many-glibcs.py.Joseph Myers2019-05-071-1/+1
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default GCC version to 9 branch.
* scripts/check-obsolete-constructs.py: Process all headers as UTF-8.Zack Weinberg2019-03-141-1/+1
| | | | | | | | | | A few of our installed headers contain UTF-8 in comments. check-obsolete-constructs opened files without explicitly specifying their encoding, so it would barf on these headers if “make check” was run in a non-UTF-8 locale. * scripts/check-obsolete-constructs.py (HeaderChecker.check): Specify encoding="utf-8" when opening headers to check.
* Use Linux 5.0 in build-many-glibcs.py.Joseph Myers2019-03-131-3/+4
| | | | | | | | | | | | | | | | | This patch makes build-many-glibcs.py use Linux 5.0 in place of 4.20 (now that the test change required to avoid false positives with ulong in kernel headers has been committed). This includes adjusting the logic to compute a tarball URL to handle different major version numbers (rather than changing the path to hardcode v5.x in place of v4.x, as someone might still wish to check out a v4.x version). Tested that build-many-glibcs.py successfully checks out Linux 5.0 sources after this patch. * scripts/build-many-glibcs.py (Context.checkout): Default Linux version to 5.0. (Context.checkout_tar): Handle variable major version for Linux kernel.
* Use a proper C tokenizer to implement the obsolete typedefs test.Zack Weinberg2019-03-132-32/+471
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The test for obsolete typedefs in installed headers was implemented using grep, and could therefore get false positives on e.g. “ulong” in a comment. It was also scanning all of the headers included by our headers, and therefore testing headers we don’t control, e.g. Linux kernel headers. This patch splits the obsolete-typedef test from scripts/check-installed-headers.sh to a separate program, scripts/check-obsolete-constructs.py. Being implemented in Python, it is feasible to make it tokenize C accurately enough to avoid false positives on the contents of comments and strings. It also only examines $(headers) in each subdirectory--all the headers we install, but not any external dependencies of those headers. Headers whose installed name starts with finclude/ are ignored, on the assumption that they contain Fortran. It is also feasible to make the new test understand the difference between _defining_ the obsolete typedefs and _using_ the obsolete typedefs, which means posix/{bits,sys}/types.h no longer need to be exempted. This uncovered an actual bug in bits/types.h: __quad_t and __u_quad_t were being used to define __S64_TYPE, __U64_TYPE, __SQUAD_TYPE and __UQUAD_TYPE. These are changed to __int64_t and __uint64_t respectively. This is a safe change, despite the comments in bits/types.h claiming a difference between __quad_t and __int64_t, because those comments are incorrect. In all current ABIs, both __quad_t and __int64_t are ‘long’ when ‘long’ is a 64-bit type, and ‘long long’ when ‘long’ is a 32-bit type, and similarly for __u_quad_t and __uint64_t. (Changing the types to be what the comments say they are would be an ABI break, as it affects C++ name mangling.) This patch includes a minimal change to make the comments not completely wrong. sys/types.h was defining the legacy BSD u_intN_t typedefs using a construct that was not necessarily consistent with how the C99 uintN_t typedefs are defined, and is also too complicated for the new script to understand (it lexes C relatively accurately, but it does not attempt to expand preprocessor macros, nor does it do any actual parsing). This patch cuts all of that out and uses bits/types.h's __uintN_t typedefs to define u_intN_t instead. This is verified to not change the ABI on any supported architecture, via the c++-types test, which means u_intN_t and uintN_t were, in fact, consistent on all supported architectures. Reviewed-by: Carlos O'Donell <carlos@redhat.com> * scripts/check-obsolete-constructs.py: New test script. * scripts/check-installed-headers.sh: Remove tests for obsolete typedefs, superseded by check-obsolete-constructs.py. * Rules: Run scripts/check-obsolete-constructs.py over $(headers) as a special test. Update commentary. * posix/bits/types.h (__SQUAD_TYPE, __S64_TYPE): Define as __int64_t. (__UQUAD_TYPE, __U64_TYPE): Define as __uint64_t. Update commentary. * posix/sys/types.h (__u_intN_t): Remove. (u_int8_t): Typedef using __uint8_t. (u_int16_t): Typedef using __uint16_t. (u_int32_t): Typedef using __uint32_t. (u_int64_t): Typedef using __uint64_t.
* check-wrapper-headers test: Adjust Fortran include file directoryFlorian Weimer2019-03-071-1/+1
| | | | | | | The check for "/finclude/" fails with the actual location of Fortran headers because they are now stored in the "finclude" subdirectory of the top-level include directory, so a relative path does not contain a slash '/' before the "finclude" string.