[brlcad-commits] SF.net SVN: brlcad:[46671] brlcad/trunk/misc
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <sta...@us...> - 2011-09-13 05:52:12
|
Revision: 46671 http://brlcad.svn.sourceforge.net/brlcad/?rev=46671&view=rev Author: starseeker Date: 2011-09-13 05:52:05 +0000 (Tue, 13 Sep 2011) Log Message: ----------- Not entirely clear if we can keep CMake's notions of sorting compatible with comm's, but in some early testing this seems to work - a little libbu-ification of netbsd's comm code (very simple if we can get away with it) and presto, distcheck is failing (correctly) in reasonable time. Modified Paths: -------------- brlcad/trunk/misc/CMake/distcheck_buildsys.cmake.in brlcad/trunk/misc/CMakeLists.txt Added Paths: ----------- brlcad/trunk/misc/comm.c Modified: brlcad/trunk/misc/CMake/distcheck_buildsys.cmake.in =================================================================== --- brlcad/trunk/misc/CMake/distcheck_buildsys.cmake.in 2011-09-13 05:01:31 UTC (rev 46670) +++ brlcad/trunk/misc/CMake/distcheck_buildsys.cmake.in 2011-09-13 05:52:05 UTC (rev 46671) @@ -33,7 +33,7 @@ FILE(WRITE @CMAKE_BINARY_DIR@/svn_files_list.txt "${SVN_FILES}") IF(SVN_TREE_MODIFIED) - MESSAGE("\n**** NOTE: Subversion reports modified source files present in the source tree. Distcheck proceeding, but tarball is not suitable for release ***\n") + MESSAGE("\n**** NOTE: Subversion reports modified source files present in the source tree.\n Distcheck proceeding, but tarball is not suitable for release.\n") # TODO - mess with tarball naming so they're not releasable ENDIF(SVN_TREE_MODIFIED) @@ -135,9 +135,11 @@ FILE(READ @CMAKE_BINARY_DIR@/build_files_list.txt BUILD_FILES) FILE(READ @CMAKE_BINARY_DIR@/svn_files_list.txt SVN_FILES) LIST(REMOVE_DUPLICATES BUILD_FILES) +LIST(REMOVE_ITEM SVN_FILES @CMAKE_SOURCE_DIR@) +STRING(REGEX REPLACE "/\\." "/tmpdot" BUILD_FILES "${BUILD_FILES}") +STRING(REGEX REPLACE "/\\." "/tmpdot" SVN_FILES "${SVN_FILES}") LIST(SORT BUILD_FILES) LIST(SORT SVN_FILES) -LIST(REMOVE_ITEM SVN_FILES @CMAKE_SOURCE_DIR@) STRING(REGEX REPLACE ";" "\n" BUILD_FILES "${BUILD_FILES}") STRING(REGEX REPLACE ";" "\n" SVN_FILES "${SVN_FILES}") FILE(WRITE @CMAKE_BINARY_DIR@/build_files_list.txt ${BUILD_FILES}) @@ -145,47 +147,37 @@ STRING(REGEX REPLACE "\n" ";" BUILD_FILES "${BUILD_FILES}") STRING(REGEX REPLACE "\n" ";" SVN_FILES "${SVN_FILES}") -MESSAGE("hello...") -LIST(LENGTH SVN_FILES SVN_LENGTH) -LIST(LENGTH BUILD_FILES BUILD_LENGTH) -SET(SVN_POS 0) -SET(BUILD_POS 0) -WHILE(SVN_POS LESS ${SVN_LENGTH} OR BUILD_POS LESS ${BUILD_LENGTH}) - LIST(GET BUILD_FILES ${BUILD_POS} BUILD_ITEM) - LIST(GET SVN_FILES ${SVN_POS} SVN_ITEM) - IF(NOT ${SVN_ITEM} STREQUAL ${BUILD_ITEM}) - MESSAGE("SVN(${SVN_POS}): ${SVN_ITEM} - BUILD(${BUILD_POS}): ${BUILD_ITEM}") - LIST(FIND BUILD_FILES ${SVN_ITEM} INBUILD) - LIST(FIND SVN_FILES ${BUILD_ITEM} INSVN) - IF(INBUILD STREQUAL "-1") - LIST(APPEND SVN_FILES_NOT_IN_BUILD ${SVN_ITEM}) - LIST(REMOVE_AT SVN_FILES ${SVN_POS}) - LIST(LENGTH SVN_FILES SVN_LENGTH) - #math(EXPR SVN_POS "${SVN_POS} + 1") - ENDIF(INBUILD STREQUAL "-1") - IF(INSVN STREQUAL "-1") - LIST(APPEND BUILD_FILES_NOT_IN_SVN ${BUILD_ITEM}) - LIST(REMOVE_AT BUILD_FILES ${BUILD_POS}) - LIST(LENGTH BUILD_FILES BUILD_LENGTH) - #math(EXPR BUILD_POS "${BUILD_POS} + 1") - ENDIF(INSVN STREQUAL "-1") - ELSE(NOT ${SVN_ITEM} STREQUAL ${BUILD_ITEM}) - math(EXPR SVN_POS "${BUILD_POS} + 1") - math(EXPR BUILD_POS "${BUILD_POS} + 1") - ENDIF(NOT ${SVN_ITEM} STREQUAL ${BUILD_ITEM}) -ENDWHILE(SVN_POS LESS ${SVN_LENGTH} OR BUILD_POS LESS ${BUILD_LENGTH}) +EXECUTE_PROCESS(COMMAND @CMAKE_BINARY_DIR@/@BIN_DIR@/comm -3 @CMAKE_BINARY_DIR@/build_files_list.txt @CMAKE_BINARY_DIR@/svn_files_list.txt OUTPUT_VARIABLE COMM_RAWOUT) +STRING(REGEX REPLACE "\n" ";" COMM_OUT "${COMM_RAWOUT}") +STRING(REGEX REPLACE "/tmpdot" "/\\\\." COMM_OUT "${COMM_OUT}") +STRING(REGEX REPLACE "\\\\" "" COMM_OUT "${COMM_OUT}") +FOREACH(ITEM ${COMM_OUT}) + LIST(FIND BUILD_FILES ${ITEM} INBUILD) + LIST(FIND SVN_FILES ${ITEM} INSVN) + IF(INBUILD STREQUAL "-1" AND NOT INSVN STREQUAL "-1") + LIST(APPEND SVN_FILES_NOT_IN_BUILD ${ITEM}) + LIST(REMOVE_ITEM COMM_OUT ${ITEM}) + ENDIF(INBUILD STREQUAL "-1" AND NOT INSVN STREQUAL "-1") + IF(INSVN STREQUAL "-1" AND NOT INBUILD STREQUAL "-1") + LIST(APPEND BUILD_FILES_NOT_IN_SVN ${ITEM}) + LIST(REMOVE_ITEM COMM_OUT ${ITEM}) + ENDIF(INSVN STREQUAL "-1" AND NOT INBUILD STREQUAL "-1") +ENDFOREACH(ITEM ${COMM_OUT}) + IF(SVN_FILES_NOT_IN_BUILD) - MESSAGE(FATAL_ERROR "Files listed in subversion but not accounted for in build logic: ${SVN_FILES_NOT_IN_BUILD}") + STRING(REGEX REPLACE ";" "\n" SVN_FILES_NOT_IN_BUILD "${SVN_FILES_NOT_IN_BUILD}") + MESSAGE(FATAL_ERROR "Files listed in subversion but not accounted for in build logic: \n${SVN_FILES_NOT_IN_BUILD}\n") ENDIF(SVN_FILES_NOT_IN_BUILD) IF(BUILD_FILES_NOT_IN_SVN) - MESSAGE("Files present in the source tree but not accounted for in Subversion: ${BUILD_FILES_NOT_IN_SVN}") + STRING(REGEX REPLACE ";" "\n" BUILD_FILES_NOT_IN_SVN "${BUILD_FILES_NOT_IN_SVN}") + MESSAGE(FATAL_ERROR "Files present in the build logic but not accounted for in Subversion: \n${BUILD_FILES_NOT_IN_SVN}\n") ENDIF(BUILD_FILES_NOT_IN_SVN) -IF(SVN_FILES OR BUILD_FILES) - MESSAGE(FATAL_ERROR "Unaccounted-for source files present.") -ENDIF(SVN_FILES OR BUILD_FILES) +IF(COMM_OUT) + MESSAGE("Files present in the source tree but not used by the build logic or accounted for in Subversion: \n${COMM_OUT}\n") +ENDIF(COMM_OUT) # TODO - The following lines aren't active yet, and may need more sophisticated logic in the case of multiple # distcheck runs to avoid repeated appendings, but should "tweak" CPack based on the distcheck results. May Modified: brlcad/trunk/misc/CMakeLists.txt =================================================================== --- brlcad/trunk/misc/CMakeLists.txt 2011-09-13 05:01:31 UTC (rev 46670) +++ brlcad/trunk/misc/CMakeLists.txt 2011-09-13 05:52:05 UTC (rev 46671) @@ -49,6 +49,9 @@ ENDIF(BRLCAD-BUILD_DOXYGEN_DOCS) ENDIF(DOXYGEN_FOUND) +include_directories(${BRLCAD_SOURCE_DIR}/include) +BRLCAD_ADDEXEC(comm comm.c libbu) + SET(misc_ignore_files CMake Description.txt Added: brlcad/trunk/misc/comm.c =================================================================== --- brlcad/trunk/misc/comm.c (rev 0) +++ brlcad/trunk/misc/comm.c 2011-09-13 05:52:05 UTC (rev 46671) @@ -0,0 +1,181 @@ + +/* This file is derived from NetBSD's comm implementation */ + +/* + * Copyright (c) 1989, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Case Larsen. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> + +#include <err.h> +#include <limits.h> +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "bu.h" + +#define MAXLINELEN (LINE_MAX + 1) + +char *tabs[] = { "", "\t", "\t\t" }; + +FILE *file(const char *); +void show(FILE *, char *, char *); +void usage(void); + +int +main(int argc, char **argv) +{ + int comp, file1done, file2done, read1, read2; + int ch, flag1, flag2, flag3; + FILE *fp1, *fp2; + char *col1, *col2, *col3; + char **p, line1[MAXLINELEN], line2[MAXLINELEN]; + int (*compare)(const char*,const char*); + + (void)setlocale(LC_ALL, ""); + + file1done = file2done = 0; + flag1 = flag2 = flag3 = 1; + compare = strcoll; + while ((ch = bu_getopt(argc, argv, "123f")) != -1) + switch(ch) { + case '1': + flag1 = 0; + break; + case '2': + flag2 = 0; + break; + case '3': + flag3 = 0; + break; + case 'f': + compare = strcasecmp; + break; + case '?': + default: + usage(); + } + argc -= bu_optind; + argv += bu_optind; + + if (argc != 2) + usage(); + + fp1 = file(argv[0]); + fp2 = file(argv[1]); + + /* for each column printed, add another tab offset */ + p = tabs; + col1 = col2 = col3 = NULL; + if (flag1) + col1 = *p++; + if (flag2) + col2 = *p++; + if (flag3) + col3 = *p; + + for (read1 = read2 = 1;;) { + /* read next line, check for EOF */ + if (read1) + file1done = !fgets(line1, MAXLINELEN, fp1); + if (read2) + file2done = !fgets(line2, MAXLINELEN, fp2); + + /* if one file done, display the rest of the other file */ + if (file1done) { + if (!file2done && col2) + show(fp2, col2, line2); + break; + } + if (file2done) { + if (!file1done && col1) + show(fp1, col1, line1); + break; + } + + /* lines are the same */ + if (!(comp = compare(line1, line2))) { + read1 = read2 = 1; + if (col3) + if (printf("%s%s", col3, line1) < 0) + break; + continue; + } + + /* lines are different */ + if (comp < 0) { + read1 = 1; + read2 = 0; + if (col1) + if (printf("%s%s", col1, line1) < 0) + break; + } else { + read1 = 0; + read2 = 1; + if (col2) + if (printf("%s%s", col2, line2) < 0) + break; + } + } + + if (ferror (stdout) || fclose (stdout) == EOF) + err(1, "stdout"); + + exit(0); +} + +void +show(FILE *fp, char *offset, char *buf) +{ + while (printf("%s%s", offset, buf) >= 0 && fgets(buf, MAXLINELEN, fp)) + ; +} + +FILE * +file(const char *name) +{ + FILE *fp; + + if (!strcmp(name, "-")) + return (stdin); + if ((fp = fopen(name, "r")) == NULL) + err(1, "%s", name); + return (fp); +} + +void +usage(void) +{ + + (void)fprintf(stderr, "usage: comm [-123f] file1 file2\n"); + exit(1); +} Property changes on: brlcad/trunk/misc/comm.c ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |