1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-08-08 04:20:07 +02:00

Compare commits

...

6 Commits

Author SHA1 Message Date
c93f047909 🔧 Bump build 2023-02-15 20:32:56 +01:00
f82a2120f7 🔧 Add display name 2023-02-15 20:32:37 +01:00
857cba9f45 On macOS 13 and newer, add "Start at login" (#210) 2023-02-15 20:24:01 +01:00
ec49257bcc 🔧 Bump build 2023-02-13 17:43:52 +01:00
9c6a21008a 🐛 Adjusted for new Homebrew JSON output (#235) 2023-02-13 17:38:09 +01:00
5dffbf57d1 👌 Do not load identity asynchronously 2023-02-11 20:46:05 +01:00
14 changed files with 233 additions and 95 deletions

View File

@ -481,6 +481,10 @@
C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; };
C47699F128A2F3150060FEB8 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; };
C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; };
C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; };
C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; };
C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; };
C47DF1B2299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; };
C4811D2422D70A4700B5F6B3 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2322D70A4700B5F6B3 /* App.swift */; };
C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; };
C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PrefsVC.swift */; };
@ -857,6 +861,7 @@
C47699EE28A2F2A30060FEB8 /* WarningManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningManager.swift; sourceTree = "<group>"; };
C47699F028A2F3150060FEB8 /* Warning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Warning.swift; sourceTree = "<group>"; };
C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = "<group>"; };
C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginItemManager.swift; sourceTree = "<group>"; };
C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = "<group>"; };
C48D0C9225CC804200CC7490 /* XibLoadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XibLoadable.swift; sourceTree = "<group>"; };
@ -1440,6 +1445,7 @@
C4B5635D276AB09000F12CCB /* VersionExtractor.swift */,
C4D3660A29113F20006BD146 /* System.swift */,
C4D36614291160A1006BD146 /* WIP.swift */,
C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */,
);
path = Helpers;
sourceTree = "<group>";
@ -2016,6 +2022,7 @@
files = (
C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */,
C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */,
C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */,
C4D3661A291173EA006BD146 /* DictionaryExtension.swift in Sources */,
C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */,
C4D8016622B1584700C6DA1B /* Startup.swift in Sources */,
@ -2224,6 +2231,7 @@
C4D36617291160A1006BD146 /* WIP.swift in Sources */,
C471E85728F9BB650021E251 /* DomainListTLSCell.swift in Sources */,
C471E85828F9BB650021E251 /* DomainListNameCell.swift in Sources */,
C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */,
C471E85928F9BB650021E251 /* DomainListPhpCell.swift in Sources */,
C471E85A28F9BB650021E251 /* DomainListTypeCell.swift in Sources */,
C471E85B28F9BB650021E251 /* DomainListKindCell.swift in Sources */,
@ -2355,6 +2363,7 @@
C471E89528F9BB8F0021E251 /* MenuBarImageGenerator.swift in Sources */,
C471E89628F9BB8F0021E251 /* PMWindowController.swift in Sources */,
C471E89728F9BB8F0021E251 /* VersionExtractor.swift in Sources */,
C47DF1B2299D5A3B0007055D /* LoginItemManager.swift in Sources */,
C4E2E86728FC2F1B003B070C /* XCPMApplication.swift in Sources */,
C471E89828F9BB8F0021E251 /* ValetProxy.swift in Sources */,
C471E89A28F9BB8F0021E251 /* DomainScanner.swift in Sources */,
@ -2565,6 +2574,7 @@
C4AF9F7B2754499000D44ED0 /* Valet.swift in Sources */,
C4C1019C27C65C6F001FACC2 /* Process.swift in Sources */,
C451AFF72969E40F0078E617 /* HelpButton.swift in Sources */,
C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */,
C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */,
C45B914A295607F400F4EC78 /* Service.swift in Sources */,
C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */,
@ -2857,12 +2867,13 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1064;
CURRENT_PROJECT_VERSION = 1070;
DEAD_CODE_STRIPPING = YES;
DEBUG = YES;
DEVELOPMENT_TEAM = 8M54J5J787;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = phpmon/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -2886,12 +2897,13 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1064;
CURRENT_PROJECT_VERSION = 1070;
DEAD_CODE_STRIPPING = YES;
DEBUG = NO;
DEVELOPMENT_TEAM = 8M54J5J787;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = phpmon/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -3114,11 +3126,12 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1064;
CURRENT_PROJECT_VERSION = 1070;
DEBUG = NO;
DEVELOPMENT_TEAM = 8M54J5J787;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = phpmon/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor DEV";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -3224,11 +3237,12 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1064;
CURRENT_PROJECT_VERSION = 1070;
DEBUG = YES;
DEVELOPMENT_TEAM = 8M54J5J787;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = phpmon/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor DEV";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",

View File

@ -16,16 +16,12 @@ public class Paths {
public static let shared = Paths()
internal var baseDir: Paths.HomebrewDir
private var userName: String! = nil
private var userName: String
init() {
baseDir = App.architecture != "x86_64" ? .opt : .usr
}
public func loadUser() async {
let output = await Shell.pipe("id -un").out
userName = String(output.split(separator: "\n")[0])
userName = identity()
Log.info("[ID] The current username is `\(userName)`.")
}
public func detectBinaryPaths() {

View File

@ -0,0 +1,25 @@
//
// LoginItemManager.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 15/02/2023.
// Copyright © 2023 Nico Verbruggen. All rights reserved.
//
import AppKit
import ServiceManagement
@available(macOS 13.0, *)
class LoginItemManager {
func loginItemIsEnabled() -> Bool {
return SMAppService.mainApp.status == .enabled
}
func disableLoginItem() {
try? SMAppService.mainApp.unregister()
}
func enableLoginItem() {
try? SMAppService.mainApp.register()
}
}

View File

@ -27,6 +27,30 @@ public func system(_ command: String) -> String {
return output
}
/** Same as the `system` command, but does not return the output. */
public func system_quiet(_ command: String) {
_ = system(command)
}
/**
Retrieves the username for the currently signed in user via `/usr/bin/id`.
This cannot fail or the application will crash.
*/
public func identity() -> String {
let task = Process()
task.launchPath = "/usr/bin/id"
task.arguments = ["-un"]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
guard let output = String(
data: pipe.fileHandleForReading.readDataToEndOfFile(),
encoding: String.Encoding.utf8
) else {
fatalError("Could not retrieve username via `id -un`!")
}
return output.trimmingCharacters(in: .whitespacesAndNewlines)
}

View File

@ -8,8 +8,6 @@
import Foundation
struct HomebrewPackage: Decodable {
let name: String
let full_name: String
let aliases: [String]
let installed: [HomebrewInstalled]

View File

@ -111,7 +111,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
// Make sure notifications will work
setupNotifications()
Task { // Make sure the menu performs its initial checks
await paths.loadUser()
await menu.startup()
}
}

View File

@ -17,7 +17,7 @@ public class EnvironmentManager {
// Failure condition #1: does not contain Laravel Valet
if !output.contains("Laravel Valet") {
return true
return false
}
// Extract the version number
@ -25,7 +25,6 @@ public class EnvironmentManager {
// Get the actual version
return Valet.shared.version == nil
}() // returns true if none of the failure conditions are met
}
}

View File

@ -231,7 +231,7 @@ class GeneralPreferencesVC: GenericPreferenceVC {
// MARK: - Lifecycle
public static func fromStoryboard() -> GenericPreferenceVC {
let vc = NSStoryboard(name: "Main", bundle: nil)
var vc = NSStoryboard(name: "Main", bundle: nil)
.instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC
vc.views = [
@ -243,6 +243,10 @@ class GeneralPreferencesVC: GenericPreferenceVC {
vc.getAutomaticUpdateCheckPV()
]
if #available(macOS 13, *) {
vc.views.append(CheckboxPreferenceView.makeLoginItemView())
}
return vc
}
}

View File

@ -10,18 +10,12 @@ import Foundation
import Cocoa
class CheckboxPreferenceView: NSView, XibLoadable {
@IBOutlet weak var labelSection: NSTextField!
@IBOutlet weak var labelDescription: NSTextField!
@IBOutlet weak var buttonCheckbox: NSButton!
var action: (() -> Void)!
var preference: PreferenceName! {
didSet {
self.buttonCheckbox.state = Preferences.isEnabled(self.preference) ? .on : .off
}
}
var behavior: CheckboxPreferenceViewBehavior!
static func make(
sectionText: String,
@ -31,17 +25,78 @@ class CheckboxPreferenceView: NSView, XibLoadable {
action: @escaping () -> Void
) -> NSView {
let view = Self.createFromXib()!
view.behavior = CheckboxPreferenceBehavior(
button: view.buttonCheckbox,
preference: preference
)
view.labelSection.stringValue = sectionText
view.labelDescription.stringValue = descriptionText
view.buttonCheckbox.title = checkboxText
view.preference = preference
view.action = action
return view
}
@IBAction func toggled(_ sender: Any) {
Preferences.update(self.preference, value: buttonCheckbox.state == .on)
self.action()
@available(macOS 13.0, *)
static func makeLoginItemView() -> NSView {
let view = Self.createFromXib()!
view.behavior = CheckboxLaunchItemBehavior(button: view.buttonCheckbox)
view.labelSection.stringValue = "prefs.startup".localized
view.labelDescription.stringValue = "prefs.auto_start_desc".localized
view.buttonCheckbox.title = "prefs.auto_start_title".localized
view.action = {}
return view
}
@IBAction func toggled(_ sender: Any) {
self.behavior.toggled(checked: buttonCheckbox.state == .on)
self.action()
}
}
protocol CheckboxPreferenceViewBehavior {
func toggled(checked: Bool)
}
class CheckboxPreferenceBehavior: CheckboxPreferenceViewBehavior {
var button: NSButton
var preference: PreferenceName {
didSet {
button.state = Preferences.isEnabled(self.preference) ? .on : .off
}
}
init(button: NSButton, preference: PreferenceName) {
self.button = button
self.preference = preference
}
public func toggled(checked: Bool) {
Preferences.update(self.preference, value: checked)
}
}
@available(macOS 13.0, *)
class CheckboxLaunchItemBehavior: CheckboxPreferenceViewBehavior {
var manager = LoginItemManager()
var button: NSButton
init(button: NSButton) {
self.button = button
if manager.loginItemIsEnabled() {
self.button.state = .on
} else {
self.button.state = .off
}
}
public func toggled(checked: Bool) {
if checked {
self.manager.enableLoginItem()
} else {
self.manager.disableLoginItem()
}
self.button.state = self.manager.loginItemIsEnabled() ? .on : .off
}
}

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>

View File

@ -40,7 +40,7 @@
<key>LSUIElement</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2019-2022 Nico Verbruggen. All rights reserved.</string>
<string>Copyright © 2019-2023 Nico Verbruggen. All rights reserved.</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>

View File

@ -254,6 +254,10 @@ This has no effect on other terminals, only for the particular terminal session
"prefs.notifications" = "Notifications:";
"prefs.warnings" = "Warnings:";
"prefs.menu_contents" = "Features in Menu:";
"prefs.startup" = "Startup:";
"prefs.auto_start_desc" = "Automatically starts PHP Monitor when you log into your Mac.";
"prefs.auto_start_title" = "Start PHP Monitor at login";
"prefs.icon_options.php" = "Display PHP Icon";
"prefs.icon_options.elephant" = "Display Elephant Icon";

View File

@ -23,11 +23,10 @@ class HomebrewPackageTest: XCTestCase {
[HomebrewPackage].self, from: json.data(using: .utf8)!
).first!
XCTAssertEqual(package.name, "php")
XCTAssertEqual(package.full_name, "php")
XCTAssertEqual(package.aliases.first!, "php@8.1")
XCTAssertEqual(package.aliases.first!, "php@8.2")
XCTAssertEqual(package.installed.contains(where: { installed in
installed.version.starts(with: "8.1")
installed.version.starts(with: "8.2")
}), true)
}

View File

@ -1,69 +1,77 @@
[
{
"name": "php",
"full_name": "php",
"tap": "homebrew/core",
"oldname": null,
"aliases": [
"php@8.1"
"php@8.2"
],
"versioned_formulae": [
"php@8.1",
"php@8.0",
"php@7.4",
"php@7.3",
"php@7.2"
"php@7.4"
],
"desc": "General-purpose scripting language",
"license": "PHP-3.01",
"homepage": "https://www.php.net/",
"versions": {
"stable": "8.1.10",
"stable": "8.2.2",
"head": "HEAD",
"bottle": true
},
"urls": {
"stable": {
"url": "https://www.php.net/distributions/php-8.1.10.tar.xz",
"url": "https://www.php.net/distributions/php-8.2.2.tar.xz",
"tag": null,
"revision": null
"revision": null,
"checksum": "bdc4aa38e652bac86039601840bae01c0c3653972eaa6f9f93d5f71953a7ee33"
},
"head": {
"url": "https://github.com/php/php-src.git",
"branch": "master"
}
},
"revision": 1,
"revision": 0,
"version_scheme": 0,
"bottle": {
"stable": {
"rebuild": 0,
"root_url": "https://ghcr.io/v2/homebrew/core",
"files": {
"arm64_ventura": {
"cellar": "/opt/homebrew/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:ad2e6a6f1cdc65c22b39bd607cbb7305958951cf58ee87d5060717be5a8b5a45",
"sha256": "ad2e6a6f1cdc65c22b39bd607cbb7305958951cf58ee87d5060717be5a8b5a45"
},
"arm64_monterey": {
"cellar": "/opt/homebrew/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:dcee33c9f445db3026a7e867805eb8f6d82e9e5599599b8c6cd8645475f7961c",
"sha256": "dcee33c9f445db3026a7e867805eb8f6d82e9e5599599b8c6cd8645475f7961c"
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:27069c973e63f38a3cb4fad1c7a2e17853bcffe318c8a957ff96a1026dff0cac",
"sha256": "27069c973e63f38a3cb4fad1c7a2e17853bcffe318c8a957ff96a1026dff0cac"
},
"arm64_big_sur": {
"cellar": "/opt/homebrew/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:e0590064cd32f2baa4102fa49c80056f3886a0a89aec0589d0134ecbf0e7923e",
"sha256": "e0590064cd32f2baa4102fa49c80056f3886a0a89aec0589d0134ecbf0e7923e"
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:ceef280bcd57e5f794ae59cc75e83d407c9704aa3d238b282bda52cbc644d0dd",
"sha256": "ceef280bcd57e5f794ae59cc75e83d407c9704aa3d238b282bda52cbc644d0dd"
},
"ventura": {
"cellar": "/usr/local/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:22f733b7b0b0ed95cd6b0a1534b9eca4cf63fe54647394c3f7e7ac019eb019ff",
"sha256": "22f733b7b0b0ed95cd6b0a1534b9eca4cf63fe54647394c3f7e7ac019eb019ff"
},
"monterey": {
"cellar": "/usr/local/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:62481320613b19c6ff310bf6ed50c7d2a2253cdbf403af12ec97bccd8a97a84c",
"sha256": "62481320613b19c6ff310bf6ed50c7d2a2253cdbf403af12ec97bccd8a97a84c"
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:9ff8f5e1df5e849567cdb2ddea6d3c2a2b9cae024842c9ac65b35a01657bfc37",
"sha256": "9ff8f5e1df5e849567cdb2ddea6d3c2a2b9cae024842c9ac65b35a01657bfc37"
},
"big_sur": {
"cellar": "/usr/local/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:b34d96f7aad3c580a7cbdaadb8054fb9b6872111a5eec8e1bcb4a529970c8e03",
"sha256": "b34d96f7aad3c580a7cbdaadb8054fb9b6872111a5eec8e1bcb4a529970c8e03"
},
"catalina": {
"cellar": "/usr/local/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:cc0b85dcfdd60e1d8d7fa74c9f53be5d249d068835dbc7a81edacb7a076b6c76",
"sha256": "cc0b85dcfdd60e1d8d7fa74c9f53be5d249d068835dbc7a81edacb7a076b6c76"
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:11fd1ea6da8ef728b7cacd4da8a51ed125069595abf4e37ae1552d418560c5fb",
"sha256": "11fd1ea6da8ef728b7cacd4da8a51ed125069595abf4e37ae1552d418560c5fb"
},
"x86_64_linux": {
"cellar": "/home/linuxbrew/.linuxbrew/Cellar",
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:b934a5a4ad2d29b629f83962b57f638a654801d1ba21ba659a42da2e5afe3fae",
"sha256": "b934a5a4ad2d29b629f83962b57f638a654801d1ba21ba659a42da2e5afe3fae"
"url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:baaa41e60f9e8125fe8f549d4813a8476a8947a1f10d7817a2ee36d8baa625f3",
"sha256": "baaa41e60f9e8125fe8f549d4813a8476a8947a1f10d7817a2ee36d8baa625f3"
}
}
}
@ -127,34 +135,35 @@
"conflicts_with": [
],
"caveats": "To enable PHP in Apache add the following to httpd.conf and restart Apache:\n LoadModule php_module $(brew --prefix)/opt/php/lib/httpd/modules/libphp.so\n\n <FilesMatch \\.php$>\n SetHandler application/x-httpd-php\n </FilesMatch>\n\nFinally, check DirectoryIndex includes index.php\n DirectoryIndex index.php index.html\n\nThe php.ini and php-fpm.ini file can be found in:\n $(brew --prefix)/etc/php/8.1/\n",
"caveats": "To enable PHP in Apache add the following to httpd.conf and restart Apache:\n LoadModule php_module $(brew --prefix)/opt/php/lib/httpd/modules/libphp.so\n\n <FilesMatch \\.php$>\n SetHandler application/x-httpd-php\n </FilesMatch>\n\nFinally, check DirectoryIndex includes index.php\n DirectoryIndex index.php index.html\n\nThe php.ini and php-fpm.ini file can be found in:\n $(brew --prefix)/etc/php/8.2/\n",
"installed": [
{
"version": "8.1.10_1",
"version": "8.2.2",
"used_options": [
],
"built_as_bottle": true,
"poured_from_bottle": true,
"time": 1675654665,
"runtime_dependencies": [
{
"full_name": "apr",
"version": "1.7.0",
"version": "1.7.2",
"declared_directly": true
},
{
"full_name": "ca-certificates",
"version": "2022-07-19",
"version": "2023-01-10",
"declared_directly": false
},
{
"full_name": "openssl@1.1",
"version": "1.1.1q",
"version": "1.1.1s",
"declared_directly": true
},
{
"full_name": "apr-util",
"version": "1.6.1",
"version": "1.6.3",
"declared_directly": true
},
{
@ -182,24 +191,24 @@
"version": "1.0.9",
"declared_directly": false
},
{
"full_name": "gettext",
"version": "0.21",
"declared_directly": true
},
{
"full_name": "libunistring",
"version": "1.0",
"version": "1.1",
"declared_directly": false
},
{
"full_name": "gettext",
"version": "0.21.1",
"declared_directly": true
},
{
"full_name": "libidn2",
"version": "2.3.3",
"version": "2.3.4",
"declared_directly": false
},
{
"full_name": "libnghttp2",
"version": "1.49.0",
"version": "1.51.0",
"declared_directly": false
},
{
@ -224,7 +233,7 @@
},
{
"full_name": "xz",
"version": "5.2.6",
"version": "5.4.1",
"declared_directly": false
},
{
@ -234,7 +243,7 @@
},
{
"full_name": "curl",
"version": "7.85.0",
"version": "7.87.0",
"declared_directly": true
},
{
@ -249,12 +258,12 @@
},
{
"full_name": "freetds",
"version": "1.3.13",
"version": "1.3.17",
"declared_directly": true
},
{
"full_name": "libpng",
"version": "1.6.37",
"version": "1.6.39",
"declared_directly": false
},
{
@ -264,12 +273,12 @@
},
{
"full_name": "fontconfig",
"version": "2.14.0",
"version": "2.14.2",
"declared_directly": false
},
{
"full_name": "jpeg-turbo",
"version": "2.1.4",
"version": "2.1.5",
"declared_directly": false
},
{
@ -278,13 +287,13 @@
"declared_directly": false
},
{
"full_name": "imath",
"version": "3.1.5",
"full_name": "highway",
"version": "1.0.3",
"declared_directly": false
},
{
"full_name": "openexr",
"version": "3.1.5",
"full_name": "imath",
"version": "3.1.6",
"declared_directly": false
},
{
@ -292,14 +301,24 @@
"version": "4.4.0",
"declared_directly": false
},
{
"full_name": "little-cms2",
"version": "2.14",
"declared_directly": false
},
{
"full_name": "openexr",
"version": "3.1.5",
"declared_directly": false
},
{
"full_name": "webp",
"version": "1.2.4",
"version": "1.3.0",
"declared_directly": false
},
{
"full_name": "jpeg-xl",
"version": "0.6.1",
"version": "0.8.1",
"declared_directly": false
},
{
@ -309,12 +328,12 @@
},
{
"full_name": "aom",
"version": "3.4.0",
"version": "3.5.0",
"declared_directly": false
},
{
"full_name": "libavif",
"version": "0.10.1",
"version": "0.11.1",
"declared_directly": false
},
{
@ -329,17 +348,17 @@
},
{
"full_name": "icu4c",
"version": "71.1",
"version": "72.1",
"declared_directly": true
},
{
"full_name": "krb5",
"version": "1.20",
"version": "1.20.1",
"declared_directly": true
},
{
"full_name": "libpq",
"version": "14.5",
"version": "15.1",
"declared_directly": true
},
{
@ -359,17 +378,17 @@
},
{
"full_name": "pcre2",
"version": "10.40",
"version": "10.42",
"declared_directly": true
},
{
"full_name": "readline",
"version": "8.1.2",
"version": "8.2.1",
"declared_directly": false
},
{
"full_name": "sqlite",
"version": "3.39.2",
"version": "3.40.1",
"declared_directly": true
},
{
@ -382,7 +401,7 @@
"installed_on_request": true
}
],
"linked_keg": "8.1.10_1",
"linked_keg": "8.2.2",
"pinned": false,
"outdated": false,
"deprecated": false,
@ -390,6 +409,8 @@
"deprecation_reason": null,
"disabled": false,
"disable_date": null,
"disable_reason": null
"disable_reason": null,
"tap_git_head": "0bbb89420e74756a5a5c145ed7efa4a32f7e7e7c"
}
]
]