diff --git a/server/pypi/build-wheel.py b/server/pypi/build-wheel.py index 6cb3ee2d33..c3f15b7e2d 100755 --- a/server/pypi/build-wheel.py +++ b/server/pypi/build-wheel.py @@ -704,7 +704,7 @@ def env_vars(self): }) for var in self.meta["build"]["script_env"]: - key, value = var.split("=") + key, value = var.split("=", 1) env[key] = value # We do this unconditionally, because we don't know whether the package requires diff --git a/server/pypi/packages/igraph/arith-android64.h b/server/pypi/packages/igraph/arith-android64.h new file mode 100644 index 0000000000..2b09e4c80c --- /dev/null +++ b/server/pypi/packages/igraph/arith-android64.h @@ -0,0 +1,16 @@ +// See https://igraph.org/c/html/latest/igraph-Installation.html. Although that page +// says the following settings are for macOS, running arithchk on Android returns the +// same values, according to +// https://github.com/chaquo/chaquopy/pull/1196#discussion_r1825264094. + +// f2c requires this setting even on ARM64. +#define IEEE_8087 + +#define Arith_Kind_ASL 1 +#define Long int +#define Intcast (int)(long) +#define Double_Align +#define X64_bit_pointers +#define NANCHECK +#define QNaN0 0x0 +#define QNaN1 0x7ff80000 diff --git a/server/pypi/packages/igraph/meta.yaml b/server/pypi/packages/igraph/meta.yaml new file mode 100644 index 0000000000..f99a0874f9 --- /dev/null +++ b/server/pypi/packages/igraph/meta.yaml @@ -0,0 +1,26 @@ +package: + name: igraph + version: "0.11.8" + +build: + number: 1 + script_env: + - MAKEFLAGS=-j${CPU_COUNT} + + # For the F2C and IEEE settings, see arith-android64.h. + # + # LTO is disabled because it doesn't pass the necessary argument to the linker + # (https://github.com/android/ndk/issues/2069#issuecomment-2347153515). + # + # OpenMP is disabled so we can avoid testing and releasing a new version of + # chaquopy-libomp. + - >- + IGRAPH_CMAKE_EXTRA_ARGS= + -DF2C_EXTERNAL_ARITH_HEADER=../../../../../../../arith-android64.h + -DIEEE754_DOUBLE_ENDIANNESS_MATCHES=ON + -DIGRAPH_ENABLE_LTO=OFF + -DIGRAPH_OPENMP_SUPPORT=OFF + +requirements: + build: + - cmake 3.28.1 diff --git a/server/pypi/packages/igraph/test.py b/server/pypi/packages/igraph/test.py new file mode 100644 index 0000000000..df1f6b11c0 --- /dev/null +++ b/server/pypi/packages/igraph/test.py @@ -0,0 +1,51 @@ +import unittest + + +class TestIgraph(unittest.TestCase): + + def testGraphCreation(self): + from igraph import Graph + g = Graph() + self.assertTrue(isinstance(g, Graph)) + self.assertTrue(g.vcount() == 0 and g.ecount() == 0 and not g.is_directed()) + + g = Graph(3, [(0, 1), (1, 2), (2, 0)]) + self.assertTrue( + g.vcount() == 3 + and g.ecount() == 3 + and not g.is_directed() + and g.is_simple() + ) + + g = Graph(2, [(0, 1), (1, 2), (2, 3)], True) + self.assertTrue( + g.vcount() == 4 and g.ecount() == 3 and g.is_directed() and g.is_simple() + ) + + g = Graph([(0, 1), (1, 2), (2, 1)]) + self.assertTrue( + g.vcount() == 3 + and g.ecount() == 3 + and not g.is_directed() + and not g.is_simple() + ) + + g = Graph(((0, 1), (0, 0), (1, 2))) + self.assertTrue( + g.vcount() == 3 + and g.ecount() == 3 + and not g.is_directed() + and not g.is_simple() + ) + + g = Graph(8, None) + self.assertEqual(8, g.vcount()) + self.assertEqual(0, g.ecount()) + self.assertFalse(g.is_directed()) + + g = Graph(edges=None) + self.assertEqual(0, g.vcount()) + self.assertEqual(0, g.ecount()) + self.assertFalse(g.is_directed()) + + self.assertRaises(TypeError, Graph, edgelist=[(1, 2)]) \ No newline at end of file