Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 568692 - multibuild.eclass: When broken symbolic link in the source, multibuild_copy_sources fails on G/FBSD.
Summary: multibuild.eclass: When broken symbolic link in the source, multibuild_copy_s...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Eclasses (show other bugs)
Hardware: All FreeBSD
: Normal normal (vote)
Assignee: Michał Górny
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-12-19 00:00 UTC by Yuta SATOH
Modified: 2015-12-19 14:14 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Yuta SATOH 2015-12-19 00:00:02 UTC
cp of FreeBSD seem to different operating depending on the options of r and R.
I think to solve the problem by changing from cp -pr "${cp_args[@]}" \ to 
cp -pR "${cp_args[@]}" \ in multibuild.eclass.


# ls -lha /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/apps/md4.c
lrwxr-xr-x  1 portage  portage    34B Dec  3 23:44 /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/apps/md4.c -> openssl-1.0.2e/../crypto/md4/md4.c

Option -pr, an error is displayed.)
# cp -pr /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/apps /tmp/pr
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/apps/md4.c: No such file or directory
# ls -lha /tmp/pr/md4.c
ls: /tmp/pr/md4.c: No such file or directory


Option -pR, error is not displayed.)
# cp -pR /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/apps /tmp/pR
# ls -lha /tmp/pR/md4.c
lrwxr-xr-x  1 portage  portage    34B Dec  3 23:44 /tmp/pR/md4.c -> openssl-1.0.2e/../crypto/md4/md4.c


FYI,
https://svnweb.freebsd.org/base/releng/10.2/bin/cp/cp.c?revision=285830&view=markup



>>> Emerging (1 of 1) dev-libs/openssl-1.0.2e::gentoo
 * openssl-1.0.2e.tar.gz SHA256 SHA512 WHIRLPOOL size ;-) ...           [ ok ]
>>> Unpacking source...
>>> Unpacking openssl-1.0.2e.tar.gz to /var/tmp/portage/dev-libs/openssl-1.0.2e/work
>>> Source unpacked in /var/tmp/portage/dev-libs/openssl-1.0.2e/work
>>> Preparing source in /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e ...
 * Applying openssl-1.0.0a-ldflags.patch ...                            [ ok ]
 * Applying openssl-1.0.0d-windres.patch ...                            [ ok ]
 * Applying openssl-1.0.2e-parallel-build.patch ...                     [ ok ]
 * Applying openssl-1.0.2a-parallel-obj-headers.patch ...               [ ok ]
 * Applying openssl-1.0.2a-parallel-install-dirs.patch ...              [ ok ]
 * Applying openssl-1.0.2a-parallel-symlinking.patch ...                [ ok ]
 * Applying openssl-1.0.2-ipv6.patch ...                                [ ok ]
 * Applying openssl-1.0.2a-x32-asm.patch ...                            [ ok ]
 * Applying openssl-1.0.1p-default-source.patch ...                     [ ok ]
Operating system: amd64-whatever-freebsd
Configuring for BSD-x86_64
======================================================================
=== SANITY TESTING!
=== No configuration will be done, all other arguments will be ignored!
======================================================================
No sanity errors detected!
 * Will copy sources from /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e
 * abi_x86_64.amd64_fbsd: copying to /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e-abi_x86_64.amd64_fbsd
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/apps/md4.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/heartbeat_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/ectest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/enginetest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/md4test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/md5test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/ideatest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/wp_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/shatest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/evp_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/sha1test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/rmdtest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/rc5test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/casttest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/randtest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/jpaketest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/constant_time_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/sha512t.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/rc4test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/ecdsatest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/exptest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/bftest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/hmactest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/ecdhtest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/sha256t.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/clienthellotest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/md2test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/verify_extra_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/dhtest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/rsa_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/dsatest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/rc2test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/bntest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/mdc2test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/ssltest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/evp_extra_test.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/v3nametest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/destest.c: No such file or directory
cp: /var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e/test/srptest.c: No such file or directory
 * ERROR: dev-libs/openssl-1.0.2e::gentoo failed (prepare phase):
 *   (no error message)
 *
 * Call stack:
 *     ebuild.sh, line  133:  Called src_prepare
 *   environment, line 2916:  Called multilib_copy_sources
 *   environment, line 2073:  Called multibuild_copy_sources
 *   environment, line 1885:  Called multibuild_foreach_variant '_multibuild_create_source_copy'
 *   environment, line 1917:  Called _multibuild_run '_multibuild_create_source_copy'
 *   environment, line 1915:  Called _multibuild_create_source_copy
 *   environment, line 1883:  Called die
 * The specific snippet of code:
 *           cp -pr "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die
 *
 * If you need support, post the output of `emerge --info '=dev-libs/openssl-1.0.2e::gentoo'`,
 * the complete build log and the output of `emerge -pqv '=dev-libs/openssl-1.0.2e::gentoo'`.
 * The complete build log is located at '/var/tmp/portage/dev-libs/openssl-1.0.2e/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/dev-libs/openssl-1.0.2e/temp/environment'.
 * Working directory: '/var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e'
 * S: '/var/tmp/portage/dev-libs/openssl-1.0.2e/work/openssl-1.0.2e'
Comment 1 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2015-12-19 07:51:51 UTC
Hmm, the man page doesn't even list '-r'. I guess we should change that to 'cp -R -p' indeed, and possibly also enable 'cp -R -P -p' in multibuild_merge_root() as '-r' probably caused the original symlink issue.

I'm going to submit a patch soon, will that be a problem if I asked you to test it?
Comment 2 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2015-12-19 14:14:52 UTC
Ok then. Merged just the 'cp -r' -> 'cp -R' change.

commit 7adffa3687e1abf7ee24b096b8ab2f39a7ee32b9
Author: Michał Górny <mgorny@gentoo.org>
Date:   Sat Dec 19 08:57:56 2015

    multibuild.eclass: _copy_sources(), use 'cp -R' for BSD compat, #568692
    
    Use 'cp -R' for multibuild_copy_sources() as the '-r' option triggers
    triggers undesired '-L' behavior wrt symbolic links.
    
    Fixes: https://bugs.gentoo.org/show_bug.cgi?id=568692