Jonas Maebe wrote:

On 23 May 2011, at 11:49, Bernd Mueller wrote:

I am running the test suite with remote execution (from a Windows host) on an ARM-Linux target. Some test programs fail at runtime, because they depend on libraries, which were not automatically copied to the target. For example:

  Failed to run test/tlib1b.pp 2011/01/21 18:06:08 (16)
  /mnt/tlib1b: can't load library 'libtlib1a.so'

My target has very low resources so that I can not run the test suite directly on the target. How can my problem be solved?

Maybe you are using TEST_DELTEMP=1? If so, remove it if you have enough disk space on the remote target. Most test sources that are later on used by other tests don't contain the necessary { %neededafter } directive, so they are immediately deleted even when they are still required later

Alternatively, you can submit a patch that adds { %neededafter } to all affected tests).

I have enough FLASH memory, so I am not using TEST_DELTEMP=1. I had a look into the test suite source and I think, that the test suite is not able to copy the libraries to the target.

I attached a small patch, which could be a solution for the problem. I am using the parameter of the %needlibrary directive to get the information, which library should be copied. For example in tlib1b.pp, the directive is expanded to { %needlibrary=tlib1a }. This works for me.

If you think, this patch could be the right way to copy the libraries, I would submit a second patch which expands all required %needlibrary directives.

Regards, Bernd.
Index: tests/utils/dotest.pp
===================================================================
--- tests/utils/dotest.pp       (Revision 17059)
+++ tests/utils/dotest.pp       (Arbeitskopie)
@@ -811,6 +811,7 @@
   index    : integer;
   EndTicks,
   StartTicks : int64;
+  LibraryFileName, LocalLibraryFile: string;
   function ExecuteRemote(const prog,args:string):boolean;
     var
       Trials : longint;
@@ -913,6 +914,21 @@
           s:=copy(s,index+1,length(s)-index);
         until false;
       end;
+
+      { copy library to target }
+      if (CompilerTarget = 'linux') and (Config.LibraryName <> '') then
+      begin
+         LibraryFileName:= 'lib' + Config.LibraryName + '.so';
+         LocalPath:=SplitPath(PPFile[current]);
+         LocalLibraryFile:= OutputDir + '/' + LocalPath + LibraryFileName;
+         execres:=ExecuteRemote(rcpprog,RemotePara+' '+ LocalLibraryFile+' 
'+RemoteAddr+':' + RemotePath+'/'+ LibraryFileName);
+         if not execres then
+         begin
+           Verbose(V_normal, 'Could not copy library ' + LibraryFileName);
+           goto done;
+         end;
+      end;
+
       { rsh doesn't pass the exitcode, use a second command to print the 
exitcode
         on the remoteshell to stdout }
       if DoVerbose and (rshprog='plink') then
@@ -936,6 +952,8 @@
         execcmd:=execcmd+' ./'+SplitFileName(TestRemoteExe)
       else
         execcmd:=execcmd+' '+TestRemoteExe;
+      if Config.LibraryName <> '' then
+        execcmd:=execcmd+' ; export LD_LIBRARY_PATH='+RemotePath;
       execcmd:=execcmd+' ; echo "TestExitCode: $?"';
       if (deAfter in DelExecutable) and
          not Config.NeededAfter then
Index: tests/utils/testu.pp
===================================================================
--- tests/utils/testu.pp        (Revision 17059)
+++ tests/utils/testu.pp        (Arbeitskopie)
@@ -28,6 +28,7 @@
     KnownCompileError : longint;
     NeedRecompile : boolean;
     NeedLibrary   : boolean;
+    LibraryName   : string;
     NeededAfter   : boolean;
     IsInteractive : boolean;
     IsKnownRunError,
@@ -212,7 +213,10 @@
                 r.NoRun:=true
               else
                if GetEntry('NEEDLIBRARY') then
-                r.NeedLibrary:=true
+                begin
+                  r.NeedLibrary:=true;
+                  r.LibraryName:= res;
+                end
               else
                if GetEntry('NEEDEDAFTER') then
                 r.NeededAfter:=true
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to