Module: MavenToPKGBUILD

Defined in:
lib/MavenToPKGBUILD.rb,
lib/MavenToPKGBUILD/version.rb

Constant Summary collapse

VERSION =
"0.1.7"

Instance Method Summary collapse

Instance Method Details

#build(name, groupid, version, artifactid, options) ⇒ Object

arch=“x86_64”, full=false, compact=false)



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/MavenToPKGBUILD.rb', line 15

def build(name, groupid, version, artifactid, options) # arch="x86_64", full=false, compact=false)

  ## Arguments, Pom variables
  @artifactid = artifactid
  @version = version
  @groupid = groupid

  puts "Name : " + name.to_s
  if name.nil?
    @name = artifactid
  else
    @name = name
  end
  @foldername = @name

  ## Options
  @arch = options.fetch :arch, "x86_64"
  @full = options.fetch :full, false
  @compact = options.fetch :compact, false

  ## PKGBUILD variables
  ## Sometimes there are quotes in version names.
  @pkgversion = @version.to_s.delete_prefix("'").delete_suffix("'")
  @pkgarch = "any" 
  @pkgrel = options.fetch :version, "1"
  @compact_pkg = @compact ? "-compact" : ""

  
  ## JavaCPP variables
  @javacppversion = ""
  @platform = "linux"
  @javacpp = false

  puts "Starting to build #{@name}, #{@groupid}, #{@version}, #{@artifactid}. "
  
  if(@groupid.eql? "org.bytedeco.javacpp-presets" and @artifactid.end_with? "-platform")
    puts "JavaCPP platform building"
    @javacpp = true
    @name = @artifactid.split("-platform").first
    @pkgversion, @javacppversion = @pkgversion.split "-"
    @pkgrel = @javacppversion+@pkgrel
    @pkgarch = @arch 
  else
      @pkgversion = @pkgversion.split("-").first
  end
  
  create_directories()
  pkgbuild = build_pkgbuild()
  
  # write pkgbuild
  puts "writing pkgbuild..."
  File.open(@foldername+"/PKGBUILD", 'w') { |file| file.write(pkgbuild) }

  pom = build_pom()
  puts "Writing pom..."
  File.open(@foldername+"/pom.xml", 'w') { |file| file.write(pom) }

  ## make the package
  currentdir = Dir.pwd
  Dir.chdir @foldername
  `makepkg -f >> build.log`
  `cp *.pkg.tar.xz ../pkgs`
  Dir.chdir currentdir
  
  puts "Finished, you can check the folder #{@name}."

end

#build_pkg(pkg, options) ⇒ Object



11
12
13
# File 'lib/MavenToPKGBUILD.rb', line 11

def build_pkg(pkg, options)
  build(pkg["name"], pkg["groupid"], pkg["version"], pkg["artifactid"], options)
end

#build_pkgbuildObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/MavenToPKGBUILD.rb', line 91

def build_pkgbuild

  config = <<-CONFIG 
# Maintainer: RealityTech <[email protected]>
pkgname=java-#{@name}#{@compact_pkg}
pkgver=#{@pkgversion}
pkgrel=#{@pkgrel}
pkgdesc=""
arch=('#{@pkgarch}')
url=""
license=()
groups=()
depends=('java-runtime')
makedepends=('maven' 'jdk8-openjdk')
provides=()
conflicts=()
replaces=()

build() {
cd "$startdir"

CONFIG
  
  if @javacpp
    config = config + "  mvn dependency:copy-dependencies\n "
  else
    config = config + "  mvn dependency:copy-dependencies -Djavacpp.platform=#{@platform}-#{@arch} \n "
  end

  if @compact
    config = config + "  mvn package -Djavacpp.platform=#{@platform}-#{@arch} \n "
  end

  ## Continue building
  package = <<-PACKAGE
}

