Browse Source

* pkgglobals added
* prepare for recursive executeaction

git-svn-id: trunk@6474 -

peter 18 years ago
parent
commit
b928627d6d

+ 3 - 2
.gitattributes

@@ -8261,13 +8261,14 @@ utils/fppkg/pkgarchive.pp svneol=native#text/plain
 utils/fppkg/pkgcommands.pp svneol=native#text/plain
 utils/fppkg/pkgcommands.pp svneol=native#text/plain
 utils/fppkg/pkgdownload.pp svneol=native#text/plain
 utils/fppkg/pkgdownload.pp svneol=native#text/plain
 utils/fppkg/pkgfpmake.pp svneol=native#text/plain
 utils/fppkg/pkgfpmake.pp svneol=native#text/plain
+utils/fppkg/pkgglobals.pp svneol=native#text/plain
 utils/fppkg/pkghandler.pp svneol=native#text/plain
 utils/fppkg/pkghandler.pp svneol=native#text/plain
 utils/fppkg/pkglibcurl.pp svneol=native#text/plain
 utils/fppkg/pkglibcurl.pp svneol=native#text/plain
-utils/fppkg/pkglnet.pas svneol=native#text/plain
+utils/fppkg/pkglnet.pp svneol=native#text/plain
 utils/fppkg/pkgmessages.pp svneol=native#text/plain
 utils/fppkg/pkgmessages.pp svneol=native#text/plain
 utils/fppkg/pkgmkconv.pp svneol=native#text/plain
 utils/fppkg/pkgmkconv.pp svneol=native#text/plain
 utils/fppkg/pkgocurl.pp svneol=native#text/plain
 utils/fppkg/pkgocurl.pp svneol=native#text/plain
-utils/fppkg/pkgropts.pp svneol=native#text/plain
+utils/fppkg/pkgoptions.pp svneol=native#text/plain
 utils/fppkg/pkgsynapse.pp svneol=native#text/plain
 utils/fppkg/pkgsynapse.pp svneol=native#text/plain
 utils/fppkg/pkgwget.pp svneol=native#text/plain
 utils/fppkg/pkgwget.pp svneol=native#text/plain
 utils/fppkg/rep2xml.lpi svneol=native#text/plain
 utils/fppkg/rep2xml.lpi svneol=native#text/plain

File diff suppressed because it is too large
+ 470 - 125
utils/fppkg/Makefile


+ 4 - 4
utils/fppkg/Makefile.fpc

@@ -8,7 +8,8 @@ version=2.0.0
 
 
 [target]
 [target]
 programs=fppkg
 programs=fppkg
-units=fpmktype fpmkunit fprepos fpxmlrep pkgropts pkghandler pkgmkconv pkgdownload
+units=fpmktype fpmkunit fprepos fpxmlrep
+implicitunits=pkgoptions pkgglobals pkgmessages pkghandler pkgmkconv pkgdownload pkgarchive pkgfpmake pkgcommands
 units_linux=pkgwget  pkglnet pkglibcurl
 units_linux=pkgwget  pkglnet pkglibcurl
 units_freebsd=pkgwget pkglnet pkglibcurl
 units_freebsd=pkgwget pkglnet pkglibcurl
 units_netbsd=pkgwget pkglnet pkglibcurl
 units_netbsd=pkgwget pkglnet pkglibcurl
@@ -19,15 +20,14 @@ units_win32=pkgwget pkglnet
 units_win64=pkgwget pkglnet
 units_win64=pkgwget pkglnet
 units_wince=pkgwget pkglnet
 units_wince=pkgwget pkglnet
 examples=rep2xml
 examples=rep2xml
-rsts=fprepos fpxmlrep fppkg
+rsts=fprepos fpxmlrep pkgmessages
 
 
 [compiler]
 [compiler]
 unitdir=$(FCL20) lnet
 unitdir=$(FCL20) lnet
 includedir=lnet/sys
 includedir=lnet/sys
 
 
 [clean]
 [clean]
-units=$(FCL20UNITS) lCommon lControlStack lEvents lTelnet lftp lhttp lhttputil lnet lstrbuffer \
-  pkgarchive pkgcommands pkgfpmake pkgmessages
+units=$(FCL20UNITS) lCommon lControlStack lEvents lTelnet lftp lhttp lhttputil lnet lstrbuffer
 
 
 [install]
 [install]
 fpcpackage=y
 fpcpackage=y

+ 139 - 126
utils/fppkg/fppkg.lpi

@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <?xml version="1.0"?>
 <CONFIG>
 <CONFIG>
   <ProjectOptions>
   <ProjectOptions>
-    <PathDelim Value="\"/>
+    <PathDelim Value="/"/>
     <Version Value="5"/>
     <Version Value="5"/>
     <General>
     <General>
       <Flags>
       <Flags>
@@ -12,7 +12,7 @@
       <MainUnit Value="0"/>
       <MainUnit Value="0"/>
       <IconPath Value=".\"/>
       <IconPath Value=".\"/>
       <TargetFileExt Value=""/>
       <TargetFileExt Value=""/>
-      <ActiveEditorIndexAtStart Value="1"/>
+      <ActiveEditorIndexAtStart Value="10"/>
     </General>
     </General>
     <VersionInfo>
     <VersionInfo>
       <ProjectVersion Value=""/>
       <ProjectVersion Value=""/>
@@ -21,7 +21,6 @@
     </VersionInfo>
     </VersionInfo>
     <PublishOptions>
     <PublishOptions>
       <Version Value="2"/>
       <Version Value="2"/>
-      <DestinationDirectory Value="$(TestDir)\publishedproject\"/>
       <IgnoreBinaries Value="False"/>
       <IgnoreBinaries Value="False"/>
       <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
       <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
       <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
       <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
@@ -29,45 +28,43 @@
     <RunParams>
     <RunParams>
       <local>
       <local>
         <FormatVersion Value="1"/>
         <FormatVersion Value="1"/>
-        <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
+        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
       </local>
       </local>
     </RunParams>
     </RunParams>
-    <Units Count="32">
+    <Units Count="35">
       <Unit0>
       <Unit0>
         <Filename Value="fppkg.pp"/>
         <Filename Value="fppkg.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="fppkg"/>
         <UnitName Value="fppkg"/>
-        <CursorPos X="32" Y="21"/>
-        <TopLine Value="1"/>
+        <CursorPos X="1" Y="85"/>
+        <TopLine Value="58"/>
         <EditorIndex Value="0"/>
         <EditorIndex Value="0"/>
-        <UsageCount Value="67"/>
+        <UsageCount Value="68"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit0>
       </Unit0>
       <Unit1>
       <Unit1>
         <Filename Value="pkgropts.pp"/>
         <Filename Value="pkgropts.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="pkgropts"/>
-        <CursorPos X="1" Y="1"/>
+        <UnitName Value="pkgoptions"/>
+        <CursorPos X="41" Y="18"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <EditorIndex Value="7"/>
-        <UsageCount Value="67"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="68"/>
       </Unit1>
       </Unit1>
       <Unit2>
       <Unit2>
         <Filename Value="fpmkcnst.inc"/>
         <Filename Value="fpmkcnst.inc"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <CursorPos X="64" Y="8"/>
         <CursorPos X="64" Y="8"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <UsageCount Value="67"/>
+        <UsageCount Value="68"/>
       </Unit2>
       </Unit2>
       <Unit3>
       <Unit3>
         <Filename Value="fpmktype.pp"/>
         <Filename Value="fpmktype.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="fpmktype"/>
         <UnitName Value="fpmktype"/>
