[pacman-dev] Status of "Splitting packages with makepkg"

Marc - A. Dahlhaus mad at wol.de
Fri Nov 14 06:57:02 EST 2008


Allan McRae schrieb:
> Aaron Griffin wrote:
>> On Thu, Nov 13, 2008 at 11:33 AM, Allan McRae <allan at archlinux.org> 
>> wrote:
>>  
>>> Aaron Griffin wrote:
>>>    
>>>> On Thu, Nov 13, 2008 at 11:18 AM, Allan McRae <allan at archlinux.org> 
>>>> wrote:
>>>>
>>>>      
>>>>> Allan McRae wrote:
>>>>>
>>>>>        
>>>>>> Marc - A. Dahlhaus [ Administration | Westermann GmbH ] wrote:
>>>>>>
>>>>>>          
>>>>>>> Hello Allen,
>>>>>>>
>>>>>>> the prototype has a little problem in case you give -L option to
>>>>>>> makepkg
>>>>>>> as it is now:
>>>>>>>
>>>>>>> As makepkg pipes the output of the build-function into tee, the
>>>>>>> build-function gets executed in a sub-shell. Any changes of 
>>>>>>> variables
>>>>>>> in
>>>>>>> context of main-shell from inside build-function will not work 
>>>>>>> in that
>>>>>>> case. This leads to that we have to set the values of all
>>>>>>> split-package-variables outside of the respective build-functions.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>             
>>>>>> As I said, the implementation is still a bit away...  The KDEmod 
>>>>>> guys
>>>>>> override the PKGBUILD variables the same way.  I will look into what
>>>>>> they
>>>>>> for logging.
>>>>>>
>>>>>>           
>>>>> Testing with this script indicates to me that everything is fine...
>>>>>
>>>>> test.sh:
>>>>> #! /bin/bash
>>>>>
>>>>> output="FOO"
>>>>>
>>>>> build() {
>>>>>  output="BAR"
>>>>>  echo $output
>>>>> }
>>>>>
>>>>> echo $output
>>>>> build 2>&1
>>>>> build 2>&1 | tee buildlog
>>>>>
>>>>>
>>>>>
>>>>>        
>>>>>> ./test.sh
>>>>>>
>>>>>>           
>>>>> FOO
>>>>> BAR
>>>>> BAR
>>>>>
>>>>>
>>>>>        
>>>>>> cat buildlog
>>>>>>
>>>>>>           
>>>>> BAR
>>>>>
>>>>>
>>>>> So what exactly are you say is wrong?
>>>>>
>>>>>         
>>>> I think the case he means is this:
>>>> test.sh:
>>>> #! /bin/bash
>>>> output="FOO"
>>>> build() {
>>>>  output="BAR"
>>>>  echo $output
>>>> }
>>>>
>>>> echo $output
>>>> build 2>&1 | tee buildlog
>>>> echo $output
>>>> # end
>>>>
>>>> ./test.sh
>>>> FOO
>>>> BAR
>>>> FOO
>>>>
>>>> Which, after thinking a little about it, is the way we want this to
>>>> happen, yes?
>>>>       
>>> I think, yes it is.  From the KDEmod implementation, in the case 
>>> where we
>>> are not logging (and hence no tee) we need to revert the variables 
>>> to what
>>> they were before calling the build function.
>>> Anyway, this will all become more apparent as I finish implementing 
>>> it (with
>>> heavy borrowing for all the patches floating around). The 
>>> implementation can
>>> be a bit more complex to accommodate a simpler PKGBUILD as far as I am
>>> concerned.  Few people look at makepkg, many look at PKGBUILDs.
>>>     
>>
>> Hell, you might be able to cheat.
>> LOGFILE=/dev/null
>> # if -L is specified, set LOGFILE to something else
>> and always run:
>>    build() 2>&1 | tee $LOGFILE
>>
>> Bam, now variables are reset automatically. Just make sure you comment
>> that nicely 8)
>
> Very nice idea.  That will clean up the whole split package patches 
> nicely.
>
> Allan
>
>
> _______________________________________________
> pacman-dev mailing list
> pacman-dev at archlinux.org
> http://archlinux.org/mailman/listinfo/pacman-dev
Hello,

the problem is that we need the vars to be the same as inside the 
build-function as we need them outside of build-function for package 
creation. The function that creates and compresses the actual package 
will be executed outside of the scope of the sub-shell so you get 
allways the same package-vars (the global defined) while the main-shell 
creates the package for every split-package without knowing about any 
variable overloading from inside subshell-scope of the build-functions...

So i think as long as we stay with this loggin implentation we can 
scratch the overloading feathure alltogether and have to declare an 
array inside the scope of the main-shell for each variable...



More information about the pacman-dev mailing list