Skip to content
This repository was archived by the owner on Jan 26, 2021. It is now read-only.

Problems on Windows #25

Closed
Fox32 opened this issue Mar 14, 2014 · 7 comments
Closed

Problems on Windows #25

Fox32 opened this issue Mar 14, 2014 · 7 comments

Comments

@Fox32
Copy link

Fox32 commented Mar 14, 2014

I know that the plugin is not supported on Windows at the moment. But I used it for some month till now and it worked good (except the complicated setup).

But somewhere between the latest stable Dart SDK release (version 1.2.0) and the current dev release (version 1.3.0-dev.3.2, I also tested the version before) the whole thing stopped working. If I run it, the following message is outputted:

D:\Projekte\dart\rwar>protoc --dart_out=. --plugin=protoc-gen-dart=tool\pro
toc-gen-dart.bat lib\src\rwar\rwar.proto
--dart_out: protoc-gen-dart: Plugin output is unparseable: z\262j\r\n,/lib/src/rawr/rwar.pb.dartz\201j///\r\n//  Generated code. Do not modify
.\r\n///\r\nlibrary rawr;\r\n\r\nimport \'package:fixnum/fixnum.dart\'
;\r\nimport \'package:protobuf/protobuf.dart\';\r\nimport \'../rawr/chat_
messages.pb.dart\';\r\n\r\nclass AuthenticationChallengeRequest extends Generate
dMessage {\r\n  static final BuilderInfo _i = new BuilderInfo(\'AuthenticationCh
allengeRequest\')\r\n    ..a(1, \'challengeRequest\', GeneratedMessage.QS)\r\n
;\r\n\r\n  AuthenticationChallengeRequest() : super();\r\n  AuthenticationChalle
ngeRequest.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPT
Y]) : super.fromBuffer(i, r);\r\n  AuthenticationChallengeRequest.fromJson(Strin
g i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\r\
n  AuthenticationChallengeRequest clone() => new AuthenticationChallengeRequest(
)..mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  String get
 challengeRequest => getField(1);\r\n  void set challengeRequest(String v) { set
Field(1, v); }\r\n  bool hasChallengeRequest() => hasField(1);\r\n  void clearCh
allengeRequest() => clearField(1);\r\n}\r\n\r\nclass AuthenticationChallengeResp
onse extends GeneratedMessage {\r\n  static final BuilderInfo _i = new BuilderIn
fo(\'AuthenticationChallengeResponse\')\r\n    ..a(1, \'username\', GeneratedMes
sage.QS)\r\n    ..a(2, \'challengeResponse\', GeneratedMessage.QY)\r\n  ;\r\n\r\
n  AuthenticationChallengeResponse() : super();\r\n  AuthenticationChallengeResp
onse.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) :
super.fromBuffer(i, r);\r\n  AuthenticationChallengeResponse.fromJson(String i,
[ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\r\n  Au
thenticationChallengeResponse clone() => new AuthenticationChallengeResponse()..
mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  String get us
ername => getField(1);\r\n  void set username(String v) { setField(1, v); }\r\n
 bool hasUsername() => hasField(1);\r\n  void clearUsername() => clearField(1);\
r\n\r\n  List<int> get challengeResponse => getField(2);\r\n  void set challenge
Response(List<int> v) { setField(2, v); }\r\n  bool hasChallengeResponse() => ha
sField(2);\r\n  void clearChallengeResponse() => clearField(2);\r\n}\r\n\r\nclas
s InitialCallMessage extends GeneratedMessage {\r\n  static final BuilderInfo _i
 = new BuilderInfo(\'InitialCallMessage\')\r\n    ..a(1, \'worldPath\', Generate
dMessage.QS)\r\n    ..a(2, \'startTime\', GeneratedMessage.QU6, () => makeLongIn
t(0))\r\n  ;\r\n\r\n  InitialCallMessage() : super();\r\n  InitialCallMessage.fr
omBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.f
romBuffer(i, r);\r\n  InitialCallMessage.fromJson(String i, [ExtensionRegistry r
 = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\r\n  InitialCallMessage clo
ne() => new InitialCallMessage()..mergeFromMessage(this);\r\n  BuilderInfo get i
nfo_ => _i;\r\n\r\n  String get worldPath => getField(1);\r\n  void set worldPat
h(String v) { setField(1, v); }\r\n  bool hasWorldPath() => hasField(1);\r\n  vo
id clearWorldPath() => clearField(1);\r\n\r\n  Int64 get startTime => getField(2
);\r\n  void set startTime(Int64 v) { setField(2, v); }\r\n  bool hasStartTime()
 => hasField(2);\r\n  void clearStartTime() => clearField(2);\r\n}\r\n\r\nclass
LoggerCallMessage extends GeneratedMessage {\r\n  static final BuilderInfo _i =
new BuilderInfo(\'LoggerCallMessage\')\r\n    ..m(1, \'logRecords\', () => new L
ogRecordMessage(), () => new PbList<LogRecordMessage>())\r\n  ;\r\n\r\n  LoggerC
allMessage() : super();\r\n  LoggerCallMessage.fromBuffer(List<int> i, [Extensio
nRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);\r\n  LoggerCal
lMessage.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : s
uper.fromJson(i, r);\r\n  LoggerCallMessage clone() => new LoggerCallMessage()..
mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  List<LogRecor
dMessage> get logRecords => getField(1);\r\n}\r\n\r\nclass LogRecordMessage exte
nds GeneratedMessage {\r\n  static final BuilderInfo _i = new BuilderInfo(\'LogR
ecordMessage\')\r\n    ..a(1, \'level\', GeneratedMessage.QU3)\r\n    ..a(2, \'l
oggerName\', GeneratedMessage.QS)\r\n    ..a(3, \'message\', GeneratedMessage.QS
)\r\n    ..a(4, \'time\', GeneratedMessage.QU6, () => makeLongInt(0))\r\n    ..a
(5, \'sequenceNumber\', GeneratedMessage.QU6, () => makeLongInt(0))\r\n    ..a(6
, \'errorMessage\', GeneratedMessage.OS)\r\n  ;\r\n\r\n  LogRecordMessage() : su
per();\r\n  LogRecordMessage.fromBuffer(List<int> i, [ExtensionRegistry r = Exte
nsionRegistry.EMPTY]) : super.fromBuffer(i, r);\r\n  LogRecordMessage.fromJson(S
tring i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r)
;\r\n  LogRecordMessage clone() => new LogRecordMessage()..mergeFromMessage(this
);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  int get level => getField(1);\r\n
 void set level(int v) { setField(1, v); }\r\n  bool hasLevel() => hasField(1);\
r\n  void clearLevel() => clearField(1);\r\n\r\n  String get loggerName => getFi
eld(2);\r\n  void set loggerName(String v) { setField(2, v); }\r\n  bool hasLogg
erName() => hasField(2);\r\n  void clearLoggerName() => clearField(2);\r\n\r\n
String get message => getField(3);\r\n  void set message(String v) { setField(3,
 v); }\r\n  bool hasMessage() => hasField(3);\r\n  void clearMessage() => clearF
ield(3);\r\n\r\n  Int64 get time => getField(4);\r\n  void set time(Int64 v) { s
etField(4, v); }\r\n  bool hasTime() => hasField(4);\r\n  void clearTime() => cl
earField(4);\r\n\r\n  Int64 get sequenceNumber => getField(5);\r\n  void set seq
uenceNumber(Int64 v) { setField(5, v); }\r\n  bool hasSequenceNumber() => hasFie
ld(5);\r\n  void clearSequenceNumber() => clearField(5);\r\n\r\n  String get err
orMessage => getField(6);\r\n  void set errorMessage(String v) { setField(6, v);
 }\r\n  bool hasErrorMessage() => hasField(6);\r\n  void clearErrorMessage() =>
clearField(6);\r\n}\r\n\r\nclass ChatCallMessage extends GeneratedMessage {\r\n
 static final BuilderInfo _i = new BuilderInfo(\'ChatCallMessage\')\r\n    ..m(1
, \'chatMessages\', () => new ChatMessage(), () => new PbList<ChatMessage>())\r\
n    ..hasRequiredFields = false\r\n  ;\r\n\r\n  ChatCallMessage() : super();\r\
n  ChatCallMessage.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegis
try.EMPTY]) : super.fromBuffer(i, r);\r\n  ChatCallMessage.fromJson(String i, [E
xtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\r\n  Chat
CallMessage clone() => new ChatCallMessage()..mergeFromMessage(this);\r\n  Build
erInfo get info_ => _i;\r\n\r\n  List<ChatMessage> get chatMessages => getField(
1);\r\n}\r\n\r\nclass PlayersCallMessage extends GeneratedMessage {\r\n  static
final BuilderInfo _i = new BuilderInfo(\'PlayersCallMessage\')\r\n    ..m(1, \'p
layers\', () => new PlayerMessage(), () => new PbList<PlayerMessage>())\r\n  ;\r
\n\r\n  PlayersCallMessage() : super();\r\n  PlayersCallMessage.fromBuffer(List<
int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r
);\r\n  PlayersCallMessage.fromJson(String i, [ExtensionRegistry r = ExtensionRe
gistry.EMPTY]) : super.fromJson(i, r);\r\n  PlayersCallMessage clone() => new Pl
ayersCallMessage()..mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\
n\r\n  List<PlayerMessage> get players => getField(1);\r\n}\r\n\r\nclass Announc
ementCallMessage extends GeneratedMessage {\r\n  static final BuilderInfo _i = n
ew BuilderInfo(\'AnnouncementCallMessage\')\r\n    ..a(1, \'text\', GeneratedMes
sage.QS)\r\n  ;\r\n\r\n  AnnouncementCallMessage() : super();\r\n  AnnouncementC
allMessage.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPT
Y]) : super.fromBuffer(i, r);\r\n  AnnouncementCallMessage.fromJson(String i, [E
xtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\r\n  Anno
uncementCallMessage clone() => new AnnouncementCallMessage()..mergeFromMessage(t
his);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  String get text => getField(1);
\r\n  void set text(String v) { setField(1, v); }\r\n  bool hasText() => hasFiel
d(1);\r\n  void clearText() => clearField(1);\r\n}\r\n\r\nclass PlayerMessage ex
tends GeneratedMessage {\r\n  static final BuilderInfo _i = new BuilderInfo(\'Pl
ayerMessage\')\r\n    ..a(1, \'name\', GeneratedMessage.QS)\r\n    ..a(2, \'conn
ectedTime\', GeneratedMessage.QU6, () => makeLongInt(0))\r\n    ..a(3, \'address
\', GeneratedMessage.QS)\r\n    ..a(4, \'ping\', GeneratedMessage.Q3)\r\n    ..a
(5, \'muted\', GeneratedMessage.QB)\r\n  ;\r\n\r\n  PlayerMessage() : super();\r
\n  PlayerMessage.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegist
ry.EMPTY]) : super.fromBuffer(i, r);\r\n  PlayerMessage.fromJson(String i, [Exte
nsionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\r\n  PlayerM
essage clone() => new PlayerMessage()..mergeFromMessage(this);\r\n  BuilderInfo
get info_ => _i;\r\n\r\n  String get name => getField(1);\r\n  void set name(Str
ing v) { setField(1, v); }\r\n  bool hasName() => hasField(1);\r\n  void clearNa
me() => clearField(1);\r\n\r\n  Int64 get connectedTime => getField(2);\r\n  voi
d set connectedTime(Int64 v) { setField(2, v); }\r\n  bool hasConnectedTime() =>
 hasField(2);\r\n  void clearConnectedTime() => clearField(2);\r\n\r\n  String g
et address => getField(3);\r\n  void set address(String v) { setField(3, v); }\r
\n  bool hasAddress() => hasField(3);\r\n  void clearAddress() => clearField(3);
\r\n\r\n  int get ping => getField(4);\r\n  void set ping(int v) { setField(4, v
); }\r\n  bool hasPing() => hasField(4);\r\n  void clearPing() => clearField(4);
\r\n\r\n  bool get muted => getField(5);\r\n  void set muted(bool v) { setField(
5, v); }\r\n  bool hasMuted() => hasField(5);\r\n  void clearMuted() => clearFie
ld(5);\r\n}\r\n\r\nclass KickPlayerCallMessage extends GeneratedMessage {\r\n  s
tatic final BuilderInfo _i = new BuilderInfo(\'KickPlayerCallMessage\')\r\n    .
.a(1, \'name\', GeneratedMessage.QS)\r\n  ;\r\n\r\n  KickPlayerCallMessage() : s
uper();\r\n  KickPlayerCallMessage.fromBuffer(List<int> i, [ExtensionRegistry r
= ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);\r\n  KickPlayerCallMessage
.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fro
mJson(i, r);\r\n  KickPlayerCallMessage clone() => new KickPlayerCallMessage()..
mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  String get na
me => getField(1);\r\n  void set name(String v) { setField(1, v); }\r\n  bool ha
sName() => hasField(1);\r\n  void clearName() => clearField(1);\r\n}\r\n\r\nclas
s TogglePlayerMuteCallMessage extends GeneratedMessage {\r\n  static final Build
erInfo _i = new BuilderInfo(\'TogglePlayerMuteCallMessage\')\r\n    ..a(1, \'nam
e\', GeneratedMessage.QS)\r\n  ;\r\n\r\n  TogglePlayerMuteCallMessage() : super(
);\r\n  TogglePlayerMuteCallMessage.fromBuffer(List<int> i, [ExtensionRegistry r
 = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);\r\n  TogglePlayerMuteCall
Message.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : su
per.fromJson(i, r);\r\n  TogglePlayerMuteCallMessage clone() => new TogglePlayer
MuteCallMessage()..mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\n
\r\n  String get name => getField(1);\r\n  void set name(String v) { setField(1,
 v); }\r\n  bool hasName() => hasField(1);\r\n  void clearName() => clearField(1
);\r\n}\r\n\r\nclass StatisticsCallMessage extends GeneratedMessage {\r\n  stati
c final BuilderInfo _i = new BuilderInfo(\'StatisticsCallMessage\')\r\n    ..m(1
, \'statisticsValues\', () => new StatisticsValueMessage(), () => new PbList<Sta
tisticsValueMessage>())\r\n  ;\r\n\r\n  StatisticsCallMessage() : super();\r\n
StatisticsCallMessage.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRe
gistry.EMPTY]) : super.fromBuffer(i, r);\r\n  StatisticsCallMessage.fromJson(Str
ing i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);\
r\n  StatisticsCallMessage clone() => new StatisticsCallMessage()..mergeFromMess
age(this);\r\n  BuilderInfo get info_ => _i;\r\n\r\n  List<StatisticsValueMessag
e> get statisticsValues => getField(1);\r\n}\r\n\r\nclass StatisticsValueMessage
 extends GeneratedMessage {\r\n  static final BuilderInfo _i = new BuilderInfo(\
'StatisticsValueMessage\')\r\n    ..a(1, \'name\', GeneratedMessage.QS)\r\n    .
.a(2, \'time\', GeneratedMessage.QD)\r\n    ..a(3, \'valueNumber\', GeneratedMes
sage.OD)\r\n    ..m(4, \'valueNumberMap\', () => new StatisticsValueMapMessage()
, () => new PbList<StatisticsValueMapMessage>())\r\n  ;\r\n\r\n  StatisticsValue
Message() : super();\r\n  StatisticsValueMessage.fromBuffer(List<int> i, [Extens
ionRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);\r\n  Statist
icsValueMessage.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPT
Y]) : super.fromJson(i, r);\r\n  StatisticsValueMessage clone() => new Statistic
sValueMessage()..mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i;\r\n\r
\n  String get name => getField(1);\r\n  void set name(String v) { setField(1, v
); }\r\n  bool hasName() => hasField(1);\r\n  void clearName() => clearField(1);
\r\n\r\n  double get time => getField(2);\r\n  void set time(double v) { setFiel
d(2, v); }\r\n  bool hasTime() => hasField(2);\r\n  void clearTime() => clearFie
ld(2);\r\n\r\n  double get valueNumber => getField(3);\r\n  void set valueNumber
(double v) { setField(3, v); }\r\n  bool hasValueNumber() => hasField(3);\r\n  v
oid clearValueNumber() => clearField(3);\r\n\r\n  List<StatisticsValueMapMessage
> get valueNumberMap => getField(4);\r\n}\r\n\r\nclass StatisticsValueMapMessage
 extends GeneratedMessage {\r\n  static final BuilderInfo _i = new BuilderInfo(\
'StatisticsValueMapMessage\')\r\n    ..a(1, \'name\', GeneratedMessage.QS)\r\n
  ..a(2, \'value\', GeneratedMessage.QD)\r\n  ;\r\n\r\n  StatisticsValueMapMessa
ge() : super();\r\n  StatisticsValueMapMessage.fromBuffer(List<int> i, [Extensio
nRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);\r\n  Statistic
sValueMapMessage.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMP
TY]) : super.fromJson(i, r);\r\n  StatisticsValueMapMessage clone() => new Stati
sticsValueMapMessage()..mergeFromMessage(this);\r\n  BuilderInfo get info_ => _i
;\r\n\r\n  String get name => getField(1);\r\n  void set name(String v) { setFie
ld(1, v); }\r\n  bool hasName() => hasField(1);\r\n  void clearName() => clearFi
eld(1);\r\n\r\n  double get value => getField(2);\r\n  void set value(double v)
{ setField(2, v); }\r\n  bool hasValue() => hasField(2);\r\n  void clearValue()
=> clearField(2);\r\n}\r\n\r\n

Maybe releated to some changes to console IO I saw in the commit log of the Dart repository some days ago?

@osstekz
Copy link

osstekz commented Mar 26, 2014

You mentioned it was a complicated setup and I'm sure it was. I would like to try and get it running on windows as well. Could you share some of the steps you took to get the plugin running to this point?

@Fox32
Copy link
Author

Fox32 commented Mar 26, 2014

First thing: building via makefile doesn't work on windows, as it is designed for posix systems.
Here are the steps I take:

  1. protoc is in %PATH%
  2. Clone it (or download)
  3. pub get
  4. Have another file called protoc-gen-dart.bat at a fixed place, for example in your tool\ directory of your package:
@echo off
dart "absolute path to dart-protoc-plugin"\bin\protoc_plugin.dart

(Putting it into %PATH% didn't work, you need to access it by a relative url. In my setup I have a additional batch file in PATH that is redirected to, to avoid having a absolute path in my package.)

  1. Call it via protoc --dart_out=. --plugin=protoc-gen-dart=tool\\protoc-gen-dart.bat filename.proto

Good luck! Try it with the last stable version 1.2.0 so you don't get the error message reported above.

@generateui
Copy link

I have not been able to make this work.

For multiple projects on multiple contexts (work, hobby, freelance clients) it would be a very welcome fix.

@Fox32
Copy link
Author

Fox32 commented Dec 18, 2014

The plugin could be useable on Windows if https://code.google.com/p/protobuf/issues/detail?id=399 is fixed in protoc.

@jakobr-google
Copy link
Contributor

Referenced issue was fixed, so hopefully things are slightly better. Closing as a dup of #10, since we still don't have real Windows support.

If anyone wants to step up, I'd love to see some PRs! Or, at least, more concrete issues.

@dss539
Copy link

dss539 commented Mar 11, 2018

@jakobr-google please see my latest comment on #10

So far, this appear to generate perfectly correct dart files on Windows.
I don't know a cleaner way address it, but at least you might mention this workaround in the docs.

@sigurdm
Copy link
Contributor

sigurdm commented Sep 11, 2018

After protocolbuffers/protobuf#5105 has come into a release you should be able to pub global activate protoc_plugin, add the pub cache to your path and run protoc --dart_out=....

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Development

No branches or pull requests

6 participants