aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason W. Bacon <jwb@FreeBSD.org>2023-07-21 23:06:36 +0000
committerJason W. Bacon <jwb@FreeBSD.org>2023-07-21 23:06:36 +0000
commit64a6421c248a048b13caab73de93ad10dd56e9cb (patch)
treef535c5c430e991e6ad22c9ccece6286ad4c6f8c6
parent29bea60c598052bbf71415e494a179adbe143a8e (diff)
downloadports-64a6421c248a048b13caab73de93ad10dd56e9cb.tar.gz
ports-64a6421c248a048b13caab73de93ad10dd56e9cb.zip
biology/salmon: Transcript-level quantification of RNA-seq
Salmon is a wicked-fast program to produce a highly-accurate, transcript-level quantification estimates from RNA-seq data. Salmon achieves is accuracy and speed via a number of different innovations, including the use of quasi-mapping (accurate but fast-to-compute proxies for traditional read alignments), and massively-parallel stochastic collapsed variational inference. The result is a versatile tool that fits nicely into many differnt pipelines.
-rw-r--r--biology/Makefile1
-rw-r--r--biology/salmon/Makefile48
-rw-r--r--biology/salmon/distinfo9
-rw-r--r--biology/salmon/files/patch-CMakeLists.txt123
-rw-r--r--biology/salmon/files/patch-external_pufferfish_CMakeLists.txt23
-rw-r--r--biology/salmon/files/patch-external_pufferfish_external_twopaco_graphconstructor_assemblyedgeconstructor.h22
-rw-r--r--biology/salmon/files/patch-external_pufferfish_include_ghc_filesystem.hpp11
-rw-r--r--biology/salmon/files/patch-external_pufferfish_include_zstr_strict__fstream.hpp11
-rw-r--r--biology/salmon/files/patch-include_strict__fstream.hpp11
-rw-r--r--biology/salmon/files/patch-scripts_fetchPufferfish.sh57
-rw-r--r--biology/salmon/files/patch-src_CMakeLists.txt18
-rw-r--r--biology/salmon/pkg-descr7
12 files changed, 341 insertions, 0 deletions
diff --git a/biology/Makefile b/biology/Makefile
index 4f885c16edba..ecb49b10cc6c 100644
--- a/biology/Makefile
+++ b/biology/Makefile
@@ -204,6 +204,7 @@
SUBDIR += rubygem-bio-executables
SUBDIR += rubygem-bio-old-biofetch-emulator
SUBDIR += rubygem-bio-shell
+ SUBDIR += salmon
SUBDIR += sam2pairwise
SUBDIR += samtools
SUBDIR += scrm
diff --git a/biology/salmon/Makefile b/biology/salmon/Makefile
new file mode 100644
index 000000000000..73ad3402f38a
--- /dev/null
+++ b/biology/salmon/Makefile
@@ -0,0 +1,48 @@
+PORTNAME= salmon
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.10.2
+CATEGORIES= biology
+
+MAINTAINER= jwb@FreeBSD.org
+COMMENT= Transcript-level quantification of RNA-seq from lightweight alignments
+WWW= https://github.com/COMBINE-lab/salmon
+
+LICENSE= GPLv3
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+# libtool and auto* are run manually in submodules, so don't put them in USES
+BUILD_DEPENDS= bash:shells/bash \
+ cereal>=1.3.0:devel/cereal \
+ libgff==2.0.0:biology/libgff \
+ libtool:devel/libtool \
+ autoreconf:devel/autoconf \
+ aclocal:devel/automake
+LIB_DEPENDS= libboost_system.so:devel/boost-libs \
+ libtbb.so:devel/onetbb \
+ libcurl.so:ftp/curl
+
+USES= cmake:noninja gmake localbase shebangfix
+USE_GITHUB= yes
+
+GH_ACCOUNT= COMBINE-lab
+GH_TUPLE+= COMBINE-lab:pufferfish:salmon-v1.10.2:pf/external/pufferfish
+GH_TUPLE+= jkbonfield:io_lib:io_lib-1-14-15:sio/external/staden-io_lib
+GH_TUPLE+= samtools:htscodecs:5aecc6e:htscodec/external/staden-io_lib/htscodecs
+SHEBANG_FILES= scripts/*
+
+PLIST_FILES= bin/salmon
+CMAKE_ARGS+= -DHAVE_FAST_MALLOC:BOOL=on \
+ -DBOOST_ROOT:PATH=${LOCALBASE} \
+ -DFETCHED_PUFFERFISH:BOOL=on \
+ -DFETCHED_LIBGFF:BOOL=on \
+ -DFETCH_STADEN:BOOL=true
+WITH_DEBUG= yes
+LDFLAGS+= -lpthread
+
+pre-configure:
+ (cd ${WRKSRC}/external/staden-io_lib && ./bootstrap)
+
+do-install:
+ ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/src/salmon ${STAGEDIR}${PREFIX}/bin
+
+.include <bsd.port.mk>
diff --git a/biology/salmon/distinfo b/biology/salmon/distinfo
new file mode 100644
index 000000000000..42eb0d9ee404
--- /dev/null
+++ b/biology/salmon/distinfo
@@ -0,0 +1,9 @@
+TIMESTAMP = 1689958260
+SHA256 (COMBINE-lab-salmon-v1.10.2_GH0.tar.gz) = 976989182160fef3afb4429ee8b85d8dd39ed6ca212bb14d6a65cde0e985fb98
+SIZE (COMBINE-lab-salmon-v1.10.2_GH0.tar.gz) = 7193261
+SHA256 (COMBINE-lab-pufferfish-salmon-v1.10.2_GH0.tar.gz) = b90ce8079c375136d12e37bc23e451ae34a49d49c54f6cdd2050ba8add758ab4
+SIZE (COMBINE-lab-pufferfish-salmon-v1.10.2_GH0.tar.gz) = 3368053
+SHA256 (jkbonfield-io_lib-io_lib-1-14-15_GH0.tar.gz) = 4444c78846e49a493ff09d56d55ebe61140bb0a76ec5fa1c27eff13ec9dabd8b
+SIZE (jkbonfield-io_lib-io_lib-1-14-15_GH0.tar.gz) = 3382074
+SHA256 (samtools-htscodecs-5aecc6e_GH0.tar.gz) = 3abb6a8516761bf0db5149c3d6c077e2d540470180245c2afb1f4400158b1f54
+SIZE (samtools-htscodecs-5aecc6e_GH0.tar.gz) = 3191442
diff --git a/biology/salmon/files/patch-CMakeLists.txt b/biology/salmon/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..5a6bd2de2f02
--- /dev/null
+++ b/biology/salmon/files/patch-CMakeLists.txt
@@ -0,0 +1,123 @@
+--- CMakeLists.txt.orig 2023-07-21 14:03:31 UTC
++++ CMakeLists.txt
+@@ -310,14 +310,16 @@ endif()
+ # Grab pufferfish source --- DURING CONFIGURE TIME!
+ #
+ ####
+-if(NOT FETCHED_PUFFERFISH)
++
++# Fetched by GH_TUPLE in FreeBSD port
++# if(NOT FETCHED_PUFFERFISH)
+ exec_program(${CMAKE_CURRENT_SOURCE_DIR}/scripts/fetchPufferfish.sh RETURN_VALUE FETCH_PF_SCRIPT_RET)
+ message(STATUS "fetch PUFFERFISH exit code ${FETCH_PF_SCRIPT_RET}")
+ if(NOT (FETCH_PF_SCRIPT_RET EQUAL 0))
+ message(FATAL_ERROR "Could not fetch pufferfish source [fetchPufferfish.sh returned exit code ${FETCH_PF_SCRIPT_RET}].")
+ endif()
+ set(FETCHED_PUFFERFISH TRUE CACHE BOOL "Has pufferfish been fetched?" FORCE)
+-endif()
++# endif()
+
+ ##
+ # Super-secret override
+@@ -364,7 +366,10 @@ if(NOT Iconv_IS_BUILT_IN)
+ set(ICONV_LIB Iconv::Iconv)
+ endif()
+
+-find_package(LibLZMA)
++# lzma is in FreeBSD base
++# find_package(LibLZMA)
++set(LIBLZMA_FOUND TRUE)
++set(LIBLZMA_LIBRARIES /usr/lib/liblzma.a /usr/lib/libmd.a)
+ if(NOT LIBLZMA_FOUND)
+ message("Will attempt to fetch and build liblzma")
+ message("=======================================")
+@@ -381,8 +386,8 @@ externalproject_add(liblzma
+ INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/install
+ BUILD_IN_SOURCE TRUE
+ CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/external/xz-5.2.2/configure --prefix=<INSTALL_DIR> CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS=${EXTRA_CMAKE_INCLUDE_FLAGS} CPPFLAGS=${EXTRA_CMAKE_INCLUDE_FLAGS} LDFLAGS=${EXTRA_CMAKE_LIBRARY_FLAGS}
+- BUILD_COMMAND make ${QUIET_MAKE}
+- INSTALL_COMMAND make ${QUIET_MAKE} install
++ BUILD_COMMAND gmake ${QUIET_MAKE}
++ INSTALL_COMMAND gmake ${QUIET_MAKE} install
+ )
+
+ # Tell cmake that the external project generated a library so we can
+@@ -411,8 +416,8 @@ externalproject_add(libbz2
+ INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/install
+ BUILD_IN_SOURCE TRUE
+ CONFIGURE_COMMAND ""
+- BUILD_COMMAND make ${QUIET_MAKE} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}
+- INSTALL_COMMAND make ${QUIET_MAKE} install PREFIX=<INSTALL_DIR>
++ BUILD_COMMAND gmake ${QUIET_MAKE} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}
++ INSTALL_COMMAND gmake ${QUIET_MAKE} install PREFIX=<INSTALL_DIR>
+ )
+ # Tell cmake that the external project generated a library so we can
+ # add dependencies here instead of later
+@@ -609,9 +614,11 @@ if (NOT CEREAL_FOUND)
+ endif()
+
+ ## Try and find TBB first
+-find_package(TBB 2021.4
+- HINTS ${TBB_ROOT_SEARCH}
+- COMPONENTS tbb tbbmalloc tbbmalloc_proxy)
++# find_package(TBB 2021.4
++# HINTS ${TBB_ROOT_SEARCH}
++# COMPONENTS tbb tbbmalloc tbbmalloc_proxy)
++# tbbmalloc_proxy is rolled into tbbmalloc in FreeBSD ports
++find_package(TBB 2021.4 COMPONENTS tbb tbbmalloc)
+
+ if (${TBB_FOUND})
+ if (${TBB_VERSION} VERSION_GREATER_EQUAL 2021.4)
+@@ -791,22 +798,16 @@ endif()
+ if (NOT LIBSTADENIO_FOUND)
+ message("Build system will compile Staden IOLib")
+ message("==================================================================")
++ # stadenio is downloaded by GH_TUPLE in FreeBSD port
+ externalproject_add(libstadenio
+- DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external
+- DOWNLOAD_COMMAND curl -k -L https://github.com/jkbonfield/io_lib/releases/download/io_lib-1-14-15/io_lib-1.14.15.tar.gz -o staden-io_lib-v1.14.15.tar.gz &&
+- ${SHASUM} 20814c4365e1e2fe6630fb11d0df370dec4c5688af3871de7f1cb0129671401e staden-io_lib-v1.14.15.tar.gz &&
+- mkdir -p staden-io_lib-1.14.15 &&
+- tar -xzf staden-io_lib-v1.14.15.tar.gz --strip-components=1 -C staden-io_lib-1.14.15 &&
+- rm -fr staden-io_lib &&
+- mv -f staden-io_lib-1.14.15 staden-io_lib
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/staden-io_lib
+ INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/install
+ CONFIGURE_COMMAND ./configure --enable-shared=no --without-libcurl --prefix=<INSTALL_DIR> LDFLAGS=${LIBSTADEN_LDFLAGS} CFLAGS=${LIBSTADEN_CFLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}
+- BUILD_COMMAND make ${QUIET_MAKE} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS+=${STADEN_INC} CFLAGS+=${STADEN_LIB} LDFLAGS+=${EXTRA_CMAKE_LIBRARY_FLAGS} CFLAGS+=${EXTRA_CMAKE_INCLUDE_FLAGS} CFLAGS+=${LZFLAG} CFLAGS+=${SCHAR_FLAG}
++ BUILD_COMMAND gmake ${QUIET_MAKE} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS+=${STADEN_INC} CFLAGS+=${STADEN_LIB} LDFLAGS+=${EXTRA_CMAKE_LIBRARY_FLAGS} CFLAGS+=${EXTRA_CMAKE_INCLUDE_FLAGS} CFLAGS+=${LZFLAG} CFLAGS+=${SCHAR_FLAG}
+
+
+ BUILD_IN_SOURCE 1
+- INSTALL_COMMAND make install
++ INSTALL_COMMAND gmake install
+ )
+ if(NOT LIBLZMA_FOUND)
+ ExternalProject_Add_StepDependencies(libstadenio build liblzma)
+@@ -820,23 +821,9 @@ if (ASAN_BUILD)
+ set(FAST_MALLOC_LIB "")
+ set(HAVE_FAST_MALLOC TRUE)
+ else()
+- set(FAST_MALLOC_LIB "")
+- set(HAVE_FAST_MALLOC FALSE)
+-
+- # See if we have Jemalloc
+- find_package(Jemalloc)
+- if(Jemalloc_FOUND)
+- ##
+- # Don't be so stringent about the version yet
+- ##
+- #if (NOT (${JEMALLOC_VERSION} VERSION_LESS 5.2.1))
+- message("Found Jemalloc library --- using this memory allocator")
+- set(FAST_MALLOC_LIB ${JEMALLOC_LIBRARIES})
+- set(HAVE_FAST_MALLOC TRUE)
+- #else()
+- # message("Fond Jemalloc version ${JEMALLOC_VERSION}, but require >= 5.2.1. Downloading newer version")
+- #endif()
+- endif()
++ # jemalloc is default on FreeBSD
++ set(FAST_MALLOC_LIB "/usr/lib/libc.so")
++ set(HAVE_FAST_MALLOC TRUE)
+ endif()
+
+ if(CONDA_BUILD)
diff --git a/biology/salmon/files/patch-external_pufferfish_CMakeLists.txt b/biology/salmon/files/patch-external_pufferfish_CMakeLists.txt
new file mode 100644
index 000000000000..d6c7695325fc
--- /dev/null
+++ b/biology/salmon/files/patch-external_pufferfish_CMakeLists.txt
@@ -0,0 +1,23 @@
+--- external/pufferfish/CMakeLists.txt.orig 2023-06-26 19:34:50 UTC
++++ external/pufferfish/CMakeLists.txt
+@@ -135,7 +135,7 @@ set(WARN_ALL_THINGS "-fdiagnostics-color=always;-Wall;
+
+
+ set(OPT_FLAGS "-DHAVE_SIMDE;-D__STDC_FORMAT_MACROS;-DSTX_NO_STD_STRING_VIEW;-O3;-fPIC;-DNDEBUG;-funroll-loops;-ftree-vectorize;-fno-strict-aliasing")
+-set(DEBUG_FLAGS "-DHAVE_SIMDE;-D__STDC_FORMAT_MACROS;-DSTX_NO_STD_STRING_VIEW;-pg;-g;-gstabs")
++set(DEBUG_FLAGS "-DHAVE_SIMDE;-D__STDC_FORMAT_MACROS;-DSTX_NO_STD_STRING_VIEW;-g")
+
+ ##
+ # OSX is strange (some might say, stupid in this regard). Deal with it's quirkines here.
+@@ -188,11 +188,6 @@ endif()
+ ##
+ set(SHASUM ${CMAKE_CURRENT_SOURCE_DIR}/scripts/check_shasum.sh)
+
+-
+-find_package(Jemalloc)
+-if(JEMALLOC_FOUND)
+- include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
+-endif()
+
+ if(DO_QUIET_MAKE)
+ set(QUIET_MAKE "--silent")
diff --git a/biology/salmon/files/patch-external_pufferfish_external_twopaco_graphconstructor_assemblyedgeconstructor.h b/biology/salmon/files/patch-external_pufferfish_external_twopaco_graphconstructor_assemblyedgeconstructor.h
new file mode 100644
index 000000000000..bc022a2e0574
--- /dev/null
+++ b/biology/salmon/files/patch-external_pufferfish_external_twopaco_graphconstructor_assemblyedgeconstructor.h
@@ -0,0 +1,22 @@
+--- external/pufferfish/external/twopaco/graphconstructor/assemblyedgeconstructor.h.orig 2021-12-05 16:28:24 UTC
++++ external/pufferfish/external/twopaco/graphconstructor/assemblyedgeconstructor.h
+@@ -30,10 +30,10 @@ namespace TwoPaCo
+ {
+ std::string vertex = chr.substr(i, vertexLength);
+ //Check if the Bloom filter contains an edge
+- assert(IsOutgoingEdgeInBloomFilter(hash, *bloomFilter, chr[i + edgeLength - 1]));
++ // assert(IsOutgoingEdgeInBloomFilter(hash, *bloomFilter, chr[i + edgeLength - 1]));
+ if (i > 0)
+ {
+- assert(IsIngoingEdgeInBloomFilter(hash, *bloomFilter, chr[i - 1]));
++ // assert(IsIngoingEdgeInBloomFilter(hash, *bloomFilter, chr[i - 1]));
+ }
+
+ //Check the if the vertex is a junction
+@@ -58,4 +58,4 @@ namespace TwoPaCo
+
+ }
+
+-#endif
+\ No newline at end of file
++#endif
diff --git a/biology/salmon/files/patch-external_pufferfish_include_ghc_filesystem.hpp b/biology/salmon/files/patch-external_pufferfish_include_ghc_filesystem.hpp
new file mode 100644
index 000000000000..9a68eb2fc64c
--- /dev/null
+++ b/biology/salmon/files/patch-external_pufferfish_include_ghc_filesystem.hpp
@@ -0,0 +1,11 @@
+--- external/pufferfish/include/ghc/filesystem.hpp.orig 2021-11-22 21:10:29 UTC
++++ external/pufferfish/include/ghc/filesystem.hpp
+@@ -50,6 +50,8 @@
+
+ #if defined(__APPLE__) && defined(__MACH__)
+ #define GHC_OS_MACOS
++#elif defined(__FreeBSD__)
++#define GHC_OS_FREEBSD
+ #elif defined(__linux__)
+ #define GHC_OS_LINUX
+ #elif defined(_WIN64)
diff --git a/biology/salmon/files/patch-external_pufferfish_include_zstr_strict__fstream.hpp b/biology/salmon/files/patch-external_pufferfish_include_zstr_strict__fstream.hpp
new file mode 100644
index 000000000000..040d7ad39327
--- /dev/null
+++ b/biology/salmon/files/patch-external_pufferfish_include_zstr_strict__fstream.hpp
@@ -0,0 +1,11 @@
+--- external/pufferfish/include/zstr/strict_fstream.hpp.orig 2021-11-22 21:10:29 UTC
++++ external/pufferfish/include/zstr/strict_fstream.hpp
+@@ -27,7 +27,7 @@ static std::string strerror()
+ {
+ buff = "Unknown error";
+ }
+-#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE || defined(__APPLE__)
++#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE || defined(__APPLE__) || defined(__FreeBSD__)
+ // XSI-compliant strerror_r()
+ if (strerror_r(errno, &buff[0], buff.size()) != 0)
+ {
diff --git a/biology/salmon/files/patch-include_strict__fstream.hpp b/biology/salmon/files/patch-include_strict__fstream.hpp
new file mode 100644
index 000000000000..fbd5deb7ad59
--- /dev/null
+++ b/biology/salmon/files/patch-include_strict__fstream.hpp
@@ -0,0 +1,11 @@
+--- include/strict_fstream.hpp.orig 2021-12-05 17:11:36 UTC
++++ include/strict_fstream.hpp
+@@ -27,7 +27,7 @@ static std::string strerror()
+ {
+ buff = "Unknown error";
+ }
+-#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE || defined(__APPLE__)
++#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE || defined(__APPLE__) || defined(__FreeBSD__)
+ // XSI-compliant strerror_r()
+ if (strerror_r(errno, &buff[0], buff.size()) != 0)
+ {
diff --git a/biology/salmon/files/patch-scripts_fetchPufferfish.sh b/biology/salmon/files/patch-scripts_fetchPufferfish.sh
new file mode 100644
index 000000000000..566493a5e7ee
--- /dev/null
+++ b/biology/salmon/files/patch-scripts_fetchPufferfish.sh
@@ -0,0 +1,57 @@
+--- scripts/fetchPufferfish.sh.orig 2023-07-21 13:59:29 UTC
++++ scripts/fetchPufferfish.sh
+@@ -11,52 +11,12 @@ CURR_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && p
+ EXTERNAL_DIR=${CURR_DIR}/../external
+ INSTALL_DIR=${CURR_DIR}/../external/install
+
+-if [ -d ${EXTERNAL_DIR}/pufferfish ] ; then
+- rm -fr ${EXTERNAL_DIR}/pufferfish
+-fi
++# Pufferfish is downloaded using GH_TUPLE in the FreeBSD port, so remove
++# code here that downloads and unpacks
+
+-if [ -d ${INSTALL_DIR}/include/pufferfish ] ; then
+- rm -fr ${INSTALL_DIR}/include/pufferfish
+-fi
+-
+-if [ -d ${INSTALL_DIR}/src/pufferfish ] ; then
+- rm -fr ${INSTALL_DIR}/src/pufferfish
+-fi
+-
+ SVER=salmon-v1.10.2
+ #SVER=develop
+ #SVER=sketch-mode
+-
+-EXPECTED_SHA256=f225b74833f71dcf767a565345224357fb091f90ce79717abc836814d9ccd101
+-
+-mkdir -p ${EXTERNAL_DIR}
+-curl -k -L https://github.com/COMBINE-lab/pufferfish/archive/${SVER}.zip -o ${EXTERNAL_DIR}/pufferfish.zip
+-
+-hashcheck=""
+-if exists sha256sum; then
+- hashcheck="sha256sum"
+-elif exists shasum; then
+- hashcheck="shasum -a256"
+-else
+- unset hashcheck
+-fi
+-
+-
+-if [ -z "${hashcheck-}" ]; then
+- echo "Couldn't find shasum command; can't verify contents of downloaded pufferfish";
+-else
+-
+- if [[ $SVER != develop && $SVER != onetbb ]]; then
+- echo "${EXPECTED_SHA256} ${EXTERNAL_DIR}/pufferfish.zip" | ${hashcheck} -c - || { echo "pufferfish.zip did not match expected SHA1! Exiting."; exit 1; }
+- else
+- echo "not testing sha since pulling from develop"
+- fi
+-fi
+-
+-
+-rm -fr ${EXTERNAL_DIR}/pufferfish
+-unzip ${EXTERNAL_DIR}/pufferfish.zip -d ${EXTERNAL_DIR}
+-mv ${EXTERNAL_DIR}/pufferfish-${SVER} ${EXTERNAL_DIR}/pufferfish
+
+ mkdir -p ${INSTALL_DIR}/include/pufferfish
+
diff --git a/biology/salmon/files/patch-src_CMakeLists.txt b/biology/salmon/files/patch-src_CMakeLists.txt
new file mode 100644
index 000000000000..2cc68fcd9692
--- /dev/null
+++ b/biology/salmon/files/patch-src_CMakeLists.txt
@@ -0,0 +1,18 @@
+--- src/CMakeLists.txt.orig 2021-11-23 02:42:29 UTC
++++ src/CMakeLists.txt
+@@ -266,14 +266,7 @@ endif()
+
+ add_dependencies(salmon unitTests)
+
+-##
+-# External dependencies of salmon_core and salmon
+-##
+-if (${FETCHED_JEMALLOC})
+- add_dependencies(alevin_core libjemalloc)
+- add_dependencies(salmon_core libjemalloc)
+- add_dependencies(salmon libjemalloc)
+-endif()
++# jemalloc is default on FreeBSD
+
+ if (${FETCHED_BOOST})
+ ## PUFF_INTEGRATION
diff --git a/biology/salmon/pkg-descr b/biology/salmon/pkg-descr
new file mode 100644
index 000000000000..5ec82abec043
--- /dev/null
+++ b/biology/salmon/pkg-descr
@@ -0,0 +1,7 @@
+Salmon is a wicked-fast program to produce a highly-accurate,
+transcript-level quantification estimates from RNA-seq data. Salmon
+achieves is accuracy and speed via a number of different innovations,
+including the use of quasi-mapping (accurate but fast-to-compute
+proxies for traditional read alignments), and massively-parallel
+stochastic collapsed variational inference. The result is a versatile
+tool that fits nicely into many differnt pipelines.