El 17/05/2012 22:29, "Chris Rees" <cr...@freebsd.org> escribió:
>
> On 17 May 2012 20:58, Fernando Apesteguía <fernando.apesteg...@gmail.com>
wrote:
> > On Tue, May 15, 2012 at 9:11 PM, Fernando Apesteguía
> > <fernando.apesteg...@gmail.com> wrote:
> >> On Tue, May 15, 2012 at 7:29 PM, Chris Rees <cr...@freebsd.org> wrote:
> >>> On 15 May 2012 18:14, Fernando Apesteguía <
fernando.apesteg...@gmail.com> wrote:
> >>>> On Mon, May 14, 2012 at 7:40 PM, Fernando Apesteguía
> >>>> <fernando.apesteg...@gmail.com> wrote:
> >>>>> On Mon, May 14, 2012 at 7:31 PM, Chris Rees <cr...@freebsd.org>
wrote:
> >>>>>> On 14 May 2012 18:23, Fernando Apesteguía <
fernando.apesteg...@gmail.com> wrote:
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> I'm working on a port for an application written in Java and I'm
> >>>>>>> having some problems deciding how to install the application.
> >>>>>>> Previous to the installation, the WRKSRC directory contains some
.jar
> >>>>>>> files and some directories along with some .txt files for
> >>>>>>> licenses, but also some .exe and .bat files _which I don't want to
> >>>>>>> install_. It is basically a package that contains both files for
> >>>>>>> windows and non-windows systems.
> >>>>>>>
> >>>>>>> I was thinking on using COPYTREE_SHARE to install everything and
then
> >>>>>>> remove the non necessary files, but doesn't look like
> >>>>>>> an elegant solution. Also, I wouldn't like to explicitly specify
every
> >>>>>>> one of the files I want to copy. Is there a way of using something
> >>>>>>> similar to bash's extglob so I can copy !(*.exe|*bat)? If not,
how to proceed?
> >>>>>>>
> >>>>>>> I already looked at the existent ports to find something similar
but
> >>>>>>> it seems hard to find. I also had a look at bsd.port.mk but
> >>>>>>> I couldn't find what I'm looking for.
> >>>>>>
> >>>>>> You can use find primaries with COPYTREE_SHARE such as;
> >>>>>>
> >>>>>> (cd ${WRKSRC}/wherever && ${COPYTREE_SHARE} \*
> >>>>>> ${JAVALIBDIR}/${PORTNAME}/wherever "-not -name \*.exe -and -not
-name
> >>>>>> \*.bat"
> >>>>>
> >>>>> Thanks! I think that is what I was looking for :)
> >>>>
> >>>> Sorry guys, but I think I need more help :). I tried with the
following line:
> >>>>
> >>>> ( cd ${WRKSRC}/JDownloader && ${COPYTREE_SHARE} \*
> >>>> ${PREFIX}/${PORTNAME}/ "! -name \*.exe" )
> >>>>
> >>>> but it doesn't seem to follow primaries and it still installs the
.exe
> >>>> files. I just tried with:
> >>>>
> >>>> ( cd ${WRKSRC}/JDownloader && ${COPYTREE_SHARE} \*
> >>>> ${PREFIX}/${PORTNAME}/ "! -name JDownloader.exe" )
> >>>>
> >>>> and check that effectively the file is not installed so I suppose
this
> >>>> has something to do with quoting and escaping special characters (the
> >>>> asterisk). I found the following line in audio/xmp/Makefile:
> >>>>
> >>>> ( cd ${WRKSRC}/docs && ${COPYTREE_SHARE} \* \
> >>>>                ${DOCSDIR} '! ( -name Makefile -or -name xmp.1 \
> >>>>                -or -name *.bak -or -name *.orig )' )
> >>>>
> >>>> that seems pretty close to what I'm trying to do, so I tried with
this:
> >>>>
> >>>> ( cd ${WRKSRC}/JDownloader && ${COPYTREE_SHARE} \*
> >>>> ${PREFIX}/${PORTNAME}/ '! ( -name *.exe )' )
> >>>>
> >>>> but then, the asterisk is expanded and find fails:
> >>>>
> >>>> find: JDownloader.exe: unknown primary or operator
> >>>>
> >>>> what am I doing wrong?
> >>>
> >>> Escape the *;
> >>>
> >>> (cd ${WRKSRC}/JDownloader && ${COPYTREE_SHARE} \*
${PREFIX}/${PORTNAME}/
> >>>  '! ( -name \*.exe )' )
> >>
> >> That executes the following:
> >>
> >> (cd /usr/home/fernape/porting/jdownloader/port/work/JDownloader &&
> >> /bin/sh -c '(/usr/bin/find -d $0 $2 | /usr/bin/cpio -dumpl $1
> >>>/dev/null  2>&1) &&  /usr/sbin/chown -R root:wheel $1 &&
> >> /usr/bin/find -d $0 $2 -type d -exec chmod 755 $1/{} \; &&
> >> /usr/bin/find -d $0 $2 -type f -exec chmod 444 $1/{} \;' -- \*
> >> /usr/local/jdownloader/ '! ( -name \*.exe )' )
> >>
> >> which results in:
> >>
> >> $ ls /usr/local/jdownloader
> >>
> >> JDUpdate.exe           JDownloaderBETA.exe    jd/
> >> license.txt            outdated.dat           tools/
> >> windows_restore.bat
> >> JDownloader.exe        JDownloaderD3D.exe     jdupdate.jar
> >> license_german.txt     plugins/               version.txt
> >> JDownloader.jar        java/                  libs/
> >> licenses/              tmp/                   windows_createlog.bat
> >>
> >> The .exe files are still there.
> >
> > Sorry or my insistence :)
> >
> > This is what I have in my Makefile:
> >
> >        ( cd ${WRKSRC}/JDownloader && ${COPYTREE_SHARE} \* \
> >                          ${PREFIX}/${PORTNAME} '! ( -name *.exe -or
-name *.dll \
> >                                                  -or -name *.bat )' )
> >
> > what I've observed is that 'make install' fails with this message:
> >
> > find: JDownloader.exe: unknown primary or operator
> > find: JDownloader.exe: unknown primary or operator
> >
> > However, if I replace the expression so I filter with something like
> > *.txt and there is only
> > one file in the directory, it works. I checked this with audio/xmp
> >
> > $cat Makefile
> > ...
> > .if !defined(NOPORTDOCS)
> >        ${ECHO_MSG} Installing documentation in ${DOCSDIR}
> >        ( cd ${WRKSRC}/docs && ${COPYTREE_SHARE} \* \
> >                ${DOCSDIR} '! ( -name Makefile -or -name xmp.1 \
> >                -or -name *.bak -or -name *.orig )' )
> > .endif
> >
> > ...
> >
> > $ make
> >
> > $ ls work/xmp-3.5.0/docs/*.bak
> > work/xmp-3.5.0/docs/xmp.1.bak
> >
> > Only one file (make install works fine).
> >
> > $ touch work/xmp-3.5.0/docs/test.bak
> >
> > $make install
> >
> > ===>  Installing for xmp-3.5.0,1
> > ===>   xmp-3.5.0,1 depends on file: /usr/local/bin/unzip - found
> > ===>   Generating temporary packing list
> > ===>  Checking if audio/xmp already installed
> > Installing xmp in /usr/local/bin
> > Installing xmp.conf in /usr/local/etc/xmp
> > Installing modules.conf in /usr/local/etc/xmp
> > Installing manpages in /usr/local/man/man1
> >
> >  Installation complete. To customize, copy /usr/local/etc/xmp/xmp.conf
> >  and /usr/local/etc/xmp/modules.conf to $HOME/.xmp/
> >
> > Installing documentation in /usr/local/share/doc/xmp
> > find: xmp.1.bak: unknown primary or operator
> > chown: /usr/local/share/doc/xmp: No such file or directory
> > *** Error code 1
> >
> > Stop in /usr/ports/audio/xmp.
> > *** Error code 1
> >
> > Stop in /usr/ports/audio/xmp.
> >
> >
> > Why is this?
> >
> > Thanks in advances
>
> OK, you got me curious enough to get testing.
>
> The problem is that the -name *.bak expands to -name test.bak
> xmp1.bak, which fails.  Escaping for the shell without upsetting find
> also appears non-trivial, due to the multiple levels of escaping
> (Make, then sh, then sh again, then find)
>
> You should instead use -regex:
>
> (cd ${WRKSRC}/JDownloader && ${COPYTREE_SHARE} \* \
> ${PREFIX}/${PORTNAME}/ '! ( -regex .*.exe )' )
>
> Hideous, but it works.  (If you're unfamiliar with REs, I might point
> out that you shouldn't forget the leading dot ;))

Thanks, I'll give it a try tomorrow. I'm familiar with REs, no problem
there :)
I'm just surprised this wasn't noticed before. After all, the whole point
when using primaries is to match several files and not just one. However,
find primaries are not widely used in the ports collection, maybe that's
the reason.

Cheers.
>
> Chris
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to