guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Erroneous uses of regex in the invokation of FIND-FILES


From: Maxim Cournoyer
Subject: Re: Erroneous uses of regex in the invokation of FIND-FILES
Date: Sat, 21 Sep 2019 04:52:02 +0900
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)

Hello Alex,

Alex Vong <address@hidden> writes:

> [Resending...]
>
> Hello guix,
>
> I find out that there are a lof of erroneous uses of regex in the
> invokation of FIND-FILES. The correct usage should be:
>
>   (find-files "." "\\.c$")
>
> Instead people write:
>
>   (find-files "." ".*\\.c")
>
> which match unwanted files.
>
> For examples, in the procedure CUSTOM-GCC, the correct regex should be:
>
>   "(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)$"
>
> instead of:
>
>   ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"
>
> Please correct me if I am wrong.
>
> Right now, the erroneous use of regex in CUSTOM-GCC casues the 'bin/'
> directory of the output of gccgo, gcc-objc and gcc-objc++ to be empty.

I've done the following experiment to validate your findings:

Modified gcc.scm as follows:

--8<---------------cut here---------------start------------->8---
1 file changed, 4 insertions(+), 4 deletions(-)
gnu/packages/gcc.scm | 8 ++++----

modified   gnu/packages/gcc.scm
@@ -631,10 +631,10 @@ as the 'native-search-paths' field."
         `(modify-phases ,phases
            (add-after 'install 'remove-broken-or-conflicting-files
              (lambda* (#:key outputs #:allow-other-keys)
-               (for-each delete-file
-                         (find-files (string-append (assoc-ref outputs "out") 
"/bin")
-                                     
".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
-               #t))))))))
+               ;; (for-each delete-file
+               ;;           (find-files (string-append (assoc-ref outputs 
"out") "/bin")
+               ;;                       
".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
+               #f))))))))
 
 (define %generic-search-paths
   ;; This is the language-neutral search path for GCC.  Entries in $CPATH are

--8<---------------cut here---------------end--------------->8---

Then built it with

--8<---------------cut here---------------start------------->8---
./pre-inst-env guix build -K gcc-objc
--8<---------------cut here---------------start------------->8---

The copied the resulting store item under a writable location; e.g.:

--8<---------------cut here---------------start------------->8---
cp -r /gnu/store/7pmfv7bs9krrjdmfnky2q0i1kdhcvmzj-gcc-objc-8.3.0 
/tmp/gccgcc-objc-8.3.0
--8<---------------cut here---------------end--------------->8---

And initialize a git repo in that dir:

--8<---------------cut here---------------start------------->8---
cd /tmp/gccgcc-objc-8.3.0; git init && git add . && git commit -m init
--8<---------------cut here---------------end--------------->8---

Then fired up Guile, and ran the following:

$ guile
> ,use (guix build utils)
> (define old-regexp ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)")
> (define new-regexp "(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)$")
> (for-each delete-file (find-files "./bin" old-regexp))

This resulted in the following files being deleted:

--8<---------------cut here---------------start------------->8---
 git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    bin/c++
        deleted:    bin/cpp
        deleted:    bin/g++
        deleted:    bin/gcc
        deleted:    bin/gcc-ar
        deleted:    bin/gcc-nm
        deleted:    bin/gcc-ranlib
        deleted:    bin/gcov
        deleted:    bin/gcov-dump
        deleted:    bin/gcov-tool
        deleted:    bin/x86_64-unknown-linux-gnu-c++
        deleted:    bin/x86_64-unknown-linux-gnu-g++
        deleted:    bin/x86_64-unknown-linux-gnu-gcc
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-8.3.0
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-ar
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-nm
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-ranlib

no changes added to commit (use "git add" and/or "git commit -a")
--8<---------------cut here---------------end--------------->8---

And the bin directory is empty, as you found:

--8<---------------cut here---------------start------------->8---
ls -al bin/
total 0
drwxr-xr-x 1 mcournoyer users  0 Sep 21 04:31 ./
drwxr-xr-x 1 mcournoyer users 52 Sep 21 04:27 ../
--8<---------------cut here---------------end--------------->8---

Resetting the git repo (git reset --hard), and using the new regexp
instead:

--8<---------------cut here---------------start------------->8---
(for-each delete-file (find-files "./bin" new-regexp))
--8<---------------cut here---------------end--------------->8---

We now obtain:

--8<---------------cut here---------------start------------->8---
git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    bin/c++
        deleted:    bin/cpp
        deleted:    bin/g++
        deleted:    bin/gcc
        deleted:    bin/gcc-ar
        deleted:    bin/gcc-nm
        deleted:    bin/gcc-ranlib
        deleted:    bin/gcov
        deleted:    bin/x86_64-unknown-linux-gnu-c++
        deleted:    bin/x86_64-unknown-linux-gnu-g++
        deleted:    bin/x86_64-unknown-linux-gnu-gcc
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-8.3.0
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-ar
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-nm
        deleted:    bin/x86_64-unknown-linux-gnu-gcc-ranlib

no changes added to commit (use "git add" and/or "git commit -a")
--8<---------------cut here---------------end--------------->8---

Which is mostly the same except that gcov-dump and gcov-tool are
preserved:

--8<---------------cut here---------------start------------->8---
ls -al ./bin
total 2292
drwxr-xr-x 1 mcournoyer users      36 Sep 21 04:49 ./
drwxr-xr-x 1 mcournoyer users      52 Sep 21 04:27 ../
-rwxr-xr-x 1 mcournoyer users 1155104 Sep 21 04:46 gcov-dump
-rwxr-xr-x 1 mcournoyer users 1185632 Sep 21 04:46 gcov-tool
--8<---------------cut here---------------end--------------->8---

That doesn't seem right either.

Maxim



reply via email to

[Prev in Thread] Current Thread [Next in Thread]