
    xheAm                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZ dd	lmZ dd
lmZ ddlmZ dZdZdZdZ e dddddddddej!        di ddddddd ddd!ej"        d"d#d$d%dd&d'd(d)d*d+d,dd-ej"        d"d#d$d%dd.d'd/d0d1d2d3dd-ej"        d"d4d5d%dd6d7d8d9d:d;d<d=ddej"        d"i d>d?d@dAdBdej"        d"i dCdD          Z#dE Z$dej"        fdFZ%dG Z&dH Z'dI Z(dJ Z)dK Z* e dLdMdNdOdPdQ          Z+d`dRZ,dadSZ-dT Z.dU Z/dV Z0dW Z1dX Z2dbdYZ3dZ Z4d[ Z5d\dd]ed8g defd^Z6d_ Z7dS )c    N)copy)chmodmakedirs)basenamedirnameexistsjoinsplitext)wrap)urlopen)ElementTree   )guess_license_family)download_to_cache   )yaml_quote_stringx86_64centos6a  package:
  name: {packagename}
  version: {version}

source:
  - url: {rpmurl}
    {checksum_name}: {checksum}
    no_hoist: true
    folder: binary
  - url: {srcrpmurl}
    folder: source

build:
  number: 2
  noarch: generic
  missing_dso_whitelist:
    - '*'

{depends}

about:
  home: {home}
  license: {license}
  license_family: {license_family}
  summary: {summary}
  description: {description}
aX  #!/bin/bash

set -o errexit -o pipefail

mkdir -p "${PREFIX}"/{hostmachine}/sysroot
if [[ -d usr/lib ]]; then
  if [[ ! -d lib ]]; then
    ln -s usr/lib lib
  fi
fi
if [[ -d usr/lib64 ]]; then
  if [[ ! -d lib64 ]]; then
    ln -s usr/lib64 lib64
  fi
