X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:from:date:message-id:subject:to :content-type; q=dns; s=default; b=at21bwR7XZr3lzdnaoG7mg8S8FCjb zwBKxMoIW4uZSpWpjpS0yq+RT510MnsktDnZRN5pC/OriU7RArvIWZbt6tj+JhtJ //ORg0mI5uVIivG855fz82oIz09x3hgV7S1q3ap7ggkF+tJ/czarulPDw+OARwir W21Y10dlZkDRiU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:from:date:message-id:subject:to :content-type; s=default; bh=54A6mN3bIWUnSFwo+hLOidRbAHI=; b=HJM ZjuNtnA3nQxTqk1AdgDFWqLo5qyv8EgMqS9KUlg4kTSSD/v/Zc01a272aP5hhvNr SgCKSMz4SO2Udhf/iHcBYfbnbEZY4CUPqEhxiLec7f+LeFyFaWmh12Fdyq0x+Quz UtLubIA1G7U95PRMg1ayQ3uJtMeTn3AbA4Ij1DPQ= Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ob0-f175.google.com X-Received: by 10.202.183.70 with SMTP id h67mr5215764oif.19.1414183418235; Fri, 24 Oct 2014 13:43:38 -0700 (PDT) MIME-Version: 1.0 From: Jacob Niehus Date: Fri, 24 Oct 2014 13:43:18 -0700 Message-ID: Subject: cygclang.dll breaks terminal output when used in Python bindings To: cygwin AT cygwin DOT com Content-Type: text/plain; charset=UTF-8 I use a Vim plugin called clang_complete for C/C++ code completion which interfaces with Clang using Clang's python bindings. After updating Cygwin, the terminal output of Vim is garbled as soon as the plugin uses the Clang Python bindings. I tracked down the exact revision (188615) of LLVM/Clang which cause the problem and the diff for that revision is at the bottom of this message. Basically it changes the way it looks up terminal capabilities in such a way that it think Cygwin can't display colors which causes it to change terminal output settings. I was able to fix the problem by installing the libncurses-devel package and recompiling LLVM/Clang. Should libncurses-devel be a dependency of libclang or is there another way to fix this problem? Thanks, Jacob Niehus --- lib/Support/Unix/Process.inc (revision 188614) +++ lib/Support/Unix/Process.inc (revision 188615) @@ -240,10 +240,12 @@ } #ifdef HAVE_TERMINFO -// We manually declare these two extern functions because finding the correct +// We manually declare these extern functions because finding the correct // headers from various terminfo, curses, or other sources is harder than // writing their specs down. extern "C" int setupterm(char *term, int filedes, int *errret); +extern "C" struct term *set_curterm(struct term *termp); +extern "C" int del_curterm(struct term *termp); extern "C" int tigetnum(char *capname); #endif @@ -272,7 +274,15 @@ // // The 'tigetnum' routine returns -2 or -1 on errors, and might return 0 if // the terminfo says that no colors are supported. - if (tigetnum(const_cast("colors")) > 0) + bool HasColors = tigetnum(const_cast("colors")) > 0; + + // Now extract the structure allocated by setupterm and free its memory + // through a really silly dance. + struct term *termp = set_curterm((struct term *)0); + (void)del_curterm(termp); // Drop any errors here. + + // Return true if we found a color capabilities for the current terminal. + if (HasColors) return true; #endif -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple