Skip to content

Commit

Permalink
fixed build environment to be simpler and more intuitive to make and …
Browse files Browse the repository at this point in the history
…install
  • Loading branch information
Rob Egan committed Dec 11, 2012
1 parent ec9d19a commit 1331dd0
Show file tree
Hide file tree
Showing 10 changed files with 98 additions and 140 deletions.
55 changes: 29 additions & 26 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,37 +27,37 @@
# PURPOSE.
#

project( Kmernator )
set(CMAKE_USER_MAKE_RULES_OVERRIDE override.cmake)
# by default, build the RELEASE version
if(DEFINED CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release.")
else()
SET(CMAKE_BUILD_TYPE Release CACHE STRING "Building the default, release version")
endif()

project( Kmernator CXX C)


cmake_minimum_required(VERSION 2.8)
enable_testing()

set(KMERNATOR_DEFAULT_VERSION 0.0.1beta)
set(Kmernator_VERSION_MAJOR 1)
set(Kmernator_VERSION_MINOR 0)
set(Kmernator_VERSION_TAG "")

if( EXISTS "${CMAKE_SOURCE_DIR}/.git" )

add_custom_target(GET_GIT_VERSION ALL
COMMAND git describe --tags > ${CMAKE_CURRENT_BINARY_DIR}/git-version
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Retrieving git version")

else()

add_custom_target(GET_GIT_VERSION ALL
COMMAND echo ${KMERNATOR_DEFAULT_VERSION} > ${CMAKE_CURRENT_BINARY_DIR}/git-version
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Set version to ${KMERNATOR_DEFAULT_VERSION}")
execute_process(COMMAND git describe --tags
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE Kmernator_VERSION_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE)

endif()

add_custom_target(REPLACE_VERSION_H ALL
COMMAND ${CMAKE_SOURCE_DIR}/make_version.pl ${CMAKE_SOURCE_DIR}/version.h ${CMAKE_CURRENT_BINARY_DIR}/git-version
COMMENT "re-building version.h")
add_dependencies(REPLACE_VERSION_H GET_GIT_VERSION)

add_custom_target(PRINT_VERSION ALL
COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/git-version
)
add_dependencies(PRINT_VERSION GET_GIT_VERSION)
message("Building ${PROJECT_NAME} version ${Kmernator_VERSION_MAJOR}.${Kmernator_VERSION_MINOR}-${Kmernator_VERSION_TAG}")
message("BuildType: ${CMAKE_BUILD_TYPE}")

configure_file(${CMAKE_SOURCE_DIR}/version.h.in ${CMAKE_SOURCE_DIR}/version.h)

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_SHARED_LIBS OFF)
Expand All @@ -83,10 +83,11 @@ endif()
#
# OpenMP
#
find_package( OpenMP )

if(DISABLE_OPENMP)
set(OpenMP_CXX_FLAGS "-DDISABLE_OPENMP")
else()
find_package( OpenMP )
if(OPENMP_FOUND)
set(OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS} -DENABLE_OPENMP")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_CXX_FLAGS}")
Expand All @@ -98,10 +99,10 @@ endif()
#
# MPI
#
find_package( MPI )
if (DISABLE_MPI)
set(KMERNATOR_MPI_CXX_FLAGS = "-DDISABLE_MPI")
else()
find_package( MPI )
if ( MPI_FOUND )
set(KMERNATOR_MPI_CXX_FLAGS "${KMERNATOR_MPI_CXX_FLAGS} ${MPI_COMPILE_FLAGS} -DENABLE_MPI")
set(KMERNATOR_MPI_LINK_FLAGS "${KMERNATOR_MPI_LINK_FLAGS} ${MPI_LINK_FLAGS}")
Expand All @@ -116,12 +117,11 @@ endif()

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package ( Boost 1.41.0 COMPONENTS mpi program_options iostreams thread serialization system)
find_package ( Boost 1.50.0 COMPONENTS mpi program_options iostreams thread serialization system)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${BOOST_ROOT}/libs)
link_directories(${Boost_LIBRARY_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(BOOST_MAJOR_VER 1)
set(BOOST_MINOR_VER 50)
Expand Down Expand Up @@ -248,6 +248,9 @@ endif()
include_directories( ${MCT_DIR}/include )

include_directories( src )

SET(CMAKE_CXX_FLAGS "-fno-strict-aliasing ${BIT_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")

add_subdirectory( src )

add_subdirectory( test )
Expand Down
4 changes: 2 additions & 2 deletions INSTALL
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

mkdir build
cd build
CFLAGS="-O3 -g -Wall"
BUILD="Release" # or "Debug"
PREFIX="/usr/local" # or wherever you want to install
cmake .. -DCMAKE_CXX_FLAGS="$CFLAGS" -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_INSTALL_PREFIX=$PREFIX
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=$BUILD
make -j && make test
make install

Expand Down
13 changes: 1 addition & 12 deletions apps/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,6 @@

cmake_minimum_required(VERSION 2.6)


# compiler flags
IF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)
SET(CXX_FLAGS $ENV{CXX_FLAGS})
ENDIF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)
IF(CXX_FLAGS)
SET(CMAKE_CXX_FLAGS ${CXX_FLAGS} CACHE STRING "Default compiler flags" FORCE)
ENDIF(CXX_FLAGS)