fi
pushd "${PREFIX}"/{hostmachine}/sysroot > /dev/null 2>&1
cp -Rf "${SRC_DIR}"/binary/* .
centos5cos5z;http://vault.centos.org/5.11/os/{base_architecture}/CentOS/z'http://vault.centos.org/5.11/os/Source/zGhttp://vault.centos.org/5.11/os/{base_architecture}/repodata/repomd.xmlz#{architecture}-conda_cos5-linux-gnuzlinux-{bits}z{architecture}zel5.{architecture}sha1)r   
short_namebase_url	sbase_url
repomd_urlhost_machinehost_subdirfname_architecturerpm_filename_platformchecksummerchecksummer_namemacroscos6zBhttp://vault.centos.org/centos/6.10/os/{base_architecture}/CentOS/z1http://vault.centos.org/6.10/os/Source/SPackages/zNhttp://vault.centos.org/centos/6.10/os/{base_architecture}/repodata/repomd.xmlz#{architecture}-conda_cos6-linux-gnuzel6.{architecture}sha256z2.6.6z2.24.1)pyvergdk_pixbuf_base_versioncentos7cos7z@http://vault.centos.org/altarch/7/os/{base_architecture}/CentOS/z5http://vault.centos.org/7.7.1908/os/Source/SPackages/zLhttp://vault.centos.org/altarch/7/os/{base_architecture}/repodata/repomd.xmlz'{gnu_architecture}-conda_cos7-linux-gnuzlinux-ppc64lezel7.{architecture}clefosz?http://download.sinenomine.net/clefos/7/os/{base_architecture}/z5http://download.sinenomine.net/clefos/7/source/srpms/z>http://download.sinenomine.net/clefos/7/os/repodata/repomd.xmlz'{gnu_architecture}-conda-cos7-linux-gnuzlinux-s390xz2.7.5z2.36.2suse_leap_rpi3slrpi3Tzkhttp://download.opensuse.org/ports/aarch64/distribution/leap/42.3-Current/repo/oss/suse/repodata/repomd.xmlznhttp://download.opensuse.org/ports/{architecture}/distribution/leap/42.3-Current/repo/oss/suse/{architecture}/zShttp://download.opensuse.org/ports/{architecture}/source/factory/repo/oss/suse/src/z aarch64-conda_rpi3-linux-gnueabizlinux-aarch64)r   r   allow_missing_sourcesr   r   r   r   r   r   r   r    r!   r"   raspbian_rpi2rrpi2zarmv7a-conda_rpi2-linux-gnueabiz	armv7a-32)r   cdt_short_namer   r   r   r    r!   r"   )r   r   r'   r)   r*   r-   c                     dS )zuThis is a simple function returning True/False for if a requested package string exists
    in the add-on repository.T )package_names    9lib/python3.11/site-packages/conda_build/skeletons/rpm.pypackage_existsr4      s	     4    c                 $   |rt          ||d          }nt          d|i          }t          | d|          \  }} |            }|                    t          |d                                                     |                                }||fS )N)urlfnr7    rb)dictr   updateopenread	hexdigest)		src_cacher7   r8   r    sourcecached_path_csumcsumstrs	            r3   
cache_filerF      s    	 $c,,--ucl##&y"f==NK;==DKK[$'',,..///nnGr5   c                 ^   t          |           \  }}|                    d          d         }|                    d          }t          |          dk    r|d         |d         }}npt          |          dk    rKd                    |dt          |          dz
                     d                    |dd                    }}nt	          d|            |                    d          dd         }|d         }d                    |dt          |          dz
                     }	|	|||fS )N-.r   r   r   z6ERROR: Cannot figure out the release and platform for )r
   splitlenr	   print)
rpmfilenamebaserC   release_platformpartsreleaseplatformname_versionversionrpm_names
             r3   rpm_filename_splitrW      s   {##GD!zz#r*""3''E
5zzQ!!HeAh	UaHHU1s5zzA~+=%>??%PRPSPS*AUAUMtMMNNN::c??1R4(L2GxxQ\):):Q)>%>?@@HWgx//r5   c                 z    t          ||           \  }}t          t          |                     \  }}}}||||||fS N)rF   rW   r   )rpm_urlr@   rB   	sha256strrV   rU   rR   rS   s           r3   rpm_split_url_and_cacher\      sG    '	7;;K+=hw>O>O+P+P(HgwWgxiGGr5   c                     |  d| d| d| dS )NrH   rJ   z.rpmr1   )rV   rU   rR   rS   s       r3   rpm_filename_generater^      s)    ;;;;7;;X;;;;r5   c                     t          ||||          }t          | |          }t          |dt          d|i                    \  }}	|sJ d|             |S )zJ
    Forms the URL and also attempts to cache it to verify it exists.
    r9   r7   z"Failed to cache generated RPM url )r^   r	   r   r;   )
url_dirnamerV   rU   rR   rS   r@   resultr7   pathrC   s
             r3   rpm_url_generaterc      si     #8WgxHHF
{F
#
#C	2tUCL/A/ABBGD!>>>f>>>>>Jr5   c                 t   |d         }d}	 | |         }|}ni#  |                                  D ]M\  }}|D ]E}||v r?d||         v r5||         d         D ]&}	|	d         |k    rt          d|            |}|} n'FNY nxY w|dk    rt          d|            dS d }
|D ]
}||v r|}
 n|
sdS ||
         }|||
fS )Nnamer9   provideszFound it in z@WARNING: Did not find package called (or another one providing) )NNN)itemsrM   )repo_primaryarchitecturesdependdep_namefound_package_namefound_packagere   packagearchprovidechosen_archentrys               r3   find_repo_entry_and_archrs      sc   f~H&$X.%&)//11 		& 		&MD'% & &7??!WT]22'.t}Z'@ & &G&v(:: %&;T&;&; < < <0759 2 %	  ;	&		& 		& RYxYY	
 	
 	
  K  =  KE !   +&E$k11s
   
 A$A=<z<=z==z>=>)LTLEEQGEGTc                 4   |r| j         t          | d          iS t          | j                  }| j        r
| j        |d<   |                     d          D ]C}|j         |vr
g ||j         <   ||j                                      t          |d                     D|S )NF_textz./*)tagdictifyr   attribtextfindallappend)rrootdxs       r3   r~   r~     s     *wq%(())QXAv V'
YYu + +5>>AaeH	!%5))****Hr5   c                    | dz   }t          |          r"t          j        t          |d                    S t          | d          5 }|                                }t          j        dd|d          }t          j        d	d
|          }t          j        |	                    d                    }t          |          }|r ||||          }t          j        |t          |d                     |cd d d            S # 1 swxY w Y   d S )Nz.pr:   utf-8)encodingz\sxmlns="[^"]+"r9   r   countz\sxmlns:([a-zA-Z]*)="[^"]+"z xmlns:\1="\1"wb)r   pickleloadr=   r>   resubET
fromstringencoder~   dump)	xml_filer@   dict_massagercdtpickledxf	xmlstringr   ra   s	            r3   dictify_pickledr   "  sD   oGg 0{4..///	h	)	)	) RGGII	F-sIQGGG	F9;LiXX	}Y--g6677 	;"]69c::FFD$//000                 s   B,DDDc           	         t          |                                           }t          j        dd|d          }t	          j        |          }|                    d| d          D ]}|                    d          d         j        }t          ||          }		 t          ||	d |d	                   \  }	}
nq#  |                    d
          d         j        }|                    d          d         j
        d         }t          t          |                     dz   |z   }t          ||d |d	                   \  }}||k    sJ d| d|              t          j        |d          5 }|                                } |d	                     }
|
                    |           |
                                }
|
|k    r>t          |	d          5 }|                    |           d d d            n# 1 swxY w Y   nt#          d| d           d d d            n# 1 swxY w Y   Y nxY wt%          |	|||          c S t'          i           S )Ns   \sxmlns="[^"]+"r5   r   r   z	*[@type='z']zopen-checksumr   r    checksumlocationhref/zChecksum for z does not match value in r:   r   z%ERROR: Checksum of uncompressed file z does not match)r   r>   r   r   r   r   r   r   r	   rF   r   r   gzipr=   r<   r?   writerM   r   r;   )r   	data_typer   r   r@   r   repomdchild	open_csumr   xml_csumrD   r   
xmlgz_filerB   cached_csumgzxml_contentxmls                      r3   get_repo_dictr   4  s   
##((**I*C!DDDI]9%%F 9I 9 9 9:: H HMM/2215:		9--	!+8T3}+=" "Hhh	==,,Q/4D}}Z003:6BH !4!455;hFJ'1:tS-?( ($K ###PzPPJPP $##;--  ggii-3}-//,,,#--//y((h-- /		+.../ / / / / / / / / / / / / / / [
[[[                 xM3GGGGG88OsV   B88B0H&(A$HG.	"H.G22H5G26HH&HH& H!H&c                    | D ]}|d         |d<   d|v rt           |d                  |d<   nd |d<   d|v rd|d         v r|d                             dd          |d<   |d                             d          sd|d         z   |d<   |d                             d          s|d         dz   |d<    |d         j        d	i |d         |d<   | S )
Nre   flagsver%r9   {}r"   r1   )str_flags_to_conda_version_specreplace
startswithendswithformat)requiresr   requires      r3   massage_primary_requiresr   Z  s    H H!&/g>ww?OPGG#GGGgen$$!(!7!7R!@!@u~0055 :%(75>%9GENu~..s33 :%,U^c%9GEN!6!6!G!GX!G!GOr5   c                 
   t          i           }| d         d         D ]}|d         d         d         }|d         d         d         }|dk    r2|d         d         d         }|d	         d         d
         d         d         }|d         d         d         }	|d         d         }
|d         d         d         }	 |d         d         d         }n	#  d}Y nxY wd|d         d         v r|d         d         d         }nd}|d	         d         d         d         d         }	 |d	         d         d         d         d         }t          ||          }n	#  g }Y nxY w	 |d	         d         d         d         d         }t          ||          }n	#  g }Y nxY wt          ||	|||
t          |          ||||d
          }||v r,|||         v rt          d| d|            |||         |<   t          ||i          ||<   |S )a  
    Massages the result of dictify() into a less cumbersome form.
    In particular:
    1. There are many lists that can only be of length one that
       don't need to be lists at all.
    2. The '_text' entries need to go away.
    3. The real information starts at ['metadata']['package']
    4. We want the top-level key to be the package name and under
       that, an entry for each arch for which the package exists.
    metadatarn   re   r   r|   ro   srcr   r   z{rpm}sourcerpmr   r   rU   summarydescriptionNAr7   r9   z{rpm}licensez{rpm}providesz
{rpm}entryz{rpm}requires)
r   r   homerA   rU   r   r   licenserf   r   z&WARNING: Duplicate packages exist for z
 for arch )r;   r   r   rM   )rh   r@   r   new_dictrn   re   ro   r   rA   r   rU   r   r   r7   r   rf   r   new_packages                     r3   massage_primaryr   l  ss    BxxH
+I6 67 67vq!'*vq!'*5==:&q)'2"1%&67:7C :&q)&1)$Q')$Q'0	!-03G<KK	KKKgenQ'''%.#G,CCC(#A&~6q9'B	x(+O<Q?MH/#>>HH	HHH	x(+O<Q?MH/#>>HH	HHH$$ ",W55*"$$ 
 
 8x~%%UtUUtUUVVV#.HTN4  !4"566HTNNOs$   ;CC!0EE0FFc                     | d         }| d         }|                     d          sQ|                     d          s<|                     d          s'|                     d          s|dk    rd|vrd	|vr|rd
S dS )Nre   r   zrpmlib(zconfig(z
pkgconfig(r   zrtld(GNU_HASH)z.so(TF)r   )dependsre   	str_flagss      r3   valid_dependsr     s    6?D IOOI&&
	**
 --
 $$	

 $$$tOO  t5r5   c                     ddddddd}|                                  }||v r||         t          ||                   }}n| t          |           }}|dk    rd}n|d	k    rd}n|d
k    rd}n|dk    rd}||fS )NzLGPL (>= 2)z
GPL (>= 2)zPublic-DomainMITzThe Open Group License)zlgplv2+zgplv2+zpublic domain (uncopyrighted)zpublic domainzmit/x11zthe open group licenseAPACHEApachezPUBLIC-DOMAINPROPRIETARYProprietaryOTHEROther)lowerr   )rpm_licensemappingl_rpm_licenser   familys        r3   remap_licenser     s     )8(": G  %%''MM" !788 
 &';K'H'H	?	"	" 	=	 	 	7		F?r5   c                 \    |                      d          }|dk    rt          ||          }|S )Nz'"
 r   )stripr   )r   wrap_atstrippeds      r3   	tidy_textr     s0    zz(##H{{'**Or5   c                    t          ||t          d|i                    \  }}	}
|sd S |r	|d         }
nd         }
|	}t          t          d                             dz   |d         z   }d         |d         z   }t          ||          \  }}}}}}	 t          ||          \  }}}}}}n#  d	v r|}n Y nxY wd
 |d         D             }|d         v rd         |         D ]}t          ||t          d|i                    \  }}}|rC|d         D ]9}|d         |k    r+t	          |          }d|v r|d= |                    |           :kt          d| d| d           |D ]}t          |||          \  }}}|r|d         }||d<   |d         |k    r:d|v r6d|d         v r|d         d         |d<   d|d         v r|d         d         |d<   | rt          | ||d         ||||          |d<   d         dz   |
z   }d}t          |          rMfd|D             }d	                    d |D                       }d|z   dz   }d|z   dz   }d|z   }d|z   |z   |z   }|
                                                    d d!          } | dz   |z   }!t          |d"                   \  }"}#t          i d|d         d         d#|!d$d%         d&d'         d(|d)|d*|d+|d+         d"|"d,|#d-d.         d/|d/         d0d1t          |d0                   z   d2z   d3d4d5	                    t          |d3         d6                    z   d7d8d9d:d;d<d=d>d?          }$t          ||!          }%	 t          |%           n#  Y nxY wt          t          |%d@          dA          5 }&|&                    t#          j        dEi |$                    dB                     d d d            n# 1 swxY w Y   t          |%dC          }'t          |'dA          5 }&t)          |'dD           |&                    t+          j        dEi |$                    dB                     d d d            n# 1 swxY w Y   |S )FNre   r   r   r   r   r   r   rA   r,   c                 0    g | ]}t          |          |S r1   )r   ).0requireds     r3   
<listcomp>z'write_conda_recipes.<locals>.<listcomp>	  s%    UUUH]8=T=TUxUUUr5   r   dependency_addrf   relz"WARNING: Additional dependency of , z
 not foundro   rU   r   epochr   rH   r9   c           
          g | ]_}d                      |d                                                             dd          d         |d         |d         |d                   `S )z{}-{}-{} {}{}re   +r   r   ro   r   r   )r   r   r   )r   rj   r   s     r3   r   z'write_conda_recipes.<locals>.<listcomp>9  s{     	
 	
 	
  ""v$$&&..sC88L!vwu 	
 	
 	
r5   
c                     g | ]}d | S )z    - r1   )r   depends_specs     r3   r   z'write_conda_recipes.<locals>.<listcomp>D  s!    GGG$l$$GGGr5   z	  build:
z  host:
z  run:
zrequirements:
r   r   r   packagenamehostmachiner   
hostsubdirr   r   rpmurl	srcrpmurlr   license_familychecksum_namer!   r   r   z"(CDT) "r   z
|
        z	
        N   PREFIXz{PREFIX}RPMz{RPM}PWDz{PWD}z{RECIPE_DIR}z	{SRC_DIR})
RECIPE_DIRSRC_DIRz	meta.yamlr   r   zbuild.shi  r1   )rs   r;   r   r\   r   r   rM   write_conda_recipesrL   r	   r   r   r   r   r   r=   r   RPM_METAr   r   r   BUILDSH)(	recursiverh   rn   ri   r   
output_diroverride_archr@   rr   
entry_namero   rZ   srpm_urlrC   r[   r   missing_dep	e_missinge_name_missingrf   copy_providesrj   	dep_entryrk   dep_archsn
dependsstrdepends_specsdependsstr_partdependsstr_builddependsstr_hostdependsstr_run	package_lpackage_cdt_namer   r   r   odirfbuildshs(       `                                   r3   r   r     s    7mT67*;%<%< E:t   )Q'(Ggc*o..//#5j8IIG;%/1H6w	JJAq!Q9	 38YGG1aAqq"c))HH H VUj(9UUUG#&'''/09 	 	K+CmT6;2G-H-H, ,(I~q  
 )* 5 6 6H'>99(,X M11 -e 4}5556 [[[K[[[      (@-)
 )
%	8X  	($Q'H!v &>X%%)y*@*@	),,, )) 4U ;u)I..."+I"6w"?w 
	0v	 	F6N 
\	S	 4	'BJ
7|| 
	
 	
 	
 	
 "	
 	
 	
 ))GGGGG
 
 (/9D@%7$>#o5 00?B^S 	 ''S11I 3++E),<==G^	
uY'.	
+	
 3~.	
 #m,		

 z	
 g	
 	
 E&M	
 w	
 n	
 S!34	
 j)	
 y9U9-=#>#>>D	
 =	%*> C CDDE	
* j+	
, 7-	
. 7/	
0 )"3	
 	
 	
	 	A: 
,--D	d4%%t	,	, 6	$$!$$++G445556 6 6 6 6 6 6 6 6 6 6 6 6 6 64$$G	gt		 5gu	####**7334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Ns=   B. .
B:2N N'8O++O/2O/AQ**Q.1Q.c                 <   |}|dv rdnd}	t          ddi          }
t          ddi          }	 |
|         }n	#  |}Y nxY w	 ||         }n	#  |}Y nxY wt          ||||	d          }t                      }t          |                                         D ]0\  }}t          |t                    r |j        di |||<   +|||<   1d	|vrt                      |d	<   |ry|D ]v}|d
                             d          }|d
         |d	         v r0|d	         |d
                                      |dd                     ]|dd          |d	         |d
         <   w|d         }t          |dt          ||j
                  }| D ]}t          ||||dg||||j
                    d S )N)armv6armv7ai686i3863264r  r  ppc64lepowerpc64le)architecturebase_architecturegnu_architecturebitsr   r   ,r   r   primarynoarchr1   )r;   CDTsrg   
isinstancestrr   rK   extendr   r   r@   r   )packagesdistror   r  r   r   r   configcdt_namer!  base_architecturesgnu_architecturesr  r   architecture_bitsr   kvpackage_and_missed_depsas_listr   rh   rn   s                          r3   write_conda_reciper4    sN    H#FFF44DDvv.// i788).|<)((,\:('(!2 0		
 	
  &&CX$$&&  1a 	QX22 122CFFCFF s"" $ @'5 	@ 	@#-a066s;;GqzS!1222$%gaj188EEEE4;ABBK$%gaj11\"J IV5E L  

 

8$		
 		
 		
 		


 

s   7 =A
 
ArJ   Fc	           
      2    t          | |||||||           d S rY   )r4  )	r)  r   rU   r   r  r   r   r+  r*  s	            r3   skeletonizer6    s8     	 	 	 	 	r5   c                    |                      dd          }|                    ddd           |                    dd	d
           |                    dddd           |                    dddd           |                    ddt                     |                    dd           d fd}|                    d|t          d                         |                    ddd d!d"#           d S )$Nrpmz2
    Create recipe skeleton for RPM files
        )helpr)  r   zRPM package name(s))nargsr9  z--output-dirz5Directory to write recipes to (default: %(default)s).rJ   )r9  defaultz--recursive
store_truer   z<Create recipes for dependencies if they do not already exist)actiondestr9  z--dependency-addr   zGAdd undeclared dependencies (format: package,missing_dep1,missing_dep2))r:  r=  r9  z--architecturezUConda arch to make these packages for, used in URL expansions (default: %(default)s).z	--versionz(Version to use. Applies to all packages.c                  n    d                     d t                                          D                       S )Nr   c                     g | ]\  }}|S r1   r1   )r   re   rC   s      r3   r   z5add_parser.<locals>.valid_distros.<locals>.<listcomp>  s    ;;;74$;;;r5   )r	   r%  rg   r1   r5   r3   valid_distrosz!add_parser.<locals>.valid_distros  s+    yy;;djjll;;;<<<r5   c                 X    | t           vrt          j        d                        | S )Nzvalid --distro values are )r%  argparseArgumentTypeError)distro_namerA  s    r3   r*  zadd_parser.<locals>.distro  s<    d"",>]]__>>   r5   z--distroz:Distro to use. Applies to all packages, valid values are: )typer;  r9  z--no-override-archz'Do not override noarch in package namesr   Tstore_false)r9  r>  r;  r=  )
add_parseradd_argumentdefault_architecturedefault_distro)reposr8  r*  rA  s      @r3   rH  rH    s   


   C Zs1FGGGD     K	     V	     d$     7    
= = =     [--//[[	     6      r5   )T)NN)r   )8rC  r   hashlibr   r   r   osr   r   os.pathr   r   r   r	   r
   textwrapr   urllib.requestr   	xml.etreer   r   r   r   rA   r   cranr   rJ  rK  r   r   r;   r   r$   r%  r4   rF   rW   r\   r^   rc   rs   r   r~   r   r   r   r   r   r   r   r   r4  r6  rH  r1   r5   r3   <module>rT     s!       				               = = = = = = = = = = = = = =       " " " " " " ' ' ' ' ' ' 1 1 1 1 1 1 & & & & & & # # # # # #   <* t ! UBcA)"2%9"< &
 
 ! \LjA)"2%9"> ( !(HMM
 
$ ! ZPhE*"2%9"> ( !(HMM
 
$   YPZE("2%9"> ( 'HMM
 
 (" &* H In
 ?*"2%5"> ()
 
. '%=&"2"> (	
 	
k_ _a aH   #'GN 	  	  	  	 0 0 0 H H H< < <  "2 "2 "2J #'$ # # 
 
 
 
   $# # #L  $D D DN  "  :   P P PnB
 B
 B
N %   .@ @ @ @ @r5   