-        <CursorPos X="1" Y="1"/>
+        <CursorPos X="3" Y="41"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <EditorIndex Value="12"/>
-        <UsageCount Value="67"/>
+        <EditorIndex Value="9"/>
+        <UsageCount Value="68"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit3>
       </Unit3>
       <Unit4>
       <Unit4>
@@ -76,9 +73,7 @@
         <UnitName Value="fpmkunit"/>
         <UnitName Value="fpmkunit"/>
         <CursorPos X="1" Y="1"/>
         <CursorPos X="1" Y="1"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <EditorIndex Value="3"/>
-        <UsageCount Value="67"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="68"/>
       </Unit4>
       </Unit4>
       <Unit5>
       <Unit5>
         <Filename Value="fprepos.pp"/>
         <Filename Value="fprepos.pp"/>
@@ -86,9 +81,7 @@
         <UnitName Value="fprepos"/>
         <UnitName Value="fprepos"/>
         <CursorPos X="1" Y="1"/>
         <CursorPos X="1" Y="1"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <EditorIndex Value="5"/>
-        <UsageCount Value="67"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="68"/>
       </Unit5>
       </Unit5>
       <Unit6>
       <Unit6>
         <Filename Value="fpxmlrep.pp"/>
         <Filename Value="fpxmlrep.pp"/>
@@ -96,48 +89,46 @@
         <UnitName Value="fpxmlrep"/>
         <UnitName Value="fpxmlrep"/>
         <CursorPos X="1" Y="1"/>
         <CursorPos X="1" Y="1"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <EditorIndex Value="6"/>
-        <UsageCount Value="67"/>
-        <Loaded Value="True"/>
+        <UsageCount Value="68"/>
       </Unit6>
       </Unit6>
       <Unit7>
       <Unit7>
         <Filename Value="pkghandler.pp"/>
         <Filename Value="pkghandler.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="pkghandler"/>
         <UnitName Value="pkghandler"/>
-        <CursorPos X="1" Y="107"/>
-        <TopLine Value="89"/>
-        <EditorIndex Value="15"/>
-        <UsageCount Value="67"/>
+        <CursorPos X="125" Y="197"/>
+        <TopLine Value="175"/>
+        <EditorIndex Value="1"/>
+        <UsageCount Value="68"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit7>
       </Unit7>
       <Unit8>
       <Unit8>
         <Filename Value="pkgmkconv.pp"/>
         <Filename Value="pkgmkconv.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="pkgmkconv"/>
         <UnitName Value="pkgmkconv"/>
-        <CursorPos X="36" Y="131"/>
-        <TopLine Value="97"/>
-        <EditorIndex Value="14"/>
-        <UsageCount Value="67"/>
+        <CursorPos X="14" Y="53"/>
+        <TopLine Value="29"/>
+        <EditorIndex Value="3"/>
+        <UsageCount Value="68"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit8>
       </Unit8>
       <Unit9>
       <Unit9>
         <Filename Value="pkgdownload.pp"/>
         <Filename Value="pkgdownload.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="pkgdownload"/>
         <UnitName Value="pkgdownload"/>
-        <CursorPos X="1" Y="1"/>
-        <TopLine Value="1"/>
-        <EditorIndex Value="13"/>
-        <UsageCount Value="67"/>
+        <CursorPos X="14" Y="44"/>
+        <TopLine Value="28"/>
+        <EditorIndex Value="4"/>
+        <UsageCount Value="68"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit9>
       </Unit9>
       <Unit10>
       <Unit10>
         <Filename Value="pkgmessages.pp"/>
         <Filename Value="pkgmessages.pp"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <UnitName Value="pkgmessages"/>
         <UnitName Value="pkgmessages"/>
-        <CursorPos X="1" Y="1"/>
+        <CursorPos X="55" Y="14"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
-        <EditorIndex Value="11"/>
-        <UsageCount Value="67"/>
+        <EditorIndex Value="8"/>
+        <UsageCount Value="68"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit10>
       </Unit10>
       <Unit11>
       <Unit11>
@@ -155,21 +146,19 @@
         <UsageCount Value="5"/>
         <UsageCount Value="5"/>
       </Unit12>
       </Unit12>
       <Unit13>
       <Unit13>
-        <Filename Value="..\..\..\fpc20\rtl\objpas\classes\classesh.inc"/>
+        <Filename Value="../../../fpc20/rtl/objpas/classes/classesh.inc"/>
         <CursorPos X="14" Y="599"/>
         <CursorPos X="14" Y="599"/>
         <TopLine Value="580"/>
         <TopLine Value="580"/>
-        <EditorIndex Value="2"/>
         <UsageCount Value="33"/>
         <UsageCount Value="33"/>
-        <Loaded Value="True"/>
       </Unit13>
       </Unit13>
       <Unit14>
       <Unit14>
-        <Filename Value="..\..\..\fpc20\rtl\inc\objpash.inc"/>
+        <Filename Value="../../../fpc20/rtl/inc/objpash.inc"/>
         <CursorPos X="38" Y="277"/>
         <CursorPos X="38" Y="277"/>
         <TopLine Value="269"/>
         <TopLine Value="269"/>
         <UsageCount Value="31"/>
         <UsageCount Value="31"/>
       </Unit14>
       </Unit14>
       <Unit15>
       <Unit15>
-        <Filename Value="..\..\..\fpc20\fcl\inc\contnrs.pp"/>
+        <Filename Value="../../../fpc20/fcl/inc/contnrs.pp"/>
         <UnitName Value="contnrs"/>
         <UnitName Value="contnrs"/>
         <CursorPos X="1" Y="19"/>
         <CursorPos X="1" Y="19"/>
         <TopLine Value="1"/>
         <TopLine Value="1"/>
@@ -185,18 +174,18 @@
       <Unit17>
       <Unit17>
         <Filename Value="pkgcommands.pp"/>
         <Filename Value="pkgcommands.pp"/>
         <UnitName Value="pkgcommands"/>
         <UnitName Value="pkgcommands"/>
-        <CursorPos X="21" Y="88"/>
-        <TopLine Value="68"/>
-        <EditorIndex Value="9"/>
+        <CursorPos X="28" Y="50"/>
+        <TopLine Value="1"/>
+        <EditorIndex Value="7"/>
         <UsageCount Value="32"/>
         <UsageCount Value="32"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit17>
       </Unit17>
       <Unit18>
       <Unit18>
         <Filename Value="pkgwget.pp"/>
         <Filename Value="pkgwget.pp"/>
         <UnitName Value="pkgwget"/>
         <UnitName Value="pkgwget"/>
-        <CursorPos X="1" Y="1"/>
-        <TopLine Value="1"/>
-        <EditorIndex Value="4"/>
+        <CursorPos X="14" Y="26"/>
+        <TopLine Value="15"/>
+        <EditorIndex Value="2"/>
         <UsageCount Value="27"/>
         <UsageCount Value="27"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit18>
       </Unit18>
@@ -224,9 +213,9 @@
       <Unit22>
       <Unit22>
         <Filename Value="pkgarchive.pp"/>
         <Filename Value="pkgarchive.pp"/>
         <UnitName Value="pkgarchive"/>
         <UnitName Value="pkgarchive"/>
-        <CursorPos X="32" Y="61"/>
-        <TopLine Value="50"/>
-        <EditorIndex Value="8"/>
+        <CursorPos X="14" Y="27"/>
+        <TopLine Value="1"/>
+        <EditorIndex Value="5"/>
         <UsageCount Value="23"/>
         <UsageCount Value="23"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit22>
       </Unit22>
@@ -249,24 +238,22 @@
         <UnitName Value="zipper"/>
         <UnitName Value="zipper"/>
         <CursorPos X="21" Y="1324"/>
         <CursorPos X="21" Y="1324"/>
         <TopLine Value="1303"/>
         <TopLine Value="1303"/>
