mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-15 07:59:30 +01:00
e2b1f70ac6
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f55123ce92 |
Merged revision(s) 28904-28905, 29038-29044 from branches/svenbarth/packages:
Don't try to export generic symbols. pkgutil.pas: * exportabstractrecordsymproc: do not export generic type symbols or their nested symbols ........ Ensure that the correct name is used for the PCP file. proc_package: * use current_module.modulename instead of module_name for the base filename of the PCP file ........ Add a possibility to track if a unit was loaded from a package. fmodule.pas, tmodule: + new field "package" which is Nil if the unit is not (yet) part of a package or a reference to the package this unit was loaded from fppu.pas, tppumodule: * loadfrompackage: set the "package" field of the module to the package it's loaded from. ........ Ensure that units loaded from a package are not recompiled if the source files should happen to be available. fppu.pas, tppumodule: loadppu: set the state to ms_compiled instead of ms_load if the unit was loaded from a package (additionally close the PPU file as it's no longer needed) ........ Add support for reading/writing required packages from/to the PCP file fpcp.pas, tpcppackage: + new methods writerequiredpackages and readrequiredpackages * loadpcp: use readrequiredpackages * savepcp: use writerequiredpackages pcp.pas: * increase PCP version ........ When compiling a package, handle only those units that are not yet part of a package. pmodules.pas, proc_package: * only export units that are part of the package * only add units to the package if they are really part of the package * don't rewrite the PPU if the unit is not part of the package * don't link the unit's files if it is not part of the package ........ Add support for parsing required packages. pkgutil.pas: + new function add_package to add a package to the list of available packages with the possibility to check for duplicates * load_packages: also load all required packages pmodules.pas, proc_package: * create the tpcppackage instance earlier (and use the module name as read from the source file as package name) * clear the list of packages in case the user passed any using -FPxxx * parse the "requires" section like a list of units and add each full identifier as a package to load * before parsing the "contains" section load all packages, so that all units can be correctly resolved ........ Correctly create import libraries for packages as well. pkgutil.pas, createimportlibfromexternals: * instead of processing units without the uf_in_library flag, only process those that don't have a package reference set (thus becoming part of the program/library or the package) - remove unneeded "pkg" parameter pmodules.pas: + proc_package: create the import library if the package requires other packages * proc_program: adjust call to createimportlibfromexternals ........ Ensure that the reference to the System unit is correctly set up for packages. Among other things this is needed to compile a package with the -gl option (though debug information doesn't work yet). pmodules.pas: * convert AddUnit to a function and let it return the newly loaded module * proc_package: when parsing the contained units ensure that we correctly set up the System unit reference if we are to contain the System unit * proc_package: also set up the System unit reference once all units are loaded and this hasn't happened yet (because all contained units are already compiled) ........ git-svn-id: trunk@33502 - |
||
|
|
f8e9b33f99 |
Merge first batch of package handling related revisions from the packages branch
Merged revision(s) 28796, 28837-28845, 28847-28850, 28852, 32135 from branches/svenbarth/packages:
Provide possibility to pass packages and search paths for packages as parameters.
fpkg.pas:
+ new unit which contains the base types related to package files (most importantly "tpackage")
globals.pas:
+ new variable "packagesearchpath" which contains all paths in which package files should be looked for
+ new variable "packagelist" which contains a list of all packages that should be used in a program or library
* InitGlobals & DoneGlobals: initialize/finalize "packagesearchpath" accordingly ("packagelist" is handled in unit fpkg using a init/done-callback)
options.pas:
+ TOption: new fields "parapackagepath" and "parapackages" to keep track of package search paths and package files passed as parameters
* TOption.interpret_option: use '-Fp' for package search paths and '-FP' for package files
* read_arguments: apply the passed package search paths and packages to their respective containers
........
+ add a new unit which will contain basic functions related to handling packages
........
Move package related functions from pmodules to pkgutil.
pmodules.pas => pkgutil.pas:
* createimportlibfromexports
* varexport
* procexport
* insert_export
* RewritePPU
........
* adjust indentation
........
Extract the code to export the symbols of a unit to its own function in pkgutil so that less functions need to be exported.
pmodules.pas, proc_package:
* move code to export the symbols of a unit to new function export_unit
pkgutil.pas:
+ new function export_unit
- remove exports of procexport, varexport and insert_export
........
Some small fixes for package parsing.
pmodules.pas, proc_package:
* use orgpattern instead of pattern to build the module name (like is done in uses sections)
* ignore duplicates when generating exports
- no need to generate an import library for the package; that is done by the program/library that uses the package
........
+ new unit fpcp of which the class tpcppackage handles the reading and writing of package metadata from/to pcp files (equivalant to tppumodule).
........
+ add unit which contains representation of a PCP file (tpcpfile) like tppufile is for units.
........
Improve export generation.
pkgutil.pas:
+ new function exportprocsym to correctly export a procedure with all its aliases
+ new function exportabstractrecordsymproc to export the members of structured types
* insert_export: handle also namespacesym and propertsym (by ignoring them)
* insert_export: correctly export classes, record and objects
* insert_export: use new exportprocsym function to export a procsym
* insert_export: only export public variables of a static symtable
........
+ add entry constants for the name of the package and the package file names, both used by a PCP file
........
* use messages to get rid of most writelns related to package loading
........
Add additional entry types for PCP files
entfile.pas:
+ new entries ibstartrequireds and ibendrequireds to store the list of required packages
+ new entries ibstartcontained and ibendcontained to store the list of contained units
+ new entries ibstartppus and ibendppus to store the list of contained PPU files
........
Generate the PCP file once the package file and the used units were compiled correctly.
pmodules.pas:
* proc_package: generate the PCP file upon successful compilation
........
Add the possibility to load all packages supplied as parameters.
pkgutil.pas:
+ new function load_packages to load all packages supplied as parameters
pmodules.pas, proc_program:
* use load_packages to load all packages before any unit is loaded
........
Add code which tries to load a unit from a package first and only then as usual.
fppu.pas, tppumodule:
+ new method loadfrompackage which searches all available packages for the unit and loads it from there if found
* loadppu: first try to load the unit from a package if any are available
........
Don't link objects files of a unit that is provided by a package.
pmodules.pas, proc_program:
* if a unit has uf_in_library set we must not include it in the units we link against
........
git-svn-id: trunk@33452 -
|