aboutsummaryrefslogtreecommitdiff
blob: 0d44ec5f2ec1c6c3e82700eecad40e22cdffb670 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=5

NUMERIC_MODULE_NAME="refcblas"

inherit alternatives-2 flag-o-matic fortran-2 multilib numeric numeric-int64-multibuild toolchain-funcs versionator

MYPN="${PN/-reference/}"

DESCRIPTION="C wrapper interface to the F77 reference BLAS implementation"
HOMEPAGE="http://www.netlib.org/blas/"
SRC_URI="http://www.netlib.org/blas/blast-forum/${MYPN}.tgz -> ${P}.tgz"

SLOT="0"
LICENSE="public-domain"
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
IUSE="static-libs"

RDEPEND="virtual/blas"
DEPEND="${RDEPEND}
	virtual/pkgconfig"

S="${WORKDIR}/CBLAS"

MULTILIB_WRAPPED_HEADERS=(
	/usr/include/cblas/cblas.h
)

static_to_shared() {
	local libstatic=$1
	shift || die
	local libname=$(basename ${libstatic%.a})
	local soname=${libname}$(get_libname $(get_version_component_range 1-2))
	local libdir=$(dirname ${libstatic})

	einfo "Making ${soname} from ${libstatic}"
	if [[ ${CHOST} == *-darwin* ]] ; then
		${LINK:-$(tc-getCC)} ${LDFLAGS}  \
			-dynamiclib -install_name "${EPREFIX}"/usr/$(get_libdir)/${soname} \
			-Wl,-all_load -Wl,${libstatic} \
			"$@" -o ${libdir}/${soname} || die "${soname} failed"
	else
		${LINK:-$(tc-getCC)} ${LDFLAGS}  \
			-shared -Wl,-soname=${soname} \
			-Wl,--whole-archive ${libstatic} -Wl,--no-whole-archive \
			"$@" -o ${libdir}/${soname} || die "${soname} failed"
		if [[ $(get_version_component_count) -gt 1 ]]; then
			ln -s ${soname} ${libdir}/${libname}$(get_libname $(get_major_version)) || die
		fi
	fi
	ln -s ${soname} ${libdir}/${libname}$(get_libname) || die
}

src_prepare() {
	numeric-int64_ensure_blas_int_support
	find . -name Makefile -exec sed -i \
		-e 's:make:$(MAKE):g' '{}' \; || die
	numeric-int64-multibuild_copy_sources
}

src_configure() {
	cblas_configure() {
		local profname=$(numeric-int64_get_module_name)
		local libname="${profname//-/_}"
		append-cflags -DADD_
		cat > Makefile.in <<-EOF
			BLLIB=$($(tc-getPKG_CONFIG) --libs $(numeric-int64_get_blas_alternative))
			FC=$(tc-getFC) $(get_abi_CFLAGS) $(numeric-int64_get_fortran_int64_abi_fflags)
			CC=$(tc-getCC)
			CBLIB=../lib/lib${libname}.a
			LOADER=\$(FC)
			ARCH=$(tc-getAR)
			ARCHFLAGS=cr
			RANLIB=$(tc-getRANLIB)
		EOF
	}
	numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir cblas_configure
}

src_compile() {
	cblas_src_compile() {
		local profname=$(numeric-int64_get_module_name)
		local libname="${profname//-/_}"
		emake \
			FFLAGS="${FFLAGS} -fPIC" \
			CFLAGS="${CFLAGS} -fPIC" \
			alllib
		static_to_shared lib/lib${libname}.a $($(tc-getPKG_CONFIG) --libs $(numeric-int64_get_blas_alternative))
		if use static-libs; then
			emake clean
			emake alllib
		fi
	}
	numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir cblas_src_compile
}

src_test() {
	cblas_src_test () {
		local profname=$(numeric-int64_get_module_name)
		local libname="${profname//-/_}"
		cd testing || die
		emake && emake run
	}
	numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir cblas_src_test
}

src_install() {
	cblas_src_install() {
		local profname=$(numeric-int64_get_module_name)
		local libname="${profname//-/_}"
		# On linux dynamic libraries are of the form .so.${someversion}
		# On  OS X dynamic libraries are of the form ${someversion}.dylib
		if numeric-int64_is_static_build; then
			dolib.a lib/lib${libname}.a
		else
			dolib.so lib/lib${libname}*$(get_libname)*
			insinto /usr/include/cblas
			doins include/cblas.h
			create_pkgconfig \
				--name "${profname}" \
				--libs "-L\${libdir} -l${libname}" \
				--libs-private "-lm" \
				--cflags "-I\${includedir}/cblas $(numeric-int64_get_fortran_int64_abi_fflags)" \
				--requires $(numeric-int64_get_blas_alternative) \
				${profname}
		fi

		if [[ ${#MULTIBUILD_VARIANTS[@]} -gt 1 ]]; then
			multilib_prepare_wrappers
			multilib_check_headers
		fi
	}
	numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir cblas_src_install

	numeric-int64-multibuild_install_alternative cblas reference /usr/include/cblas.h cblas/cblas.h

	multilib_install_wrappers

	dodoc README
	docinto examples
	dodoc examples/*.c
}