-        <EditorIndex Value="1"/>
         <UsageCount Value="15"/>
         <UsageCount Value="15"/>
-        <Loaded Value="True"/>
       </Unit25>
       </Unit25>
       <Unit26>
       <Unit26>
-        <Filename Value="..\..\..\fpc20\rtl\objpas\sysutils\filutilh.inc"/>
+        <Filename Value="../../../fpc20/rtl/objpas/sysutils/filutilh.inc"/>
         <CursorPos X="12" Y="53"/>
         <CursorPos X="12" Y="53"/>
         <TopLine Value="40"/>
         <TopLine Value="40"/>
         <UsageCount Value="13"/>
         <UsageCount Value="13"/>
       </Unit26>
       </Unit26>
       <Unit27>
       <Unit27>
-        <Filename Value="..\..\..\fpc20\rtl\inc\systemh.inc"/>
+        <Filename Value="../../../fpc20/rtl/inc/systemh.inc"/>
         <CursorPos X="3" Y="214"/>
         <CursorPos X="3" Y="214"/>
         <TopLine Value="313"/>
         <TopLine Value="313"/>
         <UsageCount Value="13"/>
         <UsageCount Value="13"/>
       </Unit27>
       </Unit27>
       <Unit28>
       <Unit28>
-        <Filename Value="..\..\..\fpc20\rtl\objpas\sysutils\datih.inc"/>
+        <Filename Value="../../../fpc20/rtl/objpas/sysutils/datih.inc"/>
         <CursorPos X="16" Y="93"/>
         <CursorPos X="16" Y="93"/>
         <TopLine Value="86"/>
         <TopLine Value="86"/>
         <UsageCount Value="13"/>
         <UsageCount Value="13"/>
@@ -279,7 +266,7 @@
         <UsageCount Value="11"/>
         <UsageCount Value="11"/>
       </Unit29>
       </Unit29>
       <Unit30>
       <Unit30>
-        <Filename Value="..\..\..\fpc20\packages\base\paszlib\paszlib.pas"/>
+        <Filename Value="../../../fpc20/packages/base/paszlib/paszlib.pas"/>
         <UnitName Value="paszlib"/>
         <UnitName Value="paszlib"/>
         <CursorPos X="34" Y="139"/>
         <CursorPos X="34" Y="139"/>
         <TopLine Value="118"/>
         <TopLine Value="118"/>
@@ -288,141 +275,167 @@
       <Unit31>
       <Unit31>
         <Filename Value="pkgfpmake.pp"/>
         <Filename Value="pkgfpmake.pp"/>
         <UnitName Value="pkgfpmake"/>
         <UnitName Value="pkgfpmake"/>
-        <CursorPos X="1" Y="89"/>
-        <TopLine Value="59"/>
-        <EditorIndex Value="10"/>
+        <CursorPos X="48" Y="58"/>
+        <TopLine Value="47"/>
+        <EditorIndex Value="6"/>
         <UsageCount Value="12"/>
         <UsageCount Value="12"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit31>
       </Unit31>
+      <Unit32>
+        <Filename Value="pkglnet.pp"/>
+        <UnitName Value="pkglnet"/>
+        <CursorPos X="45" Y="16"/>
+        <TopLine Value="1"/>
+        <EditorIndex Value="12"/>
+        <UsageCount Value="11"/>
+        <Loaded Value="True"/>
+      </Unit32>
+      <Unit33>
+        <Filename Value="pkgoptions.pp"/>
+        <UnitName Value="pkgoptions"/>
+        <CursorPos X="1" Y="300"/>
+        <TopLine Value="286"/>
+        <EditorIndex Value="10"/>
+        <UsageCount Value="11"/>
+        <Loaded Value="True"/>
+      </Unit33>
+      <Unit34>
+        <Filename Value="pkgglobals.pp"/>
+        <UnitName Value="pkgglobals"/>
+        <CursorPos X="23" Y="81"/>
+        <TopLine Value="118"/>
+        <EditorIndex Value="11"/>
+        <UsageCount Value="11"/>
+        <Loaded Value="True"/>
+      </Unit34>
     </Units>
     </Units>
     <JumpHistory Count="30" HistoryIndex="29">
     <JumpHistory Count="30" HistoryIndex="29">
       <Position1>
       <Position1>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1347" Column="5" TopLine="1310"/>
+        <Filename Value="pkghandler.pp"/>
+        <Caret Line="10" Column="1" TopLine="1"/>
       </Position1>
       </Position1>
       <Position2>
       <Position2>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1" Column="1" TopLine="1"/>
+        <Filename Value="pkghandler.pp"/>
+        <Caret Line="59" Column="36" TopLine="45"/>
       </Position2>
       </Position2>
       <Position3>
       <Position3>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1095" Column="22" TopLine="1072"/>
+        <Filename Value="pkgmkconv.pp"/>
+        <Caret Line="131" Column="36" TopLine="97"/>
       </Position3>
       </Position3>
       <Position4>
       <Position4>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1308" Column="7" TopLine="1291"/>
+        <Filename Value="pkgmkconv.pp"/>
+        <Caret Line="584" Column="7" TopLine="569"/>
       </Position4>
       </Position4>
       <Position5>
       <Position5>
-        <Filename Value="pkgcommands.pp"/>
-        <Caret Line="69" Column="27" TopLine="40"/>
+        <Filename Value="pkgdownload.pp"/>
+        <Caret Line="1" Column="1" TopLine="1"/>
       </Position5>
       </Position5>
       <Position6>
       <Position6>
-        <Filename Value="pkgfpmake.pp"/>
-        <Caret Line="92" Column="36" TopLine="63"/>
+        <Filename Value="pkgarchive.pp"/>
+        <Caret Line="61" Column="32" TopLine="50"/>
       </Position6>
       </Position6>
       <Position7>
       <Position7>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="41" Column="46" TopLine="13"/>
+        <Filename Value="pkgarchive.pp"/>
+        <Caret Line="67" Column="28" TopLine="54"/>
       </Position7>
       </Position7>
       <Position8>
       <Position8>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1297" Column="108" TopLine="1282"/>
+        <Filename Value="pkgfpmake.pp"/>
+        <Caret Line="89" Column="1" TopLine="59"/>
       </Position8>
       </Position8>
       <Position9>
       <Position9>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="557" Column="20" TopLine="541"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="88" Column="21" TopLine="68"/>
       </Position9>
       </Position9>
       <Position10>
       <Position10>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="542" Column="25" TopLine="535"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="45" Column="14" TopLine="39"/>
       </Position10>
       </Position10>
       <Position11>
       <Position11>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="557" Column="30" TopLine="547"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="64" Column="1" TopLine="46"/>
       </Position11>
       </Position11>
       <Position12>
       <Position12>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="268" Column="20" TopLine="249"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="46" Column="14" TopLine="41"/>
       </Position12>
       </Position12>
       <Position13>
       <Position13>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="545" Column="21" TopLine="508"/>
+        <Filename Value="pkghandler.pp"/>
+        <Caret Line="185" Column="39" TopLine="172"/>
       </Position13>
       </Position13>
       <Position14>
       <Position14>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="562" Column="21" TopLine="543"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="80" Column="50" TopLine="66"/>
       </Position14>
       </Position14>
       <Position15>
       <Position15>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="567" Column="22" TopLine="549"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="87" Column="3" TopLine="66"/>
       </Position15>
       </Position15>
       <Position16>
       <Position16>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1" Column="1" TopLine="1"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="81" Column="35" TopLine="72"/>
       </Position16>
       </Position16>
       <Position17>
       <Position17>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="519" Column="21" TopLine="500"/>
