On file installation

Fernando Apesteguía fernando.apesteguia at gmail.com
Tue May 15 19:11:15 UTC 2012


On Tue, May 15, 2012 at 7:29 PM, Chris Rees <crees at freebsd.org> wrote:
> On 15 May 2012 18:14, Fernando Apesteguía <fernando.apesteguia at gmail.com> wrote:
>> On Mon, May 14, 2012 at 7:40 PM, Fernando Apesteguía
>> <fernando.apesteguia at gmail.com> wrote:
>>> On Mon, May 14, 2012 at 7:31 PM, Chris Rees <crees at freebsd.org> wrote:
>>>> On 14 May 2012 18:23, Fernando Apesteguía <fernando.apesteguia at 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.

>
> Chris


More information about the freebsd-ports mailing list