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 🍕
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.