- Ada 2012
- Ada 2005 / 95 / 83
- Embedded Development
- Formal Methods
- Open Source
- Safety-Critical Development
- Static Analysis
Extending a package from a project being extended
In an extending project A, it is now possible to extend a package P from the project being extended B, when project B is extending another project C and package P is not declared in project B but has only been inherited from project C.
Environment variables TEMP and TMP for temp dir
In addition to environment variable TMPDIR, TEMP and TMP are potentially used by the Project Manager to store temporary files. If one of these environment variables designates the absolute path of a directory, this directory is used to store the temporaty files. TMPDIR is checked first, then TEMP, then TMP. If none of those designates the full path of a directory, then the temporary files are stored in object directories.
GPRbuild response files
GPRbuild now supports response files. A response file is a text file, specified to gprbuild with argument '@<argument_file_path>'. The path is either absolute or relative to the current working directory. Each line in a response file is an argument for gprbuild. An argument '@<file>' is not allowed in a response file.
Add support for skipping new project generation
The new GPRinstall's --no-project command line option and install package attribute Install_Project can be used to disable generation and installation of the project file.
New gprbuild switch—no-complete-output / -n
A new switch is added to gprbuild, --no-complete-output or equivalent -n. This switch is only accepted on the command line, not in package Builder. When this switch is used, no files .stderr or .stdout are created by the compilers. This switch also cancels any previous switch --complete-output.
New attribute Install_Project in package Install
This new attribute controls whether to install a project file together with the sources and/or objects and libraries.
New GPRname switch—ignore-duplicate-files
GPRname has a new switch --ignore-duplicate-files which will ignore identical basenames when scanning for sources. In addition, a warning is now emitted by default when not using this switch to warn about potential conflicts when duplicate filenames are found.
New attribute Required_Artifacts
A new attribute Required_Artifacts has been introduced. This new attribute complements the Artifacts attribute and is very similar except that the artifacts must exist or an error is reported.
New GPRname switch—ignore-predefined-units
GPRname has a new switch --ignore-predefined-units which will not consider any predefined Ada unit (children of Ada, Interfaces and System packages) when scanning source files.
Recognize native compiler of different architecture
On multiarch systems, gprbuild can now recognize a native compiler of a different architecture than itself.
SAL projects and -bargs
When gprbuild is invoked with a main project that is a Stand-Alone Library project and with binding options specified on the command line after switch -bargs, a warning is displayed indicating that command line binding options are not taken into account when the main project is a SAL project.
GPRinstall support for separate ALI directory
The new GPRinstall's --ali-subdir option can be used to install the ALI files into a specific directory.
New gprname switch—RTS=
gprname has now a switch --RTS= like all other GPR tools, as it is necessary for targets that do not have a default runtime.
GPRinstall support for separate debug symbol file
The new GPRinstall's --side-debug option can be used to write debug symbols out of executables and libraries into a separate file. If the executable to be installed is named main, then the debug information is moved into the file main.debug and is removed from the executable.
Performance improvement when building libraries
When binding Stand-Alone Libraries, gprbuild no longer gets the time stamps of the sources and object files if they are already known, if the main project is not an aggregate project.
A new switch --no-sal-binding is added to gprbuild. When this switch is used gprbuild will not rebind Stand-Alone Libraries, it will reuse the files created during a previous build of the SAL, and will fail if there are missing files.
Interfaces in aggregate library projects
Attribute Interfaces is now allowed in aggregate library projects.
A new switch --closure is added to gprls, to display the full paths of the sources in the closures of one or several mains.
New builtin function Split
A new builtin function Split is introduced. It takes two string parameters and returned a string list. Examples: Split ("-gnatf,-gnatv", ",") => ("-gnatf", "-gnatv") Split (external ("COMP_FLAGS", "-gnatf,-gnatv"), ",")
gprbuild switch -v is now equivalent to switch -vl (low verbosity) instead of -vh. And invoking gprbuild with -v or -vl no longer outputs information about the inner behavior of gprbuild.
A new gprbuild switch --build-script= is added, to create a shell script that would allow to repeat the same build with the same sources, provided that the temporary files created in the invocation of gprbuild are not deleted.
Environment variable GPR_RUNTIME_PATH
When the Ada runtime directory is specified with switch --RTS or attribute Runtime ("Ada") as a relative path, the path may be relative to the project directory of the main project, or if the environment variable GPR_RUNTIME_PATH is defined to the path specified by the value of this environment variable.
gprbuild default output
The default output of gprbuild is now synthetic, without any abridged commands to invoke the compilers, binder or linker. Example: $ gprbuild prj.gpr Compile [Ada] main.adb Bind [gprbind] main.bexch [Ada] main.ali Link [link] main.adb
Setting the default verbosity
It is now possible to control the default verbosity without to use switches -v or -q, with environment variable GPR_VERBOSITY. The possible values, case-insensitive, are "quiet", "default", "verbose", "verbose_high", "verbose_medium" and "verbose_low". Any other value is ignored.
Runtimes with multiple directories
Runtimes with multiple directories for sources or object/libraries are now properly supported.
Runtime () as a relative path
It is now possible to specify a runtime directory with the attribute Runtime as a relative path, in the main project. Example: for Runtime ("Ada") use "./rts"; The path is relative to the project directory of the main project.
Errors with switches—restricted-to-languages=
When gprbuild is invoked with switch --restricted-to-languages= and the configuration project file does not include attributes for languages that are not in the list of restricted languages, errors on the sources of these languages are inhibited.
Temporary config project with autoconfiguration
The Project Manager now creates a temporary configuration project file when in auto-configuration. This file is deleted when the tool terminates. This allows several project-aware tools invocations to work in parallel with the same object directory.
New attribute Origin_Project
A new project level attribute Origin_Project is defined. Its value is a single string and designates a project name. It may be used for various purposes by project aware tools.
New procedure Get_Closures
A new procedure GPR.Util.Get_Closures is added. It allows to get the full paths of the sources in the Ada closures of one or several mains.
GPRbuild supports response files during compilation
GPRbuild, when the language is configured appropriately and the compilation command line is long, will invoke the compiler with a response file. This will avoid problems on platforms where the maximum length of the command line or of the value of an environment variable is not very high.
GPRinstall minimal installation enhancement
Now GPRinstall running in minimal installation mode won't install a body even if a specific naming scheme is defined.
GPRbuild encapsulated libraries on all linux
Now GPRbuild supports encapsulated libraries for all linux platforms when using a recent GNAT Pro compiler.
GPRbuild distributed slave error messages
Now GPRbuild gives a clearer error messages when it cannot connect to a specific slave. The slave machine is given in the error message.
GPRslave can now be pinged
Now GPRslave will respond to a ping command and returns some information (version, UTC time, hash) about the slave if running. This can be used by application for checking available slaves.
GPRbuild distributed environment consistency
A new option (--hash) has been added in GPRbuild and GPRslave. The value specified can be used to ensure that the environment is consistent on both sides.
GPRbuild distributed ignore Mercurial metadata
The Mercurial metadata directory has been added into the excluded patterns by default.
Path names of duplicate unit sources
In verbose mode, when a duplicate unit is found in two sources, the path names of the two sources are now output.
New Library_Kind “static-pic”
A new library kind "static-pic" is introduced. static-pic libraries are static libraries, but their code is compiled with the PIC option, if it exists.
Nov 18th, 2015
Allow more packages in aggregate projects
Packages Naming, Compiler, Binder and Linker are not allowed in aggregate projects and aggregate library projects. In addition, package Install is not allowed in aggregate projects. All other packages are allowed.
Add progress indication on the GPRslave
GPRslave will now display (in verbose mode) a progress indicator during the synchronization and the compilation.
Incomplete Ada interface of SAL is now an error
When the Ada interface of a Stand-Alone Library project is incomplete, gprbuild now reports an error instead of a warning.
GPRbuild now restrict symbols from a SAL
GPRbuild now restricts the symbols exported out of a SAL. The exported symbols are those part of the SAL's interface as specified by the Library_Interface or Interfaces attributes.
Oct 21st, 2015
Builder switches in aggregate projects
Switches specified in Builder'Switches (others) in a main aggregate or aggregate library project are now taken into account by gprbuild.
Oct 20th, 2015
Improve usability of code compiled on other machine
When Ada code that has been compiled on machine A for a specific runtime is used to build an executable on machine B for the same runtime, the build will now succeed in all cases, even though the path of the runtime on machine A is not the same as the path of the runtime on machine B.
Oct 14th, 2015
Improve reproducibility of builds
When gprbuild is used to build the same executable with the same project files and sources, with the same paths on two different but similar platforms, the executables will be the same and will have the same behavior. In particular, the elaboration orders of the Ada code will be the same.
Oct 10th, 2015
GPRinstall now uninstall aggregate projects
GPRinstall now has support for uninstalling aggregate projects. In this case all libraries/projects part of the aggregate project are uninstalled.
Sep 27th, 2015
GPRinstall now installs all sources by default
GPRinstall now installs all sources by default. To revert to the previous behavior the -m (minimal) switch has been introduced. Note that -a switch has been kept for compatibility reason but does nothing now.
Sep 24th, 2015
Generate symlink for library major version
GPRinstall now creates symlink for the library major version if needed.
Aug 6th, 2015
Proper process clean-up in distributed build
When a builder is interrupted (ctrl-c), GPRslave will kill all corresponding processes. By doing this we ensure faster and cleaner restart of the same compilation.