SET(CMAKE_CXX_FLAGS "-fno-strict-aliasing ${BIT_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")

set_source_files_properties( CompareSpectrums
PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS}
)
Expand Down Expand Up @@ -268,7 +257,7 @@ target_link_libraries( RandomlySample
install(TARGETS RandomlySample DESTINATION bin)

add_executable( pipebuf pipebuf )
set_source_files_properties( pipebuf PROPERTIES COMPILE_FLAGS "-s -Wall -O6 -fexpensive-optimizations -fomit-frame-pointer -D_GNU_SOURCE=1" )
set_source_files_properties( pipebuf PROPERTIES COMPILE_FLAGS "-D_GNU_SOURCE=1" )
install(TARGETS pipebuf DESTINATION bin)

add_executable( FilterAndSortSam FilterAndSortSam )
Expand Down
66 changes: 33 additions & 33 deletions cmake-flags
Original file line number Diff line number Diff line change
@@ -1,60 +1,60 @@
# Default flags to build optimized version

Kmernator=/path/to/sourcecode/of/Kmernator
# assuming kmernator source is in ..
# i.e.
# tar -xvf Kmernator-1.0.tar
# cd Kmernator-1.0
# mkdir build
# cd build
#
Kmernator=..

# for normal build
cmake $Kmernator -DCMAKE_CXX_FLAGS="-O3 -g -Wall -DNDEBUG" -DCMAKE_C_FLAGS="-O3 -g -Wall -DNDEBUG"
cmake $Kmernator

# for build without MPI (if mpic++ exists and you do not want it for some reason)
cmake $Kmernator -DCMAKE_CXX_FLAGS="-O3 -g -Wall" -DCMAKE_C_FLAGS="-O3 -g -Wall" -DDISABLE_MPI
cmake $Kmernator -DDISABLE_MPI

# for debug debug
cmake $Kmernator -DCMAKE_BUILD_TYPE=Debug

# for debug build without OpenMP
cmake $Kmernator -DDISABLE_OPENMP=1 -DCMAKE_BUILD_TYPE=Debug

# for build with non-standard g++, say if gcc-4.6.2 and both g++-4.6.2 exist in the PATH
ver=4.6.2
libdir=$(dirname $(g++-${ver} --print-file-name=libstdc++.so))
cmake $Kmernator -DCMAKE_CXX_COMPILER=`which g++-${ver}` -DCMAKE_C_COMPILER=`which gcc-${ver}` -DCMAKE_CXX_FLAGS="-O3 -g -Wall -Wl,-rpath,${libdir}" -DCMAKE_C_FLAGS="-O3 -g -Wall -Wl,-rpath,${libdir}"
export CFLAGS="-Wl,-rpath,${libdir}"
export CXXFLAGS="$CFLAGS"
cmake $Kmernator -DCMAKE_CXX_COMPILER=`which g++-${ver}` -DCMAKE_C_COMPILER=`which gcc-${ver}`

# for NERSC hopper to use the cc and CC GNU compiler wrappers, tricking CMake and Boost to recognize the native MPI compiler:
# for NERSC hopper, using the suggested GNU compiler wrappers (cc and CC)
# and tricking CMake and Boost to recognize the native MPI compiler:
module load cmake
module swap PrgEnv-pgi PrgEnv-gnu
module remove xt-shmem
module remove iobuf
mpilib=$(basename $MPICH_DIR/lib/libmpich_gnu*.a); mpilib=${mpilib%.a} ; mpilib2=${mpilib#lib}
cmake $Kmernator -DCMAKE_C_COMPILER=`which cc` -DCMAKE_CXX_COMPILER=`which CC` -DCMAKE_CXX_FLAGS="-O3 -Wall -funroll-loops -ffast-math -DNDEBUG" -DCMAKE_C_FLAGS="-O3 -Wall -funroll-loops -ffast-math -DNDEBUG" -DMPI_COMPILER=`which CC` -DMPI_LIBRARY="$mpilib2" -DMPI_INCLUDE_PATH="${MPICH_DIR}/include" -DBOOST_MPI_USER_CONFIG="using mpi : : <find-static-library>$mpilib ;"

### OLD
#cmake $Kmernator -DCMAKE_C_COMPILER=`which cc` -DCMAKE_CXX_COMPILER=`which CC` -DCMAKE_CXX_FLAGS="-O3 -Wall -funroll-loops -ffast-math" -DCMAKE_C_FLAGS="-O3 -Wall -funroll-loops -ffast-math" -DMPI_INCLUDE_PATH="-I$MPICH_DIR/include" -DMPI_LIBRARY="$MPICH_DIR/lib/libmpich_gnu.a" -DMPI_LINK_FLAGS=" " -DMPI_LIBRARIES=" " -DBOOST_MPI_USER_CONFIG="using mpi : : <find-static-library>mpich_gnu ;"
#cmake $Kmernator -DCMAKE_C_COMPILER=`which cc` -DCMAKE_CXX_COMPILER=`which CC` -DCMAKE_CXX_FLAGS="-O3 -Wall -g" -DCMAKE_C_FLAGS="-O3 -Wall -g" -DMPI_INCLUDE_PATH="-I$MPICH_DIR/include" -DMPI_LIBRARY="$MPICH_DIR/lib/libmpich_gnu.a" -DMPI_LINK_FLAGS=" " -DBOOST_MPI_USER_CONFIG="using mpi : : <find-static-library>mpich_gnu ;"
#cmake $Kmernator -DCMAKE_C_COMPILER=`which cc` -DCMAKE_CXX_COMPILER=`which CC` -DCMAKE_CXX_FLAGS="-O3 -Wall -g" -DCMAKE_C_FLAGS="-O3 -Wall -g" -DMPI_INCLUDE_PATH="-I$MPICH_DIR/include" -DMPI_LIBRARY="$MPICH_DIR/lib/libmpich_gnu.a" -DMPI_LINK_FLAGS=" " -DBOOST_MPI_USER_CONFIG="using mpi : : <find-static-library>mpich_gnu <find-static-library>mpichcxx_gnu ;
#using gcc : : : <compileflags>-I$MPICH_DIR/include <linkflags>-L$MPICH_DIR/lib ;
#"
#cmake $Kmernator -DCMAKE_C_COMPILER=`which cc` -DCMAKE_CXX_COMPILER=`which CC` -DMPI_INCLUDE_PATH="-I." -DMPI_LIBRARY="libc.a" -DMPI_LINK_FLAGS=" " -DCMAKE_CXX_FLAGS="-dynamic -O3 -Wall -g" -DCMAKE_C_FLAGS="-dynamic -O3 -Wall -g"
#
# Very OLD Hopper build:
# for NERSC hopper.nersc.gov: gcc compilers and MPICH2 xt-mpt, threaded MPI
#module load cmake
#module swap PrgEnv-pgi PrgEnv-gnu
#export OMP_NUM_THREADS=4
#export MPICH_MAX_THREAD_SAFETY=multiple
#module swap xt-libsci/10.4.3 xt-libsci/10.4.0
#CC=cc CXX=CC \
#cmake $Kmernator \
# -DMPI_INCLUDE_PATH=${MPICH_DIR}/include \
# -DMPI_LIBRARY="libc.a" -DMPI_LINK_FLAGS="-lmpich_threadm" \
# -DCMAKE_CXX_FLAGS="-dynamic -O3 -Wall -g"
export CFLAGS="-funroll-loops"
export CXXFLAGS="$CFLAGS"
cmake $Kmernator -DCMAKE_C_COMPILER=`which cc` -DCMAKE_CXX_COMPILER=`which CC` \
-DCMAKE_CXX_FLAGS="-O3 -Wall -funroll-loops -ffast-math -DNDEBUG" -DCMAKE_C_FLAGS="-O3 -Wall -funroll-loops -ffast-math -DNDEBUG" \
-DMPI_COMPILER=`which CC` -DMPI_LIBRARY="$mpilib2" \
-DMPI_INCLUDE_PATH="${MPICH_DIR}/include" \
-DBOOST_MPI_USER_CONFIG="using mpi : : <find-static-library>$mpilib ;"


# for NERSC carver
module unload pgi
module unload openmpi
module load gcc
module load openmpi-gnu
cmake $Kmernator -DCMAKE_C_COMPILER=`which gcc` -DCMAKE_CXX_COMPILER=`which g++` -DCMAKE_CXX_FLAGS="-O3 -Wall -ffast-math" -DCMAKE_C_FLAGS="-O3 -Wall -ffast-math"
cmake $Kmernator -DCMAKE_C_COMPILER=`which gcc` -DCMAKE_CXX_COMPILER=`which g++`

# for debug
cmake $Kmernator -DCMAKE_CXX_FLAGS="-O0 -g -Wall -DDEBUG" -DCMAKE_C_FLAGS="-O0 -g -Wall -DDEBUG"

# for profile
cmake $Kmernator -DCMAKE_CXX_FLAGS="-O3 -g -pg -Wall"
export CFLAGS="-g -pg"
export CXXFLAGS="$CFLAGS"
cmake $Kmernator

# no openmp
cmake $Kmernator -DCMAKE_CXX_FLAGS="-O3 -g -Wall " -DDISABLE_OPENMP=1

6 changes: 6 additions & 0 deletions override.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -Wall -DDEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math")

SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -Wall -DDEBUG")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffast-math")

46 changes: 10 additions & 36 deletions samtools_CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,42 +29,16 @@
# PURPOSE.
#

set(CMAKE_BUILD_TYPE Release)
project(Samtools_CMAKE)
cmake_minimum_required(VERSION 2.6)

# compiler flags
IF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)
SET(CXX_FLAGS $ENV{CXX_FLAGS})
ENDIF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)

