Porting and stuff

New version v1.1 is out with a bug fix and BSD support! The porting was not hard, but I felt like writing about it either way.

Preprocesor fix

So I used the crystal preprocessor to call POSIX commands on Linux and Powershell ones on Windows.

if Data.output_mode == :pdf || Data.output_mode == :latex
   {% if flag?(:linux) %}
      abort "xelatex not found" if `which xelatex`.empty?
   {% else %}
      if `powershell -command "get-command ptts -ErrorAction silentlyContinue"`.empty?
         abort "xelatex not found"
      end
   {% end %}
end

This of course breaks stuff on all other systems, so I changed it to:

if Data.output_mode == :pdf || Data.output_mode == :latex
   {% unless flag?(:windows) %}
      abort "xelatex not found" if `which xelatex`.empty?
   {% else %}
      if `powershell -command "get-command ptts -ErrorAction silentlyContinue"`.empty?
         abort "xelatex not found"
      end
   {% end %}
end

Way better!

Version problems

In newer versions of crystal, you use the following function to determine whether a file exists:

File::Info.readable? "filename"

FreeBSD however ships version 1.10.1, where you use just:

File.readable? "filename"

I solved this problem with the following:

{% if compare_versions(Crystal::VERSION, "1.13.0") == -1 %}
   abort "file not readable: #{filename}" unless File.readable? filename
{% else %}
   abort "file not readable: #{filename}" unless File::Info.readable? filename
{% end %}

It might break in some versions, but it compiled on Debian, so i should not be problem on linux machines.

Directory structute

FreeBSD does not have '/usr/share/fonts/' so I added a check if a font directory exists, which sould have been there from the start.

Distribution

I renamed the 'install-linux.sh' to 'install-unix.sh' and it now tells you where it installed the program in case it's not in your $PATH.

I also had to recompile the Windows version, which is documented here.