Skip to content
Commits on Source (3)
......@@ -6,12 +6,9 @@ addons:
apt:
packages:
- cmake
language: cpp
before_install:
- git submodule update --init --recursive
- test -n $CC && unset CC
- test -n $CXX && unset CXX
script:
- mkdir build
......@@ -30,7 +27,7 @@ matrix:
packages:
- g++-4.9
- mpi-default-dev
env: COMPILER=g++-4.9
env: CXX=g++-4.9
- compiler: gcc
addons:
apt:
......@@ -39,7 +36,7 @@ matrix:
packages:
- g++-5
- mpi-default-dev
env: COMPILER=g++-5
env: CXX=g++-5
- compiler: gcc
addons:
apt:
......@@ -48,7 +45,16 @@ matrix:
packages:
- g++-6
- mpi-default-dev
env: COMPILER=g++-6
env: CXX=g++-6
- compiler: gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-7
- mpi-default-dev
env: CXX=g++-7
- compiler: clang
addons:
apt:
......@@ -58,7 +64,7 @@ matrix:
packages:
- clang-3.6
- mpi-default-dev
env: COMPILER=clang++-3.6
env: CXX=clang++-3.6
- compiler: clang
addons:
apt:
......@@ -68,7 +74,7 @@ matrix:
packages:
- clang-3.7
- mpi-default-dev
env: COMPILER=clang++-3.7
env: CXX=clang++-3.7
- compiler: clang
addons:
apt:
......@@ -78,7 +84,24 @@ matrix:
packages:
- clang-3.8
- mpi-default-dev
env: COMPILER=clang++-3.8
env: CXX=clang++-3.8
- compiler: clang
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-3.9
packages:
- clang-3.9
- mpi-default-dev
env: CXX=clang++-3.9
- compiler: clang
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-trusty-4.0
packages:
- clang-4.0
- mpi-default-dev
env: CXX=clang++-4.0
......@@ -19,6 +19,25 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
set(CMAKE_COMPILER_IS_ICC 1)
endif()
message("-- Processor is ${CMAKE_SYSTEM_PROCESSOR}")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
set(X86_64 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")
set(X86 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
set(ARM 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
set(AARCH64 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "PPC64*|ppc64*|powerpc64*")
set(PPC64 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "PPC*|ppc*|powerpc*")
set(PPC 1)
endif()
set (HHSUITE_VERSION_MAJOR 3)
set (HHSUITE_VERSION_MINOR 0)
set (HHSUITE_VERSION_PATCH 0)
......@@ -39,12 +58,12 @@ INSTALL(FILES
include_directories(src)
include_directories(lib/ffindex/src)
add_subdirectory(lib/ffindex)
add_subdirectory(src)
add_subdirectory(data)
add_subdirectory(scripts)
add_subdirectory(test)
#add_subdirectory(doc)
add_subdirectory(lib/ffindex)
SET (CPACK_GENERATOR "DEB;TGZ;ZIP;RPM")
......
......@@ -16,6 +16,7 @@ For full documentation see the user guide in hhsuite-userguide.pdf
To compile from source, you will need:
* a recent C/C++ compiler
* CMake 2.8.12 or later
* pdbx python library for example from https://github.com/soedinglab/pdbx
*****************************************************************************
2. Installation
......
......@@ -10,12 +10,20 @@
The HH-suite is an open-source software package for sensitive protein sequence searching based on the pairwise alignment of hidden Markov models (HMMs).
## WARNING ##
We had to rename our repository for ffindex, so it might be necessary to run the following commands to update the submodule in your clone:
git pull
git submodule deinit
git submodule init
## Requirements
To compile from source, you will need:
* a recent C/C++ compiler
* [CMake](http://cmake.org/) 2.8.12 or later
* install [pdbx python library](https://github.com/soedinglab/pdbx)
## Installation
......
hhsuite for Debian
------------------
The ffindex package features an MQP library to work with OpenMPI.
But only when OpenMPI is found to be installed.
The ffindex packages builds with OpenMPI but does not export that
library. To overcome this hurdle please deinstall the OpenMPI packages
for building this package.
Patches
.......
Patches are documented in their headers.
......
hhsuite (3.0~beta3+dfsg-1) unstable; urgency=medium
* Team upload.
* New upstream version.
* d/control
- compliance with policy 4.2
- adapted Vcs URLs to salsa.d.o
* Caveat: Does not compile with openmpi libraries discovered.
See README.source.
-- Steffen Moeller <moeller@debian.org> Thu, 02 Aug 2018 17:42:28 +0200
hhsuite (3.0~beta2+dfsg-4) UNRELEASED; urgency=medium
* debian/upstream/metadata:
......
......@@ -6,15 +6,15 @@ Uploaders: Laszlo Kajan <lkajan@debian.org>,
Section: science
Priority: optional
Build-Depends: debhelper (>= 10),
libffindex0-dev (>= 0.9.9.6-2),
libffindex0-dev (>= 0.9.9.7+soedinglab),
cmake,
texlive-latex-base,
texlive-latex-recommended,
imagemagick,
help2man
Standards-Version: 3.9.8
Vcs-Browser: https://anonscm.debian.org/cgit/debian-med/hhsuite.git
Vcs-Git: https://anonscm.debian.org/git/debian-med/hhsuite.git
Standards-Version: 4.2.0
Vcs-Browser: https://salsa.debian.org/med-team/hhsuite.git
Vcs-Git: https://salsa.debian.org/med-team/hhsuite.git
Homepage: http://toolkit.genzentrum.lmu.de/sections/search
Package: hhsuite
......
Description: build own manual PDF
The LaTeX source is now included, so we can build the manual directly.
Author: Sascha Steinbiss <satta@debian.org>
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,7 +29,6 @@
Index: hhsuite/CMakeLists.txt
===================================================================
--- hhsuite.orig/CMakeLists.txt
+++ hhsuite/CMakeLists.txt
@@ -48,7 +48,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMA
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
INSTALL(FILES
......@@ -11,12 +13,12 @@ Author: Sascha Steinbiss <satta@debian.org>
LICENSE
README
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
@@ -43,7 +42,7 @@
@@ -63,7 +62,7 @@ add_subdirectory(src)
add_subdirectory(data)
add_subdirectory(scripts)
add_subdirectory(test)
-#add_subdirectory(doc)
+add_subdirectory(doc)
#add_subdirectory(lib/ffindex)
SET (CPACK_GENERATOR "DEB;TGZ;ZIP;RPM")
Description: do not use AVX to build binaries
Author: Sascha Steinbiss <satta@debian.org>
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,22 +9,22 @@
endif()
Index: hhsuite/src/CMakeLists.txt
===================================================================
--- hhsuite.orig/src/CMakeLists.txt
+++ hhsuite/src/CMakeLists.txt
@@ -12,22 +12,22 @@ endif()
if(X86 OR X86_64)
#SSE
-if(${HAVE_AVX2})
......@@ -32,10 +34,12 @@ Author: Sascha Steinbiss <satta@debian.org>
+ endif(${HAVE_SSSE3_EXTENSIONS})
endif()
--- a/cmake/CheckSSEFeatures.cmake
+++ b/cmake/CheckSSEFeatures.cmake
@@ -209,23 +209,23 @@
else() #
Index: hhsuite/cmake/CheckSSEFeatures.cmake
===================================================================
--- hhsuite.orig/cmake/CheckSSEFeatures.cmake
+++ hhsuite/cmake/CheckSSEFeatures.cmake
@@ -209,23 +209,23 @@ macro(PCL_CHECK_FOR_SSE)
set(CMAKE_REQUIRED_FLAGS)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
......
Description: do not try to build ffindex
Author: Sascha Steinbiss <satta@debian.org>
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,14 +37,14 @@
Index: hhsuite/CMakeLists.txt
===================================================================
--- hhsuite.orig/CMakeLists.txt
+++ hhsuite/CMakeLists.txt
@@ -56,9 +56,9 @@ INSTALL(FILES
)
include_directories(src)
-include_directories(lib/ffindex/src)
+#include_directories(lib/ffindex/src)
-add_subdirectory(lib/ffindex)
+#add_subdirectory(lib/ffindex)
add_subdirectory(src)
add_subdirectory(data)
add_subdirectory(scripts)
add_subdirectory(test)
#add_subdirectory(doc)
-add_subdirectory(lib/ffindex)
+#add_subdirectory(lib/ffindex)
SET (CPACK_GENERATOR "DEB;TGZ;ZIP;RPM")
Description: add stdlib.h to header
This fixes compilation with Debian's ffindex headers.
Author: Sascha Steinbiss <satta@debian.org>
--- a/src/hhdatabase.h
+++ b/src/hhdatabase.h
@@ -15,6 +15,7 @@
class FFindexDatabase;
extern "C" {
+#include <stdlib.h>
#include <ffindex.h>
}
Author: Daniel Shahaf <danielsh@apache.org>
Last-Update: Wed, Jan 18, 2017 at 15:22:26 +0000
Bug-Debian: https://bugs.debian.org/851764
Description: hhblits.cpp uses the %i printf(3) conversion to format a 'double' value
Thats undefined and prints garbage - the patch inserts the correct format
(and also fixes the doc about the correct default value
--- a/doc/hhsuite-userguide.tex
+++ b/doc/hhsuite-userguide.tex
@@ -1466,7 +1466,7 @@
-maxfilt max number of hits allowed to pass 2nd prefilter (default=20000)
-min_prefilter_hits min number of hits to pass prefilter (default=100)
-prepre_smax_thresh min score threshold of ungapped prefilter (default=10)
- -pre_evalue_thresh max E-value threshold of Smith-Waterman prefilter score (default=0)
+ -pre_evalue_thresh max E-value threshold of Smith-Waterman prefilter score (default=1000.0)
-pre_bitfactor prefilter scores are in units of 1 bit / pre_bitfactor (default=4)
-pre_gap_open gap open penalty in prefilter Smith-Waterman alignment (default=20)
-pre_gap_extend gap extend penalty in prefilter Smith-Waterman alignment (default=4)
--- a/src/hhblits.cpp
+++ b/src/hhblits.cpp
@@ -330,7 +330,7 @@
printf(" -maxfilt max number of hits allowed to pass 2nd prefilter (default=%i) \n", par.maxnumdb);
printf(" -min_prefilter_hits min number of hits to pass prefilter (default=%i) \n", par.min_prefilter_hits);
printf(" -prepre_smax_thresh min score threshold of ungapped prefilter (default=%i) \n", par.preprefilter_smax_thresh);
- printf(" -pre_evalue_thresh max E-value threshold of Smith-Waterman prefilter score (default=%i)\n", par.prefilter_evalue_thresh);
+ printf(" -pre_evalue_thresh max E-value threshold of Smith-Waterman prefilter score (default=%.1f)\n", par.prefilter_evalue_thresh);
printf(" -pre_bitfactor prefilter scores are in units of 1 bit / pre_bitfactor (default=%i)\n", par.prefilter_bit_factor);
printf(" -pre_gap_open gap open penalty in prefilter Smith-Waterman alignment (default=%i)\n", par.prefilter_gap_open);
printf(" -pre_gap_extend gap extend penalty in prefilter Smith-Waterman alignment (default=%i)\n", par.prefilter_gap_extend);
Description: patch Perl interpreter as required by Polich 5.1
Perl Script Magic - http://www.debian.org/doc/packaging-manuals/perl-policy/ch-programs.html#s-hash_bang
Author: Laszlo Kajan <lkajan@rostlab.org>
--- a/scripts/addss.pl
+++ b/scripts/addss.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/usr/bin/perl
#
# addss.pl
# Add PSIPRED secondary structure prediction (and DSSP annotation) to an MSA or HMMER file.
--- a/scripts/create_profile_from_hhm.pl
+++ b/scripts/create_profile_from_hhm.pl
Index: hhsuite/scripts/create_profile_from_hhm.pl
===================================================================
--- hhsuite.orig/scripts/create_profile_from_hhm.pl
+++ hhsuite/scripts/create_profile_from_hhm.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/usr/bin/perl
#
# create_profile_from_hhm.pl
# Create a profile (.prf) from a given HHM file
--- a/scripts/create_profile_from_hmmer.pl
+++ b/scripts/create_profile_from_hmmer.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/usr/bin/perl
#
# create_profile_from_hmmer.pl
# Create a profile (.prf) from a given HMMER/HMMER3 file
--- a/scripts/hhmakemodel.pl
+++ b/scripts/hhmakemodel.pl
@@ -1,4 +1,4 @@
-#! /usr/bin/env perl
+#!/usr/bin/perl
#
# hhmakemodel.pl
# Generate a model from an output alignment of hhsearch.
--- a/scripts/multithread.pl
+++ b/scripts/multithread.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/usr/bin/perl
#
# multithread.pl:
# Run a command with different file names as arguments on multiple threads in parallel
--- a/scripts/pdb2fasta.pl
+++ b/scripts/pdb2fasta.pl
@@ -1,4 +1,4 @@
-#! /usr/bin/env perl
+#!/usr/bin/perl
#
# pdb2fasta.pl - generate FASTA nonredundant sequence file from SEQRES records of globbed pdb files.
--- a/scripts/pdbfilter.pl
+++ b/scripts/pdbfilter.pl
@@ -1,4 +1,4 @@
-#! /usr/bin/env perl
+#!/usr/bin/perl
# pdbfilter.pl - Read pdb or SCOP sequences from infile and write representative set of sequences to outfile
#
--- a/scripts/reformat.pl
+++ b/scripts/reformat.pl
@@ -1,4 +1,4 @@
-#! /usr/bin/env perl
+#!/usr/bin/perl
# reformat.pl
# Reformat a multiple alignment file
--- a/scripts/renumberpdb.pl
+++ b/scripts/renumberpdb.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/usr/bin/perl
# renumberpdb.pl - generate a PDB file with renumbered indices that match residue indices in input sequence
# Usage: renumberpdb.pl [options] infile [outfile]
# Example: renumberpdb.pl d1hz4a_.a3m d1hz4a_.pdb
--- a/scripts/splitfasta.pl
+++ b/scripts/splitfasta.pl
@@ -1,4 +1,4 @@
-#! /usr/bin/env perl
+#!/usr/bin/perl
# splitfasta.pl
# Split a file with multiple, FASTA formatted sequences into many single-sequence FASTA files
#
perlscript_uselib
perl_interpreter
add_Makefile_in_data.patch
spelling.patch
disable-ffindex-build.patch
fix-namespace.patch
drop-fmemopen.h.patch
build-own-manual-PDF.patch
set-default-HHLIB-dir.patch
disable-AVX-SSE.patch
fix_type_mismatch_in_printf.patch
......@@ -2,13 +2,15 @@ Description: set default HHLIB
hhsuite needs to access some static data in /usr/share. This patch sets the
correct search path if it is not given by the user in HHLIB environment var.
Author: Sascha Steinbiss <satta@debian.org>
--- a/src/hhdecl.cpp
+++ b/src/hhdecl.cpp
@@ -13,7 +13,7 @@
Index: hhsuite/src/hhdecl.cpp
===================================================================
--- hhsuite.orig/src/hhdecl.cpp
+++ hhsuite/src/hhdecl.cpp
@@ -13,7 +13,7 @@ void Parameters::SetDefaultPaths() {
if (getenv("HHLIB"))
strcpy(hhlib, getenv("HHLIB"));
else
- strcpy(hhlib, "/usr/lib");
- strcpy(hhlib, "/usr/lib/hhsuite");
+ strcpy(hhlib, "/usr/share/hhsuite");
strcat(strcpy(hhdata, hhlib), "/data");
......
Description: Fix spelling
Author: Andreas Tille <tille@debian.org>
Last-Update: Sat, 13 Aug 2016 07:27:28 +0200
--- a/src/cs/context_profile-inl.h
+++ b/src/cs/context_profile-inl.h
@@ -106,7 +106,7 @@
assert(len & 1);
if (nalph != Abc::kSize)
throw Exception("Alphabet size of serialized context profile should be %d"
- "but is acutally %d!", Abc::kSize, nalph);
+ "but is actually %d!", Abc::kSize, nalph);
// If everything went fine we can resize our data memmbers
probs.Resize(len);
--- a/doc/hhsuite-userguide.tex
+++ b/doc/hhsuite-userguide.tex
@@ -1575,7 +1575,7 @@
-neffmax ]1,20] skip further search iterations when diversity Neff of query MSA
becomes larger than neffmax (default=10.0)
-cpu <int> number of CPUs to use (for shared memory SMPs) (default=2)
- -scores <file> write scores for all pairwise comparisions to file
+ -scores <file> write scores for all pairwise comparisons to file
-atab <file> write all alignments in tabular layout to file
-maxres <int> max number of HMM columns (def=20001)
-maxmem [1,inf[ limit memory for realignment (in GB) (def=3.0)
@@ -1706,7 +1706,7 @@
Other options:
-v <int> verbose mode: 0:no screen output 1:only warings 2: verbose (def=2)
-cpu <int> number of CPUs to use (for shared memory SMPs) (default=2)
- -scores <file> write scores for all pairwise comparisions to file
+ -scores <file> write scores for all pairwise comparisons to file
-atab <file> write all alignments in tabular layout to file
-maxres <int> max number of HMM columns (def=20001)
-maxmem [1,inf[ limit memory for realignment (in GB) (def=3.0)
--- a/src/cs/crf_state-inl.h
+++ b/src/cs/crf_state-inl.h
@@ -44,7 +44,7 @@
assert(len & 1);
if (nalph != Abc::kSize)
throw Exception("Alphabet size of serialized CRF state should be %d"
- "but is acutally %d!", Abc::kSize, nalph);
+ "but is actually %d!", Abc::kSize, nalph);
// If everything went fine we can resize our data memmbers
context_weights.Resize(len);
--- a/src/hhblits.cpp
+++ b/src/hhblits.cpp
@@ -457,7 +457,7 @@
printf(" becomes larger than neffmax (default=%.1f)\n", par.neffmax);
printf(" -cpu <int> number of CPUs to use (for shared memory SMPs) (default=%i) \n", par.threads);
if (all) {
- printf(" -scores <file> write scores for all pairwise comparisions to file \n");
+ printf(" -scores <file> write scores for all pairwise comparisons to file \n");
printf(" -filter_matrices filter matrices for similarity to output at most 100 matrices\n");
printf(" -atab <file> write all alignments in tabular layout to file \n");
printf(" -maxres <int> max number of HMM columns (def=%5i) \n", par.maxres);
--- a/src/hhsearch.cpp
+++ b/src/hhsearch.cpp
@@ -241,7 +241,7 @@
printf(" -v <int> verbose mode: 0:no screen output 1:only warings 2: verbose (def=%i)\n", par.v);
printf(" -cpu <int> number of CPUs to use (for shared memory SMPs) (default=%i) \n", par.threads);
if (all) {
- printf(" -scores <file> write scores for all pairwise comparisions to file \n");
+ printf(" -scores <file> write scores for all pairwise comparisons to file \n");
printf(" -atab <file> write all alignments in tabular layout to file \n");
printf(" -maxres <int> max number of HMM columns (def=%5i) \n", par.maxres);
printf(" -maxmem [1,inf[ limit memory for realignment (in GB) (def=%.1f) \n", par.maxmem);
......@@ -27,8 +27,11 @@ override_dh_installman: $(HHMANPAGES)
$(HHMANPAGES): %.1 : debian/tmp/usr/bin/%
unset LD_PRELOAD && export LD_LIBRARY_PATH=debian/tmp/usr/lib && export HHLIB=. && help2man --no-info --help-option '-h all' --version-string $(VERSION) -n "$$n_$*" '$<' | sed -e 's/\(^\|[^\]\)-/\1\\-/g;' > '$@'
override_dh_clean:
override_dh_auto_clean:
dh_auto_clean
rm -f $(HHMANPAGES)
find . -name "*.rej" -delete
find . -name "*~" -delete
dh_clean
override_dh_auto_build:
......
This diff is collapsed.
......@@ -24,6 +24,9 @@ INSTALL(PROGRAMS
ffindex.py
a3m.py
get_a3m_size.py
is_huge_a3m.py
pdbfilter.py
cif2fasta.py
hhmakemodel.py
hh_reader.py
DESTINATION scripts
)
......@@ -28,9 +28,10 @@ package HHPaths;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
use Exporter;
our $v;
our $VERSION = "version 2.0.16 (February 2013)";
our $VERSION = "version 3.0.0 (15-03-2015)";
our @ISA = qw(Exporter);
our @EXPORT = qw($VERSION $hhlib $hhdata $hhbin $hhscripts $execdir $datadir $ncbidir $dummydb $pdbdir $dsspdir $dssp $cs_lib $context_lib $v);
push @EXPORT, qw($hhshare $hhbdata);
##############################################################################################
# PLEASE COMPLETE THE PATHS ... TO PSIPRED AND OLD-STYLE BLAST (NOT BLAST+) (NEEDED FOR PSIPRED)
......@@ -54,11 +55,13 @@ our $dssp = "/cluster/databases/dssp/bin/dsspcmbi"; # where is the dssp bin
# The lines below probably do not need to be changed
# Setting paths for hh-suite perl scripts
our $hhlib = $ENV{"HHLIB"}; # main hh-suite directory
our $hhdata = $hhlib."/data"; # path to data directory for hhblits, example files
our $hhlib = $ENV{"HHLIB"} || "/usr/lib/hhsuite"; # main hh-suite directory
our $hhshare = $ENV{"HHLIB"} || "/usr/share/hhsuite"; # main hh-suite directory
our $hhdata = $hhshare."/data"; # path to arch indep data directory for hhblits, example files
our $hhbdata = $hhlib."/data"; # path to arch dep data directory for hhblits, example files
our $hhbin = $hhlib."/bin"; # path to cstranslate (path to hhsearch, hhblits etc. should be in environment variable PATH)
our $hhscripts= $hhlib."/scripts"; # path to hh perl scripts (addss.pl, reformat.pl, hhblitsdb.pl etc.)
our $dummydb = $hhdata."/do_not_delete"; # Name of dummy blast db for PSIPRED (single sequence formatted with NCBI formatdb)
our $hhscripts= $hhshare."/scripts"; # path to hh perl scripts (addss.pl, reformat.pl, hhblitsdb.pl etc.)
our $dummydb = $hhbdata."/do_not_delete"; # Name of dummy blast db for PSIPRED (single sequence formatted with NCBI formatdb)
# HHblits data files
our $cs_lib = "$hhdata/cs219.lib";
......@@ -72,7 +75,7 @@ $ENV{"PATH"} = $hhscripts.":".$ENV{"PATH"}; # Add hh scripts directory to enviro
################################################################################################
sub System()
{
if ($v>=2) {printf("\$ %s\n",$_[0]);}
if ($v>=2) {printf(STDERR "\$ %s\n",$_[0]);}
system($_[0]);
if ($? == -1) {
die("\nError: failed to execute '$_[0]': $!\n\n");
......