Commit d2316aa3 authored by Drew's avatar Drew

Restore FISA cli

parent e4faa4bf
//
// AppDelegate.swift
// FISA
//
// Created by Drew Crawford on 8/16/15.
// Copyright © 2015 DrewCrawfordApps. All rights reserved.
// FISA © 2015 DrewCrawfordApps LLC
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
// License ("RPL") Version 1.5, or subsequent versions as allowed by the RPL,
// and You may not copy or use this file in either source code or executable
// form, except in compliance with the terms and conditions of the RPL.
// All software distributed under the RPL is provided strictly on an "AS
// IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND
// LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
// LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific
// language governing rights and limitations under the RPL.
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
{
"images" : [
{
"idiom" : "mac",
"size" : "16x16",
"scale" : "1x"
},
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "fisa_logo_32-1.png",
"scale" : "2x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "fisa_logo_32.png",
"scale" : "1x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "fisa_logo_64.png",
"scale" : "2x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "fisa_logo_128.png",
"scale" : "1x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "fisa_logo_256-1.png",
"scale" : "2x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "fisa_logo_256.png",
"scale" : "1x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "fisa_logo_512-1.png",
"scale" : "2x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "fisa_logo_512.png",
"scale" : "1x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "fisa_logo_1024.png",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2015 DrewCrawfordApps. All rights reserved.</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
//
// ViewController.swift
// FISA
//
// Created by Drew Crawford on 8/16/15.
// Copyright © 2015 DrewCrawfordApps. All rights reserved.
// FISA © 2015 DrewCrawfordApps LLC
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
// License ("RPL") Version 1.5, or subsequent versions as allowed by the RPL,
// and You may not copy or use this file in either source code or executable
// form, except in compliance with the terms and conditions of the RPL.
// All software distributed under the RPL is provided strictly on an "AS
// IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND
// LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
// LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific
// language governing rights and limitations under the RPL.
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
......@@ -3,7 +3,7 @@
// FISA
//
// Created by Drew Crawford on 8/16/15.
// FISA © 2015 DrewCrawfordApps LLC
// FISA © 2016 Drew Crawford
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
......@@ -20,6 +20,7 @@
import Foundation
import CLIKit
import NaOH
import FISAKit
enum StringlyTyped : String {
case identityFile = "identityFile"
......@@ -30,14 +31,14 @@ enum StringlyTyped : String {
case secretValue = "secretValue"
}
private let identityOption = CLIKit.DefaultOption(longName: StringlyTyped.identityFile.rawValue, help: "Path to the identity file. For security reasons, it must have permissions 0600 (only user-readable)", defaultValue: OptionType.StringOption(defaultIdentityPath))
private let fisaFileOption = CLIKit.DefaultOption(longName: StringlyTyped.fisaFile.rawValue, help: "Path to the FISA file to be operated on.", defaultValue: OptionType.StringOption(defaultFISAPath))
private let identityOption = CLIKit.DefaultOption(longName: StringlyTyped.identityFile.rawValue, help: "Path to the identity file. For security reasons, it must have permissions 0600 (only user-readable)", defaultValue: OptionType.stringOption(FISA.DefaultIdentityPath))
private let fisaFileOption = CLIKit.DefaultOption(longName: StringlyTyped.fisaFile.rawValue, help: "Path to the FISA file to be operated on.", defaultValue: OptionType.stringOption(FISA.DefaultFISAPath))
private final class IdentityCreationCommand : CLIKit.EasyCommand {
fileprivate func command(_ parseResult: ParseResult) {
try! createIdentity(parseResult[StringlyTyped.identityFile.rawValue].stringValue)
try! FISA.createIdentity(parseResult[StringlyTyped.identityFile.rawValue].stringValue)
}
fileprivate let options : [Option] = [identityOption]
fileprivate let shortHelp = "Create a new identity and save it to the specified file."
......@@ -49,9 +50,8 @@ private final class CreateFISACommand : CLIKit.EasyCommand {
fileprivate let shortHelp = "Create a new FISA secrets file and save it to the specified location."
let name = "createFISA"
fileprivate func command(_ parseResult: ParseResult) {
var file = FISAFile()
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
file.identities.append(Identity(description: parseResult[StringlyTyped.identityDescription.rawValue].stringValue, key: key))
let key = try! CryptoBoxSecretKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
let file = FISA.File(identity: key, description: parseResult[StringlyTyped.identityDescription.rawValue].stringValue)
try! file.saveToFile(parseResult[StringlyTyped.fisaFile.rawValue].stringValue)
}
}
......@@ -61,8 +61,7 @@ private final class PrintFISACommand : CLIKit.EasyCommand {
fileprivate let shortHelp = "Print the FISA file."
let name = "printFISA"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
let file = try! FISAFile(contentsOfFile: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identity: key)
let file = try! FISA.File(existing: true, fisaPath: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identityPath: parseResult[StringlyTyped.identityFile.rawValue].stringValue)
print("\(file)")
}
}
......@@ -72,7 +71,7 @@ private final class GetPublicIdentity : CLIKit.EasyCommand {
fileprivate let shortHelp = "Get the public portion of your identity"
let name = "getPublicIdentity"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
let key = try! CryptoBoxPublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
print("\(key.bytes.base64)")
}
}
......@@ -82,8 +81,8 @@ private final class AddPublicIdentity : CLIKit.EasyCommand {
fileprivate let shortHelp = "Add the public portion of an identity to the specified FISA file"
let name = "addPublicIdentity"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
var file = try! FISAFile(contentsOfFile: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identity: key)
var file = try! FISA.File(existing: true, fisaPath: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identityPath: parseResult[StringlyTyped.identityFile.rawValue].stringValue)
file.addIdentity(parseResult[StringlyTyped.publicIdentity.rawValue].stringValue, description: parseResult[StringlyTyped.identityDescription.rawValue].stringValue)
try! file.saveToFile(parseResult[StringlyTyped.fisaFile.rawValue].stringValue)
}
......@@ -94,8 +93,8 @@ private final class RemovePublicIdentity : CLIKit.EasyCommand {
fileprivate let shortHelp = "Remove the public portion of an identity from the specified FISA file"
let name = "removePublicIdentity"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
var file = try! FISAFile(contentsOfFile: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identity: key)
var file = try! FISA.File(existing: true, fisaPath: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identityPath: parseResult[StringlyTyped.identityFile.rawValue].stringValue)
try! file.removeIdentity(parseResult[StringlyTyped.identityDescription.rawValue].stringValue)
try! file.saveToFile(parseResult[StringlyTyped.fisaFile.rawValue].stringValue)
}
......@@ -106,8 +105,7 @@ private final class SetSecret : CLIKit.EasyCommand {
fileprivate let shortHelp = "Creates a secret or sets an existing one to a new value"
let name = "setSecret"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
var file = try! FISAFile(contentsOfFile: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identity: key)
var file = try! FISA.File(existing: true, fisaPath: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identityPath: parseResult[StringlyTyped.identityFile.rawValue].stringValue)
file.secrets[parseResult[StringlyTyped.secretKey.rawValue].stringValue] = parseResult[StringlyTyped.secretValue.rawValue].stringValue
try! file.saveToFile(parseResult[StringlyTyped.fisaFile.rawValue].stringValue)
}
......@@ -118,9 +116,8 @@ private final class RemoveSecret : CLIKit.EasyCommand {
fileprivate let shortHelp = "Removes a secret from the FISA file"
let name = "removeSecret"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
var file = try! FISAFile(contentsOfFile: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identity: key)
file.secrets.removeValueForKey(parseResult[StringlyTyped.secretKey.rawValue].stringValue)
var file = try! FISA.File(existing: true, fisaPath: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identityPath: parseResult[StringlyTyped.identityFile.rawValue].stringValue)
file.secrets.removeValue(forKey: parseResult[StringlyTyped.secretKey.rawValue].stringValue)
try! file.saveToFile(parseResult[StringlyTyped.fisaFile.rawValue].stringValue)
}
}
......@@ -130,8 +127,8 @@ private final class GetSecret : CLIKit.EasyCommand {
fileprivate let shortHelp = "Retrieves the secret from the FISA file"
let name = "getSecret"
fileprivate func command(_ parseResult: ParseResult) {
let key = try! PublicKey(readFromFile: (parseResult[StringlyTyped.identityFile.rawValue].stringValue))
var file = try! FISAFile(contentsOfFile: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identity: key)
var file = try! FISA.File(existing: true, fisaPath: parseResult[StringlyTyped.fisaFile.rawValue].stringValue, identityPath: parseResult[StringlyTyped.identityFile.rawValue].stringValue)
let secretKey = parseResult[StringlyTyped.secretKey.rawValue].stringValue
let secret = file.secrets[secretKey]
guard let s = secret else {
......@@ -142,15 +139,8 @@ private final class GetSecret : CLIKit.EasyCommand {
}
}
///works around 📡22302235, 📡22208468
@objc
public final class EntryPoint: NSObject {
public static func main() {
let metaCommand = MetaCommand(name: "FISAcli", subcommands: [IdentityCreationCommand(), CreateFISACommand(), PrintFISACommand(), GetPublicIdentity(), AddPublicIdentity(), RemovePublicIdentity(), SetSecret(), RemoveSecret(), GetSecret()])
if let parseResult = metaCommand.parseArguments() {
metaCommand.command(parseResult)
}
}
let _ = FISAKit.registerText
let metaCommand = MetaCommand(name: "fisa", subcommands: [IdentityCreationCommand(), CreateFISACommand(), PrintFISACommand(), GetPublicIdentity(), AddPublicIdentity(), RemovePublicIdentity(), SetSecret(), RemoveSecret(), GetSecret()])
if let parseResult = metaCommand.parseArguments() {
metaCommand.command(parseResult)
}
......@@ -3,7 +3,7 @@
// FISA
//
// Created by Drew Crawford on 8/16/15.
// FISA © 2015 DrewCrawfordApps LLC
// FISA © 2016 Drew Crawford
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
......@@ -20,7 +20,7 @@
import Foundation
extension Array {
var base64: String {
public var base64: String {
get {
assert(Element.self == UInt8.self)
return self.withUnsafeBufferPointer { (ptr) -> String in
......
......@@ -3,7 +3,7 @@
// FISA
//
// Created by Drew Crawford on 8/16/15.
// FISA © 2015 DrewCrawfordApps LLC
// FISA © 2016 Drew Crawford
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
......@@ -38,24 +38,24 @@ public enum FISA {
public static let DefaultFISAPath = FileManager.default.currentDirectoryPath + "/secrets.fisa"
public static let DefaultIdentityPath = NSHomeDirectory() + "/.identity.fisa"
public struct File {
fileprivate static let version = 1
var nonAuthoringIdentities: [Identity] = []
public var secrets: [String: String] = [:]
private var authoringIdentity: AuthoringIdentity
private let _registeredLegalText = registerText
var identities: [Identity] {
return nonAuthoringIdentities + [authoringIdentity]
}
/**Creates an empty FISAFile */
init(identity: CryptoBoxSecretKey, description: String) {
public init(identity: CryptoBoxSecretKey, description: String) {
self.authoringIdentity = AuthoringIdentity(description: description, authoringKey: identity)
}
func saveToFile(_ file: String) throws {
public func saveToFile(_ file: String) throws {
//first, we save our payload
let data = try! JSONSerialization.data(withJSONObject: secrets, options: JSONSerialization.WritingOptions())
//then, we encrypt it with a fresh payload key
......
......@@ -3,8 +3,7 @@
// FISA
//
// Created by Drew Crawford on 8/16/15.
// Copyright © 2015 DrewCrawfordApps. All rights reserved.
// FISA © 2015 DrewCrawfordApps LLC
// FISA © 2016 Drew Crawford
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
......
import pianissimo
public let registerText: Void = {_registerText()}()
private func _registerText() {
pianissimo.register(legalText: "FISA © 2016 Drew Crawford. Used under the RPL. https://code.sealedabstract.com/drewcrawford/FISA\n\nThis software is provided strictly on an \"AS IS\" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific language governing rights and limitations under the RPL.", name: "FISAKit.LegalText")
}
......@@ -3,7 +3,7 @@
// FISA
//
// Created by Drew Crawford on 8/16/15.
// FISA © 2015 DrewCrawfordApps LLC
// FISA © 2016 Drew Crawford
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
......
......@@ -3,7 +3,7 @@
// FISA
//
// Created by Drew Crawford on 8/16/15.
// FISA © 2015 DrewCrawfordApps LLC
// FISA © 2016 Drew Crawford
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
......
//
// FISATests.swift
// FISATests
//
// Created by Drew Crawford on 8/16/15.
// Copyright © 2015 DrewCrawfordApps. All rights reserved.
// FISA © 2015 DrewCrawfordApps LLC
//
// Unless explicitly acquired and licensed from Licensor under another
// license, the contents of this file are subject to the Reciprocal Public
// License ("RPL") Version 1.5, or subsequent versions as allowed by the RPL,
// and You may not copy or use this file in either source code or executable
// form, except in compliance with the terms and conditions of the RPL.
// All software distributed under the RPL is provided strictly on an "AS
// IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND
// LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
// LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific
// language governing rights and limitations under the RPL.
import XCTest
@testable import FISA
class FISATests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
......@@ -546,7 +546,6 @@ EXHIBIT B
The User-Visible Attribution Notice below, when provided, must appear in each
user-visible display as defined in Section 6.4 (d):
This product contains software written by Drew Crawford. http://sealedabstract.com
FISA © 2015 DrewCrawfordApps LLC. Used under the RPL. https://code.sealedabstract.com/drewcrawford/FISA
FISA © 2016 Drew Crawford. Used under the RPL. https://code.sealedabstract.com/drewcrawford/FISA
This software is provided strictly on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific language governing rights and limitations under the RPL.
\ No newline at end of file
This product contains software written by Drew Crawford. http://sealedabstract.com
FISA © 2015 DrewCrawfordApps LLC. Used under the RPL. https://code.sealedabstract.com/drewcrawford/FISA
FISA © 2016 Drew Crawford. Used under the RPL. https://code.sealedabstract.com/drewcrawford/FISA
This software is provided strictly on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the RPL for specific language governing rights and limitations under the RPL.
\ No newline at end of file
......@@ -70,5 +70,45 @@
}
]
}
{
:url "https://code.sealedabstract.com/drewcrawford/CLIKit.git"
:payloads [
{
:key "git"
:used-commit "dc3950bed532c1698c1d4c9d109f31cd33eacb60"
:pin false
}
]
}
{
:url "https://code.sealedabstract.com/drewcrawford/Caroline.git"
:payloads [
{
:key "git"
:used-commit "f1797525eeb2999d664dbc4a7ade2c1703219e55"
:pin false
}
]
}
{
:url "https://code.sealedabstract.com/drewcrawford/StandBack.git"
:payloads [
{
:key "git"
:used-commit "91eb559427a92a7eeeb3ecf84aa6060e0f58d170"
:pin false
}
]
}
{
:url "https://code.sealedabstract.com/drewcrawford/pianissimo.git"
:payloads [
{
:key "git"
:used-commit "dbf270709dbb7956e41a12cca7b65d170af57649"
:pin false
}
]
}
]
)
......@@ -14,6 +14,10 @@
:url "https://code.sealedabstract.com/drewcrawford/NaOH.git"
:branch "master"
}
{
:url "https://code.sealedabstract.com/drewcrawford/CLIKit.git"
:version [">= 2.0"]
}
]
:tasks {
......@@ -42,11 +46,17 @@
:dependencies ["pianissimo.default" "NaOH.default" "Caroline.core" "kit" "gen-tests"]
:link-with-product ["pianissimo.a" "NaOH.a" "FISAKit.a" "CarolineCore.a"]
:use-overlays ["NaOH.link"]
:overlays {
:at.xcode-emit {
:include-with-user ["libsodium/libsodium/src/libsodium/include/"]
}
}
}
:default {
:tool "atllbuild"
:sources ["FISA/**.swift"]
:name "fisa"
:output-type "executable"
:publish-product true
:dependencies ["kit" "CLIKit.default"]
:link-with-product ["FISAKit.a" "CLIKit.a" "NaOH.a" "pianissimo.a"]
:use-overlays ["NaOH.link"]
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment