File: system-colamd.diff

package info (click to toggle)
libreoffice 4%3A25.2.3-2%2Bdeb13u2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 3,785,556 kB
  • sloc: cpp: 4,354,935; xml: 450,154; java: 260,044; python: 80,206; ansic: 33,790; perl: 30,351; javascript: 18,236; sh: 12,043; makefile: 10,672; cs: 8,865; yacc: 8,549; objc: 2,131; lex: 1,379; asm: 1,231; awk: 996; pascal: 940; csh: 20; sed: 5
file content (181 lines) | stat: -rw-r--r-- 8,733 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
From ea8cd33bc395497fbbe8a3a98e59fd2fecacfd16 Mon Sep 17 00:00:00 2001
From: Rene Engelhard <rene@rene-engelhard.de>
Date: Mon, 3 Mar 2025 21:48:18 +0100
Subject: [PATCH] implement --with-system-colamd (for internal lpsolve)

using suitesparse. Tested with both suitesparse 5.12.0 (Debian stable,
without pc) and 7.9.0 (Debian unstable, with .pc)

Change-Id: I6e0d014455ea2dec111aa3380bd49bd586dfad0a
---
 config_host.mk.in                           |  3 ++
 configure.ac                                | 35 +++++++++++++++++-
 external/lpsolve/UnpackedTarball_lpsolve.mk |  1 +
 external/lpsolve/ccc.static                 | 13 ++++++-
 external/lpsolve/system-colamd.diff         | 41 +++++++++++++++++++++
 5 files changed, 89 insertions(+), 4 deletions(-)
 create mode 100644 external/lpsolve/system-colamd.diff

diff --git a/config_host.mk.in b/config_host.mk.in
index 2ab62f748bd6..35056998e418 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -97,6 +97,8 @@ export CPDB_CFLAGS=@CPDB_CFLAGS@
 export CPDB_LIBS=@CPDB_LIBS@
 export CPPU_ENV=@CPPU_ENV@
 export CPPU_ENV_FOR_BUILD=@CPPU_ENV_FOR_BUILD@
+export COLAMD_CFLAGS=$(gb_SPACE)@COLAMD_CFLAGS@
+export COLAMD_LIBS=$(gb_SPACE)@COLAMD_LIBS@
 export CPPUNIT_CFLAGS=$(gb_SPACE)@CPPUNIT_CFLAGS@
 export CPPUNIT_LIBS=$(gb_SPACE)@CPPUNIT_LIBS@
 export CPUNAME=@CPUNAME@
@@ -656,6 +658,7 @@ SYSTEM_BOX2D=@SYSTEM_BOX2D@
 SYSTEM_BZIP2=@SYSTEM_BZIP2@
 SYSTEM_CAIRO=@SYSTEM_CAIRO@
 SYSTEM_CLUCENE=@SYSTEM_CLUCENE@
+export SYSTEM_COLAMD=@SYSTEM_COLAMD@
 SYSTEM_CPPUNIT=@SYSTEM_CPPUNIT@
 SYSTEM_CURL=@SYSTEM_CURL@
 SYSTEM_DICTS=@SYSTEM_DICTS@
diff --git a/configure.ac b/configure.ac
index b4c4cfecf2e2..ab0c24296df6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2678,6 +2678,11 @@ AC_ARG_WITH(system-lpsolve,
         [Use lpsolve already on system.]),,
     [with_system_lpsolve="$with_system_libs"])
 
