|
@@ -27,7 +27,7 @@ unit pkgutil;
|
|
|
interface
|
|
|
|
|
|
uses
|
|
|
- fmodule,fpkg,link,cstreams;
|
|
|
+ fmodule,fpkg,link,cstreams,cclasses;
|
|
|
|
|
|
procedure createimportlibfromexternals;
|
|
|
Function RewritePPU(const PPUFn:String;OutStream:TCStream):Boolean;
|
|
@@ -36,13 +36,14 @@ interface
|
|
|
procedure add_package(const name:string;ignoreduplicates:boolean;direct:boolean);
|
|
|
procedure add_package_unit_ref(package:tpackage);
|
|
|
procedure add_package_libs(l:tlinker);
|
|
|
+ procedure check_for_indirect_package_usages(modules:tlinkedlist);
|
|
|
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
|
sysutils,
|
|
|
globtype,systems,
|
|
|
- cutils,cclasses,
|
|
|
+ cutils,
|
|
|
globals,verbose,
|
|
|
symtype,symconst,symsym,symdef,symbase,symtable,
|
|
|
ppu,entfile,fpcp,
|
|
@@ -74,20 +75,22 @@ implementation
|
|
|
var
|
|
|
i : longint;
|
|
|
item : TCmdStrListItem;
|
|
|
+ pd : tprocdef;
|
|
|
begin
|
|
|
for i:=0 to tprocsym(sym).ProcdefList.Count-1 do
|
|
|
begin
|
|
|
- if not(tprocdef(tprocsym(sym).ProcdefList[i]).proccalloption in [pocall_internproc]) and
|
|
|
- ((tprocdef(tprocsym(sym).ProcdefList[i]).procoptions*[po_external])=[]) and
|
|
|
+ pd:=tprocdef(tprocsym(sym).procdeflist[i]);
|
|
|
+ if not(pd.proccalloption in [pocall_internproc]) and
|
|
|
+ ((pd.procoptions*[po_external])=[]) and
|
|
|
(
|
|
|
(symtable.symtabletype in [globalsymtable,recordsymtable,objectsymtable]) or
|
|
|
(
|
|
|
(symtable.symtabletype=staticsymtable) and
|
|
|
- ([po_public,po_has_public_name]*tprocdef(tprocsym(sym).ProcdefList[i]).procoptions<>[])
|
|
|
+ ([po_public,po_has_public_name]*pd.procoptions<>[])
|
|
|
)
|
|
|
) then
|
|
|
begin
|
|
|
- exportallprocdefnames(tprocsym(sym),tprocdef(tprocsym(sym).ProcdefList[i]),[]);
|
|
|
+ exportallprocdefnames(tprocsym(sym),pd,[]);
|
|
|
end;
|
|
|
end;
|
|
|
end;
|
|
@@ -480,7 +483,8 @@ implementation
|
|
|
i : longint;
|
|
|
pkgname : tpathstr;
|
|
|
begin
|
|
|
- if not (target_info.system in systems_indirect_var_imports) then
|
|
|
+ if target_info.system in systems_indirect_var_imports then
|
|
|
+ { we're using import libraries anyway }
|
|
|
exit;
|
|
|
for i:=0 to packagelist.count-1 do
|
|
|
begin
|
|
@@ -502,6 +506,28 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
+ procedure check_for_indirect_package_usages(modules:tlinkedlist);
|
|
|
+ var
|
|
|
+ uu : tused_unit;
|
|
|
+ pentry : ppackageentry;
|
|
|
+ begin
|
|
|
+ uu:=tused_unit(modules.first);
|
|
|
+ while assigned(uu) do
|
|
|
+ begin
|
|
|
+ if assigned(uu.u.package) then
|
|
|
+ begin
|
|
|
+ pentry:=ppackageentry(packagelist.find(uu.u.package.packagename^));
|
|
|
+ if not assigned(pentry) then
|
|
|
+ internalerror(2015112304);
|
|
|
+ if not pentry^.direct then
|
|
|
+ Message2(package_w_unit_from_indirect_package,uu.u.realmodulename^,uu.u.package.realpackagename^);
|
|
|
+ end;
|
|
|
+
|
|
|
+ uu:=tused_unit(uu.Next);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
procedure createimportlibfromexternals;
|
|
|
var
|
|
|
alreadyloaded : tfpobjectlist;
|