IF(CXX_FLAGS)
SET(CMAKE_CXX_FLAGS ${CXX_FLAGS} CACHE STRING "Default compiler flags" FORCE)
ENDIF(CXX_FLAGS)

SET(CMAKE_CXX_FLAGS "-fno-strict-aliasing ${BIT_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")

add_library(bam STATIC bam)
add_library(bgzf STATIC bgzf)
add_library(kstring STATIC kstring)
add_library(bam_aux STATIC bam_aux)
add_library(bam_import STATIC bam_import)
add_library(sam STATIC sam)
add_library(bam_index STATIC bam_index)
add_library(razf STATIC razf)
add_library(faidx STATIC faidx)
add_library(bedidx STATIC bedidx)
add_library(knetfile STATIC knetfile)
add_library(bam_sort STATIC bam_sort)
add_library(sam_header STATIC sam_header)
add_library(bam_reheader STATIC bam_reheader)
add_library(kprobaln STATIC kprobaln)
add_library(bam_cat STATIC bam_cat)
add_library(bam_md STATIC bam_md)
add_library(bam_pileup STATIC bam_pileup)

set(SAMTOOLS_LIBS bam sam bgzf bam_sort sam_header bam_aux kstring
faidx bam_import bam_pileup razf bam_index knetfile)

