Add count/not tools as executables. - Apparently, I'm willing to do incredibly stupid things in the name of portability. llvm-svn: 82685 GitOrigin-RevId: 00dd448cffea27e58e0e4ecdc70257af6dda419c
diff --git a/CMakeLists.txt b/CMakeLists.txt index 362a395..c9c5272 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -262,6 +262,8 @@ add_subdirectory(test) add_subdirectory(utils/FileCheck) +add_subdirectory(utils/count) +add_subdirectory(utils/not) set(LLVM_ENUM_ASM_PRINTERS "") set(LLVM_ENUM_ASM_PARSERS "")
diff --git a/test/Scripts/count b/test/Scripts/count deleted file mode 100755 index 1c3d7e0..0000000 --- a/test/Scripts/count +++ /dev/null
@@ -1,17 +0,0 @@ -#!/bin/sh -# -# Program: count -# -# Synopsis: Count the number of lines of input on stdin and test that it -# matches the specified number. -# -# Syntax: count <number> - -set -e -set -u -input_lines=`wc -l` -if [ "$input_lines" -ne "$1" ]; then - echo "count: expected $1 lines and got ${input_lines}." - exit 1 -fi -exit 0
diff --git a/test/Scripts/not b/test/Scripts/not deleted file mode 100755 index e3b1efe..0000000 --- a/test/Scripts/not +++ /dev/null
@@ -1,12 +0,0 @@ -#!/bin/sh -# -# Program: not -# -# Synopsis: Inverse the output of the program specified on the command line -# -# Syntax: not command <arguments> - -if "$@" -then exit 1 -else exit 0 -fi
diff --git a/utils/Makefile b/utils/Makefile index 80204b0..000705e 100644 --- a/utils/Makefile +++ b/utils/Makefile
@@ -8,7 +8,7 @@ ##===----------------------------------------------------------------------===## LEVEL = .. -PARALLEL_DIRS := TableGen fpcmp PerfectShuffle FileCheck FileUpdate unittest +PARALLEL_DIRS := TableGen fpcmp PerfectShuffle FileCheck FileUpdate count not unittest EXTRA_DIST := cgiplotNLT.pl check-each-file codegen-diff countloc.sh cvsupdate \ DSAclean.py DSAextract.py emacs findsym.pl GenLibDeps.pl \
diff --git a/utils/count/CMakeLists.txt b/utils/count/CMakeLists.txt new file mode 100644 index 0000000..e124f61 --- /dev/null +++ b/utils/count/CMakeLists.txt
@@ -0,0 +1,3 @@ +add_executable(count + count.c + )
diff --git a/utils/count/Makefile b/utils/count/Makefile new file mode 100644 index 0000000..8de076a --- /dev/null +++ b/utils/count/Makefile
@@ -0,0 +1,20 @@ +##===- utils/count/Makefile --------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../.. +TOOLNAME = count +USEDLIBS = + +# This tool has no plugins, optimize startup time. +TOOL_NO_EXPORTS = 1 + +# Don't install this utility +NO_INSTALL = 1 + +include $(LEVEL)/Makefile.common
diff --git a/utils/count/count.c b/utils/count/count.c new file mode 100644 index 0000000..a37e1e0 --- /dev/null +++ b/utils/count/count.c
@@ -0,0 +1,48 @@ +/*===- count.c - The 'count' testing tool ---------------------------------===*\ + * + * The LLVM Compiler Infrastructure + * + * This file is distributed under the University of Illinois Open Source + * License. See LICENSE.TXT for details. + * +\*===----------------------------------------------------------------------===*/ + +#include <stdlib.h> +#include <stdio.h> + +int main(int argc, char **argv) { + unsigned Count, NumLines, NumRead; + char Buffer[4096], *End; + + if (argc != 2) { + fprintf(stderr, "usage: %s <expected line count>\n", argv[0]); + return 2; + } + + Count = strtol(argv[1], &End, 10); + if (*End != '\0' && End != argv[1]) { + fprintf(stderr, "%s: invalid count argument '%s'\n", argv[0], argv[1]); + return 2; + } + + NumLines = 0; + while ((NumRead = fread(Buffer, 1, sizeof(Buffer), stdin))) { + unsigned i; + + for (i = 0; i != NumRead; ++i) + if (Buffer[i] == '\n') + ++NumLines; + } + + if (!feof(stdin)) { + fprintf(stderr, "%s: error reading stdin\n", argv[0]); + return 3; + } + + if (Count != NumLines) { + fprintf(stderr, "Expected %d lines, got %d.\n", Count, NumLines); + return 1; + } + + return 0; +}
diff --git a/utils/not/CMakeLists.txt b/utils/not/CMakeLists.txt new file mode 100644 index 0000000..407c82e --- /dev/null +++ b/utils/not/CMakeLists.txt
@@ -0,0 +1,11 @@ +add_executable(not + not.cpp + ) + +target_link_libraries(not LLVMSystem) +if( MINGW ) + target_link_libraries(not imagehlp psapi) +endif( MINGW ) +if( LLVM_ENABLE_THREADS AND HAVE_LIBPTHREAD ) + target_link_libraries(not pthread) +endif()
diff --git a/utils/not/Makefile b/utils/not/Makefile new file mode 100644 index 0000000..fef4802 --- /dev/null +++ b/utils/not/Makefile
@@ -0,0 +1,21 @@ +##===- utils/not/Makefile ----------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../.. +TOOLNAME = not +USEDLIBS = LLVMSupport.a LLVMSystem.a + +# This tool has no plugins, optimize startup time. +TOOL_NO_EXPORTS = 1 + +# Don't install this utility +NO_INSTALL = 1 + +include $(LEVEL)/Makefile.common +
diff --git a/utils/not/not.cpp b/utils/not/not.cpp new file mode 100644 index 0000000..dd89b8f --- /dev/null +++ b/utils/not/not.cpp
@@ -0,0 +1,17 @@ +//===- not.cpp - The 'not' testing tool -----------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/System/Path.h" +#include "llvm/System/Program.h" +using namespace llvm; + +int main(int argc, const char **argv) { + sys::Path Program = sys::Program::FindProgramByName(argv[1]); + return !sys::Program::ExecuteAndWait(Program, argv + 1); +}