+        <Filename Value="pkgcommands.pp"/>
+        <Caret Line="83" Column="14" TopLine="69"/>
       </Position17>
       </Position17>
       <Position18>
       <Position18>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="525" Column="22" TopLine="506"/>
+        <Filename Value="pkghandler.pp"/>
+        <Caret Line="73" Column="1" TopLine="73"/>
       </Position18>
       </Position18>
       <Position19>
       <Position19>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="562" Column="21" TopLine="543"/>
+        <Filename Value="pkghandler.pp"/>
+        <Caret Line="197" Column="5" TopLine="164"/>
       </Position19>
       </Position19>
       <Position20>
       <Position20>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="568" Column="19" TopLine="549"/>
+        <Filename Value="pkgwget.pp"/>
+        <Caret Line="1" Column="1" TopLine="1"/>
       </Position20>
       </Position20>
       <Position21>
       <Position21>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1347" Column="113" TopLine="1328"/>
+        <Filename Value="fppkg.pp"/>
+        <Caret Line="6" Column="38" TopLine="1"/>
       </Position21>
       </Position21>
       <Position22>
       <Position22>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1367" Column="1" TopLine="1349"/>
+        <Filename Value="fppkg.pp"/>
+        <Caret Line="14" Column="1" TopLine="7"/>
       </Position22>
       </Position22>
       <Position23>
       <Position23>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1" Column="1" TopLine="1"/>
+        <Filename Value="fppkg.pp"/>
+        <Caret Line="45" Column="1" TopLine="31"/>
       </Position23>
       </Position23>
       <Position24>
       <Position24>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="263" Column="1" TopLine="244"/>
+        <Filename Value="fppkg.pp"/>
+        <Caret Line="312" Column="18" TopLine="298"/>
       </Position24>
       </Position24>
       <Position25>
       <Position25>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="555" Column="30" TopLine="530"/>
+        <Filename Value="pkgoptions.pp"/>
+        <Caret Line="299" Column="14" TopLine="286"/>
       </Position25>
       </Position25>
       <Position26>
       <Position26>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1313" Column="19" TopLine="1302"/>
+        <Filename Value="fppkg.pp"/>
+        <Caret Line="313" Column="34" TopLine="298"/>
       </Position26>
       </Position26>
       <Position27>
       <Position27>
-        <Filename Value="zipper.pp"/>
-        <Caret Line="1322" Column="17" TopLine="1303"/>
+        <Filename Value="pkgoptions.pp"/>
+        <Caret Line="62" Column="97" TopLine="46"/>
       </Position27>
       </Position27>
       <Position28>
       <Position28>
-        <Filename Value="pkgcommands.pp"/>
-        <Caret Line="78" Column="65" TopLine="56"/>
+        <Filename Value="pkgoptions.pp"/>
+        <Caret Line="369" Column="24" TopLine="349"/>
       </Position28>
       </Position28>
       <Position29>
       <Position29>
-        <Filename Value="pkghandler.pp"/>
-        <Caret Line="253" Column="19" TopLine="231"/>
+        <Filename Value="pkgoptions.pp"/>
+        <Caret Line="308" Column="68" TopLine="286"/>
       </Position29>
       </Position29>
       <Position30>
       <Position30>
-        <Filename Value="pkghandler.pp"/>
-        <Caret Line="97" Column="13" TopLine="77"/>
+        <Filename Value="pkgoptions.pp"/>
+        <Caret Line="301" Column="43" TopLine="286"/>
       </Position30>
       </Position30>
     </JumpHistory>
     </JumpHistory>
   </ProjectOptions>
   </ProjectOptions>
   <CompilerOptions>
   <CompilerOptions>
     <Version Value="5"/>
     <Version Value="5"/>
-    <PathDelim Value="\"/>
     <SearchPaths>
     <SearchPaths>
-      <OtherUnitFiles Value="fcl20\"/>
+      <OtherUnitFiles Value="fcl20/"/>
     </SearchPaths>
     </SearchPaths>
     <CodeGeneration>
     <CodeGeneration>
       <Checks>
       <Checks>

+ 22 - 46
utils/fppkg/fppkg.pp

@@ -9,9 +9,10 @@ uses
 {$endif}
 {$endif}
   Classes, SysUtils, TypInfo, custapp,
   Classes, SysUtils, TypInfo, custapp,
   // Repository handler objects
   // Repository handler objects
-  fprepos, fpxmlrep,fpmktype, pkgmessages, pkgropts,
+  fprepos, fpxmlrep,
+  pkgmessages, pkgglobals, pkgoptions,
   // Package Handler components
   // Package Handler components
-  pkghandler, pkgmkconv, pkgdownload,
+  pkghandler,pkgmkconv, pkgdownload,
   pkgarchive, pkgfpmake, pkgcommands
   pkgarchive, pkgfpmake, pkgcommands
   // Downloaders
   // Downloaders
 {$if defined(unix) or defined(windows)}
 {$if defined(unix) or defined(windows)}
@@ -24,9 +25,9 @@ Type
 
 
   TMakeTool = Class(TCustomApplication)
   TMakeTool = Class(TCustomApplication)
   Private
   Private
+    ActionStack : TActionStack;
     ParaAction : string;
     ParaAction : string;
     ParaPackages : TStringList;
     ParaPackages : TStringList;
-    FDefaults: TPackagerOptions;
     FRepository : TFPRepository;
     FRepository : TFPRepository;
     FCompilerConfig : String;
     FCompilerConfig : String;
     procedure GenerateParaActions;
     procedure GenerateParaActions;
@@ -41,7 +42,6 @@ Type
     Procedure LoadCompilerDefaults;
     Procedure LoadCompilerDefaults;
     Procedure ProcessCommandLine;
     Procedure ProcessCommandLine;
     Procedure DoRun; Override;
     Procedure DoRun; Override;
-    procedure ExecuteAction(APackage:TFPPackage; const AAction:string; const Args:TActionArgs);
   end;
   end;
 
 
   EMakeToolError = Class(Exception);
   EMakeToolError = Class(Exception);
@@ -76,23 +76,22 @@ var
 begin
 begin
   cfgfile:=GetConfigFileName;
   cfgfile:=GetConfigFileName;
   GeneratedConfig:=false;
   GeneratedConfig:=false;
-  FDefaults:=TPackagerOptions.Create;
   // Load file or create new default configuration
   // Load file or create new default configuration
   if FileExists(cfgfile) then
   if FileExists(cfgfile) then
-    FDefaults.LoadGlobalFromFile(cfgfile)
+    Defaults.LoadGlobalFromFile(cfgfile)
   else
   else
     begin
     begin
       ForceDirectories(ExtractFilePath(cfgfile));
       ForceDirectories(ExtractFilePath(cfgfile));
-      FDefaults.SaveGlobalToFile(cfgfile);
+      Defaults.SaveGlobalToFile(cfgfile);
       GeneratedConfig:=true;
       GeneratedConfig:=true;
     end;
     end;
   // Load default verbosity from config
   // Load default verbosity from config
   SL:=TStringList.Create;
   SL:=TStringList.Create;
-  SL.CommaText:=FDefaults.DefaultVerbosity;
+  SL.CommaText:=Defaults.DefaultVerbosity;
   for i:=0 to SL.Count-1 do
   for i:=0 to SL.Count-1 do
     Include(Verbosity,StringToVerbosity(SL[i]));
     Include(Verbosity,StringToVerbosity(SL[i]));
   SL.Free;
   SL.Free;
-  FCompilerConfig:=FDefaults.DefaultCompilerConfig;
+  FCompilerConfig:=Defaults.DefaultCompilerConfig;
   // Tracing of what we've done above, need to be done after the verbosity is set
   // Tracing of what we've done above, need to be done after the verbosity is set
   if GeneratedConfig then
   if GeneratedConfig then
     Log(vDebug,SLogGeneratingGlobalConfig,[cfgfile])
     Log(vDebug,SLogGeneratingGlobalConfig,[cfgfile])
@@ -103,9 +102,9 @@ end;
 
 
 procedure TMakeTool.MaybeCreateLocalDirs;
 procedure TMakeTool.MaybeCreateLocalDirs;
 begin
 begin
-  ForceDirectories(FDefaults.BuildDir);
-  ForceDirectories(FDefaults.PackagesDir);
-  ForceDirectories(FDefaults.CompilerConfigDir);
+  ForceDirectories(Defaults.BuildDir);
+  ForceDirectories(Defaults.PackagesDir);
+  ForceDirectories(Defaults.CompilerConfigDir);
 end;
 end;
 
 
 
 
@@ -113,17 +112,17 @@ procedure TMakeTool.LoadCompilerDefaults;
 var
 var
   S : String;
   S : String;
 begin
 begin
-  S:=FDefaults.CompilerConfigDir+FCompilerConfig;
+  S:=Defaults.CompilerConfigDir+FCompilerConfig;
   if FileExists(S) then
   if FileExists(S) then
     begin
     begin
       Log(vDebug,SLogLoadingCompilerConfig,[S]);
       Log(vDebug,SLogLoadingCompilerConfig,[S]);
-      FDefaults.LoadCompilerFromFile(S)
+      Defaults.LoadCompilerFromFile(S)
     end
     end
   else
   else
     begin
     begin
       Log(vDebug,SLogGeneratingCompilerConfig,[S]);
       Log(vDebug,SLogGeneratingCompilerConfig,[S]);
-      FDefaults.InitCompilerDefaults;
-      FDefaults.SaveCompilerToFile(S);
+      Defaults.InitCompilerDefaults;
+      Defaults.SaveCompilerToFile(S);
     end;
     end;
 end;
 end;
 
 
@@ -135,19 +134,19 @@ var
 begin
 begin
   FRepository:=TFPRepository.Create(Nil);
   FRepository:=TFPRepository.Create(Nil);
   // Repository
   // Repository
-  Log(vDebug,SLogLoadingRepository,[FDefaults.LocalRepository]);
-  if FileExists(FDefaults.LocalRepository) then
+  Log(vDebug,SLogLoadingRepository,[Defaults.LocalRepository]);
+  if FileExists(Defaults.LocalRepository) then
     begin
     begin
       X:=TFPXMLRepositoryHandler.Create;
       X:=TFPXMLRepositoryHandler.Create;
       With X do
       With X do
         try
         try
-          LoadFromXml(FRepository,FDefaults.LocalRepository);
+          LoadFromXml(FRepository,Defaults.LocalRepository);
         finally
         finally
           Free;
           Free;
         end;
         end;
     end;
     end;
   // Versions
   // Versions
-  S:=FDefaults.LocalVersions(FCompilerConfig);
+  S:=Defaults.LocalVersions(FCompilerConfig);
   Log(vDebug,SLogLoadingVersions,[S]);
   Log(vDebug,SLogLoadingVersions,[S]);
   if FileExists(S) then
   if FileExists(S) then
     FRepository.LoadStatusFromFile(S);
     FRepository.LoadStatusFromFile(S);
@@ -175,11 +174,13 @@ Constructor TMakeTool.Create;
 begin
 begin
   inherited Create(nil);
   inherited Create(nil);
   ParaPackages:=TStringList.Create;
   ParaPackages:=TStringList.Create;
+  ActionStack:=TActionStack.Create;
 end;
 end;
 
 
 
 
 Destructor TMakeTool.Destroy;
 Destructor TMakeTool.Destroy;
 begin
 begin
+  FreeAndNil(ActionStack);
   FreeAndNil(ParaPackages);
   FreeAndNil(ParaPackages);
   inherited Destroy;
   inherited Destroy;
 end;
 end;
@@ -289,31 +290,6 @@ begin
 end;
 end;
 
 
 
 
-procedure TMakeTool.ExecuteAction(APackage:TFPPackage;const AAction:string;const Args:TActionArgs);
-var
-  pkghandlerclass : TPackageHandlerClass;
-  i : integer;
-  logargs : string;
-begin
-  pkghandlerclass:=GetPkgHandler(AAction);
-  With pkghandlerclass.Create(Self,FDefaults,APackage) do
-    try
-      logargs:='';
-      for i:=Low(Args) to High(Args) do
-        begin
-          if logargs='' then
-            logargs:=Args[i]
-          else
-            logargs:=logargs+','+Args[i];
-        end;
-      Log(vDebug,PackageLogPrefix+SLogRunAction,[AAction,logargs]);
-      Execute(Args);
-    finally
-      Free;
-    end;
-end;
-
-
 procedure TMakeTool.DoRun;
 procedure TMakeTool.DoRun;
 var
 var
   Action : string;
   Action : string;
@@ -333,7 +309,7 @@ begin
     repeat
     repeat
       if not ActionStack.Pop(ActionPackage,Action,Args) then
       if not ActionStack.Pop(ActionPackage,Action,Args) then
         break;
         break;
-      ExecuteAction(ActionPackage,Action,Args);
+      pkghandler.ExecuteAction(ActionPackage,Action,Args);
     until false;
     until false;
     Terminate;
     Terminate;
 
 

+ 1 - 0
utils/fppkg/pkgarchive.pp

@@ -24,6 +24,7 @@ implementation
 uses
 uses
   zipper,
   zipper,
   uriparser,
   uriparser,
+  pkgglobals,
   pkgmessages;
   pkgmessages;
 
 
 Procedure DeleteDir(const ADir:string);
 Procedure DeleteDir(const ADir:string);

+ 13 - 8
utils/fppkg/pkgcommands.pp

@@ -42,6 +42,8 @@ implementation
 
 
 uses
 uses
   pkgmessages,
   pkgmessages,
+  pkgglobals,
+  pkgoptions,
   fpmktype,
   fpmktype,
   fprepos,
   fprepos,
   fpxmlrep;
   fpxmlrep;
@@ -75,28 +77,31 @@ end;
 
 
 function TCommandDownload.Execute(const Args:TActionArgs):boolean;
 function TCommandDownload.Execute(const Args:TActionArgs):boolean;
 begin
 begin
-  ActionStack.Push(CurrentPackage,'downloadpackage',Args);
+  if not assigned(CurrentPackage) then
+    Error(SErrNoPackageSpecified);
+  if not FileExists(PackageArchive) then
+    ExecuteAction(CurrentPackage,'downloadpackage',Args);
 end;
 end;
 
 
 
 
 function TCommandBuild.Execute(const Args:TActionArgs):boolean;
 function TCommandBuild.Execute(const Args:TActionArgs):boolean;
 begin
 begin
-  ActionStack.Push(CurrentPackage,'fpmakebuild',Args);
-  ActionStack.Push(CurrentPackage,'compilefpmake',Args);
   if assigned(CurrentPackage) then
   if assigned(CurrentPackage) then
     begin
     begin
-      if not DirectoryExists(PackageBuildPath) then
-        ActionStack.Push(CurrentPackage,'unziparchive',Args);
       if not FileExists(PackageArchive) then
       if not FileExists(PackageArchive) then
-        ActionStack.Push(CurrentPackage,'downloadpackage',Args);
+        ExecuteAction(CurrentPackage,'downloadpackage',Args);
+      if not DirectoryExists(PackageBuildPath) then
+        ExecuteAction(CurrentPackage,'unziparchive',Args);
     end;
     end;
