Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 705412 - sci-electronics/iverilog fails to install various files (files may be missing) during overwrite installation
Summary: sci-electronics/iverilog fails to install various files (files may be missing...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: vowstar
URL:
Whiteboard:
Keywords: PullRequest
Depends on:
Blocks:
 
Reported: 2020-01-14 13:32 UTC by Felix Neumärker
Modified: 2020-01-30 06:33 UTC (History)
3 users (show)

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 Felix Neumärker 2020-01-14 13:32:51 UTC
Makefile.in misses a ${DESTDIR} prefix for several installation rules as dependency or (better) these rules need to be .PHONY.

version bump of package may miss files on bump or reinstallation.

e.g. vpi_user.h

-rw-r--r-- 1 portage portage 22K 15. Aug 17:31 ${PORTAGE_TMPDIR}/sci-electronics/iverilog-10.3/work/iverilog-10_3/vpi_user.h

Makefile.in:354:
$(includedir)/vpi_user.h: $(srcdir)/vpi_user.h
    $(INSTALL_DATA) $(srcdir)/vpi_user.h "$(DESTDIR)$(includedir)/vpi_user.h"
Comment 1 vowstar 2020-01-17 08:41:45 UTC
(In reply to Felix Neumärker from comment #0)
> Makefile.in misses a ${DESTDIR} prefix for several installation rules as
> dependency or (better) these rules need to be .PHONY.
> 
> version bump of package may miss files on bump or reinstallation.
> 
> e.g. vpi_user.h
> 
> -rw-r--r-- 1 portage portage 22K 15. Aug 17:31
> ${PORTAGE_TMPDIR}/sci-electronics/iverilog-10.3/work/iverilog-10_3/vpi_user.h
> 
> Makefile.in:354:
> $(includedir)/vpi_user.h: $(srcdir)/vpi_user.h
>     $(INSTALL_DATA) $(srcdir)/vpi_user.h "$(DESTDIR)$(includedir)/vpi_user.h"


Can you provide more detailed information about this bug?

I've test this package on a clean environment again, the result is:

>>    >>> Completed installing sci-electronics/iverilog-10.3 into /var/tmp/portage/sci-electronics/iverilog-10.3/image

>>    * Final size of build directory: 40992 KiB (40.0 MiB)
>>    * Final size of installed tree:   7668 KiB ( 7.4 MiB)

>>    strip: x86_64-pc-linux-gnu-strip --strip-unneeded -N __gentoo_check_ldflags__ -R .comment -R .GCC.command.line -R .note.gnu.gold-version
>>    /usr/lib64/libvpi.a
>>    /usr/lib64/ivl/v2005_math.vpi
>>    /usr/lib64/ivl/system.vpi
>>    /usr/lib64/ivl/vhdlpp
>>    /usr/lib64/ivl/vhdl_sys.vpi
>>    /usr/lib64/ivl/ivlpp
>>    /usr/lib64/ivl/va_math.vpi
>>    /usr/lib64/ivl/ivl
>>    /usr/lib64/ivl/vpi_debug.vpi
>>    /usr/lib64/libveriuser.a
>>    /usr/lib64/ivl/null.tgt
>>    /usr/bin/vvp
>>    /usr/lib64/ivl/stub.tgt
>>    /usr/lib64/ivl/vvp.tgt
>>    /usr/lib64/ivl/cadpli.vpl
>>    /usr/lib64/ivl/vhdl.tgt
>>    /usr/lib64/ivl/v2009.vpi
>>    /usr/lib64/ivl/vlog95.tgt
>>    /usr/lib64/ivl/pcb.tgt
>>    /usr/lib64/ivl/blif.tgt
>>    /usr/lib64/ivl/sizer.tgt
>>    /usr/bin/iverilog

>>    >>> Installing (1 of 1) sci-electronics/iverilog-10.3::gentoo
>>    Unable to unshare: EPERM
>>    Unable to unshare: EPERM

>>    >>> Recording sci-electronics/iverilog in "world" favorites file...

>>    * Messages for package sci-electronics/iverilog-10.3:

>>    * This package has a configure.in file which has long been deprecated.  Please
>>    * update it to use configure.ac instead as newer versions of autotools will die
>>    * when it finds this file.  See https://bugs.gentoo.org/426262 for details.
>>    >>> Auto-cleaning packages...

>>    >>> No outdated packages were found on your system.

>>    * GNU info directory index is up-to-date.

And it was success installed.

e.g. vpi_user.h, I've checked this file, it was installed to:

/usr/include/iverilog/vpi_user.h

other similar header files are at:

/usr/include/iverilog/_pli_types.h
/usr/include/iverilog/sv_vpi_user.h
/usr/include/iverilog/acc_user.h
/usr/include/iverilog/ivl_target.h
/usr/include/iverilog/veriuser.h

It doesn't miss the file you mentioned both new installation and re-installation.

Do you have environment information, install log and steps to reproduce?
Comment 2 vowstar 2020-01-17 08:52:23 UTC
(In reply to Felix Neumärker from comment #0)
> Makefile.in misses a ${DESTDIR} prefix for several installation rules as
> dependency or (better) these rules need to be .PHONY.
> 
> version bump of package may miss files on bump or reinstallation.
> 
> e.g. vpi_user.h
> 
> -rw-r--r-- 1 portage portage 22K 15. Aug 17:31
> ${PORTAGE_TMPDIR}/sci-electronics/iverilog-10.3/work/iverilog-10_3/vpi_user.h
> 
> Makefile.in:354:
> $(includedir)/vpi_user.h: $(srcdir)/vpi_user.h
>     $(INSTALL_DATA) $(srcdir)/vpi_user.h "$(DESTDIR)$(includedir)/vpi_user.h"

The ${DESTDIR} variables are already defined during installation,

e.g/., in iverilog-10.3.ebuild, it runs below command to install:

	emake installdirs DESTDIR="${D}"
	default

The DESTDIR already pre-defined by DESTDIR="${D}" in both ``emake installdirs`` and ``default`` command.

For EAPIs 4 and later, the default src_install function is the following [1]:

```
src_install() {
	if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]] ; then
		emake DESTDIR="${D}" install
	fi

	if ! declare -p DOCS >/dev/null 2>&1 ; then
		local d
		for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS \
				FAQ CREDITS CHANGELOG ; do
			[[ -s "${d}" ]] && dodoc "${d}"
		done
	elif declare -p DOCS | grep -q "^declare -a " ; then
		dodoc "${DOCS[@]}"
	else
		dodoc ${DOCS}
	fi
}
```

- [1] https://devmanual.gentoo.org/ebuild-writing/functions/src_install/index.html
Comment 3 Felix Neumärker 2020-01-17 13:19:23 UTC
This is a makefile related bug - not in the ebuild, but it should be somehow fixed by the ebuild (patch) and brought upstream.

Clarification:
Unpackaging the tarball will have the following date-time stamp:

-rw-r--r-- 1 portage portage 22K 15. Aug 17:31 ${PORTAGE_TMPDIR}/sci-electronics/iverilog-10.3/work/iverilog-10_3/vpi_user.h


Rule in Makefile
Makefile.in:354:
$(includedir)/vpi_user.h: $(srcdir)/vpi_user.h
    $(INSTALL_DATA) $(srcdir)/vpi_user.h "$(DESTDIR)$(includedir)/vpi_user.h"

--> So if the header-file in your system exists ($(includedir)/vpi_user.h)
is newer then 15. Aug 17:31, then it will not be install to "$(DESTDIR)".

So every 2nd install works fine for  me.
----
Step to reproduce:

$ emerge -avO1 iverilog
$ equery f iverilog |grep vpi_user
$ emerge -avO1 iverilog
$ equery f iverilog |grep vpi_user
Comment 4 vowstar 2020-01-17 16:22:35 UTC
(In reply to Felix Neumärker from comment #3)
> This is a makefile related bug - not in the ebuild, but it should be somehow
> fixed by the ebuild (patch) and brought upstream.
> 
> Clarification:
> Unpackaging the tarball will have the following date-time stamp:
> 
> -rw-r--r-- 1 portage portage 22K 15. Aug 17:31
> ${PORTAGE_TMPDIR}/sci-electronics/iverilog-10.3/work/iverilog-10_3/vpi_user.h
> 
> 
> Rule in Makefile
> Makefile.in:354:
> $(includedir)/vpi_user.h: $(srcdir)/vpi_user.h
>     $(INSTALL_DATA) $(srcdir)/vpi_user.h "$(DESTDIR)$(includedir)/vpi_user.h"
> 
> --> So if the header-file in your system exists ($(includedir)/vpi_user.h)
> is newer then 15. Aug 17:31, then it will not be install to "$(DESTDIR)".
> 
> So every 2nd install works fine for  me.
> ----
> Step to reproduce:
> 
> $ emerge -avO1 iverilog
> $ equery f iverilog |grep vpi_user
> $ emerge -avO1 iverilog
> $ equery f iverilog |grep vpi_user

Thank you! I understand this bug and have reproduced it.
Comment 5 vowstar 2020-01-18 09:39:11 UTC
(In reply to Felix Neumärker from comment #3)
> This is a makefile related bug - not in the ebuild, but it should be somehow
> fixed by the ebuild (patch) and brought upstream.
> 
> Clarification:
> Unpackaging the tarball will have the following date-time stamp:
> 
> -rw-r--r-- 1 portage portage 22K 15. Aug 17:31
> ${PORTAGE_TMPDIR}/sci-electronics/iverilog-10.3/work/iverilog-10_3/vpi_user.h
> 
> 
> Rule in Makefile
> Makefile.in:354:
> $(includedir)/vpi_user.h: $(srcdir)/vpi_user.h
>     $(INSTALL_DATA) $(srcdir)/vpi_user.h "$(DESTDIR)$(includedir)/vpi_user.h"
> 
> --> So if the header-file in your system exists ($(includedir)/vpi_user.h)
> is newer then 15. Aug 17:31, then it will not be install to "$(DESTDIR)".
> 
> So every 2nd install works fine for  me.
> ----
> Step to reproduce:
> 
> $ emerge -avO1 iverilog
> $ equery f iverilog |grep vpi_user
> $ emerge -avO1 iverilog
> $ equery f iverilog |grep vpi_user

Pull request have been sent to upstream

https://github.com/steveicarus/iverilog/pull/300

Workaround have been sent to gentoo github

https://github.com/gentoo/gentoo/pull/14375
https://github.com/gentoo/gentoo/pull/14376
Comment 6 Larry the Git Cow gentoo-dev 2020-01-30 06:33:21 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=560664303060100467ca053a94decb296da113d8

commit 560664303060100467ca053a94decb296da113d8
Author:     Huang Rui <vowstar@gmail.com>
AuthorDate: 2020-01-29 16:23:37 +0000
Commit:     Joonas Niilola <juippis@gentoo.org>
CommitDate: 2020-01-30 06:33:05 +0000

    sci-electronics/iverilog: fix install bug of 10.3
    
    The upstream's Makefile used a very unusual
    installation method. It may cause overwrite
    installation bug.
    
    Closes: https://bugs.gentoo.org/705412
    Package-Manager: Portage-2.3.85, Repoman-2.3.20
    Signed-off-by: Huang Rui <vowstar@gmail.com>
    Signed-off-by: Joonas Niilola <juippis@gentoo.org>

 .../files/iverilog-10.3-file-missing.patch         | 191 +++++++++++++++++++++
 sci-electronics/iverilog/iverilog-10.3.ebuild      |   4 +
 2 files changed, 195 insertions(+)