add_library(libbam
STATIC
bam sam bgzf bam_sort sam_header bam_aux kstring
faidx bam_import bam_pileup razf bam_index)
# kstring bam_aux bam_import bam_index razf faidx bedidx
#knetfile bam_sort sam_header bam_reheader kprobaln bam_cat bam_md
#)
STATIC ${SAMTOOLS_LIBS})
set_target_properties(libbam
PROPERTIES COMPILE_FLAGS "-O2 -g -Wall -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_USE_KNETFILE "
)

11 changes: 0 additions & 11 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,6 @@
# PURPOSE.
#

# compiler flags
IF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)
SET(CXX_FLAGS $ENV{CXX_FLAGS})
ENDIF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)

IF(CXX_FLAGS)
SET(CMAKE_CXX_FLAGS ${CXX_FLAGS} CACHE STRING "Default compiler flags" FORCE)
ENDIF(CXX_FLAGS)

SET(CMAKE_CXX_FLAGS "-fno-strict-aliasing ${BIT_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")

set_source_files_properties( TwoBitSequence
PROPERTIES COMPILE_FLAGS "${OpenMP_CXX_FLAGS}"
)
Expand Down
21 changes: 12 additions & 9 deletions src/KmerSpectrum.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ template<typename So = TrackingDataMinimal4, typename We = TrackingDataMinimal4,
class KmerSpectrum {
public:

static const int VARIANT_EDIT_DISTANCE_EXPONENT = 10;
static const int VARIANT_EDIT_DISTANCE_EXPONENT = 20;

typedef Kmernator::KmerIndexType IndexType;

Expand Down Expand Up @@ -1798,7 +1798,7 @@ class KmerSpectrum {
numThreads = omp_get_num_threads();
reservation *= maxThreads;
reservation /= numThreads;
LOG_WARN(1, "RuntimeException: KmerSpectrum::_buildKmerSpectrumParallelOMP(): thread count mis-match " << maxThreads << " vs " << omp_get_num_threads() << " nested:" << omp_get_nested() << " level: " << omp_get_level() << " dynamic: " << omp_get_dynamic());
LOG_WARN(1, "RuntimeException: KmerSpectrum::_buildKmerSpectrumParallelOMP(): thread count mis-match " << maxThreads << " vs " << omp_get_num_threads() << " nested:" << omp_get_nested() << " dynamic: " << omp_get_dynamic());
}
}
LOG_DEBUG(1, "Executing parallel buildKmerSpectrum with " << maxThreads << " over " << store.getSize() << " reads");
Expand Down Expand Up @@ -1939,14 +1939,17 @@ class KmerSpectrum {
if (editDistance == 0)
return purgedKmers;

WeakBucketType::permuteBases(kmer, variants, editDistance, true);
for (int thisEditDistance = 1 ; thisEditDistance <= editDistance; thisEditDistance++) {
double thisThreshold = threshold / (VARIANT_EDIT_DISTANCE_EXPONENT ^ (thisEditDistance-1));
WeakBucketType::permuteBases(kmer, variants, thisEditDistance, true);

for(SequenceLengthType i = 0 ; i < variants.size(); i++) {
Kmer &varKmer = variants[i];
double dummy;
if (this->_setPurgeVariant(pointers, varKmer, threshold, dummy)) {
LOG_DEBUG(4, "Purged " << dummy << " < " << threshold << " : " << varKmer.toFasta() << " vs " << kmer.toFasta());
purgedKmers++;
for(SequenceLengthType i = 0 ; i < variants.size(); i++) {
Kmer &varKmer = variants[i];
double dummy;
if (this->_setPurgeVariant(pointers, varKmer, thisThreshold, dummy)) {
LOG_DEBUG(4, "Purged " << dummy << " < " << thisThreshold << " : " << varKmer.toFasta() << " vs " << kmer.toFasta());
purgedKmers++;
}
}
}
return purgedKmers;
Expand Down
12 changes: 1 addition & 11 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,6 @@
cmake_minimum_required(VERSION 2.6)
enable_testing()

# compiler flags
IF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)
SET(CXX_FLAGS $ENV{CXX_FLAGS})
ENDIF(ENV{CXX_FLAGS} AND NOT CXX_FLAGS)
IF(CXX_FLAGS)
SET(CMAKE_CXX_FLAGS ${CXX_FLAGS} CACHE STRING "Default compiler flags" FORCE)
ENDIF(CXX_FLAGS)

SET(CMAKE_CXX_FLAGS "-fno-strict-aliasing ${BIT_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")

set_source_files_properties( TwoBitSequenceTest
PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS}
)
Expand All @@ -63,7 +53,7 @@ target_link_libraries( ReadSetTest Sequence
Kmer
Log
${KMERNATOR_BOOST_LIBS}
${KMERNATOR_BOOST_TEST_LIBS}
${KMERNATOR_BOOST_TEST_LIBS}
)
add_test( ReadSetTest ReadSetTest )

Expand Down
4 changes: 4 additions & 0 deletions version.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#define Kmernator_VERSION_MAJOR "@Kmernator_VERSION_MAJOR@"
#define Kmerntaor_VERSION_MINOR "@Kmernator_VERSION_MINOR@"
#define Kmernator_VERSION_TAG "@Kmernator_VERSION_TAG@"
#define VERSION "@Kmernator_VERSION_MAJOR@.@Kmernator_VERSION_MINOR@-@Kmernator_VERSION_TAG@"

0 comments on commit 1331dd0

Please sign in to comment.