[gelöst] FreeCAD 0.16 kompilieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Spindoctor
Beiträge: 331
Registriert: 22.04.2011 10:34:00

[gelöst] FreeCAD 0.16 kompilieren

Beitrag von Spindoctor » 08.01.2016 15:39:15

Hallo!

Mein erster Beitrag im Paketierungs-Board, langsam entwickle ich mich doch weiter :mrgreen:

Aber leider hab ich ein Problem.

Ich versuche FreeCAD 0.16 (Quellcode auf github: https://github.com/FreeCAD/FreeCAD) zu kompilieren. Ich bin nach dieser Anleitung vorgegangen: http://www.freecadweb.org/wiki/index.ph ... pileOnUnix

Da ich nicht wirklich weiß, was ich da mache, habe ich mir eine chroot-Umgebung angelegt. Alle dev-Pakete (und auch sonst alles) habe ich nur da drinnen installiert.

Schließlich und endlich sind

Code: Alles auswählen

$ cmake -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Release .
$ make
fehlerfrei durchgelaufen.

Nun habe ich versucht, FreeCAD zu starten. Innerhalb der chroot-Umgebung ging das erwartungsgemäß nicht:

Code: Alles auswählen

# ./bin/FreeCAD
No protocol specified
FreeCAD: cannot connect to X server :0
Doch auch aus meinem normalen Debian x64 Testing hatte ich kein Glück:

Code: Alles auswählen

$ ./bin/FreeCAD
./bin/FreeCAD: error while loading shared libraries: libFreeCADGui.so: cannot open shared object file: No such file or directory
Mache ich was falsch?
Könnt ihr mir helfen?

Danke schon jetzt!

[edit]
achja: ich würde mich besser fühlen, wenn ich zum kompilieren in meiner "sicheren" chroot-Umgebung bleiben kann...
Zuletzt geändert von Spindoctor am 10.01.2016 13:48:45, insgesamt 1-mal geändert.

Apfelmann
Beiträge: 669
Registriert: 15.01.2010 20:48:45
Kontaktdaten:

Re: FreeCAD 0.16 kompilieren

Beitrag von Apfelmann » 08.01.2016 18:27:45

Warum nimmst Du nicht freecad 0.15
oder in einer virtuellen Maschine einrichten

LG

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: FreeCAD 0.16 kompilieren

Beitrag von rendegast » 08.01.2016 18:56:25

Du solltest Dir (im chroot) mit zBsp. Debiancheckinstall aus dem Kompilat ein Paket(e) bauen,
das kannnst Du dann auf dem Host installieren.


Hier meine Vorlage für wine1.7
(mittlerweile bin ich wieder bei debian wine / wine-development / playonlinux)

Code: Alles auswählen

#!/bin/sh
#Thu Aug  8 16:36:47 UTC 2013
# 20140629

ischroot || exit 1
which checkinstall || exit 1

BUILD_DIR=./wine.build
[ -d "$(readlink -f $BUILD_DIR)" ] || exit

#cd $BUILD_DIR/ && checkinstall --install=no

eval $(cat $BUILD_DIR/configure | awk -F= '$0~/PACKAGE_VERSION=/')

PKGRELEASE="0eigenbau$(date +%F | sed 's@-@@g')"

PKGNAME="wine1.7"
OPTS="
--pkgname \"${PKGNAME}\"
--pkgversion \"${PACKAGE_VERSION}\"
--pkgrelease \"${PKGRELEASE}\"
--pakdir \"/usr/src\"
--maintainer \"buildmaster@localhost\"
--provides \"${PKGNAME}-i386,wine,wine-i386,wine1.6,wine1.6-i386,wine1.5,wine1.5-i386,wine1.4,wine1.4-i386,wine-unstable,wine32-unstable\"
"
echo "wine aus wine.git, 32bit, selbstgemacht, $(date +%Y%m%d)
" > $BUILD_DIR/description-pak

echo $OPTS
mount | grep /var/tmp || mount -v tmpfs ../../var/tmp -t tmpfs

# 201131111, wine 1.7.6 hat eine Macke? Erstellt Dateien nicht in einem checkinstall-Verzeichnis,
# und bricht dann deswegen ab(?????)
DIRS176="
    /usr/share/wine
    /usr/include/wine/windows
    /usr/include/wine/msvcrt
    /usr/include/wine
    /usr/share/man/de.UTF-8
    /usr/share/man/fr.UTF-8
    /usr/share/man/pl.UTF-8
"
for i in $DIRS176; do
    mkdir -p $i
    #rmdir $i
done

cd $BUILD_DIR/ && echo -e "\n" | checkinstall --install=no $OPTS
Zu sehen ist, daß ich die checkinstall-Optionen ausführlich nutze,
und auch einen (wohl) wine-Bug umschiffe.
Ein entsprechendes Template erstellt sollte auch Dein freecad ein nettes Paket werden.

Das mit dem 'readlink':
im build-Script vorher führe ich den Build auf einem tmpfs durch -> Performance.
Der Test soll verhindern, daß dieses checkinstall-Skript zum falschen Zeitpunkt ausgeführt gewaltig Unfug machen kann.

Das mit dem tmpfs<->/var/tmp betrifft checkinstall, auch aus Performance-Gründen.





----------------------------------------------------
Es gibt ein
FreeCAD/package/debian/
FreeCAD/package/makepkg
Existiert im erstellen make-Skript nicht eine Option, sodaß dieses auch benutzt wird?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Spindoctor
Beiträge: 331
Registriert: 22.04.2011 10:34:00

Re: FreeCAD 0.16 kompilieren

Beitrag von Spindoctor » 08.01.2016 21:35:10

Danke für die Antworten!

@Apfelmann:
freecad 0.15 verwende ich eh schon. Aber ich versuche zu testen, ob manche Bugs in 0.16 vielleicht nicht mehr auftreten...
Eine virtuelle Maschine wäre schon eine Möglichkeit, eigentlich... Ich habs bisher noch nicht gemacht weil ich noch keine gebraucht habe... Vielleicht wäre das eh so wie chroot als Convenience-Lösung? Gibt's nennenswerte Unterschiede? (Außer dass die virtuelle Maschine eine grafische Oberfläche hat)

@rendegast
Danke für den Hinweis.

checkinstall hab ich vorher eh schon probiert... nun nochmal. Ich hab kein so elegantes Script, aber mir scheint, das Ergebnis von checkinstall ist kein schlechtes:
NoPaste-Eintrag39056

Dieses Paket habe ich dann auf der Host-Maschine installiert und versucht zu starten:

Code: Alles auswählen

$ sudo dpkg -i free-cad_0.16b-1_amd64.deb 
[sudo] Passwort für <user>: 
Vormals nicht ausgewähltes Paket free-cad wird gewählt.
(Lese Datenbank ... 200046 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von free-cad_0.16b-1_amd64.deb ...
Entpacken von free-cad (0.16b-1) ...
free-cad (0.16b-1) wird eingerichtet ...
$ free # <TAB gedrückt>
free        freecad     freecadcmd  
$ freecad
FreeCAD 0.15, Libs: 0.15R4671 (Git)
© Juergen Riegel, Werner Mayer, Yorik van Havre 2001-2015
  #####                 ####  ###   ####  
  #                    #      # #   #   # 
  #     ##  #### ####  #     #   #  #   # 
  ####  # # #  # #  #  #     #####  #   # 
  #     #   #### ####  #    #     # #   # 
  #     #   #    #     #    #     # #   #  ##  ##  ##
  #     #   #### ####   ### #     # ####   ##  ##  ##

Gtk-Message: Failed to load module "canberra-gtk-module"
Wie man sieht, gibt es kein anderes Programm im Pfad als freecad. Wenn ich das ausführe, startet aber wieder FreeCAD 0.15, das ich aus den Debian-Paketquellen habe...

Irgendwas mach ich also scheinbar noch falsch.

wo kann ich denn die make-Skript-Optionen sehen?

Gefunden hab ich das hier:

Code: Alles auswählen

# cmake -help                                           
Usage

  cmake [options] <path-to-source>
  cmake [options] <path-to-existing-build>

Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to
re-generate its build system.

Options
  -C <initial-cache>           = Pre-load a script to populate the cache.
  -D <var>[:<type>]=<value>    = Create a cmake cache entry.
  -U <globbing_expr>           = Remove matching entries from CMake cache.
  -G <generator-name>          = Specify a build system generator.
  -T <toolset-name>            = Specify toolset name if supported by
                                 generator.
  -A <platform-name>           = Specify platform name if supported by
                                 generator.
  -Wno-dev                     = Suppress developer warnings.
  -Wdev                        = Enable developer warnings.
  -E                           = CMake command mode.
  -L[A][H]                     = List non-advanced cached variables.
  --build <dir>                = Build a CMake-generated project binary tree.
  -N                           = View mode only.
  -P <file>                    = Process script mode.
  --find-package               = Run in pkg-config like mode.
  --graphviz=[file]            = Generate graphviz of dependencies, see
                                 CMakeGraphVizOptions.cmake for more.
  --system-information [file]  = Dump information about this system.
  --debug-trycompile           = Do not delete the try_compile build tree.
                                 Only useful on one try_compile at a time.
  --debug-output               = Put cmake in a debug mode.
  --trace                      = Put cmake in trace mode.
  --trace-expand               = Put cmake in trace mode with variable
                                 expansion.
  --warn-uninitialized         = Warn about uninitialized values.
  --warn-unused-vars           = Warn about unused variables.
  --no-warn-unused-cli         = Don't warn about command line options.
  --check-system-vars          = Find problems with variable usage in system
                                 files.
  --help,-help,-usage,-h,-H,/? = Print usage information and exit.
  --version,-version,/V [<f>]  = Print version number and exit.
  --help-full [<f>]            = Print all help manuals and exit.
  --help-manual <man> [<f>]    = Print one help manual and exit.
  --help-manual-list [<f>]     = List help manuals available and exit.
  --help-command <cmd> [<f>]   = Print help for one command and exit.
  --help-command-list [<f>]    = List commands with help available and exit.
  --help-commands [<f>]        = Print cmake-commands manual and exit.
  --help-module <mod> [<f>]    = Print help for one module and exit.
  --help-module-list [<f>]     = List modules with help available and exit.
  --help-modules [<f>]         = Print cmake-modules manual and exit.
  --help-policy <cmp> [<f>]    = Print help for one policy and exit.
  --help-policy-list [<f>]     = List policies with help available and exit.
  --help-policies [<f>]        = Print cmake-policies manual and exit.
  --help-property <prop> [<f>] = Print help for one property and exit.
  --help-property-list [<f>]   = List properties with help available and
                                 exit.
  --help-properties [<f>]      = Print cmake-properties manual and exit.
  --help-variable var [<f>]    = Print help for one variable and exit.
  --help-variable-list [<f>]   = List variables with help available and exit.
  --help-variables [<f>]       = Print cmake-variables manual and exit.

Generators

The following generators are available on this platform:
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - Ninja           = Generates CodeBlocks project files.
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
  CodeLite - Ninja             = Generates CodeLite project files.
  CodeLite - Unix Makefiles    = Generates CodeLite project files.
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
  KDevelop3                    = Generates KDevelop 3 project files.
  KDevelop3 - Unix Makefiles   = Generates KDevelop 3 project files.
  Kate - Ninja                 = Generates Kate project files.
  Kate - Unix Makefiles        = Generates Kate project files.
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files.

# make --help
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
  -C DIRECTORY, --directory=DIRECTORY
                              Change to DIRECTORY before doing anything.
  -d                          Print lots of debugging information.
  --debug[=FLAGS]             Print various types of debugging information.
  -e, --environment-overrides
                              Environment variables override makefiles.
  --eval=STRING               Evaluate STRING as a makefile statement.
  -f FILE, --file=FILE, --makefile=FILE
                              Read FILE as a makefile.
  -h, --help                  Print this message and exit.
  -i, --ignore-errors         Ignore errors from recipes.
  -I DIRECTORY, --include-dir=DIRECTORY
                              Search DIRECTORY for included makefiles.
  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no arg.
  -k, --keep-going            Keep going when some targets can't be made.
  -l [N], --load-average[=N], --max-load[=N]
                              Don't start multiple jobs unless load is below N.
  -L, --check-symlink-times   Use the latest mtime between symlinks and target.
  -n, --just-print, --dry-run, --recon
                              Don't actually run any recipe; just print them.
  -o FILE, --old-file=FILE, --assume-old=FILE
                              Consider FILE to be very old and don't remake it.
  -O[TYPE], --output-sync[=TYPE]
                              Synchronize output of parallel jobs by TYPE.
  -p, --print-data-base       Print make's internal database.
  -q, --question              Run no recipe; exit status says if up to date.
  -r, --no-builtin-rules      Disable the built-in implicit rules.
  -R, --no-builtin-variables  Disable the built-in variable settings.
  -s, --silent, --quiet       Don't echo recipes.
  -S, --no-keep-going, --stop
                              Turns off -k.
  -t, --touch                 Touch targets instead of remaking them.
  --trace                     Print tracing information.
  -v, --version               Print the version number of make and exit.
  -w, --print-directory       Print the current directory.
  --no-print-directory        Turn off -w, even if it was turned on implicitly.
  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
                              Consider FILE to be infinitely new.
  --warn-undefined-variables  Warn when an undefined variable is referenced.

This program built for x86_64-pc-linux-gnu
Report bugs to <bug-make@gnu.org>

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: FreeCAD 0.16 kompilieren

Beitrag von rendegast » 09.01.2016 10:05:49

wo kann ich denn die make-Skript-Optionen sehen?
Das 'make --help' geht eher in die richtige Richtung als 'cmake --help',
gibt hier aber die Optionen des Programms 'make'.
'cmake' hat da eher die Funktion des klassischen 'configure'-Skripts.
Ich meine die Optonen im durch das 'cmake' erstellten Makefile,
die darin stehenden make-Targets

Code: Alles auswählen

targeta: ...
targetb: ...
targetc: ...
(Ich bin hier nicht so weit gekommen.
Da das cmake nicht durchlief, habe ich auch kein Makefile zum vergleichen.)

Die Auflistung / Detektierung ist nicht einfach
Bei einem Beispiel-Makefile gibt 'make -p' zwar gelegentlich

Code: Alles auswählen

itema:
#......... Ziel (resp. target) .....

itemb:
#......... dies ist kein Ziel (resp. target) .....
aber es gibt auch Einträge, bei denen "Ziel" resp. "target" nicht in der Nähe steht.
Da kann auch gleich im Makefile nach obigem Muster gesucht werden.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: FreeCAD 0.16 kompilieren

Beitrag von rendegast » 09.01.2016 12:03:53

Spindoctor hat geschrieben: Wie man sieht, gibt es kein anderes Programm im Pfad als freecad. Wenn ich das ausführe, startet aber wieder FreeCAD 0.15, das ich aus den Debian-Paketquellen habe...
Im Standard erzeugt cmake/make eine Installation in

Code: Alles auswählen

-- prefix: /usr/local
Daher gibt die Installation Deines Paketes wohl auch keinen Konflikt mit dem freecad aus debian.
In /usr/local/bin/ sind wohl die Startskripte/links Deines freecad 0.16,
welche aber scheinbar auf debian freecad "springen"

Das ließe sich ändern durch

Code: Alles auswählen

cmake -D CMAKE_INSTALL_PREFIX=/usr ......
Obiger Wert bleibt erhalten, auch bei späteren Aufrufen von 'cmake' ohne die Option.

Das abschließende 'make' macht wohl auch gleich eine Installation.
das würde in dem Fall aber debians freecad-Installation beschädigen.
Also muß mit dem direkten Ausführen von 'make' vorschtig umgegangen werden!
Nur per 'checkinstalll'!
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Spindoctor
Beiträge: 331
Registriert: 22.04.2011 10:34:00

Re: FreeCAD 0.16 kompilieren

Beitrag von Spindoctor » 10.01.2016 13:48:26

Oh cool, das wars!

FreeCAD 0.16 liegt in /usr/local/bin und der Grund, warum autocomplete es nicht angeboten hat, war, dass es "FreeCAD" (mit diesen Großbuchstaben) heißt.

Danke, ich glaube, das Problem ist gelöst! :hail:

Antworten