+  ExecuteAction(CurrentPackage,'fpmakebuild',Args);
+  ExecuteAction(CurrentPackage,'compilefpmake',Args);
 end;
 end;
 
 
 
 
 function TCommandInstall.Execute(const Args:TActionArgs):boolean;
 function TCommandInstall.Execute(const Args:TActionArgs):boolean;
 begin
 begin
-  ActionStack.Push(CurrentPackage,'fpmakeinstall',Args);
-  ActionStack.Push(CurrentPackage,'build',Args);
+  ExecuteAction(CurrentPackage,'build',Args);
+  ExecuteAction(CurrentPackage,'fpmakeinstall',Args);
 end;
 end;
 
 
 
 

+ 4 - 1
utils/fppkg/pkgdownload.pp

@@ -39,7 +39,10 @@ Var
 
 
 implementation
 implementation
 
 
-uses pkgmessages,uriparser;
+uses
+  uriparser,
+  pkgglobals,
+  pkgmessages;
 
 
 { TBaseDownloader }
 { TBaseDownloader }
 
 

+ 2 - 0
utils/fppkg/pkgfpmake.pp

@@ -45,6 +45,8 @@ type
 implementation
 implementation
 
 
 uses
 uses
+  pkgoptions,
+  pkgglobals,
   pkgmessages;
   pkgmessages;
 
 
 { TFPMakeCompiler }
 { TFPMakeCompiler }

+ 145 - 0
utils/fppkg/pkgglobals.pp

