Difference between revisions of "FreeBSD specific Release Engineering"

From Free Pascal wiki
Jump to navigationJump to search
m (Added FreeBSD category)
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== install.sh using sh instead of bash ==
+
== scripts using sh instead of bash ==
(Andres K. Foerster)
+
(originally by Andres K. Foerster)
  
Oh, I'm surprised myself. There are just few things to fix:
+
Current scripts: samplecfg/install.sh/cross*
 +
known scripts not affected: makepack (no chance of running on a TARGET computer)
  
 
The script sometimes uses one "=" and sometimes two "==" for comparisions.
 
The script sometimes uses one "=" and sometimes two "==" for comparisions.
 
The /bin/sh of FreeBSD accepts just one "=" in comparisions.
 
The /bin/sh of FreeBSD accepts just one "=" in comparisions.
See test(1).
+
See test(1).  or sometimes the "x" trick works:    if [ "x$something" = "xsomething" ] ...
  
 
"echo -n" is supported in the shell of FreeBSD, but it's not standard.
 
"echo -n" is supported in the shell of FreeBSD, but it's not standard.
Line 26: Line 27:
 
* In case of bash use #!/usr/bin/env bash  NEVER hardcode the shell path!
 
* In case of bash use #!/usr/bin/env bash  NEVER hardcode the shell path!
  
== GTK problem with newer ports ==
+
== install.sh ==
  
FreeBSD ports decided to rename the gtk 1.x ports from gtk12 to gtk-1.2. (and similarly for gdk and glib). There was a note about this in the ports tree docs in Nov 2005, but we found out somewhere in februari when bugreports started to trickly in. There was no grace period between the note and the breakage.
+
The documentation currently generates the PDF docs with a directory in the .tar.gz, which doesn't play nice with FreeBSD hierarchy. Moreover, to workaround this on Linux, they use gnu tar specific options (--directory).
  
Anyway, there are several problems at once here:
+
So every release the following changes are made:
* the "recommended" way; using gtk-config, relies a lot on C/gcc specific subsystems way of doing things. (e.g. it emits gcc commandline parameters) It works for them because release engineers of a distribution prepare and test the whole process. This is not doable for us, and would only add a major fragile complication to solve a minor one.
+
- the docs are repacked without the directory
* This is aggrevated by a problem in FPC. Library names are hardcoded in source, and end up hardcoded in precompiled files. IOW one can not influence linking of a FPC program with gtk without recompiling fpc. A good solution still has to be found. Some options:
+
- the --directory option is removed from the doc tar x line in the install.sh script
** some want a complicated packaging system aka CPAN
+
 
** some want to dl_open all libraries, and add compiler support to ease this. This can be easily done using lazy linking. You need to get pic working on FreeBSD, set the library name to <nowiki>''</nowiki>, compile the gtk units with pic and dl_open the gtk libs at runtime. Don't expect to get this working out of the box, but it looks doable.
+
 
** A somewhat more modest and short term approach would be a simple substitution problem that would tackle a large percentage of the errors. Library names in source can be mapped to other names. Multiple libs even. This could be seeded by a simple gtk-config test compile.
+
== notes from recent packaging ==
* A related problem is GTK2 programs requiring adaptations to the "main" program. I don't know the exact status of this problem.
+
 
 +
* synced all ELF ABI tag versions to make it easier to patch with the i386/identpatch.sh script.
 +
* FreeBSD 8.2 bsdtar seems to understand --strip fine.
 +
* See sometimes "grab_vcsa" missing error.
 +
* debugger of 9.0/i386 gave funny results/output. Constantly gave "errorcode=0 3 hidden steps" msgs.
 +
* newer freebsd seems to have a kiconv. Maybe the RTL should use kiconv instead of iconv. If only because the iconv package has a dependency on perl 5.
 +
== See also ==
 +
* [[FreeBSD]]
 +
 
 +
[[Category:FPC development]]
 +
[[Category:FreeBSD]]
 +
[[Category:BSD]]

Revision as of 10:52, 14 August 2019

scripts using sh instead of bash

(originally by Andres K. Foerster)

Current scripts: samplecfg/install.sh/cross* known scripts not affected: makepack (no chance of running on a TARGET computer)

The script sometimes uses one "=" and sometimes two "==" for comparisions. The /bin/sh of FreeBSD accepts just one "=" in comparisions. See test(1). or sometimes the "x" trick works: if [ "x$something" = "xsomething" ] ...

"echo -n" is supported in the shell of FreeBSD, but it's not standard. You could use "printf" instead of "echo -n". That seems more standardized.

Also the tar parameter "--directory" is a extension of GNU-tar. You could use "-C" instead of "--directory", but be careful with that. It seems "-C" is implemented differently. (My FreeBSD still comes with GNU tar, but I've heard that they switch to their own version of tar... I'll have a look at it.)

That's all as far as I can see. Then you can use "#!/bin/sh".

(Marco van de Voort:)

  • Also test using BSD sed and tar from time to time. (some sed constructs are already replaced by awk)
  • In case of bash use #!/usr/bin/env bash NEVER hardcode the shell path!

install.sh

The documentation currently generates the PDF docs with a directory in the .tar.gz, which doesn't play nice with FreeBSD hierarchy. Moreover, to workaround this on Linux, they use gnu tar specific options (--directory).

So every release the following changes are made: - the docs are repacked without the directory - the --directory option is removed from the doc tar x line in the install.sh script


notes from recent packaging

  • synced all ELF ABI tag versions to make it easier to patch with the i386/identpatch.sh script.
  • FreeBSD 8.2 bsdtar seems to understand --strip fine.
  • See sometimes "grab_vcsa" missing error.
  • debugger of 9.0/i386 gave funny results/output. Constantly gave "errorcode=0 3 hidden steps" msgs.
  • newer freebsd seems to have a kiconv. Maybe the RTL should use kiconv instead of iconv. If only because the iconv package has a dependency on perl 5.

See also