Patchwork [2/2] gnu: lispf4: Fix the searchpath for SYSATOMS.

login
register
mail settings
Submitter ng0
Date Oct. 4, 2016, 10:33 p.m.
Message ID <20161004223322.19523-3-ngillmann@runbox.com>
Download mbox | patch
Permalink /patch/16263/
State New
Headers show

Comments

ng0 - Oct. 4, 2016, 10:33 p.m.
* gnu/packages/lisp.scm (lispf4)[arguments]: Fix the searchpath for SYSATOMS.
---
 gnu/packages/lisp.scm | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
Ricardo Wurmus - Oct. 5, 2016, 7:08 a.m.
ng0 <ngillmann@runbox.com> writes:

> * gnu/packages/lisp.scm (lispf4)[arguments]: Fix the searchpath for SYSATOMS.
> ---
>  gnu/packages/lisp.scm | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
> index 7836d48..d66fb8b 100644
> --- a/gnu/packages/lisp.scm
> +++ b/gnu/packages/lisp.scm
> @@ -474,8 +474,20 @@ interface.")
>           #:phases
>           (modify-phases %standard-phases
>             (delete 'configure)
> +           (add-before 'build 'fix-searchpath
> +             (lambda _
> +               (substitute* "Lispf42.f"
> +                 (("NAME='SYSATOMS'")
> +                  (string-append "NAME='" (assoc-ref %outputs "out")
> +                                 "/bin/SYSATOMS'")))
> +               (substitute* "lispf42.c"
> +                 (("SYSATOMS")
> +                  (string-append (assoc-ref %outputs "out") "/bin/SYSATOMS"))
> +                 ;;(("8+1") "72+8+1"))))
> +                 (("c_b98_st") "c_b98")
> +                 (("c_b98.val") ""))))
>             (replace 'install
> -            (lambda* (#:key outputs #:allow-other-keys)
> +             (lambda* (#:key outputs #:allow-other-keys)
>                (let* ((out (assoc-ref outputs "out"))
>                       (bin (string-append out "/bin"))
>                       (doc (string-append (assoc-ref outputs "doc")


Here’s an alternative:

           (add-before 'build 'fix-reference-to-SYSATOMS
             (lambda* (#:key outputs #:allow-other-keys)
               (substitute* "lispf42.c"
                 (("#define c_b98.*")
                  (string-append "#define c_b98 \""
                                 (assoc-ref outputs "out")
                                 "/bin/SYSATOMS\"\n")))
               #t))

This won’t work, however, because during the build phase the lispf4
executable is called to run a script.  At that point SYSATOMS only
exists in the current directory.  So with the above phase the build
would fail.

A hack to solve this would be to first install “SYSATOMS” to the target
directory and then build.

BTW: I think “SYSATOMS” and the “BASIC.IMG” should not be installed to
“bin” because they are not executables.  Instead they should go to
“$out/share/lispf4”.  This would also require you to change the code
that loads “BASIC.IMG” (I think it won’t work right now for the same
reasons as why you get the error relating to “SYSATOMS”.)

You also don’t seem to be installing “LISPF4.IMG”, which seems to be
required as well.

I should also note that after looking at the code I no longer consider
“lispf42.c” to be source code.  It’s unreadable because it’s the
automatically produced output of a fortran-to-C converter, only slightly
modified :-/

~~ Ricardo
ng0 - Oct. 5, 2016, 8:54 a.m.
Hi,

thanks for trying to help with this.

Ricardo Wurmus <rekado@elephly.net> writes:

> ng0 <ngillmann@runbox.com> writes:
>
>> * gnu/packages/lisp.scm (lispf4)[arguments]: Fix the searchpath for SYSATOMS.
>> ---
>>  gnu/packages/lisp.scm | 14 +++++++++++++-
>>  1 file changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
>> index 7836d48..d66fb8b 100644
>> --- a/gnu/packages/lisp.scm
>> +++ b/gnu/packages/lisp.scm
>> @@ -474,8 +474,20 @@ interface.")
>>           #:phases
>>           (modify-phases %standard-phases
>>             (delete 'configure)
>> +           (add-before 'build 'fix-searchpath
>> +             (lambda _
>> +               (substitute* "Lispf42.f"
>> +                 (("NAME='SYSATOMS'")
>> +                  (string-append "NAME='" (assoc-ref %outputs "out")
>> +                                 "/bin/SYSATOMS'")))
>> +               (substitute* "lispf42.c"
>> +                 (("SYSATOMS")
>> +                  (string-append (assoc-ref %outputs "out") "/bin/SYSATOMS"))
>> +                 ;;(("8+1") "72+8+1"))))
>> +                 (("c_b98_st") "c_b98")
>> +                 (("c_b98.val") ""))))
>>             (replace 'install
>> -            (lambda* (#:key outputs #:allow-other-keys)
>> +             (lambda* (#:key outputs #:allow-other-keys)
>>                (let* ((out (assoc-ref outputs "out"))
>>                       (bin (string-append out "/bin"))
>>                       (doc (string-append (assoc-ref outputs "doc")
>
>
> Here’s an alternative:
>
>            (add-before 'build 'fix-reference-to-SYSATOMS
>              (lambda* (#:key outputs #:allow-other-keys)
>                (substitute* "lispf42.c"
>                  (("#define c_b98.*")
>                   (string-append "#define c_b98 \""
>                                  (assoc-ref outputs "out")
>                                  "/bin/SYSATOMS\"\n")))
>                #t))

Thanks, I'll try this in combination with the proposed move, but if I
don't succeed with it today I will start working on my priority tasks
and do this in november or whenever I get the chance.

> This won’t work, however, because during the build phase the lispf4
> executable is called to run a script.  At that point SYSATOMS only
> exists in the current directory.  So with the above phase the build
> would fail.
>
> A hack to solve this would be to first install “SYSATOMS” to the target
> directory and then build.

Right, I have seen the complains of the script pointing to that
directory.

> BTW: I think “SYSATOMS” and the “BASIC.IMG” should not be installed to
> “bin” because they are not executables.  Instead they should go to
> “$out/share/lispf4”.  This would also require you to change the code
> that loads “BASIC.IMG” (I think it won’t work right now for the same
> reasons as why you get the error relating to “SYSATOMS”.)
>
> You also don’t seem to be installing “LISPF4.IMG”, which seems to be
> required as well.

I think it's different.. I think I should have installed BARE.IMG,
BASIC.IMG and SYSATOMS. LISP4.img is generated nowhere. If it's in the
original source, the f2c running author did a strange job.

> I should also note that after looking at the code I no longer consider
> “lispf42.c” to be source code.  It’s unreadable because it’s the
> automatically produced output of a fortran-to-C converter, only slightly
> modified :-/

A while ago I forked this with the intention to clean it up some
day.. Could take a long time, if at all. I find the fortran easier to
read. Is there any reason why just using the fortran source would not
work for us? I might have packaged gforth, but I know little about
fortran compiling, compability etc.
I missed a free software licensed interlisp implementation.. this lispf4
differed from what I needed for my purposes, which would've been
SIEMENS-INTERLISP, but I found no other interlisp at that time.
Differed in the way that SIEMENS-INTERLISP gives you the ability to
close every open parens with >, as a super-paren.. that's just one
difference of many.
(PLUS 2 4 (TIMES 80 9 (MINUS 2 300 >
In case anyone is curious: "Christian-M. Hamann - Einführung in das
Programmieren in LISP", published in Berlin 1985 also states New York so
there's a chance for a translation somewhere.

I'm open to suggestions other than writing my own interlisp (which would
be very nice, but I'm at least 2 years busy on another front :) )... It
will probably lead to writing my own interlisp.

> ~~ Ricardo
>
>

--
ng0 - Oct. 5, 2016, 9:17 a.m.
ng0 <ngillmann@runbox.com> writes:

> Hi,
>
> thanks for trying to help with this.
>
> Ricardo Wurmus <rekado@elephly.net> writes:
>
>> ng0 <ngillmann@runbox.com> writes:
>>
>>> * gnu/packages/lisp.scm (lispf4)[arguments]: Fix the searchpath for SYSATOMS.
>>> ---
>>>  gnu/packages/lisp.scm | 14 +++++++++++++-
>>>  1 file changed, 13 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
>>> index 7836d48..d66fb8b 100644
>>> --- a/gnu/packages/lisp.scm
>>> +++ b/gnu/packages/lisp.scm
>>> @@ -474,8 +474,20 @@ interface.")
>>>           #:phases
>>>           (modify-phases %standard-phases
>>>             (delete 'configure)
>>> +           (add-before 'build 'fix-searchpath
>>> +             (lambda _
>>> +               (substitute* "Lispf42.f"
>>> +                 (("NAME='SYSATOMS'")
>>> +                  (string-append "NAME='" (assoc-ref %outputs "out")
>>> +                                 "/bin/SYSATOMS'")))
>>> +               (substitute* "lispf42.c"
>>> +                 (("SYSATOMS")
>>> +                  (string-append (assoc-ref %outputs "out") "/bin/SYSATOMS"))
>>> +                 ;;(("8+1") "72+8+1"))))
>>> +                 (("c_b98_st") "c_b98")
>>> +                 (("c_b98.val") ""))))
>>>             (replace 'install
>>> -            (lambda* (#:key outputs #:allow-other-keys)
>>> +             (lambda* (#:key outputs #:allow-other-keys)
>>>                (let* ((out (assoc-ref outputs "out"))
>>>                       (bin (string-append out "/bin"))
>>>                       (doc (string-append (assoc-ref outputs "doc")
>>
>>
>> Here’s an alternative:
>>
>>            (add-before 'build 'fix-reference-to-SYSATOMS
>>              (lambda* (#:key outputs #:allow-other-keys)
>>                (substitute* "lispf42.c"
>>                  (("#define c_b98.*")
>>                   (string-append "#define c_b98 \""
>>                                  (assoc-ref outputs "out")
>>                                  "/bin/SYSATOMS\"\n")))
>>                #t))
>
> Thanks, I'll try this in combination with the proposed move, but if I
> don't succeed with it today I will start working on my priority tasks
> and do this in november or whenever I get the chance.
>
>> This won’t work, however, because during the build phase the lispf4
>> executable is called to run a script.  At that point SYSATOMS only
>> exists in the current directory.  So with the above phase the build
>> would fail.
>>
>> A hack to solve this would be to first install “SYSATOMS” to the target
>> directory and then build.

And this fixes at least running it :) New patch incoming soon. This
depends on the one which deletes the bundles, can you apply that when
you do the one which will I will send in later?

> Right, I have seen the complains of the script pointing to that
> directory.
>
>> BTW: I think “SYSATOMS” and the “BASIC.IMG” should not be installed to
>> “bin” because they are not executables.  Instead they should go to
>> “$out/share/lispf4”.  This would also require you to change the code
>> that loads “BASIC.IMG” (I think it won’t work right now for the same
>> reasons as why you get the error relating to “SYSATOMS”.)
>>
>> You also don’t seem to be installing “LISPF4.IMG”, which seems to be
>> required as well.
>
> I think it's different.. I think I should have installed BARE.IMG,
> BASIC.IMG and SYSATOMS. LISP4.img is generated nowhere. If it's in the
> original source, the f2c running author did a strange job.
>
>> I should also note that after looking at the code I no longer consider
>> “lispf42.c” to be source code.  It’s unreadable because it’s the
>> automatically produced output of a fortran-to-C converter, only slightly
>> modified :-/
>
> A while ago I forked this with the intention to clean it up some
> day.. Could take a long time, if at all. I find the fortran easier to
> read. Is there any reason why just using the fortran source would not
> work for us? I might have packaged gforth, but I know little about
> fortran compiling, compability etc.
> I missed a free software licensed interlisp implementation.. this lispf4
> differed from what I needed for my purposes, which would've been
> SIEMENS-INTERLISP, but I found no other interlisp at that time.
> Differed in the way that SIEMENS-INTERLISP gives you the ability to
> close every open parens with >, as a super-paren.. that's just one
> difference of many.
> (PLUS 2 4 (TIMES 80 9 (MINUS 2 300 >
> In case anyone is curious: "Christian-M. Hamann - Einführung in das
> Programmieren in LISP", published in Berlin 1985 also states New York so
> there's a chance for a translation somewhere.
>
> I'm open to suggestions other than writing my own interlisp (which would
> be very nice, but I'm at least 2 years busy on another front :) )... It
> will probably lead to writing my own interlisp.
>
>> ~~ Ricardo
>>
>>
>
> -- 
>
>

--
Ricardo Wurmus - Oct. 5, 2016, 11:22 a.m.
ng0 <ngillmann@runbox.com> writes:

> ng0 <ngillmann@runbox.com> writes:
>
>> Hi,
>>
>> thanks for trying to help with this.
>>
>> Ricardo Wurmus <rekado@elephly.net> writes:
>>
>>> ng0 <ngillmann@runbox.com> writes:
>>>
>>>> * gnu/packages/lisp.scm (lispf4)[arguments]: Fix the searchpath for SYSATOMS.
>>>> ---
>>>>  gnu/packages/lisp.scm | 14 +++++++++++++-
>>>>  1 file changed, 13 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
>>>> index 7836d48..d66fb8b 100644
>>>> --- a/gnu/packages/lisp.scm
>>>> +++ b/gnu/packages/lisp.scm
>>>> @@ -474,8 +474,20 @@ interface.")
>>>>           #:phases
>>>>           (modify-phases %standard-phases
>>>>             (delete 'configure)
>>>> +           (add-before 'build 'fix-searchpath
>>>> +             (lambda _
>>>> +               (substitute* "Lispf42.f"
>>>> +                 (("NAME='SYSATOMS'")
>>>> +                  (string-append "NAME='" (assoc-ref %outputs "out")
>>>> +                                 "/bin/SYSATOMS'")))
>>>> +               (substitute* "lispf42.c"
>>>> +                 (("SYSATOMS")
>>>> +                  (string-append (assoc-ref %outputs "out") "/bin/SYSATOMS"))
>>>> +                 ;;(("8+1") "72+8+1"))))
>>>> +                 (("c_b98_st") "c_b98")
>>>> +                 (("c_b98.val") ""))))
>>>>             (replace 'install
>>>> -            (lambda* (#:key outputs #:allow-other-keys)
>>>> +             (lambda* (#:key outputs #:allow-other-keys)
>>>>                (let* ((out (assoc-ref outputs "out"))
>>>>                       (bin (string-append out "/bin"))
>>>>                       (doc (string-append (assoc-ref outputs "doc")
>>>
>>>
>>> Here’s an alternative:
>>>
>>>            (add-before 'build 'fix-reference-to-SYSATOMS
>>>              (lambda* (#:key outputs #:allow-other-keys)
>>>                (substitute* "lispf42.c"
>>>                  (("#define c_b98.*")
>>>                   (string-append "#define c_b98 \""
>>>                                  (assoc-ref outputs "out")
>>>                                  "/bin/SYSATOMS\"\n")))
>>>                #t))
>>
>> Thanks, I'll try this in combination with the proposed move, but if I
>> don't succeed with it today I will start working on my priority tasks
>> and do this in november or whenever I get the chance.
>>
>>> This won’t work, however, because during the build phase the lispf4
>>> executable is called to run a script.  At that point SYSATOMS only
>>> exists in the current directory.  So with the above phase the build
>>> would fail.
>>>
>>> A hack to solve this would be to first install “SYSATOMS” to the target
>>> directory and then build.
>
> And this fixes at least running it :) New patch incoming soon. This
> depends on the one which deletes the bundles, can you apply that when
> you do the one which will I will send in later?

Yes, but have you actually tried using it?  I have and while useless
stuff like “(LIST 1 2 3)” works, creating own definitions does not.

Here’s an example from the manual:

~~~~~~~~~~~~~~~~~~~~~~~~~~
_(DE KAR(X) ((SUBR . CAR) X]
--- Undefined function  
APPLY
DE
--- Reset
ng0 - Oct. 5, 2016, 12:15 p.m.
Ricardo Wurmus <rekado@elephly.net> writes:

> ng0 <ngillmann@runbox.com> writes:
>
>> ng0 <ngillmann@runbox.com> writes:
>>
>>> Hi,
>>>
>>> thanks for trying to help with this.
>>>
>>> Ricardo Wurmus <rekado@elephly.net> writes:
>>>
>>>> ng0 <ngillmann@runbox.com> writes:
>>>>
>>>>> * gnu/packages/lisp.scm (lispf4)[arguments]: Fix the searchpath for SYSATOMS.
>>>>> ---
>>>>>  gnu/packages/lisp.scm | 14 +++++++++++++-
>>>>>  1 file changed, 13 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
>>>>> index 7836d48..d66fb8b 100644
>>>>> --- a/gnu/packages/lisp.scm
>>>>> +++ b/gnu/packages/lisp.scm
>>>>> @@ -474,8 +474,20 @@ interface.")
>>>>>           #:phases
>>>>>           (modify-phases %standard-phases
>>>>>             (delete 'configure)
>>>>> +           (add-before 'build 'fix-searchpath
>>>>> +             (lambda _
>>>>> +               (substitute* "Lispf42.f"
>>>>> +                 (("NAME='SYSATOMS'")
>>>>> +                  (string-append "NAME='" (assoc-ref %outputs "out")
>>>>> +                                 "/bin/SYSATOMS'")))
>>>>> +               (substitute* "lispf42.c"
>>>>> +                 (("SYSATOMS")
>>>>> +                  (string-append (assoc-ref %outputs "out") "/bin/SYSATOMS"))
>>>>> +                 ;;(("8+1") "72+8+1"))))
>>>>> +                 (("c_b98_st") "c_b98")
>>>>> +                 (("c_b98.val") ""))))
>>>>>             (replace 'install
>>>>> -            (lambda* (#:key outputs #:allow-other-keys)
>>>>> +             (lambda* (#:key outputs #:allow-other-keys)
>>>>>                (let* ((out (assoc-ref outputs "out"))
>>>>>                       (bin (string-append out "/bin"))
>>>>>                       (doc (string-append (assoc-ref outputs "doc")
>>>>
>>>>
>>>> Here’s an alternative:
>>>>
>>>>            (add-before 'build 'fix-reference-to-SYSATOMS
>>>>              (lambda* (#:key outputs #:allow-other-keys)
>>>>                (substitute* "lispf42.c"
>>>>                  (("#define c_b98.*")
>>>>                   (string-append "#define c_b98 \""
>>>>                                  (assoc-ref outputs "out")
>>>>                                  "/bin/SYSATOMS\"\n")))
>>>>                #t))
>>>
>>> Thanks, I'll try this in combination with the proposed move, but if I
>>> don't succeed with it today I will start working on my priority tasks
>>> and do this in november or whenever I get the chance.
>>>
>>>> This won’t work, however, because during the build phase the lispf4
>>>> executable is called to run a script.  At that point SYSATOMS only
>>>> exists in the current directory.  So with the above phase the build
>>>> would fail.
>>>>
>>>> A hack to solve this would be to first install “SYSATOMS” to the target
>>>> directory and then build.
>>
>> And this fixes at least running it :) New patch incoming soon. This
>> depends on the one which deletes the bundles, can you apply that when
>> you do the one which will I will send in later?
>
> Yes, but have you actually tried using it?  I have and while useless
> stuff like “(LIST 1 2 3)” works, creating own definitions does not.
>
> Here’s an example from the manual:
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~
> _(DE KAR(X) ((SUBR . CAR) X]
> --- Undefined function  
> APPLY
> DE
> --- Reset   
> _
> ~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Installing BASIC.IMG to $out/bin has no effect.  The thing behaves the
> same when the image is not installed at all.

Hm. Okay, I will look into this as soon as I can dedicate time to it.

> Currently, this package cannot be used and I don’t want to have
> a continuous stream of patches to develop the package in master.  Please
> test this thoroughly on your own and then submit a new patch to fix all
> the problems.

Ok

> Another thing I noticed is that this package comes with a full
> reference of Interlisp, which seems unrelated to this particular
> implementation.  The reference is a whole book and it is not clear under
> what license it is released.
>
> I’m currently tempted to remove the package because in its current state
> it isn’t usable and there doesn’t seem to be anyone using it to have
> noticed that it’s broken.  That’s somewhat unsatisfying.
>
> ~~ Ricardo
>
>

I fully agree, please remove it.
I will re-add it as soon as I have a working copy, stripped off the
bloat it currently carries and solving the non-functional state.
Maybe it's even easier to re-implement in Guile what SIEMENS-INTERLISP
did back then, and drop any work on this completely... For now I'll move
this back to my long work-in-progress bench.

Patch

diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 7836d48..d66fb8b 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -474,8 +474,20 @@  interface.")
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)
+           (add-before 'build 'fix-searchpath
+             (lambda _
+               (substitute* "Lispf42.f"
+                 (("NAME='SYSATOMS'")
+                  (string-append "NAME='" (assoc-ref %outputs "out")
+                                 "/bin/SYSATOMS'")))
+               (substitute* "lispf42.c"
+                 (("SYSATOMS")
+                  (string-append (assoc-ref %outputs "out") "/bin/SYSATOMS"))
+                 ;;(("8+1") "72+8+1"))))
+                 (("c_b98_st") "c_b98")
+                 (("c_b98.val") ""))))
            (replace 'install
-            (lambda* (#:key outputs #:allow-other-keys)
+             (lambda* (#:key outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
                      (bin (string-append out "/bin"))
                      (doc (string-append (assoc-ref outputs "doc")