Libsass: Problemas para compilar o libsass no Windows

Criado em 27 jul. 2016  ·  9Comentários  ·  Fonte: sass/libsass

Sou o mantenedor de código aberto do Sprockets. Estou tentando obter suporte nativo para sassc (libsass), aqui está o PR: https://github.com/rails/sprockets/pull/349. Acontece que o sassc-ruby não funciona em janelas. Estou tentando consertar isso, mas antes de conseguir, não consigo compilar no appveyor (PR para teste em meu fork https://github.com/schneems/sassc-ruby/pull/1). Aqui está a discussão relacionada ao Windows: https://github.com/sass/sassc-ruby/issues/18#issuecomment -235334834.

Esse é o pano de fundo.

Estou aqui para pedir ajuda para obter a compilação do libsass no appveyor para a gem sassc-ruby. Este não é um "problema" por dizer, mas sim um pedido. Não posso oferecer muito em troca a não ser apoiar o libsass para usuários de sprockets, também posso comprar uma pizza para entrega (sério, já fiz isso antes). Preciso de ajuda para levar o sassc-ruby a um lugar onde possa compilar libsass no appveyor.

Tentei algumas coisas sobre esse assunto, mas estou quase sempre atirando no escuro. O makefile atual não instala com nmake devido a reclamações de sintaxe. Eu olhei para appveyor.yml deste projeto, mas parece suficientemente complicado, eu não sei totalmente o que está acontecendo. Tentei instalar uma VM do Windows localmente, mas tive um problema quando não havia mingw32-make e o comando msbuild falhou.

> msbuild win/libsass.sln

Dá-me:

Alguma ideia sobre a melhor maneira de avançar, obtendo a libsass para compilar para testar o sassc-ruby no Windows? Qualquer ajuda é muito apreciada.

ps Sério sobre o 🍕

Discussion - Question

Todos 9 comentários

Você me comeu na pizza. Mas, sério, estou animado para ver isso acontecendo nas rodas dentadas. @ am11, como nosso especialista residente em Windows, você tem alguma idéia do que poderia estar acontecendo?

msbuild win / libsass.sln

Se você tiver certeza de que este MSBuild em PATH corresponde à versão do VS que você instalou (ou seja, executando msbuild /version ), então este comando é suficiente para construir LibSass na configuração de depuração. Passar /p:Configuration=Release para o comando irá construir a lib compartilhada na configuração do Release. Você também pode tentar invocar o MSBuild com o caminho absoluto de acordo com o documento de construção: https://github.com/sass/libsass/blob/master/docs/build-with-visual-studio.md#from -powershell

Se você ainda estiver tendo o mesmo problema, o Google retorna a seguinte solução alternativa para o código de erro, TRK0005:
https://blogs.msdn.microsoft.com/deva/2015/03/24/after-migration-vs-2013-c-project-throws-error-trk0005-failed-to-locate-cl-exe-the- sistema-não-consegue-encontrar-o-arquivo-especificado /

BTW, para a caixa de compilação local para testar o status do Windows etc .; se você não quiser o VS, você pode apenas ter Build Tools for VC instalado para compilar projetos C / C ++ estritamente via linha de comando - absolutamente sem GUI gloriosa: http://landinghub.visualstudio.com/visual-cpp-build -Ferramentas

Só estou chegando a este comentário agora. Eu vou dar uma chance a isso. Muito obrigado! Manterá o problema atualizado.

Em primeiro lugar, obrigado também pelo suporte das janelas. É uma responsabilidade enorme e as poucas vezes que tive que fazer patches de compatibilidade com o Windows, fico grato a quem tem experiência lá.

Como uma observação lateral, parece que o makefile contém algum código específico da janela: https://github.com/sass/libsass/blob/6610e815ff77600fedf22bf10541d08d70f94218/Makefile#L26 -L42 este arquivo funcionou com o nmake ao mesmo tempo?

Olá, sobre a observação lateral: acho que esse código foi feito para suporte a MinGW / Cygwin Makefile e @mgreter provavelmente pode confirmá-lo. nmake Makefile é uma entidade diferente e muito provavelmente ainda é enviado apenas para apoiar os projetos antigos. O MSBuild foi apresentado como um sistema de compilação "moderno", portanto, nos esforçamos para oferecer suporte a esse formato XML.

Provavelmente podemos mudar para CMake em algum ponto para encapsular os sistemas de construção subjacentes. No entanto, um arquivo Makefile e arquivos vcxproj escritos à mão foi preferido inicialmente, mas se estiver causando esforço para os consumidores posteriores, devemos dar uma olhada no CMake. @mgreter colocou um grande esforço na área de construção do sistema.