+AC_ARG_WITH(system-colamd,
+    AS_HELP_STRING([--with-system-colamd],
+        [Use COLAMD already on system.]),,
+    [with_system_lpsolve="$with_system_libs"])
+
 AC_ARG_WITH(system-coinmp,
     AS_HELP_STRING([--with-system-coinmp],
         [Use CoinMP already on system.]),,
@@ -11971,8 +11976,34 @@ if test "$ENABLE_LPSOLVE" = TRUE; then
         AC_MSG_RESULT([internal])
         SYSTEM_LPSOLVE=
         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
-    fi
-fi
+        AC_MSG_CHECKING([which colamd to use])
+        if test "$with_system_colamd" = "yes"; then
+               AC_MSG_RESULT([external])
+               SYSTEM_COLAMD=TRUE
+               # This assumes suitesparse, which has
+               # /usr/lib/x86_64-linux-gnu/pkgconfig/COLAMD.pc
+               PKG_CHECK_MODULES([COLAMD], [COLAMD],
+                      [],
+                      [
+                       # older versions don't. Look in /usr/include/suitesparse
+                       COLAMD_CFLAGS=-I/usr/include/suitesparse
+                       save_CFLAGS=$CFLAGS
+                       CFLAGS="$CFLAGS $COLAMD_CFLAGS"
+                       AC_CHECK_HEADER(colamd.h, [],
+                               [ AC_MSG_ERROR(colamd.h header not found.)], [])
+                       CFLAGS=$save_CFLAGS
+                       AC_CHECK_LIB(colamd, colamd)
+                       COLAMD_LIBS=-lcolamd
+                     ])
+       else
+               AC_MSG_RESULT([internal])
+               SYSTEM_COLAMD=
+       fi
+    fi
+fi
+AC_SUBST(SYSTEM_COLAMD)
+AC_SUBST(COLAMD_CFLAGS)
+AC_SUBST(COLAMD_LIBS)
 AC_SUBST(SYSTEM_LPSOLVE)
 
 dnl ===================================================================
diff --git a/external/lpsolve/UnpackedTarball_lpsolve.mk b/external/lpsolve/UnpackedTarball_lpsolve.mk
index bcb885fb9186..c1e6be8e3c09 100644
--- a/external/lpsolve/UnpackedTarball_lpsolve.mk
+++ b/external/lpsolve/UnpackedTarball_lpsolve.mk
@@ -25,6 +25,7 @@ else
 $(eval $(call gb_UnpackedTarball_add_patches,lpsolve,\
 	external/lpsolve/lp_solve_5.5.patch \
 	external/lpsolve/lpsolve-ubsan.patch.0 \
+	external/lpsolve/system-colamd.diff \
 ))
 
 $(eval $(call gb_UnpackedTarball_add_file,lpsolve,lpsolve55/ccc.static,external/lpsolve/ccc.static))
diff --git a/external/lpsolve/ccc.static b/external/lpsolve/ccc.static
index 6911c4b2c892..c78a9583089a 100644
--- a/external/lpsolve/ccc.static
+++ b/external/lpsolve/ccc.static
@@ -1,11 +1,20 @@
-src='../lp_MDO.c ../shared/commonlib.c ../shared/mmio.c ../shared/myblas.c ../ini.c ../fortify.c ../colamd/colamd.c ../lp_rlp.c ../lp_crash.c ../bfp/bfp_LUSOL/lp_LUSOL.c ../bfp/bfp_LUSOL/LUSOL/lusol.c ../lp_Hash.c ../lp_lib.c ../lp_wlp.c ../lp_matrix.c ../lp_mipbb.c ../lp_MPS.c ../lp_params.c ../lp_presolve.c ../lp_price.c ../lp_pricePSE.c ../lp_report.c ../lp_scale.c ../lp_simplex.c ../lp_SOS.c ../lp_utils.c ../yacc_read.c'
+if [ "$SYSTEM_COLAMD" != "TRUE" ]; then
+    colamd_c=../colamd/colamd.c
+fi
+src='../lp_MDO.c ../shared/commonlib.c ../shared/mmio.c ../shared/myblas.c ../ini.c ../fortify.c $colamd_c ../lp_rlp.c ../lp_crash.c ../bfp/bfp_LUSOL/lp_LUSOL.c ../bfp/bfp_LUSOL/LUSOL/lusol.c ../lp_Hash.c ../lp_lib.c ../lp_wlp.c ../lp_matrix.c ../lp_mipbb.c ../lp_MPS.c ../lp_params.c ../lp_presolve.c ../lp_price.c ../lp_pricePSE.c ../lp_report.c ../lp_scale.c ../lp_simplex.c ../lp_SOS.c ../lp_utils.c ../yacc_read.c'
 obj=`echo $src|sed -e 's/\.c/.o/g' -e 's!\([^ ]*/\)*!!g'`
 
 opts='-O3'
 
 def=
 
-$CC -I.. -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I../shared $opts $def -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine -c $src
+# FIMXE: Link statically with colamd?
+if test "$SYSTEM_COLAMD" = "TRUE"; then
+    colamd_i=$COLAMD_CFLAGS
+else
+    colamd_i=-I../colamd
+fi
+$CC -I.. -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL $colamd_i -I../shared $opts $def -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine -c $src
 
 $AR -r liblpsolve55.a $obj
 rm $obj
diff --git a/external/lpsolve/system-colamd.diff b/external/lpsolve/system-colamd.diff
new file mode 100644
index 000000000000..a872d96ef282
--- /dev/null
+++ b/external/lpsolve/system-colamd.diff
@@ -0,0 +1,41 @@
+diff -urN lp_solve_5.5-old/lpsolve55/ccc lp_solve_5.5/lpsolve55/ccc
+--- misc/build/lp_solve_5.5/lpsolve55/ccc	2005-06-11 21:27:18.000000000 +0200
++++ misc/build/lp_solve_5.5/lpsolve55/ccc	2025-03-02 17:58:19.904235635 +0100
+@@ -1,4 +1,7 @@
+-src='../lp_MDO.c ../shared/commonlib.c ../shared/mmio.c ../shared/myblas.c ../ini.c ../fortify.c ../colamd/colamd.c ../lp_rlp.c ../lp_crash.c ../bfp/bfp_LUSOL/lp_LUSOL.c ../bfp/bfp_LUSOL/LUSOL/lusol.c ../lp_Hash.c ../lp_lib.c ../lp_wlp.c ../lp_matrix.c ../lp_mipbb.c ../lp_MPS.c ../lp_params.c ../lp_presolve.c ../lp_price.c ../lp_pricePSE.c ../lp_report.c ../lp_scale.c ../lp_simplex.c ../lp_SOS.c ../lp_utils.c ../yacc_read.c'
++if test "$SYSTEM_COLAMD" != "TRUE"; then
++     colamd_c=../colamd/colamd.c
++fi
++src="../lp_MDO.c ../shared/commonlib.c ../shared/mmio.c ../shared/myblas.c ../ini.c ../fortify.c $colamd_c ../lp_rlp.c ../lp_crash.c ../bfp/bfp_LUSOL/lp_LUSOL.c ../bfp/bfp_LUSOL/LUSOL/lusol.c ../lp_Hash.c ../lp_lib.c ../lp_wlp.c ../lp_matrix.c ../lp_mipbb.c ../lp_MPS.c ../lp_params.c ../lp_presolve.c ../lp_price.c ../lp_pricePSE.c ../lp_report.c ../lp_scale.c ../lp_simplex.c ../lp_SOS.c ../lp_utils.c ../yacc_read.c"
+ ar=$AR
+ c=$CC
+ ranlib=$RANLIB
+@@ -25,17 +28,26 @@
+ 
+ if [ "$OS" = "LINUX" ]; then
+      libs="$libs -ldl"
++     if test "$SYSTEM_COLAMD" = "TRUE"; then
++         libs="$libs $COLAMD_LIBS"
++     fi
+ fi
+ 
+ opts='-O3'
+ 
+-$c -s $inline -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd $opts $def -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src
++if test "$SYSTEM_COLAMD" = "TRUE"; then
++    colamd_i=$COLAMD_CFLAGS
++else
++    colamd_i=-I../colamd
++fi
++
++$c -s $inline -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL $colamd_i $opts $def -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src
+ $ar rv liblpsolve55.$a `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'`
+ $ranlib liblpsolve55.$a
+ 
+ if [ "$so" != "" ]
+ then
+-  $c $pic -s $inline -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I. $opts -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src
++  $c $pic -s $inline -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL $colamd_i -I. $opts -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src
+   $c -shared $ldflags -o ${soprefix}lpsolve55.$so `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` $libs
+ fi
+ 
-- 
2.47.2