Skip to content

Commit

Permalink
dev-lang/tcc: fix building with clang
Browse files Browse the repository at this point in the history
* fix building tcc with clang
* allow using tcc as system compiler
* update to EAPI 6

Gentoo-Bug: https://bugs.gentoo.org/502452

Package-Manager: portage-2.2.26
  • Loading branch information
austin987 committed Jun 2, 2016
1 parent 0ca8c33 commit 5f3838b
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 0 deletions.
18 changes: 18 additions & 0 deletions dev-lang/tcc/files/clang.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Fixes the default linker options for portage
# Upstream commit ba286136bf8e48c71ffd6c2fd9ce97e64a6eeeb1

diff --git a/libtcc.c b/libtcc.c
index 127806f..dc78643 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -1560,6 +1560,10 @@ static int tcc_set_linker(TCCState *s, const char *option)
} else
goto err;

+ } else if (link_option(option, "as-needed", &p)) {
+ ignoring = 1;
+ } else if (link_option(option, "O", &p)) {
+ ignoring = 1;
} else if (link_option(option, "rpath=", &p)) {
s->rpath = copy_linker_arg(p);
} else if (link_option(option, "section-alignment=", &p)) {
18 changes: 18 additions & 0 deletions dev-lang/tcc/files/linker.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Fix compiling tcc with clang. Upstream commit 73ac39c317a20accaf3b25ba833deee0c2e2849f
# Gentoo bug #502452
diff --git a/lib/libtcc1.c b/lib/libtcc1.c
index cf9babf..b46fb5d 100644
--- a/lib/libtcc1.c
+++ b/lib/libtcc1.c
@@ -647,6 +647,11 @@ struct __va_list_struct {
char *reg_save_area;
};

+#undef __va_start
+#undef __va_arg
+#undef __va_copy
+#undef __va_end
+
void *__va_start(void *fp)
{
struct __va_list_struct *ap =
72 changes: 72 additions & 0 deletions dev-lang/tcc/tcc-0.9.26-r3.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI="6"

inherit toolchain-funcs

DESCRIPTION="A very small C compiler for ix86/amd64"
HOMEPAGE="http://bellard.org/tcc/"
SRC_URI="http://download.savannah.gnu.org/releases/tinycc/${P}.tar.bz2"

LICENSE="LGPL-2.1"
SLOT="0"
KEYWORDS="~amd64 ~x86 ~amd64-linux"

DEPEND="dev-lang/perl" # doc generation
# Both tendra and tinycc install /usr/bin/tcc
RDEPEND="!dev-lang/tendra"
IUSE="test"

src_prepare() {
# Don't strip
sed -i -e 's|$(INSTALL) -s|$(INSTALL)|' Makefile || die

# Fix examples
sed -i -e '1{
i#! /usr/bin/tcc -run
/^#!/d
}' examples/ex*.c || die
sed -i -e '1s/$/ -lX11/' examples/ex4.c || die

# Fix texi2html invocation
sed -i -e 's/-number//' Makefile || die
sed -i -e 's/--sections//' Makefile || die

# Fix compiling tcc with clang
eapply "${FILESDIR}"/clang.patch

# Allows using tcc as the system compiler for Gentoo
eapply "${FILESDIR}"/linker.patch

eapply_user
}

src_configure() {
use test && unset CFLAGS LDFLAGS # Tests run with CC=tcc etc, they will fail hard otherwise
# better fixes welcome, it feels wrong to hack the env like this
# not autotools, so call configure directly
./configure --cc="$(tc-getCC)" \
--prefix="${EPREFIX}/usr" \
--libdir="${EPREFIX}/usr/$(get_libdir)" \
--docdir="${EPREFIX}/usr/share/doc/${PF}"
}

src_compile() {
emake AR="$(tc-getAR)"
}

src_install() {
emake DESTDIR="${D}" install

dodoc Changelog README TODO VERSION
#dohtml tcc-doc.html
exeinto /usr/share/doc/${PF}/examples
doexe examples/ex*.c
}

src_test() {
# this is using tcc bits that don't know as-needed etc.
TCCFLAGS="" emake test
}

0 comments on commit 5f3838b

Please sign in to comment.