@@ -0,0 +1,145 @@
+{$mode objfpc}
+{$h+}
+unit pkgglobals;
+
+interface
+
+uses
+  SysUtils,
+  Classes;
+
+Const
+{$ifdef unix}
+  ExeExt = '';
+{$else unix}
+  ExeExt = '.exe';
+{$endif unix}
+
+Type
+  TVerbosity = (vError,vInfo,vCommands,vDebug);
+  TVerbosities = Set of TVerbosity;
+
+  EPackagerError = class(Exception);
+  
+// Logging
+Function StringToVerbosity (S : String) : TVerbosity;
+Function VerbosityToString (V : TVerbosity): String;
+Procedure Log(Level: TVerbosity;Msg : String);
+Procedure Log(Level: TVerbosity;Fmt : String; const Args : array of const);
+Procedure Error(Msg : String);
+Procedure Error(Fmt : String; const Args : array of const);
+
+// Utils
+function maybequoted(const s:string):string;
+Function FixPath(const S : String) : string;
+
+var
+  Verbosity : TVerbosities;
+
+
+Implementation
+
+uses
+  typinfo,
+  contnrs,
+  uriparser,
+  pkgmessages;
+
+function StringToVerbosity(S: String): TVerbosity;
+Var
+  I : integer;
+begin
+  I:=GetEnumValue(TypeInfo(TVerbosity),'v'+S);
+  If (I<>-1) then
+    Result:=TVerbosity(I)
+  else
+    Raise EPackagerError.CreateFmt(SErrInvalidVerbosity,[S]);
+end;
+
+Function VerbosityToString (V : TVerbosity): String;
+begin
+  Result:=GetEnumName(TypeInfo(TVerbosity),Integer(V));
+  Delete(Result,1,1);// Delete 'v'
+end;
+
+
+procedure Log(Level:TVerbosity;Msg: String);
+begin
+  if Level in Verbosity then
+    Writeln(stdErr,Msg);
+end;
+
+
+Procedure Log(Level:TVerbosity; Fmt:String; const Args:array of const);
+begin
+  Log(Level,Format(Fmt,Args));
+end;
+
+
+procedure Error(Msg: String);
+begin
+  Raise EPackagerError.Create(Msg);
+end;
+
+
+procedure Error(Fmt: String; const Args: array of const);
+begin
+  Raise EPackagerError.CreateFmt(Fmt,Args);
+end;
+
+
+function maybequoted(const s:string):string;
+const
+  {$IFDEF MSWINDOWS}
+    FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
+                       '{', '}', '''', '`', '~'];
+  {$ELSE}
+    FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
+                       '{', '}', '''', ':', '\', '`', '~'];
+  {$ENDIF}
+var
+  s1 : string;
+  i  : integer;
+  quoted : boolean;
+begin
+  quoted:=false;
+  s1:='"';
+  for i:=1 to length(s) do
+   begin
+     case s[i] of
+       '"' :
+         begin
+           quoted:=true;
+           s1:=s1+'\"';
+         end;
+       ' ',
+       #128..#255 :
+         begin
+           quoted:=true;
+           s1:=s1+s[i];
+         end;
+       else begin
+         if s[i] in FORBIDDEN_CHARS then
+           quoted:=True;
+         s1:=s1+s[i];
+       end;
+     end;
+   end;
+  if quoted then
+    maybequoted:=s1+'"'
+  else
+    maybequoted:=s;
+end;
+
+
+Function FixPath(const S : String) : string;
+begin
+  If (S<>'') then
+    Result:=IncludeTrailingPathDelimiter(S)
+  else
+    Result:='';
+end;
+
+
+
+end.

+ 45 - 124
utils/fppkg/pkghandler.pp

@@ -4,19 +4,13 @@ unit pkghandler;
 
 
 interface
 interface
 
 
-uses Classes,SysUtils, fpmktype, pkgropts, fprepos;
-
-Const
-{$ifdef unix}
-  ExeExt = '';
-{$else unix}
-  ExeExt = '.exe';
-{$endif unix}
-
-Type
-  TVerbosity = (vError,vInfo,vCommands,vDebug);
-  TVerbosities = Set of TVerbosity;
+uses
+  Classes,SysUtils,
+  pkgglobals,
+  pkgoptions,
+  fprepos;
 
 
+type
   { TActionStack }
   { TActionStack }
 
 
   TActionArgs = array of string;
   TActionArgs = array of string;
@@ -33,7 +27,7 @@ Type
     FList : TFPList;
     FList : TFPList;
   public
   public
     constructor Create;
     constructor Create;
-    destructor Destroy;
+    destructor Destroy;override;
     procedure Push(APackage:TFPPackage;const AAction:string;const Args:TActionArgs);
     procedure Push(APackage:TFPPackage;const AAction:string;const Args:TActionArgs);
     procedure Push(APackage:TFPPackage;const AAction:string;const Args:array of string);
     procedure Push(APackage:TFPPackage;const AAction:string;const Args:array of string);
     function  Pop(out APackage:TFPPackage;out AAction:string;out Args:TActionArgs):boolean;
     function  Pop(out APackage:TFPPackage;out AAction:string;out Args:TActionArgs):boolean;
@@ -44,46 +38,31 @@ Type
 
 
   TPackageHandler = Class(TComponent)
   TPackageHandler = Class(TComponent)
   private
   private
-    FDefaults   : TPackagerOptions;
     FCurrentPackage : TFPPackage;
     FCurrentPackage : TFPPackage;
   Protected
   Protected
     Procedure Log(Level: TVerbosity;Msg : String);
     Procedure Log(Level: TVerbosity;Msg : String);
     Procedure Log(Level: TVerbosity;Fmt : String; const Args : array of const);
     Procedure Log(Level: TVerbosity;Fmt : String; const Args : array of const);
     Procedure Error(Msg : String);
     Procedure Error(Msg : String);
     Procedure Error(Fmt : String; const Args : array of const);
     Procedure Error(Fmt : String; const Args : array of const);
+    procedure ExecuteAction(APackage:TFPPackage;const AAction:string;const Args:TActionArgs);
     Function ExecuteProcess(Const Prog,Args:String):Integer;
     Function ExecuteProcess(Const Prog,Args:String):Integer;
     Procedure SetCurrentDir(Const ADir:String);
     Procedure SetCurrentDir(Const ADir:String);
     function PackageBuildPath:String;
     function PackageBuildPath:String;
     function PackageArchive:String;
     function PackageArchive:String;
   Public
   Public
-    Constructor Create(AOwner: TComponent;ADefaults:TPackagerOptions;APackage:TFPPackage); virtual;
+    Constructor Create(AOwner:TComponent;APackage:TFPPackage); virtual;
     function PackageLogPrefix:String;
     function PackageLogPrefix:String;
     Function Execute(const Args:TActionArgs):boolean; virtual; abstract;
     Function Execute(const Args:TActionArgs):boolean; virtual; abstract;
-    Property Defaults:TPackagerOptions Read FDefaults;
     Property CurrentPackage:TFPPackage Read FCurrentPackage Write FCurrentPackage;
     Property CurrentPackage:TFPPackage Read FCurrentPackage Write FCurrentPackage;
   end;
   end;
   TPackageHandlerClass = class of TPackageHandler;
   TPackageHandlerClass = class of TPackageHandler;
 
 
-  EPackageHandler = Class(EInstallerError);
+  EPackageHandler = Class(Exception);
 
 
 // Actions/PkgHandler
 // Actions/PkgHandler
 procedure RegisterPkgHandler(const AAction:string;pkghandlerclass:TPackageHandlerClass);
 procedure RegisterPkgHandler(const AAction:string;pkghandlerclass:TPackageHandlerClass);
 function GetPkgHandler(const AAction:string):TPackageHandlerClass;
 function GetPkgHandler(const AAction:string):TPackageHandlerClass;
-
-// Logging
-Function StringToVerbosity (S : String) : TVerbosity;
-Function VerbosityToString (V : TVerbosity): String;
-Procedure Log(Level: TVerbosity;Msg : String);
-Procedure Log(Level: TVerbosity;Fmt : String; const Args : array of const);
-Procedure Error(Msg : String);
-Procedure Error(Fmt : String; const Args : array of const);
-
-// Utils
-function maybequoted(const s:ansistring):ansistring;
-
-var
-  Verbosity : TVerbosities;
-  ActionStack : TActionStack;
+procedure ExecuteAction(APackage:TFPPackage;const AAction:string;const Args:TActionArgs);
 
 
 
 
 Implementation
 Implementation
@@ -116,99 +95,36 @@ begin
 end;
 end;
 
 
 
 
-function StringToVerbosity(S: String): TVerbosity;
-Var
-  I : integer;
-begin
-  I:=GetEnumValue(TypeInfo(TVerbosity),'v'+S);
-  If (I<>-1) then
-    Result:=TVerbosity(I)
-  else
-    Raise EPackageHandler.CreateFmt(SErrInvalidVerbosity,[S]);
-end;
-
-Function VerbosityToString (V : TVerbosity): String;
-begin
-  Result:=GetEnumName(TypeInfo(TVerbosity),Integer(V));
-  Delete(Result,1,1);// Delete 'v'
-end;
-
-
-procedure Log(Level:TVerbosity;Msg: String);
-begin
-  if Level in Verbosity then
-    Writeln(stdErr,Msg);
-end;
-
-
-Procedure Log(Level:TVerbosity; Fmt:String; const Args:array of const);
-begin
-  Log(Level,Format(Fmt,Args));
-end;
-
-
-procedure Error(Msg: String);
-begin
-  Raise EPackageHandler.Create(Msg);
-end;
-
-
-procedure Error(Fmt: String; const Args: array of const);
-begin
-  Raise EPackageHandler.CreateFmt(Fmt,Args);
-end;
-
-
-function maybequoted(const s:ansistring):ansistring;
-const
-  {$IFDEF MSWINDOWS}
-    FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
-                       '{', '}', '''', '`', '~'];
-  {$ELSE}
-    FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
-                       '{', '}', '''', ':', '\', '`', '~'];
-  {$ENDIF}
+procedure ExecuteAction(APackage:TFPPackage;const AAction:string;const Args:TActionArgs);
 var
 var
-  s1 : ansistring;
-  i  : integer;
-  quoted : boolean;
+  pkghandlerclass : TPackageHandlerClass;
+  i : integer;
+  logargs : string;
 begin
 begin
-  quoted:=false;
-  s1:='"';
-  for i:=1 to length(s) do
-   begin
-     case s[i] of
-       '"' :
-         begin
-           quoted:=true;
-           s1:=s1+'\"';
-         end;
-       ' ',
-       #128..#255 :
-         begin
-           quoted:=true;
-           s1:=s1+s[i];
-         end;
-       else begin
-         if s[i] in FORBIDDEN_CHARS then
-           quoted:=True;
-         s1:=s1+s[i];
-       end;
-     end;
-   end;
-  if quoted then
-    maybequoted:=s1+'"'
-  else
-    maybequoted:=s;
+  pkghandlerclass:=GetPkgHandler(AAction);
+  With pkghandlerclass.Create(nil,APackage) do
+    try
+      logargs:='';
+      for i:=Low(Args) to High(Args) do
+        begin
+          if logargs='' then
+            logargs:=Args[i]
+          else
+            logargs:=logargs+','+Args[i];
+        end;
+      Log(vDebug,PackageLogPrefix+SLogRunAction,[AAction,logargs]);
+      Execute(Args);
+    finally
+      Free;
+    end;
 end;
 end;
 
 
 
 
 { TPackageHandler }
 { TPackageHandler }
 
 
-constructor TPackageHandler.Create(AOwner : TComponent; ADefaults:TPackagerOptions;APackage:TFPPackage);
+constructor TPackageHandler.Create(AOwner:TComponent;APackage:TFPPackage);
 begin
 begin
   inherited Create(AOwner);
   inherited Create(AOwner);
-  FDefaults:=ADefaults;
   FCurrentPackage:=APackage;
   FCurrentPackage:=APackage;
 end;
 end;
 
 
@@ -256,22 +172,31 @@ end;
 
 
 Procedure TPackageHandler.Log(Level:TVerbosity; Msg:String);
 Procedure TPackageHandler.Log(Level:TVerbosity; Msg:String);
 begin
 begin
-  pkghandler.Log(Level,PackageLogPrefix+Msg);
+  pkgglobals.Log(Level,PackageLogPrefix+Msg);
 end;
 end;
 
 
+
 Procedure TPackageHandler.Log(Level:TVerbosity; Fmt:String; const Args:array of const);
 Procedure TPackageHandler.Log(Level:TVerbosity; Fmt:String; const Args:array of const);
 begin
 begin
-  pkghandler.Log(Level,PackageLogPrefix+Fmt,Args);
+  pkgglobals.Log(Level,PackageLogPrefix+Fmt,Args);
 end;
 end;
 
 
+
 Procedure TPackageHandler.Error(Msg:String);
 Procedure TPackageHandler.Error(Msg:String);
 begin
 begin
-  pkghandler.Error(PackageLogPrefix+Msg);
+  pkgglobals.Error(PackageLogPrefix+Msg);
 end;
 end;
 
 
+
 Procedure TPackageHandler.Error(Fmt:String; const Args:array of const);
 Procedure TPackageHandler.Error(Fmt:String; const Args:array of const);
 begin
 begin
-  pkghandler.Error(PackageLogPrefix+Fmt,Args);
+  pkgglobals.Error(PackageLogPrefix+Fmt,Args);
+end;
+
+
+procedure TPackageHandler.ExecuteAction(APackage: TFPPackage; const AAction: string; const Args: TActionArgs);
+begin
+  pkghandler.ExecuteAction(APackage,AAction,Args);
 end;
 end;
 
 
 
 
@@ -334,12 +259,8 @@ begin
 end;
 end;
 
 
 
 
-
-
 initialization
 initialization
   PkgHandlerList:=TFPHashList.Create;
   PkgHandlerList:=TFPHashList.Create;
-  ActionStack:=TActionStack.Create;
 finalization
 finalization
   FreeAndNil(PkgHandlerList);
   FreeAndNil(PkgHandlerList);
-  FreeAndNil(ActionStack);
 end.
 end.

+ 2 - 2
utils/fppkg/pkglibcurl.pp

@@ -4,7 +4,7 @@ unit pkglibcurl;
 
 
 interface
 interface
 
 
-uses Classes,pkgdownload,pkghandler;
+uses Classes,pkgdownload;
 
 
 Type
 Type
   TLibCurlDownloader = Class(TBaseDownloader)
   TLibCurlDownloader = Class(TBaseDownloader)
@@ -16,7 +16,7 @@ Type
 
 
 implementation
 implementation
 
 
-uses sysutils,uriparser,libcurl,pkgmessages,unixtype;
+uses sysutils,uriparser,libcurl,pkgmessages,pkgglobals,unixtype;
 
 
 Function DoStreamWrite(Ptr : Pointer; Size : size_t; nmemb: size_t; Data : Pointer) : size_t;cdecl;
 Function DoStreamWrite(Ptr : Pointer; Size : size_t; nmemb: size_t; Data : Pointer) : size_t;cdecl;
 
 

+ 4 - 2
utils/fppkg/pkglnet.pas → utils/fppkg/pkglnet.pp

@@ -6,7 +6,7 @@ interface
 
 
 uses
 uses
   SysUtils, Classes,
   SysUtils, Classes,
-  lnet, lftp, lhttp, pkgdownload,pkgropts, fprepos;
+  lnet, lftp, lhttp, pkgdownload,pkgoptions, fprepos;
 
 
 Type
 Type
 
 
@@ -39,7 +39,9 @@ Type
 implementation
 implementation
 
 
 uses
 uses
-  pkghandler,pkgmessages, uriparser;
+  uriparser,
+  pkgglobals,
+  pkgmessages;
 
 
 { TLNetDownloader }
 { TLNetDownloader }
 
 

+ 1 - 0
utils/fppkg/pkgmessages.pp

@@ -11,6 +11,7 @@ Resourcestring
   SErrMissingFPC             = 'Could not find a fpc executable in the PATH';
   SErrMissingFPC             = 'Could not find a fpc executable in the PATH';
   SErrMissingFPMake          = 'Missing configuration fpmake.pp';
   SErrMissingFPMake          = 'Missing configuration fpmake.pp';
   SErrMissingMakefilefpc     = 'Missing configuration Makefile.fpc';
   SErrMissingMakefilefpc     = 'Missing configuration Makefile.fpc';
+  SErrNoPackageSpecified     = 'No package specified';
   SErrRunning                = 'The FPC make tool encountered the following error:';
   SErrRunning                = 'The FPC make tool encountered the following error:';
   SErrActionAlreadyRegistered= 'Action "%s" is already registered';
   SErrActionAlreadyRegistered= 'Action "%s" is already registered';
   SErrActionNotFound         = 'Action "%s" is not supported';
   SErrActionNotFound         = 'Action "%s" is not supported';

+ 4 - 1
utils/fppkg/pkgmkconv.pp

@@ -48,7 +48,10 @@ Type
 
 
 implementation
 implementation
 
 
-uses typinfo,pkgmessages;
+uses
+  TypInfo,
+  pkgglobals,
+  pkgmessages;
 
 
 Function GetWord(var S : String; Sep : Char) : String;
 Function GetWord(var S : String; Sep : Char) : String;
 
 

+ 18 - 21
utils/fppkg/pkgropts.pp → utils/fppkg/pkgoptions.pp

@@ -12,7 +12,7 @@
  **********************************************************************}
  **********************************************************************}
 {$mode objfpc}
 {$mode objfpc}
 {$h+}
 {$h+}
-unit pkgropts;
+unit pkgoptions;
 
 
 interface
 interface
 
 
@@ -77,6 +77,18 @@ Type
     Property CompilerCPU : TCPU Read FCompilerCPU Write SetCompilerCPU;
     Property CompilerCPU : TCPU Read FCompilerCPU Write SetCompilerCPU;
   end;
   end;
 
 
+var
+  Defaults : TPackagerOptions;
+    
+Implementation
+
+uses
+{$ifdef unix}
+  baseunix,
+{$endif}
+  pkgglobals,
+  pkgmessages;
+
 Const
 Const
   DefaultMirrorsLocation  = 'http://www.freepascal.org/repository/mirrors.xml';
   DefaultMirrorsLocation  = 'http://www.freepascal.org/repository/mirrors.xml';
   DefaultRemoteRepository = 'fpc';
   DefaultRemoteRepository = 'fpc';
@@ -105,25 +117,6 @@ Const
   KeyCompilerVersion       = 'Version';
   KeyCompilerVersion       = 'Version';
 
 
 
 
-Implementation
-
-uses
-{$ifdef unix}
-  baseunix,
-{$endif}
-  pkghandler,
-  pkgmessages;
-
-Function FixPath(S : String) : string;
-
-begin
-  If (S<>'') then
-    Result:=IncludeTrailingPathDelimiter(S)
-  else
-    Result:='';
-end;
-
-
 { TPackagerOptions }
 { TPackagerOptions }
 
 
 constructor TPackagerOptions.Create;
 constructor TPackagerOptions.Create;
@@ -236,7 +229,7 @@ Procedure TPackagerOptions.InitCompilerDefaults;
 begin
 begin
   FCompiler:=FileSearch('fpc'+ExeExt,GetEnvironmentVariable('PATH'));
   FCompiler:=FileSearch('fpc'+ExeExt,GetEnvironmentVariable('PATH'));
   if FCompiler='' then
   if FCompiler='' then
-    Raise EPackageHandler.Create(SErrMissingFPC);
+    Raise EPackagerError.Create(SErrMissingFPC);
 {$warning TODO detect compiler version/target from -i options }
 {$warning TODO detect compiler version/target from -i options }
   FCompilerVersion:='2.0.4';
   FCompilerVersion:='2.0.4';
   FCompilerCPU:=StringToCPU({$I %FPCTARGETCPU%});
   FCompilerCPU:=StringToCPU({$I %FPCTARGETCPU%});
@@ -377,4 +370,8 @@ begin
   end;
   end;
 end;
 end;
 
 
+initialization
+  Defaults:=TPackagerOptions.Create;
+finalization
+  FreeAndNil(Defaults);
 end.
 end.

+ 5 - 2
utils/fppkg/pkgwget.pp

@@ -4,7 +4,7 @@ unit pkgwget;
 
 
 interface
 interface
 
 
-uses Classes,pkgdownload,pkgropts,fprepos;
+uses Classes,pkgdownload,pkgoptions,fprepos;
 
 
 Type
 Type
   TWGetDownloader = Class(TBaseDownloader)
   TWGetDownloader = Class(TBaseDownloader)
@@ -21,7 +21,10 @@ Type
 
 
 implementation
 implementation
 
 
-uses process,pkghandler,pkgmessages;
+uses
+  process,
+  pkgglobals,
+  pkgmessages;
 
 
 Constructor TWGetDownloader.Create(AOwner: TComponent);
 Constructor TWGetDownloader.Create(AOwner: TComponent);
 
 

Some files were not shown because too many files changed in this diff