Search code examples
rubywindowsredcloth

Standalone RedCloth on Windows


Context

I've recently taken part of a software development project for which I'd like technical documents to be written using a textual markup (suitable to be tracked in the code repository, alongside the code). Because the project is already using Redmine, I'd like to use Textile thus avoiding other developers to learn Yet Another Markup Language. I know implementations vary somewhat, so in the spirit of POLS, I would like to use RedCloth, which is used internally by Redmine.

We are developping on and deploying to multiple OSes, including Windows. For lots of convenience, as well as non-technical, non-developer users using Windows only I'd like to be able to compile said technical documents using a standalone tool, preferably deployed as a single installer.

I'm 100% new to Ruby, so please be patient. I don't plan on developing in Ruby for this project, I just want a working install on Windows, I'll take care of the rest from there.

Help wanted

I'm not developing a Rails application and this is for desktop installation, so don't tell me to "just use it on Linux". I have installed the DevKit which installs make, g++ etc. and is accepted by ./configure scripts as a "sane development environment".

I have a simple problem and I'm looking for a simple solution. Googling this problem has shown this problem to has been reported before and I've only found recommendations to switch to Linux, and people that tell me it "just works as advertised".

I'd like some actual help, please, even if it's only in the form of a checklist of possible failure points that I can check.

Environment

This problem occurs on Windows 7, 64-bit machines with no prior history of Ruby installation. I don't have access to a 32-bit at the moment.

Linux installs are not a problem.

Problem

I've just downloaded the Ruby Installer for Windows Ruby 1.9.2-p136 , and the Ruby Development Kit DevKit-tdm-32-4.5.1-20101214-1400-sfx.exe, which is required for compiling RedCloth. Both are the current recommended versions for deploying Ruby on Windows at the moment (or so I've read).

I'm following instructions, and so far so good. Both Ruby and the DevKit are installed in the default paths (no spaces in folder names). config.yml correctly points to the new install and nothing else. ruby dk.rb install runs fine. I can now see, in the Ruby installation folder, a file called lib/ruby/site_ruby/devkit.rb that is, I presume, the compilation pre-hook that sets the path to the DevKit when compiling Ruby gems. The code points to the correct folders, as expected.

When I test the installation with the recommended gem install rdiscount --platform=ruby command, I get this:

C:\DevKit>gem install rdiscount --platform=ruby
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing rdiscount:
        ERROR: Failed to build gem native extension.

"C:/Ruby192/bin/ruby.exe" extconf.rb

This is a little confusing, so I started looking around and I can find the file lib/ruby/gems/1.9.1/gems/rdiscount-1.6.5/ext/extconf.rb file. Running it through ruby extconf.rb in that folder gives me:

Could not create Makefile due to some reason, probably lack of necessary libraries
and/or headers.  Check the mkmf.log file for more details.  You may need
configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=c:/Ruby192/bin/ruby
    --with-rdiscount-dir
    --without-rdiscount-dir
    --with-rdiscount-include
    --without-rdiscount-include=${rdiscount-dir}/include
    --with-rdiscount-lib
    --without-rdiscount-lib=${rdiscount-dir}/lib
c:/Ruby192/lib/ruby/1.9.1/mkmf.rb:678:in `flush': Broken pipe (Errno::EPIPE)
    from c:/Ruby192/lib/ruby/1.9.1/mkmf.rb:678:in `message'
    from c:/Ruby192/lib/ruby/1.9.1/mkmf.rb:690:in `checking_for'
    from c:/Ruby192/lib/ruby/1.9.1/mkmf.rb:796:in `have_func'
    from extconf.rb:5:in `<main>'

I have read somewhere (can't find a link to it right now) that rdiscount doesn't compile on Windows, so I've proceeded with fetching the source code for RedCloth from the source repository (git clone git://github.com/jgarber/redcloth.git), as instructed.

When I try rake install from the given directory, I get errors for missing gems (diff-lcs and others), so I install them using gem install diff-lcs --version '=...' and then I can start the real installation.

When I get there, rake fails the following message:

(in c:/Users/carona/Desktop/redcloth)
rake aborted!
No such file or directory - gem build c:/Users/carona/Desktop/redcloth/redcloth.gemspec 2>&1
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:138:in ``'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:138:in `block in sh_with_code'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:137:in `chdir'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:137:in `sh_with_code'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:129:in `sh'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:42:in `build_gem'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:53:in `install_gem'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.8/lib/bundler/gem_helper.rb:31:in `block in install'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:634:in `call'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:629:in `each'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:629:in `execute'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain'
c:/Ruby192/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:581:in `invoke'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:in `each'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
c:/Ruby192/lib/ruby/1.9.1/rake.rb:1992:in `run'
c:/Ruby192/bin/rake:31:in `<main>'

However, the file c:/Users/carona/Desktop/redcloth/redcloth.gemspec actually does exist, so I have no idea how to go about this.


Solution

  • I've tracked the problem down to two things, the 2nd of which is my "mistake".

    1. The MinGW tools distributed with the DevKit 4.5.1 don't work on Windows 7 64-bit. They seem to have an old version of MinGW which exhibited this problem. Installing up-to-date MinGW tools and using those allowed to compile.
    2. I initially used Git Bash to run gem install RedCloth and this caused some paths to be translated to /C/... instead of C:/ inside the Makefile. Obviously, g++ and friends could not open any of the given files. Re-installing by running ruby and gem from cmd.exe has fixed all the problems.

    I now have a happy install. I've also reported the 1st issue to the RubyInstaller team.