104 lines
4.1 KiB
Java
104 lines
4.1 KiB
Java
/*
|
|
* Copyright 2012 dorkbox, llc
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package dorkbox.build.util.jar;
|
|
|
|
public enum PackAction {
|
|
// NOTE: these are packed into a TWO BYTES (for a total of 16 bitfields)
|
|
// if you add/change this, MAKE SURE you also check in Launcher and Bootstrap!!
|
|
// search for '// From PackAction' in all files to find the instances used!
|
|
//
|
|
// ALSO: the LGPL bit is 0, which means - NOTHING IS IN THE EXTRA DATA FIELD!
|
|
|
|
// By default, everything will be pack200+compressed
|
|
Store (1 << 31), // MAX_INT just store this file. Nothing will be done to it.
|
|
Extract (1 << 30), // MAX_INT/2 extract the contents of this compressed file to the root of the 'box' file (this is at compile time)
|
|
|
|
|
|
|
|
// The following affect the file load action
|
|
Pack (1 << 0), // 1 pack200 - everything (jar, etc) that can be pack200, IS pack200. We can detect this, so no
|
|
Lzma (1 << 1), // 2 we only use LZMA, since it offers better compression than gzip
|
|
Encrypt (1 << 2), // 4 aes encryption
|
|
|
|
/**
|
|
* means we want to load our classloader DIRECTLY via JNI, so we can set our classloader up before anything else
|
|
* WARNING. The files load in the order they are put in the jar - currently lexically, in alphabetical order. This matters a lot.
|
|
*/
|
|
ClassLoader (1 << 3, Pack.getValue() | Lzma.getValue()), // 8
|
|
|
|
|
|
/**
|
|
* means we want to load this into our classloader before our launcher is started.
|
|
*/
|
|
Load(1 << 4, Pack.getValue() | Lzma.getValue()), // 16
|
|
|
|
|
|
/**
|
|
* Load native libraries, or load jar's that are incompatible with our box file.
|
|
* <p>
|
|
* There's a comment that is the hash and pack+LZMA
|
|
* <p>
|
|
* It's not always possible to load our OWN libraries dll's, since some Java libraries have their
|
|
* own method to loading dll's.
|
|
* <p>
|
|
* we RELY on the the jar ALREADY being NORMALIZED (PACK+UNPACK) - if it's not, hashes won't match
|
|
*/
|
|
LoadLibray(1 << 5, Pack.getValue() | Lzma.getValue()), // 32
|
|
|
|
/**
|
|
* This is necessary for LGPL content. It will NOT be a part of the signature hash, and will NOT BE ENCRYPTED when using this.
|
|
* Resources/Javascript can also be LGPL (or variants).
|
|
* <p>
|
|
* This DOES NOT MEAN that the entire jar file/resource that is tagged LGPL is LGPL, just that part of it is.
|
|
* <p>
|
|
* Even if encrypt is "enabled" on an LGPL resource, the package process will IGNORE IT, since encrypt is not compatible with the
|
|
* LGPL license. It also means that this file can be REPLACED in the box container, since that is also part of the LGPL requirement
|
|
* so it is not hashed when ultra-signing the box containers!
|
|
*/
|
|
LGPL (1 << 6, Pack.getValue() | Lzma.getValue()), // 64
|
|
|
|
/**
|
|
* This means that files will be loaded by the bootstrap launcher. IF THIS ISN'T THERE, THEY WILL NOT BE LOADED!!
|
|
*/
|
|
Package(1 << 7, Pack.getValue() | Lzma.getValue() | Encrypt.getValue()), // 128
|
|
;
|
|
|
|
|
|
private final int value;
|
|
private final int baseValue;
|
|
|
|
private PackAction(int baseValue) {
|
|
this.value = baseValue;
|
|
this.baseValue = baseValue;
|
|
}
|
|
|
|
/**
|
|
* @param baseValue this is what the base value is for this pack action
|
|
* @param extraActions these are extra actions to perform in addition to whatever the "base value" action is.
|
|
*/
|
|
private PackAction(int baseValue, int extraActions) {
|
|
this.baseValue = baseValue;
|
|
this.value = baseValue | extraActions;
|
|
}
|
|
|
|
public int getBaseValue() {
|
|
return this.baseValue;
|
|
}
|
|
|
|
int getValue() {
|
|
return this.value;
|
|
}
|
|
} |