bin/stmkmf.rb
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 15 Jun 2018 23:59:15 +0200
changeset 237 69ab924b97bf
parent 215 b62a3ec9be82
child 257 c6a3ceed613c
permissions -rwxr-xr-x
Rakefiles: fixes to make it working on SWING build slaves ...namely: * fixed `specs\repositories.spec` * fixed `bin\stmkmf.rv` not to include `Make.spec` if there isn't one (lime in `stx/librun`) * removed executable mode on couple files * don't build nor publish artifacts in in "build" pipeline * fixed updating of librun / stc on SWING CI (should not try to download pre-built binaries from CI - this is only for people with no access to stc / librun sources.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
#!/usr/bin/env ruby
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
DOCUMENTATION = <<DOCEND
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Generates a `Makefile` for compiling a Smalltalk/X class library. 
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
DOCEND
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
#
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
# Generates a makefile for a Smalltalk/X package. Return status code
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
# (0 means success)
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
def stmkmf(cwd: '.', out: 'makefile', top: nil)   
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
  if not File.exist? cwd then
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
    STDERR.puts "error: no such directory: #{cwd}"
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
    return 1
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
  if not File.directory? cwd then
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    STDERR.puts "error: not a directory: #{cwd}"
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    return 2
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
  if not File.exist? File.join(cwd, 'Make.proto') then
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
    STDERR.puts "error: could not find Make.proto: #{File.join(cwd, 'Make.proto')}"    
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
    return 3
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
  if top.nil? then 
135
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    24
    # Spuriously it happens the `Make.proto` is somehow corrupted and not properly
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    25
    # UTF8 encoded. This would result in error like
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    26
    #
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    27
    #    `match': invalid byte sequence in UTF-8 (ArgumentError)
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    28
    #
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    29
    # To prevent, replace all invalid character by $?. Not a safest
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    30
    # approach, though.
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    31
    make_proto_contents = File.read(File.join(cwd, 'Make.proto')).encode("UTF-8", :invalid=>:replace, :replace=>"?").encode('UTF-8')
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    32
    match = /^TOP=(.*)$/.match(make_proto_contents)
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    33
    if match.nil? then
215
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    34
      STDERR.puts "error: could not extract TOP from Make.proto (missing TOP=.. definition?)"    
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
      return 4
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    end
215
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    37
    top = match[1].rstrip()
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
  if not File.directory? top then
215
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    40
    require 'pry'
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    41
    require 'pry-byebug'
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    42
    binding.pry
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    43
    STDERR.puts "error: TOP does not exist or not a directory: #{top}"    
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    return 5
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
  makelib = File.join(cwd, top, '..', '..' , 'makelib')
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
  if not File.exist? makelib then
215
b62a3ec9be82 Makefiles: trim trailing whitespaces from TOP in `stmkmf.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 136
diff changeset
    48
    STDERR.puts "error: makefile include library does not exist or not a directory: #{makelib}"
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    return 6
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
  File.open(File.join(cwd, out), "w") do | f |
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    f.puts <<-CONTENTS
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
#  
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
# Do not edit! Automatically generated by stmkmf.
135
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    55
#
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    56
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    57
MAKELIB ?= #{top}/../../makelib
0325651d2b43 Makefiles: use our own makefiles rather than eXept's
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
    58
136
29bd0a3c4a31 Makefiles: configure Smalltalk/X by defining TARGET rather then symlinking a file
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
    59
include $(MAKELIB)/definitions.make
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
237
69ab924b97bf Rakefiles: fixes to make it working on SWING build slaves
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 215
diff changeset
    61
#{File.exists?(File.join(cwd, 'Make.spec')) ? 'include Make.spec' : ''}
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
include Make.proto
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
136
29bd0a3c4a31 Makefiles: configure Smalltalk/X by defining TARGET rather then symlinking a file
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 135
diff changeset
    64
include $(MAKELIB)/rules.make
134
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
CONTENTS
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
  return 0
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
if __FILE__ == $0
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
  require 'optparse'
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
  cwd = '.'
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
  out = 'makefile'
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
  optparser = OptionParser.new do | optparser |
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    optparser.banner = "Usage: stmkmf.rb [options] [stx-top-directory]"
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    optparser.on('-C', '--cd DIRECTORY', "Generates makefile in DIRECTORY. Optional, default is current working cwd.") do | value |
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
      cwd = value
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    optparser.on('-o', '--out FILE', "Write result to FILE. Optional, default is 'makefile'") do | value |
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
      out = value
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    end    
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    optparser.on(nil, '--help', "Prints this message") do
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
      puts DOCUMENTATION
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
      puts optparser.help()
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
      exit 0
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
  end
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
  optparser.parse!
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
  top = ARGV[0] || nil
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
  exit stmkmf(cwd: cwd, out: out, top: top)
78f8c3f3390d Makefiles: Added our own implementation of `stmkmf`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
end