package() {

PACKAGE


  if @compact
    install = "  installCompact '#{@name}' '#{@artifactid}' '-jar-with-dependencies' \n"
    
  else 
    
    if @full
      install = " installAll '#{@name}'" 
    else 
      if @javacpp

        # opencv-3.4.0-1.4.jar          ->  #{name}-#{version}-#{javacppversion}.jar
        # opencv-platform-3.4.0-1.4.jar ->  #{name}-platform-#{version}-#{javacppversion}.jar
        # opencv-3.4.0-1.4-linux-x86_64.jar ->  #{name}-#{version}-#{javacppversion}-#{@platform}-#{@arch}.jar
        # javacpp-1.4.jar -> javacpp-#{javacppversion}.jar   ## Not sure yet!

        install = <<-INSTALL
       # jar-name, output-jar-name, link-name 
      installJavaCPP '#{@name}-#{@pkgversion}-#{@javacppversion}.jar' '#{@name}-#{@pkgversion}.jar' '#{@name}.jar'       
      installJavaCPP '#{@name}-platform-#{@pkgversion}-#{@javacppversion}.jar' '#{@name}-platform-#{@pkgversion}.jar' '#{@name}-platform.jar'       
      installJavaCPP '#{@name}-#{@pkgversion}-#{@javacppversion}-#{@platform}-#{@arch}.jar' '#{@name}-#{@pkgversion}-#{@platform}-#{@arch}.jar' '#{@name}-#{@platform}-#{@arch}.jar'       

    INSTALL
      else 
        install = <<-INSTALL
 
      installOne '#{@name}' '#{@artifactid}'

INSTALL
      end
    end
  end
  
  functions = <<-FUNCTIONS

}

 installOne() {
   local name=$1
   local artifact=$2
   local opt=$3
   install -m644 -D ${startdir}/target/dependency/${artifact}-#{@version}${opt}.jar ${pkgdir}/usr/share/java/${name}/${pkgver}/${name}-${pkgver}.jar
   cd ${pkgdir}/usr/share/java/
   ln -sr ${name}/${pkgver}/${name}-${pkgver}.jar $name.jar
   ln -sr ${name}/${pkgver}/${name}-${pkgver}.jar $name-${pkgver}.jar
 }

 installCompact() {
   local name=$1
   local artifact=$2
   local opt=$3
   install -m644 -D ${startdir}/target/${name}-#{@version}${opt}.jar ${pkgdir}/usr/share/java/${name}/${pkgver}/${name}-${pkgver}${opt}.jar
   cd ${pkgdir}/usr/share/java/
   ln -sr ${name}/${pkgver}/${name}-${pkgver}${opt}.jar $name${opt}.jar
 }

 installAll() {
   local name=$1
   mkdir -p ${pkgdir}/usr/share/java/${name}-with-deps/${pkgver}
   install -m644 -D ${startdir}/target/dependency/*.jar ${pkgdir}/usr/share/java/${name}-with-deps/${pkgver}/
   # links ?
   # ln -sr ${name}/${pkgver}/${name}-${pkgver}.jar $name.jar
 }

 installJavaCPP() {
   local jarname=$1
   local outputname=$2
   local name=$3
   install -m644 -D ${startdir}/target/dependency/${jarname} ${pkgdir}/usr/share/java/#{@name}/${pkgver}/${outputname}
   cd ${pkgdir}/usr/share/java/
   ln -sr #{@name}/${pkgver}/${outputname} $name
   ln -sr #{@name}/${pkgver}/${outputname} ${outputname}
 }

FUNCTIONS

  ## Install in a maven-like environment ?
  ## ${groupId.replace('.','/')}/${artifactId}/${version}/${artifactId}-${version}${classifier==null?'':'-'+classifier}.${type}
  
  pkgbuild =  config + package + install + functions
  
  return pkgbuild
  
end

#build_pomObject



219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'lib/MavenToPKGBUILD.rb', line 219

def build_pom
  
  pom = <<-POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>tech.lity.rea</groupId>
  <artifactId>#{@name}</artifactId>
  <version>1-dummy</version>
  <packaging>jar</packaging>

  <name>#{@name}</name>
  <description></description>
  <url></url>
  
  <repositories>
      <repository>
          <id>clojars.org</id>
          <url>http://clojars.org/repo</url>
      </repository>

      <repository>
          <id>ossrh</id>
          <url>https://oss.sonatype.org/content/repositories/snapshots</url>
      </repository>

      <repository>
          <id>central</id>
          <name>Maven Repository Switchboard</name>
          <layout>default</layout>
          <url>http://repo1.maven.org/maven2</url>
          <snapshots>
              <enabled>true</enabled>
          </snapshots>
      </repository>
  </repositories>
  
  <dependencies>
    <dependency>
	<groupId>#{@groupid}</groupId>
	<artifactId>#{@artifactid}</artifactId>
	<version>#{@version}</version>
    </dependency>
  </dependencies>
POM

  if @compact
    pom = pom + <<-POM2

  <build>
     <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-assembly-plugin</artifactId>
              <executions>
                  <execution>
                      <phase>package</phase>
                      <goals>
                          <goal>single</goal>
                      </goals>
                      <configuration>
                          <descriptorRefs>
                              <descriptorRef>jar-with-dependencies</descriptorRef>
                          </descriptorRefs>
                      </configuration>
                  </execution>
              </executions>
          </plugin>
       </plugins>
    </build>
POM2
  end 

  pom = pom + " </project> "
  return pom
end

#create_directoriesObject



83
84
85
86
87
88
89
# File 'lib/MavenToPKGBUILD.rb', line 83

def create_directories()
  begin 
    Dir.mkdir @foldername
    Dir.mkdir "pkgs"
  rescue => e
  end
end

#create_pkg_version(version) ⇒ Object



7
8
9
# File 'lib/MavenToPKGBUILD.rb', line 7

def create_pkg_version(version)
  version.to_s.delete_prefix("'").delete_suffix("'").split("-").first
end