UNPKG

@stacksjs/launchpad

Version:
126 lines (106 loc) 10.9 kB
import{ab as L}from"./chunk-b9hx8gsj.js";import q from"fs";import z from"path";import v from"process";async function f(M,N,H){let V=z.join(M,N),Y=`v${H}`,Z=H.split("."),T=Z[0],R=`${T}.${Z[1]||"0"}`,A=[{link:"v*",target:Y},{link:`v${T}`,target:Y}];if(R!==T)A.push({link:`v${R}`,target:Y});for(let{link:O,target:w}of A){let _=z.join(V,O);try{if(q.existsSync(_))await q.promises.unlink(_);if(await q.promises.symlink(w,_),L.verbose)console.warn(`Created symlink: ${O} -> ${w}`)}catch(j){if(L.verbose)console.warn(`Failed to create symlink ${O} -> ${w}:`,j)}}}async function c(M,N,H,V){let Y=z.join(N,"bin");await q.promises.mkdir(Y,{recursive:!0});let Z=z.join(N,"sbin");await q.promises.mkdir(Z,{recursive:!0});let T=[],R=[{sourceDir:z.join(M,"bin"),shimDir:Y},{sourceDir:z.join(M,"sbin"),shimDir:Z}];function A($,F){let J=[],U=[z.join($,"lib"),z.join($,"lib64")];for(let X of U)if(q.existsSync(X))J.push(X);function W(X,Q=0){try{let G=q.readdirSync(X,{withFileTypes:!0}).filter((K)=>K.isDirectory()&&!["bin","sbin","lib","lib64","share","include","etc","pkgs",".tmp",".cache"].includes(K.name));for(let K of G){let E=z.join(X,K.name);if(q.readdirSync(E,{withFileTypes:!0}).some((B)=>B.isDirectory()&&B.name.startsWith("v"))){let B=q.readdirSync(E,{withFileTypes:!0}).filter((x)=>x.isDirectory()&&x.name.startsWith("v"));for(let x of B){let u=z.join(E,x.name),m=[z.join(u,"lib"),z.join(u,"lib64")];for(let C of m)if(q.existsSync(C)&&!J.includes(C))J.push(C)}}else if(Q<3)W(E,Q+1)}}catch{}}return W(F),J}function O($){let F=[];function J(U,W=0){try{let X=q.readdirSync(U,{withFileTypes:!0}).filter((Q)=>Q.isDirectory()&&!["bin","sbin","lib","lib64","share","include","etc","pkgs",".tmp",".cache"].includes(Q.name));for(let Q of X){let G=z.join(U,Q.name);if(q.readdirSync(G,{withFileTypes:!0}).some((E)=>E.isDirectory()&&E.name.startsWith("v"))){let E=q.readdirSync(G,{withFileTypes:!0}).filter((I)=>I.isDirectory()&&I.name.startsWith("v"));for(let I of E){let B=z.join(G,I.name),x=[z.join(B,"lib","pkgconfig"),z.join(B,"lib64","pkgconfig")];for(let u of x)if(q.existsSync(u)&&!F.includes(u))F.push(u)}}else if(W<3)J(G,W+1)}}catch{}}return J($),F}function w($){let F=[];function J(U,W=0){try{let X=q.readdirSync(U,{withFileTypes:!0}).filter((Q)=>Q.isDirectory()&&!["bin","sbin","lib","lib64","share","include","etc","pkgs",".tmp",".cache"].includes(Q.name));for(let Q of X){let G=z.join(U,Q.name);if(q.readdirSync(G,{withFileTypes:!0}).some((E)=>E.isDirectory()&&E.name.startsWith("v"))){let E=q.readdirSync(G,{withFileTypes:!0}).filter((I)=>I.isDirectory()&&I.name.startsWith("v"));for(let I of E){let B=z.join(G,I.name),x=z.join(B,"include");if(q.existsSync(x)&&!F.includes(x))F.push(x)}}else if(W<3)J(G,W+1)}}catch{}}return J($),F}let _=A(M,N),j=O(N),S=w(N);for(let{sourceDir:$,shimDir:F}of R){if(!q.existsSync($))continue;let J=await q.promises.readdir($);for(let U of J){let W=z.join($,U),X=await q.promises.stat(W);if(X.isFile()&&X.mode&73){let Q=z.join(F,U),G=`#!/bin/sh # Launchpad shim for ${U} (${H} v${V}) # Set up comprehensive build environment for launchpad-installed packages `;if(_.length>0){let K=_.join(":");G+=`# macOS dynamic library paths if [ -n "$DYLD_LIBRARY_PATH" ]; then export DYLD_LIBRARY_PATH="${K}:$DYLD_LIBRARY_PATH" else export DYLD_LIBRARY_PATH="${K}" fi if [ -n "$DYLD_FALLBACK_LIBRARY_PATH" ]; then export DYLD_FALLBACK_LIBRARY_PATH="${K}:$DYLD_FALLBACK_LIBRARY_PATH" else export DYLD_FALLBACK_LIBRARY_PATH="${K}:/usr/local/lib:/lib:/usr/lib" fi # Linux dynamic library paths if [ -n "$LD_LIBRARY_PATH" ]; then export LD_LIBRARY_PATH="${K}:$LD_LIBRARY_PATH" else export LD_LIBRARY_PATH="${K}" fi `}if(j.length>0){let K=j.join(":");G+=`# Set up pkg-config to find launchpad-installed libraries if [ -n "$PKG_CONFIG_PATH" ]; then export PKG_CONFIG_PATH="${K}:$PKG_CONFIG_PATH" else export PKG_CONFIG_PATH="${K}" fi `}if(H==="php.net"){let K=z.join(N,"php.ini");G+=`# Prefer project-level php.ini when present if [ -f "${K.replace(/"/g,"\\\"")}" ]; then export PHPRC="${K.replace(/"/g,"\\\"")}" fi `}if(S.length>0){let K=S.join(" ");G+=`# Set up include paths for compilation if [ -n "$CPPFLAGS" ]; then export CPPFLAGS="-I${K} $CPPFLAGS" else export CPPFLAGS="-I${K}" fi # Set up library paths for linking if [ -n "$LDFLAGS" ]; then export LDFLAGS="-L${_.join(" -L")} $LDFLAGS" else export LDFLAGS="-L${_.join(" -L")}" fi `}if(G+=`# Execute the actual binary exec "${W}" "$@" `,await q.promises.writeFile(Q,G),await q.promises.chmod(Q,493),T.push(U),L.verbose)console.warn(`Created shim: ${U} -> ${W}`)}}}return T}async function P(M,N,H){let V=z.join(M,N),Y=z.join(V,`v${H}`);if(!q.existsSync(Y))return;let T={"openssl.org":["v1","v1.1","v1.0"],libssl:["v1","v1.1"],libcrypto:["v1","v1.1"]}[N]||[];for(let R of T){let A=z.join(V,R);if(!q.existsSync(A))try{if(await q.promises.symlink(`v${H}`,A),L.verbose)console.warn(`Created compatibility symlink: ${R} -> v${H} for ${N}`)}catch(O){if(L.verbose)console.warn(`Failed to create compatibility symlink for ${N}: ${O}`)}}}async function d(M,N){try{let H=z.join(M,"bin"),V=z.join(M,"sbin"),Y=z.join(M,"lib"),Z=z.join(M,"lib64"),T=z.join(M,"include"),R=z.join(M,"share"),A=q.existsSync(H),O=q.existsSync(V),w=q.existsSync(Y),_=q.existsSync(Z),j=q.existsSync(T),S=q.existsSync(R),$={"sqlite.org":()=>{return A&&q.existsSync(z.join(H,"sqlite3"))},"php.net":()=>{return A&&q.existsSync(z.join(H,"php"))},"gnu.org/bison":()=>{return A},"gnu.org/m4":()=>{return A},"re2c.org":()=>{return A},"gnu.org/sed":()=>{return A},"gnu.org/autoconf":()=>{return A},"gnu.org/automake":()=>{return A},"freedesktop.org/pkg-config":()=>{return A},"x.org/util-macros":()=>{let J=z.join(R,"aclocal"),U=z.join(R,"pkgconfig");return q.existsSync(J)||q.existsSync(U)||S||A},"x.org/protocol":()=>{let J=z.join(R,"pkgconfig");return j||q.existsSync(J)||S||A},"curl.se/ca-certs":()=>{let J=[z.join(M,"share"),z.join(M,"etc"),z.join(M,"ssl"),z.join(M,"curl.se","ca-certs")],U=(W,X=0)=>{if(!q.existsSync(W)||X>5)return!1;try{let Q=q.readdirSync(W);for(let G of Q){let K=z.join(W,G);if(G.endsWith(".pem")||G.endsWith(".crt")||G.includes("cert")||G==="cert.pem")return!0;if(q.statSync(K).isDirectory()&&G!=="bin"&&G!=="lib"){if(U(K,X+1))return!0}}}catch{}return!1};return J.some((W)=>q.existsSync(W))||U(M)},"perl.org":()=>{return A&&q.existsSync(z.join(H,"perl"))}};if($[N])return $[N]();if(!A&&!O){if(w||_||j||S)return!0;return!1}if(["gnu.org/gmp","openssl.org","zlib.net","libpng.org","libsodium.org","sourceware.org/libffi"].includes(N)){if(A)try{if((await q.promises.readdir(H)).length>0)return!0}catch{}return w||_||A}return A||O}catch(H){if(L.verbose)console.warn(`Error validating package ${N}:`,H);return!0}}async function g(M){let N=z.join(M,"build-env.sh"),H=[],V=[],Y=[],Z=[];function T(A,O=0){try{let w=q.readdirSync(A,{withFileTypes:!0}).filter((_)=>_.isDirectory()&&!["bin","sbin","lib","lib64","share","include","etc","pkgs",".tmp",".cache"].includes(_.name));for(let _ of w){let j=z.join(A,_.name);if(q.readdirSync(j,{withFileTypes:!0}).some(($)=>$.isDirectory()&&$.name.startsWith("v"))){let $=q.readdirSync(j,{withFileTypes:!0}).filter((F)=>F.isDirectory()&&F.name.startsWith("v"));for(let F of $){let J=z.join(j,F.name),U=[z.join(J,"lib"),z.join(J,"lib64")];for(let G of U)if(q.existsSync(G)&&!H.includes(G))H.push(G);let W=[z.join(J,"lib","pkgconfig"),z.join(J,"lib64","pkgconfig")];for(let G of W)if(q.existsSync(G)&&!V.includes(G))V.push(G);let X=z.join(J,"include");if(q.existsSync(X)&&!Y.includes(X))Y.push(X);let Q=z.join(J,"bin");if(q.existsSync(Q)&&!Z.includes(Q))Z.push(Q)}}else if(O<3)T(j,O+1)}}catch{}}T(M);let R=`#!/bin/sh # Launchpad Build Environment Setup Script # Source this script to set up environment for building with launchpad-installed packages # Set up PATH to include launchpad binaries if [ -n "$PATH" ]; then export PATH="${Z.join(":")}:$PATH" else export PATH="${Z.join(":")}" fi `;if(H.length>0){let A=H.join(":"),O=v.platform==="darwin";R+=`# Set up library paths for dynamic linking export LD_LIBRARY_PATH="${A}${O?":$LD_LIBRARY_PATH":""}" export DYLD_LIBRARY_PATH="${A}${O?":$DYLD_LIBRARY_PATH":""}" export DYLD_FALLBACK_LIBRARY_PATH="${A}:/usr/local/lib:/lib:/usr/lib" `}if(V.length>0){let A=V.join(":"),O=v.env.PKG_CONFIG_PATH||"",w=O?`${A}:${O}`:A;R+=`# Set up pkg-config to find launchpad-installed libraries export PKG_CONFIG_PATH="${w}" `}if(Y.length>0||H.length>0){let A=v.env.CPPFLAGS||"",O=v.env.LDFLAGS||"",w=A?`-I${Y.join(" -I")} ${A}`:`-I${Y.join(" -I")}`,_=O?`-L${H.join(" -L")} ${O}`:`-L${H.join(" -L")}`;R+=`# Set up include paths for compilation export CPPFLAGS="${w}" # Set up library paths for linking export LDFLAGS="${_}" `}if(R+=`# Create pkg-config symlinks for common naming mismatches # This handles cases where build scripts expect different package names for pkg_dir in "$PKG_CONFIG_PATH"; do IFS=':' read -ra PKG_DIRS <<< "$pkg_dir" for dir in "\${PKG_DIRS[@]}"; do if [ -d "$dir" ]; then # libpng16 -> libpng if [ -f "$dir/libpng16.pc" ] && [ ! -f "$dir/libpng.pc" ]; then ln -sf libpng16.pc "$dir/libpng.pc" fi # libturbojpeg -> libjpeg if [ -f "$dir/libturbojpeg.pc" ] && [ ! -f "$dir/libjpeg.pc" ]; then ln -sf libturbojpeg.pc "$dir/libjpeg.pc" fi # openssl -> libssl if [ -f "$dir/openssl.pc" ] && [ ! -f "$dir/libssl.pc" ]; then ln -sf openssl.pc "$dir/libssl.pc" fi fi done done # Print environment info echo "Launchpad build environment activated:" echo " PATH: $PATH" echo " LD_LIBRARY_PATH: $LD_LIBRARY_PATH" echo " PKG_CONFIG_PATH: $PKG_CONFIG_PATH" echo " CPPFLAGS: $CPPFLAGS" echo " LDFLAGS: $LDFLAGS" # Test iconv functionality if available if command -v iconv >/dev/null 2>&1; then echo "Testing iconv functionality:" iconv --version 2>/dev/null || echo "iconv version check failed" # Test basic iconv conversion if echo "test" | iconv -f UTF-8 -t UTF-8 >/dev/null 2>&1; then echo "\u2713 iconv basic functionality working" else echo "\u26A0\uFE0F iconv basic functionality test failed" fi else echo "iconv not found in PATH" fi `,await q.promises.writeFile(N,R),await q.promises.chmod(N,493),L.verbose)console.warn(`Created build environment script: ${N}`)}async function l(M,N){let H=z.join(M,"lib","pkgconfig");if(!q.existsSync(H))return;let Y={"libpng.org":[{target:"libpng16.pc",link:"libpng.pc"}],"libjpeg-turbo.org":[{target:"libturbojpeg.pc",link:"libjpeg.pc"}],"openssl.org":[{target:"openssl.pc",link:"libssl.pc"}]}[N]||[];for(let{target:Z,link:T}of Y){let R=z.join(H,Z),A=z.join(H,T);if(q.existsSync(R)&&!q.existsSync(A))try{if(await q.promises.symlink(Z,A),L.verbose)console.warn(`Created pkg-config symlink: ${T} -> ${Z}`)}catch(O){if(L.verbose)console.warn(`Failed to create pkg-config symlink ${T} -> ${Z}:`,O)}}} export{f as O,c as P,P as Q,d as R,g as S,l as T};