From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-4.1 required=3.0 tests=AWL,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id B7C321F4B4 for ; Sat, 10 Apr 2021 06:18:17 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 909C0120D08; Sat, 10 Apr 2021 15:17:13 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 623A7120D02 for ; Sat, 10 Apr 2021 15:17:12 +0900 (JST) Received: by filterdrecv-59db977c98-dlbmx with SMTP id filterdrecv-59db977c98-dlbmx-14-60714322-3B 2021-04-10 06:18:10.851443118 +0000 UTC m=+1343646.030182845 Received: from herokuapp.com (unknown) by ismtpd0144p1mdw1.sendgrid.net (SG) with ESMTP id KkSOqsQhTKiWq-j5DashXQ for ; Sat, 10 Apr 2021 06:18:10.694 +0000 (UTC) Date: Sat, 10 Apr 2021 06:18:10 +0000 (UTC) From: nobu@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 79412 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Bug X-Redmine-Issue-Id: 16651 X-Redmine-Issue-Author: cfis X-Redmine-Sender: nobu X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?q8Dly+pU2+3ektTtZVXgZtbJPXwqo7p86jCsvYTW4Bx2upPSsEDfrTHexdKxMF?= =?us-ascii?Q?QuJrhbe9px4MRFllU8TSQTxDQMSd09SFQztJ+wf?= =?us-ascii?Q?n6ppzQ2kHK=2FswkE4CChOYMyd0HyPjwRIMuITG+B?= =?us-ascii?Q?ECmhHUlBIDsflQB=2FOZMD+Q26HO5rxHt9Wp6Z9=2Fp?= =?us-ascii?Q?Iuyb+nl+R9o8Zaemz6IMA6EsJ6eoendk+Hw=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 103365 Subject: [ruby-core:103365] [Ruby master Bug#16651] Extensions Do Not Compile on Mingw64 with mingw64-make X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #16651 has been updated by nobu (Nobuyoshi Nakada). Building io-console with 2.7.2 from RubyInstaller: ``` $ ruby -v ../src/ext/io/console/extconf.rb ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32] checking for HAVE_RUBY_FIBER_SCHEDULER_H... no checking for rb_scheduler_timeout()... no creating Makefile $ grep -e ^topdir -e ^arch_hdrdir Makefile topdir = /C/Ruby27-x64/include/ruby-2.7.0 arch_hdrdir = C:/Ruby27-x64/include/ruby-2.7.0/x64-mingw32 $ make compiling ../src/ext/io/console/console.c linking shared-object io/console.so ``` It succeeds with no problem. `/C/` is not wrong in msys make, I'm not sure why the first description had the wrong path without the leading slash. ---------------------------------------- Bug #16651: Extensions Do Not Compile on Mingw64 with mingw64-make https://bugs.ruby-lang.org/issues/16651#change-91456 * Author: cfis (Charlie Savage) * Status: Open * Priority: Normal * ruby -v: ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x64-mingw32] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- When mkmf.rb creates a Makefile for an extension, it will generate something that looks like this: ```makefile srcdir = . topdir = C/MSYS64/USR/LOCAL/ruby-2.7.0/include/ruby-2.7.0 hdrdir = $(topdir) arch_hdrdir = C:/MSYS64/USR/LOCAL/ruby-2.7.0/include/ruby-2.7.0/x64-mingw32 ``` Notice the topdir path is c/ without the ":" Its only the topdir that does this, all other paths in the makefile use the "c:/" style. mkmf.rb intentionally does that, see line 1098: ```ruby def mkintpath(path) # mingw uses make from msys and it needs special care # converts from C:\some\path to /C/some/path path = path.dup path.tr!('\\', '/') path.sub!(/\A([A-Za-z]):(?=\/)/, '/\1') <-------- This line path end ``` But this is wrong, and causes errors like this (this is compiling the debase gem but it doesn't matter what c extension you use): ``` make: *** No rule to make target 'C/MSYS64/USR/LOCAL/ruby-2.7.0/include/ruby-2.7.0/ruby.h', needed by 'breakpoint.o'. Stop. ``` The fix is simple, just delete that line. The makefile should look like this: ```makefile srcdir = . topdir = C:/MSYS64/USR/LOCAL/ruby-2.7.0/include/ruby-2.7.0 hdrdir = $(topdir) arch_hdrdir = C:/MSYS64/USR/LOCAL/ruby-2.7.0/include/ruby-2.7.0/x64-mingw32 ``` Note I'm not the first person to see this, but I've just been manually fixing it over the years. Would be good to really fix it. https://github.com/oneclick/rubyinstaller2/issues/105 https://github.com/oneclick/rubyinstaller2/issues/47 https://github.com/tmm1/http_parser.rb/issues/55 Note some of those tickets put the blame on using mingw-make versus msys make. But on my system, neither work with the "c/" style path but both work with the "c:/" style path. -- https://bugs.ruby-lang.org/