 Was ist das? Was ist Röhrklapp? Röhrklapp? Röhrklapp? Das ist mal das Abnis drin? Ja, das ist mal das Abnis drin. Das wären eigentlich die Videos, aber ich habe da auf dem USA-Rangistisch-Geschraub den neu geschrieben hat. Das ist ein Fragartisch-Geschraub. Das sind jetzt 250mW, dann macht er das Bord, da sind jetzt nicht mehr 350mW. Ich gucke mir jetzt diesen Trock nicht an, um mich genau bei solchen Fragen kurz zu beschäftigen. Okay, ich würde das für den Trock jetzt ja alles auf dieses Wochenende machen, damit ich nicht mein Backproport muss. Ich würde Ihnen rechtlichen Trock und den Trock alles komplett klart. Ja. Hast du die Menschen gebraucht? Hast du die Menschen gebraucht? Wie wichtig hat man sie gebraucht? Guck dir am Ei an, ich will nicht mehr. Hier ist der Erb der Dir das ist. Noch mal, noch mal. Ich bin da dann auf den Trock. Sag mir, es gibt Reichen. Ja, da ist es. So, hello everybody, I'm going to talk about auto-tools-related build issues that you probably have came across if you are maintaining a package that uses auto-tools, you might have gotten an e-mail in the name that your package was built from the live tool and you didn't know what to do exactly because it's so easy. So, I'm going to explain quickly how the auto-tools work and then have a look at the most common issues that arise with our build demons and how they interact with the devian packaging system and of course I will explain how to fix most of those issues. So, without the auto-tools, they are a set of tools called auto-conf, auto-make, link-to, get-text, there are a few others and their main goal is to provide the framework to add the simple bootstrap, configure and make procedure, most of the time you have done it. You also get a lot of problems today because the versions change their syntax from time to time and auto-tools strips no longer work with a more recent version, which is why you have at least five versions of auto-make in devian at the same time, which are mutually compatible of course. But, once you get used to that fact, they work pretty well, I will explain what upstream and what you have to do with the package that uses auto-tools. What upstream does is write a configurable.ac file, which used to be called configurable.in, it contains checks for libraries to help the system, for headers, for computer flags, for computer compiler features, for features of the system such as is there a Snatch Dev directory, you can check almost everything you want. There are macros in the configurable.ac file, but you can also call shell commands and do almost everything you want. This will be used in the configurable phase of the configuration of the program. So, you are sure that the features are checked at configurable time and not on your machine or based on various assumptions. For instance, we used to check for humane, and if it said Linux, we would just say, okay, it's Linux, so we now have this header available, this one, this library is of course installed. This was not a very good solution, because there are many flavors of Linux, so auto-tools was useful, even if we were only using Linux, but now we have other kernels in Linux, so they are becoming a must-have for some applications. The other file that the trains need to write is makefile.am, it's kind of a simplified makefile, which just points the targets of your project, a few rules. Afterwards, this makefile.am is changed into a makefile.in by automake, and then by the configure script, I will give a bigger picture of the whole process afterwards. And then, all such string has written those two files, and of course has written the code of his program, of his project. He just calls a bootstrap script or just calls its contents by hand, there are not many different programs to call to bootstrap. And then the string can distribute the target with everything configured and ready to run the configure script. So, how does the configure.ac file look like? It starts with a few configuration options, which tell it where the temporary files are going, what is the main source file, the name of the project, the .h file that will be used by the project, which is always configured.h. And then you can make all the checks you want. So, here you have a few examples. You have AC check files, which checks for libc functions, or functions that are present on the system without the need of an extra library. You can check for headers, for instance, sanga.h. You can check for external libraries. For instance, this one checks for iNet-Petal on libresolve, which isn't available on Linux, for instance, but not on all the versions of Solaris. You can check for almost everything. And then all those features that you have checked appear magically in your program, when you include the configure.ac file. You can also check for compiler features. The check at the bottom is a check for altibake features, which only exist in GCC since 3.3. Before that, you had to activate extra headers and so on. So you can have a very fine idea of what your system is able to do in terms of build environment. And then you tell the configure.ac script where the makefiles are. You can have several makefiles in your project, depending on how you want to handle the make thing. You know, with a monolithic makefile or with recursive makes, it's really how you like it. And then, you have the makefile.am file. This is a really short example of a binary program, which uses one.c file. You also have extra compiler flags in the makefile, but usually you just define them conditionally in the configure script and they are automatically appended here. For instance, the check for libresolve will automatically append dashlresolve to the lib's flags. But you don't even have to put them here. It will automatically link your binary with libresolve if you want. So that's pretty simple makefile.am. You don't have to learn anything on how to call GCC, how to call the linker on different platforms, whether the binary should have a .exe suffix, like on Windows and so on. The better thing is handled for you and you just run make and you can run make clean and so on. Everything is done magically. So that's a simple big job. Oh, here's an example of min.c. So at the beginning you include your configure.h file, which was generated by the configure script. And then you can check for features with ifdesk. So. So, it's very simple, because I did not include lib2. Oh, we can't tell you so. Anything that makes it become even worse. But that's the process of bootstrapping your source after you have written those. What the absolute rights is the configure.ac file and the makefile.am file. All the rest are temporary files created by the other tools, which are necessary, which you can hide in a . directory if you'd like to see them. So, you start with AC local, which extracts used maplers from the configure.ac file and makes a compilation of these maplers for further expansion by AutoConf. So, it creates a temporary file, which is then used by AutoConf together with the configure.ac file to create the configure script. This one is shipped with the package after bootstrapping. Then you have AutoHeader, which creates a config.h.in. This one contains a list of all the features that can be activated. Most of them might be activated, some of them will not. They are just commended. And afterwards, when you run the configure script, it will check for all the lines in config.h.in and creates the final config.h file for your specific build target. Then you have AutoMake, which uses both the configure.ac and the written makefile.am file to create the makefile.in, which is also shipped with the package. And the configure script, when you run it, will create the makefile. So, the configure sequence is not part of the bootstrap process, but it gives a better idea of what the final products are. Once you have the makefile and the configure.h files, you can just run make and everything works. Oh, sure. Hopefully. So, we have a lot of drafts. And these are some of the temporary files that are created by the bootstrap process. And they can be a problem, because they are shipped with your package. And if you have a bug in your bootstrap programs, such as an updated lead tool or something like that, all the two spies are wrong. And they will not change whatever the build system is. So, we have taken, we use some software that is no longer maintained. And we always have such problems that all the two spies are updated. But it's not the only problem. So, all this script has to be updated when necessary. So, you have all been laughing at some of my auto-tool jokes. So, I know that it's a bit bloated, that it's slow, that it's very old. It doesn't always work. It can get very complicated. But it works most of the time. Personally, I don't know anything that works better for all that the auto-tools were created for. There are better things. If your only targets are Linux, Windows and Mac OS 10, you have pretty decent tools. But once you want to do cross-compiling, building for embedded platforms and so on, you get pretty complicated tests to do. And the other choices are just not enough for the moment. So, we are studying the auto-tools, especially since we package software more, which is the longer-maintain. So, don't throw yet. We'll have the questions later if you want to throw about the auto-tools, but just not yet. How do the auto-tools integrate with Debian Packaging? Well, pretty well. We have a configure rule in Debian Rules. We have a build rule, which quite supposedly matches the configure when making phases of the configure of the auto-tools or build scheme. So, you shouldn't have anything to do if everything was for the better in all words. But, as I already stated, we have a few problems with updated tools and buggy tools and tools that are not exactly the original lead tool, which are the gang-tool lead tool. And if upstream doesn't use Debian, you have even incompatibilities with the same versions of the auto-tools. So, you get the problems at one moment. I will start to talk about a very important thing that probably doesn't cause any build problems right now, but that you may face in a later time if you are packaging an auto-tool using package. Because you shouldn't call configure from your Debian Rules script without any arguments. You should, unless you really know what you are doing, you should use a process that is explained in the auto-tool dev package in the readme.debian file, which explains why you should add specific arguments to the build process to avoid problems without using the package build package when you're postcompanying or when you want a very new architecture that is very recently supported and so on. So, what you have to do is add this code to your Debian Rules file, which calls the package architecture to check for the build system and the target system. And you will be safe if you do what this file does. Also, remember, if you only read one file about the auto-tools with this one, because it gives a lot of best practices for our package maintainers how to fix issues that I will not cover in this talk because we don't have much time, but it's really a must read for every developer in fact. As I said, even a very carefully bootstrap package can have problems, because if it was bootstrapped five years ago, it didn't know about today's architecture, such as AMD64 or our K3BSD port and so on. So, this can be a problem, even if all the care was taken to do it. And sometimes the maintainer screwed the package because he thought that if there is a program with outdated auto-tools things, I just have to run the bootstrap process during the configure phase of Debian Rules. Everything will work. But in fact, this exposes the package to other problems, which I will talk about. So, Debian is not always the 40-year. Okay, so, the first common problem is configure failing to detect the architecture because most of the time it's too recent to be supported. So, the problem is that two temporary files, which are config.get and config.sub, are outdated. These files contain information about your architecture, about all architectures and how to detect them and so on. And if they are outdated, configure is not able to detect your system. So, there are three ways to solve this problem. You can, yourself, before you build the package, run the bootstrap process on a Debian system, up to date. You can run it in your Debian Rules with a few problems that I will talk later about. Or you can, in the Debian Rules, instead of bootstrapping the whole system, you can just copy the config.get and config.sub files, which are in the autotools.dev package. So, you just have one package to build Debian on, and you're sure that it's always the latest version on the autoboes or that it's pretty decently up to date. The second common build problem is a library, which is not linked with the correct libraries. For instance, if you have a package with which you build two libraries and the second is linked with the first one, sometimes instead of linking with the first one, which is in your package, it will link with the first one, which is installed on the system. So, one easy way to solve the problem is to build conflict with yourself, which doesn't work to work. But the real problem comes from a tool version of lib2. So, you have to bootstrap the package again with a more recent lib2. So, again, you have two choices. Either bootstrap the package and ship it, bootstrap the game with a very huge .dev, or you can bootstrap it in the Debian Rules phase. So, bootstrap in Debian Rules is a hack, and most of the time it doesn't work. So, try not to do it. If you did it in one of your packages, please consider the other solution that I'm proposing, that is also proposed in the two tools dev package that everyone should use, because it's much nicer and it gives a lot less of bad surprises. Because this solution will create more problems in the clean rule, which means that if anything goes wrong in the bootstrapping in the make rule, and you try to run Debian Rules clean and start again, you will not end in the same situation as before you bootstrap. It's really a nightmare to clean up everything after a failed build. There's terrible, terrible work. Yes, you can do that. If you have a toggle in toggle, you cannot use the dev, so you don't have to clean it. Yeah, you don't have to clean it, but then you cannot ship. You have other problems, such as you don't know what's on the build system, you don't know what's on the build system, and you have to carefully build Debian on the right versions of the other tools, and that's pretty hairy stuff afterwards as well. It becomes more difficult to debug, because you don't know what was created, and you don't know what was built at build time in the made files, and if you have incompatibilities, it's very hard to track, but it's a solution, yes. So, I recommend its solution by the Geo2ToolsMentainer and by Ben, who has spent a lot of time fixing these problems, is simply to bootstrap in your build tree and ship the huge lift of GZ with your package. So, it's big, but it gives you less bad surprises afterwards. So, I already said what was worth saying here. It's very important to know how to properly bootstrap, because there is a model in which problems have to be called. You have to first only utilize then Autoconf and Autoheader. Oh, no, then AC Logo. Sorry, then Autoconf. It's very easy to get it wrong, and then it works well on your package, but then you ship it to the autobilder so that it fails, because of timestamp issues and so on. You have to be very careful with what versions of the Autotools you run. You cannot just run AC Logo or Automake. You have to search in the makefile.in or in the AC Logo.info in every temporary file so that the version of the Autotools was used for this one. Because, as I said, there are many incompatibilities between the versions, so be careful. You also have the problem of Autoconf, which doesn't really come with several versions. Instead, you have a frontend Autoconf binary with checks for features requested in your configure.ac file and then calls the correct version of Autoconf. So, it's always a good idea to conflict with Autoconf 2.13 files because it's completely buggy and your bootstrap rule could call it by accident if you don't pay attention. So, be very careful in which versions we are using to bootstrap the package. And this is true also if you try to bootstrap from the main rules at build time. You have to remove all the craft time in a previous slide. So all the temporary files need to be removed before you bootstrap your package. Otherwise, some of the problems may be noticed that they are here and use them instead of using the ones that are on the system and which aren't clean. So, pay attention to that as well. The final big problem I'm trying to talk about is direct consequence of bootstraping the package in either at build time in level rules or in your own repository. So, what happens is that it works fine on your computer and you ship it to the autobilder. The autobilder either puts the bootstrap process in the wrong order or it supplies your .dev.gz to the autobond files and you don't know when you apply .dev what the timestamps of the files will be. So, if an autocall file is fixed after an automate file for instance since the automate has to be called afterwards it will notice that one file is more recent than the other and it will try automatically the bootstrap procedure itself and of course it will get it wrong because it doesn't know about alternative versions of every software that can be formed in .dev. So, you have this problem as well. Again, three possibilities to fix that problem which is fixing the timestamps. Reboot swapping no it will depend on versions of every program so that the automatic reboot swapping works. So, this is a bad idea because you get ugly build dependencies and if a new version of automate for instance appears in the repository and you didn't know about it then your build dependencies get wrong and you will have to fix your package again and so on. The third solution is AM maintenance mode which I will explain a bit later. So, easy fix for the timestamp issue that you can use either after you rebootstrap your package locally or when rebootstrap is simply to use patch on all the files in the write-over it works pretty decently and you just call it before command configurable. Most of the time it works. You have tricky cases where it doesn't really work and essentially when you use the patch all common patch systems because when you call the clean rule for instance it will rebootstrap the timestamp will be wrong before you have the time to clean them so you have more problems than expected but it's a pretty decent temporary solution if you don't want to touch the package too much. And then the good solution is to use again maintainer mode which is a very recent addition to autofon it simply tells the autotops not to revamp everything if the timestamps are wrong. So you have to wonder why it only appeared recently but well, at least it's there and it's safe today every time you use it. So just add again maintainer mode to your configure.ac revamp everything or just call autofon which usually is enough but make sure that your version of autofon is exactly the same that was used by Australia and it's all safe. This macro adds a configured option right? it changes the mode and adds a configured option to go back to the former behavior so if you want the former behavior you have to explicitly put the same maintainer mode maintainer mode is the one where the timestamps cause the everything to be rebuilt so this enables the ability to enable maintainer mode now the question is is there an macro that adds those options but does not change the default behavior so that I can tell my own stream please add the macro it won't change the behavior to me but people enable me not to have to really know you can trick auto confin doing that so people have a lovely solution so I can't really answer this question I don't know so it's your job to tell upstream whether you're maintaining the package or you're just fixing the bug in an autofon package that wasn't maintaining in yours that they should use a maintainer mode which should be mandatory so there's auto makes documentation that says that a maintainer mode should only be used in certain cases so in the month from auto makes somewhere is a page about a maintainer mode which discourages the usage of it which gets upstream to deny using it I had said this a few times they don't want to change also InfoPage about the maintainer mode doesn't say you should use it but it's a new document it's broke it's a new page I haven't heard about specific reasons for not using it because it wasn't in my page from the auto makes was to not use it if you don't have a special need for it we have a special need for it but it's a lesser evil because the autotoms are really broken with that regard because they don't know about contrary versions it's all on the system the autotoms simply assume that they aren't the most recent version and that they have no values and so on if that were the case we would need this mode but unfortunately we need them so if they don't agree to use AM maintainer mode you can convince them of using more recent autotoms to bootstrap that package because if they do so we will not have to patch anything the build the build demons will probably build the packages so you won't have all the problems that you had before but they may be your correlator but they will you will have less problems if they use the proper autotune version so you should just patch the information at least after you use the dpn you have an evidence set free software probably in the right section so so if you want to draw about anything please do so so there is no way to have AM maintainer mode and have it enabled by default so in my demo the rules are right you can do it by looking at how the macro expands and simply activate the relevant flags before it i don't know what's in this macro but you have AM underscore something variables let's say whether the user activated the flagger mode and you can just set this share variable before but if in the future the macro changes it will not work any longer so it's ugly but if you really need it and you really need AM maintainer mode at the same time so this is the solution it could be a valid with the bug for a spring to add an argument for the macro that you can enable but just let the standard configure have a disabled maintainer mode option so like that so yeah but the version behind this is that users forget to use that flag and they get stuck by the bootstuck process which requires them to install autoconf and automate and so on so the end users who compiles the software are stuck with this whereas the maintainer of the upstream knows about it and they know how to activate this option so it's easier to have it this way because you get less requests from new users who don't understand what's going on I think it was kind of a compromise between the autotools developers and upstreams who didn't want to get emails from their users so und so so so so so so so so so so so so so Und noch eine Frage? Okay, so, ich habe noch eine. Wo hast du die Bilder bekommen? Welche? Oh, keine. Diese habe ich... Meistens habe ich die Bilder von Louis Vuitton gesehen. Ich glaube, diese war ein eigenes Zeichen für die Battle. Ein previous Zeichen habe ich auf Wikipedia gefunden. Es ist... Ich bin von Sam. Wo hast du die? Ich bin der HeyHeyGuy. Es ist ein Trend auf Internet-Forms, um diese Bilder zu drücken. Was sagst du mir? So, wo können wir die Bilder finden? Ich weiß noch nicht. Woher kommt die Repository? Woher will er die Bilder collecten? Er hat mich gefragt, ob ich die Bilder habe. Er will eine E-Mail senden. Okay, ich werde sie auf meiner Webpage in 10 Minuten. Ich werde sie nicht sch MIKE. Nein, nein. Sie haben nicht viel� Sie haben keineticke. Also der ist auf meiner Webpage. Es ist sam.loy.org. Du kannst es in einer Okay.