Estou de férias e me abstendo de me aproximar dos computadores por mais seis dias ... mas aqui estamos nós! 😄 Vou tentar acompanhar o desenvolvimento de engrenagens e contribuir. Eu usei essa joia antigamente com Rails 2x e fico feliz em ver que ela ainda está de pé. Obrigado por seus esforços @schneems! 👍

Ei, estou tentando evitar postar devido às férias (eu realmente gostaria que o github tivesse um OOO ou o recurso Não perturbe). Não se preocupe em responder enquanto estiver ausente.

Seu conselho foi ótimo e funcionou, também encontrei este documento https://github.com/sass/libsass/blob/master/docs/build-on-windows.md (tarde demais) que reconfirmou muitas coisas que você me disse. Eu tenho uma compilação funcionando e acredito que a vinculei corretamente usando a interface Ruby FFI, agora estou recebendo um segfault quando chamo a lib. Pode ser um problema com a interface Ruby FFI, um problema com o código sassc-ruby glue ou um problema com a construção de libsass em uma dll.

Não acho que você deva saber nada sobre Ruby, mas talvez você possa ajudar com esse último. Existe alguma maneira de verificar se a dll que fiz funciona ou é válida?

Avise-me quando voltar, espero que esteja aproveitando o tempo livre.

@schneems bom saber que as coisas estão melhorando. Obrigado por fornecer todas as informações necessárias para solucionar isso em sua solicitação pull - isso é muito útil. Você pode tentar usar o kit de ferramentas MinGW para criar libsass em vez do Visual Studio? Deixei o comentário no local apropriado.

@schneems , acabei de encontrar a documentação do DevKit: http://github.com/oneclick/rubyinstaller/wiki/Development-Kit e o fato de ser baseado no MinGW.

Em seguida, instalei o Ruby 2.3.0 e o DevKit na minha VM local e, em seguida, adicionei C:\tools\ruby23\devkit\bin e C:\tools\ruby23\devkit\mingw\bin no PATH.

Depois disso, apliquei a seguinte diferença em cima de https://github.com/schneems/sassc-ruby/commit/85ed6730341c18b9e700a6e717be84461389fdc4 :

diff --git a/lib/sassc/native.rb b/lib/sassc/native.rb
index 261daba..b52b0c2 100644
--- a/lib/sassc/native.rb
+++ b/lib/sassc/native.rb
@@ -6,12 +6,7 @@ module SassC

     spec = Gem.loaded_specs["sassc"]
     gem_root = spec.gem_dir
-    if RUBY_PLATFORM =~ /mswin|mingw/
-      libsass_path = "#{gem_root}/ext/libsass/win/bin/libsass.dll"
-    else
-      libsass_path = "#{gem_root}/ext/libsass/lib/libsass.so"
-    end
-    ffi_lib libsass_path
+    ffi_lib "#{gem_root}/ext/libsass/lib/libsass.so"

     require_relative "native/sass_value"

diff --git a/lib/tasks/libsass.rb b/lib/tasks/libsass.rb
index 3542d8f..e439820 100644
--- a/lib/tasks/libsass.rb
+++ b/lib/tasks/libsass.rb
@@ -20,7 +20,7 @@ namespace :libsass do
     make_program = ENV['MAKE']
     make_program ||= case RUBY_PLATFORM
                      when /mswin|mingw/
-                       'msbuild /m:4 /p:Configuration=Release win/libsass.sln'
+                       'make lib/libsass.so'
                      when /(bsd|solaris)/
                        'gmake lib/libsass.so'
                      else

Quando executei $CC="gcc" ; bundle exec rake test no PowerShell no Windows 10 x64, ele passou:

Run options: --seed 1950

# Running:

********************************S*************************

Fabulous run in 0.174091s, 333.1591 runs/s, 539.9475 assertions/s.

58 runs, 94 assertions, 0 failures, 0 errors, 1 skips

Acho que seu script AppVeyor não precisaria de nenhuma alteração. _Talvez_ você precise adicionar CC assim:

environment:
  global:
    CC: gcc
  matrix:
  ..

@schneems as informações de @ am11 acima resolvem seu problema?

Desculpe pelo atraso. Eu continuo me afastando desse projeto. Vou encerrar isso agora para não obstruir seus problemas. Obrigado pela ajuda. Espero voltar a isso em breve.

Esta página foi útil?
0 / 5 - 0 avaliações