git: 64a6421c248a - main - biology/salmon: Transcript-level quantification of RNA-seq

From: Jason W. Bacon <jwb_at_FreeBSD.org>
Date: Fri, 21 Jul 2023 23:07:06 UTC
The branch main has been updated by jwb:

URL: https://cgit.FreeBSD.org/ports/commit/?id=64a6421c248a048b13caab73de93ad10dd56e9cb

commit 64a6421c248a048b13caab73de93ad10dd56e9cb
Author:     Jason W. Bacon <jwb@FreeBSD.org>
AuthorDate: 2023-07-21 23:06:36 +0000
Commit:     Jason W. Bacon <jwb@FreeBSD.org>
CommitDate: 2023-07-21 23:06:36 +0000

    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.
---
 biology/Makefile                                   |   1 +
 biology/salmon/Makefile                            |  48 ++++++++
 biology/salmon/distinfo                            |   9 ++
 biology/salmon/files/patch-CMakeLists.txt          | 123 +++++++++++++++++++++
 .../files/patch-external_pufferfish_CMakeLists.txt |  23 ++++
 ...paco_graphconstructor_assemblyedgeconstructor.h |  22 ++++
 ...-external_pufferfish_include_ghc_filesystem.hpp |  11 ++
 ...nal_pufferfish_include_zstr_strict__fstream.hpp |  11 ++
 .../salmon/files/patch-include_strict__fstream.hpp |  11 ++
 .../salmon/files/patch-scripts_fetchPufferfish.sh  |  57 ++++++++++
 biology/salmon/files/patch-src_CMakeLists.txt      |  18 +++
 biology/salmon/pkg-descr                           |   7 ++
 12 files changed, 341 insertions(+)

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.